mercoledì 25 settembre 2013

Q14


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