2009-02-20 6 views
5

Ich habe alle Bücher darüber gelesen, warum eine Klasse und Dinge wie "suchen Sie nach den Substantiven in Ihren Anforderungen", aber es scheint nicht genug zu sein. Meine Klassen scheinen mir chaotisch zu sein. Ich würde gerne wissen, ob es eine Art von Metriken oder etwas gibt, mit dem ich meine Klassen vergleichen kann und ob es dort gut gestaltet ist. Wenn nicht, wer ist der am meisten respektierte OO-Guru, wo ich die richtigen Klassen-Design-Tipps bekommen kann?Desigining Proper Klassen

+0

+1, möchte ich auch wissen, – krebstar

Antwort

2

, wenn Sie mit Datenbank-Design, speziell das Konzept der Normalisierung vertraut sind, dann ist die Antwort einfach: eine datenorientierte Klasse eine Einheit in der dritten Normalform darstellen sollte

wenn das nicht hilfreich ist, versuchen Sie dies statt:

  • eine Klasse ist eine Sammlung von Datenelementen und die Methoden, die auf ihnen arbeiten
  • eine Klasse eine einzigartige Verantwortung haben sollte, dh es ist eine Sache im Modell darstellen sollte; Wenn es mehr als eine Sache darstellt, dann sollte es mehr als eine Klasse sein.
  • alle Datenelemente in einer Klasse sollten logisch miteinander verknüpft sein; wenn sie es nicht sind, teilen sie in zwei oder mehr Klassen
  • alle Methoden in einer Klasse sollte nur auf ihre Eingangsparameter und der Klasse des Datenelementen arbeiten - siehe Law of Demeter

, die etwa so weit ist, als Ich kann mit dem allgemeinen abstrakten Rat gehen (ohne einen langen Aufsatz zu schreiben); Sie können eine Ihrer Klassen für Kritik veröffentlichen, wenn Sie einen bestimmten Rat benötigen

+0

@ [Celebrus]: danke –

0

ich denke Objektdesign ist so viel Kunst wie es Wissenschaft ist. Es braucht Zeit und Übung, um zu verstehen, wie man elegante & elegante Klassen gestaltet. Vielleicht können Sie, wenn Sie ein Beispiel für eine einfache Klasse geben können, die Sie entworfen haben, mit denen Sie nicht zufrieden sind, SO-Benutzer kritisieren und Hinweise geben. Ich bin mir nicht sicher, ob es allgemeine Antworten außerhalb dessen gibt, was Sie bereits in den Texten gelesen haben.

+0

auch, welche Sprache verwenden Sie? Obwohl OOD sprachneutral ist, kann die Verwendung von sprachspezifischen Funktionen in Ihrer Klasse es sauberer machen. – Jason

0

Der am meisten respektierte OO-Guru, den ich persönlich kenne, ist StackOverflow. Setzen Sie Ihre Klassennamen hier und ich denke, Sie werden eine gute Anzahl von Bewertungen erhalten.

+0

Gut oder gottlos? – orbfish

0

Klassen werden normalerweise verwendet, um Konzepte der Problemdomäne zu modellieren. Sobald Sie ein genau definiertes Problem (die Menge der Anwendungsfälle) haben, können Sie alle Teilnehmer identifizieren. Eine Teilmenge der Teilnehmer ist systemimmanent. Beginne mit einer großen schwarzen Box als dein System. Unterbrechen Sie es, wenn Sie mehr Informationen haben. Wenn Sie eine Ebene haben, auf der sie nicht mehr aufgeteilt werden können (in Konzepte in Ihrer Problemdomäne), erhalten Sie Ihre Klassen.

Aber dann ist dies eine subjektive Sicht eines Nicht-Guru. Ich würde vorschlagen, eine Prise Salz auf der Speisekarte.

4

Das Erstellen von Klassen, die sauber beginnen und dann unordentlich werden, ist ein Kernbestandteil von OO, das heißt, wenn Sie umgestalten. Viele Entwickler versuchen von Anfang an, zum perfekten Klassen-Design zu springen, nach meiner Erfahrung ist das einfach nicht möglich, stattdessen stolpert man herum, löst das Problem und baut dann um. Sie können ernten, Basisklassen und Schnittstellen, wie das Design entsteht.

+0

Wenn du nicht weißt, wie man eine gute Klasse überhaupt gestaltet, ist es wahrscheinlich, dass du auch nicht weißt, wie man eine Klasse umgestaltet, um es besser zu machen ... ;-) –

+0

Das stimmt, aber sein Punkt ist auch wahr und wurde woanders vermisst. – orbfish

0

Metriken? Nicht, dass Sie ihnen vertrauen würden.

Sind Ihre Klassen dabei, das Programm zum Laufen zu bringen und es durch mehrere Überarbeitungen wartbar zu halten?

Wenn ja, machst du es gut.

Wenn nein, fragen Sie sich, warum nicht, und ändern Sie dann, was nicht funktioniert.

2

Versuchen Sie, sich auf das Verhalten statt auf die Struktur zu konzentrieren. Objekte sind "lebende" Entitäten mit Verhalten und Verantwortlichkeiten. Sie sagen ihnen, dass sie etwas tun sollen. Werfen Sie einen Blick auf den CRC-Karten-Ansatz, um Ihnen dabei zu helfen, dieses Modell zu erstellen.