Sunteți pe pagina 1din 9

UNIVERSITATEA TEHNICĂ A MOLDOVEI

Facultatea Calcultoare, Informatică și Microelectronică


Departamentul Informatică și Ingineria Sistemelor

RAPORT
la lucrarea de laborator nr.4
la Programarea Orientată pe Obiecte

Tema :Moştenirea şi compoziţia

Efectuat de studenta grupei TI-224: Lungu Constantin

Verificat de către profesorul: Astafi Valentina

Chisinau, 2023
Scopul lucrării: Înțelegerea conceptelor de moștenire și compoziție în programare orientată pe
obiect.

Obiectivele lucrării:
● Înțelegerea conceptului de moștenire în programare orientată pe obiect și cum este
implementat într-un limbaj specific.
● Explorarea conceptului de compoziție și compararea diferitele abordări de compoziție
cu moștenirea.
● Identificarea situațiilor în care moștenirea și compoziția sunt cele mai potrivite pentru
rezolvarea problemelor specifice de proiectare a software-ului.
● Aplicarea conceptelor în practică, creând clase și structuri de date care utilizează
moștenirea sau compoziția într-un proiect de programare.

Sarcini practice:
Să se creeze o ierarhie de clase (de exemplu om și colaborator), unde fiecare clasa are un
anumit atribut (ocupă un anumit post și primește un anumit salariu). Să se supraîncarce
operatorii pentru intrări și ieșiri de obiecte, constructorul de copiere, operatorii de atribuire
utilizând funcțiile respective ale clasei de bază.
import java.util.Scanner;

class Om {
protected String nume;
protected String ocupatie;
protected double salariu;

public Om() {
this.nume = "";
this.ocupatie = "";
this.salariu = 0.0;
}

public Om(String nume, String ocupatie, double salariu) {


this.nume = nume;
this.ocupatie = ocupatie;
this.salariu = salariu;
}

public void citeste() {


Scanner scanner = new Scanner(System.in);
System.out.print("Nume: ");
this.nume = scanner.nextLine();
System.out.print("Ocupatie: ");
this.ocupatie = scanner.nextLine();
System.out.print("Salariu: ");
this.salariu = scanner.nextDouble();
}

public void afiseaza() {


System.out.println("Nume: " + this.nume);
System.out.println("Ocupatie: " + this.ocupatie);
System.out.println("Salariu: " + this.salariu);
}

public Om(Om om) {


this.nume = om.nume;
this.ocupatie = om.ocupatie;
this.salariu = om.salariu;
}

public void atribuie(Om om) {


this.nume = om.nume;
this.ocupatie = om.ocupatie;
this.salariu = om.salariu;
}
}

class Colaborator extends Om {


public Colaborator() {
super();
}

public Colaborator(String nume, String ocupatie, double salariu) {


super(nume, ocupatie, salariu);
}
}

public class Main {


public static void main(String[] args) {
Colaborator colaborator = new Colaborator();
colaborator.citeste();

System.out.println("Detalii colaborator:");
colaborator.afiseaza();

Colaborator altColaborator = new Colaborator();


altColaborator.nume="Dana";
altColaborator.ocupatie="F1 Racer";
altColaborator.salariu=10000000;

System.out.println("Detalii alt colaborator");


altColaborator.afiseaza();

Colaborator colaboratorAtribuit = new Colaborator();


colaboratorAtribuit.atribuie(colaborator);
System.out.println("Detalii colaborator atribuit (prin operatorul de atribuire):");
colaboratorAtribuit.afiseaza();
}
}

Sarcina 2: Creați un program de gestionare a unui magazin online, folosind moștenirea pentru a
gestiona diferite tipuri de produse (de exemplu, Electronice, Haine, Alimente) și compoziția pentru a
construi coșul de cumpărături al clienților.
****************

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

class Produs {
protected String nume;
protected double pret;
protected int stoc;

public Produs(String nume, double pret, int stoc) {


this.nume = nume;
this.pret = pret;
this.stoc = stoc;
}

public double getPret() {


return pret;
}

public int getStoc() {


return stoc;
}

public void reduceStoc(int cantitate) {


stoc -= cantitate;
}
}

