Premetto che sono alle prime armi con java e molto, ma molto arrugginita per quanto riguarda la programmazione, che non prendo più in mano da anni.
Per provare le classi, e la programmazione ad oggetti, ho pensato di definire una classe
Razionale che mi permetta di definire e lavorare sui numeri razionali.
Ho creato i primi metodi: il costruttore dell'oggetto, un metodo per semplificare il numero razionale, dividendo numeratore e denominatore per il MCD di essi ed uno per stamparlo.
Fin qui tutto bene (posto il codice che ho scritto, e nel quale devo ancora inserire il controllo che il denom sia !=0):
public class Razionale {
/**
* @param args
*/
boolean segno; // true positivo, false negativo
int num, denom;
public Razionale (int num,int denom){
this.segno=(num*denom>=0);
this.num=Math.abs(num);
this.denom=Math.abs(denom);
}
private int MCD (int a, int b) {
if (a<b)
return MCD (b,a);
else if (b== 0)
return a;
else
return MCD (a-b, b);
}
private int mcm (int a, int b) {
return a*b/MCD(a,b);
}
public void semplifica () {
int div;
div = MCD(this.num,this.denom);
this.num=this.num/div;
this.denom=this.denom/div;
}
public void stampa(){
if (this.segno)
System.out.print('+');
else
System.out.print('-');
System.out.print (this.num);
System.out.print('/');
System.out.println(this.denom);
}
Come dicevo, fin qui tutto bene, perché i metodi che ho scritto sono unari, ossia lavorano solo su unico razionale.
Vorrei ora passare a definire metodi binari, ossia che lavorano su due razionali (ad esempio la somma e il prodotto).
Quello che mi piacerebbe è costruire un metodo che prenda in input due razionali e ne calcoli la somma (o il prodotto). Però... mi pare che ci sia una asimmetria tra i due operandi: uno deve essere il proprietario del metodo, l'altro un secondo razionale, quindi il metodo somma dovrebbe essere del tipo
public void somma (Razionale b) {
...
...
}
e poi richiamato, nel main con:
Razionale a=new Razionale(...,...);
Razionale b=new Razionale(...,...);
...
...
a.somma(b);
Non mi piace. Non mi piace questa asimmetria fra i due operandi. Mi piacerebbe poter scrivere
.... somma (a,b)....
C'è qualche cosa di più elegante che non ho ancora studiato?