• 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.
15 trang |
Chia sẻ: lylyngoc | Lượt xem: 1641 | Lượt tải: 1
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