Sunteți pe pagina 1din 6

MODEL

Ministerul Educaţiei, Culturii și Cercetării al Republicii Moldova

Universitatea Tehnică a Moldovei

Departamentul Informatică și Ingineria Sistemelor

RAPORT
Lucrarea de laborator nr.4
la Tehnologii avansate de programare

A efectuat:
st. gr. CR-213 Tabureanu Marian

A verificat: Osovschi Mariana

Chişinău -2022
MODEL

Lucrare de laborator nr. 4


1. Tema lucrării:
Polimorfizmul.
2. Scopul lucrării:
⮚ Însuşirea modalităţilor de realizare a polimorfizmului în Java;
3. Etapele de realizare:
 Crearea clase noi;
 Crearea metodelor necesare;
 Realizarea formelor de polimorfizm;
 Crearea interfeţii programului;
 Prezentarea lucrării.
Probleme propuse:
Realizarea polimorfismului pentru clasele date cu crearea
metodelor conform specificului claselor.
Fraction <- FracionArray
MODEL

Codul programului:
import java.util.Scanner;
import java.util.Arrays;

// Se declara clasa Array


class Array {
protected int[] values; // Se declara un array de intregi numit "values"

// Constructorul clasei Array, care primeste un array de intregi si il


atribuie variabilei de instanta "values"
public Array(int[] values) {
this.values = values;
}

// Metoda care seteaza valoarea unui element din array-ul "values"


public void set(int index, int value) {
values[index] = value;
}

// Metoda care afiseaza array-ul "values"


public void printArray() {
System.out.println(Arrays.toString(values));
}

// Metoda care returneaza reprezentarea sub forma de String a array-ului


"values"
@Override
public String toString() {
return Arrays.toString(values);
}

// Metoda care calculeaza suma elementelor din array


public int sum() {
int sum = 0;
for (int i = 0; i < values.length; i++) {
sum += values[i];
}
return sum;
}

// Metoda care calculeaza media elementelor din array


public double average() {
double sum = 0.0;
for (int i = 0; i < values.length; i++) {
sum += values[i];
}
return sum / values.length;
}
}
// Definim clasa FractionArray care extinde clasa Array
class FractionArray extends Array {
private Fraction[] fractions; // Array de fractii

// Constructorul clasei FractionArray


public FractionArray(Fraction[] fractions) {
super(new int[fractions.length]); // Apelam constructorul clasei de
baza Array
this.fractions = fractions;
for (int i = 0; i < fractions.length; i++) {
values[i] = fractions[i].intValue(); // Initializam valorile int
ale array-ului de baza cu valorile int ale fractiilor
MODEL

}
}

// Metoda pentru a seta o fractie la un anumit index


public void set(int index, int numerator, int denominator) {
fractions[index] = new Fraction(numerator, denominator);
values[index] = fractions[index].intValue(); // Actualizam si
valorile int ale array-ului de baza cu noua fractie
}

// Suprascriem metoda set din clasa Array, astfel incat sa nu se poata


seta valori intregi in FractionArray
@Override
public void set(int index, int value) {
throw new IllegalArgumentException("Nu este posibil de introdus
valori Integer în FractionArray");
}

// Suprascriem metoda printArray din clasa Array pentru a afisa array-ul


de fractii
@Override
public void printArray() {
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < fractions.length; i++) {
sb.append(fractions[i].toString());
if (i < fractions.length - 1) {
sb.append(", ");
}
}
sb.append("]");
System.out.println(sb.toString());
}

// Suprascriem metoda toString din clasa Array pentru a returna o


reprezentare sub forma de string a array-ului de fractii
@Override
public String toString() {
StringBuilder sb = new StringBuilder("[");
for (int i = 0; i < fractions.length; i++) {
sb.append(fractions[i].toString());
if (i < fractions.length - 1) {
sb.append(", ");
}
}
sb.append("]");
return sb.toString();
}

// Calculam media aritmetica a fractiilor


public double average() {
double sum = 0.0;
for (int i = 0; i < fractions.length; i++) {
sum += fractions[i].doubleValue();
}
return sum / fractions.length;
}
}
// Se declara clasa Fraction, care reprezinta o fractie
class Fraction {
private int numerator; // Numaratorul fractiei
private int denominator; // Numitorul fractiei

// Constructorul clasei Fraction, care primeste numaratorul si numitorul


fractiei
MODEL

public Fraction(int numerator, int denominator) {


this.numerator = numerator;
this.denominator = denominator;
}

// Metoda care returneaza valoarea fractiei sub forma de intreg


public int intValue() {
return numerator / denominator;
}

// Metoda care returneaza valoarea fractiei sub forma de numar real


public double doubleValue() {
return (double) numerator / (double) denominator;
}

// Metoda care returneaza reprezentarea sub forma de String a fractiei


@Override
public String toString() {
return numerator + "/" + denominator;
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);

// Citirea datelor pentru array-ul de fractii


System.out.print("Introduceti dimensiunea array-ului de fractii: ");
int n = scanner.nextInt();
Fraction[] fractions = new Fraction[n];
for (int i = 0; i < n; i++) {
System.out.print("Introduceti numaratorul fractiei " + (i + 1) +
": ");
int numerator = scanner.nextInt();
System.out.print("Introduceti numitorul fractiei " + (i + 1) + ":
");
int denominator = scanner.nextInt();
fractions[i] = new Fraction(numerator, denominator);
}
// Afisarea array-ului de fractii
FractionArray fractionArray = new FractionArray(fractions);
System.out.println("Array-ul de fractii este: " + fractionArray);

// Calculul sumei si mediei


System.out.println("Suma fractiilor este: " + fractionArray.sum());
System.out.println("Media fractiilor este: " +
fractionArray.average());
// Exemplu de supraincarcare a metodei set
fractionArray.set(0, 10, 2);
System.out.println("Array-ul de fractii dupa supraincarcarea metodei
set: " + fractionArray);

// Exemplu de suprascriere a metodei set


try {
fractionArray.set(1, 5);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}

// Afisarea array-ului de fractii dupa suprascrierea metodei set


System.out.println("Array-ul de fractii dupa suprascrierea metodei
set: " + fractionArray);

// Exemplu de aducere la tipul de baza prin


Array array = (Array) fractionArray;
MODEL

System.out.println("Array-ul dupa aducerea la forma de baza este: " +


array);
System.out.println("Suma elementelor array-ului dupa aducerea la
forma de baza este: " + array.sum());
System.out.println("Media elementelor array-ului dupa aducerea la
forma de baza este: " + array.average());

}
}

Rezultate:’

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