Sunteți pe pagina 1din 7

Ministerul Educației, Culturii și Cercetării

Universitatea Tehnică a Moldovei


Facultatea Calculatoare, Informatică şi Microelectronică
Departamentul Ingineria Software și Automatică

Șabloane de Proiectare
Lucrare de laborator nr.3
Disciplina:Tehnici și mecanisme de proiectare software

Studentul gr. TI-183: Borta Sergiu


Conducător: Scrob Sergiu

Chișinău 2021
Scopul lucrării
Crearea unui program utilizînd șabloanele de proiectare Prototype și Abstract Factory la o singură
problem,care va gestiona necesitățile unei săli de sport.

Descrierea domeniului

Sportul este o activitate care poate influenta stilul de viată,sănătatea sau personalitatea unui om.  Acesta este
singurul mod prin care poți fi cu adevărat sănătos, mai ales în combinație cu o alimentație și alte obiceiuri
sănătoase.Exită un șir de beneficii care prezintă necesitatea de a duce un mod sănătos de viață:

 modelează și menținere corpul, arde grăsimile, dezvoltă armonios aparatului locomotor,


îmbunătățește circulația sangvină, menține puterea mușchilor și oaselor;
 dezvoltarea abilității de concentrare;
 creșterea abilității de lucru în echipă;
 tratează stările negative ale psihicului, cum ar fi anxietatea și depresia;
 dezvoltarea spiritului de fair play;
 creșterea încrederii de sine;
 dezvoltarea abilităților sociale;
 dezvoltarea capacității de auto-disciplinare;
 formează motivația, ambiția și angajamentului pe termen lung;
 creșterea abilităților competitive;
 formarea abilității de a accepta victoria sau înfrângerea.

Astfel  importanța sportului în viața tinerilor și a celor în vârstă este incontestabilă. Din păcate, multe
persoane uită de acest lucru ,nu au posibilitate și nu beneficiază de toate avantajele pe care activitatea fizică
le poate adduce din cauza pandemiei.

Problema identificata
În cadrul sălii sportive , avem nevoie de un sistem care să creeze seturi de obiecte pentru diferite tipuri de
vizitatori care la moment se împart în “Basic” și “Pro” . La moment o să introducem doar abonamente , dar
avem nevoie de o arhitectura care să ne permită , odata cu trecerea timpului și dezvoltarii sălii noastre
sportive să introducem și alte obiecte în aceste două categorii. Deasemenea , pentru obiectele precum
abonamentele care conțin date cu caracter personal , avem nevoie de o modalitate de a crea copii ale acestora
în caz de pierdere sau deteriorare .
Soluția – pentru a crea același tipuri de obiecte dar cu diferite specificații cum ar fi Abonamente – Pro și
Basic , iar mai apoi posibil echipament – pro și basic și altele , în ajutor ne vine șablonul de proiectare
Abstract Factory , care ne permite să creem familii(in cazul nostru “Basic” și “Pro”) de obiecte
asemanătoare(Abonamente , echipament , o lista cu facilitați...) . În cazul în care avem nevoie să creem copii
ale obiectelor , v-om folosi șablonul de proiectare Prototype.
Diagrame UML :
Diagramele care demonstrează implimentarea clasei ce reprezintă
1)Product & Prototype - EntityAbonament , care mosteneste de la IEntity
2)Concret Product & Concret Prototype - BasicAbonament si ProAbonament

Diagramele care demonstrează implimentarea clasei


1)Abstract Factory - IGetEntities
2)Concret Factory - GetBasicAbonament si GetProAbonament
Codul sursa :
IEntity.cs
public interface IEntity
{
public IEntity Clone();
}

IGetEntities.cs
public interface IGetEntities
{
public EntityAbonament GetNewAbonament(string owner);
}

EntityAbonament.cs
public abstract class EntityAbonament : IEntity
{
public Guid Id { get; set; }
public string Owner { get; set; }
public string AbonamentType { get; set; }
public DateTime ExpireDate { get; set; }
public abstract bool IsValid(DateTime dateTime);

public abstract IEntity Clone();


}

