Файл: Бабич UML первое знакомство.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 05.12.2019

Просмотров: 6217

Скачиваний: 38

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

оз н‡ ч‡ ет,  что  кл‡сс  это „о  объ ек т‡  е ‡ ли зу ет  ‚се  опе ‡ ции  этих  ин те фей -
со‚. К ‰‡н но му мо мен ту ‚ „о ло ‚е чи т‡ те лfl мо жет со зеть ‚о пос: «Мы же,
‚о ‰е бы, „о ‚о и ли о кл‡с с‡х и объ ек т‡х, ‡ те пеь ‚‰у„ пе е шли н‡ ин те -
фей сы. Д‡ и ‚о об ще, ис поль зу ют сfl ли они ‚ п‡к ти ке по „‡м ми о ‚‡ ниfl
или  fl‚ лfl ют сfl  по сто  изflщ ной  те о е ти че с кой  кон ст ук ци ей?».  От ‚ет  н‡
этот  ‚о пос  пост:  мно „ие  из  су ще ст ‚у ю щих  тех но ло „ий  по „‡м ми о ‚‡ -
ниfl (н‡ пи ме, COM, CORBA, Java Beans) не толь ко ‡к ти‚ но ис поль зу ют
ме х‡ низм ин те фей со‚, но и, по су ти, пол но стью ос но ‚‡ ны н‡ нем.

Что  ж,  н‡ ‚е ное,  пи шло  ‚е мfl  по „о ‚о ить  о  том,  к‡к  ин те фейс

изо б ‡ ж‡ ет сfl н‡ ‰и ‡ „‡м м‡х. Изо б ‡ ж‡ть сfl он мо жет не сколь ки ми спо -
со б‡ ми.  Пе ‚ый  и  с‡ мый  по стой  из  них  —  это  кл‡сс  со  сте ео ти пом

<<interface>> 

(ис. 3.3):

Этот  спо соб  хо ош,  ес ли  нуж но  по к‡ з‡ть,  к‡ кие  имен но  опе ‡ ции

пе ‰о ст‡‚ лfl ет ин те фейс. Ес ли же т‡ кие по ‰об но с ти ‚ ‰‡н ный мо мент
не ‚‡ж ны, пе ‰о ст‡‚ лfl е мый ин те фейс изо б ‡ ж‡ ют ‚ ‚и ‰е ку жоч к‡ или,
к‡к „о ‚о flт, «ле ‰ен ц‡» (lollipop) (ис. 3.4):

Об ‡ ти те ‚ни м‡ ние н‡ м‡ лень кий зн‡ чок н‡ з‡ к뇉 ке п‡п ки ConduitSet.

Это обо зн‡ че ние по‰ си с те мы, мы мо„ ли бы не и со ‚‡ть е„о, ‡ по сто ис поль -
зо ‚‡ть сте ео тип <<subsystem>>. Впо чем, об этом мы еще по „о ‚о им.

И н‡ ко нец, еще о‰ин спо соб изо б ‡ же ниfl ин те фей с‡. Он не fl‚ лfl -

ет сfl ‡ль те н‡ ти ‚ой опи с‡н ным ‡ нее спо со б‡м, ‡ ис поль зу ет сfl ‰лfl изо б -

61

Лекциfl 3

Д臄‡мм‡ кл‡ссо‚: купным пл‡ном

Рис. 3.3

Рис. 3.4

Рис. 3.5


background image

‡ же ниfl ин те фей со‚, 

те бу ю щих сfl

объ ек ту ‰лfl ‚ы пол не ниfl е„о ‡ бо ты.

Обо зн‡ ч‡ ет сfl он очень по стым и ло „ич ным сим ‚о лом. Впо чем, су ‰и те

с‡ ми (ис. 3.5):

Н‡ блю ‰‡ тель ный  чи т‡ тель  уже,  н‡ ‚е ное,  з‡ ме тил,  к‡к  ло „и че с ки

со‚ ме щ‡ ют сfl  сим ‚о лы  пе ‰о ст‡‚ лfl е мо „о  и  те бу е мо „о  ин те фей со‚.
Дей ст ‚и тель но, н‡ ‰и ‡ „‡м м‡х ‰о ‚оль но ч‡ с то мож но у‚и ‰еть т‡ кую к‡ -
тин ку (ис. 3.6):

Д‡,  кст‡ ти,  ‚ы  з‡ ме ти ли,  чт퇠炇 ниfl  ин те фей со‚  н‡ чи н‡ ют сfl  с

бук ‚ы 

I

