SlideShare une entreprise Scribd logo
1  sur  19
Design Patterns. Introduction
Немчинский Сергей
2008
pro100fox@gmail.com
Программа курса








История создания
Что такое шаблоны проектирования?
Немного про ООП
Шаблоны GRASP
Шаблоны GoF
Немного о рефакторинге
Лабораторная работа
История создания


В 70-х годах двадцатого века
архитектор Кристофер Александр
(Christopher Alexander) составил
набор шаблонов проектирования. В
области архитектуры эта идея не
получила такого развития, как позже
в области программной разработки.
История создания


В 1987 году Кент Бэк (Kent Beck) и
Вард Каннигем (Ward Cunningham)
взяли идеи Кристофер Александра и
разработали шаблоны
применительно к разработке
программного обеспечения для
разработки графических оболочек на
языке Smalltalk.
История создания


В 1988 году Эрих Гамма (Erich
Gamma) начал писать докторскую
работу при цюрихском университете
об общей переносимости этой
методики на разработку программ.
История создания


В 1989—1991 годах Джеймс Коплин
(James Coplien) трудился над
разработкой идиом для
программирования на C++ и
опубликовал в 1991 году книгу
Advanced C++ Idioms.
История создания




В этом же году Эрих Гамма заканчивает свою докторскую
работу и переезжает в США, где в сотрудничестве с
Ричардом Хелмом (Richard Helm), Ральфом Джонсоном
(Ralph Johnson) и Джоном Влиссидсом (John Vlissides)
публикует книгу Design Patterns — Elements of Reusable
Object-Oriented Software.
В этой книге описаны 23 шаблона проектирования. Также
команда авторов этой книги известна общественности под
названием Банда четырёх (англ. Gang of Four, часто
сокращается до GoF). Именно эта книга стала причиной
роста популярности шаблонов проектирования.
Таксономия паттернов


Idiom




Specific design




Решение частной задачи

Standard design




Напрямую связана с языком программирования

Дополнительный уровень абстракции

Design pattern


Объектно-ориентированные шаблоны –
отношения, взаимодействие и распределение
ответственности между классами или
объектами для всего класса задач
Что такое шаблоны
проектирования?


"Каждый паттерн описывает некую
повторяющуюся проблему и ключ к ее разгадке,
причем таким образом, что этим ключом можно
пользоваться при решении самых разнообразных
задач". Christopher Alexander
Что такое шаблоны
проектирования?


Шаблоны проектирования (паттерн, pattern) — это
эффективные способы решения характерных
задач проектирования, в частности
проектирования компьютерных программ.
Паттерн не является законченным образцом
проекта, который может быть прямо
преобразован в код, скорее это описание или
образец для того, как решить задачу, таким
образом чтобы это можно было использовать в
различных ситуациях.
Пример паттерна – Singleton


Цель применения




Пример применения




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

Обзор реализации


Приватный конструктор и публичный статический метод
getInstance(), возвращающий ссылку на единственный
экземпляр
Диаграмма класса Singleton
Код примера реализации
Singleton




Возможная реализация на C++
(известная как синглтон Мейерса),
где одиночка представляет собой
статический локальный объект
(важно: это решение не потокобезопасно и приводится только для
того, чтобы показать как устроен
шаблон, а не для реального
использования в крупномасштабных
программных проектах).
Код примера на С++
#ifndef __TEST_SINGLETON_HPP
#define __TEST_SINGLETON_HPP
class Singleton
{
public:
static Singleton * getInstance();
private:
Singleton();
};

static Singleton * instance_;

#include "sing.hpp"
Singleton * Singleton::instance_ = 0;
Singleton::Singleton()
{
}
Singleton * Singleton::getInstance()
{
if(!instance_)
{
instance_ = new Singleton;
}

#endif
}

