summaryrefslogtreecommitdiffstats
path: root/Bachelor/Prog1/Codierungsstandard.htm
diff options
context:
space:
mode:
authorSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
committerSven Eisenhauer <sven@sven-eisenhauer.net>2023-11-10 15:11:48 +0100
commit33613a85afc4b1481367fbe92a17ee59c240250b (patch)
tree670b842326116b376b505ec2263878912fca97e2 /Bachelor/Prog1/Codierungsstandard.htm
downloadStudium-master.tar.gz
Studium-master.tar.bz2
add new repoHEADmaster
Diffstat (limited to 'Bachelor/Prog1/Codierungsstandard.htm')
-rw-r--r--Bachelor/Prog1/Codierungsstandard.htm319
1 files changed, 319 insertions, 0 deletions
diff --git a/Bachelor/Prog1/Codierungsstandard.htm b/Bachelor/Prog1/Codierungsstandard.htm
new file mode 100644
index 0000000..844c06d
--- /dev/null
+++ b/Bachelor/Prog1/Codierungsstandard.htm
@@ -0,0 +1,319 @@
+<html><head>
+<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
+<meta name="ProgId" content="FrontPage.Editor.Document">
+<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
+
+<title>Codierungs-Standard</title><style>
+<!--
+ p.MsoNormal
+ {mso-style-parent:"";
+ margin-bottom:.0001pt;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ margin-left:0cm; margin-right:0cm; margin-top:0cm}
+ li.MsoNormal
+ {mso-style-parent:"";
+ margin-bottom:.0001pt;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ margin-left:0cm; margin-right:0cm; margin-top:0cm}
+-->
+</style></head>
+
+<body>
+
+<p class="MsoNormal" style="">
+<span style="font-size: 14.5pt; font-family: Arial;">Codierungs-Standard</span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 14.5pt; font-family: Arial;"> </span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;">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
+<b>und in der Klausur </b>ist jedoch dieser Standard einzuhalten!</span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;"> </span></p>
+<p class="MsoNormal" style=""><b>
+<span style="font-family: Arial;">1   Generelle Regeln</span></b></p>
+<p class="MsoNormal" style="">
+<span style="font-family: Arial;"> </span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;">Die folgenden Prinzipien sind
+essentiell für die Lesbarkeit, Wartbarkeit und Erweiterbarkeit eines Programms:</span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;"> </span></p>
+<p class="MsoNormal" style=""><b>
+<span style="font-size: 10pt; font-family: Arial;">Einfachheit:</span></b><span style="font-size: 10pt; font-family: Arial;">
+Das Prinzip der Einfachheit ist auch als das KISS-Prinzip (<b>K</b>eep <b>I</b>t
+<b>S</b>mall and <b>S</b>imple) 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!</span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;"> </span></p>
+<p class="MsoNormal" style=""><b>
+<span style="font-size: 10pt; font-family: Arial;">Intuitivität: </span></b>
+<span style="font-size: 10pt; font-family: Arial;">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:</span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Courier New;" lang="EN-GB">count++;
+// and here the counter is incremented</span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;"> </span></p>
+<p class="MsoNormal" style=""><b>
+<span style="font-size: 10pt; font-family: Arial;">Einheitlichkeit:</span></b><span style="font-size: 10pt; font-family: Arial;"> Verwandte Teile im Source-Code müssen denselben Prinzipien folgen. Wenn
+z.B. eine Funktion </span>
+<span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">copy</span><span style="font-size: 10pt; font-family: Arial;">
+als ersten Parameter den Zielort und als zweiten Parameter den Ursprungsort
+nimmt, dann müssen verwandte Funktionen, wie z.B. </span>
+<span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">move</span><span style="font-size: 10pt; font-family: Arial;">,
+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 </span>
+<span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">next()</span><span style="font-size: 10pt; font-family: Arial;">
+erreichbar ist, dann darf er nicht in einem Knoten für eine doppelt verkettete
+Liste auf einmal über Aufruf von </span>
+<span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">successor()</span><span style="font-size: 10pt; font-family: Arial;">
+erreichbar sein.</span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;"> </span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;"> </span></p>
+<p class="MsoNormal" style=""><b>
+<span style="font-family: Arial;">2   Codierungs-Regeln</span></b></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;"> </span></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;">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:</span></p>
+<ul style="margin-top: 0cm; margin-bottom: 0cm;" type="disc">
+ <li class="MsoNormal" style=""><b>
+ <span style="font-size: 10pt; font-family: Arial;">Die Sprache für Source-Code
+ ist Englisch. Dies gilt für alle Teile eines Programms</span></b><span style="font-size: 10pt; font-family: Arial;">,
+ von Variablennamen über Methoden- und Funktionsnamen bis hin zu Kommentaren im
+ Source-Code.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Der Gebrauch von Block-Kommentaren </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">(/* comment
+ */</span><span style="font-size: 10pt; font-family: Arial;">) ist zu vermeiden.
+ Stattdessen müssen Zeilenkommentare (</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">// comment</span><span style="font-size: 10pt; font-family: Arial;">) eingesetzt werden. Dies macht Source-Code robuster gegen
+ Änderungen und erleichtert das Debugging</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Wenn es sich nicht vermeiden lässt, z.B.
+ algorithmische Details in Form von Kommentaren in den Source-Code
+ einzubringen, dann ist ein Block mit einer vollständigen Erklärung des
+ Algorithmus vor der Implementation des Algorithmus selbst zu schreiben. Es
+ darf die Kommentierung des Algorithmus nicht im laufenden Source-Code Zeile
+ für Zeile erfolgen, denn sonst wird der Code durch die Kommentare unleserlich.
+ Natürlich sind wenige, kurze Kommentare in Form von Cross-References zur
+ vollständigen Erklärung manchmal sinnvoll und deshalb erlaubt.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Sollten jemals Codezeilen in das Programm Eingang
+ finden, bei denen beim Lesen der Zeile nicht sofort klar ist, was sie tut,
+ dann muss dies in einem kurzen Kommentar dort festgehalten werden. Jedoch
+ sollte man sich immer sehr gut überlegen, ob es nicht eigentlich ein besseres,
+ leichter lesbares Konstrukt gibt, das keinen Kommentar benötigt, um verstanden
+ zu werden.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Globale Variablen sind nach allen Möglichkeiten
+ zu vermeiden!</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">C-Style Casts sind zu vermeiden. Stattdessen
+ müssen die "echten" C++-Casts </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">static_cast</span><span style="font-size: 10pt; font-family: Arial;">, </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">dynamic_cast</span><span style="font-size: 10pt; font-family: Arial;">, etc. Anwendung finden.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Wenn aus irgendwelchen Gründen böse Hacks im
+ Source-Code temporär nicht vermeidbar sind (z.B. Zeitdruck), so sind diese
+ unbedingt in hackstart und hack-end Kommentare zu fassen, damit man sie
+ einfach wieder finden und ausbessern kann. Die hack-... Kommentare haben die
+ folgendeForm:<br>
+ </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">//
+ FIXXME (&lt;author, date&gt;) -&gt; &lt;description of the hack&gt;<br>
+ [..... the code with the hack .....]<br>
+ // END FIXXME (&lt;author, date&gt;)</span><span style="font-size: 10pt; font-family: Arial;"><br>
+ Hier gehört das Keyword </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">FIXXME</span><span style="font-size: 10pt; font-family: Arial;"> immer mit zumindest zwei '</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">X</span><span style="font-size: 10pt; font-family: Arial;">' geschrieben, denn damit kann man leicht nach ihm
+ suchen. Je nachdem, wie schlimm der Hack ist, können auch mehrere '</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">X</span><span style="font-size: 10pt; font-family: Arial;">'
+ vorkommen. Als Faustregel für die Abstufung gilt, dass der SVH (=Schlimmste
+ Vorstellbare Hack) mit 5 '</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">X</span><span style="font-size: 10pt; font-family: Arial;">'
+ geschrieben wird.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Klassendeklarationen müssen von ihren
+ Definitionen getrennt und in einem separaten Header File gespeichert werden.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Alle Klassen müssen einen </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">virtual</span><span style="font-size: 10pt; font-family: Arial;">
+ Destruktor besitzen.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Alle Klassen müssen sowohl den Copy-Constructor
+ als auch den Zuweisungsoperator explizit implementieren. Wenn keine
+ Implementation der beiden gewünscht ist, dann müssen sie als Dummies
+ implementiert und auf </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">private</span><span style="font-size: 10pt; font-family: Arial;"> gesetzt werden.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Alle Headers müssen durch Definition und
+ entsprechende Abfragen von Preprocessor Macros vor Mehrfachinklusion geschützt
+ werden. Das entsprechende </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">#define</span><span style="font-size: 10pt; font-family: Arial;"> muss der folgenden Namenskonvention entsprechen: </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">FILENAME_H</span><span style="font-size: 10pt; font-family: Arial;">,
+ wobei </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">FILENAME_H</span><span style="font-size: 10pt; font-family: Arial;">
+ natürlich dem Namen der Headerdatei entspricht.</span></li>
+ <li class="MsoNormal" style=""><b>
+ <span style="font-size: 10pt; font-family: Arial;">Namen von Bezeichnern</span></b><span style="font-size: 10pt; font-family: Arial;">
+ müssen den folgenden Konventionen genügen:<br>
+ Klassen: </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ AlleWorteCapitalizedOhneUnderlines</span><span style="font-size: 10pt; font-family: Arial;"><br>
+ Structures: </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ GleichWieKlassen</span><span style="font-size: 10pt; font-family: Arial;"><br>
+ Unions: </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ GleichWieKlassen</span><span style="font-size: 10pt; font-family: Arial;"><br>
+ Exceptions: </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ KlassennameEndetMitException</span><span style="font-size: 10pt; font-family: Arial;"><br>
+ Methoden und Funktionen: </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">erstesWortKleinRestCapitalized</span><span style="font-size: 10pt; font-family: Arial;"><br>
+ Konstanten: </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ GROSS_MIT_UNDERLINES</span><span style="font-size: 10pt; font-family: Arial;"><br>
+ Member Variablen: </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ erstesWortKleinRestCapitalized</span><span style="font-size: 10pt; font-family: Arial;"><br>
+ Lokale Variablen: </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ erstesWortKleinRestCapitalized</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Neben diesen generellen Konventionen gibt es auch
+ eine spezielle Konvention, die sich auf die Semantik von Methoden bezieht:<br>
+ Schreibende Zugriffsmethoden auf Member Variablen müssen </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">setXXX</span><span style="font-size: 10pt; font-family: Arial;">
+ und ihre lesenden Äquivalente </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">getXXX</span><span style="font-size: 10pt; font-family: Arial;">
+ benannt werden (z.B. </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">setMaxUsers</span><span style="font-size: 10pt; font-family: Arial;">,
+ </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ getMaxUsers</span><span style="font-size: 10pt; font-family: Arial;">). Eine
+ Ausnahme dabei bilden Zugriffe auf boolsche Variablen: Hier wird die lesende
+ Methode semantisch sinnvoll mit </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">isXXX</span><span style="font-size: 10pt; font-family: Arial;">,
+ </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ hasXXX</span><span style="font-size: 10pt; font-family: Arial;">, </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">allowsXXX</span><span style="font-size: 10pt; font-family: Arial;">
+ o.ä. benannt (z.B. </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">setReadOnly</span><span style="font-size: 10pt; font-family: Arial;">,
+ </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ isReadOnly</span><span style="font-size: 10pt; font-family: Arial;">).</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Die Struktur des Source-Codes muss den folgenden
+ Prinzipien genügen:</span></li>
+</ul>
+<p class="MsoNormal" style="text-indent: -14.2pt; margin-left: 68.2pt;">
+<span style="font-size: 10pt; font-family: Symbol;">-<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">     
+</span></span><span style="font-size: 10pt; font-family: Arial;">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.</span></p>
+<p class="MsoNormal" style="text-indent: -14.2pt; margin-left: 68.2pt;">
+<span style="font-size: 10pt; font-family: Symbol;">-<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">     
+</span></span><span style="font-size: 10pt; font-family: Arial;">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 (</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">if</span><span style="font-size: 10pt; font-family: Arial;">, </span>
+<span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">while</span><span style="font-size: 10pt; font-family: Arial;">,
+</span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">for</span><span style="font-size: 10pt; font-family: Arial;">, …). 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.</span></p>
+<p class="MsoNormal" style="text-indent: -14.2pt; margin-left: 68.2pt;">
+<span style="font-size: 10pt; font-family: Symbol;">-<span style="font-family: &quot;Times New Roman&quot;; font-style: normal; font-variant: normal; font-weight: normal; font-size: 7pt; line-height: normal; font-size-adjust: none; font-stretch: normal;">     
+</span></span><span style="font-size: 10pt; font-family: Arial;">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.</span></p>
+<p class="MsoNormal" style="margin-left: 54pt;">
+<span style="font-size: 10pt; font-family: Arial;"> </span></p>
+<p class="MsoNormal" style="margin-left: 54pt;">
+<span style="font-size: 10pt; font-family: Arial;"> </span></p>
+<p class="MsoNormal" style=""><b>
+<span style="font-family: Arial;">3   Design Guidelines</span></b></p>
+<p class="MsoNormal" style=""><b>
+<span style="font-family: Arial;"> </span></b></p>
+<p class="MsoNormal" style="">
+<span style="font-size: 10pt; font-family: Arial;">Dieser Abschnitt enthält einige
+generelle Richtlinien, die helfen sollen, sauberen und robusten Code zu
+schreiben.</span></p>
+<ul style="margin-top: 0cm; margin-bottom: 0cm;" type="disc">
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Membervariablen dürfen niemals </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">public</span><span style="font-size: 10pt; font-family: Arial;">
+ zugreifbar sein.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Interne und externe Zugriffsmethoden dürfen
+ niemals vermischt werden. Wenn Methoden zum Zugriff für die Außenwelt gedacht
+ sind und entsprechend </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">public</span><span style="font-size: 10pt; font-family: Arial;"> zugreifbar sind, so dürfen diese klassenintern nicht verwendet
+ werden. Wenn man beispielsweise ein Paar von Methoden </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">setVariable</span><span style="font-size: 10pt; font-family: Arial;">,
+ </span><span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">
+ getVariable</span><span style="font-size: 10pt; font-family: Arial;"> als </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">public</span><span style="font-size: 10pt; font-family: Arial;">
+ zur Verfügung stellt, dann dürfen diese intern nicht für den Zugriff verwendet
+ werden. Stattdessen muss der direkte Zugriff auf die Membervariable erfolgen.
+ Der Grund dafür ist einfach zu erkennen: In </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">public</span><span style="font-size: 10pt; font-family: Arial;"> Methoden werden alle möglichen Schutzmechanismen
+ eingebaut, die eine Fehlverwendung ausschließen sollen. Man will aber eine
+ Klasse nicht vor sich selbst schützen. Sollten tatsächlich auch intern
+ Methoden für gewisse Zugriffe benötigt werden, so sind diese getrennt und
+ entweder </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">protected</span><span style="font-size: 10pt; font-family: Arial;">
+ oder </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">private</span><span style="font-size: 10pt; font-family: Arial;">
+ zu implementieren. Durch diese Maßnahme erreicht man eine saubere Trennung
+ zwischen dem </span>
+ <span style="font-size: 10pt; font-family: &quot;Courier New&quot;;">public</span><span style="font-size: 10pt; font-family: Arial;">
+ Interface und der internen Implementation einer Klasse.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Seiteneffekte und unerwartetes (d.h. nicht aus
+ dem Namen ersichtliches) Verhalten von Methoden, Operatoren und Funktionen
+ sind um jeden Preis zu vermeiden!</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Niemals dürfen sogenannte silent Catches
+ implementiert werden, also Catches von Exceptions, die ganz einfach sang- und
+ klanglos ignoriert werden.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Exceptions dürfen niemals zu Standard
+ Flow-Control Zwecken verwendet werden.</span></li>
+ <li class="MsoNormal" style="">
+ <span style="font-size: 10pt; font-family: Arial;">Abstrakte Methoden in Basisklassen sind unbedingt
+ solchen mit sinnlosen dummy Implementationen vorzuziehen.</span></li>
+</ul>
+<p class="MsoNormal"><span style="font-family: Arial;"> </span></p>
+
+</body></html> \ No newline at end of file