Lucrare practică 6

Obiective:

    • aplicarea conceptelor de definire și utilizare a claselor și obiectelor în limbajul Python;
    • utilizarea corectă a constructorului (__init__) și a parametrului self pentru 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âmpul judet_destinatie;
  • ZborInternational: include tara_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).