Sunteți pe pagina 1din 6

MINISTERUL EDUCAŢIEI AL REPUBLICII MOLDOVA

UNIVERSITATEA TEHNICĂ A MOLDOVEI

FACULTATEA CALCULATOARE, INFORMATICĂ ŞI


MICROELECTRONICĂ
CATEDRA AUTOMATICĂ ŞI TEHNOLOGII INFORMAŢIONALE

RAPORT
La lucrarea de laborator Nr. 1

Disciplina: IPP

Tema: Şabloane creaţionale

A efectuat: st. gr. TI-111 F/R Belous Ion

A verificat: Lector Superior Poştaru Andrei

Chişinău 2016
1. Noţiuni generale
Un sablon reprezintă o soluţie comună a unei probleme într-un anumit context.
Importanţa şabloanelor (standardelor) în construirea sistemelor complexe a fost de mult
recunoscută în alte discipline. În cadrul comunităţii proiectanţilor de software OO (orientate pe
obiecte) ideea de a aplica şabloane se pare că a fost inspirată de propunerea unui arhitect,
Christopher Alexander, care a lansat iniţiativa folosirii unui limbaj bazat pe sabloane pentru
proiectarea clădirilor şi a oraselor. Acesta afirma că: "Fiecare şablon descrie o problemă care
apare mereu în domeniul nostru de activitate şi indică esenţa soluţiei acelei probleme într-un mod
care permite utilizarea soluţiei de nenumărate ori în contexte diferite".
Deşi în domeniul sistemelor OO soluţiile sunt exprimate în termeni de obiecte şi interfeţe (în loc
de ziduri, uşi, grinzi etc), esenţa noţiunii de sablon este aceeaşi, adică de soluţie a unei probleme
într-un context dat.

2. Şabloane Creaţionale
În ingineria software, şabloanele creaţionale sunt şabloane care descriu mecanismele de creare
a obiectelor, încercînd de a crea obiecte într-un mod adecvat situației. Forma de bază a creației
obiectelor ar putea duce la probleme de design sau adăuga complexitate. Şabloanele creaţionale
rezolvă această problemă controlînd într-o oarecare măsură creația obiectelor.

2.1. Şablonul Abstract Factory


Definiţie
Pune la dispoziţie o interfață pentru crearea familiilor de obiecte înrudite sau dependente,
fără a specifica clasele lor concrete.

Cod Exemplu în C#
namespace AbstractFactory
{
interface IButton
{
void Paint();
}

class OSXButton : IButton


{
public OSXButton()
{
Console.WriteLine("Create OSX Button");
}
public void Paint()
{
Console.WriteLine("I'm Button in OSX Style");
}
1
}

class LinuxButton : IButton


{
public LinuxButton()
{
Console.WriteLine("Create Linux Button");
}
public void Paint()
{
Console.WriteLine("I'm Button in Linux Style");
}
}

interface IWindow
{
void Paint();
}

class LinuxWindow : IWindow


{
public LinuxWindow()
{
Console.WriteLine("Create Linux Window");
}
public void Paint()
{
Console.WriteLine("I'm Window in Linux Style ");
}
}

class OSXWindow : IWindow


{
public OSXWindow()
{
Console.WriteLine("Create OSX Window");
}
public void Paint()
{
Console.WriteLine("I'm Window in OSX Style ");
}
}

interface IGUIFactory
{
IButton CreateButton();
IWindow CreateWindow();
}

class LinuxFactory : IGUIFactory


{
public LinuxFactory()
{
Console.WriteLine("Create Linux Factory");
}
public IButton CreateButton()
{
return new LinuxButton();
}

public IWindow CreateWindow()

2
{
return new LinuxWindow();
}
}

class OSXFactory : IGUIFactory


{
public OSXFactory()
{
Console.WriteLine("Create OSX Factory");
}
public IButton CreateButton()
{
return new OSXButton();
}

public IWindow CreateWindow()


{
return new OSXWindow();
}
}

class Program
{
static void Main()
{
IGUIFactory factory = new LinuxFactory();
IButton btn = factory.CreateButton();
IWindow wnd = factory.CreateWindow();
btn.Paint();
wnd.Paint();

Console.WriteLine();

factory = new OSXFactory();


btn = factory.CreateButton();
wnd = factory.CreateWindow();
btn.Paint();
wnd.Paint();

Console.ReadKey();
}
}
}
Exemplu de execuţie

Figura 1 – Şablonul Abstract Factory

3
2.2. Şablonul Factory Method
Definiţie
Acest sablon defineşte o interfaţă pentru crearea unui obiect, dar lasă subclasele să decidă ce
clasă trebuie instanţiată. Practic, presupune că o clasă pasează subclaselor sale sarcina instanţierii

Diagrama claselor

Cod Exemplu în C#

namespace FactoryMethod
{

abstract class Pizza


{
abstract public string GetType();
}

class AndysCheesePizza : Pizza


{
public override string GetType() { return "Andys Chesse Pizza!"; }
}

class CelentanoCheesePizza : Pizza


{
public override string GetType() { return "Celentano Chesse Pizza!"; }
}

abstract class PizzaStore


{
public abstract Pizza CreatePizza();
}

class AndysPizzaStore : PizzaStore


{
public AndysPizzaStore()
{
Console.WriteLine("Create Andys Pizza Store!");
}
public override Pizza CreatePizza() { return new AndysCheesePizza(); }
}

class CelentanoPizzaStore : PizzaStore


{
public CelentanoPizzaStore()
{
Console.WriteLine("Create Celentano Pizza Store!");
}
public override Pizza CreatePizza() { return new CelentanoCheesePizza(); }
}

public class MainApp


{
public static void Main()
{

PizzaStore[] creators = { new AndysPizzaStore(), new CelentanoPizzaStore() };

foreach (PizzaStore creator in creators)


4
{
Pizza product = creator.CreatePizza();
Console.WriteLine("Created {0}", product.GetType());
}

Console.Read();
}
}
}
Exemplu de execuţie

Figura 2 – Şablonul Factory Method

Concluzie:
Implementarea şabloanelor de proiectare oferă numeroase avantaje în procesul de
dezvoltare. Şabloanele Creaţionale fac procesul de creare mai adaptabil și dinamic. În special, ele
pot oferi o mare flexibilitate cu privire la care obiecte sunt create, cum sunt create aceste obiecte,
și modul în care sunt inițializate.

S-ar putea să vă placă și