Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 09: Đa kế thừa - Phạm Tú San
Tuần 09:
Đa kế thừa
ĐA KẾ THỪA
Đa kế thừa
Đa kế thừa : Một lớp có thể kế thừa từ nhiều
lớp khác. Khi đó
Ví dụ:
B C
class A: public B, public C
{
...
};
A
Đa kế thừa
Các thành phần dữ liệu và phương thức của B
và C sẽ được kế thừa trong lớp dẫn xuất A
tương tự như kế thừa đơn
Tính chất đa xạ (thông qua phương thức ảo)
vẫn hoạt động tương tự như trong kế thừa đơn.
Ví dụ
class B {
void draw();
void doSth(A& a)
{
};
class C {
// B::draw()
a.draw();
// C::cal()
a.cal();
void cal();
};
class A: public B,
public C
// A::process()
a.process();
}
{
void process();
};
Đa kế thừa: nhập nhằng hàm trùng tên
Nếu trong lớp B và C có các biến hay phương thức
trùng tên nhau, thì tại lớp A để xác định là
biến/phương thức đó từ B hay từ C, chúng ta phải sử
dụng toán tử phạm vi ::
int main()
{
A a;
a.tinh(); //error: ambiguous
a.B::tinh(); // OK
a.C::tinh(); // OK
}
Vấn đề hình thoi
class A {...};
class B: public A
{...};
class C: public A
{...};
class D: public B,
public C
{...};
Theo như khai báo ở trên, các biến/phương
thức trong A sẽ được kế thừa lặp lại trong D
Vấn đề hình thoi – giải pháp
Giải pháp: sử dụng lớp cơ sở ảo (virtual base
class)
class A {...};
class B: public virtual A
{...};
class C: public virtual A
{...};
class D: public B, public C
{...};
Khi đó trong lớp D chỉ có duy nhất 1 A
Đa kế thừa - interface
Không được hỗ trợ trong C# và java
Thay vào đó là khái niệm interface
Interface 1
Interface 2
A
Khái niệm Interface
Interface là một phần của lớp
Lớp = Interface + cài đặt
Interface quy định tính năng cung cấp ra bên
ngoài
Tivi: interface là hệ thống nút bấm
Interface - Java
interface Bicycle
{
// wheel revolutions per minute
void changeGear(int newValue);
void speedUp(int increment);
void applyBrakes(int decrement);
}
class ACMEBicycle implements Bicycle
{
// remainder of this class
// implemented as before
}
Bicycle b = new ACMEBicycle();
Interface – C++
C++ giả lập interface bằng abstract class
abstract class
Tất cả các phương thức đều thuần ảo
Dynamic binding - Interface
class A: public Interface1, public Interface2
{public:
void ham1(){}
void ham2(){}
};
class Interface1
{public:
class Interface2
{public:
virtual void ham1() = 0;
virtual void ham2() = 0;
};
};
void main()
{
Interface1 *i1 = new A();
i1->ham1();
Interface2 *i2 = new A();
i2 -> ham2();
}
Interface
Public class A: Interface1, Interface2
{public void ham1(){}
public void ham2(){}
};
public Interface1
public Interface2
{public void ham1() = 0;
};
{public void ham2() = 0;
};
Tài liệu tham khảo
Slide PPLTHĐT của
Thầy Đinh Bá Tiến
Thầy Nguyễn Minh Huy
Tuần 09:
Xử lý lỗi và ngoại lệ
Các loại lỗi
Các loại lỗi
Lỗi biên dịch
Lỗi thực thi
Lỗi ngữ nghĩa
Xét lớp PhanSo – các lỗi thực thi có thể xảy ra
PhanSo( int tu, int mau);
void NghichDao();
void Nhap();
PhanSo ChiaPhanSo(const PhanSo &p);
Traditional Error Handling
Xử lý lỗi truyền thống
Xử lý lỗi cho từng hàm
Dùng kết quả để báo lỗi
Chỉ trả về 1 loại lỗi
Ảnh hưởng tới kết quả
Dùng tham số để báo lỗi
Tăng số lượng tham số
Dùng biến toàn cục
Có thể quên check
Exception Handling
Xử lý lỗi qua kênh dành riêng
Kênh Exception
Tách rời phần xử lý lỗi
Rõ ràng, trong sáng
Dễ quản lý, bảo trì
Có khả năng thông báo lỗi ra bên
ngoài cho các hàm ở cấp cao hơn
Xây dựng sẵn trong ngôn ngữ
Exception Handling - Cách sử dụng
Từ khóa “throw”
Đưa lỗi vào kênh Exception
Từ khóa “try”
Dò lỗi trong kênh Exception
Từ khóa “catch”
Bắt lỗi từ kênh Exception
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Phương pháp lập trình hướng đối tượng - Tuần 09: Đa kế thừa - Phạm Tú San", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
bai_giang_phuong_phap_lap_trinh_huong_doi_tuong_tuan_09_da_k.pdf

