Вопрос

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

Это было полезно?

Решение

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

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

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

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

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

ОКУНИТЕСЬ В Принцип инверсии зависимостей Абстракции не должны зависеть от деталей.Детали должны зависеть от абстракций.

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

ПОВТОРИТЕ Принцип эквивалентности выпуска и повторного использования Гранула повторного использования - это гранула высвобождения.

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

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

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

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

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

Другие советы

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

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

Эти принципы OO взяты прямо из Шаблоны проектирования в первую очередь:

  • Инкапсулируйте то, что Меняется
  • Программа для интерфейса, а не для реализации
  • Предпочтение Композиции перед Наследованием
  • У класса должна быть только одна причина для изменения (Принцип единой ответственности)
  • Подтипы должны заменяться их Базовыми (Принцип замены по Лискову)
  • Классы должны быть открыты для расширения, но закрыты для модификации (Принцип "Открыто-закрыто")

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

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

С моей точки зрения, важными из них являются:

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

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

Редактировать:Я должен добавить, что правила, которые вы перечислили, не являются уникальными для OO

Согласно прагматичным программистам , правила таковы:

  • Держите его СУХИМ (Не повторяйтесь)
  • Будьте застенчивы (убедитесь, что ваши классы обладают высокой сплоченностью и низким сцеплением).
  • и расскажи другому ПАРНЮ (Разделение забот)

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

Для ООП не существует никаких "Правил".

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

Остальная часть материала, находящегося там, является руководящими принципами.Лучшие / наиболее полезные рекомендации, которые я прочитал, это СХВАТЫВАНИЕ

Многие предложения нелегко понять непрофессионалам (не специализирующимся на CS).Я думал, что GRASP - это прагматично и доступно.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top