[JAVA] [Zusammenfassung] Warum objektorientiert machen?

0. Einleitung

Eines der vielen Meisterwerke der "Why Series" -Bücher, [** Warum objektorientiert machen **](https://www.amazon.co.jp/%E3%82%AA%E3%83%] 96% E3% 82% B8% E3% 82% A7% E3% 82% AF% E3% 83% 88% E6% 8C% 87% E5% 90% 91% E3% 81% A7% E3% 81% AA% E3% 81% 9C% E3% 81% A4% E3% 81% 8F% E3% 82% 8B% E3% 81% AE% E3% 81% 8B-% E7% AC% AC2% E7% 89% 88-% Ich habe E5% B9% B3% E6% BE% A4-% E7% AB% A0 / dp / 4822284654 /) gelesen, daher habe ich die hilfreichen Punkte zusammengefasst und möchte sie für die Bildung verwenden.

1. Warum objektorientiert machen?

Die Frage, die auch der Titel des Buches ist.

Es gibt verschiedene Dinge, aber wenn Sie es ein wenig zerquetschen, können Sie sagen, ** um die Software einfacher zu machen **.

2. Warum heißt es, dass die Objektorientierung schwierig ist?

Die Objektorientierung ist schwierig und wird manchmal als schwierig bezeichnet. Die Gründe dafür sind folgende.

2-1. Flut von Begriffen

"Vererbung, Oberklassen, Schnittstellen, Attribute, Überschreibungen ..." Es gibt so viele Begriffe, an die man sich zunächst nur schwer erinnern kann. Die Objektorientierung deckt jedoch einen großen Bereich ab, so dass gesagt werden kann, dass nicht geholfen werden kann. Es scheint schlecht zu sein, wenn Sie sich nicht daran erinnern.

2-2. Missbrauch der Metapher

"Tiere sind in der Superklasse, Hunde in der Unterklasse ..." "Sende eine Nachricht an das menschliche Objekt, um mir dein Alter mitzuteilen ..." Ich denke, Sie sehen oft solche Beispiele. Die Metapher bleibt jedoch ein starker Eindruck und wird durch den tatsächlichen Mechanismus und die Überzeugungen des Lernenden falsch interpretiert.

2-3. Alles Objekt-Syndrom

"Mensch, Firma, Computer, Verkaufsautomat, Haustierflasche, Veranstaltung ..." Solange es in dieser Welt existiert, kann es als Objekt ausgedrückt werden. Eine solch extreme Abstraktion erzeugt das Missverständnis, dass die reale Welt in einem Programm so ausgedrückt werden kann, wie es ist.

3. Objektorientierung und reale Welt sind unterschiedlich

Objektorientiert wird manchmal als "direkte Darstellung der realen Welt in Software" angesehen. Diese Idee ist im Gegenzug verwirrend. ** Objektorientiert und die reale Welt sind ähnlich und unterschiedlich **.

3-1. Dinge können nicht aus dem Unterricht gemacht werden

-** Objektorientierter **

Außerdem gehört die Instanz zu einer Klasse. - ** Im Fall der realen Welt ** Es gibt zuerst eine konkrete Instanz (z. B. Mensch), die nach dem Unterschied des Betrachters klassifiziert (Klasse) wird. Wenn Sie ins Büro gehen, werden Sie ein Büroangestellter sein, wenn Sie nach Hause gehen, werden Sie ein Vater sein und so weiter. 3-2. In der realen Welt wirken Nachrichten allein nicht - ** objektorientiert ** Wenn Sie die Meldung "Cry!" Hören, hören Sie "Meow" und "One". Objektorientiert widerspricht nicht den Anweisungen.

-** In der echten Welt ** Wenn Sie die Meldung "Cry!" Erhalten, hören Sie möglicherweise "Meow" oder "One", aber Sie können sie ignorieren. Sie können beißen. In der realen Welt ist es gegen Befehle.

Die Software soll nicht die reale Welt darstellen, sondern einen Teil der menschlichen Arbeit abdecken. Es geht darum, den Computer die ** "Erinnerung" und "feste Arbeit" ** ausführen zu lassen, in denen der Computer gut ist.

4. Verlauf bis zur Objektorientierung

Die Programmiertechnologie wurde viele Male entwickelt und verbessert, und die Objektorientierung wurde geboren. Die Geschichte der Entwicklung der Programmiertechnologie ist wie folgt.

4-1. Maschinensprache

Der Computer kann nur ** Maschinensprache ** verstehen. In den frühen Tagen schrieb der Mensch Programme in Maschinensprache.

A10010
8B160210
01D0
A10410

4-2. Assemblersprache

** Assemblersprache ** wurde eingeführt, um die Maschinensprache etwas verständlicher zu machen. In der Assemblersprache wird die Maschinensprache durch ein Symbol ersetzt, das für den Menschen leicht verständlich ist.

MOV AX, X
MOV DX, Y
ADD AX, DX
MOV Z,  AX

4-3. Hochsprache

** Hochsprachen ** sind entstanden, um den Ausdruck noch menschlicher zu gestalten. Mit dem Aufkommen von Hochsprachen haben sich die Programmierproduktivität und -qualität erheblich verbessert. Mit dem explosiven Wachstum der Computer wurden die Anforderungen jedoch nicht erfüllt. Dies wurde als ** Software-Krise ** bezeichnet.

Z = X + Y

4-4. Strukturierte Programmierung

Um auf die Software-Krise zu reagieren, wurde ** Structured Programming ** von ** Dyxtra ** in den Niederlanden eingeführt. Die Idee der strukturierten Programmierung ist, dass es wichtig ist, eine leicht verständliche Struktur zu haben, um ein Programm zu erstellen, das korrekt funktioniert. Um das Verständnis zu erleichtern, wurden die folgenden Methoden speziell erwähnt.

Strukturierte Programmiersprachen sind für Programmierer alltäglich geworden, aber es gibt immer noch zwei Probleme, die strukturierte Programmiersprachen nicht lösen können.

-** Globale Variablen ** Lokale Variablen verschwinden nach dem Aufruf des Unterprogramms. Daten, die in der Ausführungsagentur des Unterprogramms aufbewahrt werden müssen, müssen von globalen Variablen verarbeitet werden.

5. Die Entstehung der Objektorientierung

Es wurde eine Objektorientierung entwickelt, um das Problem der globalen Variablen und der schlechten Wiederverwendung anzugehen. Bei der Objektorientierung wurden drei neue Mechanismen "Klasse", "Polymorphismus" und "Vererbung" hinzugefügt.

5-1. Klasse

5-1-1. Zusammenfassen

Es ist ein Mechanismus, um Variablen und Unterprogramme mit starken Bindungen in einer Klasse zu kombinieren. Dieser Mechanismus kann die Anzahl der Zeilen in einem Quellcode (Teil) reduzieren. Da die Klassen zusammen gruppiert sind, ist es auch einfacher, Unterprogramme zu benennen.

<Vor objektorientiert>
・ TextFileOpen()
・ TextFileClose()
・ TextFileRead()
・ JsonFileOpen()
・ JsonFileClose()
・ JsonFileRead()

<Bei Objektorientierung>
■ Textklasse
· Datei öffnen()
・ FileClose()
・ FileRead()
■ Json-Klasse
· Datei öffnen()
・ FileClose()
・ FileRead()

5-1-2. Ausblenden

Es ist ein Mechanismus, um in einer Klasse definierte Variablen und Unterprogramme vor anderen Klassen (privat) auszublenden. Durch das Ausblenden wird verhindert, dass es von außen unbeabsichtigt verwendet wird.

5-1-3. Machen Sie viel

Durch Definieren einer Klasse können Sie beliebig viele Instanzen erstellen. Da der Benutzer das Unterprogramm durch Angabe der Instanz aufruft, kann angegeben werden, welche Instanz verarbeitet werden soll.

5-2. Polymorphismus

Polymorphismus bedeutet "sich in verschiedene Formen verwandeln". Das Unterprogramm ist ein Mechanismus zum Standardisieren der Logik der aufgerufenen Seite, während der Polymorphismus ein Mechanismus zum Standardisieren der aufrufenden Seite ist. Schauen wir uns das folgende Beispiel an. Mit dem Polymorphismus-Mechanismus können Sie "GetNameCount ()" und "Special Attack ()" sowohl für "Human" als auch für "Monster" verwenden. Wenn neue Kreaturen hinzugefügt werden, müssen diese Methoden überhaupt nicht geändert werden.

Untitled-1.png

hoge.cs


//Namen zählen
public int GetNameCount(Creature creature)
{
    return creature.GetName().Length;
}

//Jeder besondere Angriff!
public void AllSpecialAttack(IEnumerable<Creature> creatures)
{
    foreach (var creature in creatures)
    {
        creature.SpecialAttack();
    }
}

5-3. Vererbung

Es ist ein Mechanismus, um eine andere Klasse zu schaffen, indem die Gemeinsamkeiten von Klassen ähnlicher Personen gesammelt werden (obwohl dies am Beispiel des Polymorphismus ersichtlich war). Mit anderen Worten, Sie können Codeduplizierungen vermeiden.

6. Erweiterte Objektorientierung

Programmierung wie Java und C # bietet noch erweiterte Funktionen. Typische Beispiele sind "Pakete", "Ausnahmen" und "Garbage Collections".

6-1. Paket

Es ist ein Mechanismus zum Organisieren von Klassen wie ein Ordner. Es ist auch möglich, eine hierarchische Struktur durch Verschachteln von Paketen zu erstellen.

6-2. Ausnahme

Es ist ein Mechanismus, der einen speziellen Fehler der Methode in einer vom Rückgabewert abweichenden Form zurückgibt. Ausnahmen werden häufig für "Netzwerkfehler", "Festplattenzugriffsfehler", "DB-Deadlock" usw. verwendet. In der Vergangenheit war die Methode zur Verwendung eines Fehlercodes üblich, es gab jedoch die folgenden Probleme.

Wenn Sie im Falle einer Ausnahme vergessen, die Nachbearbeitung (catch) der Ausnahme zu schreiben, tritt ein Laufzeitfehler auf. Außerdem müssen Sie für Methoden, die keine Nachbearbeitung erfordern, nur deklarieren, dass eine Ausnahme auftritt. Der Ausnahmemechanismus hat zwei Auswirkungen: Abfall zu beseitigen und Fehler zu vermeiden.

6-3. Müllabfuhr

Dieser Mechanismus löscht automatisch unnötige Instanzen und gibt Speicher frei. Es ist in Java und C # enthalten. Wenn Sie keine Garbage Collection haben, müssen Sie den Speicher explizit freigeben. Wenn Sie die erforderliche Instanz versehentlich löschen, führt dies zu einem Fehler. Wenn Sie vergessen, sie zu löschen, führt dies zu einem Speicherverlust. Die Garbage Collection kann Ihnen in diesem Bereich helfen.

7. Objektorientierte Wiederverwendung

Die Objektorientierung hat zwei Wiederverwendungstechnologien hervorgebracht. Das ist "Wiederverwendung von Software" und "Wiederverwendung von Ideen".

7-1. Wiederverwendung von Software

7-1-1. Bibliothek

Es ist eine Sammlung von Klassen mit allgemeinen Funktionen. In traditionellen Programmiersprachen konnte nur eine Unterroutine wiederverwendet werden. Mit der Objektorientierung können Sie jedoch:

--Erstellen Sie eine Instanz aus einer Klasse in der Bibliothek und verwenden Sie Methoden und Variablen. ···Klasse

7-1-2. Framework

Es wird ein Bild eines Halbzeugs der Anwendung sein. Es wird verwendet, um eine Anwendung aus dem Framework aufzurufen, im Gegensatz zu einer Bibliothek. Der grundlegende Ablauf wird vom Framework bereitgestellt, und die Anwendung enthält eine eigene Verarbeitung.

7-2. Wiederverwendung von Ideen

7-2-1. Entwurfsmuster

Es ist eine Sammlung guter Designideen. Erstellt von ** Eric (Erich) Gamma **, ** Richard Helm **, ** Ralph Johnson **, ** John Brisidis **. Sie wurden ** GoF ** genannt, und die 23 Entwurfsmuster, die sie herausgaben, wurden ** GoF-Entwurfsmuster ** genannt. Weitere Informationen zu GoF-Entwurfsmustern finden Sie weiter unten.

  1. UML UML steht für Unified Modeling Language und wird als "Unified Modeling Language" übersetzt. Erstellt von ** Grady Booth **, ** James Rambo **, ** Iver Jacobson **. Diese drei Personen werden bekanntlich ** Drei Amigo ** genannt. UML wird wie folgt verwendet.

8-1. Verwendung von UML

8-1-1. Darstellung der Objektorientierung

UML wird verwendet, um objektorientierte Programmstrukturen und -verhalten darzustellen. Es ist für das menschliche Gehirn geeignet, da es eine zweidimensionale Figur visuell erfasst. Kurz gesagt, UML ist ein ** Tool zum Anzeigen von immaterieller Software **. Typische Diagramme sind ** Klassendiagramm **, ** Sequenzdiagramm ** und ** Kommunikationsdiagramm **. * Eine ausführliche Erläuterung der einzelnen Abbildungen entfällt hier. In der Softwareentwicklung wird es im Design verwendet.

8-1-2. Darstellung nicht objektorientiert

Informationen, die nicht objektorientiert ausgedrückt werden können, werden auch in UML ausgedrückt. Typische Diagramme sind ** Anwendungsfalldiagramme **, ** Aktivitätsdiagramme ** und ** Zustandsmaschinendiagramme **. * Eine ausführliche Erläuterung der einzelnen Abbildungen entfällt hier. In der Softwareentwicklung wird es für die Geschäftsanalyse (Organisation der realen Arbeit) und die Definition der Anforderungen (Festlegung des Arbeitsumfangs, der einem Computer anvertraut werden soll) verwendet.

8-2. UML hilft bei der Kommunikation

Natürliche Sprache wird für die Kommunikation zwischen Menschen verwendet, und Computersprache wird für Menschen verwendet, um Computern Befehle zu erteilen. Da natürliche Sprachen und Computersprachen mit Buchstaben ausgedrückt werden, sind die Ausdrücke kompliziert und die Menge enorm. Andererseits wird UML mithilfe von Diagrammen ausgedrückt, sodass es intuitiv verstanden werden kann. UML ist auch eine Sprache, die die Mängel natürlicher und Computersprachen ausgleicht. Versuchen Sie daher nicht, alles in UML auszudrücken, sondern verwenden Sie es als Kommunikationsmittel!

9. Objektorientierte Designtipps

Die wichtigsten Punkte für die Erstellung von Software, die einfach zu warten und wiederzuverwenden ist, sind folgende.

9-1. Beseitigen Sie Doppelarbeit

Je mehr Duplikate vorhanden sind, desto schwieriger ist es, das Programm zu verstehen, zu ändern und zu testen. Duplikate führen in der Regel zu mehr Kopieren und Einfügen. Mit anderen Worten, seien Sie vorsichtig, wenn Sie viele Kopien haben. Es sollte darauf geachtet werden, Doppelarbeit während der Entwurfsphase zu vermeiden.

9-2. Erhöhen Sie die Unabhängigkeit von Teilen

Der Trick, um komplexe Dinge leichter verständlich zu machen, ist das "Teilen". Ein hohes Maß an Unabhängigkeit macht die Funktion des Teils klarer und verständlicher. Die Idee zur Erhöhung der Unabhängigkeit lautet wie folgt.

-** Anhäufung ** Zeigt den Grad der Kohäsion von Funktionen an. Je stärker desto besser das Design.

Hier einige Tipps zur Erhöhung der Unabhängigkeit:

9-3. Verteilen Sie keine Abhängigkeiten

Abhängigkeiten bestehen darin, dass ein Teil einen anderen verwendet. Keines der folgenden Beispiele kann unabhängig kompiliert werden. Wenn Sie eine davon ändern, müssen Sie auch alle anderen Komponenten überprüfen. 1.png

Im folgenden Beispiel kann "Komponente C" alleine verwendet werden. Wenn Sie "Komponente A" verwenden, müssen Sie auch keine anderen Komponenten überprüfen. 2.png

10. Schlussfolgerung

Ich bin der Typ, der durch das Projekt die Objektorientierung gelernt hat, daher hat mir dieses Buch geholfen, die Grundlagen zu organisieren. In dem Buch werden auch das Gedächtnis und der Entwicklungsprozess leicht verständlich beschrieben, aber ich wollte es zu einem separaten Artikel machen, deshalb habe ich es hier weggelassen. Wenn Sie an Objektorientierung interessiert sind, schauen Sie sich bitte die Bücher an.

Ich hoffe auch, dass Sie auch die folgenden Artikel in der gleichen Grundserie lesen können.

Recommended Posts

[Zusammenfassung] Warum objektorientiert machen?
[Buchbesprechung] Warum objektorientiert machen, 2. Auflage
Objektorientierte Zusammenfassung
Objektorientierte Zusammenfassung von Anfängern (Java)
[Java] Mach es konstant
Teilen Sie durch Ruby! Warum ist es 0?
Priority Queue max Machen Sie es zu einer Warteschlange
Zusammenfassung der objektorientierten Programmierung mit Java