[JAVA] Ein objektorientierter Onkel mit 25 Jahren objektorientierter Geschichte spricht von einem Rezept für objektorientiertes Design

Ziel dieses Artikels

Dieser Artikel richtet sich an folgende Personen:

Die folgenden Personen sind nicht berechtigt.

Denken Sie verantwortungsbewusst an Objekte

Wenn Sie Erfahrung in Japan haben, können Sie so etwas in einem Wort verstehen. Es ist eine Verantwortung.

Wenn Sie arbeiten, legen Sie die verantwortliche Person oder die verantwortliche Person bei der Arbeit fest. Diese Verantwortlichen haben einen festen Verantwortungsbereich. Wir übernehmen die volle Verantwortung für das, was uns anvertraut ist. Und betreten Sie nicht den Arbeitsbereich, für den andere Personen verantwortlich sind. "Ich kann damit nicht umgehen, aber Suzuki ist verantwortlich, also lass mich dir das vorstellen", sagte er.

Jedes Objekt hat einen Verantwortungsbereich. Wenn Sie der Meinung sind, dass eine Klasse nicht schön gestaltet ist, sollten Sie überlegen, ob die Verantwortlichkeiten der Klasse angemessen sind. Sollte die Klasse wirklich den Job übernehmen? Sollte es nicht für eine andere Klasse verantwortlich sein? Oder sollte ich separat einer neuen Klasse zugeordnet werden? Es funktioniert gut, wenn Sie es als anthropomorph betrachten, indem Sie die Klasse auf den Beruf und das Objekt auf das Individuum anwenden. Es wäre gefährlich, wenn das Objekt in meinem Kopf sagen würde "Ich kann mit dieser Angelegenheit nicht umgehen ...".

So wie Menschen außer Kontrolle geraten, wenn sie zu viel tun, geraten Objekte außer Kontrolle, wenn sie zu viel Verantwortung übernehmen.

Arbeiten Sie nicht, die über die Verantwortung hinausgehen

Wenn ein Mann, der ein Vertriebsmitarbeiter ist, mit der Reinigung beginnt, nur weil die Lobby schmutzig ist, kann dies die Zeit zum Gehen nach draußen verzögern, und der Rucksack kann schmutzig werden und die Arbeit beeinträchtigen. Wenn die allgemeinen Angelegenheiten bereits am Nachmittag eine Reinigung arrangiert haben, wird die Arbeit verschwendet.

Selbst wenn Sie der Meinung sind, dass Sie diese Art der Reinigung selbst durchführen können, wagen Sie es nicht, sondern wenden Sie sich an die allgemeinen Angelegenheiten und bitten Sie sie, ein Reinigungspersonal zu beauftragen. Die allgemeinen Angelegenheiten kennen den Anordnungsstatus der Reinigungskräfte, sodass sie unnötige Doppelarbeiten vermeiden können.

Dies ist ein Fehler, der durch ein männliches Objekt der Verkaufsklasse verursacht wird, das auf eine globale Variable namens Lobby zugreift.

Was ist Verantwortung?

Um zusammenzufassen, was ich bisher sagen möchte, wenn Sie über objektorientiertes Design nachdenken, wenn Sie ein Objekt anthropomorphisieren und es über Verantwortung sprechen lassen, werden Sie ziemlich süchtig danach sein.

Wenn die Anzahl der Elementfunktionen und Elementvariablen zunimmt, ist es sehr wahrscheinlich, dass die Klasse übermäßig verantwortlich ist. Wenn es jedoch zu wenige gibt, kann es sich um ein unnötiges Objekt handeln, das die Arbeit überspringt. Halten Sie es auf einer angemessenen Korngröße.

Entwerfen Sie Beziehungen zwischen Objekten

Okay, wenn Sie den Verantwortungsbereich des Objekts ordnungsgemäß einhalten, funktioniert es. Ich habe das Gefühl, ich kann es gut machen ... Für eine Weile, wenn das Programm größer wird, wird es immer noch chaotisch. Warum ist dies die Grenze der Objektorientierung ...

