Linguaggi Java
Ereditarietà
Fondazione ITS A. Volta – Linguaggi -Java – Flavia Lollis
0
Linguaggi Java
Ereditarietà
L’ereditarietà è uno dei concetti basilari della programmazione OO per ottenere
la riusabilità del codice e non dover ogni volta ripartire da zero.
Ereditare significa acquisire dei beni da altri, e nella programmazione OO è la
proprietà che consente di creare nuove classi sulla base di quelle già esistenti,
sfruttando quindi ciò che è già stato scritto.
In OOP ereditare una classe B da un’altra classe A, significa creare una nuova
classe B che acquisisce il bagaglio di proprietà (attributi e metodi) della classe
A.
La classe di partenza è detta classe base o superclasse, mentre quella che
eredita viene denominata sottoclasse o classe derivata.
Quadrupede è sottoclsse di Animale e superclasse di Cane.
La classe derivata eredita tutte le caratteristiche della superclasse: attributi e
metodi definiti nella superclasse risultano dunque presenti nella sottoclasse
anche se non è fisicamente presente, ma c'è solo nella classe base.
Nella programmazione OO pertanto si programma scrivendo delle sottoclassi
alle quali si aggiungono caratteristiche e comportamenti che le specializzano
rispetto la superclasse, ricordando però che la suddivisione in sottoclassi deve
seguire un raggruppamento concettuale.
I programmatori Java, a differenza di quelli C++, hanno scelto di non utilizzare
l'ereditarietà multipla in quanto è abbastanza complessa e può portare a
problemi logici anche molto complessi.
Il rettangolo è un particolare quadrilatero, quindi dopo aver definito la classe
Quadrilatero con i suoi attributi e metodi, posso derivare da essa la classe
rettangolo
Attributi: i lati del quadrilatero
Metodi : costruttore, perimetro (somma dei lati), area
(utilizzando la formula di Bretschneider :
ove p è il semiperimetro,  e  sono gli angoli opposti di
vertice A e B, pertanto prima di chiamare il metodo area
del quadrilatero bisognerà procurarsi la misura degli
angoli richiesti.
Fondazione ITS A. Volta – Linguaggi -Java – Flavia Lollis
1
Linguaggi Java
import java.lang.Math;
public class Quadrilatero
{
int latoA, latoB, latoC, latoD;
public Quadrilatero(int lA, int lB, int lC, int lD)
{
latoA=lA;
latoB=lB;
latoC=lC;
latoD=lD;
}
public int perim()
{ return latoA + latoB + latoC + latoD;
}
public float area(double al, double be)
{
float p=perim()/2;
float area_f;
double area_calc;
area_calc= (double) ((p-latoA)*(p-latoB)*(p-latoC)*(p-latoD)) (double)
(latoA*latoB*latoC*latoD)*(Math.cos((al+be)/2))*(Math.cos((al+be)/2));
area_f=(float)Math.sqrt(area_calc);
return area_f;} }
Se dobbiamo trattare dei rettangoli però, vista la complessità della formula per
calcolare l’area, è poco conveniente trattarli come quadrilateri.
Se creiamo la classe rettangolo ereditandola dalla classe quadrilatero,
possiamo riutilizzare tutto ciò che ci risulta comodo del quadrilatero e
semplificare il metodo per calcolare l’area.
public class Rettangolo extends Quadrilatero
{
public Rettangolo(int lA, int lB)
{
super(lA, lB, lA, lB);
}
public float area()
{
return latoA*latoB;
}
}
Vediamo ora come utilizzare le classi:
Fondazione ITS A. Volta – Linguaggi -Java – Flavia Lollis
2
Linguaggi Java
public class UsaQuadrilateri
{
public static void main(String[] args)
{
Quadrilatero fig_quadril = new Quadrilatero(1,2,3,4);
Rettangolo fig_rett
= new Rettangolo(2,3);
System.out.println("perimetro quadrilatero = " + fig_quadril.perim());
//* supponendo che gli angoli richiesti dalla formula di Bretschneider siano 40
e 75
System.out.println("area quadrilatero = " + fig_quadril.area(40,75));
System.out.println("perimetro rettangolo = " + fig_rett.perim());
System.out.println("area rettangolo = " + fig_rett.area(90, 90));
System.out.println("area rettangolo = " + fig_rett.areaR());
}
}
Analogamente possiamo ragionare per il quadrato
public class Quadrato extends Rettangolo
{
public Quadrato(int L)
{
super(L, L);
}
public float areaQ()
{
return latoA*latoA;
}
}
e nella classe UsaQuadrilatero basta aggiungere
Quadrato fig_quad = new Quadrato(4);
System.out.println("area quadrato = " +
fig_quad.areaR());
System.out.println("area quadrato = " +
fig_quad.areaQ());
Fondazione ITS A. Volta – Linguaggi -Java – Flavia Lollis
3