BasicAbonament.cs
public class BasicAbonament : EntityAbonament
{
public BasicAbonament(string owner)
{
Owner = owner;
Id = Guid.NewGuid();
AbonamentType = "Basic";
ExpireDate = DateTime.Now.AddDays(30);
}
public override bool IsValid(DateTime dateTime)
{
if (dateTime < DateTime.Now)
return false;
return true;
}
public override IEntity Clone()
{
return MemberwiseClone() as IEntity;
}
}
ProAbonament.cs
public class ProAbonament : EntityAbonament
{
public ProAbonament(string owner)
{
Owner = owner;
Id = Guid.NewGuid();
AbonamentType = "Pro";
}
public override bool IsValid(DateTime dateTime)
{
return true;
}

//Implimentarea metodei Clone


//Reprezentand Concret Prototype
//Care ne permite sa creem instante identice
public override IEntity Clone()
{
return MemberwiseClone() as IEntity;
}
}

GetBasicAbonament.cs
public class GetBasicAbonament : IGetEntities
{
public EntityAbonament GetNewAbonament(string owner)
{
return new BasicAbonament(owner);
}
}

GetProAbonament.cs
public class GetProAbonament : IGetEntities
{
public EntityAbonament GetNewAbonament(string owner)
{
return new ProAbonament(owner);
}
}
ClientService.cs
public class ClientService
{
public EntityAbonament GetEntity(IGetEntities getEntities, string owner)
{
return getEntities.GetNewAbonament(owner);
}

public void ShowInfo(EntityAbonament entity)


{
Console.WriteLine("Id - " + entity.Id);
Console.WriteLine("Detinator - " + entity.Owner);
Console.WriteLine("Data expirarii - " + entity.ExpireDate);
Console.WriteLine("Tipul - " + entity.AbonamentType);
Console.WriteLine("Este valid " + entity.IsValid(entity.ExpireDate).ToString());
}
}

Program.cs
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Console.WriteLine("Astazi avem promotie , o sa primiti 2 abonamente");
Console.WriteLine("unul <Basic> si unul <Pro>");

var clientService = new ClientService();


var abonamentBasic = clientService.GetEntity(new GetBasicAbonament(), "Sergiu");
clientService.ShowInfo(abonamentBasic);
Console.WriteLine();

var abonamentPro = clientService.GetEntity(new GetProAbonament(), "Sergiu");


clientService.ShowInfo(abonamentPro);
Console.WriteLine("Si in caz ca pierdeti abonamentul Pro o sa aveti tot timpul la noi unul de rezerva cu datele:");
//testam implimentarea Prototypului nostru pentru a vedea daca noua instanta
//detine aceleasi date
var secondProAbonament = abonamentPro.Clone() as EntityAbonament;
clientService.ShowInfo(secondProAbonament);
}
Rezultatul executiei :

