Показаны сообщения с ярлыком SOLID. Показать все сообщения
Показаны сообщения с ярлыком SOLID. Показать все сообщения

четверг, 26 декабря 2013 г.

Принцип единственной обязанности (SPR, Single Responsibility Principle)

Принцип единственной обязанности (SPR, Single Responsibility Principle)

Принцип единственной обязанности обозначает, что каждый объект должен иметь одну обязанность и эта обязанность должна быть полностью инкапсулированна в классе.


Связность (cohesion) —  характеристика внутренней взаимосвязи между частями одного модуля.


Связанность (coupling) — степень, в которой программный модуль зависит от других модулей.


Нужно стремиться к слабой связанности и сильной связности модулей.


  • Изменения в требованиях обычно влекут за собой изменение обязанностей
  • Чем больше обязанностей у класса — тем больше вероятность его изменения
  • Несколько обязанностей в пределах одного класса делают эти обязанности взаимозависимыми
  • Чем больше классов затронет изменение, тем больше вероятность появления ошибок

четверг, 10 октября 2013 г.

Принципы объектно-ориентированного проектирования

Первые пять принципов описывают дизайн классов (SOLID)
SRP

  • На каждый объект должна быть возложена одна обязанность.
OCP
Принцип открытости/закрытости

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

  • Объекты в программе могут быть заменены их наследниками без изменения свойств программы.
ISP
Принцип разделения интерфейсов

  • Много специализированных изменений лучше, чем один универсальный.
DIP
Принцип инверсии зависимостей

  • Зависимости внутри системы строятся на основе абстракций.
  • Модули верхнего уровня не зависят от модулей нижнего уровня.
  • Абстракции не должны зависеть от деталий. Детали должны зависеть от абстракций.
Следующие 6 принципов касаются сборок (.jar или .dll)

Первые 3 принципа описывают содержание сборки.

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


  • Все классы внутри компонента используются совместно.
  • Если вы можете повторно использовать один класс, то можете использовать и все остальные.



Следующие 3 принципа описывают связи между сборками.

ADD
Принцип ацикличности зависимостей

  • В графе зависимостей между пакетами не должно быть циклов.
SDP
Принцип устойчивых зависимостей

  • Зависимости должны быть направлены в сторону устойчивости.

SAP
Принцип устойчивых абстракций


  • Пакет должен быть столь же абстрактным, сколь и устойчивым.