Vấn đề trùng lắp thông tin:
Nhiều lớp có thông tin giống nhau.Có 2 dạng:
Dạng chia sẻ: A ∩ B ≠ Ø.
Dạng mở rộng: B = A + ε.
Nhược điểm:
Xây dựng tốn kém.
Dung lượng lưu trữ lớn.
Thay đổi phần chung khó khăn.
23 trang |
Chia sẻ: lylyngoc | Lượt xem: 1699 | Lượt tải: 2
Bạn đang xem trước 20 trang tài liệu Chương 4 Kế thừa – Đa hình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Kế thừa – Đa hình
Chương 4:
Giảng viên: Ths. Nguyễn Thị Khiêm Hòa
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Nội dung
Thiết kế đối tượng
Kế thừa
Đa hình
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Lợi thế của lập trình hướng đối tượng
Lấy đối tượng làm trung tâm
Không lệ thuộc thứ tự thuật toán
Linh hoạt
Tái sử dụng
Che giấu dữ liệu
1
2
3
4
5
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Tại sao phải kế thừa
Vấn đề trùng lắp thông tin:
Nhiều lớp có thông tin giống nhau.Có 2 dạng:
Dạng chia sẻ: A ∩ B ≠ Ø.
Dạng mở rộng: B = A + ε.
Nhược điểm:
Xây dựng tốn kém.
Dung lượng lưu trữ lớn.
Thay đổi phần chung khó khăn.
A
x, y, z
a, b, c
B
x, y, z
u, v, w
A
x, y, z
B
x, y, z
a, b, c
Tái sử dụng?!
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Khái niệm kế thừa
Định nghĩa lớp mới dựa trên những lớp đã có.
Lớp cơ sở: lớp dùng để định nghĩa lớp mới.
Lớp dẫn xuất: lớp được định nghĩa từ lớp đã có.
Lớp dẫn xuất thừa hưởng TẤT CẢ từ lớp cơ sở.
A
x, y, z
a, b, c
B
x, y, z
u, v, w
B
x, y, z
a, b, c
O
x, y, z
A
x, y, z
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Ví dụ kế thừa
Thông tin:
Họ tên.
Mức lương.
Số ngày nghỉ.
Công việc:
Giảng dạy.
Tính lương.
Thông tin:
Họ tên.
Mức lương.
Số ngày nghỉ.
Lớp chủ nhiệm.
Công việc:
Giảng dạy.
Tính lương.
Sinh hoạt chủ nhiệm.
Giáo viên
GVCN
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Ví dụ kế thừa
class GiaoVien
{ protected string Hotengv;
protected double luonggv;
protected int gvnghi;
public GiaoVien(string HoTen,double Luong, int nn)
{ Hotengv = HoTen;
luonggv = luong;
gvnghi = nn;
}
public void giangDay(){}
public double tinhLuong(){}
}
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Ví dụ kế thừa
class GVCN : GiaoVien
{ private string LopCN;
public GVCN(string HoTen, double luong,int nn,
string lop): base(HoTen, luong, nn)
{
LopCN =lop;
}
public void sinhHoatCN(){}
}
Lớp dẫn xuất Lớp cơ sở
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Mối quan hệ tổng quát hóa và chuyên biệt hóa
Kế thừa là mối quan hệ đặc biệt
Các lớp dẫn xuất kế thừa các thuộc tính và phương
thức của lớp cơ sở và cho phép tái sử dụng các
đoạn code.
Các lớp dẫn xuất là thành phần chuyên biệt hóa
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Gọi Constructor của lớp cơ sở
Từ khóa base được dùng trong lớp dẫn xuất để gọi
constructor của lớp cơ sở
public class Animal
{ protected string _name;
public Animal(string name)
{
_name = name;
}
}
public class Cat : Animal
{
public Cat (string name): base(name)
{}
}
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Bài tập
Xây dựng lớp tài khoản thẻ, kế thừa
lớp tài khoản
Thực hiện
20 min
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Định nghĩa lại phương thức
Kế thừa một phần:
Không kế thừa “máy móc” tất cả.
Lớp dẫn xuất có thể thay đổi những gì đã kế thừa
Định nghĩa lại phương thức đã kế thừa.
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Đa hình
Đa hình
Xây dựng phương thức ảo
Gọi lớp cơ sở từ lớp dẫn xuất
Phương thức trừu tượng (abstract)
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Đa hình
Animal
Elephant
Cat
Mouse
Hành vi
Eat Grass
Eat Mouse
Eat Cheese
Phương
thức
Eat ()
Eat ()
Eat ()
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Xây dựng phương thức ảo
Phương thức ảo (Virtual) là việc định nghĩa lại
(Override) một phương thức của lớp cơ sở trong
lớp dẫn xuất.
Lớp cơ sở
Animal
Virtual Method
Eat ()
Lớp dẫn xuất
Cat
Override Method
Eat ()
Eat Mouse Eat Something
Hành vi Hành vi
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Xây dựng phương thức ảo
public class Animal
{ public virtual string Eat()
{
return string.Empty;
}
}
public class Cat : Animal
{
public override string Eat()
{
return “Mouse”;
}
}
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Sử dụng thành phần của lớp cơ sở
trong lớp dẫn xuất
Dùng từ khóa base
public class Cat : Animal
{
public override string Eat()
{
base.Eat();
return “Mouse”;
}
}
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Lớp và phương thức trừu tượng (Abstract)
Lớp trừu tượng là một lớp cơ sở khái quát
Chứa các phương thức trừu tượng được thực
hiện trong lớp dẫn xuất.
Có thể chứa các thành phần không trừu tượng
(non-abstract)
Phương thức trừu tượng không thực hiện trong
lớp cơ sở
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Lớp và phương thức trừu tượng (Abstract)
public abstract class Animal
{
…
public abstract void Eat();
…
}
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Bài tập
Xây dựng lớp Animal là lớp trừu tượng, và
định nghĩa lại trong các lớp dẫn xuất các
phương thức này.
Thực hiện
1 hour
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Bài tập
Xây dựng các lớp đối tượng liên quan
tài khoản ngân hàng (Bank Account)
1 hour
Thực hiện
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Xây dựng Sealed Class
Sealed class không cho phép kế thừa
public sealed class MyClass
{
// class members
}
Khoa Công nghệ Thông tin – Trường Đại học Ngân hàng TP.HCM
Q & A