Ingineria Programarii


1. Class Diagrams

2. Object Diagrams

3. Proxy, factory method, abstract factory, builder, prototype


Laborator 3

Vrem sa proiectam un sistem flexibil de gestiune a clientilor unui magazin de calculatoare . Vom utiliza pentru aceasta o colectie de baze de date. Fiecare baza de date extinde clasa CustomDatabase care pune la dispozitie metoda void storeCustomer(Customer c). Veti defini doua subclase ale acestei clase, DiskDatabase si MemoryDatabase. Informatiile referitoate la clientul stocat in baza de date vor fi citite/scrise:

1. Doar de pe disc (in cazul DiskDatabase) (in fisier text sau binar, cum doriti, dupa un format ales de voi).

2. Doar din memorie, prin atribute interne clasei (in cazul MemoryDatabase), fara acces la disc.

Clasa Customer contine informatii despre numele clientului si calculatorul comandat de acesta (un singur calculator pentru fiecare client!).

Un calculator (reprezentat printr-o subclasa a clasei abstracte Computer) poate fi de tipul ServerComputer (Athlon64 + 4GB RAM + monitor 19"), HomeComputer (Celeron + 512 MB RAM + monitor 17"), GamingComputer (Pentium 4 + 1GB RAM + monitor 17"). Fiecare calculator e format din trei componente, conform exemplelor date.

Aceste componente (o componenta este reprezentata printr-o instanta a unei clase ComputerPart, care pune la dispozitie o metoda pentru setarea/obtinerea numelui componentei) vor fi: un procesor, un monitor si o memorie RAM.

Va trebui sa scrieti un program care sa:

1. Intrebe utilizatorul care din cele doua baze de date va fi utilizata pentru stocarea informatiei (folositi Factory Pattern!), si sa o foloseasca pe cea indicata de utilizator pentru stocarea informatiilor despre un client.

2. Dupa selectarea bazei de date, programul vostru va trebui sa permita adaugarea unui client impreuna cu calculatorul comandat (cititi toate informatiile necesare), in baza de date selectata.

FUNCTIONARE

1. Folositi o lista Vector in clasele de tip CustomDatabase pentru a retine lista de clienti la un moment dat.

2. Pentru implementarea metodei void storeCustomer(Customer c) folositi-va obligatoriu de Prototype Pattern.

3. Pentru implementarea componentelor necesare pentru a forma un calculator, folositi-va obligatoriu de Abstract Factory Pattern.

NOTA: Puteti folosi orice alte elemente auxiliare in programul vostru. Puteti de asemenea adauga parametrii metodelor dupa cum considerati. Puteti adauga metode si atribute suplimentare claselor voastre, fara a modifica insa interfetele si metodele abstracte.

IMPORTANT: Orice atribut al unei clase trebuie sa fie private, accesul la el se face prin intermediul unor metode public pe care le veti defini. Mentineti obligatoriu conventia de notare a limbajului Java in programele voastre.

+ extra 1p: Implementati stergerea unui client din baza de date. Veti citi datele clientului, dupa care veti implementa metoda de stergere a clientului din baza de date.

+ extra 2p: Realizati o varianta (intr-un alt fisier ZIP cu intreg codul sursa, diferit de fisierul ZIP cu rezolvarea problemei pentru enuntul initial!) pentru implementarea obiectelor de tip calculator, folosindu-va obligatoriu de Builder Pattern. Pentru aceasta veti deriva din ComputerPart alte trei clase, CPUPart, RAMPart si MonitorPart. Alte ierarhii le alegeti cum doriti.