Проектирование, архитектура и конструирование программных систем
Введение
Сложность программирования
Основные этапы разработки ПО
Литература
Литература
Литература
Конструирование (design) ПС
Откуда берутся шаблоны проектирования?
Шаблоны проектирования
Перечень шаблонов
Перечень шаблонов
Перечень шаблонов
Перечень шаблонов
Пример паттерна - Singleton
Singleton
Singleton
Singleton
Singleton
Singleton
Singleton
7.10M
Категория: ПрограммированиеПрограммирование

ПАКПС 1

1. Проектирование, архитектура и конструирование программных систем

П.Сычев Университет «Дубна»
Лекция 1

2. Введение

› Современное программного обеспечение – это очень
сложная программная система, часто содержащая
много тысяч и, даже, миллионов строк кода.
› Как проектируются и создаются такие программные
системы?

3. Сложность программирования

› Истребитель F-35
› Разработка – 1996 г.
› Прототип – 2001 г.
› Ввод в эксплуатацию –
2016-2018 г.
› Цена – 70-100 млн.$
› Количество деталей –
около 1 млн.
› Размер программного кода
– около 10 млн строк.

4. Основные этапы разработки ПО

1. Требования к системе;
2. Архитектура системы;
3. Конструирование системы;
4. Кодирование;
5. Приемочные испытания;
6. Сопровождение системы.
› Тестирование – не этап. Оно производится на всех
этапах, непрерывно!!!

5. Литература

› Р.Мартин Чистая архитектура.
Искусство разработки
программного обеспечения –
Спб.:Питер,2018

6. Литература

› Р.Мартин Чистый код.
Создание, анализ и
рефакторинг –Спб.:
Питер,2019

7. Литература

› Гамма Э., Хелм Р., Джонсон Р.,
Влиссидес Дж. Приемы объектноориентированного проектирования.
Паттерны проектирования. – СПб.:
Питер, 2016.
› Тепляков С. Паттерны
проектирования на платформе .Net.
– СПб.: Питер, 2016.
› Мартин Р. Принципы, паттерны и
методики гибкой разработки на
языке С# - СПб.: Символ, 2012..

8. Конструирование (design) ПС

› Мы начнем с середины - с вопросов построения
системы. Архитектуру мы рассмотрим позже, будем
считать, что требования и архитектура у нас есть.
› Как построить программу чуть более сложную, чем
“Hello world!”?
› Как и в любой другой инженерии в программной
инженерии накоплен богатый опыт хороших проектных
решений, который оформлен в виде шаблонов (или
паттернов) проектирования.

9. Откуда берутся шаблоны проектирования?

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

10. Шаблоны проектирования

› Идея шаблонов проектирования
возникла в конце 80-х годов
прошлого века. Ключевой стала
публикация книги четырех авторов
(bang of four - банда четырех)
› Гамма Э., Хелм Р., Джонсон Р.,
Влиссидес Дж. Приемы объектноориентированного проектирования.
Паттерны проектирования. – СПб.:
Питер, 2016.
› Оригинал книги вышел в 1994 году

11. Перечень шаблонов

› Мы с вами будем рассматривать 22 паттерна из
классической книги. Паттерны разбиты на три группы:
порождающие паттерны (5), структурные паттерны (7),
поведенческие паттерны (10).
› Порождающие паттерны связаны с созданием новых
объектов.
- Singleton
- Factory method
- Prototype
- Abstract factory
- Builder

12. Перечень шаблонов

› Структурные паттерны позволяют создать сложный
объект из простых, не используя наследования
- Adapter
- Decorator
- Composite
- Proxy
- Façade
- Bridge
- Flyweight

13. Перечень шаблонов

› Поведенческие паттерны
- Chain of Responsibility
- Command
- Iterator
- Observer
- State
- Strategy
- Mediator
- Memento
- Template method
- Visitor

14. Перечень шаблонов

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

15. Пример паттерна - Singleton

› На собеседовании при приеме на работу на позицию
разработчика, часто задают вопрос:
Имеет ли смысл создание класса, у которого нет ни
одного публичного конструктора?
Правильный ответ – да! Пример – Singleton.
› Сформулируем проблему. Необходимо спроектировать
класс, который бы:
- гарантировано имел бы единственный экземпляр
этого класса во всем приложении;
- этот единственный экземпляр должен быть доступен
в любой точке приложения.

16. Singleton

› Пример класса (на
C#) приведен
справа.
› Пример
использования –
ниже.
public class Singleton
{
private Singleton() { }
private static Singleton _instance = null;
public void DoSome() { }
public static Singleton GetInstance()
{
if (_instance == null)
_instance = new Singleton();
return _instance;
}
}
Singleton single = Singleton.GetInstance();
single.DoSome();

17. Singleton

› Сделаем формальное описание этого шаблона.
› Этот формат мы будем использовать для описания
всех шаблонов.

18. Singleton

› Тип:
порождающий.
› Синоним: нет.
› Назначение:
гарантирует, что у класса есть только один экземпляр, и
предоставляет к нему глобальную точку доступа.
› Мотивация:
для многих программных систем иногда нужно, чтобы
существовал единственный экземпляр класса.
Например оконный менеджер. Как гарантировать
единственность и доступность этого экземпляра?

19. Singleton

› Структура:
Singleton
-Singleton()
+Some()
(s)+GetInstance():Singleton
(s) -_instance:Singleton

20. Singleton

› Реализация:
здесь приводится пример реализации,
рассматриваются особенности реализации в тех или
иных ситуациях.
› Например есть проблемы использования этого
шаблона в многониточных приложениях из-за
необходимости блокировок и, как результат, возможно
неэффективного кода.

21. Singleton

› Результаты:
Здесь рассматриваются плюсы и минусы данного
шаблона
(+) гарантируется единственность экземпляра класса и
его глобальная доступность;
(+) большая гибкость в сравнении со статическим
классом;
(-) может создавать проблемы в параллельных и/или
распределенных приложениях. В этих случаях
необходимо более сложное решение.
English     Русский Правила