Nein, den Verantwortungsbereich eines Objekts auf der richtigen Granularitätsebene zu halten, ist nur die Grundlage für die Objektorientierung. Von diesem Punkt an wird "Beziehung" wichtig. Eine Assoziation ist eine Verbindung zwischen Objekten. Apropos Unternehmen, es ist ein Organigramm oder eine Kontaktstelle.

Entwurfsmuster

Wie sollen wir über die Beziehung in Bezug auf die Objektorientierung denken? Sie können das Entwurfsmuster als eine der Methoden bezeichnen. Ein Entwurfsmuster ist ein Katalog von Softwareentwürfen, die objektorientiert erstellt wurden. Wenn Sie googeln, werden verschiedene Dinge herauskommen, so dass ich die Details weglassen werde.

Dieses Designmuster, GoF, ist berühmt, aber um klar zu sein, es ist nicht so ordentlich systematisiert. Einige Leute benutzen es oft, andere benutzen es nicht so. Neben GoF sind natürlich verschiedene Muster denkbar, aber es gibt keinen Trend, die gesamte Branche zu erforschen und zu systematisieren.

Ein kurzer Blick auf GoF gibt Ihnen jedoch eine Vorstellung davon, was ein schönes objektorientiertes Design ist.

UML

Ein anderer Weg ist zu veranschaulichen. Es muss nicht UML sein, aber es ist standardisiert, also verwenden wir UML. Es gibt verschiedene Diagramme, aber Klassendiagramme sind beim objektorientierten Entwurf wichtig.

Grob gesagt macht ein schönes Design das Klassendiagramm schön, und ein schmutziges Design macht das Klassendiagramm schmutzig. Wenn die zugehörigen Linien durcheinander geraten, reparieren Sie sie einfach und das Design wird halbautomatisch schön. Das Erstellen eines Diagramms erleichtert auch das Erhalten von Bewertungen (Ratschläge von anderen Personen).

UML-Zeichnung hat ein spezielles Werkzeug, aber ich bin Visio oder handgeschrieben. Wenn Sie versuchen, das detaillierte Design der Software in Visio zu schreiben, werden Sie sterben, aber es ist falsch, UML überhaupt zu verwenden. Wenn Sie ein Diagramm zeichnen, sollten Sie sich auf die Punkte konzentrieren, die Sie berücksichtigen möchten. Nicht die gesamte Software, sondern nur die Bibliothek oder bestimmte Funktionen. Nur an Orten, an denen es schwierig geworden ist. Es ist dumm, aus allen Klassen eine Linie zu ziehen, die sich auf die String-Klasse bezieht.

Das Zeichnen eines Diagramms mit Fokus auf die Punkte erleichtert das Nachdenken über das Design, das Überprüfen und das Lesen des Dokuments. Wenn Sie mit Visio ein Diagramm zeichnen, das A4 überschreitet, kann nicht gesagt werden, dass Sie ein gutes Gefühl für die Korngröße haben.

Vererbung oder Polymorphismus

Wenn Sie Vererbung und Polymorphismus nicht verstehen, können Sie nicht sagen, dass Sie die Objektorientierung verstehen. Vererbung und Polymorphismus sind jedoch nur eine Art von Beziehung zwischen Objekten. Wenn Sie diesen Artikel lesen, sind Sie ein guter Mensch, und Sie werden es verstehen, wenn Sie eine Weile mit einer geeigneten objektorientierten Sprache herumgespielt haben. Daher wird die Erklärung weggelassen.

Was ist eine Beziehung?

Wenn man die Beziehungen zwischen jedem Objekt betrachtet, die auf den Grundlagen des Verantwortungsbereichs von Objekten basieren, stellt sich heraus, dass objektorientiertes Design nichts anderes ist als das Entwerfen der Beziehungen zwischen jedem Objekt. Es sollte kommen.

