Codierungs-Standard

 

Der hier angeführte Codierungs-Standard ist im wesentlichen aus dem Buch von Schmaranz (s. Literaturliste) übernommen. Er ist in einigen wenigen Punkten modifiziert, so dass er mit den in der Vorlesung verwendeten Beispielen konform ist. Es sind natürlich auch andere Standards denkbar und sinnvoll, für die Praktikumsaufgaben und in der Klausur ist jedoch dieser Standard einzuhalten!

 

1   Generelle Regeln

 

Die folgenden Prinzipien sind essentiell für die Lesbarkeit, Wartbarkeit und Erweiterbarkeit eines Programms:

 

Einfachheit: Das Prinzip der Einfachheit ist auch als das KISS-Prinzip (Keep It Small and Simple) bekannt. Kurz gesagt sollen Methoden, Funktionen und natürlich auch Operatoren genau eine, für ihren Abstraktionslevel adäquate, atomare Aufgabe erfüllen. Niemals sollen mehrere Aufgaben auf einmal erledigt werden, genauso wenig, wie Aufgaben erledigt werden sollen, die in ein anderes Abstraktionslevel gehören (=Durchgriff nach unten oder oben). Parameterlisten sollen so kurz und übersichtlich wie möglich gehalten werden. Methoden, Operatoren und Funktionen sollen als Faustregel nicht mehr als 60 Zeilen lang sein. Eine durchschnittliche Länge von ca. 30 Zeilen ist zu bevorzugen. Seiteneffekte sind absolut zu vermeiden!

 

Intuitivität: Das Prinzip der Intuitivität bedeutet, dass man den geschriebenen Source-Code "wie ein Buch" lesen und verstehen können muss, und zwar ohne Kommentare im Source-Code und ohne Erklärungen des Programmierers! Damit ist impliziert, dass Variablen-, Methoden- und Funktionsnamen sprechend (=selbsterklärend) und genau ihrer Funktionalität entsprechend benannt sein müssen. Einbuchstabenvariablen, wie z.B. i, sind nur in Sonderfällen wie Schleifenzähler erlaubt. Unnötige Kommentare werden als störend erachtet und sollen dementsprechend weggelassen werden. Ein typisches Beispiel für solche unnötigen Kommentare wäre:

count++; // and here the counter is incremented

 

Einheitlichkeit: Verwandte Teile im Source-Code müssen denselben Prinzipien folgen. Wenn z.B. eine Funktion copy als ersten Parameter den Zielort und als zweiten Parameter den Ursprungsort nimmt, dann müssen verwandte Funktionen, wie z.B. move, sich an dieselben Konventionen halten. Genauso gilt dies auch für Klassen und ihre Methoden. Nehmen wir z.B. eine Klasse die einen Knoten für z.B. eine einfach verkettete Liste repräsentiert. Wenn in dieser Klasse der nachfolgende Knoten über Aufruf von next() erreichbar ist, dann darf er nicht in einem Knoten für eine doppelt verkettete Liste auf einmal über Aufruf von successor() erreichbar sein.

 

 

2   Codierungs-Regeln

 

Die hier angeführten Regeln helfen, den Source-Code so weit wie möglich zu vereinheitlichen und damit die Arbeit in einem Team zu erleichtern:

-      Jedes File muss einen Header besitzen, in dem zumindest der Filename, und eine kurze Beschreibung des Inhalts zu finden sind. In der Praxis hat es sich eingebürgert, dass außerdem der Name des Autors, das Erstellungsdatum, das letzte Änderungsdatum, eine Versionsnummer und ein Copyright-Statement im Header stehen.

-      Geschwungene Klammern für Code-Blöcke müssen in einer eigenen Zeile stehen. Ausnahme hiervon sind Codeblöcke, die zu Kontrollstrukturen (Auswahl, Wiederholung) gehören. Bei diesen steht die öffnende geschwungene Klammer in derselben Zeile wie das Schlüsselwort der Kontrollstruktur (if, while, for, …). Die Einrückung der Klammern entspricht genau dem umschließenden Block. Der eingeschlossene Block selbst muss genau um 3 Spaces eingerückt sein (hier sind in der Praxis Werte zwischen 2 und 4 gängig). Einrückungen dürfen ausschließlich mit Spaces gemacht werden, Tabs sind verboten, denn sonst kann es mit verschiedenen Editor-Einstellungen und beim Drucken Probleme geben.

-      Vor jeder Operator-, Methoden- oder Funktionsdefinition muss in kurzen Worten beschrieben werden, wozu diese Funktion dient. Bei größeren Projekten muss auch beschrieben sein, was bei den einzelnen Parametern erwartet wird, welche Randbedingungen gelten, welche Return-Values zu erwarten sind und wie diese zu interpretieren sind.

 

 

3   Design Guidelines

 

Dieser Abschnitt enthält einige generelle Richtlinien, die helfen sollen, sauberen und robusten Code zu schreiben.