OOAD Umsetzungsstrategien


Advertisements


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 ++.

Klasse Kreis Vertretung

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.

unidirektionale Assoziation

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.

One to One gerichtet Verband

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.

One to many unidirektionale Assoziation

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

One to One Bidirektionale Verband

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.

One to many Bidirektionale Verband

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.

Implementieren Verband mit einer Klasse

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.

Implementieren Staat Charts

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.

Stellvertretend für Klassen als Tabellen
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:

One–to–One Associations

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:

One-to-Many Verbände

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:

Viele-zu-Viele Verbände

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

Mapping Vererbung auf die Tabellen

Advertisements