43
Click to edit Master subtitle style ĐA HÌNH Khoa Công nghệ thông tin Trường Đại học Ngoại ngữ - Tin học, TP.HCM CHƯƠNG 6: 1

NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Click to edit Master subtitle style

ĐA HÌNH

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

CHƯƠNG 6:

1

Page 2: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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

NỘI DUNG

2

Page 3: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Đó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 nguyên tắc lập trình hướng đối tượng

3

Page 4: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

KHÁI NIỆM ĐA HÌNH

4

Page 5: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Đa hình (polymorphism) poly = many morphism = forms

Khái niệm Đa hình

5

Đ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

Page 6: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Khái niệm Đa hình

LandRover object

Ford object

Honda object

Move

LandRover dùng 2.0 L engine để move Ford dùng V engine để move Honda dùng i-vtec để move

6

• Đa hình phương thức: 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

Page 7: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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)

Khái niệm Đa hình

7

Page 8: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Đ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

Khái niệm Đa hình

8

Page 9: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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

Khái niệm Đa hình

9

Page 10: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

CÁC BƯỚC XÂY DỰNG TÍNH ĐA HÌNH

10

Page 11: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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

11

Page 12: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Lớp cơ sở: Lớp Car

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

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

12

Page 13: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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

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

13

Page 14: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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ở

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

14

Page 15: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Để 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

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

15

Page 16: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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ó”

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

16

Page 17: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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?

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

17

Page 18: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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

18

Page 19: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Lớp LandRover, Ford, Honda thừa kế từ lớp Car nên có thể dùng như lớp Car

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

Car car1 = new Car(); Car car2 = new LandRover(); Car car3 = new Ford(); Car car4 = new Honda();

19

Page 20: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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 Gọi cùng phương thức (cùng signature) các phương thức khác nhau được chạy

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

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

20

Page 21: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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ở

Xem lại từ khóa ‘base’

21

Page 22: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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

Xem lại từ khóa ‘base’

public override void Move() { base.Move(); Console.WriteLine("Move: LandRover (2.0 L engine)"); }

22

Page 23: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

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)

this và base

23

Page 24: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

PHƯƠNG THỨC TRỪU TƯỢNG (ABSTRACT METHOD)

24

Page 25: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Loại bỏ những thông tin cụ thể, giữ lại các thông tin chung Mức độ trừu tượng hoá được thể hiện trên cây kế thừa

Trừu tượng là gì?

25

Page 26: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Mức độ trừu tượng càng cao thông tin chung và phương thức chung càng tổng quát Có thể tồn tại những phương thức không thể xác định thực hiện như thế nào Ví dụ: Lớp Hình chữ nhật, Hình tam giác, Hình tròn có thể trừu tượng thành Lớp Hình học nói chung Muốn tính diện tích cho một Hình học?

Vấn đề trừu tượng

26

Page 27: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Khi một phương thức trong lớp cơ sở không làm gì cả, viết hàm này như thế nào?

Cung cấp cài đặt giả cho phương thức (dummy implementation) Không cài đặt phương thức (dùng từ khóa abstract)

• Thêm từ khóa abstract trước lớp • Thêm từ khóa abstract trước phương thức không cài đặt

Abstract method

abstract public class Car { public abstract void Move(); }

27

Page 28: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Lớp có chứa phương thức abstract thì bắt buộc phải khai báo lớp đó là lớp abstract

Khi lớp là abstract, thì không thể tạo đối tượng từ lớp đó (chúng ta cần tạo đối tượng của các lớp dẫn xuất không trừu tượng)

Abstract method

Car car1 = new Car(); // error Car car2 = new LandRover(); Car car3 = new Ford(); Car car4 = new Honda();

28

Page 29: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Lớp trừu tượng có thể có các virtual method, method thông thường khác Trong lớp dẫn xuất, để cài đặt abstract method, chúng ta vẫn dùng từ khóa ‘override’ override:

override cho virtual method override cho abstract method

Abstract method

29

Page 30: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Lớp HinhTron (hình tròn) gồm các thông tin: Bán kính

Lớp HinhChuNhat(hình chữ nhật) gồm các thông tin:

Chiều ngang Chiều đứng

Hãy sử dụng kỹ thuật kế thừa và đa hình để viết chương trình cho phép nhập thông tin của đối tượng hình tròn và hình chữ nhật. Sau đó tính và in thông tin diện tích của mỗi hình

Bài tập ví dụ

30

Page 31: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Xác định lớp và thông tin của lớp Lớp HinhTron

