Объектно-ориентированный анализ и проектирование (400-608) - 2013

Page 1

п р и н ц и п ы проект ирования

ОСР шаг за шагом Давайте вернемся к тому, что мы сделали в главе 5, и последовательно рассмотрим происходящее в контексте ОСР.

ф

Мы запрограммировали метод matches() в InstrumentSpec. java и закрыли его для изменения. Эта версия m atches () прекрасно работает, и мы не хотим, чтобы кто-нибудь с ней экспериментировал. Другими словами, после того, как мы запрограммируем I n s tr u m e n tS p e c и эту версию m atch es ( ) , они не должны изменяться. InstrumentSpec model: String getBuilder(): Builder getModel(): String getType(): Type getBackWood(): Wood getTopWood(): Wood

м етод работ ает , -н и к т о н е Эолжен

matches(lnstrumentSpec): boolean

Но нам понадобилось изменить modify matches() для классов конкретных инструментов. Хотя метод m atches () прекрасно работает с другими объектами In stru m en tS p ec, для гитар и мандолин он делает не совсем то, что нужно. Хотя метод m a tch es () закрыт для корректировки, нам понадобится механизм его расширения и изменения... Иначе класс In str u m e n tS p e c окажется негибким, а это плохо.

О

И тогда мы расширили класс InstrumentSpec и переопреде­ лили matches() для изменения его поведения. Изменение кода Instrum entSpec недопустимо, но мы можем расширить его в классах G u ita r S p e c и M andolin Spec, а затем переопределить m atches () во всех этих классах для добавления поведения, присущего конкретным инструментам. GuitarSpec InstrumentSpec model: String getBuilder(): Builder getModelf): String getType(): Type getBackWood(): Wood getTopWood(): Wood matches(lnstrumentSpec): boolean

numStrings: int getNumStrings(): int

matches(GuitarSpec): boolean

Мы не изменяем исходную версию matckesQ...

...а расширяем Instrum entSpec и п о л у ­ чаем новое поведение. дальш е

401


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.