п р и н ц и п ы проект ирования
ОСР шаг за шагом Давайте вернемся к тому, что мы сделали в главе 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