design-principles

___ qstnhdr ___ Welche SOLID Prinzipien werden verletzt? ___ tag123oop ___ Objektorientierte Programmierung ist ein Programmierparadigma, das "Objekte" verwendet: Datenstrukturen, die aus Datenfeldern und Methoden zusammen mit ihren Interaktionen bestehen. ___ tag123vererbung ___ Vererbung ist das System in der objektorientierten Programmierung, das es Objekten ermöglicht, Operationen zu unterstützen, die von anterioren Typen definiert sind, ohne eine eigene Definition angeben zu müssen. Es ist der Hauptvektor für Polymorphie in der objektorientierten Programmierung. ___ answer30616999 ___
  

SRP Weil bedingte Anweisungen die SRP überhaupt nicht verletzen, weil sie wie die switch case-Anweisung oder mehr als eine if-else-Anweisung mehr als eine Verantwortlichkeit berücksichtigen.   Es gibt zwei Fälle, also gibt es mehr als einen Grund, die Methode zu ändern.

Ich stimme überhaupt nicht zu. Das SRP soll mit einer Prise Salz interpretiert werden. Lesen Sie Onkel Bobs Artikel hier - er hat diesen Grundsatz geprägt.

Ich zitiere die wichtigen Bits:

  

Was definiert einen Grund, sich zu ändern?

     

Dieses Prinzip handelt von Menschen.

     

Wenn Sie ein Softwaremodul schreiben, möchten Sie sicherstellen, dass Änderungen nur dann von einer einzelnen Person oder einer eng verbundenen Gruppe von Personen stammen können, die eine eng definierte Geschäftsfunktion darstellen. Sie möchten Ihre Module von den Komplexitäten der Organisation als Ganzes isolieren und Ihre Systeme so gestalten, dass jedes Modul für genau diese eine Geschäftsfunktion verantwortlich ist (antwortet).

     

[...] Wenn Sie über diesen Grundsatz nachdenken, denken Sie daran, dass die Gründe für Veränderungen Menschen sind. Es sind Leute, die Änderungen anfordern. Und Sie wollen diese Menschen oder sich selbst nicht dadurch verwirren, dass sie den Code, den viele Menschen aus unterschiedlichen Gründen pflegen, zusammenmischen.

  

OCP Wenn ein neues Tier hinzugefügt wird, muss der Methode ein neuer Fall hinzugefügt werden, damit die Methode für Änderungen nicht geschlossen wird.

Richtig. Die Methode setzt eine bestimmte Reihe von Implementierungen voraus und ist nicht in der Lage, neue zu handhaben, ohne geändert zu werden.

  

LSP Jeder Zweig führt abhängig vom Untertyp des Tieres verschiedene Aktionen aus. Was ich glaube, verletzt den LSP?!

Es verletzt den LSP, aber aus einem anderen Grund. Wenn ich eine Giraffe hereinlassen würde, würde ich ein unerwartetes Ergebnis bekommen, eine leere Schnur. Dies bedeutet, dass die Methode für keinen Subtyp von %code% korrekt ist.

  

DIP Die bedingten Anweisungen nehmen eine Abhängigkeit an, die bedeutet, dass die Anweisungen von Details und nicht von Abstraktionen abhängen, die gegen den DIP verstoßen.

Technisch wahr, aber dies ist nur ein Nebeneffekt der Verletzung der anderen beiden oben genannten Prinzipien. Es ist nicht wirklich der Kern des Problems.

Denken Sie daran, dass Prinzipien keine Regeln sind, also seien Sie nicht zu streng / wörtlich, wenn Sie sie interpretieren. Pragmatismus und Verständnis dafür, warum ein Prinzip notwendig ist, sind der Schlüssel.

    
___ tag123designprinzipien ___ Design-Prinzipien sind Ideen, die Entwickler zu bestimmten Zielen im Software-Design führen. ___ qstntxt ___

EINFÜHRUNG

Ich arbeite an meiner Masterarbeit über Vererbungsprobleme und arbeite daran Indikatoren, die zeigen, dass ein Vererbungsproblem existiert.

Wie im folgenden Beispiel:

BEISPIEL

%Vor%

Die Methode gibt den String %code% zurück, wenn die angegebene Animal-Instanz ein %code% und %code% ist, wenn es sich um %code% handelt. Die leere Saite, weil manche Tiere überhaupt keine Geräusche machen.

Also sollte die richtige Lösung dafür sein, Polymorphismus mit einer %code% -Methode in der Animal-Klasse zu verwenden.

Ich habe verschiedene Indikatoren von Vererbungsproblemen analysiert und möchte sagen, ob einige von ihnen verstoßen gegen ein SOLID Prinzip .