Ermöglichen Sie Diskretion außerhalb der Verantwortung des Objekts

Wenn Sie den Verantwortungsbereich der Objekte kompakt halten und die Beziehungen zwischen den einzelnen Objekten mithilfe von Entwurfsmustern und UML sorgfältig überlegen, können Sie ein schönes Programm erstellen.

Wenn das Programm jedoch endlich riesig wird, ist es schwierig, dies zu tun. Der häufigste Fehler ist die Weitergabe des Nachrichtenspiels.

Nachrichtenspiel

Könnten Sie mir einen Kostenvoranschlag geben? «» Bitte warten Sie einen Moment. «» Firma A möchte diese Teile kaufen. «» Wenn Sie keinen Großhandel von Firma B erhalten, wird sie verkauft. Fragen Sie bei Firma B nach, nicht wahr? "„ Ich möchte die Teile Ihrer Firma kaufen. Können Sie mir einen Kostenvoranschlag geben? "

Es ist immer noch zulässig, wenn ein solches Nachrichtenspiel nur wenige Charaktere enthält. Seien Sie jedoch vorsichtig, wenn die Hierarchie mit 4 oder 5 Personen tiefer wird. Insbesondere ist es gefährlich, es zwei- oder dreimal aufzurufen, um die Daten abzurufen.

Message Board

Legen Sie eine Datenbank ab, um dieses Problem zu lösen. Eine Datenbank ist wie ein Message Board. Wenn der Preis auf der Webseite von Unternehmen B veröffentlicht wurde, war es nicht erforderlich, sich an Unternehmen A zu wenden.

Die Datenbank wird hier im weitesten Sinne lediglich als gemeinsamer Datenspeicherbereich verwendet. Dies kann eine echte relationale Datenbank, eine speicherinterne Datenbank, eine Datei oder ein global zugängliches Schlüssel-Wert-Speicherpaar sein.

Wenn sich die Datenbank nicht im Speicher des Prozesses befindet, kann der Prozess auch aufgeteilt werden. Wenn es möglich ist, die gesamte Anwendung in kleinere Prozesse zu unterteilen, kann die Granularität jedes Prozesses verringert werden.

Gegenangriff globaler Variablen

Diese Datenbank ist die globale Variable selbst. Was sollen wir mit allen Verantwortlichkeiten tun, obwohl der Verantwortungsbereich durch die Objektorientierung unterschieden wird?

Da die Datenbank eine globale Variable ist, ist es dennoch wünschenswert, sie nicht einzuführen. Kleine Programme sollten so weit wie möglich im objektorientierten Bereich verwaltbar sein. Wenn Ihr Programm sehr umfangreich wird und Sie das Gefühl haben, dass das Nachrichtenspiel beendet ist, sollten Sie zum ersten Mal eine Datenbank bereitstellen.

Gibt es doch eine Silberkugel?

Globale Variablen haben oft schlimme Konsequenzen. Es bricht leicht zusammen, wenn die Codemenge sogar ein wenig zunimmt. Mit der Einführung der Objektorientierung können Sie einer erheblichen Menge an Code standhalten. Wenn das Programm jedoch zu groß wird, führt dies zu einem weiteren Ruin im Nachrichtenspielsturm.

Datenbanken, die von weniger erfahrenen Programmierern verwaltet werden, können katastrophal sein. Wenn sich jedoch die Helden, die die Objektorientierung beherrschen, in gewissem Umfang versammeln und im Verantwortungsbereich jeder Klasse auf die Datenbank zugreifen, ist es möglich, sowohl Objektorientierung als auch Datenbank auf hohem Niveau zu erreichen. Der einzige Weg, dies auszugleichen, besteht darin, hart mit hohen Ansprüchen zu arbeiten.

Recommended Posts

Ein objektorientierter Onkel mit 25 Jahren objektorientierter Geschichte spricht von einem Rezept für objektorientiertes Design
Über die Nützlichkeit von Monaden aus einer objektorientierten Perspektive