OCP - Open Close Principle
От: zfima  
Дата: 21.03.12 09:21
Оценка:
Привет всем.
Недавно купил книгу по гибкой разработке на C#, читаю принципы.
Наткнулся на принцип OCP и появились вопросы.
Пример: класс Client использует класс Server. Если Client желает использовать другой объект, скажем FileServer, то надо менять код класса Client, а это противоречит принципу OCP. Значит воспользуемся абстракцией (такая фигня, которая с одной стороны фиксированная, так как имеет определённые абстрактные функции, а с другой стороны может иметь неограниченное количество реализаций), реализация которой сводится к интерфейсу с перегрузками
Теперь класс Client использует какой-то интерфейс, а имплементации у него могут быть FileServer, TextServer и т.д.

Вопрос: почему Мартин назвал этот интерфейс ClientInterface и объяснил это так: "абстрактные классы более тесно ассоциированы со своими клиентами, чем с реализующими их конкретными классами" (страница 162). Объясните дураку, пожалуйста
Re: OCP - Open Close Principle
От: Аноним  
Дата: 21.03.12 09:34
Оценка:
Дочитайте до инверсии зависимостей и вопрос исчезнет
Re[2]: OCP - Open Close Principle
От: zfima  
Дата: 21.03.12 09:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Дочитайте до инверсии зависимостей и вопрос исчезнет


Спасибо, буду читать
Re: OCP - Open Close Principle
От: -VaS- Россия vaskir.blogspot.com
Дата: 21.03.12 09:49
Оценка:
Z>Вопрос: почему Мартин назвал этот интерфейс ClientInterface и объяснил это так: "абстрактные классы более тесно ассоциированы со своими клиентами, чем с реализующими их конкретными классами" (страница 162). Объясните дураку, пожалуйста

Надеюсь, автор книги имеет в виду, что в ООП первичны не классы, а интерфейсы и протоколы взаимодействия между классами. Классы — не более, чем деталь реализации. Поэтому имя класса должно отражать ту деталь (детали) имплементации, которая делает его уникальным (отличимым от других реализаций). А имя интерфейса должно отражать ту роль, которую играет collaborator с точки зрения клиента.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.