2010-09-14 5 views
1

public class Ascenseur() { Bouton firstFloorbutton = ButtonFactory.getButtonInstance (this, 1); Bouton secondFloorbutton = ButtonFactory.getButtonInstance (this, 2); Bouton thirdFloorbutton = ButtonFactory.getButtonInstance (this, 3); Bouton fourthFloorbutton = ButtonFactory.getButtonInstance (this, 4);Has-A Relation

Fan fan1 = FanFactory.getFanInstance(this); 

Light light1 = LightFactory.getInstance(this); 

private void goUp() 
{ 
    ..... 
} 

private void goDown() 
{ 
    ...... 
} 

    ............. 

} 

     ============================ 

public class Button() 
{ 

    Elevator E; 
    int floor; 

    public button (Elevator E, int floor) 
    { 
    this.E = E; 
    this.floor = floor; 
    } 

    public void buttonPressed() 
    { 

    //logic to determine which floor the elevator is currently at and determine whether to go up or down to reach "this.floor" 

    E.goUp(); // if need to go up 

    else 

    E.goDown() // if need to go down 

    } 
} 


    ========================== 


    public class ButtonFactory() 
    { 

     public Button getButtonInstance(Elevator E, int floor) 
     { 
     Button b =new Button(E, floor); 
     return b; 
     } 
    } 

    ================== 

    public class FanFactory(){ .................} 

    ===================== 

    public class LightFactory() { ........... } 


    ========================== 

Quel type de relation existe entre la classe Elevator et Button?

Selon Kathy et Bert (SCJP) page 92: Les relations HAS-A sont basées sur l'utilisation plutôt que sur l'héritage. En d'autres termes, classe A HAS-A B si le code dans la classe A a une référence à une instance de classe B.

Dans mon exemple, le code de classe Elevator a une référence à une instance de Button et Button avec une référence à l'instance. de classe d'ascenseur.

Quelqu'un peut-il s'il vous plaît préciser à ce sujet.

Répondre

3

L'ascenseur possède un bouton. En fait, il en a quatre, mais avec chacun de ces boutons, il y a une relation has-a.

Has-a est un terme quelque peu informel utilisé pour désigner deux types de relation plus formels: l'association et l'agrégation. Dans les deux cas, une partie de la relation a un pointeur vers l'autre, mais ils sont distingués par la sémantique: dans une relation d'association, la première partie connaît l'autre, mais ne la domine pas complètement (pensez-vous et un collègue , ou un patron, ou un subordonné), alors que dans une relation d'agrégation, cette dernière partie fait partie de la première partie, et n'a pas d'existence indépendante (pensez-vous et votre foie). Dans ce cas, je dirais que le bouton est plus spécifiquement à l'extrémité subordonnée d'une relation d'agrégation avec l'ascenseur, et pas simplement une relation d'association.

D'autres exemples d'association peuvent être un client et un vendeur, ou un département et un employé. De l'agrégation, un Order et et OrderLine, ou une structure et un composant. Les cas d'angle intéressants sont une catégorie et un produit, et une commande et une facture. Une conséquence pratique du type de relation est la durée de vie de l'objet: dans une association, si le premier objet meurt, le second peut vivre, mais dans une agrégation, il mourra. Pensez à votre ascenseur: si vous en supprimiez un (ou le supprimiez de vos structures de données en direct et le laissiez être récupéré, au moins), voudriez-vous que les boutons survivent?

+0

Bonne explication Tom. Merci. – AKh

0

Il s'agit d'une relation Has-A, qui est un moyen simple de mémoriser le modèle de composition. La classe Button est composée de la classe Elevator; c'est-à-dire que la classe Button a une classe Elevator.