return instance_;
Код примера на Java
public class MySingleton {
private static MySingleton instance = new
MySingleton();
private MySingleton () {
}
public static MySingleton getInstance() {
return instance;
}
}
Код примера на PHP4
<?php
class Singleton {
function Singleton( $directCall = true )
{
if ( $directCall ) {
trigger_error("Нельзя использовать конструктор для создания класса
Singleton.
Используйте статический метод getInstance
()",E_USER_ERROR);
}
//TODO: Добавьте основной код конструктора здесь
}
function &getInstance() {
static $instance;
if ( !is_object( $instance ) ) {
$instance = new Singleton( false );
}
return $instance;
}
}
?>
Польза








Описывает решение целого класса
абстрактных проблем
Унификация терминологии, названий
модулей и элементов проекта
Позволяют, отыскав удачное решение,
пользоваться им снова и снова
В отличие от идиом, шаблоны независимы
от применяемого языка программирования
Недостатки






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







Шаблоны проектирования (паттерн, pattern) — это
эффективные способы решения характерных
задач проектирования;
Шаблоны - не являются законченным образцом
проекта, они лишь способ решения, «повод
подумать»;
Шаблоны - не панацея, но дают возможность
сильно повысить свой уровень разработчика,
использовать лучший опыт;
Шаблоны – ступенька к становлению Computer
Science как науки, а не ремесленечества.

Contenu connexe

Tendances

Design Patterns - General Introduction
Design Patterns - General IntroductionDesign Patterns - General Introduction
Design Patterns - General IntroductionAsma CHERIF
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDPavel Tsukanov
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)beom kyun choi
 
Clean architecture
Clean architectureClean architecture
Clean architecture.NET Crowd
 
Design Patterns Illustrated
Design Patterns IllustratedDesign Patterns Illustrated
Design Patterns IllustratedHerman Peeren
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projetoejdn1
 
Introdução a Padrões de Projeto
Introdução a Padrões de ProjetoIntrodução a Padrões de Projeto
Introdução a Padrões de ProjetoEduardo Mendes
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven DesignRyan Riley
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean ArchitectureBadoo
 
Documentação de Arquitetura de Software Aplicando o C4 Model
Documentação de Arquitetura  de Software Aplicando o C4 ModelDocumentação de Arquitetura  de Software Aplicando o C4 Model
Documentação de Arquitetura de Software Aplicando o C4 ModelDouglas Alonso
 
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기SuJang Yang
 
Introduction to design patterns
Introduction to design patternsIntroduction to design patterns
Introduction to design patternsAmit Kabra
 
Introducing Clean Architecture
Introducing Clean ArchitectureIntroducing Clean Architecture
Introducing Clean ArchitectureRoc Boronat
 
DSLの使い所
DSLの使い所DSLの使い所
DSLの使い所disc99_
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationOğuzhan Soykan
 
Диаграмма вариантов использования
Диаграмма вариантов использованияДиаграмма вариантов использования
Диаграмма вариантов использованияDEVTYPE
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e GitIgor Steinmacher
 

Tendances (20)

Design Patterns - General Introduction
Design Patterns - General IntroductionDesign Patterns - General Introduction
Design Patterns - General Introduction
 
Как писать красивый код или основы SOLID
Как писать красивый код или основы SOLIDКак писать красивый код или основы SOLID
Как писать красивый код или основы SOLID
 
DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)DDD 구현기초 (거의 Final 버전)
DDD 구현기초 (거의 Final 버전)
 
Clean architecture
Clean architectureClean architecture
Clean architecture
 
Design Patterns Illustrated
Design Patterns IllustratedDesign Patterns Illustrated
Design Patterns Illustrated
 
Padroes De Projeto
Padroes De ProjetoPadroes De Projeto
Padroes De Projeto
 
Introdução a Padrões de Projeto
Introdução a Padrões de ProjetoIntrodução a Padrões de Projeto
Introdução a Padrões de Projeto
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Clean Architecture
Clean ArchitectureClean Architecture
Clean Architecture
 
Domain driven-design
Domain driven-designDomain driven-design
Domain driven-design
 
Documentação de Arquitetura de Software Aplicando o C4 Model
Documentação de Arquitetura  de Software Aplicando o C4 ModelDocumentação de Arquitetura  de Software Aplicando o C4 Model
Documentação de Arquitetura de Software Aplicando o C4 Model
 
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기
[Flutter Meetup In Songdo] 상태관리 올바르게 쓰기
 
Introduction to design patterns
Introduction to design patternsIntroduction to design patterns
Introduction to design patterns
 
Introducing Clean Architecture
Introducing Clean ArchitectureIntroducing Clean Architecture
Introducing Clean Architecture
 
DSLの使い所
DSLの使い所DSLの使い所
DSLの使い所
 
Domain Driven Design(DDD) Presentation
Domain Driven Design(DDD) PresentationDomain Driven Design(DDD) Presentation
Domain Driven Design(DDD) Presentation
 
