14.02.2017 Views

. Стиллмен, Дж. Грин - Изучаем C#, 2-е издание

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

н<strong>е</strong> тратьт<strong>е</strong> золото, <strong>е</strong>сли нуж<strong>е</strong>н только бл<strong>е</strong>ск<br />

Насл<strong>е</strong>довани<strong>е</strong><br />

Классы D i n n e r P a r t y и B i r t h d a y P a r t y н<strong>е</strong> случайно им<strong>е</strong>ют одинаковый код. При написании программ<br />

<strong>C#</strong> часто создаются классы, соотв<strong>е</strong>тствующи<strong>е</strong> проц<strong>е</strong>ссам из р<strong>е</strong>ального мира, и эти проц<strong>е</strong>ссы, как правило,<br />

связаны друг с другом. Ваши классы им<strong>е</strong>ют одинаковый код, так как проц<strong>е</strong>ссы, взяты<strong>е</strong> за их основу<br />

(дни рожд<strong>е</strong>ния и званы<strong>е</strong> об<strong>е</strong>ды), им<strong>е</strong>ют одинаковы<strong>е</strong> признаки.<br />

рассчитать<br />

стоимость<br />

м<strong>е</strong>роприятия<br />

DinnerParty<br />

NumberOfPeople ^<br />

CostOTOecorations .........<br />

HealthyOption<br />

CostOffieveragesPerPerson<br />

К э т л и н в обоих<br />

случаях нужно Ч CalcuiateCostOTOecorationsO ^<br />

( _CalculateCost() ^<br />

SetHealthyOptionO<br />

BirthdayParty<br />

►МитЬ<strong>е</strong>ЮГР<strong>е</strong>орІ<strong>е</strong><br />

►СозЮГО<strong>е</strong>согаІіопз<br />

CakeSize<br />

CakeWriting<br />

►CalculateCostOTOecorationsO<br />

►CalculateCostO<br />

Колич<strong>е</strong>ство<br />

гост<strong>е</strong>й и ст ой-<br />

Mocmi? оформл<strong>е</strong>ния<br />

для дн<strong>е</strong>й<br />

рожд<strong>е</strong>ния обрабатываются<br />

п о ч -<br />

•VI« так ж<strong>е</strong>, как<br />

званы<strong>е</strong> об<strong>е</strong>ды.<br />

Збаны<strong>е</strong> об<strong>е</strong>ды u дни |)о;кд<strong>е</strong>ния о тн о с я тся к п|>и<strong>е</strong>мам<br />

Если сущ<strong>е</strong>ствуют н<strong>е</strong>сколько классов, являющихся частными случаями другого, бол<strong>е</strong><strong>е</strong> общ<strong>е</strong>го класса,<br />

можно заставить их насл<strong>е</strong>довать от этого класса. При этом они становятся классами, производными<br />

(subclass) от базового (base class).<br />

Колич<strong>е</strong>ство приглаш<strong>е</strong>н- ,<br />

ных и стоимость оформл<strong>е</strong>ния<br />

нужно знать для<br />

при<strong>е</strong>ма любого типа, поэтому<br />

данны<strong>е</strong> парм<strong>е</strong>тры<br />

нужно пом<strong>е</strong>стить в базовый<br />

класс.<br />

Party<br />

Numl)eЮfPeople<br />

CostOTOecorations<br />

CalculateCostOTOecorationsO<br />

CalculateCostO _______<br />

Н<strong>е</strong>смотря на сходство,<br />

окончат<strong>е</strong>льная стоимость<br />

каждого при<strong>е</strong>ма<br />

рассчитыва<strong>е</strong>тся<br />

у^-разноми. Поэтому<br />

сходны<strong>е</strong> пов<strong>е</strong>д<strong>е</strong>ния логично<br />

пом<strong>е</strong>стить в базовый<br />

класс, а отличны<strong>е</strong> —<br />

в производны<strong>е</strong> классы.<br />

С<br />

Стр<strong>е</strong>лка в диаграмм<strong>е</strong><br />

указыва<strong>е</strong>т,<br />

что класс<br />

DinnerParty<br />

унасл<strong>е</strong>дован<br />

от класса Party.<br />

Оба производных<br />

класса насл<strong>е</strong>Эуют<br />

проц<strong>е</strong>дуру<br />

DinnerParty расч<strong>е</strong>та стои­ BirthdayParty<br />

NumberOfPeople мости оформ­ NumberOfPeople<br />

HealthyOption л<strong>е</strong>ния от ба­ CakeSize<br />

CostOffieveragesPerPerson зового класса, CakeWriting<br />

поэтому<br />

О,, /?<br />

она<br />

CalculateCostQ 0 них н<strong>е</strong> вклю ­ CalculateCostQ 6z-----------------<br />

SetHealthyOptionO ч<strong>е</strong>на.<br />

242 глава 6

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!