Основы объектно-ориентированного программирования [Ю. А. Блинков] (pdf) читать постранично, страница - 3

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

и

вне объектной среды, да и сама статическая типизация применяется в языках, не поддерживающих
ООП, особенно ярко эти идеи проявили себя именно при объектном подходе, во многом основанном
на понятии типа, которое, сливаясь с понятием модуля, образует базовую ОО-конструкцию - класс.
Этому посвящена пятнадцатый раздел.
Локальных знаний не достаточно - компонентам ПО необходима глобальная информация: разделяемые данные, общее окно для вывода ошибок, шлюз для подключения к базе данных или сети. В
классическом подходе достаточно объявить такой объект глобальной переменной главной программы. В ОО-системах нет ни главной программы, ни глобальных переменных. Но разделяемые (shared)
объекты по-прежнему нужны. Этим разделом заканчивается пособие.

Практическое задание
0.1 Оценка
Для получения зачета по практике (оценка ’3’) необходимо полностью владеть кодом примера решения задачи «Телефонный справочник» и для своей предметной области разработать и описать
• Первоначальная постановка задачи
– Диаграмму прецедентов.
– Структуру классов.
• Развитие постановки задачи
– Диаграмму прецедентов.
– Структуру классов.
Для получения по практике оценки ’4’, в дополнении к зачету по практике, необходимо сделать
реализацию первоначальной постановки задачи и развития постановки задачи в объеме примера
«Телефонный справочник».

Для получения по практике оценки ’5’ необходимо реализовать набор запросов предоставляемых
преподавателем.
В следующем семестре такие же «Описания предметной области» будут использованы на практических занятиях за курсом “Базы данных”.

0.2 Пример решения задачи «Телефонный справочник»
0.2.1 Описание предметной области
Вашей задачей является создание телефонного справочника организации.
Организация имеет различные подразделения. Каждое из них может иметь собственные подотделы. Один сотрудник может иметь несколько телефонных номеров и, наоборот, один телефон могут
иметь несколько сотрудников. Необходимо создать справочник для поиска по подразделениям (подотделам), сотрудникам и телефонам.
Классы объектов
Сотрудники (Фамилия, Имя, Отчество).
Подразделения (Наименование, Сотрудники, Подотделы).
Типы телефонов (Наименование).
Телефоны (Телефон, Типа телефона, Сотрудник).

Развитие постановки задачи
Нужно учесть, что один сотрудник может работать в разных подразделениях. Например сотрудники в
подразделении «ответственные за пожарную безопасность» работают и в других подразделениях (по
основному месту работы).

П
ф
о
с
е
о
о
с
р
а
о
е
и
к
в
т
л
н
м
п
в
ч
н
и
к
Пользователь

0.2.2 Первоначальная постановка задачи

Диаграмма прецедентов содержит только один прецедент “Поиск в телефонном справочнике”. Поиск
должен осуществляться по подразделениям (подотделам), сотрудникам и телефонам.

Диаграмма классов значительно сложнее.

l
h
e
p
o
n
e
p
e
y
T
T
l
h
a
m
e
«datsetype» Tade()poneTypes_neihqts_h()
l
h
e
p
o
n
e
T
l
h
t
ir _taeTdilnep(tl)_hop(n)heoTnyeps _eeihnqapts_ho(n)eTyp
T_tsaueibnldp(t)_hipvoh(n)oienseD
uadtse_bivhod(sr)iavitonsrsion fCcnaom
l
h
d
R
e
p
o
n
e
e
c
o
r
T
a_csnuoeihSlbnm
l
b
t
a
o
r
a
o
r
h
t
o
e
p
n
d
e
b
t
o
a
r
a
r
c
i
y
h
(
)
s
_
_
e
q
t
r
o
m
p
n
q
i
(
)
_aitdeitrS(r)_ub()divsion() _ehqas_h

Класс Collaborator имеет атрибуты:
code — код сотрудника, это необходимо при одинаковых “ФИО” сотрудников или, например, при
изменении фамилии сотрудника;
family — фамилия;
name — имя;
patronym — отчество.
Операции класса это:
__init__ — конструктор класса, в данном случае он необходим поскольку его атрибуты нужно
инициализировать;
__hash__ — определение этой функции позволяет использовать объект класса в качестве элемента
словарей и множеств;
__eq__ — поскольку хэш представляет отображение элементов некоторого множества в конечное
множество чисел, обычно это числа умещающиеся в машинное слово, то необходимо разрешать
так называемые коллизии. В случае коллизии два разных объекта имеют одинаковое значение
функции __hash__ и __eq__ позволяет различить эти объекты.
Подразделения представлены классом Subdivision, который имеет следующие атрибуты:
name — название подразделения;
collaborators — множество его сотрудников;

subdivisions — множество его собственных подразделений.
Операции класса это также состоят из конструктора, операций __hash__ и __eq__ поскольку подразделение может быть в качестве элемента множества subdivisions, а также других операций:
__iter__ — итератор для просмотра всех сотрудников подразделения, включая и сотрудников его
собственных подразделений;
add — для добавления сотрудника к подразделению;
addSubdivision — для добавления к подразделению другого подразделения в качестве его собственного подразделения;
iterSubdivision — итератор для просмотра его собственных подразделений.
Оставшиеся элементы диаграммы классов