Bài đăng nổi bật


Việc thực hiện một thiết kế hướng đối tượng thường bao gồm việc sử dụng ngôn ngữ lập trình hướng đối tượng tiêu chuẩn (OOPL) hoặc ánh xạ thiết kế đối tượng vào cơ sở dữ liệu. Trong hầu hết các trường hợp, nó liên quan đến cả hai.

Triển khai sử dụng Ngôn ngữ lập trình

Thông thường, nhiệm vụ chuyển đổi một thiết kế đối tượng thành mã là một quá trình đơn giản. Bất kỳ ngôn ngữ lập trình hướng đối tượng nào như C ++, Java, Smalltalk, C # và Python, đều bao gồm cung cấp để biểu diễn các lớp. Trong chương này, chúng tôi minh họa khái niệm bằng C ++.
Hình dưới đây cho thấy biểu diễn của Vòng tròn lớp bằng C ++.
Đại diện vòng tròn lớp

Hiệp hội thực hiện

Hầu hết các ngôn ngữ lập trình không cung cấp các cấu trúc để thực hiện các hiệp hội trực tiếp. Vì vậy, nhiệm vụ thực hiện các hiệp hội cần suy nghĩ đáng kể.
Các hiệp hội có thể là một chiều hoặc hai chiều. Bên cạnh đó, mỗi hiệp hội có thể là một trong những người đến với một người, một người đến với nhiều người, hoặc nhiều người đến với nhiều người.

Hiệp hội đơn hướng

Để thực hiện các hiệp hội đơn hướng, cần chú ý để duy trì tính đơn hướng. Việc triển khai cho tính đa dạng khác nhau như sau -
  • Các hiệp hội tùy chọn - Ở đây, một liên kết có thể tồn tại hoặc không tồn tại giữa các đối tượng tham gia. Ví dụ: trong liên kết giữa Khách hàng và Tài khoản hiện tại trong hình bên dưới, khách hàng có thể có hoặc không có tài khoản hiện tại.
Hiệp hội đơn hướng
Để triển khai, một đối tượng của Tài khoản hiện tại được bao gồm dưới dạng một thuộc tính trong Khách hàng có thể là NULL. Thực hiện bằng 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;
   } 
};
  • Một liên kết với một liên kết - Ở đây, một thể hiện của một lớp có liên quan đến chính xác một thể hiện của lớp được liên kết. Ví dụ: Bộ phận và Người quản lý có một liên kết đến một tổ chức như thể hiện trong hình bên dưới.
Hiệp hội một chiều
Điều này được thực hiện bằng cách bao gồm trong Bộ, một đối tượng của Trình quản lý không nên là NULL. Thực hiện bằng 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;  
   }    
};
  • Một liên kết với nhiều hiệp hội - Ở đây, một thể hiện của một lớp có liên quan đến nhiều hơn một thể hiện của lớp liên kết. Ví dụ, hãy xem xét sự liên kết giữa Nhân viên và Người phụ thuộc trong hình dưới đây.
Hiệp hội một đến nhiều đơn vị
Điều này được thực hiện bằng cách bao gồm một danh sách những người phụ thuộc trong lớp Nhân viên. Triển khai sử dụng bộ chứa danh sách C ++ STL -
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);
   }               
};

Hiệp hội hai chiều

Để thực hiện liên kết hai chiều, các liên kết theo cả hai hướng cần phải được duy trì.
  • Tùy chọn hoặc một liên kết với một Hiệp hội - Hãy xem xét mối quan hệ giữa Dự án và Người quản lý dự án có một liên kết với một tổ chức hai chiều như trong hình dưới đây.
Hiệp hội một chiều
Thực hiện bằng 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();   
};
  • Một liên kết với nhiều Hiệp hội - Hãy xem xét mối quan hệ giữa Bộ và Nhân viên có một liên kết với nhiều tổ chức như thể hiện trong hình dưới đây.
Hiệp hội một đến nhiều

Triển khai sử dụng bộ chứa danh sách C ++ STL

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();
};

Thực hiện các hiệp hội như các lớp học

Nếu một hiệp hội có một số thuộc tính được liên kết, thì nó nên được thực hiện bằng cách sử dụng một lớp riêng. Ví dụ, hãy xem xét mối liên kết giữa một người và người khác giữa Nhân viên và Dự án như trong hình bên dưới.
Hiệp hội thực hiện với một lớp học

Triển khai WorksOn bằng C ++

class WorksOn {
   private:
   Employee e; 
   Project p;
   Hours h;
   char * date;

   public:
   // class methods
};   

Thực hiện các ràng buộc

Các ràng buộc trong các lớp giới hạn phạm vi và loại giá trị mà các thuộc tính có thể mất. Để thực hiện các ràng buộc, một giá trị mặc định hợp lệ được gán cho thuộc tính khi một đối tượng được khởi tạo từ lớp. Bất cứ khi nào giá trị được thay đổi trong thời gian chạy, nó sẽ được kiểm tra xem giá trị đó có hợp lệ hay không. Một giá trị không hợp lệ có thể được xử lý bởi một thói quen xử lý ngoại lệ hoặc các phương pháp khác.
Thí dụ
Hãy xem xét một lớp Nhân viên trong đó tuổi là một thuộc tính có thể có các giá trị trong phạm vi từ 18 đến 60. Mã C ++ sau đây kết hợp nó -
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;   
   }
};

