//So sánh giữa composition and dependency
//Dependency là gì? là sự phụ thuộc vào một class khác để thực hiện 1 hành động
//Chẳng hạn như muốn thực hiện phương thức
// void Greeting(string str){
// console.log(str); }
//Chúng ta sử dụng hàm log của class console
//Có 3 dạng dependency
class Dependency{
A f(){
}
void f(A){
}
void f(){
A a;
}
}
//Composition : ngoài tác dụng như dependency, composition còn đóng vai trò là
//attributes của class
class Composition{
A a; //Attributes của class ---> Data
//Function sử dụng A sẽ có 2 mục đích chính
//Thay đổi giá trị của A ---> Controller
//Read-only giá trị của A ---> View
void f(){
}
}
//2 class composition có chung attributes : share chung dữ liệu
void main(){
Table tb = new Table();
StudyPlace sp1 = new StudyPlace();
StudyPlace sp2 = new StudyPlace();
sp1.attach(tb);
sp2.attach(tb);
}
//Composition and Inheritance
//Inner
class Sorter{
bool Condition(int v1, int v2){
return true;
}
void SortArray(int[] A, int N){
for(int i=0;i<N;i++)
for(int j =0;j<N;j++)
if(Condition(A[i], A[j])
HoanVi(A[i], A[j]);//Hoan đổi giá trị
}
}
void SorterA:Sorter{
override bool Condition(int v1, int v2){
return true;
}
}
//External class
class Sorter{
void SortArray(int[] A, int N,Condition condition){
for(int i=0;i<N;i++)
for(int j =0;j<N;j++)
if(condition.Check(A[i], A[j])
HoanVi(A[i], A[j]);//Hoan đổi giá trị
}
}
class Condition{
bool Check(int v1, int v2){
}
}
//Internal class: giao cho người trong nhà
//Extern class : giao cho người ngoài
//Delegation là gì ?
//Delegation là ủy thác
//Khi nào nên delegation: vấn đề quá khó, không có thời gian làm, không chắc chắn
//Ví dụ: A trúng xố số 90 tỷ, sau 1 năm ăn chơi số tiền của A chỉ còn 50 Tỷ. A nhận
//ra là mình nên đầu tư kinh doanh chứ không thì số tiền đó sẽ nhanh hết.
//A dự định mở ra quán cafe
//Quán cafe sẽ có một số công việc như sau:
// + quản lý - nhân viên quản lý
// + bán hàng - nhân viên
// + giữ xe - bác bảo vệ
//Code
class NhanVien{
void UpdateNhanVien(){
//Update
//Cập nhật dữ liệu trên database
db.update(".....")
}
}