[:it]
Un concetto fondamentale dell’OOD/OOP è quello dell’ereditarietà: utilizzando questo meccanismo è infatti possibile in un linguaggio OO creare nuovi classi a partire da classi già esistenti ereditandone le caratteristiche (attributi o metodi), aggiungendone di nuove o ridefinendone alcune. L’ereditarietà è finalizzata alla creazione di gerarchie di classi e grazie a essa si estende la possibilità di riutilizzare componenti comuni a più classi della stessa gerarchia.
Questi due pgm Java sono all’interno del package geometria e la prima definisce le caratteristiche di un punto mentre l’altro pgm triangolo utilizza gli attributi e i metodi della classe punto.
public class Punto {
private double x;
private double y;
public Punto(double x, double y)
{
setX(x);
setY(y);
}
public Punto(Punto p) {
x=p.getX();
y=p.getY();
}
public void setX(double x) {this.x=x;}
public void setY(double y) {this.y=y;}
public double getX() {return x;}
public double getY() {return y;}
public double distanza(Punto p) {
double dx=x-p.getX();
double dy=y-p.getY();
return Math.sqrt((dx*dx)+(dy*dy));
}
public boolean equals(Punto p) {
return ((x==p.x)&&(y==p.y));
}
public String toString() {return “(“+x+”;”+y+”)”;}
public static void main(String[] args) {
Punto p1=new Punto(1.,1.);
System.out.println(“P1=”+p1.toString());
}
}
public class Triangolo {
private Punto a;
private Punto b;
private Punto c;
public Triangolo (Punto a, Punto b, Punto c) {
this.a=a;
this.b=b;
this.c=c;
}
public String toString() {
return “A”+a.toString()+” B”+b.toString()+” C”+c.toString();}
public static void main(String[] args) {
Punto p1= new Punto(1.,1.);
Punto p2=new Punto(3.,5.);
Punto p3=new Punto(5.0,7.9);
System.out.println(“P1=”+p1.toString());
System.out.println(“P2=”+p2.toString());
Triangolo t= new Triangolo(p1,p2,p3);
System.out.println(“Triangolo “+t.toString());
}
}
Almeno la classe principale del programma deve avere un metodo main da cui avrà inizio l’esecuzione. Ma una buona pratica di programmazione prevede di dotare ogni singola classe sviluppata di un metodo main che esegua un test dei metodi della classe, indipendentemente dal contesto di utilizzazione finale; senza sostituire la necessaria documentazione della classe, il metodo main costituisce anche un esempio di invocazione dei metodi per gli sviluppatori che devono utilizzare la classe nei programmi.
[:]