Concluzie :
In cadrul acestei lucrari de laborator am studiat și implementat în practică 2 sabloane de proiectare noi :
Abstract Factory și Prototype. Fiecare a fost conceput pentru a rezolva o anumită problemă. Abstract factory
putem să-l aplicam atunci cîndî în proiectul nostru avem nevoie să creem familii de obiecte noi , fară a
specifica clase concrete , iar Prototype ne vine în ajutor atunci cand avem nevoie sa creem copii ale unei
instanțe deja existente care poate să conține anumite date private , fara a neglija principiul encapsulării.

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

  • Laborator-2 TS
    Laborator-2 TS
    Document13 pagini
    Laborator-2 TS
    Сергей Борта
    Încă nu există evaluări
  • Composite&Builder
    Composite&Builder
    Document8 pagini
    Composite&Builder
    Сергей Борта
    Încă nu există evaluări
  • Laborator-5 TMPS Borta
    Laborator-5 TMPS Borta
    Document6 pagini
    Laborator-5 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-4 TMPS Borta
    Laborator-4 TMPS Borta
    Document9 pagini
    Laborator-4 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-1 TMPS Borta
    Laborator-1 TMPS Borta
    Document10 pagini
    Laborator-1 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • LP6 Matlab
    LP6 Matlab
    Document8 pagini
    LP6 Matlab
    Сергей Борта
    Încă nu există evaluări
  • Laborator-2 TMPS Borta
    Laborator-2 TMPS Borta
    Document11 pagini
    Laborator-2 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-5 TMPS Borta
    Laborator-5 TMPS Borta
    Document6 pagini
    Laborator-5 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-4 TMPS Borta
    Laborator-4 TMPS Borta
    Document9 pagini
    Laborator-4 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-3 TMPS Borta
    Laborator-3 TMPS Borta
    Document7 pagini
    Laborator-3 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-2 TMPS Borta
    Laborator-2 TMPS Borta
    Document11 pagini
    Laborator-2 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • Laborator-1 TMPS Borta
    Laborator-1 TMPS Borta
    Document10 pagini
    Laborator-1 TMPS Borta
    Сергей Борта
    Încă nu există evaluări
  • LAB4 Matlab
    LAB4 Matlab
    Document20 pagini
    LAB4 Matlab
    Сергей Борта
    Încă nu există evaluări
  • LAB3 Matlab
    LAB3 Matlab
    Document13 pagini
    LAB3 Matlab
    Сергей Борта
    Încă nu există evaluări
  • Laborator6,7 (Var1) Programarea
    Laborator6,7 (Var1) Programarea
    Document8 pagini
    Laborator6,7 (Var1) Programarea
    Сергей Борта
    Încă nu există evaluări
  • LAB1
    LAB1
    Document4 pagini
    LAB1
    Сергей Борта
    Încă nu există evaluări
  • Lab 5
    Lab 5
    Document9 pagini
    Lab 5
    Сергей Борта
    Încă nu există evaluări
  • LAB2 Matlab
    LAB2 Matlab
    Document9 pagini
    LAB2 Matlab
    Сергей Борта
    Încă nu există evaluări
  • Lab 3
    Lab 3
    Document8 pagini
    Lab 3
    Сергей Борта
    Încă nu există evaluări
  • Lab1 Programarea
    Lab1 Programarea
    Document7 pagini
    Lab1 Programarea
    Сергей Борта
    Încă nu există evaluări
  • TI183 BortaSergiu Lab3
    TI183 BortaSergiu Lab3
    Document5 pagini
    TI183 BortaSergiu Lab3
    Сергей Борта
    Încă nu există evaluări
  • Lab2 Programarea
    Lab2 Programarea
    Document14 pagini
    Lab2 Programarea
    Сергей Борта
    Încă nu există evaluări
  • PR Lab2
    PR Lab2
    Document5 pagini
    PR Lab2
    Сергей Борта
    Încă nu există evaluări
  • Lab4 Programarea
    Lab4 Programarea
    Document6 pagini
    Lab4 Programarea
    Сергей Борта
    Încă nu există evaluări
  • TI183 BortaSergiu Lab2
    TI183 BortaSergiu Lab2
    Document4 pagini
    TI183 BortaSergiu Lab2
    Сергей Борта
    Încă nu există evaluări
  • Lab1 Pam
    Lab1 Pam
    Document9 pagini
    Lab1 Pam
    Ion Popescu
    100% (2)
  • Lab 5
    Lab 5
    Document9 pagini
    Lab 5
    Сергей Борта
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document3 pagini
    Lab 1
    Сергей Борта
    Încă nu există evaluări
  • Lucrare de Laborator nr.1 Tema: Cercetarea Microclimatului La Posturile de Lucru
    Lucrare de Laborator nr.1 Tema: Cercetarea Microclimatului La Posturile de Lucru
    Document14 pagini
    Lucrare de Laborator nr.1 Tema: Cercetarea Microclimatului La Posturile de Lucru
    VeronikaMalkoki
    Încă nu există evaluări