![]() |
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)
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
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();
}
}
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?
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);
}
}
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?
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();
Grazie mille!
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
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
grazie mille per il link...
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();
tutto ok ho capito

| All times are GMT. The time now is 00:29. | Show all 12 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.