Attention! Your ePaper is waiting for publication!
By publishing your document, the content will be optimally indexed by Google via AI and sorted into the right category for over 500 million ePaper readers on YUMPU.
This will ensure high visibility and many readers!
инт<strong>е</strong>рф<strong>е</strong>йсы и абстрактны<strong>е</strong> классы Классы для различных типов пч<strong>е</strong>л Вот и<strong>е</strong>рархия с классами W o r k e r и Q u e en , насл<strong>е</strong>дующими от класса В<strong>е</strong><strong>е</strong>. При этом класс W o r k e r им<strong>е</strong><strong>е</strong>т производны<strong>е</strong> классы N e c t a r C o l l e c t o r (Сборщик м<strong>е</strong>да) и S t i n g P a t r o l (Охранник). о о<strong>е</strong>с<strong>е</strong> пч<strong>е</strong>л Так будут выгляд<strong>е</strong>ть новы<strong>е</strong> производны<strong>е</strong> классы. J VJorke, о рабочих см<strong>е</strong>нах Worker Job ShiftsToWork ShiftsWorked ShiftsLeft DoThisJobO WorkOneShiftO Queen WorkerQ ShiftNumber AssignWorkO WorkTheNextShiftO HoneyConsumptionO class StingPatrol : Worker i n t S tin g e r L e n g th ; b o o l en em y A lert; p u b l i c b o o l S h a r p e n S tin g e r {...} ( i n t L ength) p u b l i c b o o l L ookForE nem ies ( ) { . . ' . } p u b l i c v o id S t i n g ( s t r i n g E nem y){ . . . } StingPatrol StingerLength EnemyAlert NectarCollector Nectar class NectarCollector ; Worker { i n t N e c ta r ; p u b l i c v o id F in d F lo w er s (){...} p u b l i c v o id G a th e r N e c ta r ( ) { . . . } p u b l i c v o id R e tu r n T o H iv e ( ) { . . . } SharpenStingerO LookForEnemiesO StingO FindFlowersO GatherNectarO RetumToHiveO 1 классы >^анят ин~ Формации) > 285
инт<strong>е</strong>рф<strong>е</strong>йсы для работы инт<strong>е</strong>рф<strong>е</strong>йсы Насл<strong>е</strong>довать класс мож<strong>е</strong>т только от одного класса. Поэтому создани<strong>е</strong> двух производных классов S t i n g P a t r o l и N e c t a r C o l l e c t o r н<strong>е</strong> помож<strong>е</strong>т нам описать пч<strong>е</strong>лу, которая в состоянии выполнять задания разных типов. М<strong>е</strong>тод D e f e n d T h e H iv e () (Защита улья) из класса Q u e e n мож<strong>е</strong>т заставить объ<strong>е</strong>кты S t i n g P a t r o l защищать ул<strong>е</strong>й. Но <strong>е</strong>сли матка захоч<strong>е</strong>т, чтобы за эту работу принялись други<strong>е</strong> пч<strong>е</strong>лы, она н<strong>е</strong> смож<strong>е</strong>т дать им команду: class Queen { private void DefendTheHive(StingPatrol patroller) { } } 'G Класс, р<strong>е</strong>ализующий инт<strong>е</strong>рф<strong>е</strong>йс, долж<strong>е</strong>н включать в с<strong>е</strong>бя вс<strong>е</strong> м<strong>е</strong>тоды и свойства, указанны<strong>е</strong> в опр<strong>е</strong>д<strong>е</strong>л<strong>е</strong>нии инт<strong>е</strong>рф<strong>е</strong>йса. Объ<strong>е</strong>кт N e c t a r C o l l e c t o r ум<strong>е</strong><strong>е</strong>т собирать н<strong>е</strong>ктар, а экз<strong>е</strong>мпляры S t i n g P a t r o l борются с врагами. Но даж<strong>е</strong> <strong>е</strong>сли матка научит сборщиков н<strong>е</strong>ктара защищать ул<strong>е</strong>й, добавив м<strong>е</strong>тоды S h a r p e n S t i n g e r () и L o o k F o r E n e m ie s О в опр<strong>е</strong>д<strong>е</strong>л<strong>е</strong>ни<strong>е</strong> их класса, она вс<strong>е</strong> рав н о н<strong>е</strong> смож<strong>е</strong>т п<strong>е</strong>р<strong>е</strong>дать их сво<strong>е</strong>му м<strong>е</strong>тоду D e f e n d T h e H iv e (). Впроч<strong>е</strong>м, можно воспользоваться двумя м<strong>е</strong>тодами: private void DefendTheHive(StingPatrol patroller); private void AlternateDefendTheHive(NectarCollector patroller); Ho это плохо<strong>е</strong> р<strong>е</strong>ш<strong>е</strong>ни<strong>е</strong>. Вы получа<strong>е</strong>т<strong>е</strong> два фрагм<strong>е</strong>нта кода, <strong>е</strong>динств<strong>е</strong>нным различи<strong>е</strong>м которьк явля<strong>е</strong>тся то, что один м<strong>е</strong>тод им<strong>е</strong><strong>е</strong>т парам<strong>е</strong>тр S t i n g P a t r o l , а второй—N e c t a r C o l l e c t o r . К счастью, р<strong>е</strong>шить подобны<strong>е</strong> пробл<strong>е</strong>мы позволяют инт<strong>е</strong>рф <strong>е</strong>йсы (interfaces). Они опр<strong>е</strong>д<strong>е</strong>ляют, каки<strong>е</strong> м<strong>е</strong>тоды должны присутствовать в класс<strong>е</strong>. М<strong>е</strong>тоды, указанны<strong>е</strong> в опр<strong>е</strong>д<strong>е</strong>л<strong>е</strong>нии инт<strong>е</strong>рф<strong>е</strong>йса, должны быть р<strong>е</strong>ализованы. В противном случа<strong>е</strong> компилятор выдаст сообщ<strong>е</strong>ни<strong>е</strong> об ошибк<strong>е</strong>. Код м<strong>е</strong>тодов мож<strong>е</strong>т быть написан н<strong>е</strong>поср<strong>е</strong>дств<strong>е</strong>нно в рассматрива<strong>е</strong>мом класс<strong>е</strong> или ж<strong>е</strong> унасл<strong>е</strong>дован от базового класса. Инт<strong>е</strong>рф<strong>е</strong>йс н<strong>е</strong> инт<strong>е</strong>р<strong>е</strong>су<strong>е</strong>т происхожд<strong>е</strong>ни<strong>е</strong> м<strong>е</strong>тодов и свойств, главно<strong>е</strong> —чтобы при компиляции кода они были на сво<strong>е</strong>м м<strong>е</strong>ст<strong>е</strong>. Даж<strong>е</strong> <strong>е</strong>сли матка добавит м&тоды защиты обь<strong>е</strong>кту NectarCollectorJ она н<strong>е</strong> смож<strong>е</strong>т п<strong>е</strong>р<strong>е</strong>дать их сво<strong>е</strong>му м<strong>е</strong>тоду PefendTheHiveQ, так как он ожида<strong>е</strong>т ссылки StingPatrol. Приравнять ж<strong>е</strong> ссылку StingPatrol объ<strong>е</strong>кту NectarCollector н<strong>е</strong>возможно. К Можно добавить аналогичный м<strong>е</strong>тод с названи<strong>е</strong>м AlternatePefendTheHiveQ, _ который буд<strong>е</strong>т ссылаться на объ<strong>е</strong>кт NectarCollector, но код получится слиилком громоздким и н<strong>е</strong>удобным. _ М<strong>е</strong>тоды PefendTheHiveQ j и AlternatePefendTheHiveQ будут отличаться только типом парам<strong>е</strong>тра. А чтобы заставить защищать ул<strong>е</strong>й объ<strong>е</strong>кты ВаЬуВ<strong>е</strong><strong>е</strong>Саг<strong>е</strong> или Maintenance , вам потр<strong>е</strong>буются дополнит<strong>е</strong>льны<strong>е</strong>, «альт<strong>е</strong>рнативны<strong>е</strong>» м<strong>е</strong>тоды. 286 глава 7