Готовое ДЗ
Описание файла
Документ из архива "Готовое ДЗ", который расположен в категории "". Всё это находится в предмете "технологии разработки программного обеспечения (по)" из 10 семестр (2 семестр магистратуры), которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "технологии разработки по" в общих файлах.
Онлайн просмотр документа "Готовое ДЗ"
Текст из документа "Готовое ДЗ"
МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
им. Н.Э. Баумана
Кафедра «Системы обработки информации и управления»
ОТЧЕТ
Домашнее задание по курсу
Технологии разработки ПО
Предметная область:
«Составление расписания»
ИСПОЛНИТЕЛЬ: | |
студентка группы ИУ5-17 | |
Котович Мария | ________________
|
ПРЕПОДАВАТЕЛЬ:
Виноградова М.В.,
к.т.н., доцент
Москва – 2016
__________________________________________________________
Содержание
Цель работы 3
Порядок и время проведения работы 3
Задание 3
Предметная область 3
Предварительные диаграммы классов 4
Предварительные диаграммы последовательностей 4
Диаграммы классов подсистем 7
Диаграммы последовательностей 8
Исходный код 9
TableModule 9
DataMapper 11
MapperEntities 12
Views 13
Выводы 13
Цель работы
Изучить основные паттерны проектирования, их особенности и область применения. Получить практические навыки программирования паттернов. Освоить технологию включения паттернов в собственную программу.
Порядок и время проведения работы
Работа выполняется самостоятельно в часы внеаудиторных занятий. По итогам составляется и защищается отчет в бумажном виде, а также проводится демонстрация работающей программы.
Задание
-
Разработать программу на основе темы, выданной преподавателем (по варианту).
-
Реализовать в программе паттерны (по варианту) бизнес-логики и работы с БД.
-
Составить набор диаграмм классов и последовательностей, которые демонстрируют структуру и поведение программы.
-
Отдельно составить диаграммы классов и последовательностей для иллюстрации примененных паттернов.
Предметная область
Система: Составление расписания.
Подсистема: Отображение расписания (по группам, дисциплинам, преподавателям). Выбор группы/преподавателя из списка.
Паттерны:
-
Модуль таблицы (бизнес-логика);
-
Преобразователь данных (обращение к БД).
Предварительные диаграммы классов
Рис. 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):