Das Diagramm stellt dar, wie das Fliege- und Redeverhalten durch Komposition flexibel gestaltet werden kann.[1]

Komposition anstelle von Vererbung (engl. composition over inheritance oder composite reuse principle) ist eine Technik im Softwareentwurf. Durch dieses Prinzip werden Klassen entkoppelt, was zu flexibleren und stabileren Entwürfen führt. So ist es möglich, zur Laufzeit das Verhalten einer Klasse zu verändern.[1]

Grundlagen

Bearbeiten

Bei diesem Entwurfsprinzip werden Algorithmen, die in einer Klasse Verwendung finden können, als separate Klassen entworfen, die vorzugsweise von Schnittstellen abgeleitet sind. Die Klassen, die eventuell einen dieser Algorithmen ausführen sollen, beinhalten eine Membervariable des Typs der gemeinsamen Schnittstelle, der (auch zur Laufzeit) einer dieser Algorithmen zugewiesen werden kann. Dadurch sind die Klassen von den Algorithmen und deren Details getrennt – weitere Entwicklungen und Änderungen an den Algorithmenklassen haben kaum Einfluss auf die Klasse, was Anpassungen unnötig macht. Dadurch wird der Code nicht verändert, was wiederum ein anderes Entwurfsprinzip, das Open-Closed-Prinzip, befürwortet.[1]

Beispiel

Bearbeiten

Das folgende Java-Beispiel ist die Implementierung des oben angegebenen Entwurfs.

/**
 * Interface for everything flyable
 */
public interface Flyable {
    /**
     * Method that implements flying behaviour
     */
    void fly();
}

/**
 * Interface for everything that gives a quacking sound
 */
public interface Quackable {
    /**
     * Method for the quacking sound
     */
    void quack();
}

/**
 * Abstract class for Duck
 */
public abstract class Duck implements Ducklike, Comparable<Object> {
    /** Flying behaviour of the duck */
    protected Flyable flyBehavior = null;
    /** Quack behaviour of the duck */
    protected Quackable quackBehavior = null;

    /**
     * Standard constructor
     */
    public Duck() {
        initialize();
    }

    /**
     * Constructor
     * @param WEIGHT Weight of the duck
     */
    public Duck(final float WEIGHT) {
        initialize();
        weight = WEIGHT;
    }

    protected abstract void initialize();

    /**
     * Display method
     */
    public abstract void display();

    /**
     * Performs the flying behaviour
     */
    public void fly() {
        flyBehavior.fly();
    }

    /**
     * Performs the quacking behaviour
     */
    public void quack() {
        quackBehavior.quack();
    }

    /**
     * Setter for the fly behaviour
     * @param FLYING
     */
    public void setFlyBehavior(final Flyable FLYING) {
        flyBehavior = FLYING;
    }

    /**
     * Setter for the quack behaviour
     * @param QUACKING
     */
    public void setQuackBehavior(final Quackable QUACKING) {
        quackBehavior = QUACKING;
    }
}

Siehe auch

Bearbeiten

Einzelnachweise

Bearbeiten
  1. a b c Eric Freeman, Elisabeth Freeman, Sierra Kathy, Bates Bert: Head First Design Patterns. Hrsg.: Mike Hendrickson, Mike Loukides. Band 1. O'REILLY, 2004, ISBN 0-596-00712-4, S. 23 (englisch, it-ebooks.info [abgerufen am 24. September 2012]).

📚 Artikel Terkait di Wikipedia

Pol der Unzugänglichkeit

Garcia-Castellanos, Umberto Lombardo: Poles of Inaccessibility: A Calculation Algorithm for the Remotest Places on Earth. In: Scottish Geographical Journal. Vol

On-the-fly

Mit on-the-fly (wörtlich „im Fluge“, sinngemäß u. a. „im Vorbeigehen“, „spontan“) wird in der Computertechnik ein Vorgang bezeichnet, der auf das dauerhafte

Enterprise JavaBeans Certificate Authority

Funktionen zur Verfügung: RSA-Algorithmen für Schlüssel bis zu einer Länge von 8192 Bit Elliptic-Curve-DSA-Algorithmen die Hashfunktionen MD5, SHA-1 und

Friedhelm Meyer auf der Heide

ist deutscher Informatiker und ehemaliger Inhaber des Lehrstuhls für Algorithmen und Komplexität am Heinz Nixdorf Institut der Universität Paderborn (1989–2023)

Liang Wenfeng

Studienkollegen die Gründung des Hedgefond High-Flyer, der seine Anlageentscheidungen vollständig auf KI-gestützte Algorithmen stützte. Das Unternehmen erwies sich

Dm-crypt

Device Mappers im Linux-Kernel. dm-crypt kann Daten mit verschiedenen Algorithmen ver- und entschlüsseln, dies kann auf beliebige Gerätedateien angewandt

Cron

verwendeten Algorithmen mit einfach verketteten Listen überlegen sind (“performance superior to that of commonly used simple linked list algorithms”) und eine

Lockheed Martin F-22

Martin entwickelt aktuell multispektrale hochauflösende Sensoren und neue Algorithmen, die das System mit IRST-(Infrared Search & Track)-Fähigkeiten zum Verfolgen