Диаграмма вариантов использования
Диаграмма вариантов использованияДиаграмма вариантов использования
Диаграмма вариантов использования
 
Introdução ao GitHub e Git
Introdução ao GitHub  e GitIntrodução ao GitHub  e Git
Introdução ao GitHub e Git
 
React/Redux
React/ReduxReact/Redux
React/Redux
 
Design pattern-presentation
Design pattern-presentationDesign pattern-presentation
Design pattern-presentation
 

Similaire à Шаблоны разработки ПО. Часть 1. Введние

Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.Igor Shkulipa
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программированияguestfc8ae0
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7Technopark
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1Technopark
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8Technopark
 
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...ITMO University
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5Technopark
 
Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3Denis Umnov
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9Technopark
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLNikolai Kireev
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.Igor Shkulipa
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеYakubovichDA
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9Technopark
 
Dependency injection
Dependency injectionDependency injection
Dependency injectionGetDev.NET
 
Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Andrii Gakhov
 

Similaire à Шаблоны разработки ПО. Часть 1. Введние (20)

Общие темы. Тема 02.
Общие темы. Тема 02.Общие темы. Тема 02.
Общие темы. Тема 02.
 
паттерны программирования
паттерны программированияпаттерны программирования
паттерны программирования
 
лекция №1
лекция №1лекция №1
лекция №1
 
C++ осень 2012 лекция 7
C++ осень 2012 лекция 7C++ осень 2012 лекция 7
C++ осень 2012 лекция 7
 
Tdd php
Tdd phpTdd php
Tdd php
 
запахи кода
запахи кодазапахи кода
запахи кода
 
C++ осень 2012 лекция 1
C++ осень 2012 лекция 1C++ осень 2012 лекция 1
C++ осень 2012 лекция 1
 
C++ осень 2013 лекция 8
C++ осень 2013 лекция 8C++ осень 2013 лекция 8
C++ осень 2013 лекция 8
 
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
ВИРТУАЛЬНАЯ ЛАБОРАТОРИЯ ОБУЧЕНИЯ МЕТОДАМ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА ДЛЯ ГЕНЕРА...
 
Java осень 2014 занятие 5
Java осень 2014 занятие 5Java осень 2014 занятие 5
Java осень 2014 занятие 5
 
Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3Практические аспекты разработки ПО #3
Практические аспекты разработки ПО #3
 
C++ осень 2012 лекция 9
C++ осень 2012 лекция 9C++ осень 2012 лекция 9
C++ осень 2012 лекция 9
 
Практический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UMLПрактический анализ и визуальное моделирование на UML
Практический анализ и визуальное моделирование на UML
 
C# Desktop. Занятие 01.
C# Desktop. Занятие 01.C# Desktop. Занятие 01.
C# Desktop. Занятие 01.
 
основы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программированиеосновы ооп на языке C#. часть 1. введение в программирование
основы ооп на языке C#. часть 1. введение в программирование
 
Software Design Patterns
Software Design PatternsSoftware Design Patterns
Software Design Patterns
 
Refactoring
RefactoringRefactoring
Refactoring
 
C++ осень 2013 лекция 9
C++ осень 2013 лекция 9C++ осень 2013 лекция 9
C++ осень 2013 лекция 9
 
Dependency injection
Dependency injectionDependency injection
Dependency injection
 
Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1Семинар ФКН: современные подходы к разработке ПО - часть 1
Семинар ФКН: современные подходы к разработке ПО - часть 1
 

Plus de Sergey Nemchinsky

Как найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьКак найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьSergey Nemchinsky
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклыSergey Nemchinsky
 
Как пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыКак пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыSergey Nemchinsky
 
Как найти первую работу и не вылететь с нее
Как найти первую работу  и не вылететь с нееКак найти первую работу  и не вылететь с нее
Как найти первую работу и не вылететь с нееSergey Nemchinsky
 
Быть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозговБыть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозговSergey Nemchinsky
 
Service oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service BusService oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service BusSergey Nemchinsky
 
Java enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективыJava enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективыSergey Nemchinsky
 
Enterprise или на чем стоит мир
Enterprise или на чем стоит мирEnterprise или на чем стоит мир
Enterprise или на чем стоит мирSergey Nemchinsky
 
Java enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективыJava enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективыSergey Nemchinsky
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. DatabasesSergey Nemchinsky
 