? Эт‡ т‡ ‰и циfl по ш л‡ из flзы к‡ Java, и, к‡к по к‡ зы ‚‡ ет п‡к ти к‡,

он‡ ‚есь м‡ об ле„ ч‡ ет жизнь, ес ли нуж но, н‡ пи ме, бы с т о ‡ зо б‡ть сfl ‚
слож ной ‰и ‡ „‡м ме, со ст‡‚ лен ной ‰у „им че ло ‚е ком.

Все „‰‡ ли нуж но со з‰‡ ‚‡ть но ‚ые кл‡с сы?
Н‡ч нем с ‚о по с‡, к‡ з‡ лось бы, не име ю ще „о ни к‡ ко „о от но ше ниfl к

‡с см‡ т и ‚‡ е мо му ‚о по су, ‡ имен но — ‚се „‰‡ ли нуж но со з‰‡ ‚‡ть но ‚ый
кл‡сс ‰лfl к‡ж ‰ой но ‚ой з‡ ‰‡ чи? П‡ ‚иль ный от ‚ет, ко неч но же, «нет». Это
бы ло бы ст‡н но и не эф фек ти‚ но. «Фиш к‡» со сто ит ‚ том, что мы мо жем
ис поль зо ‚‡ть уже су ще ст ‚у ю щие кл‡с сы, ‡‰‡п ти уfl их функ ци о н‡ль ность
‰лfl  ‚ы пол не ниfl  но ‚ых  з‡ ‰‡ч.  Т‡ ким  об ‡ зом  по fl‚ лfl ет сfl  ‚оз мож ность  не
со з‰‡ ‚‡ть  си с те му  кл‡с со‚  с  ну лfl,  ‡  з‡ ‰ей ст ‚о ‚‡ть  уже  име ю щи е сfl  е ше -
ниfl, ко то ые бы ли со з‰‡ ны ‡ нее, пи ‡ бо те н‡‰ пе ‰ы ‰у щи ми по ек т‡ -
ми. Впо чем, н‡ ше ‚ы ск‡ зы ‚‡ ние о ст‡н но с ти и не эф фек ти‚ но с ти со з‰‡ -
ниfl  но ‚ых  кл‡с со‚  не  fl‚ лfl ет сfl  ис ти ной  ‚  по сле‰ ней  ин ст‡н ции.  Мо „ут
быть си ту ‡ ции, ко„ ‰‡ су ще ст ‚у ю щие кл‡с сы по к‡ ким-ли бо пи чи н‡м не
ус т ‡ и ‚‡ ют  ‡ хи тек то ‡,  и  то„ ‰‡  те бу ет сfl  со з‰‡ть  но ‚ый  кл‡сс.  Сле ‰у ет,
о‰ н‡ ко, из бе „‡ть си ту ‡ ций, ко„ ‰‡ со з‰‡н ный кл‡сс (‡ точ нее, е„о н‡ бо опе -
‡ ций и ‡т и бу то‚) п‡к ти че с ки по ‚то fl ет су ще ст ‚у ю щий, лишь не зн‡ чи -
тель но от ли ч‡ flсь от не „о. Все-т‡ ки луч ше не изо б е т‡ть ‚е ло си пе‰ и ст‡ -
‡ть сfl со з‰‡ ‚‡ть кл‡с сы н‡ ос но ‚е уже су ще ст ‚у ю щих, и толь ко ес ли по‰ -

Кус

62

UML: Пе‚ое зн‡комст‚о

Рис. 3.6

Рис. 3.7


background image

хо ‰fl щих  кл‡с со‚  не  н‡ шлось  —  со з‰‡ ‚‡ть  с‚ои,  ко то ые,  ‚  с‚ою  оче е‰ь,
мо „ут (и ‰олж ны!) слу жить ос но ‚ой ‰лfl ‰у „их кл‡с со‚. Мы уже не „о ‚о им
о том, что со з‰‡ ние кл‡с со‚ пе‰ по л‡ „‡ ет зн‡ чи тель ный объ ем уси лий по
ко ‰и о ‚‡ нию  и  те с ти о ‚‡ нию.  В  об щем  слу ч‡е,  ск‡ з‡н ное  ‚ы ше  мож но
по ил лю с т и о ‚‡ть т‡ кой ‰и ‡ „‡м мой (ис. 3.7):

В  ‰о пол не ние  мож н퇠炇ть  не сколь ко  пи чин,  по че му  сто ит  ис -

поль зо ‚‡ть уже су ще ст ‚у ю щие кл‡с сы:

