ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2019
Просмотров: 6271
Скачиваний: 39
оз н‡ ч‡ ет, что кл‡сс это „о объ ек т‡ е ‡ ли зу ет ‚се опе ‡ ции этих ин те фей -
со‚. К ‰‡н но му мо мен ту ‚ „о ло ‚е чи т‡ те л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
‡ же ни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
хо ‰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
Д臄‡мм‡ кл‡ссо‚: купным пл‡ном
1. Н‡й ‰и те ‡т и бу ты, опе ‡ ции и обfl з‡н но с ти, об щие ‰лfl ‰‚ух или
бо лее кл‡с со‚ из ‰‡н ной со ‚о куп но с ти. Это поз ‚о лит из бе ж‡ть не -
нуж но „о ‰уб ли о ‚‡ ниfl стук ту ы и функ ци о н‡ль но с ти объ ек то‚.
2. Вы не си те эти эле мен ты ‚ не ко то ый об щий су пе кл‡сс, ‡ ес ли
т‡ ко „о не су ще ст ‚у ет, то со 片й те но ‚ый кл‡сс.
3. От меть те ‚ мо ‰е ли, что по‰ кл‡с сы н‡ сле ‰у ют сfl от су пе кл‡с с‡,
ус т‡ но ‚и‚ меж ‰у ни ми от но ше ние обоб ще ниfl.
А ‚от и пи ме пи ме не ниfl это „о по‰ хо ‰‡ (ис. 3.9):
Н‡ пе ‚ый ‚з„лfl‰, к‡ жет сfl ст‡н ным, что кл‡сс «точ ꇻ не име ет ни -
к‡ ких ‡т и бу то‚, ‡ ку„ име ет толь ко ‡ ‰и ус. С пfl мо у„оль ни ком, ‚о ‰е
бы, ‚се по нflт но — ши и н‡ и ‚ы со т‡, но ‚от толь ко „‰е он ‡с по ло жен ‚
по ст ‡н ст ‚е, этот пfl мо у„оль ник? Д‡ ‚‡й те по по бу ем сле ‰о ‚‡ть со ‚е -
т‡м Бу ч‡. Ит‡к, по ло же ние ‚сех тех фи „у мож но о‰ но зн‡ч но оп е ‰е -
Кус
64
UML: Пе‚ое зн‡комст‚о
Рис. 3.8
Рис. 3.9
лить с по мо щью п‡ ы чи сел. Дл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
Д臄‡мм‡ кл‡ссо‚: купным пл‡ном