- OOAD Tutorium
- OOAD - Zuhause
- OOAD - Objektorientierte Paradigm
- OOAD - Objektorientierte Modell
- OOAD - Object orientierte System
- OOAD - Objektorientierte Prinzipien
- OOAD - Objektorientierte Analyse
- OOAD - dynamische Modellierung
- OOAD - funktionale Modellierung
- OOAD - UML Analysemodell
- OOAD - UML Grund Notations
- OOAD - UML Strukturdiagramme
- OOAD - UML Verhaltensdiagramme
- OOAD - Objektorientiertes Design
- OOAD - Umsetzungsstrategien
- OOAD - Testen & Qualitätssicherung
OOAD Umsetzungsstrategien
Die Implementierung eine objektorientierte Design im Allgemeinen beinhaltet die Verwendung eines Standard-objektorientierte Programmiersprache (OOPL) oder Zuordnungsobjekt Designs zu Datenbanken. In den meisten Fällen handelt es beide.
Umsetzung Verwendung Programmiersprachen
In der Regel ist die Aufgabe der Transformation eines Objektdesign in Code ein einfacher Prozess. Eine objektorientierten Programmiersprache wie C ++, Java, Smalltalk, C# und Python, enthält Bestimmungen über die Vertretung Klassen. In diesem Kapitel veranschaulichen wir das Konzept mit C ++.
Die folgende Abbildung zeigt die Darstellung der Klasse Kreis mit C ++.
Durchführungsverordnung Verbände
Die meisten Programmiersprachen bieten keine Konstrukte zu Verbänden direkt umzusetzen. So die Aufgabe der Umsetzung Verbände muss erhebliche Gedanken.
Verbände können entweder unidirektional oder bidirektional sein. Außerdem jeden Verband kann entweder Eins-zu-eins, eins-zu-viele oder viele-zu-viele.
Einseitig Verbände
Für die Umsetzung unidirektionale Assoziationen, sollte darauf geachtet werden, so dass Unidirektionalität beibehalten wird. Die Implementierungen für verschiedene Vielzahl sind wie folgt:
Optional Verbände: Hier ein Link kann oder kann nicht zwischen den beteiligten Objekten existieren. Zum Beispiel in der Vereinigung zwischen dem Kunden und Girokonto in der Abbildung unten, ein Kunde kann oder auch nicht haben ein Girokonto.
Für die Umsetzung ist es ein Ziel der Leistungsbilanz wird als Attribut im Kunden, die NULL sein können enthalten. Implementierung mit C++:
class Customer { private: // attributes Current_Account c; //an object of Current_Account as attribute public: Customer() { c = NULL; } // assign c as NULL Current_Account getCurrAc() { return c; } void setCurrAc( Current_Account myacc) { c = myacc; } void removeAcc() { c = NULL; } };
One-to-One-Verbände : Hier wird eine Instanz einer Klasse, die genau eine Instanz der zugehörigen Klasse verwandt. Zum Beispiel Abteilung und Manager haben Eins-zu-Eins-Zuordnung, wie in der folgenden Abbildung dargestellt.
Dies wird erreicht, indem in der Abteilung, ein Objekt der Manager, der nicht NULL sein sollten umgesetzt. Implementierung mit C ++:
class Department { private: // attributes Manager mgr; //an object of Manager as attribute public: Department (/*parameters*/, Manager m) //m is not NULL { // assign parameters to variables mgr = m; } Manager getMgr() { return mgr; } };
One-to-many Verbände: Hier wird eine Instanz einer Klasse, die mehr als eine Instanz des zugehörigen Klasse verwandt. Betrachten Sie zum Beispiel den Zusammenhang zwischen Mitarbeiter- und Abhängige in der folgenden Abbildung.
Dies wird erreicht, indem eine Liste der Angehörigen in der Klasse Mitarbeiter implementiert. Umsetzung mit C++ STL Liste Container:
class Employee { private: char * deptName; list <Dependent> dep; //a list of Dependents as attribute public: void addDependent ( Dependent d) { dep.push_back(d); } // adds an employee to the department void removeDeoendent( Dependent d) { int index = find ( d, dep ); // find() function returns the index of d in list dep dep.erase(index); } };
Bidirektionale Assoziationen
Um bidirektionale Assoziation zu implementieren, Links in beide Richtungen erforderlich gehalten werden.
Optional oder Eins-zu-Eins-Verbände: Betrachten wir die Beziehung zwischen Projekt- und Projektmanager mit einer Eins-zu-Eins-bidirektionale Assoziation wie in der Abbildung unten gezeigt
Implementierung Verwendung C++:
Class Project { private: // attributes Project_Manager pmgr; public: void setManager ( Project_Manager pm); Project_Manager changeManager(); }; class Project_Manager { private: // attributes Project pj; public: void setProject(Project p); Project removeProject(); };
One-to-many Verbände: Betrachten wir die Beziehung zwischen Abteilung und Mitarbeiter mit Eins-zu-viele Assoziations wie in der Abbildung unten gezeigt.
Implementierung Verwendung C ++ STL Liste Container:
class Department { private: char * deptName; list <Employee> emp; //a list of Employees as attribute public: void addEmployee ( Employee e) { emp.push_back(e); } // adds an employee to the department void removeEmployee( Employee e) { int index = find ( e, emp ); // find function returns the index of e in list emp emp.erase(index); } }; class Employee { private: //attributes Department d; public: void addDept(); void removeDept(); };
Durchführungsverordnung Verbände wie Klassen
Wenn ein Verband hat einige Attribute zugeordnet, sollte es mit einer separaten Klasse implementiert werden. Betrachten Sie zum Beispiel die Ein-zu-Eins-Zuordnung zwischen Mitarbeiter- und Projekt wie in der Abbildung unten gezeigt.
Die Umsetzung der WorksOn Verwendung C++:
class WorksOn { private: Employee e; Project p; Hours h; char * date; public: // class methods };
Die Implementierung Constraints
Constraints in Klassen beschränken die Reichweite und die Art der Werte, die die Attribute kann dauern. Um Einschränkungen implementieren, wird ein gültiger Standardwert dem Attribut zugeordnet wird, wenn ein Objekt aus der Klasse instanziiert. Wenn der Wert wird zur Laufzeit geändert wird, wird geprüft, ob der Wert gültig ist oder nicht. Ein ungültiger Wert kann durch eine Ausnahmebehandlung Routine oder andere Methoden behandelt werden.
Beispiel
Betrachten Sie eine Klasse Employee wo Alter ist ein Attribut, dass die Werte im Bereich von 18 bis 60. Der folgende C haben können ++ Code enthält es:
class Employee { private: char * name; int age; // other attributes public: Employee() // default constructor { strcpy(name, ""); age = 18; // default value } class AgeError {}; // Exception class void changeAge( int a) // method that changes age { if ( a < 18 || a > 60 ) // check for invalid condition throw AgeError(); // throw exception age = a; } };
Umsetzungstaat Charts
Es gibt zwei alternative Umsetzungsstrategien für Zustände in Staat Chart Diagramme .
Aufzählungen innerhalb Klasse
Bei diesem Ansatz werden die Zustände durch unterschiedliche Werte eines Daten Mitglied vertreten (oder einer Reihe von Datenelementen). Die Werte werden explizit durch eine Aufzählung innerhalb der Klasse definiert. Die Übergänge werden durch Elementfunktionen, die den Wert des betreffenden Datenelement ändern vertreten.
Die Anordnung der Klassen in einer Generalisierung Hierarchie
In diesem Ansatz werden die Zustände in einer Verallgemeinerung Hierarchie in einer Weise angeordnet, dass sie von einer gemeinsamen Zeigervariable bezeichnet. Die folgende Abbildung zeigt eine Transformation von Staat Diagramm zu einer Verallgemeinerung Hierarchie.
Objektzuordnung zu Datenbanksystems
Persistenz von Objekten
Ein wichtiger Aspekt der Entwicklung von objektorientierten Systemen ist Persistenz von Daten. Durch Beharrlichkeit, haben Objekte längere Lebensdauer als das Programm, das sie erzeugt. Persistente Daten auf sekundäre Speichermedium kann von dort wieder geladen werden, wenn erforderlich gespeichert.
Überblick über RDBMS
Eine Datenbank ist eine geordnete Sammlung von zugehörigen Daten.
Ein Datenbankmanagementsystem (DBMS) ist eine Sammlung von Software, die die Prozesse der Definition, Erstellung, Speicherung, Bearbeitung, Abrufen, Sharing und Entfernen von Daten in Datenbanken erleichtert.
In relationalen Datenbankmanagementsysteme (RDBMS), werden die Daten als Relationen oder Tabellen, wobei jede Spalte oder Feld repräsentiert ein Attribut gespeichert und jede Zeile oder Tupel stellt einen Rekord von einer Instanz.
Jede Zeile wird eindeutig identifiziert durch eine gewählte Gruppe von minimal Attribute genannt Primärschlüssel .
Eine Fremdschlüssel ist ein Attribut, das der Primärschlüssel einer Bezugstabelle ist.
Darstellen Klassen als Tabellen in RDBMS
Zu Karte eine Klasse zu einer Datenbanktabelle, wird jedes Attribut als Feld in der Tabelle dargestellt. Entweder ein vorhandenes Attribut (en) wird als Primärschlüssel zugeordnet oder eine separate ID-Feld wird als Primärschlüssel hinzugefügt. Die Klasse kann horizontal oder vertikal wie pro Anforderung partitioniert werden.
Zum Beispiel die Circle-Klasse kann zu Tabelle wie in der Abbildung unten gezeigt konvertierten werden.
Schema for Circle Table: CIRCLE(CID, X_COORD, Y_COORD, RADIUS, COLOR) Creating a Table Circle using SQL command: CREATE TABLE CIRCLE ( CID VARCHAR2(4) PRIMARY KEY, X_COORD INTEGER NOT NULL, Y_COORD INTEGER NOT NULL, Z_COORD INTEGER NOT NULL, COLOR );
Mapping Verbände auf Datenbanktabellen
One-to-One Vereine
Zur Umsetzung 1: 1 Verbände, wird der Primärschlüssel nach einem Tisch als Fremdschlüssel der anderen Tabelle zugeordnet. Betrachten Sie zum Beispiel die Zuordnung zwischen Abteilung und Manager:
SQL-Befehle, um die Tabellen zu erstellen:
CREATE TABLE DEPARTMENT ( DEPT_ID INTEGER PRIMARY KEY, DNAME VARCHAR2(30) NOT NULL, LOCATION VARCHAR2(20), EMPID INTEGER REFERENCES MANAGER ); CREATE TABLE MANAGER ( EMPID INTEGER PRIMARY KEY, ENAME VARCHAR2(50) NOT NULL, ADDRESS VARCHAR2(70), );
One-to-Many Verbände
Um ein implementieren 1: N Verbänden, wird der Primärschlüssel der Tabelle in der 1-Seite des Vereins als Fremdschlüssel in der Tabelle auf der N-Seite des Vereins zugewiesen. Betrachten Sie zum Beispiel die Zuordnung zwischen Abteilung und Mitarbeiter:
SQL-Befehle, um die Tabellen zu erstellen:
CREATE TABLE DEPARTMENT ( DEPT_ID INTEGER PRIMARY KEY, DNAME VARCHAR2(30) NOT NULL, LOCATION VARCHAR2(20), ); CREATE TABLE EMPLOYEE ( EMPID INTEGER PRIMARY KEY, ENAME VARCHAR2(50) NOT NULL, ADDRESS VARCHAR2(70), D_ID INTEGER REFERENCES DEPARTMENT );
Viele-zu-Viele Vereine
Um M implementieren: N Verbände wird eine neue Beziehung erstellt, die den Verband vertritt. Betrachten Sie zum Beispiel die folgende Assoziation zwischen Mitarbeiter- und Projekt:
Schema für ARBEITET_AN Tabelle : ARBEITET_AN (EMPID, PID, Stunden, START_DATE
SQL-Befehl ARBEITET_AN Zuordnung zu erstellen : CREATE TABLE ARBEITET_AN
( EMPID INTEGER, PID INTEGER, HOURS INTEGER, START_DATE DATE, PRIMARY KEY (EMPID, PID), FOREIGN KEY (EMPID) REFERENCES EMPLOYEE, FOREIGN KEY (PID) REFERENCES PROJECT );
Mapping Vererbung auf die Tabellen
Um Vererbung abzubilden, wird der Primärschlüssel der Basistabelle (n) als Primärschlüssel sowie die Fremdschlüssel in der abgeleiteten Tabelle (n) zugeordnet.
Beispiel