2009-08-13 5 views
5

Innerhalb des OO-Paradigmas wählen wir Klassen, weil sie uns helfen, das System zu durchbrechen und nette Nebenvorteile wie Verkapselung, Trennung von Verantwortlichkeiten, Vererbung, Modularität usw. zu bieten Softwaresystem auf Komponentenebene, können wir Komponenten einfach konzeptionell behandeln, dh eine Komponente ist einfach eine "Große Klasse"? Oder ist da mehr dran?Terminologie: Was ist der Unterschied zwischen einer Klasse und einer Komponente?

Welche zusätzlichen Überlegungen müssen bei der Konstruktion der Komponenten berücksichtigt werden?

EDIT:

Ich weiß, dass eine Klasse und eine Komponente verschiedene Dinge sind. Ich verstehe auch, dass eine Komponente viele viele Klassen enthalten kann, von denen jede ihre eigenen Rollen und Verantwortlichkeiten hat.

Ich werde sehen, ob ich mich besser erklären kann.

  • Klassen ermöglichen es uns, größere Probleme zu lösen, weil sie uns erlauben, abstrakter zu denken und zu entwerfen.
  • Es gibt Regeln & Techniken, um zu bestimmen, wie Sie Daten und Funktionalität zu Klassen aufschlüsseln und zuweisen.
  • Dies scheint eine sehr ähnliche Situation zu sein wie die des Komponentendesigns, nur auf einer höheren Ebene der Abstraktion. Müssen die Techniken, die zur Bestimmung der erforderlichen Klassen verwendet werden, auf Komponenten skaliert werden und/oder gibt es andere Dinge, die sich auf ein Systemdesign auf höherer Ebene auswirken, die nicht auf Ebene der Klassenabstraktion angewendet werden?

    +0

    überprüfen Sie auch http://stackoverflow.com/questions/1027875/in-a-software-project-how-would-you-differentiate-a-component-from-a-module – dfa

    Antwort

    10

    Was ist mit der Verwendung der Projektphase oder -rolle, um sie zu unterscheiden?

    Zum Beispiel kann ein Komponente ist eine Entwurfszeiteinheit (Systemarchitekten, Designer), wohingegen eine Klasse ist eine Implementierung Zeiteinheit (Programmierer). Designer sprechen also über Komponenten (oder Subsysteme oder Module, die High-Level-Boxen in Ihrer Architekturzeichnung), wohingegen Programmierer über Komponenten und Klassen sprechen (die Komponenten implementieren).

    In dieser Ansicht wird eine Komponente von einer oder mehreren Klassen implementiert.

    -1

    Eh?

    Die „File Upload“ Komponente von vielen Klassen bestehen: Seite die Datei, Klasse zu erhalten, zu speichern, usw.

    +0

    Vielleicht war ich nicht klar in meine Frage. Ich habe es jetzt geklärt :) – andrewdotnich

    2

    Ich denke oft an Komponenten im UML-Sinne (siehe Wikipedia Beschreibung), wobei es stellt einen "modularen Teil eines Systems" dar. In diesem Sinne stellt es tendenziell eine größere Funktionalität dar als eine Klasse und könnte tatsächlich aus mehreren Klassen bestehen.

    Überlegungen ich zu entwerfen Komponenten geben würde, sind:

    • Wie es wiederverwendet werden kann. Vor allem, was sind die Anwendungsfälle, die etwas als Komponente implementieren, anstatt maßgeschneiderte Code (wie ein Grad, den ich alles wiederverwendbar macht!)
    • Bereitstellung sinnvoller Schnittstelle (n), und in einigen Fällen zusätzlich vereinfacht Schnittstellen, vielleicht mit dem Facade Muster.

    Hoffe, dass hilft.

    1

    In diesem (hypothetischen) Kontext kann eine Komponente als eine Reihe von Klassen betrachtet werden.

    Je nach verwendeter Technologie können Komponenten jedoch mehr als eine Reihe von Klassen sein. , d. H. Sie können zusätzliche Eigenschaften und Funktionen aufweisen, die nicht Teil der Klassen sind, die sie bilden. z.B. eine COM + -Komponente.

    So hängt es wirklich von einer bestimmten Situation ab.

    1

    Nach der UML v2 specification:

    8.3.1 Component (von BasicComponents, PackagingComponents)

    Eine Komponente stellt ein modulares Teil eines Systems, der seinen Inhalt und deren Manifestation verkapselt ist austauschbar in seiner Umgebung.

    Eine Komponente definiert ihr Verhalten in Bezug auf bereitgestellten und erforderlichen Schnittstellen. Als solcher Art dient eine Komponente als eine Art , deren Konformität durch diese bereitgestellten und erforderlichen Schnittstellen (einschließlich ihrer statischen als sowie dynamische Semantik) definiert ist. Eine Komponente kann daher durch eine andere nur ersetzt werden, wenn die beiden vom Typ konform sind. Größere Stücke einer Funktionalität System kann durch Wiederverwendung Komponenten als Teile in einer umlaufenden Komponente oder Montage von Komponenten zusammengesetzt, und die Verdrahtung zusammen ihre erforderlichen und vorgesehenen Schnittstellen.

    Wenn Sie diese Definition verwenden, scheinen die Komponenten alles über Inversion Of Control zu sein.

    Mit Blick auf das .NET-Framework für ein Beispiel bietet die IComponent Schnittstelle in der Tat IComponent. Site. GetService, um eine Inversion der Kontrolle durch das Service-Provider-Muster zu erreichen. Eine leichtere Alternative ist die Abhängigkeitsinjektion.

    -1

    Komponenten sind Subsysteme von Klassen. Klassen bieten die grundlegenden niedrigen Niveau Entwurf eines Objekts Schnittstelle während Komponenten einige Funktionen, um es hinzufügt.

    Verwandte Themen