Во-пе ‚ых,  и‰fl  этим  пу тем,  мы  поль зу ем сfl  пло ‰‡ ми  ‡ нее  пи -
нfl тых  е ше ний.  Дей ст ‚и тель но,  ес ли  ко„ ‰‡-то  мы  уже  е ши ли
не ко то ую по бле му, з‡ чем н‡ чи н‡ть ‚се «с ну лfl», по ‚то flfl уже
о‰ н‡ж ‰ы по ‰е л‡н ные ‰ей ст ‚иfl?

Во-‚то ых, т‡ ким об ‡ зом мы ‰е л‡ ем е ше ние мо биль ным и ‡с -
ши fl е мым.  Ис поль зуfl  уже  су ще ст ‚у ю щие  кл‡с сы  и  со з‰‡ ‚‡fl  н‡
их ос но ‚е но ‚ые, мы мо жем ‡з ‚и ‚‡ть е ше ние п‡к ти че с ки не о -
„‡ ни чен но,  ‰о б‡‚ лflfl  лишь  не об хо ‰и мые  н‡м  ‚  ‰‡н ный  мо мент
‰е т‡ ли — ‡т и бу ты и опе ‡ ции.

В-те ть их,  су ще ст ‚у ю щие  кл‡с сы,  к‡к  п‡ ‚и ло,  хо о шо  от л‡ же -
ны и по к‡ з‡ ли се бfl ‚ ‡ бо те. Р‡з ‡ бот чи ку не н‡ ‰о т‡ тить ‚е мfl
н‡  ко ‰и о ‚‡ ние,  от л‡‰ ку,  те с ти о ‚‡ ние  и  т.  ‰.,  —  мы  ‡ бо т‡ ем  с
хо о шо  от л‡ жен ным  и  по ‚е ен ным  ‚е ме нем  ко ‰ом,  ко то ый
з‡ е ко мен ‰о ‚‡л се бfl ‚ ‰у „их по ек т‡х и ‚ ко то ом уже ‚ы fl‚ ле но
и ис п‡‚ ле но боль шин ст ‚о оши бок.

А те пеь ‚ни м‡ ние — мы мно „о „о ‚о и ли о том, что нуж но со з‰‡ ‚‡ть

кл‡с сы н‡ ос но ‚е уже су ще ст ‚у ю щих, но т‡к и не ск‡ з‡ ли ни сло ‚‡ о том,
к‡к это с‰е л‡ть. Пи шло ‚е мfl ‚не сти flс ность ‚ этот ‚о пос. Тем с‡ мым
мы по‰ би ‡ ем сfl к по нfl тию 

обоб ще ниfl

или 

„е не ‡ ли з‡ ции

, ко то ое и„ ‡ ет

очень  ‚‡ж ную  оль  ‚  ООП,  fl‚ лfl flсь  о‰ ним  из  е„о  б‡ зо ‚ых  пин ци по‚.

Обоб ще ние

— это от но ше ние меж ‰у бо лее об щей сущ но с тью, н‡ зы ‚‡ е мой

су пе кл‡с сом

,  и  ее  кон кет ным  ‚о пло ще ни ем,  н‡ зы ‚‡ е мым 

по‰ кл‡с сом

.

Ино „‰‡ обоб ще ние н‡ зы ‚‡ ют от но ше ни fl ми ти п‡ «fl‚ лfl ет сfl», имеfl ‚ ‚и ‰у,
что о‰ ни сущ но с ти (н‡ пи ме, ку„, к‚‡ ‰ ‡т, те у „оль ник) fl‚ лfl ют сfl ‚о -
пло ще ни ем  бо лее  об щей  сущ но с ти  (н‡ пи ме,  кл‡с с‡  «„е о ме т и че с к‡fl
фи „у ‡»). Пи этом ‚се ‡т и бу ты и опе ‡ ции су пе кл‡с с‡ не з‡ ‚и си мо от
мо ‰и фи к‡ то о‚ ‚и ‰и мо с ти ‚хо ‰flт ‚ со ст‡‚ по‰ кл‡с с‡.

Обоб ще ние  (или,  к‡к  ч‡ с то  „о ‚о flт,  н‡ сле ‰о ‚‡ ние)  н‡  ‰и ‡ „‡м м‡х

обо зн‡ ч‡ ет сfl очень по сто — не з‡ к‡ шен ной те у „оль ной стел кой, н‡ -
п‡‚ лен ной ‚ н‡ п‡‚ ле нии су пе кл‡с с‡ (ис. 3.8).

Длfl то „о что бы н‡ учить сfl эф фек ти‚ но мо ‰е ли о ‚‡ть н‡ сле ‰о ‚‡ ние,

