
- •Понятие информационной системы (ис). Корпоративные ис
- •Понятие жизненного цикла ис (жц ис). Стандарты жц ис.
- •Понятие жизненного цикла ис (жц ис). Каскадная модель жц ис.
- •Понятие жизненного цикла ис (жц ис). Спиральная модель жц ис.
- •Методология разработки ис. Модель зрелости cmm/cmmi.
- •Методология разработки ис. Гибкие методологии. Манифест гибкой разработки.
- •Методология разработки ис. Экстремальное программирование.
- •Методология разработки ис. Методология Scrum.
- •Методология разработки ис. Унифицированный процесс
- •10. Язык uml. Способы использования uml. Model Driven Architecture. Executable
- •12. Требования и прецеденты. Формат описания прецедента. Структура прецедента.
- •13. Модель предметной области. Концептуальные классы. Выделение концептуальных классов. Ассоциации и атрибуты концептуальных классов. Выявление ассоциаций и атрибутов концептуальных классов.
- •14. Архитектура по. Архитектурные факторы. Описание архитектуры.
- •16. Паттерн: понятие, структура, классификация.
- •1) Понятие паттерна
- •2) Структура и Классификация паттернов
- •Диаграмма прецедентов. Диаграмма развертывания.
- •Диаграмма классов. Обозначение классов. Отношение ассоциации.
- •3. Диаграмма классов. Обозначение интерфейсов. Отношение обобщения и
- •Диаграммы: конечных автоматов и деятельности.
- •5. Диаграмма последовательности.
- •Диаграмма коммуникации.
- •Принцип единственности ответственности (srp).
- •Понятие функциональной связности (Cohesion). Принцип High Cohesion.
- •9. Понятие степени связанности (Coupling). Принцип Low Coupling.
- •Принцип открытости/закрытости (ocp).
- •Solid: принцип подстановки Лискоу (lsp)
- •Solid: принцип разделения интерфейса (isp).
- •Solid: принцип инверсии зависимости (dip).
- •Формулировка
- •1. .Net Framework. Общеязыковая среда исполнения (clr). Управляемые модули и
- •Net Framework. Механизм сборки мусора.
- •C#. Объявление класса.
- •C#. Делегаты. События.
- •C#. Наследование: правила, синтаксис. Сокрытие имен.
- •C#. Приведение типов. Операторы as и is.
Принцип открытости/закрытости (ocp).
В объектно-ориентированном программировании принцип открытости/закрытости устанавливает следующее положение: «программные сущности (классы, модули, функции и т. п.) должны быть открыты для расширения, но закрыты для изменения»;[1] это означает, что такие сущности могут позволять менять свое поведение без изменения их исходного кода. Это особенно значимо в производственной среде, когда изменения в исходном коде потребуют проведение пересмотра кода, модульного тестирования и других подобных процедур, чтобы получить право на использования его в программном продукте. Код, подчиняющийся данному принципу, не изменяется при расширении и поэтому не требует таких трудозатрат.
Термин «принцип открытости/закрытости» имеет два значения. Оба значения используют наследование для решения дилеммы, но цели, способы и результаты — различны.
В течение 1990-х принцип открытости/закрытости стал де-факто переопределён для применения с абстрактными интерфейсами, реализации которых могут быть изменены, и могут быть созданы множественные реализации и полиморфно замещены одна на другую.
В противоположность применения Мейером, это определение поддерживает идею наследования от абстрактных базовых классов. Спецификации интерфейсов могут быть переиспользованы через наследование, но реализации изменяться не должны. Существующий интерфейс должен быть закрыт для модификаций, а новые реализации должны, по меньшей мере, реализовывать этот интерфейс.
Статья Роберта С. Мартина «The Open-Closed Principle» в 1996 была одной из плодотворных статей для популяризации такого подхода. В 2001 годуКрэйг Ларман (Craig Larman) отнёс термин Принцип открытости/закрытости к шаблону Алистэра Кокбёрна (Alistair Cockburn), названного Protected Variations, и к обсуждению с Дэвидом Парнасом (David Parnas) о скрытии информации[3].
Solid: принцип подстановки Лискоу (lsp)
Принцип подстановки Барбары Лисков (англ. Liskov Substitution Principle, LSP) в объектно-ориентированном программировании является специфичным определением подтипа предложенным Барбарой Лисков в 1987 году на конференции в основном докладе под названием Абстракция данных и иерархия [1].
В последующей статье[2] Лисков кратко сформулировала свой принцип следующим образом:
Пусть
является
свойством, верным относительно
объектов
некоторого
типа
.
Тогда
также
должно быть верным для объектов
типа
,
где
является
подтипом типа
.
Роберт С. Мартин определил[3] этот принцип так:
Функции, которые используют базовый тип, должны иметь возможность использовать подтипы базового типа не зная об этом.
Таким образом, идея Лисков о «подтипе» даёт определение понятия замещения — если S является подтипом T, тогда объекты типа T в программе могут быть замещены объектами типа S без каких-либо изменений желательных свойств этой программы (например, корректность).
Этот принцип является важнейшим критерием для оценки качества принимаемых решений при построении иерархий наследования. Сформулировать его можно в виде простого правила: тип S будет подтипом Т тогда и только тогда, когда каждому объекту oS типа S соответствует некий объект oT типа T таким образом, что для всех программ P, реализованных в терминах T, поведение P не будет меняться, если oT заменить на oS.
Более простыми словами можно сказать, что поведение наследуемых классов не должно противоречить поведению, заданному базовым классом, то есть поведение наследуемых классов должно быть ожидаемым для кода, использующего переменную базового типа.
Саттер и Александреску в своём руководстве по использованию Си++ для выражения этого принципа также используют фразу «подкласс не должен требовать от вызывающего кода больше, чем базовый класс, и не должен предоставлять вызывающему коду меньше, чем базовый класс». По мнению данных авторов, публичное наследование в Си++ можно употреблять только тогда, когда оно удовлетворяет принципу Лисков. Приватное наследование, по их же мнению, дозволено использовать для доступа к protected части базы и перекрытия виртуальных методов. В любом же ином случае, то есть для всего лишь повторного использования кода из базы, наследование применять нельзя.
Основания: использование публичного наследования для повторного использования кода приводит к тому, что внешний мир начинает считать класс Derived разновидностью класса Base, и возможно появление кода, явно использующего этот факт. Это сильно сужает простор для манёвра архитектора в дальнейшем поддержании и рефакторинге класса Derived.