class ComponentaPC extends Produs {


private String tip;
public ComponentaPC(String nume, double pret, int stoc, String tip) {
super(nume, pret, stoc);
this.tip = tip;
}

public String getTip() {


return tip;
}
}

class Haina extends Produs {


private String marime;

public Haina(String nume, double pret, int stoc, String marime) {


super(nume, pret, stoc);
this.marime = marime;
}

public String getMarime() {


return marime;
}
}

class Aliment extends Produs {


private String categorie;

public Aliment(String nume, double pret, int stoc, String categorie) {


super(nume, pret, stoc);
this.categorie = categorie;
}

public String getCategorie() {


return categorie;
}
}

class CosCumparaturi {
private List<Produs> produse = new ArrayList<>();

public void adaugaProdus(Produs produs, int cantitate) {


if (produs.getStoc() >= cantitate) {
produse.add(produs);
produs.reduceStoc(cantitate);
} else {
System.out.println("Stoc insuficient pentru produsul: " + produs.nume);
}
}

public double calculeazaTotal() {


double total = 0;
for (Produs produs : produse) {
total += produs.getPret();
}
return total;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
CosCumparaturi cos = new CosCumparaturi();

while (true) {
System.out.println("\n===== Meniu =====");
System.out.println("1. Adauga produs in cos");
System.out.println("2. Afiseaza totalul");
System.out.println("3. Iesire");
System.out.print("Alegeti o optiune: ");

int optiune = scanner.nextInt();

switch (optiune) {
case 1:
System.out.println("\nAlegeți un produs:");
System.out.println("1. Componenta PC");
System.out.println("2. Haina");
System.out.println("3. Aliment");
int tipProdus = scanner.nextInt();

System.out.print("Introduceți numele produsului: ");


String nume = scanner.next();
System.out.print("Introduceți prețul produsului: ");
double pret = scanner.nextDouble();
System.out.print("Introduceți stocul disponibil: ");
int stoc = scanner.nextInt();

switch (tipProdus) {
case 1:
System.out.print("Introduceți tipul componentei PC: ");
String tipComponenta = scanner.next();
ComponentaPC componentaPC = new ComponentaPC(nume, pret, stoc,
tipComponenta);
System.out.print("Introduceți cantitatea dorită: ");
int cantitateComponenta = scanner.nextInt();
cos.adaugaProdus(componentaPC, cantitateComponenta);
break;
case 2:
System.out.print("Introduceți mărimea hainei: ");
String marime = scanner.next();
Haina haina = new Haina(nume, pret, stoc, marime);
System.out.print("Introduceți cantitatea dorită: ");
int cantitateHaina = scanner.nextInt();
cos.adaugaProdus(haina, cantitateHaina);
break;
case 3:
System.out.print("Introduceți categoria alimentului: ");
String categorie = scanner.next();
Aliment aliment = new Aliment(nume, pret, stoc, categorie);
System.out.print("Introduceți cantitatea dorită: ");
int cantitateAliment = scanner.nextInt();
cos.adaugaProdus(aliment, cantitateAliment);
break;
default:
System.out.println("Opțiune invalidă.");
}
break;
case 2:
double total = cos.calculeazaTotal();
System.out.println("Totalul cumpărăturilor: $" + total);
break;
case 3:
System.out.println("La revedere!");
System.exit(0);
break;
default:
System.out.println("Opțiune invalidă.");
}
}
}
}
Concluzie:

În concluzie, moștenirea și compoziția sunt două concepte fundamentale în programarea


orientată pe obiect, fiecare cu avantajele și dezavantajele sale. Moștenirea permite o clasă să
preia caracteristicile altei clase și să le extindă, în timp ce compoziția implică construirea unui
obiect complex prin combinarea mai multor obiecte mai mici. Alegerea dintre moștenire și
compoziție depinde de situația specifică și de nevoile proiectului. O abordare judicioasă a
utilizării acestor concepte poate duce la crearea unui cod eficient, ușor de înțeles și flexibil în
Java.

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