Готовое ДЗ

2017-12-22СтудИзба

Описание файла

Документ из архива "Готовое ДЗ", который расположен в категории "". Всё это находится в предмете "технологии разработки программного обеспечения (по)" из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "технологии разработки по" в общих файлах.

Онлайн просмотр документа "Готовое ДЗ"

Текст из документа "Готовое ДЗ"

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

им. Н.Э. Баумана



Кафедра «Системы обработки информации и управления»





ОТЧЕТ

Домашнее задание по курсу

Технологии разработки ПО

Предметная область:

«Составление расписания»










ИСПОЛНИТЕЛЬ:

студентка группы ИУ5-17

Котович Мария

________________



"__"______2016 г.   



ПРЕПОДАВАТЕЛЬ:

Виноградова М.В.,

к.т.н., доцент




Москва – 2016

__________________________________________________________

Содержание

Цель работы 3

Порядок и время проведения работы 3

Задание 3

Предметная область 3

Предварительные диаграммы классов 4

Предварительные диаграммы последовательностей 4

Диаграммы классов подсистем 7

Диаграммы последовательностей 8

Исходный код 9

TableModule 9

DataMapper 11

MapperEntities 12

Views 13

Выводы 13





Цель работы

Изучить основные паттерны проектирования, их особенности и область применения. Получить практические навыки программирования паттернов. Освоить технологию включения паттернов в собственную программу.

Порядок и время проведения работы

Работа выполняется самостоятельно в часы внеаудиторных занятий. По итогам составляется и защищается отчет в бумажном виде, а также проводится демонстрация работающей программы.

Задание

  1. Разработать программу на основе темы, выданной преподавателем (по варианту).

  2. Реализовать в программе паттерны (по варианту) бизнес-логики и работы с БД.

  3. Составить набор диаграмм классов и последовательностей, которые демонстрируют структуру и поведение программы.

  4. Отдельно составить диаграммы классов и последовательностей для иллюстрации примененных паттернов.

Предметная область

Система: Составление расписания.

Подсистема: Отображение расписания (по группам, дисциплинам, преподавателям). Выбор группы/преподавателя из списка.

Паттерны:

  • Модуль таблицы (бизнес-логика);

  • Преобразователь данных (обращение к БД).

Предварительные диаграммы классов



Рис. 1. Предварительная диаграмма классов

На данной диаграмме реализованы классы подсистемы без паттернов.

Предварительные диаграммы последовательностей

Рис. 2. Предварительная диаграмма последовательностей, реализующая выдачу дисциплин

Рис. 3. Предварительная диаграмма последовательностей, реализующая выдачу групп

Рис. 4. Предварительная диаграмма последовательностей, реализующая выдачу учителей

Рис. 5. Предварительная диаграмма последовательностей, реализующая выдачу расписания

Диаграммы классов подсистем

В соответствии с вариантом подсистемы, паттернами бизнес-логики и работы с БД были разработаны классы, представленные на рисунке 6.



Рис. 6. Диаграмма классов подсистем



Особенностями реализации является то, что для каждой из тематических групп классов были выделены 2 специальных класса, это – классы Mapper и Module. Первый используется, как промежуточный слой между базой данных и объектами программы, делая их тем самым независимыми друг от друга. Также к функциям Mapper’а относится передача данных между объектами и базой данных. Классы TM выделены под паттерн Table Module. В соответствии с этим паттерном в решение вводится дополнительный класс(-ы), в который помещается вся бизнес-логика, относящаяся к некоторой предметной области.



Диаграммы последовательностей



Рис. 7. Диаграмма последовательностей реализующая выдачу дисциплин



Рис. 8. Диаграмма последовательностей реализующая выдачу групп



Рис. 9. Диаграмма последовательностей реализующая выдачу учителей



Рис. 10. Диаграмма последовательностей реализующая выдачу расписания



Исходный код

TableModule

class TeacherModule(object):

@staticmethod

def get_all_teachers():

return TeacherMapper.show_teachers()



@staticmethod

def get_teachers_choices():

teachers = TeacherMapper.show_teachers()

choices = ((t.uid, t.name) for t in teachers.teachers)

return choices



@staticmethod

def get_teacher_by_name(name):

return TeacherMapper.filter_by_name(name)



@staticmethod

def get_teacher_by_uid(uid):

return TeacherMapper.filter_by_uid(uid)





class GroupModule(object):

@staticmethod

def get_all_groups():

return GroupMapper.show_groups()



@staticmethod

def get_group_by_index(index):