Основы Java. 4. Collection Framework
Основы Java. 4. Collection FrameworkОсновы Java. 4. Collection Framework
Основы Java. 4. Collection FrameworkSergey Nemchinsky
 
Основы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статикаОсновы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статикаSergey Nemchinsky
 
Основы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыОсновы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыSergey Nemchinsky
 
Щаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. АнтипаттерныЩаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. АнтипаттерныSergey Nemchinsky
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингSergey Nemchinsky
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFSergey Nemchinsky
 

Plus de Sergey Nemchinsky (19)

Как найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететьКак найти первую работу и как с нее не вылететь
Как найти первую работу и как с нее не вылететь
 
основы Java переменные, циклы
основы Java   переменные, циклыосновы Java   переменные, циклы
основы Java переменные, циклы
 
Как пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системыКак пишутся и поддерживаются Enterprise системы
Как пишутся и поддерживаются Enterprise системы
 
Как найти первую работу и не вылететь с нее
Как найти первую работу  и не вылететь с нееКак найти первую работу  и не вылететь с нее
Как найти первую работу и не вылететь с нее
 
Быть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозговБыть разработчиком: вызовы, ожидания, перестроение мозгов
Быть разработчиком: вызовы, ожидания, перестроение мозгов
 
Service oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service BusService oriented architecture, Oracle Service Bus
Service oriented architecture, Oracle Service Bus
 
Java enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективыJava enterprise: обучение, работа, перспективы
Java enterprise: обучение, работа, перспективы
 
Enterprise или на чем стоит мир
Enterprise или на чем стоит мирEnterprise или на чем стоит мир
Enterprise или на чем стоит мир
 
Java enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективыJava enterprise: Обучение, работа, перспективы
Java enterprise: Обучение, работа, перспективы
 
Clean code
Clean codeClean code
Clean code
 
Основы Java. 5. Databases
Основы Java. 5. DatabasesОсновы Java. 5. Databases
Основы Java. 5. Databases
 
Основы Java. 4. Web
Основы Java. 4. WebОсновы Java. 4. Web
Основы Java. 4. Web
 
Основы Java. 4. Collection Framework
Основы Java. 4. Collection FrameworkОсновы Java. 4. Collection Framework
Основы Java. 4. Collection Framework
 
Основы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статикаОсновы Java. 3. Конструкторы, уровни доступа, статика
Основы Java. 3. Конструкторы, уровни доступа, статика
 
Основы Java. 2. JVM
Основы Java. 2. JVMОсновы Java. 2. JVM
Основы Java. 2. JVM
 
Основы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсыОсновы Java. ООП. Объекты, классы, интерфейсы
Основы Java. ООП. Объекты, классы, интерфейсы
 
Щаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. АнтипаттерныЩаблоны разработки ПО. Антипаттерны
Щаблоны разработки ПО. Антипаттерны
 
Шаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. РефакторингШаблоны разработки ПО. Рефакторинг
Шаблоны разработки ПО. Рефакторинг
 
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoFШаблоны разработки ПО. Часть 3. Шаблоны GoF
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
 

