Dienstag, 22. April 2014

Abstraktheit - die Metrik

Da Martin die Abstraktheit eines Packages in ein numerisches Verhältnis zur Stabilität setzen will, benötigt er eine Metrik zur Messung der Abstraktheit. Während für Klassen der Fall klar ist (sie sind entweder abstrakt oder nicht abstrakt), können Packages sowohl aus abstrakten als auch aus nicht abstrakten Klassen bestehen. Wie ist dann die Abstraktheit eines Packages einzustufen?

Martin definiert seine Abstractness-Metrik A wie folgt:


Dies ist vermutlich die einfachst mögliche Maßzahl für die Abstraktheit eines Packages. Sie geht allerdings mit (mindestens) folgenden Nachteilen einher:
  • Es wird nicht berücksichtigt, wie viele Methoden einer Klasse abstrakt sind.
  • Die Größe der einzelnen Klassen wird nicht berücksichtigt.
Martin schreibt selbst:
"Dies ist keine perfekte Metrik. Sie nimmt an, dass eine Klasse mit 20 konkreten Methoden und einer abstrakten Methode so gezählt wird wie dieselbe Klasse, wenn sie ausschließlich aus abstrakten Methoden bestünde." [MartinStability1996]

Was sagt die Abstraktheit eines Packages aus?

Abgesehen von der Schwäche der Metrik-Definition darf allerdings auch gefragt werden, was genau durch die Abstraktheit eines Packages ausgesagt werden soll. Klassen können abstrakt sein. Aber wie kann rechtfertigt werden, das Konzept der Abstraktheit auf Packages oder andere höherwertige Komponenten zu übertragen? Und dies, zumal nicht nur die Eigenschaft der Abstraktheit von einer Entität auf eine andere übertragen wird, sondern auch der Wertebereich der Metrik sich von den Ausprägungen {Ja, Nein} zu einer Gleitkommazahl zwischen 0 und 1 ändert. Messtheoretisch lässt sich dieses Vorgehen jedenfalls nicht begründen.

Aber auch inhaltlich erscheint der "Abstraktheitsgrad" eines Packages als eine problematische Maßzahl. Immerhin verbindet Martin ja mit der Abstraktheit positive Eigenschaften wie eine bessere Entkoppelung, die Anwendbarkeit des Open-Closed-Prinzips usw. Bleiben denn diese Eigenschaften erhalten? Ist ein Package mit A = 0,3 besser entkoppelt als ein Package mit A = 0,1? Oder kann das Open Closed-Prinzip für abstraktere Packages besser angewandt werden? Dies ist eindeutig nicht immer der Fall, da z. B.:
  • nicht klar ist, ob die tatsächlich relevanten Methoden abstrakt deklariert wurden
  • ob die Klienten abstrakte oder konkrete Methoden aufrufen

Fazit

In der von Martin vorgeschlagenen Form ist die Abstraktheits-Metrik ein sehr schwaches Maß für das Konzept der Abstraktheit. Es taugt allenfalls, um sehr grob über das Außmaß der Verwendung von abstrakten Klassen zu informieren, ist aber keinesfalls geeignet, um die Ableitung irgendwelcher qualitativen Aussagen abzuleiten.

Quellen

[MartinStability1996] - Stability, Robert C. Martin (1996), http://www.objectmentor.com/resources/articles/stability.pdf