Файл: Объектно ориентированный подход Мэтт Вайсфельд 5е международное издание ббк 32. 973. 2018.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 03.02.2024

Просмотров: 141

Скачиваний: 5

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
251
Принципы.объектно-ориентированной.разработки.SOLID. .
классом для издания шума. На самом деле класс
Cat вместо создания экземпля- ра поведения издания звуков должен принимать поведение через внедрение.
Шаг 3: внедрение зависимостей
На этом завершающем этапе мы полностью отбросим все, что связано с насле- дованием при проектировании, и изучим, как применять внедрение зависимо- стей посредством композиции. Не нужно использовать иерархии наследования, которые являются одной из главных причин, почему концепция композиции против наследования становится все более актуальной. Проще скомпоновать подтип, чем создавать его из иерархической модели.
К примеру, в изначальной реализации классов
Cat и
Dog в основном лежит один и тот же код; они просто возвращают разный шум. Получается так, что значи- тельная часть кода избыточна. Таким образом, если бы требовалось создать много различных млекопитающих, требовалось бы написать много кода для издания звуков.
Может быть и так, что лучшим решением будет вынести код издания звуков из класса
Mammal
По большому счету, скачок при таком проектировании будет заключаться в том, что теперь можно не привязываться к определенным млекопитающим (классы
Cat и
Dog
), а просто использовать класс
Mammal
, как показано ниже:
class Mammal
{
MakingNoise speaker;
public Mammal (MakingNoisesb)
{
this.speaker = sb;
}
public String makeNoise()
{
return this.speaker.makeNoise() ;
}
}
Теперь можно создать экземпляр поведения издания звуков классом
Cat и пре- доставить его классу
Animal для создания млекопитающего, поведения которо- го подобно поведению класса
Cat
. На самом деле всегда можно собрать класс
Cat с помощью внедрения поведений вместо того, чтобы использовать тради- ционные
Mammal cat = new Mammal(new CatNoise());
Ниже можно увидеть завершающий шаг — все приложение полностью:

Глава.12..Принципы.объектно-ориентированного.проектирования
252
public class TestMammal {
public static void main(String args[]) {
System.out.printIn("Hello World\n") ;
Mammal cat = new Mammal (new CatNoise());
Mammal dog = new Mammal (new DogNoise());
System.out.printIn("Cat says " + cat.makeNoise());
System.out.printIn("Dog says " + dog.makeNoise()) ;
}
}
class Mammal
{
MakingNoise speaker;
public Mammal (MakingNoisesb)
{
this.speaker = sb;
}
public String makeNoise()
{
return this.speaker.makeNoise() ;
}
}
interface MakingNoise
{
public String makeNoise();
}
class CatNoise implements MakingNoise
{
public String makeNoise()
{
return "Meow" ;
}
}
class DogNoise implements MakingNoise
{
public String makeNoise()
{
return "Bark";
}
}
При обсуждении внедрения зависимостей важным является то, когда на самом деле создается экземпляр объекта. Несмотря на то что цель состоит в составле- нии объектов с помощью внедрения, очевидно, в какой-то момент придется создавать экземпляры объектов. В результате принятие решений при проекти- ровании основано на том, в какой момент создавать такой экземпляр.


253
Ссылки. .
Как говорилось ранее в этой главе, цель инверсии зависимостей состоит в том, чтобы создать связь класса с чем-то абстрактным, а не конкретным, даже если очевидно, что на каком-то этапе придется создать конкретный объект. Поэтому единственной простой целью ставим создание конкретного объекта (с помощью ключевого слова new
) вверх по цепочке как можно дальше как, например, в ме- тоде main()
. Всегда оценивайте обстановку, когда видите ключевое слово new
Заключение
На этом мы завершаем обсуждение принципов SOLID. Принципы SOLID — это на сегодняшний день один из самых влиятельных наборов методических реко- мендаций для объектно-ориентированного проектирования. Интересно в изуче- нии этих принципов то, как они соотносятся с фундаментальными концепция- ми объектно-ориентированного проектирования, такими как инкапсуляция, наследование, полиморфизм и композиция, особенно в рамках спора компози- ции против наследования.
По моему мнению, наиболее интересное, что можно вынести из принципов
SOLID, — ничего не нужно урезать и ужимать. Как очевидно из обсуждения проблемы композиции против наследования, даже застарелые фундаментальные концепции объектно-ориентированного программирования открыты для новых интерпретаций. Как мы уже увидели, немного времени наряду с эволюцией различных соответствующих мыслительных процессов приносят инновациям пользу.
Ссылки
Мартин Роберт с соавт. «Гибкая разработка программного обеспечения: прин- ципы, паттерны и практики» (Agile Software Development, Principles, Patterns, and Practices). Бостон: Pearson Education, Inc., 2009
Мартин Р. Чистый код: создание, анализ и рефакторинг. Библиотека програм- миста. — СПб.: Питер, 2018. — 464 с.: ил.

ОБ ОБЛОЖКЕ
Cover image © SOMRERK WITTHAYANANT/ Shutterstock
Королевский павильон Хо Кхам Луанг находится в самом сердце Королевского парка Раджапрук (Чиангмай, Таиланд). Был построен в 2006 году к 60-й годов- щине восхождения на трон Пхумипона Адульядета.
Несущая конструкция выполнена без единого гвоздя, и все сооружение держит- ся на деревянных креплениях. Парящая крыша с многоярусной черепицей яв- ляется отличительной чертой королевских павильонов древнего тайского ко- ролевства Ланна.

Мэтт Вайсфельд
Объектно-ориентированный подход
5-е международное издание
Перевел с английского И. Сигайлюк
Заведующая редакцией
Ю. Сергиенко
Ведущий редактор
К. Тульцева
Литературный редактор
А. Руденко
Художественный редактор
В. Мостипан
Корректор
Н. Викторова
Верстка
Л. Егорова
Изготовлено в России. Изготовитель: ООО «Прогресс книга».
Место нахождения и фактический адрес: 194044, Россия, г. Санкт-Петербург,
Б. Сампсониевский пр., д. 29А, пом. 52. Тел.: +78127037373.
Дата изготовления: 12.2019. Наименование: книжная продукция. Срок годности: не ограничен.
Налоговая льгота — общероссийский классификатор продукции ОК 034-2014, 58.11.12 — Книги печатные профессиональные, технические и научные.
Импортер в Беларусь: ООО «ПИТЕР М», 220020, РБ, г. Минск, ул. Тимирязева, д. 121/3, к. 214, тел./факс: 208 80 01.
Подписано в печать 20.12.19. Формат 70×100/16. Бумага офсетная. Усл. п. л. 20,640. Тираж 1000. Заказ 0000.
Отпечатано в ОАО «Первая Образцовая типография». Филиал «Чеховский Печатный Двор».
142300, Московская область, г. Чехов, ул. Полиграфистов, 1.
Сайт: www.chpk.ru. E-mail: marketing@chpk.ru
Факс: 8(496) 726-54-10, телефон: (495) 988-63-87