Разделы презентаций


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

Содержание

PatternsЩо таке патерн (pattern)?Alexander C., Ishikawa S., Silverstein M. A Pattern Language: Towns/ Buildings/ Construction, NY, 1977.Alexander C., Ishikawa S., Silverstein M. The Timeless Way of Buildings, NY, 1979.За Кристофером Олександером,

Слайды и текст этой презентации

Слайд 1Патерни проектування
2005-2012

Патерни проектування2005-2012

Слайд 2Patterns
Що таке патерн (pattern)?
Alexander C., Ishikawa S., Silverstein M. A

Pattern Language: Towns/ Buildings/ Construction, NY, 1977.
Alexander C., Ishikawa S.,

Silverstein M. The Timeless Way of Buildings, NY, 1979.

За Кристофером Олександером, будь-який патерн описує задачу, що постійно постає та розв'язується, застосовуючи один і той же прийом так, що він стає у нагоді тисячі, мільйони разів і не потребує нічого нового.
Хоча Олександер мав на увазі патерни, що виникають при проектуванні архітектурних споруд, його підхід залишається справедливим й для патернів ОО проектування.
Патерн – це типове вирішення типової проблеми у даному контексті.

PatternsЩо таке патерн (pattern)?Alexander C., Ishikawa S., Silverstein M. A Pattern Language: Towns/ Buildings/ Construction, NY, 1977.Alexander

Слайд 3Patterns
GoF (Gang of Four).
Gamma E., Johnson R., Helm R., Vlissides

J. Design Patterns. Elements of Reusable Object-Oriented Software. — Addison-Wesley,

1995.
Гамма Э., Хелм Р., Джонсон Р., Влиссидес Дж. Приемы объектно-ориентированного проектирования. Паттерны проектирования. СПб: Питер, 2001. — 368 с.

Шаллоуей А., Тротт Дж. Шаблоны проектирования. — ИД “Вильямс”, 2002.

PatternsGoF (Gang of Four).Gamma E., Johnson R., Helm R., Vlissides J. Design Patterns. Elements of Reusable Object-Oriented

Слайд 4Patterns
http://www.dofactory.com
Рекомендовано!

Patternshttp://www.dofactory.comРекомендовано!

Слайд 5Patterns
http://sourcemaking.com/design_patterns
Ілюстрації!

Patternshttp://sourcemaking.com/design_patternsІлюстрації!

Слайд 6Patterns
http://www.citforum.ru/SE/project/pattern/ (1/2)

Patternshttp://www.citforum.ru/SE/project/pattern/  (1/2)

Слайд 7Patterns
http://www.citforum.ru/SE/project/pattern/ (2/2)

Patternshttp://www.citforum.ru/SE/project/pattern/  (2/2)

Слайд 8Patterns
GRASP (General Responsibility Assignment Software Patterns)
Craig Larman Applying UML

and Patterns
К. Ларман. Применение UML и паттернов проектирования. М. ,

Вильямс, 2002.
PatternsGRASP (General Responsibility Assignment Software Patterns)Craig Larman   Applying UML and PatternsК. Ларман. Применение UML и

Слайд 9Patterns
Джон Влиссидес. Применение шаблонов проектирования - Дополнительные штрихи -

Вильямс, 2003
Книга (1998) одного з членів GoF.
Марк Гранд. Шаблоны проектирования

в JAVA. Каталог популярных шаблонов проектирова-ния, проиллюстрированных при помощи UML, 2002
PatternsДжон Влиссидес.   Применение шаблонов проектирования - Дополнительные штрихи - Вильямс, 2003Книга (1998) одного з членів

Слайд 10Patterns
Анти-патерни

PatternsАнти-патерни

Слайд 11Patterns
Структура патернів GoF
У загальному випадку опис патерну складається з чотирьох

основних розділів:
1. Ім'я. Пославшись на нього, можна одразу описати як