Ich dachte, das obige Beispiel verstoße gegen:

  1. Prinzip der einheitlichen Verantwortlichkeit
  2. Offenes / geschlossenes Prinzip (OCP)
  3. Liskov Substitutionsprinzip (LSP)
  4. Prinzip der Abhängigkeitsinversion (DIP)

Aber ich bin nicht wirklich sicher, ob es für alle wahr ist.

Ich dachte:

GRUNDSÄTZLICHE VERSTÖSSE

SRP-Verstoß

Weil bedingte Anweisungen überhaupt die SRP verletzen, wie der Schalter case-Anweisung oder mehr als eine if-else-Anweisung berücksichtigen mehr als eine Verantwortung.

Es gibt zwei Fälle, daher gibt es mehr als einen Grund, die Methode zu ändern.

OCP-Verletzung

Wenn ein neues Tier hinzugefügt wird, muss der Methode ein neuer Fall hinzugefügt werden Daher ist die Methode für Änderungen nicht in der Nähe.

LSP-VERLETZUNG

Jeder Zweig führt abhängig vom Untertyp des Tieres verschiedene Aktionen aus. Was ich denke, verstößt gegen den LSP ?! Ich kenne das Beispiel von Rechteck und Quadrat und die getArea aber diese Beispiel ich dachte, passt auch zu der Verletzung.

DIP VIOLATION

Die bedingten Anweisungen nehmen eine Abhängigkeit ein, die bedeutet, dass die Anweisungen von Details und nicht von Abstraktionen abhängig sind, die den DIP verletzen.

FRAGE:

Also ist die Frage, für das gegebene Beispiel, sind die gegebenen Prinzipien wirklich verletzt und ist die Begründung richtig?

    
___ tag123solidprinciples ___ Die SOLID-Prinzipien sind die fünf Prinzipien des objektorientierten Designs, die von Robert C. Martin eingeführt oder dokumentiert wurden. ___ answer30618745 ___

Ich stimme der Tatsache nicht zu, dass Ihr Beispielcode gegen den LSP verstößt. LSP ist wie folgt definiert:

  

Sei Φ (x) eine Eigenschaft, die über Objekte x vom Typ T nachweisbar ist. Dann sollte Φ (y) für Objekte y vom Typ S gelten, wobei S ein Subtyp von T ist.

Wenn Sie die zwei Ableitungen von Animal, nämlich %code% und %code% , und Ihre Methode %code% angeben, treffen Sie keine Entscheidungen über eine beweisbare Eigenschaft des konkreten Objekts. Ihre Methode ist zu entscheiden, welches Geräusch zurückgegeben werden soll und nicht die Objekte von sich selbst.

Stellen Sie sich vor, Sie können die Anzahl der Beine für ein Tier festlegen.

%Vor%

Und wenn Ihr %code% das so überschreibt:

%Vor%

Wenn Sie jetzt eine Factory haben, die ein %code%

zurückgibt %Vor%

Und Sie rufen die Methoden %code% auf, die Sie erwarten, dass die Ergebnisse 2 und 2 sind, aber tatsächlich ist das Ergebnis völlig anders, nämlich 2 und 4. Also ist dieses Beispiel fest an das übliche LSP-Beispiel mit Quadraten und Rechtecken gebunden . Aber für mich ist es ein genaueres Beispiel für eine Verletzung von beweisbaren Eigenschaften als in Ihrem Beispiel.

Update für die anderen Prinzipien

Ich stimme Ihnen zu, dass die anderen Prinzipien ebenfalls verletzt werden, aber für SRP stimme ich @dcastro zu.

    
___
5
Antworten

Design der Benutzeroberflächen von Rules Engines

Bei der Arbeit haben wir Optimierungs-Engines, und eine der von diesen Engines verwendeten Eingaben sind Geschäftsregeln, die wir mit einem proprietären Regeleditor erstellen und bearbeiten. Diese Regeln sind von unserem eigenen proprietären...
13.12.2009, 12:51
7
Antworten

Verwendet Java instanceOf kompatibel mit dem Design-Prinzip "Programm zu einer Schnittstelle"?

Wie Sie wissen, bevorzugt das Design-Prinzip "Programm zu einer Schnittstelle" weitgehend Supertypen statt konkreter Typen oder Implementierungen. Stimmt es mit dem Prinzip überein, instanceof in einem Java-Programm zu verwenden, um einen kon...
11.02.2011, 21:20
2
Antworten

Welche SOLID Prinzipien werden verletzt?

EINFÜHRUNG Ich arbeite an meiner Masterarbeit über Vererbungsprobleme und arbeite daran Indikatoren, die zeigen, dass ein Vererbungsproblem existiert. Wie im folgenden Beispiel: BEISPIEL %Vor% Die Methode gibt den String "Woo...
03.06.2015, 09:52