Thuộc tính: r (bán kính), s (diện tích) Phương thức: Nhap (nhập thông tin), TinhDienTich (tính diện tích)

Lớp HinhChuNhat Thuộc tính: m (chiều ngang), n (chieu dung), s (diện tích) Phương thức: Nhap (nhập thông tin), TinhDienTich (tính diện tích)

Bài tập ví dụ …

31

Page 32: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Áp dụng kỹ thuật kế thừa Xác định các điểm chung của các lớp

Lớp HinhTron Thuộc tính: r (bán kính), s (diện tích) Phương thức: Nhap (nhập thông tin), TinhDienTich (tính diện tích)

Lớp HinhChuNhat Thuộc tính: m (chiều ngang), n (chieu dung), s (diện tích) Phương thức: Nhap (nhập thông tin), TinhDienTich (tính diện tích)

Bài tập ví dụ …

32

Page 33: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Tạo lớp mới từ những điểm chung này Lớp HinhHoc

Thuộc tính: s (diện tích) Phương thức: Nhap (nhập thông tin), TinhDienTich (tính diện tích)

Trong đó: các phương thức không làm gì cả abstract method abstract class HinhHoc

Bài tập ví dụ …

33

Page 34: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Sơ đồ lớp

Bài tập ví dụ …

34

Page 35: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Lớp HinhHoc

35

public abstract class HinhHoc { protected double s; //Định nghĩa các constructor //và property get, set tại đây ... public abstract void Nhap(); public abstract void TinhDienTich(); }

Page 36: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Lớp HinhTron

36

public class HinhTron: HinhHoc { private double r; //Định nghĩa các constructor //và property get, set tại đây ... public override void Nhap() { //Định nghĩa phương thức ... } public override void TinhDienTich() { //Định nghĩa phương thức ... } }

Page 37: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Lớp HinhChuNhat

37

public class HinhChuNhat:HinhHoc { private double m; private double n; //Định nghĩa constructor //và property get, set tại đây ... public override void Nhap() { //Định nghĩa phương thức ... } public override void TinhDienTich() { //Định nghĩa phương thức ... } }

Page 38: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Thiết kế chương trình quản lý danh sách các hình học, gồm các loại hình sau:

Hình chữ nhật: chiều ngang và chiều đứng Hình tròn: bán kính Hình tam giác: chiều dài 3 cạnh a, b và c

Chức năng: cho phép nhập, xuất danh sách các hình trong một mảng một chiều. Cho biết số lượng và hình có diện tích lớn nhất của từng loại

Bài tập

38

Page 39: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

TỪ KHÓA NEW VỚI PHƯƠNG THỨC

39

Page 40: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Chúng ta có thể đặt từ khóa ‘new’ trước phương thức Ý nghĩa: “Tôi là phương thức mới trong lớp dẫn xuất, hoàn toàn không có liên quan gì đến phương thức cùng tên trong lớp cơ sở”

Từ khóa ‘new’ với phương thức

public class LandRover : Car { public new void Move() { Console.WriteLine(“Move: LandRover (2.0 L engine)"); } }

40

Page 41: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Chú ý: Khi dùng ‘new’ với phương thức thì không thực hiện được tính đa hình Chúng ta hiếm khi dùng từ khóa ‘new’ trong trường hợp này Nếu muốn cài đặt một phương thức hoàn toàn mới không liên quan thì nên dùng tên khác

Từ khóa ‘new’ với phương thức

41

Page 42: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Đa hình nghĩa là chúng ta có thể tạo các lớp dẫn xuất cài đặt cùng một phương thức như trong lớp cơ sở nhưng theo những cách khác nhau Phương thức trong lớp cơ sở được đánh dấu virtual cho phép lớp dẫn xuất dùng từ khóa override để cung cấp một cài đặt khác Các bước xây dựng tính đa hình

ĐIỂM CHÍNH

42

Page 43: NGÔN NGỮ THỐNG KÊ Rfit.huflit.edu.vn/wp-content/uploads/2017/08/Chuong-06...Hình tam giác: chiều dài 3 cạnh a, b và c Chức năng: cho phép nhập, xuất danh sách

Lớp được đánh dấu abstract Không thể dùng để tạo đối tượng Phương thức đánh dấu abstract

• Không có cài đặt • Lớp dẫn xuất phải cài đặt

Từ khóa ‘new’ đứng trước phương thức để báo

Đây là phương thức mới Phương thức này không liên quan đến phương thức cùng tên trong lớp cơ sở

ĐIỂM CHÍNH

43