[RUBY] Lesen Sie den "Leitfaden für objektorientiertes Design"

Feststellung

Ich möchte es nach und nach über ein oder zwei Monate lesen. Dies ist mein eigenes Memo.

Der Punkt

Überblick und Einführung der objektorientierten Programmierung

1. Objektorientiertes Design

1.1 Design Lob

1.2 Entwurfswerkzeuge

1.3 Akt der Gestaltung

1.4 Einfache Einführung in die objektorientierte Programmierung

Konzentriere dich auf die Klasse

2. Entwerfen Sie eine einzelne Verantwortungsklasse

2.1 Entscheiden Sie, was zur Klasse gehört

2.2 Erstellen Sie eine Klasse mit einer einzigen Verantwortung

2.3 Schreiben Sie Code, der Änderungen begrüßt

3. Verwalten von Abhängigkeiten

  1. Verhalten, das die Klasse selbst unabhängig implementieren sollte
  2. Vererbung von Verhalten
  3. Verhalten wird in anderen Objekten implementiert

3-1. Abhängigkeiten verstehen

  1. Namen anderer Klassen
  2. Der Name der Nachricht, die an andere Objekte als "self" gesendet wurde
  3. Für die Nachricht erforderliche Argumente
  4. Reihenfolge dieser Argumente

3-2. Schreiben Sie lose gekoppelten Code

  1. Wenn es Namen anderer Klassen gibt
  1. Wenn eine andere Nachricht als "self" gesendet wird
  1. Wenn die Nachricht Argumente anfordert
  1. Wenn die Reihenfolge der Argumente festgelegt ist (wenn die Methode, von der abhängig sein muss, extern ist usw.)

3-3. Verwaltung der Abhängigkeitsrichtung

  1. Einige Klassen haben variablere Anforderungen als andere
  1. Konkrete Klassen ändern sich eher als abstrakte Klassen
  1. Das Ändern abhängiger Klassen von vielen Orten aus hat weitreichende Auswirkungen

――Der Schlüssel zur Wartung besteht darin, die Richtung der Abhängigkeit zu kontrollieren und sich auf eine Klasse zu verlassen, die sich weniger ändert als Sie.

Vom objektzentrierten Design zum nachrichtenzentrierten Design

4. Erstellen Sie eine flexible Schnittstelle

4-1. Grundlegendes zur Benutzeroberfläche

4-2. Definieren Sie die Schnittstelle

  1. Klären Sie die Hauptverantwortlichkeiten der Klasse
  2. Wird voraussichtlich von außen ausgeführt
  3. Nicht aus einer Laune heraus geändert
  4. Sicher für andere, sich darauf zu verlassen
  5. Im Test vollständig dokumentiert
  1. Beteiligen Sie sich an Implementierungsdetails
  2. Es wird nicht erwartet, dass es von anderen Objekten stammt
  3. Kann aus irgendeinem Grund geändert werden
  4. Es ist gefährlich für andere, sich darauf zu verlassen
  5. Darf im Test nicht erwähnt werden

4-3. Suchen Sie eine öffentliche Schnittstelle

--Verwenden Sie ein Sequenzdiagramm ――Entdecken Sie den Nachrichtenaustausch (öffentliche Schnittstelle) zwischen Klassen und fragen Sie: "Sollte dieser Empfänger für die Beantwortung dieser Nachricht verantwortlich sein?" --Klassen und wer und was sie wissen => Entscheide dich für eine Nachricht und wohin sie gesendet werden soll

--Die Notwendigkeit neuer Objekte entdecken

4-4. Schreiben Sie den Code, der die beste Seite (Schnittstelle) verfügbar macht.

――Die Schnittstelle definiert die Anwendung und bestimmt die Zukunft.

  1. Identifizieren Sie sich explizit als öffentliche Schnittstelle
  2. "Was" ist mehr als "wie"
  3. Der Name ist unveränderlich, soweit wir uns vorstellen können
  4. Nehmen Sie einen Hash als optionales Argument

