Given:
import java.util.*;
public class Flimmer implements Pinkable {
List <Tagger> t = new
ArrayList<Tagger>();
}
public class Flommer extends Flimmer {
String s = "hey" ;
}
public class Tagger implements Glommer {
void doStuff(){ String s ="yo" ;}
}
public interface Glommer {}
public interface Pinkable {}
Which two statements concerning the OO concepts “is-a” and “has-a” are
true?
A.
Flimmer is-a Glommer.
B.
Flommer has-a String.
C.
Tagger has-a Glommer.
D.
Flimmer is-a ArrayList.
E.
Tagger has-a doStuff().
F.
Tagger is-a Glommer.
La risposta è EF.
Nella programmazione orientata agli oggetti (e in generale
nella rappresentazione della conoscenza)
is-a indica
una relazione dove una classe A è sottoclasse di una classe B (e B è superclasse
di A) .
A
is-a B indica che A è sotto tipo di B.
Un altro modo di specificare questo concetto è dire ogni
oggetto che soddisfa le specifiche di A soddisfa anche le specifiche di B , perché
le specifiche di B sono più leggere di quelle di A.
Invece has-a
indica che un oggetto appartiene ad un altro oggetto. In Java ad esempio un attributo appartiene ad una classe e quindi :
A
has-a B indica che la classe A ha un attributo B.
Ad esempio consideriamo queste tre classi :
public class Superclasse {}
public class Sottoclasse extends Superclasse{ }
public class Classe {
int attributo;
}
Possiamo scrivere :
·
Sottoclasse is-a Superclasse
·
Classe has-a
attributo
Quindi :
A.
Flimmer is-a Glommer. NO
Stiamo dicendo che Flimmer è sotto
tipo di Glommer ma non è vero perchè tra i due oggetti non c'è relazione.
Sarebbe vero dire Flimmer is-a Pinkable
perchè in effetti Flimmer implementa Pinkable
e quindi ne è un sotto tipo.
B.
Flommer has a String. NO
Sarebbe giusto dire Flommer has-a
s (che è di tipo String)
C.
Tagger has-a Glommer. NO
Per essere vero Tagger dovrebbe avere
Glommer come attributo.
D.
Flimmer is-a ArrayList. NO
Flimmer non è certo un sotto tipo
del tipo ArrayList!
E.
Tagger has a doStuff() OK
Questo è vero perchè in effetti Tagger
possiede il metodo doStuff().
F.
Tagger is-a Glommer. OK
Questo è vero perchè Tagger è un sotto tipo di Glommer.
Infatti Glommer è una interfaccia e Tagger la implementa.
Riferimenti:
Nessun commento:
Posta un commento