2008-12-30 12 views
19

Kürzlich habe ich gehört, dass es 9 Regeln für OOP (Java) gibt. Ich kenne nur vier als Abstraktion, Polymorphie, Vererbung und Verkapselung. Gibt es noch weitere Regeln für OOP?Gibt es Regeln für OOP?

Antwort

39

Scheint wie, was Sie suchen, sind die Principles of Object-Oriented Design.

Zusammengefasst von Agile Software Development Principles, Patterns, and Practices. Diese Prinzipien sind das hart erkämpfte Produkt jahrzehntelanger Erfahrung im Software-Engineering. Sie sind nicht das Produkt eines einzigen Geistes, sondern sie repräsentieren die Integration und die Schriften einer großen Anzahl von Softwareentwicklern und Forschern. Obwohl sie hier als Prinzipien des objektorientierten Designs präsentiert werden, sind sie wirklich spezielle Fälle langjähriger Prinzipien des Software-Engineerings.

SRP Das Prinzip der einheitlichen Verantwortung Eine Klasse sollte nur einen Grund haben, sich zu ändern.

OCP Das Open-Closed-Prinzip Software-Entities (Klassen, Packages, Methoden usw.) sollten zur Erweiterung offen sein, aber für Änderungen geschlossen sein.

LSP Das Liskov-Substitutionsprinzip Subtypen müssen für ihre Basistypen substituierbar sein.

DIP Das Prinzip der Abhängigkeitsinversion Abstraktionen sollten nicht von Details abhängen.Details sollten von Abstraktionen abhängen.

ISP Das Schnittstellentrennungsprinzip Clients sind nicht gezwungen, sich auf Methoden zu verlassen, die sie nicht verwenden. Schnittstellen gehören zu Clients, nicht zu Hierarchien.

REP Das Prinzip der Freisetzung-Wiederverwendung-Äquivalenz Das Granulat der Wiederverwendung ist das Granulat der Freisetzung.

CCP Das allgemeine Verschlussprinzip Die Klassen in einem Paket sollten zusammen gegen die gleichen Arten von Änderungen geschlossen werden. Eine Änderung, die sich auf ein geschlossenes Paket auswirkt, betrifft alle Klassen in diesem Paket und keine anderen Pakete.

CRP Das Prinzip der gemeinsamen Wiederverwendung Die Klassen in einem Paket werden zusammen wiederverwendet. Wenn Sie eine der Klassen in einem Paket wiederverwenden, verwenden Sie sie alle erneut.

ADP Der Acylcic Abhängigkeiten Prinzip erlauben keine Zyklen in dem Abhängigkeitsgraphen.

SDP Das Prinzip der stabilen Abhängigkeiten Abhängig von der Richtung der Stabilität.

SAP Das stabile Abstraktionsprinzip Ein Paket sollte so abstrakt wie stabil sein.

4

Dies sind Konzepte, keine Regeln. Es gibt keine Regeln wirklich, nur Entscheidungen zu treffen, einige Designs sind besser als andere, manche besser als andere :-)

Es gibt viele Richtlinien obwohl :-) Einige sind sprachspezifisch (C++ ist mit ihnen gespickt) Andere sind OO-spezifisch. Zu viele :-) obwohl

Aus der Spitze von meinem Kopf zu verzeichnen, wichtig sind:

  • Lose Kopplung, hohe Kohäsion
  • prüfbar Klassen schreiben, die Sie
  • Verwendung inheritence testen sparsam und nur dort, wo es Sinn macht (Zusammensetzung bevorzugen)
  • Versuchen Sie, sich an das Prinzip "Öffnen/Schließen" zu halten. KISS
  • (wichtigste)

Plenty auf zu erweitern und fügen :-)

EDIT: Ich sollte hinzufügen, die Sie die Regeln aufgelistet sind nicht eindeutig

+0

Weder Ihnen noch :). Übrigens, wie würden wir Vererbung, Polymorphismus usw. in einer Nicht-OO-Sprache üben? Ich glaube, dass all diese 4 OO Paradigmen sind. –

6

Nicht sicher über OO irgendwelche Regeln. All diese erwähnten Dinge sind für mich eher wie OO-Paradigmen. Es gibt nur wenige Hinweise wir wie folgt,

  • Separation of Concern
  • einzigen Verantwortung pro Klasse
  • Zusammensetzung über Vererbung Bevorzugen
  • Programmierung Schnittstelle
  • Plus alle von Billybob erwähnt, bereits
5

Diese OO Prinzipien sind gerade von Head First Design Patterns:

  • kapseln, was zu einer Schnittstelle
  • Programm Variiert, anstatt eine Implementierung
  • Favor Zusammensetzung über Vererbung
  • A-Klasse nur einen Grund haben sollte zu ändern (Prinzip der einfachen Verantwortung)
  • Untertypen müssen für sie ersetzt werden können r Base (Liskov Substitition Prinzip)
  • Klassen shoule für die Erweiterung öffnen, aber geschlossen für Änderung (Frei Geschlossen-Prinzip)
4

Nach dem Pragmatische Programmierer - die Regeln sind:

  • halten sie es trocken (Do not Repeat Yourself)
  • Halten sie es SHY (Stellen sie sicher, dass Ihre Klassen hohe Kohäsion und geringe Kopplung haben)
  • und sagen, der andere Typ (Separation of Concerns)

http://media.pragprog.com/articles/may_04_oo1.pdf

3

Es gibt keine "Regeln" zu OOP.

Es gibt 4 Spracheigenschaften, die eine Sprache objektorientiert machen oder nicht (dies sind die Dinge, die Sie in Ihrer Frage aufgelistet haben).

Der Rest des Materials gibt es Richtlinien. Die besten/hilfreichsten Richtlinien die ich gelesen habe sind

Viele der Vorschläge sind für Laien (Nicht-CS Majors) nicht ohne weiteres verständlich. Ich dachte GRASP war pragmatisch und zugänglich.

Ich denke, GRASP ist nett, weil es den kritischsten Teil von OO in seinem Namen - Zuordnung der Verantwortung (zu Objekten nicht Programmierer) vorschlägt.

Die zwei wichtigsten GRASP-Konzepte, von denen alles andere abgeleitet ist, sind Kopplung und Kohäsion. Diese beiden Konzepte/Prinzipien treiben alle anderen Muster und Ansätze an.

BTW - habe ich dich gerade interviewt? Sie haben die Frage falsch transkribiert ...

Verwandte Themen