Есть ли правила для ООП? - PullRequest
       39

Есть ли правила для ООП?

20 голосов
/ 30 декабря 2008

Недавно я слышал, что есть 9 правил для ООП (Java). Я знаю только четыре из них: абстракция, полиморфизм, наследование и инкапсуляция. Есть ли еще правила для ООП?

Ответы [ 6 ]

41 голосов
/ 30 декабря 2008

Похоже, вы ищете Принципы объектно-ориентированного проектирования .

Суммировано с Принципы, шаблоны и практики гибкой разработки программного обеспечения . Эти принципы - с трудом завоеванный продукт многолетнего опыта разработки программного обеспечения. Они не являются продуктом единого мнения, но представляют собой интеграцию и работу большого числа разработчиков и исследователей программного обеспечения. Хотя они представлены здесь как принципы объектно-ориентированного проектирования, они действительно являются частными случаями давних принципов разработки программного обеспечения.

SRP Принцип единой ответственности У класса должна быть только одна причина для изменения.

OCP Принцип открытого доступа Программные объекты (классы, пакеты, методы и т. Д.) Должны быть открыты для расширения, но закрыты для модификации.

LSP Принцип подстановки Лискова Подтипы должны заменять свои базовые типы.

DIP Принцип инверсии зависимостей Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.

ISP Принцип разделения интерфейса Клиенты не должны зависеть от методов, которые они не используют. Интерфейсы принадлежат клиентам, а не иерархиям.

REP Принцип эквивалентности повторного использования и повторного использования Гранула повторного использования является гранулой высвобождения.

CCP Общий принцип закрытия Классы в пакете должны быть закрыты против одинаковых изменений. Изменение, затрагивающее закрытый пакет, затрагивает все классы в этом пакете и никакие другие пакеты.

ГОС Принцип общего повторного использования Классы в пакете повторно используются вместе. Если вы повторно используете один из классов в пакете, вы снова используете их все.

ADP Принцип ациклических зависимостей Не допускайте циклов в графе зависимостей.

SDP Принцип стабильных зависимостей Зависит от устойчивости.

SAP Принцип стабильных абстракций Пакет должен быть настолько абстрактным, насколько он стабилен.

6 голосов
/ 30 декабря 2008

Не уверен ни в каких правилах. Все эти упомянутые вещи для меня больше похожи на ОО-парадигмы. Вот несколько советов, которым мы следуем,

  • Разделение концерна
  • Одиночная ответственность за класс
  • Предпочитают состав перед наследованием
  • Программирование на интерфейсе
  • Плюс все упомянутое Биллибобом, уже
5 голосов
/ 30 декабря 2008

Эти принципы OO взяты из Образцы проектирования Head First :

  • Инкапсулируйте то, что меняется
  • Программа для интерфейса, а не для реализации
  • композиция Favor over Inheritance
  • У класса должна быть только одна причина для изменения ( Принцип единой ответственности )
  • Подтипы должны быть заменяемыми для их Основы ( Принцип подстановки Лискова )
  • Классы должны быть открытыми для расширения, но закрытыми для модификации ( Открытый-закрытый принцип )
4 голосов
/ 30 декабря 2008

По словам прагматичных программистов - правила таковы:

  • Держите его сухим (не повторяйте себя)
  • Держите его в стеснительном состоянии (убедитесь, что ваши классы имеют высокую степень сцепления и низкую связь)
  • и скажи другому ПАРЕНЬ (Разделение интересов)

http://media.pragprog.com/articles/may_04_oo1.pdf

4 голосов
/ 30 декабря 2008

Это понятия, а не правила. На самом деле нет никаких правил, просто принимать решения, некоторые проекты лучше, чем другие, некоторые намного лучше, чем другие :-)

Существует множество рекомендаций :-) Некоторые из них относятся к конкретному языку (C ++ изобилует ими), другие - к OO. Слишком много, чтобы перечислить, хотя: -)

Вне моей головы, важные из них:

  • Слабая связь, высокая когезия
  • Напишите тестируемые классы, которые вы тестируете
  • Используйте наследование экономно и только там, где оно имеет смысл (предпочитайте композицию)
  • Попробуйте придерживаться принципа открытия / закрытия.
  • (самое главное) ПОЦЕЛУЙ

Многое можно расширить и добавить: -)

РЕДАКТИРОВАТЬ: я должен добавить, что правила, которые вы перечислили, не являются уникальными для OO

3 голосов
/ 30 декабря 2008

Для ООП "Правил" нет.

Существует 4 языковых свойства, которые делают язык объектно-ориентированным или нет (это то, что вы перечислили в своем вопросе).

В остальном материале есть рекомендации. Лучшие / самые полезные рекомендации, которые я прочитал: GRASP

Многие из предложений не могут быть легко понятны для неспециалистов (не специалиста CS). Я думал, что GRASP был прагматичным и доступным.

Я думаю, что GRASP хорош, потому что он предлагает наиболее важную часть ОО в своем названии - Назначение ответственности (для объектов, а не программистов).

Две наиболее важные концепции GRASP, из которых вытекает все остальное, - это связь и сплоченность. Эти два понятия / принципа определяют все другие шаблоны и подходы.

Кстати, я только что брал у тебя интервью? Вы расшифровали вопрос неправильно ...

...