Von der c2wiki-Seite zu Kopplung und Zusammenhalt :
Kohäsions- (Interdependenz innerhalb des Moduls) Stärke- / Levelnamen: (von schlechter zu besser, hohe Kohäsion ist gut)
- Zufälliger Zusammenhalt: (schlechteste) Modulelemente haben keine Beziehung zueinander
- Logischer Zusammenhalt: Elemente führen ähnliche Aktivitäten aus, wie sie vom externen Modul ausgewählt wurden, dh durch ein Flag, das die auszuführende Operation auswählt (siehe auch CommandObject). Das heißt, der Funktionskörper ist ein riesiges If-else / Einschalt-Betriebsflag
- Zeitlicher Zusammenhalt: Operationen, die nur durch die allgemeine durchgeführte Zeit zusammenhängen (dh Initialisierung () oder FatalErrorShutdown? ())
- Prozedurale Kohäsion: Elemente, die an unterschiedlichen, aber sequentiellen Aktivitäten beteiligt sind, jeweils mit unterschiedlichen Daten (können normalerweise entlang linearer Sequenzgrenzen trivial in mehrere Module aufgeteilt werden)
- Kommunikationszusammenhalt: Operationen ohne Bezug, außer dass dieselben Daten oder Eingaben erforderlich sind
- Sequentielle Kohäsion: Operationen mit denselben Daten in signifikanter Reihenfolge; Die Ausgabe von einer Funktion erfolgt zur nächsten (Pipeline)
- Informationszusammenhalt: Ein Modul führt eine Reihe von Aktionen mit jeweils einem eigenen Einstiegspunkt und unabhängigem Code für jede Aktion aus, die alle in derselben Datenstruktur ausgeführt werden. Im Wesentlichen eine Implementierung eines abstrakten Datentyps. dh definieren Sie die Struktur von sales_region_table und seinen Operatoren: init_table (), update_table (), print_table ()
- Funktionale Kohäsion: Alle Elemente tragen zu einer einzigen, genau definierten Aufgabe bei, dh einer Funktion, die genau eine Operation ausführt. Get_engine_temperature (), add_sales_tax ()
(Hervorhebung von mir).
Ich verstehe die Definition des logischen Zusammenhalts nicht vollständig. Meine Fragen sind:
- Was ist logischer Zusammenhalt?
- Warum bekommt es so einen schlechten Ruf (zweitschlechteste Art von Zusammenhalt)?
Nach der Beschreibung würde ich sagen, dass es darum geht, Code miteinander zu koppeln, der eine gewisse Kohäsion aufweist, aber die Objektorientierung bricht.
Beispiel: Berechnung der Fläche eines Polygons. Wenn Sie die Berechnung für das Quadrat zusammen mit der Berechnung für das Dreieck setzen und nur anhand des Eingabeparameters auswählen, haben Sie zwei Dinge logisch nach ihrem Ergebnis gruppiert, ohne ihre tatsächliche Natur zu berücksichtigen.
quelle
Meine persönliche Meinung ist, dass der
logical
Begriff schlecht gewählt wurde und zu Verwirrung führt. Wir neigen dazu, daslogical
gut zu finden. In vielen Szenarienfunctional
kann mit ausgetauscht werdenlogical
.Ich würde ersetzen
logical
mittechnical
Begriff , weil Sie Ihren Fokus auf technischen Teil und nicht auf (und ich Wort verwenden möchtenlogical
hier aber es wird im Rahmen dieser Diskussion irreführend sein) , was diese Komponente für das ganze System der Fall ist.Ein typisches Beispiel kann die Gruppierung von Klassen sein, die Endpunkte für einige APIs bereitstellen.
Wenn Sie sie in einem Ordner gruppieren, weil sie Endpunkte bereitstellen, ist dies ein
technical cohesion
. Wenn Sie sie gruppieren, weil sie einige Funktionen bieten (z. B. die Liste der Verwaltungsbenutzer), ist dies einefunctional cohesion
Darüber hinaus würde ich hier auch den
functional
Begriff herausfordern , weil er zu weit gefasst ist. Es kann sowohl die Funktion als Syntaxkonstruktion als auch die Funktionalität einer Sache bezeichnen. Im obigen Beispiel verfügt eine Endpunktklasse über zwei Funktionen: Endpunkt und Geschäftslogik.Ich würde ersetzen
functional
zulogical
. Es beziehtbusiness logic
sich auf einlogical view
4 + 1-Software-Ansichtsmodell, und im Allgemeinen neigen wir dazu, Dinge als "logisch" zu bezeichnen, wenn sie richtig sind.quelle