Franz Pucher / HIM0Board

You are viewing an older revision! See the latest version

HasA versus IsA

HasA (hat ein)

Composition (Komposition, Aggregation)

Beschreibt die Beziehung zwischen einem Ganzen und seinen Teilen.

/media/uploads/fpucher/hasa.jpg

Dieses UML-Diagramm entsricht dem folgenden UML Klassendiagramm wobei die Klasse DigitalOut instanziiert wird:

/media/uploads/fpucher/hasa_attribut.jpg

Es wird also eine Membervariable (Attribut) des Datentypes DigitalOut hinzugefügt (MyLed hat ein DigitalOut-Pin). Allerdings wird erst die Adresse des eigentlichen Zieles - auf eine Klasse DigitalOut – erzeugt und im parametrisierten Konstruktor - selber Name wie Klasse - mit einem Pin-Namen als Parameter wird ein neues DigitalOut Objekt led1 mit Pin ld1 erzeugt:

MyLed(PinName ld1) {
    led1 = new DigitalOut(ld1);
};

Methode: Der Aufruf der Methode write() in der Klasse DigitalOut erfolgt über den Zeiger led1 entweder mit direktem Zugriff mit „.“ (*led1).write(1) – Klammern wegen der Operator Priorität C++ Operator Precedence oder besser indirekter Zugriff über den Zeigeroperator „->“ Zeiger auf Element:

void LedOn() {
    led1->write(1);
}

IsA (ist ein)

Inheritance (Vererbung)

/media/uploads/fpucher/isa.jpg

Man spricht bei Vererbung von einer »Ist ein«-Beziehung (siehe UML Klassendiagramm. MyLed »ist ein« DigitalOut und hat alle Eigenschaften der Klasse DigitalOut und fügt ihnen nun seine Besonderheiten, Methoden wie z.B. ToggleLed(), BlinkLed(), ..., hinzu. Neben den Datenelementen (Attribute) vererben sich auch die Methoden, wie z.B. write() und read(). Lediglich die Konstruktoren, die Destruktoren und die Zuweisungsoperatoren werden nicht vererbt. Bei der Erzeugung des Objektes wird der Konstruktor der DigitalOut-Klasse aufgerufen, der den Pin auf ld1 setzt:

class IsA : public DigitalOut {
public:
    IsA(PinName ld1) : DigitalOut(ld1, 0){}
}

Methode: Es wird die Methode der Basisklasse DigitalOut über den Bereichsauflösungs-Operator (scope resolution) „::“ aufgerufen:

void LedOn() {
    DigitalOut :: write(1);
}

All wikipages