Bài giảng Kỹ thuật lập trình hướng đối tượng - Chương 4: Kế thừa lớp đối tượng cung cấp cho người học các kiến thức: Khái niệm về tính kế thừa, thiết kế lớp kế thừa, thiết lập và hủy trong kế thừa. Mời các bạn cùng tham khảo nội dung chi tiết.
Chương Kế thừa lớp đối tượng Nội dung #2 Khái niệm tính kế thừa Thiết kế lớp kế thừa Thiết lập hủy kế thừa Đặt vấn đề #3 Giả sử xây dựng lớp CDate hoàn chỉnh Cần xây dựng ứng dụng tính tiền lãi một ngân hàng thành lập ngày 14/3/1997 Cần xây dựng ứng dụng quản lý sinh viên có tḥc tính ngày tháng năm sinh (sinh viên phải từ 17 tuổi trở lên) Đặt vấn đề #4 Cách 1: Sửa lại lớp CDate cho phù hợp với các yêu cầu lớp CDate ứng dụng Sửa lại hàm kiểm tra Ảnh hưởng đến các chương trình khác có sử dụng lớp CDate dạng tổng quát Đặt vấn đề #5 Cách 2: Xây dựng lớp CDate độc lập với lớp CDate Tốn nhiều công sức Cách 3: Sao chép lớp CDate để tạo lớp CDate và sau đó sửa lại theo yêu cầu chương trình Khó khăn thực thủ công mở rộng, cập nhật, Đặt vấn đề #6 Cần có chế cho phép khai báo lớp CDate là lớp CDate cũ với số các sửa đổi bổ sung Đặt vấn đề #7 Tương tự cho chương trình đánh caro, cờ tướng máy tính Mỗi quân cờ được xem điểm ký tự (CDiemKT) mỗi quân cờ có những đặc điểm khác Do cần sử dụng lớp CDiemKT bổ sung và sửa đổi một số phần tốn công sức để xây dựng lại từ đầu Khái niệm #8 Kế thừa cho phép khai báo lớp B là lớp dẫn xuất từ lớp A Khi đó B sẽ có tất các thuộc tính và đặc điểm A, ngoài B có thể có thêm những thuộc tính những hành động Khái niệm #9 Kế thừa thể khả tái sử dụng lớp được định nghĩa Có thể định nghĩa lớp đối tượng dựa hay nhiều lớp đới tượng có sẵn Lớp có sẵn được gọi lớp sở (based class) lớp kế thừa được gọi lớp dẫn xuất (derived class) Khái niệm #10 C A - - *- - - **- - * - - * B * * * * * +*+++*+* +*+++*+ * tính chất chung - tính chất A + tính chất B A B - 10 +++++++ +++ Ví dụ – Dùng từ khoá new #20 class CBIENCHE : CNHANVIEN { private float hesoluong; public new void Nhap() { base.Nhap(); Console.Write("Nhap he so luong: "); hesoluong = float.Parse(Console.ReadLine()); } public new void Xuat() { base.Xuat(); Console.WriteLine("He so luong: " + hesoluong); } } 20 Ví dụ – Dùng từ khoá new #21 class CHOPDONG : CNHANVIEN { private float sogio; public new void Nhap() { base.Nhap(); Console.Write("Nhap so gio lam viec: "); sogio = float.Parse(Console.ReadLine()); } public new void Xuat() { base.Xuat(); Console.WriteLine("So gio lam viec: " + sogio); } } 21 Ví dụ – Dùng virtual & override #22 class CNHANVIEN { protected int maso; protected string hoten; public virtual void Nhap() { Console.Write("Nhap ma so nhan vien: "); maso = int.Parse(Console.ReadLine()); Console.Write("Nhap ho ten nhan vien: "); hoten = Console.ReadLine(); } public virtual void Xuat() { Console.WriteLine("Ma so: {0}\nHo ten: {1}", maso, hoten); } } 22 Ví dụ – Dùng virtual & override #23 class CBIENCHE : CNHANVIEN { private float hesoluong; public override void Nhap() { base.Nhap(); Console.Write("Nhap he so luong: "); hesoluong = float.Parse(Console.ReadLine()); } public override void Xuat() { base.Xuat(); Console.WriteLine("He so luong: " + hesoluong); } } 23 Ví dụ – Dùng virtual & override #24 class CHOPDONG : CNHANVIEN { private float sogio; public override void Nhap() { base.Nhap(); Console.Write("Nhap so gio lam viec: "); sogio = float.Parse(Console.ReadLine()); } public override void Xuat() { base.Xuat(); Console.WriteLine("So gio lam viec: " + sogio); } } 24 Ví dụ - Sử dụng phương thức Main() #25 static void Main(string[] args) { CBIENCHE nvbc = new CBIENCHE(); nvbc.Nhap(); CHOPDONG nvhd = new CHOPDONG(); nvhd.Nhap(); Console.WriteLine("\nNhan vien bien che: "); nvbc.Xuat(); Console.WriteLine("\nNhan vien hop dong: "); nvhd.Xuat(); } 25 Phạm vi kế thừa #26 Có phạm vi kế thừa: public protected private Lưu ý: Nếu khơng nói rõ phạm vi kế thừa gì, ngầm định đó kế thừa public 26 Phạm vi kế thừa #27 public: thành phần public & protected lớp sở thành phần public & protected lớp dẫn xuất protected: thành phần public & protected lớp sở thành phần protected lớp dẫn xuất private: thành phần public & protected lớp sở thành phần private lớp dẫn xuất 27 Phương thức thiết lập & huỷ kế thừa #28 Khi khởi tạo đối tượng: Phương thức thiết lập lớp cha sẽ được gọi trước Sau đó phương thức thiết lập lớp Khi hủy đối tượng: Phương thức hủy lớp sẽ được gọi trước Sau đó phương thức hủy lớp cha 28 Phương thức thiết lập & huỷ kế thừa #29 A B C Phương thức thiết lập & huỷ kế thừa #30 Trong phương thức thiết lập lớp dẫn xuất, có thể định phương thức thiết lập lớp sở sẽ được gọi thực Nếu không định, phương thức thiết lập mặc định lớp sở sẽ được gọi 30 Phương thức thiết lập & huỷ kế thừa #31 class A { public A(){} public A(int){} } class B : public A { public B(int) //Thực A() {} } 31 Phương thức thiết lập & huỷ kế thừa #32 class A { public A(){} public A(int){} } class B : public A { public B(int) : base(int) //Thực A(int) {} } 32 Bài tập #33 Thiết kế chương trình quản lý đối tượng sau Viện khoa học: nhà khoa học, nhà quản lý NV phòng thí nghiệm Các thành phần liệu đối tượng trên: - Nhà khoa học: họ tên, năm sinh, cấp, chức vụ, số báo công bố, số ngày công tháng, bậc lương - Nhà quản lý họ tên, năm sinh, cấp, chức vụ, số ngày công tháng, bậc lương - NV phòng thí nghiệm: họ tên, năm sinh, cấp, lương tháng Thực yêu cầu sau: - Các phương thức thiết lập để nhập liệu, biết nhân viên phòng thí nghiệm lãnh lương khoán, lương nhà khoa học nhà quản lý số ngày công tháng * bậc lương - Xuất liệu hình - In tổng lương chi trả cho loại đối tượng FAQs #34 34 ... xuất (derived class) Khái niệm #10 C A - - *- - - * *- - * - - * B * * * * * +*+++*+* +*+++*+ * tính chất chung - tính chất A + tính chất B A B - 10 +++++++ +++ Ký hiệu #11 A A: Là... lớp cha 28 Phương thức thi? ??t lập & huỷ kế thừa #29 A B C Phương thức thi? ??t lập & huỷ kế thừa #30 Trong phương thức thi? ??t lập lớp dẫn xuất, có thể định phương thức thi? ??t lập lớp sở sẽ được... thức thi? ??t lập & huỷ kế thừa #32 class A { public A(){} public A(int){} } class B : public A { public B(int) : base(int) //Thực A(int) {} } 32 Bài tập #33 Thi? ??t kế chương trình quản lý đối tượng