Привет всем.
Недавно купил книгу по гибкой разработке на C#, читаю принципы.
Наткнулся на принцип OCP и появились вопросы.
Пример: класс Client использует класс Server. Если Client желает использовать другой объект, скажем FileServer, то надо менять код класса Client, а это противоречит принципу OCP. Значит воспользуемся абстракцией (такая фигня, которая с одной стороны фиксированная, так как имеет определённые абстрактные функции, а с другой стороны может иметь неограниченное количество реализаций), реализация которой сводится к интерфейсу с перегрузками
Теперь класс Client использует какой-то интерфейс, а имплементации у него могут быть FileServer, TextServer и т.д.
Вопрос: почему Мартин назвал этот интерфейс ClientInterface и объяснил это так: "абстрактные классы более тесно ассоциированы со своими клиентами, чем с реализующими их конкретными классами" (страница 162). Объясните дураку, пожалуйста
Re: OCP - Open Close Principle
От:
Аноним
Дата:
21.03.12 09:34
Оценка:
Дочитайте до инверсии зависимостей и вопрос исчезнет
Z>Вопрос: почему Мартин назвал этот интерфейс ClientInterface и объяснил это так: "абстрактные классы более тесно ассоциированы со своими клиентами, чем с реализующими их конкретными классами" (страница 162). Объясните дураку, пожалуйста
Надеюсь, автор книги имеет в виду, что в ООП первичны не классы, а интерфейсы и протоколы взаимодействия между классами. Классы — не более, чем деталь реализации. Поэтому имя класса должно отражать ту деталь (детали) имплементации, которая делает его уникальным (отличимым от других реализаций). А имя интерфейса должно отражать ту роль, которую играет collaborator с точки зрения клиента.