return GroupMapper.filter_by_index(index)



@staticmethod

def get_groups_choices():

groups = GroupMapper.show_groups()

choices = ((t.uid, t.index) for t in groups.groups)

return choices



@staticmethod

def get_group_by_uid(uid):

return GroupMapper.filter_by_uid(uid)





class DisciplineModule(object):

@staticmethod

def get_all_disciplines():

return DisciplineMapper.show_disciplines()



@staticmethod

def get_discipline_by_name(name):

return DisciplineMapper.filter_by_name(name)



@staticmethod

def get_disciplines_choices():

disc = DisciplineMapper.show_disciplines()

choices = ((t.uid, t.name) for t in disc.disciplines)

return choices



@staticmethod

def get_discipline_by_uid(uid):

return DisciplineMapper.filter_by_uid(uid)





class TimetableModule(object):

@staticmethod

def get_all_timetable():

tt_days = []



groups = GroupModule.get_all_groups()

groups_count = len(groups.groups)



for i in range(6):

tt_days.append([])

for k in range(groups_count):

tt_days[i].append([])

objs = TimetableMapper.filter_by_day(i)

for obj in objs.timetables:

tt_days[i][obj.group.uid-1].append(obj)



return tt_days



@staticmethod

def get_timetable_by_teacher(teacher):

tt_days = []



teachers = TeacherModule.get_all_teachers()

teachers_count = len(teachers.teachers)



for i in range(6):

tt_days.append([])

for k in range(teachers_count):

tt_days[i].append([])

objs = TimetableMapper.filter_by_day(i)

for obj in objs.timetables:

tt_days[i][obj.teacher.uid - 1].append(obj)



return tt_days



@staticmethod

def get_timetable_of_groupid(uid):

tt_days = []



t = TimetableMapper.filter_by_group(uid)



for i in range(6):

tt_days.append([])

for obj in t.timetables:

tt_days[obj.day].append(obj)



return tt_days



@staticmethod

def get_timetable_of_teacherid(uid):

tt_days = []



t = TimetableMapper.filter_by_teacher(uid)



for i in range(6):

tt_days.append([])

for obj in t.timetables:

tt_days[obj.day].append(obj)



return tt_days



@staticmethod

def get_timetable_by_discipline(discipline):

return TimetableMapper.filter_by_discipline(discipline.uid)



@staticmethod

def get_timetable_by_cabinet(number):

return TimetableMapper.filter_by_cabinet(number)



@staticmethod

def get_timetable_of_discid(uid):

tt_days = []



t = TimetableMapper.filter_by_discipline(uid)



for i in range(6):

tt_days.append([])

for obj in t.timetables:

tt_days[obj.day].append(obj)



return tt_days



DataMapper



class TeacherMapper(object):

@staticmethod

def show_teachers():

teachers = Teacher.objects.all()

return TeacherSet(teachers)



@staticmethod

def filter_by_uid(uid):

teacher = Teacher.objects.get(id=uid)

return TeacherObj(teacher)



@staticmethod

def filter_by_name(name):

teachers = Teacher.objects.filter(name=name)

return TeacherSet(teachers)



@staticmethod

def filter_by_phone(phone):

teacher = Teacher.objects.get(phone=phone)

return TeacherObj(teacher)



@staticmethod

def filter_by_address(address):

teacher = Teacher.objects.get(address=address)

return TeacherObj(teacher)



@staticmethod

def filter_by_name(status):

teachers = Teacher.objects.filter(status=status)

return TeacherSet(teachers)





class GroupMapper(object):

@staticmethod

def show_groups():

groups = Group.objects.all()

return GroupSet(groups)



@staticmethod

def filter_by_uid(uid):

group = Group.objects.get(id=uid)

return GroupObj(group)



@staticmethod

def filter_by_index(index):

group = Group.objects.get(index=index)

return GroupObj(group)





class DisciplineMapper(object):

@staticmethod

def show_disciplines():

disciplines = Discipline.objects.all()

return DisciplineSet(disciplines)



@staticmethod

def filter_by_uid(uid):

d = Discipline.objects.get(id=uid)

return DisciplineObj(d)



@staticmethod

def filter_by_name(name):

d = Discipline.objects.get(name=name)

return DisciplineObj(d)





class TimetableMapper(object):

@staticmethod

def show_timetable():

timetables = Timetable.objects.all()

return TimetableSet(timetables)



@staticmethod

def filter_by_teacher(uid):

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5160
Авторов
на СтудИзбе
439
Средний доход
с одного платного файла
Обучение Подробнее