Читать книгу Prinzipien des Softwaredesigns - John Ousterhout - Страница 5
На сайте Литреса книга снята с продажи.
Inhalt
ОглавлениеVorwort
1Einführung (es geht immer um Komplexität)
Wie Sie dieses Buch einsetzen
2Die Natur der Komplexität
Definition der Komplexität
Symptome der Komplexität
Ursachen für Komplexität
Komplexität ist inkrementell
Zusammenfassung
3Funktionierender Code reicht nicht aus (strategische versus taktische Programmierung)
Taktische Programmierung
Strategische Programmierung
Wie viel soll ich investieren?
Start-ups und Investitionen
Zusammenfassung
4Module sollten tief sein
Modulares Design
Was ist eine Schnittstelle?
Abstraktionen
Tiefe Module
Flache Module
Klassizitis
Beispiele: Java und Unix-I/O
Zusammenfassung
5Information Hiding (und Lecks)
Information Hiding
Informationslecks
Zeitliche Dekomposition
Beispiel: HTTP-Server
Beispiel: Zu viele Klassen
Beispiel: HTTP-Parameter-Handling
Beispiel: Standardwerte in HTTP-Responses
Information Hiding in einer Klasse
Wann Sie zu weit gehen
Zusammenfassung
6Vielseitige Module sind tiefer
Gestalten Sie Klassen halbwegs vielseitig
Beispiel: Text für einen Editor speichern
Eine vielseitigere API
Vielseitigkeit führt zu besserem Information Hiding
Fragen, die Sie sich stellen sollten
Spezialisierung nach oben (und unten!) schieben
Beispiel: Undo-Mechanismus für den Editor
Spezialfälle wegdesignen
Zusammenfassung
7Verschiedene Schichten, verschiedene Abstraktionen
Pass-Through-Methoden
Wann ist es in Ordnung, Schnittstellen doppelt zu haben?
Das Decorator-Design-Pattern
Schnittstelle versus Implementierung
Pass-Through-Variablen
Zusammenfassung
8Komplexität nach unten ziehen
Beispiel: Texteditor-Klasse
Beispiel: Konfigurationsparameter
Wann Sie zu weit gehen
Zusammenfassung
9Zusammen oder getrennt?
Zusammenbringen bei gemeinsamen Informationen
Zusammenbringen, um die Schnittstelle zu vereinfachen
Zusammenbringen, um doppelten Code zu vermeiden
Trennen von allgemeinem und speziellem Code
Beispiel: Einfügecursor und Auswahl
Beispiel: Getrennte Klasse zum Loggen
Methoden aufteilen und zusammenführen
Eine andere Meinung: Clean Code
Zusammenfassung
10Definieren Sie die Existenz von Fehlern weg
Warum Exceptions zur Komplexität beitragen
Zu viele Exceptions
Die Existenz von Fehlern wegdefinieren
Beispiel: Datei löschen in Windows
Beispiel: substring-Methode in Java
Exceptions maskieren
Aggregieren von Exceptions
Einfach abstürzen?
Wann Sie zu weit gehen
Zusammenfassung
11Designen Sie zweimal
12Warum Kommentare schreiben? – Die vier Ausreden
Guter Code dokumentiert sich selbst
Ich habe keine Zeit, Kommentare zu schreiben
Kommentare veralten und sind dann irreführend
Die Kommentare, die ich gesehen habe, sind alle nutzlos
Die Vorteile gut geschriebener Kommentare
Eine andere Meinung: Kommentare sind Fehler
13Kommentare sollten Dinge beschreiben, die im Code nicht offensichtlich sind
Konventionen
Wiederholen Sie nicht den Code
Kommentare auf niedrigerer Ebene sorgen für Präzision
Kommentare auf höherer Ebene verbessern die Intuition
Schnittstellendokumentation
Implementierungskommentare: was und warum, nicht wie
Modulübergreifende Designentscheidungen
Zusammenfassung
Antworten auf die Fragen aus dem Abschnitt »Schnittstellendokumentation« auf Seite 123
14Namen auswählen
Beispiel: Schlechte Namen führen zu Fehlern
Ein Bild schaffen
Namen sollten präzise sein
Namen konsistent einsetzen
Vermeiden Sie überflüssige Wörter
Eine andere Meinung: Go Style Guide
Zusammenfassung
15Erst die Kommentare schreiben (nutzen Sie Kommentare als Teil des Designprozesses)
Aufgeschobene Kommentare sind schlechte Kommentare
Erst die Kommentare schreiben
Kommentare sind ein Designwerkzeug
Frühes Kommentieren macht Spaß
Sind frühe Kommentare teuer?
Zusammenfassung
16Bestehenden Code anpassen
Bleiben Sie strategisch
Kommentare pflegen: Halten Sie die Kommentare nahe am Code
Kommentare gehören in den Code, nicht in das Commit-Log
Kommentare pflegen: Vermeiden Sie Duplikate
Kommentare pflegen: Schauen Sie auf die Diffs
Kommentare auf höherer Ebene lassen sich leichter pflegen
17Konsistenz
Beispiele für Konsistenz
Konsistenz sicherstellen
Wann Sie zu weit gehen
Zusammenfassung
18Code sollte offensichtlich sein
Dinge, die Code offensichtlicher machen
Dinge, die Code weniger offensichtlich machen
Zusammenfassung
19Softwaretrends
Objektorientierte Programmierung und Vererbung
Agile Entwicklung
Unit Tests
Test-Driven Development
Design Patterns
Getter und Setter
Zusammenfassung
20Performance
Wie man über Performance nachdenkt
Vor (und nach) dem Ändern messen
Rund um den kritischen Pfad designen
Ein Beispiel: RAMCloud-Buffer
Zusammenfassung
21Entscheiden, was wichtig ist
Wie entscheidet man, was wichtig ist?
Lassen Sie möglichst wenig wichtig sein
Wie Sie wichtige Dinge hervorheben
Fehler
Denken Sie umfassender
22Zusammenfassung
Index