Tải bản đầy đủ (.pdf) (15 trang)

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

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (191.23 KB, 15 trang )

1

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] :


2

Nội Dung
1. Tính Đa Hình
2. Lớp Trừu Tượng


3

Đặ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 ?


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

Đị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.


6

Ví dụ
• Nhận xét đoạn code sau
static void Main()
{
AnPham a = new AnPham();
a.LayRa();
TapChi t = new TapChi();
t.LayRa();

a = t;
a.LayRa();
}


7

Ví dụ
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’);
}
}


8


Ví dụ
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’);
}
}


9

Ví dụ
static void Main()
{
Animal a = new Cat(); // ?????
a.Speak(); //??????
}



10

Ví dụ
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(); //??????
}


11

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.
abstract class COSO
{
protected kiểu data1;
protected kiểu data2;
public
abstract
void

Method1();
public
abstract
void
Method2();
}

class DANXUAT : COSO
{
private kiểu data3;
public override void Method1()
{…}
public override void Method2()
{…}
}


12

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 : W indow
{

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);
}
}


13

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( ); }
}
}


14

FAQs


15

Hết chương 7
Môn Lập Trình Hướng Đối Tượng



×