.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Fondamenti di architettura e programmazione (http://www.dsy.it/forum/forumdisplay.php?forumid=234)
-- esercizio UML (http://www.dsy.it/forum/showthread.php?threadid=41331)


Posted by Paul442 on 15-12-2010 08:58:

esercizio UML

Ciao, avrei bisogno di chiedere una cosa che non hoi capito:
negli esercizi UML degli esami nel caso non trovassi un metodo nella classe appena sopra, posso usare metodi anche della classe due posti in su?
faccio un esemio:
se la gerarchia è A <- B <- D se io sono in D posso usare metodi che si trovano anche nella classe A oltre che nella classe appena sopra (ovvero la B) ?

Grazie


Posted by zack1988 on 15-12-2010 09:23:

Ciao,
A <- B <- C visto che B eredita i metodi di A anche C gli eredita, come test ho provato usando java:

PHP:

public class A {
    public void metodoA() {
        System.out.println("METEODO A");
    }
}

public class B extends A {
    public void metodoB() {
        System.out.println("METODO B");
    }
}

public class C extends B {
    public void metodoC() {
        System.out.println("METODO C");
    }
}

public class Test {
    public static void main(String [] args) {
        C istanzaC = new C();
        istanzaC.metodoA();
        istanzaC.metodoB();
        istanzaC.metodoC();
    }
}


Posted by Paul442 on 15-12-2010 09:29:

Grazie mille della risposta quindi se per esempio in un esercizo dello scritto io ho
c.f( 3 + 3.0 ): ma ho +f(double x): int NON in C, e neanche in B ma si trova in A posso restituire come risultato f(double x) in A? è corretto?


Posted by zack1988 on 15-12-2010 10:53:

Da quello che ho capito tu hai un metodo in A che è f(double x) e vuoi che sia ereditato in C allora visto che A <- B <- C quindi puoi farlo:

Sempre usando java:

PHP:

public class A {
  public void f(double x) {
    System.out.println(x);
  }
}

public class B extends A {}

public class C extends B {}

public class Test {
  public static void main(String [] args) {
    C istanzaC = new C();
    istanzaC.f(10);
  }
}


Posted by Paul442 on 15-12-2010 15:13:

nel compito del 21-01-2010 l'UML era cosi strutturato:
A
+f(long x): int

B
+f(int x): int
+f(double x): int

A a;
B b;
C c;
D d;

a = new B();
b = new B();
c = new D();
d = new D();

Non capisco perchè
• a.f( 3.0 ): ha come soluzione ERRORE! in teoria essendo che a = new B(); non dovrebbe prendere F(double x) in B?


Posted by zack1988 on 15-12-2010 17:09:

potresti passarmi il testo del compito.

CASO 1:
A <- B (B estende A)
L'eredita è a senso "unico" il figlio prende le propietà dal padre e non il contrario.

Quindi in questo caso quando hai istanziato a : A a = new B();
facendo a.f(double) va in errore perchè la classe A non ha visibilità dei metodi e delle propietà di B, quindi non trovando il metodo f con parametro double.

Per poter accedere al metodo devi eseguire il casting:
B b = (B) a;

CASO 2:
B <- A (A estende B)
allora andava in errore quando tentavi di inizializzare
a = new B();


Posted by Paul442 on 15-12-2010 17:17:

Grazie mille!


Posted by Paul442 on 15-12-2010 18:04:

scusa ma rileggendo tutto l'esercizio (che ora ti allego qua in pdf) forse nn mi è ancora del tutto chiaro...non dovrebbe essere la stessa cosa anche per
• c.f( 3 + "ciao".length() ): ?
xke qua invece va bene?
Grazie


Posted by zack1988 on 16-12-2010 13:32:

3.0 è un double invece 3 + 4 (lunghezza di "ciao") è intero.
in A hai il metodo f(long x)

Eccoti un link per i tipi di dati primitivi in java :
http://download.oracle.com/javase/t.../datatypes.html


Posted by Paul442 on 22-12-2010 08:26:

grazie mille per il link...


Posted by tyrdrummer on 31-01-2011 16:01:

Originally posted by zack1988
potresti passarmi il testo del compito.

CASO 1:
A <- B (B estende A)
L'eredita è a senso "unico" il figlio prende le propietà dal padre e non il contrario.

Quindi in questo caso quando hai istanziato a : A a = new B();
facendo a.f(double) va in errore perchè la classe A non ha visibilità dei metodi e delle propietà di B, quindi non trovando il metodo f con parametro double.

Per poter accedere al metodo devi eseguire il casting:
B b = (B) a;

CASO 2:
B <- A (A estende B)
allora andava in errore quando tentavi di inizializzare
a = new B();


sinceramente non capisco perchè dici che l'ereditarietà è a senso unico, nel caso
a.f(double) c'è un metodo double nella classe B pronto perchè mi parli di classe A? Il compilatore vedendo il tipo dell'oggetto ovvero di tipo B non dovrebbe selezionare i metodi di B e quindi il relativo metodo double?


Posted by tyrdrummer on 31-01-2011 16:23:

tutto ok ho capito

:)


All times are GMT. The time now is 11:04.
Show all 12 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.