Real World Softwaredesign, Einführung

Software schreiben kann mittlerweile fast jedes Schulkind. Diese Flut an jungen Talenten hat bisher aber nicht zu einer Sättigung des Arbeitsmarktes geführt. Ganz im Gegenteil. Viele offene Stellen bleiben lange unbesetzt, da es zu wenige qualifizierte Softwareentwickler gibt.  Dies liegt daran das Softwareentwicklung viel komplizierter und anspruchsvoller ist als es im ersten Moment scheint. Soll eine komplexe Software mit zehntausenden oder gar hunderttausenden Zeilen Quellcode entwickelt werden, welche am Ende die gestellten Anforderungen erfüllt und zudem weitgehend fehlerfrei funktioniert, dann bedarf es sehr gut ausgebildeter Softwareentwickler.

Zusätzlich zur Funktionalität muss Software meist auch hohe Qualitätsstandards erfüllen. Diese betreffen zum Beispiel die Benutzerfreundlich, Fehlertoleranz, Wartbarkeit, Erweiterbar und Skalierbarkeit. Spätestens bei der Umsetzung der qualitativen Anforderungen kommt auch ein Grossteil der gut ausgebildeten meist studierten Softwareentwickler an seine Grenzen.

Aber woran liegt das? Während meiner Berufspraxis habe ich festgestellt, dass die grundlegenden Designprinzipien oftmals nicht bekannt sind oder nur unzureichend angewendet werden. Liegt das nun aber am mangelnden Interesse des Entwicklers, am fehlenden Engagement der Lehrer, Ausbilder und Professoren, an den kompliziert anmutenden Designprinzipien oder am schlechten Wetter? Schuld hat hier sicher jeden ein bisschen, ja selbst das schlechte Wetter.

In dieser Artikelserie möchte ich Ihnen daher die grundlegenden Prinzipien des Softwaredesigns näherbringen und deren praktischen Nutzen erläutern. Dabei möchte ich Sie aber nicht mit langweiligen Definitionen foltern sondern werde jedes Softwaredesignprinzip an einem Beispiel aus dem täglichen Leben erklären. Auf diese Weise werden Sie den Sinn des jeweiligen Designprinzips viel besser Verstehen und sofort den praktischen Nutzen ableiten können. Ich verspreche Ihnen, dass Sie dadurch die Designprinzipien viel besser verinnerlichen und während Ihrer täglichen Arbeit anwenden werden.

 

Betrachten wir zur Einstimmung ein kleines Beispiel. Der folgende Satz beschreibt das Liskovsche Substitutionsprinzip.

 „Sei q(x) eine Eigenschaft des Objektes x vom Typ T, dann sollte q(y) für alle Objekte Y des Typs S gelten, wo S ein Subtyp von T ist.“ [1]

Seien Sie ehrlich. Wie oft müssen Sie diese Definition lesen um sie zu verstehen? Oder geht es Ihnen wie mir: Egal wie oft ich den Satz lese so richtig klar wird mir das Designprinzip nicht.

Was ist wenn ich Ihnen ein praktisches Beispiel aus der realen Welt gebe:

Egal was für einen PKW Sie fahren – einen Sportwagen, ein Familienauto, einen Geländewagen oder einen Transporter – sobald Sie auf das Bremspedal treten wird das Fahrzeug verlangsamt. Angewendet auf das Softwaredesign könnte für dieses Beispiel die folgende Aussage getroffen werden:

Wenn eine Klasse Sportwagen von einer Klasse PKW abgeleitet wird (erbt) und die Klasse Sportwagen Funktionen der Klasse PKW überschreibt (wie z.B. die Funktion „Bremsen“), dann müssen sich die überschriebenen Funktionen in der Sportwagen Klasse genauso Verhalten wie die ursprünglichen Funktionen der PKW Klasse.

Oder etwas kürzer und allgemeiner ausgedrückt:

Funktionen einer abgeleiteten Klasse welche Funktionen der Elternklasse überschreiben, müssen sich genauso Verhalten wie die ursprünglichen Funktionen der Elternklasse.

Im Prinzip spiegelt dieser Satz den wesentlichen Inhalt der obigen Definition des Liskovschen Substitutionsprinzips wieder. Vergleichen Sie selbst welche der beiden Definitionen besser verständlicher ist.

Im Rahmen dieser Einführung möchte ich das Liskovsche Substitionsprinzip nicht im Detail erklären und breche daher in dieser Stelle ab. In einem späteren Artikel dieser Reihe werde ich das Thema erneut aufgreifen und detailliert mit Praxisbeispielen und Quellcode erläutern. Das kurze Beispiel soll Ihnen aber zeigen, dass die Prinzipien des Softwaredesign leicht verständlich oder auch unheimlich kompliziert ausgedrückt werden können. Dies hängt davon ab ob eine eher praxistaugliche oder wissenschaftlich formale Betrachtung der Designprinzipien im Vordergrund steht.

 

Fazit

Die Prinzipien des Softwaredesigns sind nicht so kompliziert wie sie oftmals scheinen. Jeder Softwareentwickler kann diese Prinzipien mit geringem Aufwand lernen und anwenden. Dadurch wird sich die Qualität des erstellten Quellcodes spürbar verbessern. In den folgenden Teilen dieser Artikelserie werde ich Ihnen daher die wichtigsten Designprinzipien anhand von Beispielen aus dem täglichen Leben näher bringen.

 

[1] Barbara H. Liskov, Jeannette M. Wing: Behavioral Subtyping Using Invariants and Constraints. Prentice Hall, Pittsburgh Juli 1999

Advertisements
Dieser Beitrag wurde unter Designprinzip, Softwaredesign abgelegt und mit , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

Eine Antwort zu Real World Softwaredesign, Einführung

  1. Pingback: Real World Softwaredesign, Teil 1: Tell, don’t ask! | softwarecoderscorner

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s