Bài giảng lập trình hướng đối tượng chương 6 nguyễn minh thành

34 163 0
Bài giảng lập trình hướng đối tượng  chương 6   nguyễn minh thành

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

1 Kế Thừa Lớp Đối Tượng Môn Lập Trình Hướng Đối Tượng – Chương Nguyễn Minh Thành [M] : Thanhnm@itc.edu.vn Nội Dung Tổng quát hoá & chuyên biệt hoá Sự kế thừa Quá tải hàm kế thừa Các loại kế thừa Hàm dựng huỷ kế thừa Tổng quát hoá & chuyên biệt hoá • Các lớp đối tượng thực tế không tồn độc lập mà có mối quan hệ với • Tổng quát hoá chuyên biệt hoá mối hai quan hệ đặc biệt, mối quan hệ phân cấp hỗ trợ lẫn ▫ Ví dụ : Động vật lớp đối tượng Loài mèo lớp đối tượng khác động vật   Loài Mèo, khỉ… chuyên biệt hoá động vật   Động vật tổng quát hoá mèo, khỉ… Ký hiệu A • A: Là trường hợp tổng quát B • B: Là trường hợp chuyên biệt A B A B  A: Là trường hợp tổng quát B C  B, C: Là trường hợp đặc biệt A C Tổng quát hoá & chuyên biệt hoá • Trong lập trình HĐT, cần thể mối quan hệ nhằm: ▫ Tái sử dụng lại chương trình ▫ Mở rộng chương trình ▫ Đảm bảo tính uyển chuyển chương trình  Tính kề thừa Vi dụ Xây dựng lớp ngày ứng dụng tính tiền lãi ngân hàng thành lập ngày 14/3/1997 Giả sử xây dựng lớp CNGAY •Cách 1: Sửa lại lớp CNGAY cho phù hợp với yêu cầu lớp CNGAYNH ứng dụng  Sửa lại hàm kiểm tra  Ảnh hưởng đến chương trình khác có sử dụng lớp CNGAY dạng tổng quát •Cách 2: Xây dựng lớp CNGAYNH độc lập với lớp CNGAY  Tốn nhiều công sức •Cách 3: Sao chép lớp CNGAY để tạo lớp CNGAYNH sau sửa lại lớp CNGAYNH theo yêu cầu chương trình  Khó khăn thực thủ công mở rộng, cập nhật,  Cần có chế cho phép khai báo lớp CNGAYNH lớp CNGAY với số sửa đổi bổ sung Ví dụ (tt) CNGAY CNGAYNH Ví dụ Chương trình đánh cờ tướng máy tính Tương tự, quân cờ xem điểm (phải dựa vào lớp DIEM) quân cờ có đặc điểm khác tảng lớp DIEM ta cần bổ sung sửa đổi số phần tốn công sức để xây dựng lại từ đầu CDIEM CQUANCO CXE CCHOT CPHAO CMA CTUONG CSI CVOI Ví dụ Ví dụ 3: Chương trình quản lý giáo vụ trường phổ thông (Giáo viên, học sinh, phụ huynh, công nhân viên, ) CNGUOI CHOCSINH CGIAOVIEN CVANPHONG CPHUHUYNH 10 Khái niệm  Kế thừa chế ngôn ngữ lập trình hướng đối tượng cho phép thể quan hệ đặc biệt hoá sơ đồ lớp cách cho phép khai báo lớp B lớp dẫn xuất từ lớp A (B trường hợp đặc biệt A) B có tất thuộc tính đặc điểm A B có thêm thuộc tính mới, hàm kiểm tra ràng buộc mới, hoạt động khởi tạo, cập nhật, cung cấp thông tin xử lý 20 Ví dụ (tt) – Dùng virtual & override class CNHANVIEN { protected int maso; protected string hoten; public CNHANVIEN() { maso = 0; 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); } } 21 Ví dụ (tt) – Dùng virtual & override class CBIENCHE : CNHANVIEN { private float hesoluong; public CBIENCHE(): base() { hesoluong = 0; } 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); } } 22 Ví dụ (tt) – Dùng virtual & override class CHOPDONG : CNHANVIEN { private float sogio; public CHOPDONG() : base() { sogio = 0; } 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); } } 23 Ví dụ (tt) Hàm main dùng chung cho cách class Program { 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(); } } 24 Các loại kế thừa Có loại kế thừa: • public • protected • private Lưu ý: Nếu không nói rõ loại kế thừa gì, ngầm định kế thừa public 25 Các loại kế thừa (tt) • public: thành phần public protected lớp sở thành phần public protected lớp dẫn xuất • protected: Các thành phần public protected lớp sở thành phần protected lớp dẫn xuất • private: Các thành phần public protected lớp sở thành phần private lớp dẫn xuất 26 Ví dụ : ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… ………………………………………………………………………………………………………… 27 Hàm dựng & hàm huỷ kế thừa • Trong thừa kế, khởi tạo đối tượng: ▫ Hàm xây dựng lớp cha gọi trước ▫ Sau hàm xây dựng lớp • Trong thừa kế, hủy bỏ đối tượng: ▫ Hàm hủy lớp gọi trước ▫ Sau hàm hủy lớp cha A B C 28 Hàm dựng & hàm huỷ kế thừa • Khi đối tượng thuộc lớp dẫn xuất tạo lập: ▫ Hàm dựng lớp sở tự động gọi thực trước ▫ Sau đó, hàm dựng lớp dẫn xuất thực ▫ Trong hàm dựng lớp dẫn xuất, định hàm dựng lớp sở gọi thực Nếu không, hàm dựng mặc định lớp sở gọi 29 Hàm dựng & huỷ kế thừa (tt) class A { public A(); public A(int); }; class B : public A { public B(int) : base(int); }; 30 Hàm dựng & huỷ kế thừa (tt) • Ngôn ngữ C# cung cấp chế thu dọn rác tự động (garbage collection) không cần phải khai báo tường minh phương thức hủy • Tuy nhiên, làm việc với đoạn mã không quản lý cần phải khai báo tường minh phương thức hủy để giải phóng tài nguyên C# cung cấp ngầm định phương thức để thực điều khiển công việc này, phương thức Finalize() hay gọi kết thúc • Phương thức Finalize() gọi cách tự động chế thu dọn đối tượng bị hủy 31 Hàm dựng & huỷ kế thừa (tt) • Phương thức Finalize() giải phóng tài nguyên mà đối tượng nắm giữ, không tham chiếu đến đối tượng khác • Nếu với đoạn mã bình thường tức chứa tham chiếu kiểm soát không cần thiết phải tạo thực thi phương thức Finalize() Ta làm điều xử lý tài nguyên không kiểmsoát • Ta không gọi phương thức Finalize() đối tượng cách trực tiếp, ngoại trừ gọi phương thức lớp sở bên phương thức Finalize() lớp định nghĩa Trình thu dọn tự động thực việc gọi Finalize() cho 32 Hàm dựng & huỷ kế thừa (tt) • Quá tải phương thức Finalize() public override void Finalize() { // Thực công việc dọn dẹp base.Finalize(); } 33 FAQs 34 Hết chương Môn Lập Trình Hướng Đối Tượng [...]...11 Khái niệm(tt)  Một trong những tính chất quan trọng mong muốn trong phương pháp lập trình hướng đối tượng là khả năng tái sử dụng các lớp đã được định nghĩa  Do đó, với kế thừa, người lập trình có thể định nghĩa lớp đối tượng mới dựa trên 1 hay nhiều lớp đối tượng đã có sẵn  Lớp có sẵn được gọi là lớp cơ sở (based class) và lớp kế thừa được gọi là lớp dẫn xuất (derived... sở khi ở bên trong phương thức Finalize() của lớp đang định nghĩa Trình thu dọn sẽ tự động thực hiện việc gọi Finalize() cho chúng ta 32 Hàm dựng & huỷ trong kế thừa (tt) • Quá tải phương thức Finalize() public override void Finalize() { // Thực hiện công việc dọn dẹp base.Finalize(); } 33 FAQs 34 Hết chương 6 Môn Lập Trình Hướng Đối Tượng ... hàm huỷ trong kế thừa • Trong thừa kế, khi khởi tạo đối tượng: ▫ Hàm xây dựng của lớp cha sẽ được gọi trước ▫ Sau đó mới là hàm xây dựng của lớp con • Trong thừa kế, khi hủy bỏ đối tượng: ▫ Hàm hủy của lớp con sẽ được gọi trước ▫ Sau đó mới là hàm hủy của lớp cha A B C 28 Hàm dựng & hàm huỷ trong kế thừa • Khi một đối tượng thuộc lớp dẫn xuất được tạo lập: ▫ Hàm dựng của lớp cơ sở sẽ tự động được gọi... public 25 Các loại kế thừa (tt) • public: các thành phần public và protected của lớp cơ sở là các thành phần public và protected của lớp dẫn xuất • protected: Các thành phần public và protected của lớp cơ sở là các thành phần protected của lớp dẫn xuất • private: Các thành phần public và protected của lớp cơ sở là các thành phần private của lớp dẫn xuất 26 Ví dụ : …………………………………………………………………………………………………………... Finalize() chỉ giải phóng các tài nguyên mà đối tượng nắm giữ, và không tham chiếu đến các đối tượng khác • Nếu với những đoạn mã bình thường tức là chứa các tham chiếu kiểm soát được thì không cần thiết phải tạo và thực thi phương thức Finalize() Ta chỉ làm điều này khi xử lý các tài nguyên không kiểmsoát được • Ta không bao giờ gọi một phương thức Finalize() của một đối tượng một cách trực tiếp, ngoại trừ... báo tường minh các phương thức hủy • Tuy nhiên, khi làm việc với các đoạn mã không được quản lý thì cần phải khai báo tường minh các phương thức hủy để giải phóng các tài nguyên C# cung cấp ngầm định một phương thức để thực hiện điều khiển công việc này, phương thức đó là Finalize() hay còn gọi là bộ kết thúc • Phương thức Finalize() này sẽ được gọi một cách tự động bởi cơ chế thu dọn khi đối tượng bị... protected kiểu data2; public virtual void Method1() {} public virtual void Method2() {} } class DANXUAT : COSO { private kiểu data3; public override void Method1() {} public void Method4() {} } 16 Ví dụ • Viết chương trình nhập xuất nhân viên, biết rằng gồm 2 loại nhân viên: Nhân viên biên chế và nhân viên hợp đồng Thông tin của nhân viên gồm: Mã số, Họ tên ▫ Nhân viên biên chế có thông tin riêng là bậc ... trọng mong muốn phương pháp lập trình hướng đối tượng khả tái sử dụng lớp định nghĩa  Do đó, với kế thừa, người lập trình đị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... quát hoá & chuyên biệt hoá • Trong lập trình HĐT, cần thể mối quan hệ nhằm: ▫ Tái sử dụng lại chương trình ▫ Mở rộng chương trình ▫ Đảm bảo tính uyển chuyển chương trình  Tính kề thừa Vi dụ Xây... cách tự động chế thu dọn đối tượng bị hủy 31 Hàm dựng & huỷ kế thừa (tt) • Phương thức Finalize() giải phóng tài nguyên mà đối tượng nắm giữ, không tham chiếu đến đối tượng khác • Nếu với đoạn

Ngày đăng: 04/12/2015, 14:38

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan