Принципы программирования. Лекция 9

Содержание

Слайд 2

Принципы программирования

SOLID
KISS
YAGNI
DRY

Принципы программирования SOLID KISS YAGNI DRY

Слайд 3

Принципы SOLID

S – The Single Responsibility Principle
O – The Open-Closed Principle
L –

Принципы SOLID S – The Single Responsibility Principle O – The Open-Closed
The Liskov Substitution Principle
I – Interface Segregation Principle
D – The Dependency Inversion Principle

Слайд 4

The Single Responsibility Principle

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

The Single Responsibility Principle Принцип единственной ответственности. Любой сложный класс должен быть
несколько простых составляющих, отвечающих за определенный аспект поведения, что упрощает как понимание, так и будущее развитие.

Слайд 5

The Single Responsibility Principle

Допустим, есть класс, который отвечает за вывод данных пользователю,

The Single Responsibility Principle Допустим, есть класс, который отвечает за вывод данных
обработку того, что ввел пользователь и сохранению данных в БД.
Правильно иметь:
Класс для вывода данных
Класс для обработки данных
Класс для работы с БД

Слайд 6

The Open-Closed Principle

Принцип Открыт-Закрыт
программные сущности (классы, интерфейсы и т.п.) открыты для расширения,

The Open-Closed Principle Принцип Открыт-Закрыт программные сущности (классы, интерфейсы и т.п.) открыты
но закрыты для изменения. Это означает, что эти сущности могут менять свое поведение без изменения их исходного кода. Открытость сущностей означает возможность внесения изменений в поведении, путем изменения реализации или же путем переопределения поведения в наследниках.

Слайд 7

The Open-Closed Principle

Интерфейсы в модулях не меняем. Они один раз описаны, какие

The Open-Closed Principle Интерфейсы в модулях не меняем. Они один раз описаны,
в них методы, что принимают, что возвращают.
Требуется изменить поведение? Пишем новую реализацию для этих интерфейсов.

Слайд 8

The Liskov Substitution Principle

Принцип замещения Барбары Лисков
для корректной реализации отношения «ЯВЛЯЕТСЯ», наследник

The Liskov Substitution Principle Принцип замещения Барбары Лисков для корректной реализации отношения
может ослаблять предусловие и усиливать постусловие (требовать меньше и гарантировать больше), при этом инварианты базового класса должны выполняться наследником.

Слайд 9

The Liskov Substitution Principle

Поведение наследуемых классов не должно противоречить поведению, заданному базовым

The Liskov Substitution Principle Поведение наследуемых классов не должно противоречить поведению, заданному
классом.
Логику работы наследника можно РАСШИРЯТЬ, но нельзя ПЕРЕОПРЕДЕЛЯТЬ логику, унаследованную от базового класса

Слайд 10

Interface Segregation Principle

Принцип разделения интерфейсов
что слишком «толстые» интерфейсы необходимо разделять на более

Interface Segregation Principle Принцип разделения интерфейсов что слишком «толстые» интерфейсы необходимо разделять
маленькие и специфические, чтобы клиенты маленьких интерфейсов знали только о методах, которые необходимы им в работе.

Слайд 11

Interface Segregation Principle

Следование принципу ISP заключается в создании интерфейсов, которые достаточно специфичны

Interface Segregation Principle Следование принципу ISP заключается в создании интерфейсов, которые достаточно
и требуют только необходимый минимум реализаций методов. Избыточные интерфейсы, напротив, могут требовать от реализующего класса создание большого количества методов, причём даже таких, которые не имеют смысла в контексте класса

Слайд 12

The Dependency Inversion Principle

Принцип инверсии зависимостей
Модули верхнего уровня не должны зависеть от

The Dependency Inversion Principle Принцип инверсии зависимостей Модули верхнего уровня не должны
модулей нижнего уровня. И те и другие должны зависеть от абстракций.

Слайд 13

The Dependency Inversion Principle

При реализации высокоуровневых компонент вместо встраивания зависимостей от конкретных

The Dependency Inversion Principle При реализации высокоуровневых компонент вместо встраивания зависимостей от
низкоуровневых классов формируется зависимость от абстракций (интерфейс, абстрактный класс, базовый класс). С последующей подстановкой (IoC) конкретных низкоуровневых реализаций.

