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 ++.
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.
Để 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;
}
};
Đ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.
Đ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ì.
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();
};
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.
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.
Á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.
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ý -
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 -
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 -
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ụ
Đăng nhận xét