Objektorientiertes Paradigma
Das objektorientierte (OO) Paradigma nahm seine Form aus dem ursprünglichen Konzept eines neuen Programmieransatzes an, während das Interesse an Entwurfs- und Analysemethoden viel später kam. Das OO-Analyse- und Design-Paradigma ist das logische Ergebnis der breiten Akzeptanz von OO-Programmiersprachen.
Die erste objektorientierte Sprache war Simula (Simulation realer Systeme), die 1960 von Forschern des norwegischen Rechenzentrums entwickelt wurde.
Im Jahr 1970 Alan Kay und seine Forschungsgruppe bei Xerox PARC erstellte einen Personal Computer mit dem Namen Dynabook und die erste reine objektorientierte Programmiersprache (OOPL) - Smalltalk zum Programmieren des Dynabooks.
In den 1980er Jahren, Grady Boochveröffentlichte ein Papier mit dem Titel Object Oriented Design, das hauptsächlich ein Design für die Programmiersprache Ada vorstellte. In den folgenden Ausgaben erweiterte er seine Ideen auf eine vollständige objektorientierte Entwurfsmethode.
In den 1990ern, Coad Verhaltensideen in objektorientierte Methoden integriert.
Die anderen bedeutenden Innovationen waren Object Modeling Techniques (OMT) von James Rum Baugh und objektorientiertes Software Engineering (OOSE) von Ivar Jacobson.
Einführung in das OO-Paradigma
Das OO-Paradigma ist eine wichtige Methode für die Entwicklung jeder Software. Die meisten Architekturstile oder -muster wie Pipe und Filter, Datenrepository und komponentenbasiert können mithilfe dieses Paradigmas implementiert werden.
Grundlegende Konzepte und Terminologien objektorientierter Systeme -
Objekt
Ein Objekt ist ein reales Element in einer objektorientierten Umgebung, die eine physische oder konzeptionelle Existenz haben kann. Jedes Objekt hat -
Identität, die es von anderen Objekten im System unterscheidet.
Status, der die charakteristischen Eigenschaften eines Objekts sowie die Werte der Eigenschaften bestimmt, die das Objekt enthält.
Verhalten, das von außen sichtbare Aktivitäten eines Objekts in Bezug auf Änderungen seines Zustands darstellt.
Objekte können entsprechend den Anforderungen der Anwendung modelliert werden. Ein Objekt kann eine physische Existenz haben, wie ein Kunde, ein Auto usw.; oder eine immaterielle konzeptuelle Existenz, wie ein Projekt, ein Prozess usw.
Klasse
Eine Klasse repräsentiert eine Sammlung von Objekten mit denselben charakteristischen Eigenschaften, die ein gemeinsames Verhalten aufweisen. Es gibt den Entwurf oder die Beschreibung der Objekte, die daraus erstellt werden können. Das Erstellen eines Objekts als Mitglied einer Klasse wird als Instanziierung bezeichnet. Ein Objekt ist also eininstance einer Klasse.
Die Bestandteile einer Klasse sind -
Eine Reihe von Attributen für die Objekte, die aus der Klasse instanziiert werden sollen. Im Allgemeinen unterscheiden sich verschiedene Objekte einer Klasse in den Werten der Attribute. Attribute werden häufig als Klassendaten bezeichnet.
Eine Reihe von Operationen, die das Verhalten der Objekte der Klasse darstellen. Operationen werden auch als Funktionen oder Methoden bezeichnet.
Example
Betrachten wir eine einfache Klasse, Kreis, die den geometrischen Figurenkreis in einem zweidimensionalen Raum darstellt. Die Attribute dieser Klasse können wie folgt identifiziert werden:
- x-Koordinate, um die x-Koordinate des Zentrums zu bezeichnen
- y-Koordinate, um die y-Koordinate des Zentrums zu bezeichnen
- a, um den Radius des Kreises zu bezeichnen
Einige seiner Operationen können wie folgt definiert werden:
- findArea (), eine Methode zur Berechnung der Fläche
- findCircumference (), eine Methode zur Berechnung des Umfangs
- scale (), eine Methode zum Vergrößern oder Verkleinern des Radius
Verkapselung
Bei der Kapselung werden sowohl Attribute als auch Methoden innerhalb einer Klasse miteinander verbunden. Durch die Kapselung können die internen Details einer Klasse von außen ausgeblendet werden. Es ermöglicht den Zugriff auf die Elemente der Klasse von außen nur über die von der Klasse bereitgestellte Schnittstelle.
Polymorphismus
Polymorphismus ist ursprünglich ein griechisches Wort, das die Fähigkeit bedeutet, mehrere Formen anzunehmen. In einem objektorientierten Paradigma impliziert Polymorphismus die Verwendung von Operationen auf unterschiedliche Weise, abhängig von den Instanzen, mit denen sie arbeiten. Durch Polymorphismus können Objekte mit unterschiedlichen internen Strukturen eine gemeinsame externe Schnittstelle haben. Polymorphismus ist besonders effektiv bei der Implementierung der Vererbung.
Example
Betrachten wir zwei Klassen, Kreis und Quadrat, jede mit einer Methode findArea (). Obwohl der Name und der Zweck der Methoden in den Klassen identisch sind, ist die interne Implementierung, dh das Verfahren zum Berechnen einer Fläche, für jede Klasse unterschiedlich. Wenn ein Objekt der Klasse Circle seine findArea () -Methode aufruft, findet die Operation den Bereich des Kreises ohne Konflikt mit der findArea () -Methode der Square-Klasse.
Relationships
Um ein System zu beschreiben, müssen sowohl dynamische (Verhaltens-) als auch statische (logische) Spezifikationen eines Systems angegeben werden. Die dynamische Spezifikation beschreibt die Beziehungen zwischen Objekten, z. B. Nachrichtenübermittlung. Die statische Spezifikation beschreibt die Beziehungen zwischen Klassen, z. B. Aggregation, Zuordnung und Vererbung.
Nachrichtenübermittlung
Jede Anwendung erfordert eine Reihe von Objekten, die auf harmonische Weise interagieren. Objekte in einem System können mithilfe der Nachrichtenübermittlung miteinander kommunizieren. Angenommen, ein System hat zwei Objekte - obj1 und obj2. Das Objekt obj1 sendet eine Nachricht an das Objekt obj2, wenn obj1 möchte, dass obj2 eine seiner Methoden ausführt.
Zusammensetzung oder Aggregation
Aggregation oder Zusammensetzung ist eine Beziehung zwischen Klassen, durch die eine Klasse aus einer beliebigen Kombination von Objekten anderer Klassen bestehen kann. Es ermöglicht die direkte Platzierung von Objekten im Hauptteil anderer Klassen. Aggregation wird als "Teil-von" - oder "hat-eine" -Beziehung bezeichnet, mit der Fähigkeit, vom Ganzen zu seinen Teilen zu navigieren. Ein Aggregatobjekt ist ein Objekt, das aus einem oder mehreren anderen Objekten besteht.
Verband
Assoziation ist eine Gruppe von Verbindungen mit gemeinsamer Struktur und gemeinsamem Verhalten. Die Zuordnung zeigt die Beziehung zwischen Objekten einer oder mehrerer Klassen. Ein Link kann als Instanz einer Zuordnung definiert werden. Der Grad einer Assoziation gibt die Anzahl der an einer Verbindung beteiligten Klassen an. Der Abschluss kann unär, binär oder ternär sein.
- Eine unäre Beziehung verbindet Objekte derselben Klasse.
- Eine binäre Beziehung verbindet Objekte zweier Klassen.
- Eine ternäre Beziehung verbindet Objekte von drei oder mehr Klassen.
Erbe
Es ist ein Mechanismus, mit dem neue Klassen aus vorhandenen Klassen erstellt werden können, indem seine Funktionen erweitert und verfeinert werden. Die vorhandenen Klassen werden als Basisklassen / Elternklassen / Superklassen bezeichnet, und die neuen Klassen werden als abgeleitete Klassen / Kindklassen / Unterklassen bezeichnet.
Die Unterklasse kann die Attribute und Methoden der Oberklasse (n) erben oder ableiten, sofern die Oberklasse dies zulässt. Außerdem kann die Unterklasse ihre eigenen Attribute und Methoden hinzufügen und jede der Superklassenmethoden modifizieren. Vererbung definiert eine "ist - eine" Beziehung.
Example
Aus einer Klasse Säugetier können eine Reihe von Klassen abgeleitet werden, wie z. B. Mensch, Katze, Hund, Kuh usw. Menschen, Katzen, Hunde und Kühe haben alle die unterschiedlichen Eigenschaften von Säugetieren. Darüber hinaus hat jedes seine eigenen Besonderheiten. Man kann sagen, dass eine Kuh ein Säugetier ist.
OO-Analyse
In der objektorientierten Analysephase der Softwareentwicklung werden die Systemanforderungen ermittelt, die Klassen identifiziert und die Beziehungen zwischen Klassen anerkannt. Ziel der OO-Analyse ist es, die Anwendungsdomäne und die spezifischen Anforderungen des Systems zu verstehen. Das Ergebnis dieser Phase ist die Anforderungsspezifikation und erste Analyse der logischen Struktur und Machbarkeit eines Systems.
Die drei Analysetechniken, die für die objektorientierte Analyse zusammen verwendet werden, sind Objektmodellierung, dynamische Modellierung und Funktionsmodellierung.
Objektmodellierung
Die Objektmodellierung entwickelt die statische Struktur des Softwaresystems in Bezug auf Objekte. Es identifiziert die Objekte, die Klassen, in die die Objekte gruppiert werden können, und die Beziehungen zwischen den Objekten. Außerdem werden die Hauptattribute und -operationen identifiziert, die jede Klasse charakterisieren.
Der Prozess der Objektmodellierung kann in den folgenden Schritten visualisiert werden:
- Identifizieren Sie Objekte und gruppieren Sie sie in Klassen
- Identifizieren Sie die Beziehungen zwischen Klassen
- Erstellen Sie ein Benutzerobjektmodelldiagramm
- Definieren Sie Benutzerobjektattribute
- Definieren Sie die Operationen, die für die Klassen ausgeführt werden sollen
Dynamische Modellierung
Nachdem das statische Verhalten des Systems analysiert wurde, muss sein Verhalten in Bezug auf Zeit und externe Änderungen untersucht werden. Dies ist der Zweck der dynamischen Modellierung.
Dynamische Modellierung kann definiert werden als „eine Art zu beschreiben, wie ein einzelnes Objekt auf Ereignisse reagiert, entweder interne Ereignisse, die von anderen Objekten ausgelöst werden, oder externe Ereignisse, die von der Außenwelt ausgelöst werden.“
Der Prozess der dynamischen Modellierung kann in den folgenden Schritten visualisiert werden:
- Identifizieren Sie die Zustände jedes Objekts
- Identifizieren Sie Ereignisse und analysieren Sie die Anwendbarkeit von Aktionen
- Erstellen Sie ein dynamisches Modelldiagramm, das aus Zustandsübergangsdiagrammen besteht
- Drücken Sie jeden Status in Form von Objektattributen aus
- Validieren Sie die gezeichneten Zustandsübergangsdiagramme
Funktionsmodellierung
Die funktionale Modellierung ist die letzte Komponente der objektorientierten Analyse. Das Funktionsmodell zeigt die Prozesse, die innerhalb eines Objekts ausgeführt werden, und wie sich die Daten ändern, wenn sie sich zwischen Methoden bewegen. Es gibt die Bedeutung der Operationen einer Objektmodellierung und der Aktionen einer dynamischen Modellierung an. Das Funktionsmodell entspricht dem Datenflussdiagramm der traditionellen strukturierten Analyse.
Der Prozess der Funktionsmodellierung kann in den folgenden Schritten visualisiert werden:
- Identifizieren Sie alle Ein- und Ausgänge
- Erstellen Sie Datenflussdiagramme mit funktionalen Abhängigkeiten
- Geben Sie den Zweck jeder Funktion an
- Identifizieren Sie die Einschränkungen
- Optimierungskriterien angeben
Objektorientiertes Design
Nach der Analysephase wird das konzeptionelle Modell mithilfe des objektorientierten Designs (OOD) zu einem objektorientierten Modell weiterentwickelt. In OOD werden die technologieunabhängigen Konzepte im Analysemodell auf implementierende Klassen abgebildet, Einschränkungen identifiziert und Schnittstellen entworfen, was zu einem Modell für die Lösungsdomäne führt. Das Hauptziel des OO-Designs ist die Entwicklung der strukturellen Architektur eines Systems.
Die Stufen für objektorientiertes Design können identifiziert werden als -
- Den Kontext des Systems definieren
- Entwerfen der Systemarchitektur
- Identifikation der Objekte im System
- Konstruktion von Designmodellen
- Spezifikation von Objektschnittstellen
OO Design kann in zwei Phasen unterteilt werden - Konzeption und Detailplanung.
Conceptual design
In dieser Phase werden alle Klassen identifiziert, die zum Erstellen des Systems benötigt werden. Darüber hinaus sind jeder Klasse bestimmte Verantwortlichkeiten zugeordnet. Das Klassendiagramm wird verwendet, um die Beziehungen zwischen Klassen zu verdeutlichen, und das Interaktionsdiagramm wird verwendet, um den Ablauf von Ereignissen darzustellen. Es ist auch bekannt alshigh-level design.
Detailed design
In dieser Phase werden jeder Klasse Attribute und Operationen basierend auf ihrem Interaktionsdiagramm zugewiesen. Zustandsmaschinendiagramme werden entwickelt, um die weiteren Details des Entwurfs zu beschreiben. Es ist auch bekannt alslow-level design.
Design-Prinzipien
Im Folgenden sind die wichtigsten Gestaltungsprinzipien aufgeführt:
Principle of Decoupling
Es ist schwierig, ein System mit einer Reihe stark voneinander abhängiger Klassen zu warten, da Änderungen in einer Klasse zu kaskadierenden Aktualisierungen anderer Klassen führen können. In einem OO-Design kann eine enge Kopplung durch Einführung neuer Klassen oder Vererbung beseitigt werden.
Ensuring Cohesion
Eine zusammenhängende Klasse führt eine Reihe eng verwandter Funktionen aus. Mangelnder Zusammenhalt bedeutet, dass eine Klasse nicht verwandte Funktionen ausführt, obwohl dies den Betrieb des gesamten Systems nicht beeinträchtigt. Dadurch ist es schwierig, die gesamte Softwarestruktur zu verwalten, zu erweitern, zu warten und zu ändern.
Open-closed Principle
Nach diesem Prinzip sollte ein System erweitert werden können, um die neuen Anforderungen zu erfüllen. Die vorhandene Implementierung und der Code des Systems sollten infolge einer Systemerweiterung nicht geändert werden. Darüber hinaus müssen die folgenden Richtlinien im Open-Closed-Prinzip befolgt werden:
Für jede konkrete Klasse müssen separate Schnittstellen und Implementierungen gepflegt werden.
Halten Sie in einer Multithread-Umgebung die Attribute privat.
Minimieren Sie die Verwendung globaler Variablen und Klassenvariablen.