Biểu đồ nhà nước

Có hai chiến lược thực hiện thay thế để thực hiện các trạng thái trong biểu đồ biểu đồ trạng thái.

Số lượng trong lớp

Trong phương pháp này, các trạng thái được biểu thị bằng các giá trị khác nhau của thành viên dữ liệu (hoặc tập hợp thành viên dữ liệu). Các giá trị được xác định rõ ràng bằng cách liệt kê trong lớp. Các chuyển đổi được thể hiện bởi các hàm thành viên thay đổi giá trị của thành viên dữ liệu liên quan.

Sắp xếp các lớp học trong một hệ thống phân cấp tổng quát

Trong phương pháp này, các trạng thái được sắp xếp theo thứ bậc tổng quát hóa theo cách mà chúng có thể được gọi bằng một biến con trỏ chung. Hình dưới đây cho thấy một sự chuyển đổi từ biểu đồ biểu đồ trạng thái sang hệ thống phân cấp tổng quát.
Biểu đồ nhà nước

Ánh xạ đối tượng vào hệ thống cơ sở dữ liệu

Sự bền bỉ của các đối tượng

Một khía cạnh quan trọng của việc phát triển các hệ thống hướng đối tượng là tính bền vững của dữ liệu. Thông qua sự kiên trì, các đối tượng có tuổi thọ dài hơn chương trình đã tạo ra nó. Dữ liệu liên tục được lưu trên phương tiện lưu trữ thứ cấp từ nơi có thể tải lại khi có yêu cầu.

Tổng quan về RDBMS

Một cơ sở dữ liệu là một bộ sưu tập theo thứ tự các dữ liệu liên quan.
Hệ thống quản lý cơ sở dữ liệu (DBMS) là tập hợp các phần mềm tạo điều kiện cho các quá trình xác định, tạo, lưu trữ, thao tác, truy xuất, chia sẻ và xóa dữ liệu trong cơ sở dữ liệu.
Trong các hệ thống quản lý cơ sở dữ liệu quan hệ (RDBMS), dữ liệu được lưu trữ dưới dạng quan hệ hoặc bảng, trong đó mỗi cột hoặc trường đại diện cho một thuộc tính và mỗi hàng hoặc bộ dữ liệu đại diện cho một bản ghi của một thể hiện.
Mỗi hàng được xác định duy nhất bởi một tập hợp các thuộc tính tối thiểu được chọn gọi là khóa chính .
Một chìa khóa nước ngoài là một thuộc tính đó là khóa chính của một bảng liên quan.

Biểu diễn các lớp dưới dạng các bảng trong RDBMS

Để ánh xạ một lớp vào bảng cơ sở dữ liệu, mỗi thuộc tính được biểu diễn dưới dạng một trường trong bảng. Hoặc (các) thuộc tính hiện có được gán làm khóa chính hoặc trường ID riêng được thêm làm khóa chính. Lớp có thể được phân vùng theo chiều ngang hoặc chiều dọc theo yêu cầu.
Ví dụ, lớp Circle có thể được chuyển đổi thành bảng như trong hình bên dưới.
Đại diện cho các lớp học như bảng
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 
);

Liên kết ánh xạ tới các bảng cơ sở dữ liệu

Một liên kết với nhau

Để thực hiện các liên kết 1: 1, khóa chính của bất kỳ một bảng nào được gán làm khóa ngoại của bảng khác. Ví dụ, hãy xem xét sự liên kết giữa Bộ phận và Người quản lý -
Một liên kết với nhau

Các lệnh SQL để tạo các bảng

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),
);

Một người đến với nhiều hiệp hội

Để thực hiện các liên kết 1: N, khóa chính của bảng trong cạnh 1 của liên kết được gán làm khóa ngoại của bảng ở phía N của liên kết. Ví dụ, hãy xem xét sự liên kết giữa Bộ và Nhân viên -
Một người đến với nhiều hiệp hội

Các lệnh SQL để tạo các bảng

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
);

Nhiều người đến với nhiều hiệp hội

Để thực hiện các liên kết M: N, một mối quan hệ mới được tạo ra đại diện cho hiệp hội. Ví dụ, hãy xem xét sự liên kết sau đây giữa Nhân viên và Dự án -
Nhiều người đến với nhiều hiệp hội
Lược đồ cho Works_On Bảng - WORKS_ON (EMPID, PID, GIỜ, START_DATE)
Lệnh SQL để tạo liên kết Works_On - CREATE TABLE WORKS_ON
( 
   EMPID INTEGER,
   PID INTEGER, 
   HOURS INTEGER,
   START_DATE DATE,
   PRIMARY KEY (EMPID, PID),
   FOREIGN KEY (EMPID) REFERENCES EMPLOYEE,
   FOREIGN KEY (PID) REFERENCES PROJECT 
);

Kế thừa ánh xạ tới các bảng

Để ánh xạ kế thừa, khóa chính của (các) bảng cơ sở được gán làm khóa chính cũng như khóa ngoại trong (các) bảng dẫn xuất.
Thí dụ
Kế thừa ánh xạ tới các bảng

Post a Comment

أحدث أقدم