Please enable JavaScript.
Coggle requires JavaScript to display documents.
OOP tuần 9, multi-inheritance
static attributes, methods
singleton…
OOP tuần 9
Static attributes, methods
VẤN ĐỀ:
Trong một số trường hợp, khi chúng ta có nhu cầu sử dụng một biến là thành phần dữ liệu chung cho tất cả các đối tượng. Nếu sử dụng biến toàn cục sẽ gây ra các nguy cơ nhất định và về mặt ngữ nghĩa sử dụng biến toàn cục cũng không hợp lý
-
GIẢI PHÁP
Sử dụng thành phần dữ liệu tĩnh. Đây là thành phần chung của lớp đối tượng tương ứng, nó không phục thuộc vào một đối tượng cụ thể nào mà nó là một thành phần chung cho tất cả các đối tượng của lớp tương ứng
VÍ DỤ
class A {
private:
static int count; //Biến đếm số lượng đối tượng A
public:
A() {
++count; //Khi một đối tượng được tạo ra thì biến count sẽ tăng lên 1
}
static int show() {
return count;
}
~A() {
--count; //Khi một đối tượng bị hủy thì biến count sẽ giảm đi 1
}
}
//Khởi tạo biến đếm đối tượng chung cho lớp A
int A::count = 0;
int main() {
A a; //=> Một đối tượng lớp A được tạo ra, biến count sẽ tăng thêm 1
cout << "So luong doi tuong: " << A::show() << endl; //=> show() sẽ trả ra kết quả là 1
B b;
cout << "So luong doi tuong: " << A::show() << endl; //=> show() sẽ trả ra kết quả là 2
return 0;
}
Singleton design pattern
Định nghĩa
Là design pattern thỏa:
1.Giới hạn chỉ có duy nhất 1 instance của class đó tồn tại ở bất kỳ thời điểm nào class đó được request
2.Cho phép quyền truy cập global.
Trường hợp cần sử dụng
Khi hiện thực singleton pattern phải đảm bảo rằng chỉ có một thể hiện (instance) duy nhất được tạo ra và thể hiện tại có thể dùng mọi lúc mọi nơi. Khi xây dựng class cần một kỹ thuật để có thể truy xuất được vào các thành viên public của class mà không tạo ra một thể hiện nào (thông qua việc khởi tạo bên ngoài class).
Để chắc chắn không có bất kỳ thể hiện nào bên ngoài class được tạo ra, constructor của class đó sẽ có phạm vi truy cập là private, nghĩa là thể hiện duy nhất được tạo ra thông qua chính class được xây dựng. Sử dụng thành phần static để thực hiện điều này. Tạo một thể hiện của lớp kiểu private static và một refractor trả về đối tượng thuộc chính lớp đó.
Lý do cần sử dụng
Trong quá trình phân tích thiết kế một hệ thống, có những đối tượng cần tồn tại duy nhất song có thể truy xuất mọi lúc mọi nơi. Làm thế nào để hiện thực được một đối tượng như thế khi xây dựng mã nguồn?
Sử dụng biến toàn cục chỉ có thể đáp ứng được mặt “sử dụng mọi lúc mọi nơi”, khi xét tính duy nhất của thể hiện thì biến toàn cục không làm được điều đó.
-
Đa kế thừa
Định nghĩa
Trong một lớp có thể kế thừa từ nhiều hơn một lớp khác. Nghĩa là một lớp con được kế thừa từ nhiều hơn một lớp cơ sở.
VD:class ConVat{
public:
void Keu(){
cout<<"keu"<<endl;
}
class DV_trencan{
void Di(){
cout<<"di bang chan"<<endl;
}
class Cho:public:ConVat,public DV_trencan{
};
- multi-inheritance
- static attributes, methods
- singleton design pattern: WHAT, HOW, WHY
-
-
-
-
-