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

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


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

TelephoneType(rec[6])
154
telephoneDir.telephones.telephoneTypes.add(telephoneTypes[rec[6]])
155
if rec[0] not in telephones:
156
telephones[rec[0]] = Telephone(rec[0], telephoneTypes[rec[6]])
157
telephoneDir.telephones.add(telephones[rec[0]])
158
key = int(rec[1])
159
if key not in collaborators:
160
collaborators[key] = Collaborator(key, rec[2], rec[3], rec[4])
161
subdivision[rec[5]].add(collaborators[key])
162
telephoneDir.add(TelephoneRecord(telephones[rec[0]],
collaborators[key]))
163
164
for s in telephoneDir.subdivision.iterSubdivision():
165
if s.name == ’помощник проректора’:

166
for r in telephoneDir:
167
if r.collaborator in s and r.collaborator.family.find(’ск’) >= 0:
168
print r.telephone.number, "%s %s. %s."% \
169
(r.collaborator.family, r.collaborator.name[:2],
r.collaborator.patronym[:2])
170
break
171
172
for s in telephoneDir.subdivision.iterSubdivision():
173
if s.name == ’зав. кафедрой’:
174
for r in telephoneDir:
175
if r.collaborator in s and r.collaborator.family.find(’сс’) >= 0:
176
print r.telephone.number, "%s %s. %s."% \
177
(r.collaborator.family, r.collaborator.name[:2],
r.collaborator.patronym[:2])
178
break

Каждый модуль языка Python может быть использован в качестве головного, в этом случае значение переменной __name__ будет иметь значение ’__main__’ (см. строку 139).
Словарь subdivision будем использовать для хранения объектов, читаемых из файла ’subdivision1.csv’
Содержимое файла показано ниже.
"Саратовский госуниверситет";
"ректорат";"Саратовский госуниверситет"
"ректор";"ректорат"
"проректор";"ректорат"
"помощник ректора";"ректорат"
"зам. проректора";"ректорат"
"помощник проректора";"ректорат"

.

"мех/мат факультет";"Саратовский госуниверситет"
"деканат";"мех/мат факультет"
"декан";"деканат"
"зам. декана";"деканат"
"зав. кафедрой";"мех/мат факультет"

Файл имеет структуру csv (она описана в части 7 лекции). Первая часть записи название подразделения, а вторая его владельца. Естественно "Саратовский госуниверситет" не имеет владельца.
В строчках 143-148 происходит чтение из файла и построение структуры подразделений.
С помощью аналогичного подхода происходит разбор файла ’ssu1.csv’
структурой и заполнение телефонного справочника.

с представленной ниже

"26-16-96";1;"Коссович";"Леонид";"Юрьевич";"ректор";"раб"
"26-16-96";2;"Павлова";"Юлия";"Анатольевна";"помощник ректора";"раб"
"51-16-35";3;"Абрамейцева";"Валерия";"Владиславовна ";"помощник ректора";"раб"
"51-18-84";4;"Первушов";"Евгений";"Михайлович";"проректор";"раб"
"51-18-84";5;"Лосатинская";"Алла";"Сергеевна";"помощник проректора";"раб"
................................

В первом запросе, строки 164-170, среди сотрудников подразделения ’помощник проректора’ найти
телефоны сотрудников содержащих в фамилии словосочетание ’ск’. Второй запрос представлен на
строках 172-178. Результат работы программы представлен ниже.
51-57-39 Виноградский С. Г.
51-18-84 Лосатинская А. С.

В результате первый запрос вернул два телефона, а второй не одного.

tsu
p
e
«daS
»
tdiy
e
t
e
(
)
a
llab
l
h
l
h
t
o
o
r
a
o
r
r
o
p
e
p
o
n
e
e
p
o
n
e
p
e
u
y
C
s
G
s
T
s
T
T
s
b
t
o
a
o
r
a
o
r
C
d
e
l
h
e
p
o
n
e
itqrosleynh(y_)m
T
l
h
e
p
o
n
e
p
e
y
f_cnpaaehm
b
T
T
m
e
r
u
r
o
p
u
n
G
m
e
t
n
a
e
y
m
e
p
h
n
a
s
(_) _ehq_sh(_)()_ehqa_sh(_)() _eq_h(_)()

0.2.3 Развитие постановки задачи

Диаграмма прецедентов остается без изменений. Диаграмма классов лучше разбить на две.

Поскольку сотрудники могут одновременно входить в разные подразделения, заменим Subdivision
на Group. Также Subdivision образовывали иерархическую структуру, а Group нет, поэтому для

организации хранения введем множество групп Groups. Из предыдущего решения задачи видно,
что Collaborators, TelephoneTypes, Telephones и теперь и Groups обладают общими свойствами и
поведением, а именно все они множества с запретом на добавление элемента если он уже там
есть. Поэтому они могут быть порождены от общего класса Suite (Набор), который в свою очередь
порожден от стандартного типа языка Python set. Атрибуты и операции классов уже описаны в
предыдущей задаче.

d
t
a
p
e
y
»
«
t
e
s
h
i
T
D
o
n
e
lcgeaoredualpp(hbp
t+
o)srn:aeitnsor:ntri
orators G
roups TelphonesTelphoneTypes
Coollaab
l
h
b
T
t
e
p
o
n
e
o
r
a
o
r
C
l
h
T
T
e
p
o
n
e
p
e
y
d
i
b
i
t
t
c+
e
n
n
m
e
r
u
:fnpa_am
:
i
t
n
a
m
e
:
rehqaoesuh:p
itehrqoaleynshy:_m
ty_peheqa:sihn_t() +
i_n(t) +
n_aG
m
in(t):int+
_ehqash_()
h
d
T+
R
o
n
e
e
c
o
r
i
tcge_orllehuap
t
b
rqapsh:_iant(o):rn
o

Изменения, по сравнению с предыдущей задачей , коснулись в основном классов TelephoneRecord, TelephoneDir. Это связано с тем, что теперь запись в телефоном справочнике представляет
собой набор из телефона, сотрудника и группы. Соответственно TelephoneDir содержит Telephones,
Collaborators и Groups.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# -*- coding: utf-8 -*"""
Телефонная книга организации
"""
class