Шаблоны разработки ПО. Часть 1. Введние

  • 1. Design Patterns. Introduction Немчинский Сергей 2008 pro100fox@gmail.com
  • 2. Программа курса        История создания Что такое шаблоны проектирования? Немного про ООП Шаблоны GRASP Шаблоны GoF Немного о рефакторинге Лабораторная работа
  • 3. История создания  В 70-х годах двадцатого века архитектор Кристофер Александр (Christopher Alexander) составил набор шаблонов проектирования. В области архитектуры эта идея не получила такого развития, как позже в области программной разработки.
  • 4. История создания  В 1987 году Кент Бэк (Kent Beck) и Вард Каннигем (Ward Cunningham) взяли идеи Кристофер Александра и разработали шаблоны применительно к разработке программного обеспечения для разработки графических оболочек на языке Smalltalk.
  • 5. История создания  В 1988 году Эрих Гамма (Erich Gamma) начал писать докторскую работу при цюрихском университете об общей переносимости этой методики на разработку программ.
  • 6. История создания  В 1989—1991 годах Джеймс Коплин (James Coplien) трудился над разработкой идиом для программирования на C++ и опубликовал в 1991 году книгу Advanced C++ Idioms.
  • 7. История создания   В этом же году Эрих Гамма заканчивает свою докторскую работу и переезжает в США, где в сотрудничестве с Ричардом Хелмом (Richard Helm), Ральфом Джонсоном (Ralph Johnson) и Джоном Влиссидсом (John Vlissides) публикует книгу Design Patterns — Elements of Reusable Object-Oriented Software. В этой книге описаны 23 шаблона проектирования. Также команда авторов этой книги известна общественности под названием Банда четырёх (англ. Gang of Four, часто сокращается до GoF). Именно эта книга стала причиной роста популярности шаблонов проектирования.
  • 8. Таксономия паттернов  Idiom   Specific design   Решение частной задачи Standard design   Напрямую связана с языком программирования Дополнительный уровень абстракции Design pattern  Объектно-ориентированные шаблоны – отношения, взаимодействие и распределение ответственности между классами или объектами для всего класса задач
  • 9. Что такое шаблоны проектирования?  "Каждый паттерн описывает некую повторяющуюся проблему и ключ к ее разгадке, причем таким образом, что этим ключом можно пользоваться при решении самых разнообразных задач". Christopher Alexander
  • 10. Что такое шаблоны проектирования?  Шаблоны проектирования (паттерн, pattern) — это эффективные способы решения характерных задач проектирования, в частности проектирования компьютерных программ. Паттерн не является законченным образцом проекта, который может быть прямо преобразован в код, скорее это описание или образец для того, как решить задачу, таким образом чтобы это можно было использовать в различных ситуациях.
  • 11. Пример паттерна – Singleton  Цель применения   Пример применения   Ограничить число создаваемых объектов класса (чаще всего оставить возможность создавать единственный экземпляр объекта какого-либо класса). Класс-логгер (записывает сообщения в файл или на консоль) – создается один экземпляр, которым пользуются все объекты приложения. Обзор реализации  Приватный конструктор и публичный статический метод getInstance(), возвращающий ссылку на единственный экземпляр
  • 13. Код примера реализации Singleton   Возможная реализация на C++ (известная как синглтон Мейерса), где одиночка представляет собой статический локальный объект (важно: это решение не потокобезопасно и приводится только для того, чтобы показать как устроен шаблон, а не для реального использования в крупномасштабных программных проектах).
  • 14. Код примера на С++ #ifndef __TEST_SINGLETON_HPP #define __TEST_SINGLETON_HPP class Singleton { public: static Singleton * getInstance(); private: Singleton(); }; static Singleton * instance_; #include "sing.hpp" Singleton * Singleton::instance_ = 0; Singleton::Singleton() { } Singleton * Singleton::getInstance() { if(!instance_) { instance_ = new Singleton; } #endif } return instance_;
  • 15. Код примера на Java public class MySingleton { private static MySingleton instance = new MySingleton(); private MySingleton () { } public static MySingleton getInstance() { return instance; } }
  • 16. Код примера на PHP4 <?php class Singleton { function Singleton( $directCall = true ) { if ( $directCall ) { trigger_error("Нельзя использовать конструктор для создания класса Singleton. Используйте статический метод getInstance ()",E_USER_ERROR); } //TODO: Добавьте основной код конструктора здесь } function &getInstance() { static $instance; if ( !is_object( $instance ) ) { $instance = new Singleton( false ); } return $instance; } } ?>
  • 17. Польза     Описывает решение целого класса абстрактных проблем Унификация терминологии, названий модулей и элементов проекта Позволяют, отыскав удачное решение, пользоваться им снова и снова В отличие от идиом, шаблоны независимы от применяемого языка программирования
  • 18. Недостатки    шаблоны могут консервировать громоздкую и малоэффективную систему понятий, разработанную узкой группой Когда количество шаблонов возрастает, превышая критическую сложность, исполнители начинают игнорировать шаблоны и всю систему, с ними связанную Есть мнение, что слепое применение шаблонов из справочника, замедляет профессиональный рост программиста, так как подменяет творческую работу механическим подставлением шаблонов.
  • 19. Итоги     Шаблоны проектирования (паттерн, pattern) — это эффективные способы решения характерных задач проектирования; Шаблоны - не являются законченным образцом проекта, они лишь способ решения, «повод подумать»; Шаблоны - не панацея, но дают возможность сильно повысить свой уровень разработчика, использовать лучший опыт; Шаблоны – ступенька к становлению Computer Science как науки, а не ремесленечества.