Tải bản đầy đủ (.pptx) (45 trang)

Bài giảng Lập trình hướng đối tượng Chương 6 Trường Đại học Ngoại ngữ Tin học

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 (356.65 KB, 45 trang )

Click to edit
Master subtitle
CHƯƠNG
6: style

ĐA HÌNH
Khoa Cơng nghệ thơng tin
Trường Đại học Ngoại ngữ - Tin học, TP.HCM

1


NỘI DUNG
Khái niệm Đa hình
Các bước xây dựng chương trình có tính đa hình
Từ khóa ‘base’
Phương thức trừu tượng (abstract method)
Từ khóa ‘new’ với phương thức
2


3 ngun tắc lập trình hướng đối tượng

Đóng gói (Encapsulation) và Giao diện (Interface)
Ẩn chi tiết của lớp (Đóng gói), chỉ cung cấp các phương thức
cần thiết để dùng (Giao diện)

Thừa kế (Inheritance)
Tạo lớp mới thừa kế lớp đã có

Đa hình (Polymorphism)


Khả năng tạo ra các lớp dẫn xuất, cài đặt cùng một method của
lớp cơ sở theo những cách khác nhau (tùy từng lớp dẫn xuất)

3


Khái niệm đa hình


Khái niệm Đa hình
Đa hình (polymorphism)
poly = many
morphism = forms

Đa hình là hiện tượng các đối tượng thuộc các lớp
khác nhau có khả năng hiểu cùng một thơng điệp
theo các cách khác nhau hoặc nhiều kiểu tồn tại
của một đối tượng
5


Khái niệm Đa hình
LandRover dùng 2.0 L
engine để move

LandRover
object

Ford dùng V engine để move


Ford
object

Honda dùng i-vtec để move

Honda
object

Move

6


Khái niệm Đa hình
• Đa hình phương thức: Cùng một phương thức có
thể được thực hiện khác nhau trên các loại đối
tượng khác nhau

 Cùng nguyên mẫu phương thức cho các lớp
khác nhau: overriding phương thức
• Đa hình đối tượng: nhìn nhận đối tượng theo nhiều
kiểu khác nhau
7


Khái niệm Đa hình
Phân biệt Overloading vs Overriding?
Overloading (nạp chồng) phương thức: giữ tên
và giá trị trả về, chỉ thay đổi đối số
Overriding (ghi đè) phương thức: giữ nguyên

tên, giá trị trả về và đối số (không thay đổi
nguyên mẫu phương thức)
8


Khái niệm Đa hình
Đa hình phương thức
Các lớp dẫn xuất cài đặt cùng một phương thức
của lớp cơ sở, nhưng mỗi lớp dẫn xuất có cách cài
đặt khác nhau

9


Khái niệm Đa hình
Nhờ đặc tính của thừa kế giúp:
Tạo lớp mới dựa trên lớp đã có (lớp cơ sở), thừa
hưởng những gì lớp cơ sở có
Thêm một số Field và Method mới vào lớp mới
Cài đặt lại phương thức đã được lớp cơ sở cung cấp

10


Các bước xây dựng
tính đa hình


Các bước xây dựng tính đa hình


12


Các bước xây dựng tính đa hình
Lớp cơ sở: Lớp Car

public class Car
{
public virtual void Move()
{
Console.WriteLine("Car: Move");
}
}
13


Các bước xây dựng tính đa hình
Từ khóa ‘virtual’
Cho phép lớp dẫn xuất có quyền thay đổi cách
phương thức này làm việc (cài đặt lại)
Từ khóa này có thể dùng cho





Method
Properties
Indexers
events


14


Các bước xây dựng tính đa hình
Lớp dẫn xuất: có thể cung cấp một cách cài
đặt khác của phương thức ở lớp cơ sở

15


Các bước xây dựng tính đa hình
public class LandRover : Car
{
public override void Move()
{
Console.WriteLine(“Move: LandRover (2.0 L engine)");
}
}

Để cài đặt lại phương thức
Tạo một hàm giống như lớp cơ sở (copy)
Thêm từ khóa override trước phương thức

16


Các bước xây dựng tính đa hình
Nếu trong lớp cơ sở khơng có từ khóa virtual
trước phương thức chúng ta muốn override, thì

chúng ta khơng thể override phương thức đó
virtual: “tơi cho phép bạn làm gì khác với
phương thức này”
override: “bạn cho phép tôi, tôi sẽ làm một số
điều khác biệt với nó”
17


Các bước xây dựng tính đa hình
Chú ý:
Chúng ta khơng phải bắt buộc phải override các
phương thức lớp cơ sở
Nếu khơng override thì sao?

18


Các bước xây dựng tính đa hình
public class Ford : Car
{
public override void Move()
{
Console.WriteLine(“Move: Ford (V engine)");
}
}
public class Honda : Car
{
public override void Move()
{
Console.WriteLine(“Move: Honda (i-vtec)");

}
}
19


Các bước xây dựng tính đa hình
Lớp LandRover, Ford, Honda thừa kế từ lớp Car
nên có thể dùng như lớp Car
Car car1 = new Car();
Car car2 = new LandRover();
Car car3 = new Ford();
Car car4 = new Honda();

20


Các bước xây dựng tính đa hình
Chúng ta có thể gọi phương thức Move(). Tùy
theo kiểu thực sự mà các cài đặt khác nhau sẽ
được gọi
car1.Move();
car2.Move();
car3.Move();
car4.Move();

Move: Car
Move: LandRover (2.0 L engine)
Move: Ford (V engine)
Move: Honda (i-vtec)
Press any key to continue . . .


Gọi cùng phương thức (cùng signature) các
phương thức khác nhau được chạy
21


Xem lại từ khóa ‘base’
Từ khóa ‘base’:
Truy cập các constructor của lớp cơ sở (đã học)
Truy cập các thành viên không private từ lớp cơ sở

Thông thường ta không cần dùng ‘base’ để truy
cập thành viên lớp cơ sở

22


Xem lại từ khóa ‘base’
Khi override phương thức, chúng ta có thể
dùng base để truy cập phiên bản gốc của
method này
public override void Move()
{
base.Move();
Console.WriteLine("Move: LandRover (2.0 L engine)");
}

23



this và base
Từ khóa ‘this’
Gọi constructor khác của lớp hiện tại
Giải quyết name hiding (truy cập field của lớp)

Từ khóa ‘base’
Gọi constructor của lớp cơ sở
Gọi method của lớp cơ sở (khi viết hàm override)

24


Phương thức trừu tượng (abstract
method)


×