проблему проектування, так і її вирішення (словник патернів). Отже, проектування ПС можна проводити більш високому рівні абстракції. Патерн — це одне з ключових понять архітектури ПС.
Знаходження виразних імен було однією з найскладніших задач при складанні каталогу GoF (Gang of Four).
2. Задача. Опис того, коли варто застосовувати патерн. Необхідно сформулювати задачу та її контекст. Тут може описуватися конкретна проблема проектування, може включатися перелік умов, при виконанні яких має сенс застосовувати даний патерн. (Важливо знати, де і при яких умовах можна скористатись патерном.)
PatternsСтруктура патернів GoFУ загальному випадку опис патерну складається з чотирьох основних розділів:1. Ім'я. Пославшись на нього, можна

Слайд 12Patterns
Структура патернів
3. Розв'язок . Абстрактний опис задачі проектування і того,

як вона може бути розв'язана за допомогою деякого узагальненого сполучення

класів чи об'єктів.
4. Результати. Описуються наслідки застосування патерну, різного роду компроміси, аналізується вибір мови реалізації. Хоча при опису проектних рішень про наслідки часто не згадують, знати про них необхідно, щоб можна було оцінити переваги і недоліки даного патерну у порівнянні з іншими.
Оскільки повторне використання є важливим фактором для ПС, то до результатів варто відносити вплив на гнучкість, масштабування, портабельність розроблюваної системи.
PatternsСтруктура патернів3. Розв'язок . Абстрактний опис задачі проектування і того, як вона може бути розв'язана за допомогою

Слайд 13Patterns
До класифікації патернів
Породжуючі патерни – пов'язані з процесом створення об'єктів.
Структурні

