1629295403-b876e2087bddebea4bc9666fb2377a02 (846199), страница 58
Текст из файла (страница 58)
О д н а к о т а к о е р е ш е н и е и м е е т о д н у ф у н д а м е н т а л ь н у ю проблему — университет вовсе не школа со специальными свойствами.В ы м о ж е т е с к а з а т ь : " Н у и ч т о ? Г л а в н о е , ч т о н а с л е д о в а н и е р а б о т а е т и э к о н о м и т нашиу с и л и я " . Д а , к о н е ч н о , э т о т а к , н о с к а з а н н о е в ы ш е — н е п р о с т о с т и л и с т и ч е с к а я тривиальн о с т ь . Т а к о е н е в е р н о е п р е д с т а в л е н и е м о ж е т в в е с т и в з а б л у ж д е н и е п р о г р а м м и с т а какс е й ч а с , т а к и в б у д у щ е м . В о д и н п р е к р а с н ы й д е н ь е м у , н е з н а к о м о м у с в а ш и м и фокусами,п р и д е т с я ч и т а т ь и р а з б и р а т ь с я в в а ш и х и с х о д н ы х т е к с т а х , и т а к о е н е в е р н о е представление может привести к неправильному пониманию программы.Крометого,неверноепредставлениеможетпривестикреальнымпроблемам.П р е д п о л о ж и м , ч т о в ш к о л е р е ш и л и в ы б и р а т ь л у ч ш е г о у ч е н и к а , и д л я э т о г о програм-298Часть IV.
Объектно-ориентированное программированиемист п р о с т о д о б а в л я е т в к л а с с H i g h S c h o o l м е т о д N a m e F a v o r i t e ( ) , у к а з ы в а ю щ и йимя т а к о г о у ч е н и к а .И вот — п р о б л е м а . В у н и в е р с и т е т е н е н а м е р е н ы о п р е д е л я т ь л у ч ш е г о с т у д е н т а , н ометод N a m e F a v o r i t e ( )оказываетсяунаследованным.Этом о ж е т п о к а з а т ь с я небольшой п р о б л е м о й — в к о н ц е к о н ц о в , э т о т м е т о д в к л а с с е U n i v e r s i t y м о ж н о просто и г н о р и р о в а т ь .Да, о д и н л и ш н и й м е т о д н е д е л а е т п о г о д ы , н о э т о е щ е о д и н к и р п и ч в с т е н е н е п о н и м а ния.
П о с т е п е н н о л и ш н и е ч л е н ы - д а н н ы е и м е т о д ы н а к а п л и в а ю т с я , и н а с т у п а е т м о м е н т ,когда в а ш к л а с с у ж е н е в с о с т о я н и и в ы н е с т и т а к о й б а г а ж . Н е с ч а с т н ы й п р о г р а м м и с т у ж ене понимает, к а к и е м е т о д ы " р е а л ь н ы " , а к а к и е — н е т .UML LiteУ н и ф и ц и р о в а н н ы й Я з ы к М о д е л и р о в а н и я (Unified M o d e l i n g L a n g u a g e , U M L )п р е д с т а в л я е т с о б о й в ы р а з и т е л ь н ы й я з ы к , с п о с о б н ы й я с н о о п р е д е л я т ь взаимоотношения о б ъ е к т о в в п р о г р а м м е . О д н о и з д о с т о и н с т в U M L з а к л ю ч а е т с я в т о м , ч т овы можете не з а в и с е т ь от к о н к р е т н о г о я з ы к а п р о г р а м м и р о в а н и я .Ниже п е р е ч и с л е н ы о с н о в н ы е с в о й с т в а U M L .Классы п р е д с т а в л е н ы п р я м о у г о л ь н и к а м и , р а з д е л е н н ы м и п о в е р т и к а л и н а т р и части.
И м я к л а с с а у к а з ы в а е т с я в в е р х н е й ч а с т и п р я м о у г о л ь н и к а .Члены-данные класса находятся в средней части, а методы — в нижней. М о ж н оопустить с р е д н ю ю и л и н и ж н ю ю ч а с т ь п р я м о у г о л ь н и к а , е с л и в к л а с с е н е т ч л е н о в данных и л и м е т о д о в .Члены с о з н а к о м п л ю с ( + ) п е р е д и м е н е м я в л я ю т с я о т к р ы т ы м и , с о з н а к о м м и н у с(-) — з а к р ы т ы м и . В U M L о т с у т с т в у е т с п е ц и а л ь н ы й з н а к д л я з а щ и щ е н н ы х ч л е н о в ,но некоторые программисты используют для обозначения таких членов символ #.Закрытые ч л е н ы д о с т у п н ы т о л ь к о д л я д р у г и х ч л е н о в т о г о ж е к л а с с а ; о т к р ы т ы ечлены д о с т у п н ы в с е м к л а с с а м .Метка { a b s t r a c t } п о с л е и м е н и у к а з ы в а е т а б с т р а к т н ы й к л а с с и л и м е т о д .На самом деле U M L использует для этого иное обозначение, но так мне кажетсяпроще.
В е д ь м ы и м е е м д е л о с у п р о щ е н н о й в е р с и е й — U M LLite.Стрелка м е ж д у двумя классами представляет о т н о ш е н и е м е ж д у н и м и . Ч и с л о над линией означает м о щ н о с т ь — сколько э л е м е н т о в м о ж е т б ы т ь с к а ж д о г о к о н ц а стрелки.Звездочка (*) означает произвольное число. Е с л и ч и с л о о п у щ е н о , по у м о л ч а н и ю предполагается значение 1.
Т а к и м о б р а з о м , на рис. 13.1 видно, ч т о о д и н университет м о ж е тиметь сколько угодно студентов — они связаны о т н о ш е н и е м один-ко-многим.Линия с б о л ь ш о й о т к р ы т о й и л и т р е у г о л ь н о й с т р е л к о й н а к о н ц е в ы р а ж а е т о т н о ш е ние Я В Л Я Е Т С Я ( н а с л е д о в а н и е ) . С т р е л к а у к а з ы в а е т в и е р а р х и и к л а с с о в н а б а з о в ы йкласс. Д р у г и е т и п ы в з а и м о о т н о ш е н и й в к л ю ч а ю т о т н о ш е н и е С О Д Е Р Ж И Т , к о т о р о еуказывается л и н и е й с з а к р а ш е н н ы м р о м б и к о м с о с т о р о н ы в л а д е л ь ц а .'Имеются и д р у г и е п р о б л е м ы . П р и н а с л е д о в а н и и , п о к а з а н н о м н а р и с .
13.2, к а к в и д н ои з схемы, к л а с с ы U n i v e r s i t y и H i g h S c h o o l и м е ю т о д н у и т у ж е п р о ц е д у р у зачисления. Как бы с т р а н н о э т о ни з в у ч а л о , б у д е м с ч и т а т ь , ч т о э т о т а к и е с т ь . П р о г р а м м а разработана, у п а к о в а н а и о т п р а в л е н а п о т р е б и т е л я м .Глава 13. Полиморфизм299Н е с к о л ь к и м и м е с я ц а м и п о з ж е м и н и с т е р с т в о п р о с в е щ е н и я р е ш а е т и з м е н и т ь правилаз а ч и с л е н и я в ш к о л ы , ч т о , в с в о ю о ч е р е д ь , п р и в о д и т к и з м е н е н и ю п р о ц е д у р ы зачисленаи в университеты, что, конечно же, неверно.К а к избежать у к а з а н н о й п р о б л е м ы ? П о н я т н о , ч т о ее к о р е н ь — в о т н о ш е н и я х классаУ н и в е р с и т е т не является ш к о л о й .
О т н о ш е н и е С О Д Е Р Ж И Т также не будет работать — неуж е л и университет с о д е р ж и т ш к о л у или ш к о л а — университет? К о н е ч н о ж е , нет. Решение»к л ю ч а е т с я в т о м , ч т о и ш к о л а , и университет — это с п е ц и а л ь н ы е т и п ы у ч е б н ы х заведений.Н а р и с .
13.3 п о к а з а н о б о л е е к о р р е к т н о е р е ш е н и е . Н о в ы й к л а с с S c h o o l содержито б щ и е с в о й с т в а д в у х т и п о в у ч е б н ы х з а в е д е н и й , в к л ю ч а я о т н о ш е н и я с о б ъ е к т а м и stud e n t . Б о л е е т о г о , к л а с с S c h o o l д а ж е и м е е т м е т о д E n r o l l ( ) , х о т я о н и абстрактны!поскольку и U n i v e r s i t y , и H i g h S c h o o l реализуют его по-разному.Рис.ны13.3.Классыиметь общийUniversity ибазовый классHighSchoolдолжSchoolТ е п е р ь к л а с с ы U n i v e r s i t y и H i g h S c h o o l н а с л е д у ю т о б щ и й б а з о в ы й класс.
Каждый изних содержит свои уникальные члены:H i g h S c h o o l — NameFavorite!),a U n i v e r s i t y — G e t G r a n t О . К р о м е того, о б а класса п е р е к р ы в а ю т м е т о д E n r o l l ( ) ,о п и с ы в а ю щ и й п р а в и л а з а ч и с л е н и я у ч а щ и х с я в р а з н ы е у ч е б н ы е з а в е д е н и я . По сути, здесьв ы д е л е н о о б щ е е п у т е м с о з д а н и я б а з о в о г о к л а с с а и з д в у х с х о ж и х к л а с с о в , к о т о р ы е послеэтого стали подклассами.Введение класса S c h o o l имеет как м и н и м у м два больших преимущества.1Это соответствует реальности. У н и в е р с и т е т я в л я е т с я у ч е б н ы м з а в е д е н и е м , но неш к о л о й . С о о т в е т с т в и е д е й с т в и т е л ь н о с т и — в а ж н о е , но не г л а в н о е преимущество.Это изолирует один класс от изменений или дополнений в другой класс.
Еслип о т р е б у е т с я , н а п р и м е р , в н е с т и д о б а в л е н и я в к л а с с U n i v e r s i t y , т о его новыеметоды никак не повлияют на класс H i g h S c h o o l .Процесс выделения общих свойств из схожих классов называетсяклассов(factoring).Этоважноесвойстворазложениемобъектно-ориентированныхя з ы к о в про-1г р а м м и р о в а н и я к а к п о о п и с а н н ы м в ы ш е п р и ч и н а м , т а к и с т о ч к и з р е н и я снижения!избыточности.300Часть IV. Объектно-ориентированное программироватьР а з л о ж е н и е к о р р е к т н о т о л ь к о в т о м с л у ч а е , к о г д а о т н о ш е н и я н а с л е д о в а н и я соответствуютдействительности.МожновыделятьобщиесвойстваклассовM o u s e и J o y s t i c k , п о с к о л ь к у о б а о н и п р е д с т а в л я ю т с о б о й у к а з а т е л ь н ы е устройства, но делать то же для классов M o u s e и D i s p l a y будет ошибкой.Разложение о б ы ч н о п р и в о д и т к н е с к о л ь к и м у р о в н я м а б с т р а к ц и и .
Н а п р и м е р , программа, о х в а т ы в а ю щ а я б о л е е ш и р о к и й к р у г ш к о л , м о ж е т и м е т ь с т р у к т у р у к л а с с о в , показанную на р и с . 13.4.Puc.13.4. Разложение классов обычно дает дополнительные уровни в иерархиинаследованияКак в и д и т е ,Learningивнесено два новых класса между U n i v e r s i t y иLowerLevel.Например,новыйклассSchool:HigherLearningHigher-делитсянаклассы C o l l e g e и U n i v e r s i t y .
Т а к а я м н о г о с л о й н а я и е р а р х и я — о б ы ч н о е и д а ж е желательное я в л е н и е п р и р а з л о ж е н и и , с о о т в е т с т в у ю щ е м р е а л ь н о м у м и р у .Заметим, о д н а к о , ч т о н и к а к о й т е о р и и р а з л о ж е н и я к л а с с о в н е с у щ е с т в у е т . Т а к , разложение н а р и с . 13.4 м о ж н о с ч и т а т ь в п о л н е к о р р е к т н ы м , н о е с л и п р о г р а м м а в б о л ь ш е йстепени с в я з а н а с в о п р о с а м и а д м и н и с т р и р о в а н и я у ч е б н ы х з а в е д е н и й м е с т н ы м и властями, то более е с т е с т в е н н о й б у д е т и е р а р х и я к л а с с о в , п р е д с т а в л е н н а я на р и с .