--Ruby public, protected, private Schlüsselwörter ――Mit diesen Schlüsselwörtern können Sie die folgenden zwei Dinge vermitteln. ――Ich glaube, ich habe jetzt bessere Informationen als die Informationen, die "zukünftige" Programmierer haben. ――Ich glaube, wir müssen verhindern, dass zukünftige Programmierer versehentlich Methoden anwenden, die wir als instabil betrachten. ――Eine Reihe sehr talentierter Ruby-Programmierer wagt es, Schlüsselwörter wegzulassen.

4-5 Demeter-Gesetz

5. Reduzieren Sie die Kosten durch Entenschreiben

――Was ist "Ententippen"?

5-1. Ententyp verstehen

Polymorphismus

5-2. Schreiben Sie Code, der Ente vertraut

  1. Case-Anweisung, die in der Klasse verzweigt
  2. kind_of? Und is_a? 3. responds_to?

5-3 Überwinde die Angst vor dem Tippen von Enten

6. Erwerben Sie Verhalten durch Vererbung

6-1. Grundlegendes zur Klassenvererbung

6-2 Geben Sie an, wo die Vererbung verwendet werden soll

6-3 Vererbung nicht ordnungsgemäß anwenden

6-4. Finden Sie die Zusammenfassung

  1. Das modellierte Objekt hat eine "Generalisierungs-Spezialisierungs-Beziehung".
  2. Verwenden Sie die richtige Codierungstechnik

6-5. Verwalten Sie den Konnektivitätsgrad zwischen Oberklassen und Unterklassen

--Verwenden Sie Hook-Nachrichten, um Unterklassen lose zu koppeln.

7. Teilen Sie das Rollenverhalten in Modulen

7-1. Rollen verstehen

7-2. Schreiben Sie vererbbaren Code

  1. Ein Muster, in dem ein Objekt Variablennamen wie "Typ" und "Kategorie" verwendet, um zu bestimmen, welche Nachricht an sich selbst gesendet werden soll.
  1. Ein Muster, in dem das Objekt entscheidet, welche Nachricht gesendet werden soll, nachdem die Klasse des Objekts überprüft wurde, das die Nachricht empfängt.

Riskovs Ersatzprinzip

--Verwenden Sie das Muster der Vorlagenmethode

8. Kombinieren Sie Objekte in der Komposition

8-1. Stellen Sie das Fahrrad aus den Teilen zusammen

8-2. Teile-Objekt erstellen

8-3. Herstellungsteile

-"Fabrik"

8-4. Zusammengesetztes Fahrrad

Aggregation - eine besondere Zusammensetzung

――Was ist Komposition?

8-5 Auswahlmöglichkeiten für Zusammensetzung und Vererbung

--Vorteile der Vererbung --WAHR. --Open / Closed (Offen für Erweiterungen, geschlossen für Korrekturen)

--Vorteile der Zusammensetzung

--is-a Vererbung für Beziehungen verwenden

--Hehaves-like-a Verwenden Sie den Ententyp für Beziehungen

--has-a Komposition für Beziehungen verwenden -Wenn viele Objekte mehrere Teile enthalten und die Summe dieser Objekte die Summe dieser Teile überschreitet.

Testdesign

9. Entwerfen Sie kostengünstige Tests

――Drei Fähigkeiten sind für das Üben von modifizierbarem Code unverzichtbar.

  1. Verständnis von objektorientiertem Design.
  2. Gut im Code-Refactoring. ――Refactoring bezieht sich auf die Arbeit zur Verbesserung der internen Struktur unter Beibehaltung des externen Verhaltens der Software.
  3. Fähigkeit, hochwertige Tests zu schreiben.

9-1. Absichtliche Prüfung

9-2. Eingehende Nachrichten testen

--Entfernen Sie Tests für eingehende Nachrichten, die nicht abhängig sind.

9-3. Testen Sie private Methoden

9-4. Ausgehende Nachrichten testen

9-5 Testen Sie den Ententyp

9-6 Testen Sie den geerbten Code

--Riskovs Ersatzprinzip

--Schreiben Sie einen Verhaltenstest, der für Unterklassen gilt.

--Wenn Sie ein unterklassenspezifisches Teil testen, ist es wichtig, kein Wissen der Oberklasse in den Test einzubetten.

Recommended Posts

Lesen Sie den "Leitfaden für objektorientiertes Design"
Ich habe den "Object-Oriented Practice Guide" gelesen, also ein Memorandum