Слайд 14

KISS (Keep it short and simple)

Если вы создаете простое приложение, которое будет

KISS (Keep it short and simple) Если вы создаете простое приложение, которое
использоваться локально на одной машине, без последующего усложнения архитектуры, то и не нужно создавать громоздкое решение с разбиением на несколько уровней и соблюдением жестко принципов программирования.

Слайд 15

YAGNI (You aren't gonna need it)

процесс и принцип проектирования ПО, при котором в

YAGNI (You aren't gonna need it) процесс и принцип проектирования ПО, при
качестве основной цели и/или ценности декларируется отказ от избыточной функциональности (отказ добавления функциональности, в которой нет непосредственной надобности).

Слайд 16

DRY (Don’t repeat yourself)

«Каждая часть знания должна иметь единственное, непротиворечивое и авторитетное

DRY (Don’t repeat yourself) «Каждая часть знания должна иметь единственное, непротиворечивое и
представление в рамках системы»

Слайд 17

Паттерны проектирования

Паттернами проектирования – это решения часто встречающихся проблем в области разработки

Паттерны проектирования Паттернами проектирования – это решения часто встречающихся проблем в области
ПО.
Паттерны не являются готовыми решениями, которые можно преобразовать в код, а представляют общее описание решения проблемы, которое можно использовать в различных ситуациях.

Слайд 18

Паттерны проектирования

Зачастую, паттерны представляют собой архитектурные решения для разрабатываемого приложения, либо его

Паттерны проектирования Зачастую, паттерны представляют собой архитектурные решения для разрабатываемого приложения, либо
части.
Паттерны могут реализовываться в проекте даже в тех местах, где их применение на данный момент является не очевидным, но позволит упростить дальнейшую разработку приложения.

Слайд 19

Паттерны проектирования

Типы паттернов:
Структурные паттерны.
Порождающие паттерны.
Поведенческие паттерны.

Паттерны проектирования Типы паттернов: Структурные паттерны. Порождающие паттерны. Поведенческие паттерны.

Слайд 20

Структурные паттерны

Структурные паттерны предназначены для выстраивания правильной иерархии классов (упрощение создания новых

Структурные паттерны Структурные паттерны предназначены для выстраивания правильной иерархии классов (упрощение создания
классов, расширение существующих) и правильного взаимодействия между классами (уменьшение взаимосвязанности и т.п.)

Слайд 21

Структурные паттерны

Паттерн Adapter
Паттерн Bridge
Паттерн Composite
Паттерн Decorator
Паттерн Facade
Паттерн

Структурные паттерны Паттерн Adapter Паттерн Bridge Паттерн Composite Паттерн Decorator Паттерн Facade Паттерн Flyweight Паттерн Proxy
Flyweight
Паттерн Proxy

Слайд 22

Паттерн Adapter

Паттерн Adapter – это структурный паттерн проектирования, который позволяет объектам с

Паттерн Adapter Паттерн Adapter – это структурный паттерн проектирования, который позволяет объектам
несовместимыми интерфейсами работать вместе.

Слайд 23

Двигаться по дорогам
Сигналить

Двигаться по рельсам
Прикреплять вагоны
Гудеть в свисток

Паттерн Adapter

Двигаться по дорогам Сигналить Двигаться по рельсам Прикреплять вагоны Гудеть в свисток Паттерн Adapter

Слайд 24

Паттерн Adapter

Паттерн Adapter

Слайд 25

Порождающие паттерны

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

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

Слайд 26

Порождающие паттерны

Паттерн Factory Method
Паттерн Abstract Factory
Паттерн Builder
Паттерн Prototype
Паттерн

Порождающие паттерны Паттерн Factory Method Паттерн Abstract Factory Паттерн Builder Паттерн Prototype
Singleton
Паттерн Object Pool

Слайд 27

Паттерн Singleton

Паттерн Singleton контролирует создание единственного экземпляра некоторого класса и предоставляет доступ

Паттерн Singleton Паттерн Singleton контролирует создание единственного экземпляра некоторого класса и предоставляет доступ к нему.
к нему.

Слайд 28

Паттерн Singleton

Singleton возлагает контроль над созданием единственного объекта на сам класс. Доступ

Паттерн Singleton Singleton возлагает контроль над созданием единственного объекта на сам класс.
к этому объекту осуществляется через статическую функцию-член класса, которая возвращает указатель или ссылку на него. Этот объект будет создан только при первом обращении к методу, а все последующие вызовы просто возвращают его адрес.

Слайд 29

Паттерн Singleton

Паттерн Singleton

Слайд 30

Паттерны поведения

Паттерны поведения рассматривают вопросы о связях между объектами и распределением обязанностей

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

Слайд 31

Паттерны поведения

Паттерн Chain of Responsibility
Паттерн Command
Паттерн Iterator
Паттерн Interpreter
Паттерн

Паттерны поведения Паттерн Chain of Responsibility Паттерн Command Паттерн Iterator Паттерн Interpreter
Mediator

Паттерн Memento
Паттерн Observer
Паттерн State
паттерна Strategy
Паттерн Template Method
Паттерн Visitor

Слайд 32

Паттерн Chain of Responsibility

Паттерн Chain of Responsibility – это поведенческий паттерн проектирования,

Паттерн Chain of Responsibility Паттерн Chain of Responsibility – это поведенческий паттерн
который позволяет передавать запросы последовательно по цепочке обработчиков. Каждый последующий обработчик решает, может ли он обработать запрос сам и стоит ли передавать запрос дальше по цепи.

Слайд 33

Паттерн Chain of Responsibility

Паттерн Chain of Responsibility

Слайд 34

Паттерн Chain of Responsibility

Паттерн Chain of Responsibility

Слайд 35

Паттерн Chain of Responsibility

Паттерн Chain of Responsibility

Слайд 36

Модули (подсистемы)

В крупных проектах функционал разрабатываемого приложения часто разбивают на модули для

Модули (подсистемы) В крупных проектах функционал разрабатываемого приложения часто разбивают на модули
упрощения ввода новых функций и поддержки существующих.
В модулях выделяют внешние интерфейсы, через которые с ними можно взаимодействовать другим модулям.

Слайд 37

Выделение модулей в системе кафедрального портала

Расписание

Безопасность

Учебный год

Экзамены

Базовая часть

Выделение модулей в системе кафедрального портала Расписание Безопасность Учебный год Экзамены Базовая часть

Слайд 38

Модули (подсистемы)

Модули выделяют в отдельные проекты-библиотеки, чтобы их можно было просто подключать

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

Слайд 39

Библиотеки

Совокупность классов, интерфейсов и т.п., которые собираются в единый файл-библиотеку с расширением

Библиотеки Совокупность классов, интерфейсов и т.п., которые собираются в единый файл-библиотеку с
*.dll
В дальнейшем эту библиотеку можно подключать в другие проекты и использовать классы и интерфейсы, описанные в ней*.

Слайд 40

Модификатор internal

класс и члены класса с подобным модификатором доступны из любого места

Модификатор internal класс и члены класса с подобным модификатором доступны из любого
кода в той же сборке, однако он недоступен для других программ и сборок.
Класс будет доступен в библиотеке, но не будет доступен в других проектах, использующих эту библиотеку.

Слайд 41

Библиотеки

Файл с расширением *.dll не является исполняемым. Это значит, что его нельзя

Библиотеки Файл с расширением *.dll не является исполняемым. Это значит, что его
запустить на выполнение, как обычное приложение, типа десктопного.

Слайд 42

Современные проекты

ПРОЕКТ

ПРОЕКТ

ХРАНЕНИЕ ДАННЫХ

БИЗНЕС-ЛОГИКА

ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ

Современные проекты ПРОЕКТ ПРОЕКТ ХРАНЕНИЕ ДАННЫХ БИЗНЕС-ЛОГИКА ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ

Слайд 43

Все меняется

IT среда очень быстро меняется, каждый день появляются новые инструменты обработки,

Все меняется IT среда очень быстро меняется, каждый день появляются новые инструменты
хранения, передачи данных, новые технологии разработки ПО и т.д.
Проект, который писался 2 года тому назад, сейчас будет считаться архаичным и жутко ресурсозатратным. Всегда будет вставать вопрос модернизации.

Слайд 44

Концепция DAL

Самым узким местом в данном случае является работа с хранилищем данных:
Появится

Концепция DAL Самым узким местом в данном случае является работа с хранилищем
иной способ хранения данных
Более дешевая и при этом качественная СУБД от другого производителя
Для решения этой проблемы была придумана архитектура Data Access Layer

Слайд 45

Концепция DAL

Концепция обеспечивает возможность смены Хранилища данных без изменения бизнес-логики проекта.
В основе

Концепция DAL Концепция обеспечивает возможность смены Хранилища данных без изменения бизнес-логики проекта.
концепции заложен принцип управляемой работы с данными, который определяет унифицированный и контролируемый способ доступа к различным данным для приложений.

Слайд 46

Концепция DAL

Предлагается создавать интерфейсы, в которых описывать методы работы с данными в

Концепция DAL Предлагается создавать интерфейсы, в которых описывать методы работы с данными
хранилище. При этом реализаций этих интерфейсов может быть множество, в зависимости от различных хранилищ данных, с которым предстоит работать.

Слайд 47

Концепция DAL

ИСПОЛНЯЕМОЕ ПРИЛОЖЕНИЕ

ХРАНИЛИЩЕ

Концепция DAL ИСПОЛНЯЕМОЕ ПРИЛОЖЕНИЕ ХРАНИЛИЩЕ

Слайд 48

Концепция DAL

БИЗНЕС-ЛОГИКА

BINDING MODELS

ИСПОЛНЯЕМОЕ ПРИЛОЖЕНИЕ

VIEW MODELS

Ввод данных

Просмотр данных

Концепция DAL БИЗНЕС-ЛОГИКА BINDING MODELS ИСПОЛНЯЕМОЕ ПРИЛОЖЕНИЕ VIEW MODELS Ввод данных Просмотр данных

Слайд 49

Inversion of Control

Инверсия управления – важный принцип ООП, используемый для уменьшения связанности

Inversion of Control Инверсия управления – важный принцип ООП, используемый для уменьшения
классов. IoC – архитектурное решение интеграции, упрощающее расширение возможностей системы, при котором контроль над потоком управления программы остаётся за каркасом.

Слайд 50

Dependency injection

Внедрение зависимости – процесс предоставления внешней зависимости программному компоненту. Является специфичной

Dependency injection Внедрение зависимости – процесс предоставления внешней зависимости программному компоненту. Является
формой «инверсии управления», когда она применяется к управлению зависимостями.

Слайд 51

IoC-контейнер

это библиотека, фреймворк, которая позволит упростить и автоматизировать написание кода с использованием

IoC-контейнер это библиотека, фреймворк, которая позволит упростить и автоматизировать написание кода с
данного подхода на столько, на сколько это возможно. В частности, позволяет реализовыватьDI.

Слайд 52

IoC-контейнер

Основная проблема – это new(). Для грамотного контроля зависимостей и тестирования, его

IoC-контейнер Основная проблема – это new(). Для грамотного контроля зависимостей и тестирования,
нужно убрать.
IoC (Inversion of Control) – это паттерн, в котором управление объектом (в частности – временем жизни объекта) поручено какой-то компоненте. Вместо создания объект самим (через new()) мы запрашиваем его у т.н. IoC-контейнера.

Слайд 53

IoC-контейнер

DI позволяет автоматически вытянуть из контейнера нужные зависимости при инициализации.

IoC-контейнер DI позволяет автоматически вытянуть из контейнера нужные зависимости при инициализации.

Слайд 54

IoC-контейнер

Ninject
Unity
Autofac
Castle Windsor

IoC-контейнер Ninject Unity Autofac Castle Windsor

Слайд 55

IoC-контейнер

1. Настройка IoC-контейнера. Указание абстракций и какие реализации вместо них подставлять

IoC-контейнер 1. Настройка IoC-контейнера. Указание абстракций и какие реализации вместо них подставлять
Имя файла: Принципы-программирования.-Лекция-9.pptx
Количество просмотров: 30
Количество скачиваний: 0