патерни – ґрунтуються на композиціях (структурних об'єднаннях) об'єктів чи класів. (Теза:

замість успадкування – композиції).
Патерни поведінки – характеризуються взаємодією об'єктів між собою (такі патерни можна розглядати як кооперації UML).

PatternsДо класифікації патернівПороджуючі патерни – пов'язані з процесом створення об'єктів.Структурні патерни – ґрунтуються на композиціях (структурних об'єднаннях)

Слайд 14Patterns
Простір патернів проектування
Cтруктурні патерни рівня об'єкта компонують об'єкти для одержання

нової функціональності. Додаткова гнучкість пов'язана з можливістю створювати композицію об'єктів

під час виконання програми.
PatternsПростір патернів проектуванняCтруктурні патерни рівня об'єкта компонують об'єкти для одержання нової функціональності. Додаткова гнучкість пов'язана з можливістю

Слайд 15Patterns
Singleton (data & object factory™, dofactory.com)
Гарантує, що є тільки один

екземпляр класу, і надає глобальну точку доступу до такого екземпляра.

class

Singleton
{
// Fields
private static Singleton instance;
// Constructor
protected Singleton() {}
// Methods
public static Singleton Instance()
{
// Uses "Lazy initialization"
if( instance == null )
instance = new Singleton();
return instance;
}
}
PatternsSingleton (data & object factory™, dofactory.com)Гарантує, що є тільки один екземпляр класу, і надає глобальну точку доступу

Слайд 16Patterns
using System;

// "Singleton"
class Singleton
{
// Fields
private

static Singleton instance;
// Constructor
protected Singleton() {}
// Methods
public static Singleton Instance()
{
// Uses "Lazy initialization"
if( instance == null )
instance = new Singleton();
return instance;
}
}

/// Client test
public class Client
{
public static void Main()
{
// Constructor is protected - cannot use new
Singleton s1 = Singleton.Instance();
Singleton s2 = Singleton.Instance();

if( s1 == s2 )
Console.WriteLine( "The same instance" );
Console.Read();
}
}

Singleton (data & object factory™, dofactory.com)

Patternsusing System;             //

Слайд 17Patterns
Adapter
http://sourcemaking.com/design_patterns

PatternsAdapterhttp://sourcemaking.com/design_patterns

Слайд 18Patterns
Adapter
Дозволяє перейти від одного інтерфейсу (у класі чи в об'єкті)

до іншого з метою забезпечити спільну роботу (класів чи об'єктів),

яка була б неможлива без даного патерна через несумісність інтерфейсів.

Відомий також під іменем Wrapper (обгортка).


PatternsAdapterДозволяє перейти від одного інтерфейсу (у класі чи в об'єкті) до іншого з метою забезпечити спільну роботу

Слайд 19Patterns
Adapter

PatternsAdapter

Слайд 20Patterns
Adapter (GoF)

PatternsAdapter (GoF)

Слайд 21Patterns
Borland Developer Studio 2006. Adapter

PatternsBorland Developer Studio 2006. Adapter

Слайд 22Patterns
Borland Developer Studio 2006. Adapter

PatternsBorland Developer Studio 2006. Adapter

Слайд 23Patterns
Borland Developer Studio 2006

PatternsBorland Developer Studio 2006

Слайд 24Patterns
Adapter (data & object factory™, dofactory.com)

PatternsAdapter (data & object factory™, dofactory.com)

Слайд 25Patterns
Adapter (data & object factory™, dofactory.com)
// "Adaptee"
class Adaptee
{
// Methods

public void SpecificRequest()
{
Console.WriteLine("Called SpecificRequest()" );
}
}
///

Client test

public class Client
{
public static void Main(string[] args)
{
// Create adapter and place a request
Target t = new Adapter();
t.Request();
}
}

using System;

// "Target"
class Target
{
// Methods
virtual public void Request()
{
// Normal implementation goes here
}
}
// "Adapter"

class Adapter : Target
{
// Fields
private Adaptee adaptee = new Adaptee();

// Methods
override public void Request()
{
// Possibly do some data manipulation
// and then call SpecificRequest
adaptee.SpecificRequest();
}
}

PatternsAdapter (data & object factory™, dofactory.com)			//

Слайд 26Patterns
Adapter
adaptee: Adaptee
t:Adapter
override public void Request()
{
// Possibly

do some data manipulation
// and then call

SpecificRequest
adaptee.SpecificRequest();
}
PatternsAdapteradaptee: Adaptee t:Adapteroverride public void Request() {  // Possibly do some data manipulation  //

Слайд 27Patterns
Proxy
http://sourcemaking.com/design_patterns

PatternsProxyhttp://sourcemaking.com/design_patterns

Слайд 28Patterns
Proxy (data & object factory™, dofactory.com)
Виступає сурогатом (заступником) іншого об'єкта,

“контролюючи” доступ до нього.

PatternsProxy (data & object factory™, dofactory.com)Виступає сурогатом (заступником) іншого об'єкта, “контролюючи” доступ до нього.

Слайд 29Patterns
Proxy (data & object factory™, dofactory.com)

// "Proxy"
class

Proxy : Subject
{
RealSubject realSubject;
public override void Request()
{
// Use 'lazy initialization'
if (realSubject == null)
{
realSubject = new RealSubject();
}
realSubject.Request();
}
}

class MainApp
{
static void Main()
{
// Create proxy and request a service
Proxy proxy = new Proxy();
proxy.Request();
Console.Read(); // Wait for user
}
}
// "Subject"
abstract class Subject
{
public abstract void Request();
}

// "RealSubject"
class RealSubject : Subject
{
public override void Request()
{
Console.WriteLine("Called RealSubject.Request()");
}
}

PatternsProxy (data & object factory™, dofactory.com)

Слайд 30Patterns
Decorator
Декоратор – патерн, що структурує об'єкти. Динамічно додаються об'єкту нові

обов'язки. Є гнучкою альтернативою породженню підкласів з метою розширення функціональності.

Теза:

замість успадкування – композиції

Завдання для студентів: створити конкретний об'єкт, що “підтримує” три “декорації”, наприклад, CBorderDecorator, CInterierDecorator, CMyDecorator.

Пригадаємо… “Додаткова гнучкість пов'язана з можливістю задавати композицію об'єктів під час виконання програми”.

Запитання студентам: як можна отримати розв'язок із використан-ням успадкування ?

PatternsDecoratorДекоратор – патерн, що структурує об'єкти. Динамічно додаються об'єкту нові обов'язки. Є гнучкою альтернативою породженню підкласів з

Слайд 31Patterns
Decorator

PatternsDecorator

Слайд 32Patterns
Decorator (data & object factory™, dofactory.com)

PatternsDecorator (data & object factory™, dofactory.com)

Слайд 33Patterns
Decorator. Приклад (1/2) (data & object factory™, dofactory.com)
using System;
abstract class

Component
{abstract public void Operation();
}
class ConcreteComponent :

Component
{override public void Operation()
{ Console.WriteLine ("ConcreteComponent.Operation()");
}
}
abstract class Decorator : Component
{protected Component component;
public void SetComponent( Component component )
{ this.component = component;
}
override public void Operation()
{ if( component != null )
component.Operation();
}
}

class ConcreteDecoratorA : Decorator
{private string addedState;
override public void Operation()
{ base.Operation();
addedState = "new state";
Console.WriteLine
("ConcDecoratorA.Operation()");
}
}
class ConcreteDecoratorB : Decorator
{override public void Operation()
{ base.Operation();
AddedBehavior();
Console.WriteLine ("ConcDecoratorB.Operation()");
}
void AddedBehavior() { }
}

public class Client
{ public static void Main ( string[] args ) { ConcreteComponent c = new ConcreteComponent();
ConcreteDecoratorA d1 = new ConcreteDecoratorA();
ConcreteDecoratorB d2 = new ConcreteDecoratorB();
// Link decorators
d1.SetComponent( c );
d2.SetComponent( d1 );

d2.Operation();
}
}

PatternsDecorator. Приклад (1/2)  (data & object factory™, dofactory.com)using System;abstract class Component{abstract public void Operation();}class ConcreteComponent :

Слайд 34Patterns
Decorator. Приклад (2/2)
class ConcreteDecoratorB :

Decorator
{override public void Operation()

{ base.Operation();
// Decor B
}
}

d2 : CDecB component= d1 : CDecA component= c : CComponent

abstract class Decorator
{protected Component component;
. . .
override public void Operation()
{ if( component != null )
component.Operation();
}
}

// Link decorators
d1.SetComponent( c );
d2.SetComponent( d1 );

d2.Operation();

“Додаткова гнучкість пов'язана з можливістю створювати композицію об'єктів під час виконання програми”.

PatternsDecorator. Приклад (2/2)class ConcreteDecoratorB :           Decorator{override public

Слайд 35Patterns
Spring-проект dekor
Вигляд проекту dekor (проект містить три класи конкретних декораторів

(DecoratorA, DecoratorB, DecoratorC)
Середовище Eclipse +Spring Plugin

PatternsSpring-проект  dekorВигляд проекту dekor (проект містить три класи конкретних декораторів (DecoratorA, DecoratorB, DecoratorC)Середовище Eclipse +Spring Plugin

Слайд 36Patterns
public class DecoratorA extends Decorator {
public void operation(){

super.operation();
System.out.println("DecoratorA");
}
}
“Дротяна модель” та виконання проекту
public class

Decorator implements IComponent{
private IComponent component;
public void setComponent(IComponent component){
this.component = component;
}
public void operation(){
component.operation();
}
}
Patternspublic class DecoratorA extends Decorator { public void operation(){  super.operation();  System.out.println(

Слайд 37Patterns
Composite (композитор, компоновник)
Групує об'єкти в деревоподібні структури для представлення ієрархій

типу “частина-ціле”. Дозволяє уніфікувати дії як з листками, так і

з будь-якими групами піддерев.
PatternsComposite (композитор, компоновник)Групує об'єкти в деревоподібні структури для представлення ієрархій типу “частина-ціле”. Дозволяє уніфікувати дії як з

Слайд 38Patterns
Composite (data & object factory™, dofactory.com)

PatternsComposite (data & object factory™, dofactory.com)

Слайд 39Patterns
Composite (data & object factory™, dofactory.com)
class Leaf : Component
{public Leaf(

string name ) : base( name ) {} // Constructor
public

override void Add( Component c )
{ Console.WriteLine("Cannot add to a leaf");
}
public override void Remove( Component c )
{ Console.WriteLine("Cannot remove from a leaf");
}
public override void Display( int depth )
{ Console.WriteLine( new String( '-', depth ) + name );
}
}
public class Client
{ public static void Main( string[] args )
{ // Create a tree structure
Composite root = new Composite( "root" );
root.Add( new Leaf( "Leaf A" ));
root.Add( new Leaf( "Leaf B" ));

Composite comp = new Composite( "Composite X" );
comp.Add( new Leaf( "Leaf XA" ) );
comp.Add( new Leaf( "Leaf XB" ) );

root.Add( comp );
root.Add( new Leaf( "Leaf C" ));


// Recursively display nodes
root.Display( 1 );
}
}

using System;
using System.Text;
using System.Collections;
abstract class Component
{ protected string name;
public Component( string name ) // Constructor
{ this.name = name;
}
abstract public void Add(Component c);
abstract public void Remove( Component c );
abstract public void Display( int depth );
}
class Composite : Component
{private ArrayList children = new ArrayList();
// Constructor
public Composite( string name ) : base( name ) {}
public override void Add( Component component )
{ children.Add( component );
}
public override void Remove( Component component )
{ children.Remove( component );
}
public override void Display( int depth )
{ Console.WriteLine( new String( '-', depth ) + name );
// Display each of the node's children
foreach( Component component in children )
component.Display( depth + 2 );
}
}

PatternsComposite (data & object factory™, dofactory.com)class Leaf : Component{public Leaf( string name ) : base( name )

Слайд 40Patterns
Strategy (dofactory.com)
Визначає сімейство алгоритмів, в якому інкапсулюється кожен з них

і забезпечується їх взаємозаміна. Патерн "Стратегія" дозволяє змінювати алгоритми сімейства

незалежно від клієнтів, які використовують ці алгоритми.
PatternsStrategy (dofactory.com)Визначає сімейство алгоритмів, в якому інкапсулюється кожен з них і забезпечується їх взаємозаміна. Патерн

Слайд 41Patterns
Strategy (dofactory.com)
class ConcreteStrategyB : Strategy
{
public override void

AlgorithmInterface()
{
Console.WriteLine(

"CalledConcreteStrategyB.”+ ”AlgorithmInterface()");
}
}

class Context
{
private Strategy _strategy;
// Constructor
public Context(Strategy strategy)
{
this._strategy = strategy;
}
public void ContextInterface()
{
_strategy.AlgorithmInterface();
}
}

class MainApp
{
static void Main()
{
Context context;
context = new Context( new ConcreteStrategyA());
context.ContextInterface();
context = new Context( new ConcreteStrategyB());
context.ContextInterface();
}
}
/// The 'Strategy' abstract class
abstract class Strategy
{
public abstract void AlgorithmInterface();
}
class ConcreteStrategyA : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine(
"CalledConcreteStrategyA.”+ ”AlgorithmInterface()");
}
}

PatternsStrategy (dofactory.com)class ConcreteStrategyB : Strategy {  public override void AlgorithmInterface()   {

Слайд 42Patterns
Bridge
Відокремлює абстракцію від реалізації, завдяки чому з'являється можливість незалежно змінювати

те й інше
кнопка (однопозиційний перемикач) ел. мережі;
тумблер (двохпозиційний перемикач) ел.

мережі;
перемикач із ДУ;
голосовий перемикач;
. . .
PatternsBridgeВідокремлює абстракцію від реалізації, завдяки чому з'являється можливість незалежно змінювати те й іншекнопка (однопозиційний перемикач) ел. мережі;тумблер

Слайд 43Patterns
Bridge
Відокремлює абстракцію від реалізації, завдяки чому з'являється можливість незалежно змінювати

те й інше.
Відомий також під іменем Handle/Body (описувач/тіло).
Шаллоуей А., Тротт

Дж. Шаблоны проектирования. — ИД “Вильямс”, 2002.

Два різних середовища:
X Window System;
Presentation Manager (PM) від компанії IBM.

PatternsBridgeВідокремлює абстракцію від реалізації, завдяки чому з'являється можливість незалежно змінювати те й інше.Відомий також під іменем Handle/Body

Слайд 44Patterns
Bridge

PatternsBridge

Слайд 45Patterns
Bridge (GoF)

PatternsBridge (GoF)

Слайд 46Patterns
Bridge (data & object factory™, dofactory.com)

PatternsBridge (data & object factory™, dofactory.com)

Слайд 47Patterns
Bridge. “Починати з тих шаблонів, що створюють контекст для інших”

(К.Александер).

PatternsBridge. “Починати з тих шаблонів, що створюють контекст для інших” (К.Александер).

Слайд 48Patterns
Façade (data & object factory™, dofactory.com)

PatternsFaçade (data & object factory™, dofactory.com)

Слайд 49Patterns
Observer (Спостерігач)
Визначає між об'єктами відношення типу один (видавець) - до

- багатьох (передплатників), так що при зміні стану одного об'єкта

(видавця) всі підлеглі (передплатники) одержують повідомлення й автоматично оновлюють дані.
Відомий також під іменами Dependents (підлеглі), Publish-Subscribe (видавець- передплатник).

Subject (суб'єкт):
надає інтерфейс для приєднання та від’єднання спостерігачів;
має інформацію про приєднаних спостерігачів (для їх оповіщення); за суб'єктом можуть “стежити ” скільки завгодно спостерігачів.
Observer (спостерігач):
надає інтерфейс для фіксації змін (операція Update).
ConcreteSubject (конкретний суб'єкт):
має стан, що становить інтерес для ConcreteObserver;
надає інтерфейс для “читання” та зміни стану (GetState, SetState).
ConcreteObserver (конкретний спостерігач):
зберігає посилання на об'єкт класу ConcreteSubject;
зберігає дані про стан, які повинні бути узгоджені із станом суб'єкта.

PatternsObserver (Спостерігач)Визначає між об'єктами відношення типу один (видавець) - до - багатьох (передплатників), так що при зміні

Слайд 50Patterns
Observer

PatternsObserver

Слайд 51Patterns
Observer

PatternsObserver

Слайд 52Patterns
Observer

PatternsObserver

Слайд 53Patterns
Observer (data & object factory™, dofactory.com)

PatternsObserver (data & object factory™, dofactory.com)

Слайд 54Patterns
Observer (data & object factory™, dofactory.com)
using System;
using System.Collections;
abstract class Subject

// "Subject"
{ // Fields
private ArrayList observers

= new ArrayList();
// Methods
public void Attach( Observer observer )
{ observers.Add( observer );
}
public void Detach( Observer observer )
{ observers.Remove( observer );
}
public void Notify()
{ foreach( Observer o in observers )
o.Update();
}
}
class ConcreteSubject : Subject
{ // Fields
private string subjectState;
// Properties
public string SubjectState
{ get{ return subjectState; }
set{ subjectState = value; }
}
}

abstract class Observer // "Observer"
{abstract public void Update();
}
class ConcreteObserver : Observer
{ private string name;
private string observerState;
private ConcreteSubject subject;
public ConcreteObserver( ConcreteSubject subject, string name ) // Constructor
{ this.subject = subject;
this.name = name;
}
override public void Update()
{ observerState = subject.SubjectState;
Console.WriteLine( "Observer {0}'s new state is {1}",
name, observerState );
}
public ConcreteSubject Subject
{ get { return subject; }
set { subject = value; }
}
}

/// Client test
public class Client
{
public static void Main( string[] args )
{
// Configure Observer // structure
ConcreteSubject s = new ConcreteSubject();
s.Attach(new ConcreteObserver( s, "X" ) );
s.Attach( new ConcreteObserver( s, "Y" ) );
s.Attach( new ConcreteObserver( s, "Z" ) );
// Change subject, notify // observers
s.SubjectState = "ABC";
s.Notify();
}
}

PatternsObserver (data & object factory™, dofactory.com)using System;using System.Collections;abstract class Subject  //

Слайд 55Patterns
Додаток

PatternsДодаток

Слайд 56Patterns
Borland Developer Studio 2006

PatternsBorland Developer Studio 2006

Слайд 57Patterns
Borland Developer Studio 2006

PatternsBorland Developer Studio 2006

Слайд 58Patterns
Borland Developer Studio 2006

PatternsBorland Developer Studio 2006

Слайд 59Patterns
Borland Developer Studio 2006

PatternsBorland Developer Studio 2006

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика