Pages: [1]   Go Down
Print
Author Topic: Aggregazione  (Read 2114 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« on: 27-06-2009, 22:26:18 »

Non ho capito come fare, o cosa fare, insomma come realizzare le classi dove trovo aggregazione, il rombo colorato coem in questa immagine, me lo fareste capire? i triangoli sono composizione, cioè ereditarietà e ci siamo, ma che significa aggregazione? Cosa fare con la classe D di questo esempio?

http://img190.imageshack.us/img190/4136/provar.jpg
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
dani89
Apprendista Forumista
**
Offline Offline

Posts: 254



« Reply #1 on: 27-06-2009, 23:13:39 »

tu crei la classe D con tutti i suoi metodi, poi nella classe B come vedi, devi creare un private D d cioè un oggetto di tipo D, e nel costrutto andrai a mettere, oltre agli attributi di B, anche quelli di D, e sempre nel costruttore istanzi l'oggetto D: d=new D (z); in pratica tutto il costruttore è questo:
public B (int x,int y,double z)
{
      super (x);
      this.y=y;
      d=new D (z);
}
spero di essere stato chiaro.......
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #2 on: 27-06-2009, 23:17:20 »

Ah, bene, una sola cosa mi viene difficile, come facevo a capire dal diagramma che nella classe B -d:D è un oggetto?
All'inizio avevo pensato fosse semplicemente una variabile d di tipo generico D..... 
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
dani89
Apprendista Forumista
**
Offline Offline

Posts: 254



« Reply #3 on: 27-06-2009, 23:23:49 »

semplicemente perchè proprio accanto hai il diagramma con la classe D implementata e collegata con B, x logica si capisce subito che l'oggetto è di classe D
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #4 on: 27-06-2009, 23:25:45 »

capisco...mamma mia..io mi lamentavo dei metodi..... 

E poi nel costruttore di B

d = new D(z)

cioè praticamente, io solo dalla return del metodo, dall'indicazione ho intuito che ci si dovesse mettere una z come parametro, sennò avrei messo solo le parentesi.
« Last Edit: 27-06-2009, 23:27:19 by guitarplaying » Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
dani89
Apprendista Forumista
**
Offline Offline

Posts: 254



« Reply #5 on: 27-06-2009, 23:28:56 »

quello lo capisci dal fatto che nel costruttore di B ti mette un double z che però in B non c'è, mentre in D c'è, quindi ogni oggetto B che crei devi creare un oggetto D con parametro z
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #6 on: 27-06-2009, 23:31:15 »

quello lo capisci dal fatto che nel costruttore di B ti mette un double z che però in B non c'è, mentre in D c'è, quindi ogni oggetto B che crei devi creare un oggetto D con parametro z

E se avessi avuto più oggetti avrebbero tutti avuto parametro z?
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #7 on: 27-06-2009, 23:37:36 »

Vorrei farti l'ultiam domanda, ecco le classi:

Code:
abstract class A
{
protected int x;

public A(int x)
{
this.x=x;
}

public abstract int f();

}


class D
{
private double z;

public D(double z)
{
this.z=z;

}

public double getZ()
{
return this.z;
}
}

class B extends A
{
protected int y;
private D d;

public B(int x, int y, double z)
{
super(x);
this.y=y;
D d=new D(z);
   
}


public int f()
{
return super.x*super.x;
}

public int f(D d) {
return (int)d.getZ()+(int)this.d.getZ();
}
}

class C extends B
{
public C(int x, int y, double z)
{
super(x,y,z);
}

public int f()
{
return super.y*7;
}
}





Confesso Mi ero fatto aiutare e mi hanno suggerito in una return:

public int f(D d) {
      return (int)d.getZ()+(int)this.d.getZ();

non capisco a cosa si riferisce la return, restituisce la somma delle z dell'oggetto 'd' e del parametro, non ho capito a cosa si riferisce all'inizio e nemmeno il this.d.getZ()...
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
dani89
Apprendista Forumista
**
Offline Offline

Posts: 254



« Reply #8 on: 27-06-2009, 23:55:14 »

devi fare la somma del metodo getZ() dell'oggetto d che crei nel costruttore con il metodo getZ() di un altro oggetto che prende il metodo come parametro
la sintassi è questa:
public int f (D obj) // lo chiamiamo obj
{
        return (int)(d.getZ()+obj.getZ());
}
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #9 on: 28-06-2009, 00:03:20 »

Mh....la prima parte mi è chiara, è quella del parametro che non capisco, nel diagramma UML il metodo ha come parametro D, che poi non sarebbe il nome della clase visto che l'oggetto è in d minuscolo? non capisco.

Non capisco a cosa si riferiscono
public int f(D d) {
      return (int)d.getZ()+(int)this.d.getZ();


perchè ci sono D e d??
la minuscola è l'oggetto ma la D?
« Last Edit: 28-06-2009, 00:06:25 by guitarplaying » Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
dani89
Apprendista Forumista
**
Offline Offline

Posts: 254



« Reply #10 on: 28-06-2009, 00:05:46 »

si ma poi accanto ti dice che restituisce: "Restituisce la somma intera delle z dell'oggetto 'd' e del parametro", la D che c'è come parametro è un altro oggetto di classe D diverso dal 'd' del costruttore
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #11 on: 28-06-2009, 00:08:25 »

E allora se D è un altro oggetto perchè anzichè mettere:

return (int)d.getZ()+(int)this.d.getZ();

non c'è una cosa tipo:

return (int)D.getZ()+(int)this.d.getZ();
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
dani89
Apprendista Forumista
**
Offline Offline

Posts: 254



« Reply #12 on: 28-06-2009, 00:17:28 »

perchè il metodo non lo puoi chiamare dalla classe, ma da un istanza della classe, non puoi scrivere D.getZ() ma puoi prima creare un oggetto di tipo D e poi da quell'oggetto chiamare il metodo getZ(), in questo caso gli oggetti di tipo D sono 2 ed entrambi possono chiamare quel metodo
Logged
Daréios89
Forumista Eroico
*****
Offline Offline

Gender: Male
Posts: 2.679


La musica è la forma d'arte suprema.


« Reply #13 on: 28-06-2009, 00:20:35 »

ahhhhh.... stasera per la prima volta sto vedendo queste cose.....mamma mia....ti ringrazio dell'aiuto, e ti auguro una buona notte!!
Logged

"Utilizzare sempre de l'Hôpital.....è come andare a caccia di farfalle con un bazooka".
dani89
Apprendista Forumista
**
Offline Offline

Posts: 254



« Reply #14 on: 28-06-2009, 00:23:53 »

tranquillo all'inizio anche io non ci capivo molto, tempo che ne fai uno e già ti viene + facile, notte
Logged
Pages: [1]   Go Up
Print
Jump to: