- •SOLID
- •Анализ и проектирование
- •Два главных принципа ООП
- •Анализ и проектирование
- •Рекомендации к архитектуре
- •Абстр.классы и интерфейсы
- •Ценности качественного кода
- •Принципы SOLID
- •SRP – принцип единой ответственности
- •SRP – принцип единой ответственности
- •SRP – принцип единой ответственности
- •SRP – принцип единой ответственности
- •OCP – принцип открытости/закрытости
- •OCP – принцип открытости/закрытости
- •OCP – принцип открытости/закрытости
- •OCP – принцип открытости/закрытости
- •OCP – принцип открытости/закрытости
- •OCP – принцип открытости/закрытости
- •LSP – принцип подстановки Барбары Лисков
- •LSP – принцип подстановки Барбары Лисков
- •LSP – принцип подстановки Барбары Лисков
- •LSP – принцип подстановки Барбары Лисков
- •LSP – принцип подстановки Барбары Лисков
- •ISP – принцип разделения интерфейсов
- •ISP – принцип разделения интерфейсов
- •ISP – принцип разделения интерфейсов
- •ISP – принцип разделения интерфейсов
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •DIP – принцип инверсии зависимостей
- •SOLID упрощенно:
SOLID
Object-Oriented
Programming
Анализ и проектирование
Анализ – это исследование задачи и требований к её реализации. Ключевой момент, это именно исследование, мы исследуем задачу, то, чего, например от нас хочет заказчик.
Проектирование – это концептуальное решение задачи, удовлетворяющее всем требованиям к ней.
Основная задача проектирования при объектной декомпозиции – это выполнение двух условий
Условия декомпозиции:
•Высокое сцепление (high cohesion): максимизация связей внутри классов
•Низкая связанность (low coupling): минимизация связей между классами
Емельянов В.А.: Объектно-ориентированное программирование |
2 |
Два главных принципа ООП
«Минимизация связей между классами» не означает «отказ от связей вообще» - в этом нет смысла, связи так или иначе будут.
«Минимизация связей между классами» означает не отказ от них, а их ослабление.
Сильное сцепление и слабая связанность – это два главных принципа ООП.
Емельянов В.А.: Объектно-ориентированное программирование |
3 |
Анализ и проектирование
Архитектура – это понимание того, как система разделена на компоненты, и как эти компоненты взаимодействуют друг с другом посредством интерфейсов.
Также архитектура - это набор решений проектирования, изменить которые считается сложным.
То есть архитектура – это нечто необратимое для проекта в целом. Отсюда её важность и столько разговоров о ней.
Чем больше в нашей системе гибкости, тем она лучше написана.
Как определить качество архитектурного решения?
Если некоторое решение используется по всему приложению, то стоимость его изменения будет огромной, и значит решение является архитектурным. Роберт Мартин говорил: «Хорошая архитектура позволяет откладывать принятие ключевых решений».
Чем больше в системе гибких (т.е. обратимых, динамически задаваемых) решений - тем она лучше.
Емельянов В.А.: Объектно-ориентированное программирование |
4 |
Рекомендации к архитектуре
•Подумать, что придется реализовать жёстко и явно, а что можно реализовать динамически
•Всё, что придется реализовать жёстко и явно (то есть архитектуру), по крайней мере сделать хорошо, помня о цене вопроса
•Всё, что можно реализовать динамически, именно так и реализовать. Это наша цель.
А «динамически» — это же полиморфизм! Это возможность отложить наше решение на потом. Сейчас не знаем точно тип объектов, которые нам понадобятся. Вместо этого используем абстракцию, а конкретику подставим потом. Это и есть способ отложить решение на потом.
Емельянов В.А.: Объектно-ориентированное программирование |
5 |
Абстр.классы и интерфейсы
Абстрактный класс – это заготовка для будущих классов. Мы делегируем реализацию тех методов, которые не определены, производным классам.
Интерфейс – это контракт для будущих классов. Это набор обязательств для каких-то классов, которые если берут эти обязательства, то должны их реализовать.
Интерфейс это не просто контракт, это всегда публичный контракт. Интерфейс не наследуют, а реализуют.
При этом класс может выполнять несколько разных контрактов, а значит может реализовывать несколько разных интерфейсов.
Главное – это работа с объектами через интерфейсные указатели. Интерфейс – это максимально абстрактная сущность в ООП. Чистейший, незамутнённый динамический полиморфизм.
Интерфейсы не являются заменой множественного наследования в тех языках, где оно не реализовано.
Емельянов В.А.: Объектно-ориентированное программирование |
6 |
Ценности качественного кода
Расширяемость, гибкость (extensibility, agility)
Тестируемость |
Простота |
(testability) |
(simplicity) |
Читабельность, |
Сопровождаемост |
понятность (readability, |
ь (maintainability) |
clarity) |
|
Емельянов В.А.: Объектно-ориентированное программирование |
7 |
Принципы SOLID
SOLID – 5 принципов объектно-ориентированного программирования, описывающих архитектуру программного обеспечения.
Все шаблоны проектирования (паттерны) основаны на этих принципах.
Емельянов В.А.: Объектно-ориентированное программирование |
8 |
SRP – принцип единой ответственности
Смысл SRP: на каждый объект должна быть возложена одна единственная
Конкретный класс должен решать только конкретную задачу — ни больше, ни меньше.
Емельянов В.А.: Объектно-ориентированное программирование |
9 |
SRP – принцип единой ответственности
Каждый класс имеет свои обязанности в программе
Если у класса есть несколько обязанностей, то у него появляется несколько причин для изменения
Изменение одной обязанности может привести к тому, что класс перестанет справляться с другими.
Такого рода связанность – причина хрупкого дизайна, который неожиданным образом разрушается при изменении
!Хорошее разделение обязанностей выполняется только тогда, когда имеется полная картина того, как приложение должно работать.
Емельянов В.А.: Объектно-ориентированное программирование |
10 |
