Chương 7 Tính đa hình

• Một Vườn bách thú cần quản lý các loại vật nuôi : mèo, chó, chuột, khỉ • Chương trình xây dựng một lớp cơ sở là Động vật. Các lớp còn lại là Mèo,Chó, Khỉ kế thừa từ lớp động vật.

pdf15 trang | Chia sẻ: lylyngoc | Lượt xem: 1577 | Lượt tải: 1download
Bạn đang xem nội dung tài liệu Chương 7 Tính đa hình, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Tính Đa Hình Môn Lập Trình Hướng Đối Tượng – Chương 7 Nguyễn Minh Thành [M] : Thanhnm@itc.edu.vn 1 Nội Dung 1. Tính Đa Hình 2. Lớp Trừu Tượng 2 Đặt vấn đề • Một Vườn bách thú cần quản lý các loại vật nuôi : mèo, chó, chuột, khỉ… • Chương trình xây dựng một lớp cơ sở là Động vật. Các lớp còn lại là Mèo,Chó, Khỉ… kế thừa từ lớp động vật. • Yêu cầu : ▫ Làm sao để lưu danh sách bao gồm nhiều loài vật dùng lúc trên 1 mảng dữ liệu ? ▫ Làm sao gọi phương thức Lấy Tuổi Thọ của đúng lớp cơ sở tương ứng ? 3 Định Nghĩa Tính Đa Hình • Tính đa hình là khả năng để sử dụng chung 1 giao diện cho nhiều nội dung cài đặt khác nhau dựa vào phương thức ảo (virtual) và cơ chế kết nối trễ (late binding). • Nói cách khác, đây là cơ chế cho phép gởi một loại thông điệp tới nhiều đối tượng khác nhau mà mỗi đối tượng lại có cách xử lý riêng theo ngữ cảnh tương ứng của chúng. 4 Định Nghĩa Tính Đa Hình • Tính đa hình là khả năng để sử dụng chung 1 giao diện cho nhiều nội dung cài đặt khác nhau dựa vào phương thức ảo (virtual) và cơ chế kết nối trễ (late binding). • Nói cách khác, đây là cơ chế cho phép gởi một loại thông điệp tới nhiều đối tượng khác nhau mà mỗi đối tượng lại có cách xử lý riêng theo ngữ cảnh tương ứng của chúng. 5 Ví dụ • Nhận xét đoạn code sau 6 static void Main() { AnPham a = new AnPham(); a.LayRa(); TapChi t = new TapChi(); t.LayRa(); a = t; a.LayRa(); } Ví dụ 7 Class Animal { //Định nghĩa Dữ liệu public Animal() { } public virtual void Speak() { Console.Write(‘Animal’); } } Class Cat : Animal { //Định nghĩa Dữ liệu public Cat() { } public override void Speak() { Console.Write(‘Meoooo’); } } Ví dụ 8 Class Dog : Animal { //Định nghĩa Dữ liệu public Dog() { } public virtual void Speak() { Console.Write(‘Gooooo’); } } Class Bear : Animal { //Định nghĩa Dữ liệu public Bear() { } public override void Speak() { Console.Write(‘Gruuuuuud’); } } Ví dụ 9 static void Main() { Animal a = new Cat(); // ????? a.Speak(); //?????? } Ví dụ 10 static void Main() { Animal[] a = new Animal[3]; a[0] = new Cat(); a[1] = new Dog(); a[2] = new Bear(); for(int i=0;i<3;i++) a[i].Speak(); //?????? } Lớp trừu tượng • Lớp trừu tượng là lớp không cần cài đặt bất kì một phương thức nào. • Lớp trừu tượng làm cơ sở cho các lớp kế thừa mà nó không thể có bất kỳ một thể hiện nào tồn tại • Lớp trừu tượng chứa các phương thức trừu tượng. 11 class DANXUAT : COSO { private kiểu data3; public override void Method1() {…} public override void Method2() {…} } abstract class COSO { protected kiểu data1; protected kiểu data2; public abstract void Method1(); public abstract void Method2(); } Lớp trừu tượng (tt) abstract class Window { protected int top, left; public Window(int top, int left) { this.top = top; this.left = left; } abstract public void DrawWindow( ); } class ListBox : Window { private string listBoxContents; public ListBox(int top, int left, string contents) : base(top, left) { listBoxContents = contents; } public override void DrawWindow( ) { Console.WriteLine("Writing string to the listbox: {0}", listBoxContents); } } 12 Lớp trừu tượng (tt) public class Button : Window { public Button( int top, int left): base(top, left) { } public override void DrawWindow( ) { Console.WriteLine("Drawing a button at {0}, {1}\n", top, left); } } public class Tester { static void Main( ) { Window[] winArray = new Window[3]; winArray[0] = new ListBox(1,2,"First List Box"); winArray[1] = new ListBox(3,4,"Second List Box"); winArray[2] = new Button(5,6); for (int i = 0;i < 3; i++) { winArray[i].DrawWindow( ); } } } 13 FAQs 14 Hết chương 7 Môn Lập Trình Hướng Đối Tượng 15
Tài liệu liên quan