об ‡ тим сfl  к  кл‡с си к‡м,  ‡  имен но  к  Г. Бу чу.  Он  со ‚е ту ет  по ‚о ‰ить  эту
по це ‰у у ‚ т‡ кой по сле ‰о ‚‡ тель но с ти:

63

Лекциfl 3

Д臄‡мм‡ кл‡ссо‚: купным пл‡ном


background image

1. Н‡й ‰и те ‡т и бу ты, опе ‡ ции и обfl з‡н но с ти, об щие ‰лfl ‰‚ух или

бо лее кл‡с со‚ из ‰‡н ной со ‚о куп но с ти. Это поз ‚о лит из бе ж‡ть не -
нуж но „о ‰уб ли о ‚‡ ниfl стук ту ы и функ ци о н‡ль но с ти объ ек то‚.

2. Вы не си те  эти  эле мен ты  ‚  не ко то ый  об щий  су пе кл‡сс,  ‡  ес ли

т‡ ко „о не су ще ст ‚у ет, то со з‰‡й те но ‚ый кл‡сс.

3. От меть те  ‚  мо ‰е ли,  что  по‰ кл‡с сы  н‡ сле ‰у ют сfl  от  су пе кл‡с с‡,

ус т‡ но ‚и‚ меж ‰у ни ми от но ше ние обоб ще ниfl.

А ‚от и пи ме пи ме не ниfl это „о по‰ хо ‰‡ (ис. 3.9):
Н‡ пе ‚ый ‚з„лfl‰, к‡ жет сfl ст‡н ным, что кл‡сс «точ к‡» не име ет ни -

к‡ ких ‡т и бу то‚, ‡ ку„ име ет толь ко ‡ ‰и ус. С пfl мо у„оль ни ком, ‚о ‰е
бы, ‚се по нflт но — ши и н‡ и ‚ы со т‡, но ‚от толь ко „‰е он ‡с по ло жен ‚
по ст ‡н ст ‚е,  этот  пfl мо у„оль ник?  Д‡ ‚‡й те  по по бу ем  сле ‰о ‚‡ть  со ‚е -
т‡м  Бу ч‡.  Ит‡к,  по ло же ние  ‚сех  тех  фи „у  мож но  о‰ но зн‡ч но  оп е ‰е -

Кус

64

UML: Пе‚ое зн‡комст‚о

Рис. 3.8

Рис. 3.9


background image

лить с по мо щью п‡ ы чи сел. Длfl точ ки — это ‚о об ще е‰ин ст ‚ен ные ее х‡ -
‡к те и с ти ки,  ‰лfl  к󠄇  и  пfl мо у„оль ни к‡  —  их  цен т ы  (по‰  цен т ом
пfl мо у„оль ни к‡  мы  по ни м‡ ем  точ ку  пе е се че ниfl  е„о  ‰и ‡ „о н‡ лей).  Вот
они, об щие ‡т и бу ты! Т‡ ким об ‡ зом, мы со з‰‡ ли су пе кл‡сс «Фи „у ‡»,
име ю щий  ‰‚‡  ‡т и бу т‡  —  ко о ‰и н‡ ты  цен т ‡.  Все  ос т‡ль ные  кл‡с сы  н‡
этой ‰и ‡ „‡м ме с‚fl з‡ ны с кл‡с сом «Фи „у ‡» от но ше ни ем обоб ще ниfl, т. е.
‚  них  нуж но  ‰о опе ‰е лить  толь ко  «не ‰о ст‡ ю щие»  ‡т и бу ты  —  ‡ ‰и ус,
ши и ну и ‚ы со ту. Ат и бу ты, опи сы ‚‡ ю щие ко о ‰и н‡ ты цен т ‡, эти кл‡с -
сы име ют из н‡ ч‡ль но к‡к по том ки кл‡с с‡ «Фи „у ‡» — они их н‡ сле ‰у ют.
З‡ ме тим, что опе ‡ ции кл‡с со‚ мы тут не ‡с см‡ т и ‚‡ ем: по нflт но, что с
ни ми бы л‡ бы т‡ же ис то иfl.

Т‡к, с н‡ сле ‰о ‚‡ ни ем ‚о ‰е бы ‡ зо б‡ лись. Пи шло ‚е мfl ‰лfl м‡ -

лень кой по ‚о к‡ ции с н‡ шей сто о ны. Кл‡с сы-по том ки ‚е‰ь н‡ сле ‰у ют
‡т и бу ты и опе ‡ ции су пе кл‡с с‡? Т‡ ким об ‡ зом, они мо „ут н‡ сле ‰о ‚‡ть
и  их  ин те фей сы  —  то  есть  объ ек ты  ‡б со лют но  ‡з ной  пи о ‰ы  мо „ут
иметь о‰ин и тот же ин те фейс! Т‡к к‡к же то„ ‰‡ оп е ‰е лить, к‡ ко „о же
‚се-т‡ ки кл‡с с‡ объ ект? Д‡ и нуж но ли это ‚о об ще?

Дей ст ‚и тель но, объ ек ты ‡з ной пи о ‰ы (или „о ‚о fl по ще, ‡з ных

кл‡с со‚)  мо „ут  по‰ ‰е жи ‚‡ть  о‰ин  и  тот  же  ин те фейс  имен но  т‡к,  к‡к
то „о  ожи ‰‡ ет  поль зо ‚‡ тель.  Пи ме ом  то му  мо жет  слу жить  ‡с смо т ен -
н‡fl  ‚ы ше  ‰и ‡ „‡м м‡  с  „е о ме т и че с ки ми  фи „у ‡ ми.  Все  ‡с смо т ен ные
фи „у ы  име ют,  н‡ пи ме,  опе ‡ цию  и со ‚‡ ниfl  н‡  эк ‡ не.  С  точ ки  зе -
ниfl поль зо ‚‡ те лfl ‚ к‡ж ‰ом слу ч‡е это о‰ но и то же ‰ей ст ‚ие. О‰ н‡ ко е -
‡ ли зо ‚‡ ны эти опе ‡ ции по-‡з но му — ‚е‰ь по це ‰у ‡ изо б ‡ же ниfl пfl -
мо у„оль ни к‡ силь но от ли ч‡ ет сfl от по ‰об ной по це ‰у ы ‰лfl к󠄇. Но ‰лfl
поль зо ‚‡ те лfl это не ‚‡ж но: ‚е‰ь си„ н‡ ту ‡-то о‰ н‡ и т‡ же! А ‚оз мож но это
бл‡ „о ‰‡ fl  еще  о‰ но му  из  ос но‚ ных  пин ци по‚  ООП  — 

по ли мо физ му

.

К‡к мы толь ко что упо мfl ну ли, ‡ бо т‡ ме х‡ низ м‡ по ли мо физ м‡ ос но ‚‡ -
н‡ н‡ со‚ п‡ ‰е нии си„ н‡ ту ы ме то ‰‡, объ fl‚ лен но „о ‚ ин те фей се, и си„ н‡ -
ту ы с‡ мо „о ме то ‰‡. Ме то ‰ы ‚ну т и кл‡с со‚-по том ко‚ мо „ут быть (и н‡ -
‚е нfl к‡ бу ‰ут!) пе е опе ‰е ле ны, их е ‡ ли з‡ ции бу ‰ут ‡з лич ны ми, ‡ си„ -
н‡ ту ы ос т‡ нут сfl не из мен ны ми. Т‡ ким об ‡ зом (и ‚ этом ле„ ко ощу тить
мощь ООП), ‚ы пол нflfl о‰ ни и те же опе ‡ ции, ‡з ные объ ек ты мо „ут ‚е -
с ти се бfl по-‡з но му.

По ли мо физм fl‚ лfl ет сfl ос но ‚ой ‰лfl е ‡ ли з‡ ции ме х‡ низ м‡ ин те -

фей со‚ ‚ flзы к‡х по „‡м ми о ‚‡ ниfl. Вот, кст‡ ти, и от ‚ет н‡ ‚о пос, к‡ -
ко „о  кл‡с с‡  объ ект:  к‡к  толь ко  поль зо ‚‡ тель  об ‡ щ‡ ет сfl  к  не ко то ой
опе ‡ ции  че ез  ин те фейс,  оп е ‰е лfl ет сfl  ф‡к ти че с кий  кл‡сс  объ ек т‡  и
‚ы зы ‚‡ ет сfl со от ‚ет ст ‚у ю щ‡fl опе ‡ циfl кл‡с с‡. Пи ме ы по ли мо физ м‡
мож но  у‚и ‰еть  ‚  с‡ мых  обы ‰ен ных  ‚е щ‡х,  ко то ы ми  мы  поль зу ем сfl  ‚
по ‚се‰ не‚ ной жиз ни. О„ лfl ни тесь ‚о ку„ — ми по ст о ен по ООП, М‡ т -
и ц‡ ‡ бо т‡ ет! Н‡ пи ме, ‚сем пи ‚ыч н‡fl ке ‰ит н‡fl к‡ точ к‡, fl‚ лfl flсь

65

Лекциfl 3

Д臄‡мм‡ кл‡ссо‚: купным пл‡ном