Lucrare practică 6
Obiective:
-
- aplicarea conceptelor de definire și utilizare a claselor și obiectelor în limbajul Python;
- utilizarea corectă a constructorului (
__init__) și a parametruluiselfpentru inițializarea și manipularea datelor obiectelor; - proiectarea ierarhiilor de clase prin moștenire și suprascrierea metodelor;
- demonstrarea utilizării principiilor fundamentale POO: încapsulare, moștenire, polimorfism și abstracție;
- dezvoltarea unei aplicații practice complete care modelează o situație reală (gestionare de entități, calcule, relații între obiecte).
Sarcina de lucru:
La dispoziție sunt 4 variante; cadrul didactic responsabil de orele practice împarte variantele.
-
Se recomandă lucrul în echipe de 2–3 studenți, numărul exact este stabilit de cadrul didactic de lucrări practice;
-
Fiecare variantă va fi completată cu interfață text simplă (meniuri);
-
Fiecare student va explica utilizarea:
-
constructorilor (
__init__), -
atributelor de clasă și de instanță,
-
metodelor (
self/cls), -
și principiilor POO (moștenire, polimorfism, încapsulare etc).
-
Varianta 1. Gestiunea bibliotecii
Să se modeleze un sistem simplu de evidență a cărților și cititorilor.
Cerințe:
1. Definiți o clasă Carte cu atribute: titlu, autor, an_aparitie, disponibila.
2. Adăugați metode pentru:
- afișarea informațiilor despre carte;
- marcarea unei cărți ca „împrumutată” sau „returnată”.
3. Definiți o clasă Cititor cu atribute: nume, id_cititor, carti_imprumutate.
4. Implementați metode pentru:
- împrumutul unei cărți (verificând disponibilitatea acesteia);
- returnarea unei cărți.
5. Extindeți programul cu o clasă Biblioteca, care gestionează lista de cărți și cititori.
6. Folosiți o metodă de clasă pentru a contoriza numărul total de cărți din bibliotecă.
Rezultat așteptat:
Simulare a unui flux simplu: adăugare de cărți, împrumut, returnare, afișare stoc.
Varianta 2. Evidența angajaților
Să se elaboreze o ierarhie de clase pentru un sistem de gestiune a personalului.
Cerințe:
1. Definiți o clasă Angajat cu atribute: nume, functie, salariu.
2. Adăugați metode pentru:
- afișarea informațiilor despre angajat;
- actualizarea salariului (metodă cu parametru procentual).
3. Creați o subclasă Manager care moștenește Angajat și adaugă:
- un atribut
subordonati(listă de angajați); - o metodă
adauga_subordonat().
4. Implementați o metodă bonus() suprascrisă în Manager, care acordă un bonus mai mare decât cel din Angajat.
5. Utilizați polimorfismul pentru a calcula salariile totale într-o listă mixtă de angajați și manageri.
Rezultat așteptat:
Un program care afişează ierarhia angajaților, aplică bonusuri și calculează salariul total.
Varianta 3. Sistem de rezervări pentru zboruri
Să se elaboreze o aplicație simplă de rezervare a biletelor de avion.
Cerințe:
1. Definiți o clasă Pasager cu atribute: nume, prenume, document_id.
2. Creați o clasă Zbor cu atribute: cod_zbor, destinatie, locuri_disponibile.
3. Implementați metode pentru:
- rezervarea unui loc (scade numărul locurilor disponibile);
- anularea unei rezervări (crește numărul locurilor disponibile).
4. Creați o subclasă ZborIntern și o alta ZborInternational, fiecare cu metode specifice:
ZborIntern: include câmpuljudet_destinatie;ZborInternational: includetara_destinatieși verifică valabilitatea pașaportului.
5. Implementați o metodă de clasă pentru numărarea totală a rezervărilor realizate.
Rezultat așteptat:
Programul va permite adăugarea pasagerilor, efectuarea de rezervări și afișarea detaliilor zborurilor.
Varianta 4. Magazin online
Să se simuleze un magazin online cu produse, coș de cumpărături și clienți.
Cerințe:
1. Definiți o clasă Produs cu atribute: denumire, pret, stoc.
- metodă
actualizeaza_stoc()pentru adăugare/scădere.
2. Creați o clasă Client cu atribute: nume, cos_cumparaturi (listă de produse).
- metode:
adauga_in_cos(),calculeaza_total().
3. Creați o subclasă ClientPremium care aplică reducere la total.
4. Implementați polimorfismul printr-o metodă finalizeaza_comanda(), care se comportă diferit pentru clienți obișnuiți și premium.
5. Adăugați o metodă de clasă total_comenzi() care contorizează toate comenzile efectuate.
Rezultat așteptat:
Un program care permite adăugarea de produse, crearea de clienți și simularea unei comenzi complete.
Evaluarea rezultatelor efectuării lucrării practice:
Pontaj:
-
- Nota 5 pentru implementarea unei aplicații funcționale conform variantei alese (minim 3 cerințe realizate);
- +1 pentru aplicarea principiilor POO: încapsulare, moștenire și polimorfism;
- +1 pentru utilizarea metodelor de clasă (
@classmethod) și/sau metodelor statice (@staticmethod); - +3 pentru explicații corecte și răspunsuri argumentate la întrebările cadrului didactic privind structura și logica programului.
Penalități:
-
- −1 pentru lipsa implementării principiilor POO sau folosirea codului procedural;
- −1 pentru absență la ora practică în care s-a oferit sarcina sau demonstrația lucrării;
- −1 pentru fiecare săptămână de întârziere la predarea lucrării;
- −2 pentru încălcarea principiilor de etică academică (plagiat, copiere neautorizată, lipsa surselor proprii).