- •Введение
- •Оценка
- •Описание предметной области
- •Первоначальная постановка задачи
- •Объектная модель и её реализация
- •База данных
- •Развитие постановки задачи
- •Объектная модель и её реализация
- •Набор заданий
- •Страховая компания
- •Гостиница
- •Ломбард
- •Реализация готовой продукции
- •Ведение заказов
- •Бюро по трудоустройству
- •Нотариальная контора
- •Курсы по повышению квалификации
- •Определение факультативов для студентов
- •Распределение учебной нагрузки
- •Распределение дополнительных обязанностей
- •Техническое обслуживание станков
- •Туристическая фирма
- •Грузовые перевозки
- •Учет телефонных переговоров
- •Учет внутриофисных расходов
- •Библиотека
- •Прокат автомобилей
- •Выдача банком кредитов
- •Инвестирование свободных средств
- •Занятость актеров театра
- •Платная поликлиника
- •Анализ динамики показателей финансовой отчетности различных предприятий
- •Учет телекомпанией стоимости прошедшей в эфире рекламы
- •Интернет-магазин
- •Ювелирная мастерская
- •Парикмахерская
- •Химчистка
- •Сдача в аренду торговых площадей
- •Основные понятия технологии проектирования информационных систем
- •Контрольные вопросы
- •Жизненный цикл программного обеспечения ИС
- •Контрольные вопросы
- •Организация разработки ИС
- •Каноническое проектирование ИС
- •Состав и содержание технического задания (ГОСТ 34.602-89)
- •Содержание технического проекта (ГОСТ 34.602-89)
- •Типовое проектирование ИС
- •Экстремальное программирование
- •Теория
- •Правила
- •Контрольные вопросы
- •Анализ и моделирование функциональной области внедрения ИС
- •Полная бизнес-модель компании
- •Шаблоны организационного бизнес-моделирования
- •Контрольные вопросы
- •Спецификация функциональных требований к ИС
- •Процессные потоковые модели
- •Основные элементы процессного подхода
- •Выделение и классификация процессов
- •Референтная модель бизнес-процесса
- •Проведение предпроектного обследования предприятий
- •Результаты предпроектного обследования
- •Контрольные вопросы
- •Методологии моделирования предметной области
- •Структурная модель
- •Синтетическая методика
- •Контрольные вопросы
- •Информационное обеспечение ИС
- •Внемашинное информационное обеспечение
- •Внутримашинное информационное обеспечение
- •Контрольные вопросы
- •Моделирование информационного обеспечения
- •Моделирование данных
- •Создание логической модели данных
- •Проектирование хранилищ данных
- •Контрольные вопросы
- •Унифицированный язык визуального моделирования (UML)
- •Синтаксис и семантика основных объектов UML
- •Контрольные вопросы
- •Этапы проектирования ИС с применением UML
- •Разработка модели бизнес-прецедентов
- •Разработка модели бизнес-объектов
- •Разработка концептуальной модели данных
- •Разработка требований к системе
- •Разработка моделей базы данных и приложений
- •Проектирование физической реализации системы
- •Контрольные вопросы
- •Литература
- •Список иллюстраций
- •Список таблиц
- •Предметный указатель
0.2.3 Развитие постановки задачи
Диаграмма прецедентов остается без изменений. Диаграмму классов лучше разбить на две.
Поскольку сотрудники могут одновременно входить в разные подразделения, заменим Subdivision на Group. Также Subdivision образовывали иерархическую структуру, а Group нет, поэтому для
организации хранения введем множество групп Groups. Из предыдущего решения задачи видно, что Collaborators, TelephoneTypes, Telephones и теперь и Groups обладают общими свойствами и поведением, а именно все они множества с запретом на добавление элемента если он уже там есть. Поэтому они могут быть порождены от общего класса Suite (Набор), который в свою очередь порожден от стандартного типа языка Python set. Атрибуты и операции классов уже описаны в предыдущей задаче.
Объектная модель и её реализация
Изменения, по сравнению с предыдущей задачей, коснулись в основном классов TelephoneRecord,
TelephoneDir. Это связано с тем, что теперь запись в телефоном справочнике представляет собой набор из телефона, сотрудника и группы. Соответственно TelephoneDir содержит Telephones,
Collaborators и Groups.
1 # -*- coding: utf-8 -*-
2
3 """
4 Телефонная книга организации
5 """
6
7 class Suite(set):
8"""
9 Множество с запретом на добавление элементов
10уже содержащихся в нём
11"""
12def add(self, elt):
13assert elt not in self
14set.add(self, elt)
16class Collaborator:
17"""
18Сотрудник
19"""
20def __init__(self, code, family, name, patronym):
21self.code = code
22self.family = family
23self.name = name
24self.patronym = patronym
26def __hash__(self):
27return hash(self.code)
28
29def __eq__(self, other):
30return self.code == other.code
32class Collaborators(Suite):
33"""
34Сотрудники
35"""
36pass
37
38class Group:
39"""
40Группа сотрудников
41"""
42def __init__(self, name):
43self.name = name
44
45def __hash__(self):
46return hash(self.name)
47
48def __eq__(self, other):
49return self.name == other.name
51class Groups(Suite):
52"""
53Группы
54"""
55pass
56
57class TelephoneType:
58"""
59Тип телефона
60"""
61def __init__(self, name):
62self.name = name
63
64def __hash__(self):
65return hash(self.name)
66
67def __eq__(self, other):
68return self.name == other.name
70class TelephoneTypes(Suite):
71"""
72Типы телефонов
73"""
74pass
75
76class Telephone:
77"""
78Телефон
79"""
80def __init__(self, telephone, telephoneType):
81self.number = telephone
82self.type = telephoneType
83
84def __hash__(self):
85return hash(self.number)
86
87def __eq__(self, other):
88return self.number == other.number
90class Telephones(set):
91"""
92Телефоны
93"""
94def __init__(self, telephoneTypes):
95set.__init__(self)
96self.telephoneTypes = telephoneTypes
98def add(self, telephone):
99assert telephone not in self
100assert telephone.type in self.telephoneTypes
101set.add(self, telephone)
102
103class TelephoneRecord:
104"""
105Запись в телефонном справочнике
106"""
107def __init__(self, telephone, collaborator, group):
108self.telephone = telephone
109self.collaborator = collaborator
110self.group = group
111
112def __hash__(self):
113return hash((self.telephone, self.collaborator, self.group))
115def __eq__(self, other):
116return self.telephone == other.telephone and \
117 |
self.collaborator == other.collaborator and \ |
118 |
self.group == other.group |
119 |
|
120class TelephoneDir(set):
121"""
122Телефонный справочник
123"""
124def __init__(self, telephones, collaborators, groups):
125set.__init__(self)
126self.telephones = telephones
127self.collaborators = collaborators
128self.groups = groups
129
130def add(self, telephoneRecord):
131assert telephoneRecord.telephone in self.telephones
132assert telephoneRecord.collaborator in self.collaborators
133assert telephoneRecord.group in self.groups
134assert telephoneRecord not in self
135set.add(self, telephoneRecord)
136
137 if __name__ == ’__main__’: 138 import tdcsv
139
140 telephoneDir = tdcsv.load()
141
142for r in telephoneDir:
143if r.group.name == ’помощник проректора’ and r.collaborator.family.find(’ск’) >= 0:
144print r.telephone.number, "%s %s. %s."% \
145 (r.collaborator.family, r.collaborator.name[:2], r.collaborator.patronym[:2])
146
147for r in telephoneDir:
148if r.group.name == ’зав. кафедрой’ and r.collaborator.family.find(’сс’)
>= 0:
149print r.telephone.number, "%s %s. %s."% \
150 |
(r.collaborator.family, r.collaborator.name[:2], |
r.collaborator.patronym[:2])
Заметно, что один и тот же сотрудник может быть членом различных групп. Поэтому работа запросов дала немного другой результат.
51-57-39 Виноградский С. Г.
51-18-84 Лосатинская А. С.
26-16-96 Коссович Л. Ю.
Сработал и второй запрос.