1. Trang chủ
  2. » Công Nghệ Thông Tin

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

34 168 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 368,18 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Vi dụ 1Xây dựng lớp ngày trong ứng dụng tính tiền lãi của một ngân hàng thành lập ngày 14/3/1997 Giả sử đã xây dựng lớp CNGAY • Cách 1: Sửa lại lớp CNGAY cho phù hợp với các yêu cầu của

Trang 1

Kế Thừa Lớp Đối Tượng

Môn Lập Trình Hướng Đối Tượng – Chương 6

Nguyễn Minh Thành

[M] : Thanhnm@itc.edu.vn

Trang 3

1 Tổng quát hoá & chuyên biệt hoá

• Các lớp đối tượng trong thực tế không tồn tại độc

lập mà có mối quan hệ với nhau.

• Tổng quát hoá và chuyên biệt hoá là mối hai quan

hệ đặc biệt, là mối quan hệ phân cấp và hỗ trợ lẫn nhau.

▫ Ví dụ : Động vật là một lớp đối tượng Loài mèo là một lớp đối tượng khác và cũng là động vật.

  Loài Mèo, khỉ… là chuyên biệt hoá của động vật

  Động vật là tổng quát hoá của mèo, khỉ…

Trang 4

Ký hiệu

• A: Là trường hợp tổng quát của B

• B: Là trường hợp chuyên biệt của A

A

B

A

 A: Là trường hợp tổng quát của B và C

 B, C: Là trường hợp đặc biệt của A

Trang 5

1 Tổng quát hoá & chuyên biệt hoá

• Trong lập trình HĐT, cần thể hiện được 2 mối quan

Trang 6

Vi dụ 1

Xây dựng lớp ngày trong ứng dụng tính tiền lãi của một ngân

hàng thành lập ngày 14/3/1997

Giả sử đã xây dựng lớp CNGAY

• Cách 1: Sửa lại lớp CNGAY cho phù hợp với các yêu cầu của lớp CNGAYNH trong ứng dụng trên  Sửa lại hàm kiểm tra

 Ảnh hưởng đến các chương trình khác có sử dụng lớp CNGAY

 Khó khăn do thực hiện thủ công khi mở rộng, cập nhật,

 Cần có cơ chế cho phép khai báo lớp CNGAYNH là lớp CNGAY với 1 số các sửa đổi bổ sung.

Trang 7

Ví dụ 1 (tt)

CNGAY

CNGAYNH

Trang 8

Ví dụ 2

Chương trình đánh cờ tướng trên máy tính

Tương tự, mỗi quân cờ được xem như 1 điểm (phải dựa vào lớp DIEM) nhưng mỗi quân cờ có những đặc điểm khác nhau

do vậy trên nền tảng lớp DIEM ta cần bổ sung và sửa đổi một số phần chứ không phải tốn công sức để xây dựng lại từ đầu.

CDIEM

CQUANCO

Trang 9

Ví dụ 3

Ví dụ 3: Chương trình quản lý giáo vụ trường phổ thông (Giáo

viên, học sinh, phụ huynh, công nhân viên, )

CNGUOI

Trang 10

2 Khái niệm

 Kế thừa là 1 cơ chế trong ngôn ngữ lập trình hướng

đối tượng cho phép thể hiện quan hệ đặc biệt hoá

trong sơ đồ lớp bằng cách cho phép khai báo 1 lớp B

là 1 lớp dẫn xuất từ lớp A (B là trường hợp đặc biệt

của A) khi đó B sẽ có tất cả các thuộc tính và đặc

điểm của A ngoài ra B có thể có thêm những thuộc

tính mới, những hàm kiểm tra ràng buộc mới, những

hoạt động khởi tạo, cập nhật, cung cấp thông tin và

xử lý mới

Trang 11

Khái niệm(tt)

 Một trong những tính chất quan trọng mong muốn

trong phương pháp lập trình hướng đối tượng là khả

năng tái sử dụng các lớp đã được định nghĩa.

 Do đó, với kế thừa, người lập trình có thể định nghĩa

lớp đối tượng mới dựa trên 1 hay nhiều lớp đối tượng

đã có sẵn.

 Lớp có sẵn được gọi là lớp cơ sở (based class) và lớp

kế thừa được gọi là lớp dẫn xuất (derived class)

Trang 12

Khái niệm (tt)

A B

* tính chất chung

- tính chất của A + tính chất của B

- - - -

*-*- - * - - *

+ * + + + * + * + * + + + * +

* * * *

*

Trang 14

Quá Tải Hàm trong kế thừa

Có 2 cách để định nghĩa hành động bổ sung cho phương thức đã có sẵn ở lớp cha trong lớp dẫn xuất (phương thức lớp dẫn xuất trùng tên với phương thức lớp cha)

Dùng từ khóa new

class COSO

{

protected kiểu data1;

protected kiểu data2;

public void Method1() {}

public void Method2() {}

}

class DANXUAT : COSO {

private kiểu data3;

public new void Method1()

{}

public void Method4() {}

}

Trang 15

Quá Tải Hàm trong kế thừa (tt)

Dùng virtual & override

class COSO

{

protected kiểu data1;

protected kiểu data2;

public virtual void Method1()

private kiểu data3;

public override void Method1()

{}

public void Method4(){}

}

Trang 16

Ví dụ

• Viết chương trình nhập xuất nhân viên, biết rằng gồm 2 loại nhân viên: Nhân viên biên chế và nhân viên hợp đồng Thông tin của nhân viên gồm: Mã số, Họ tên.

▫ Nhân viên biên chế có thông tin riêng là bậc lương.

▫ Nhân viên hợp đồng có thông tin riêng là số giờ làm.

Ta có cây kế thừa sau:

CNHANVIEN

CHOPDONG CBIENCHE

Trang 17

Ví dụ (tt) – Dùng từ khoá new

class CNHANVIEN

{

protected int maso;

protected string hoten;

Trang 18

Ví dụ (tt) – Dùng từ khoá new

class CBIENCHE : CNHANVIEN

{

private float hesoluong;

public CBIENCHE(): base()

Trang 19

Ví dụ (tt) – Dùng từ khoá new

class CHOPDONG : CNHANVIEN

{

private float sogio;

public CHOPDONG() : base()

Trang 20

Ví dụ (tt) – Dùng virtual & override

public virtual void Xuat()

{ Console.WriteLine("Ma so: {0}\nHo ten: {1}", maso, hoten);

}

}

Trang 21

Ví dụ (tt) – Dùng virtual & override

class CBIENCHE : CNHANVIEN

{

private float hesoluong;

public CBIENCHE(): base()

Trang 22

Ví dụ (tt) – Dùng virtual & override

class CHOPDONG : CNHANVIEN

{

private float sogio;

public CHOPDONG() : base()

Trang 25

Các loại kế thừa (tt)

• public : các thành phần public và protected của lớp cơ sở là các thành phần public và protected của lớp dẫn xuất

• protected : Các thành phần public và protected của lớp cơ

sở là các thành phần protected của lớp dẫn xuất

• private : Các thành phần public và protected của lớp cơ sở

là các thành phần private của lớp dẫn xuất

Trang 26

Ví dụ :

………

………

………

………

………

………

………

………

………

………

………

………

………

………

………

Trang 27

Hàm dựng & hàm huỷ trong kế thừa

• Trong thừa kế, khi khởi tạo đối tượng:

Hàm xây dựng của lớp cha sẽ được gọi trước

Sau đó mới là hàm xây dựng của lớp con.

• Trong thừa kế, khi hủy bỏ đối tượng:

Hàm hủy của lớp con sẽ được gọi trước

Sau đó mới là hàm hủy của lớp cha.

A

B

C

Trang 28

Hàm dựng & hàm huỷ trong kế thừa

• Khi một đối tượng thuộc lớp dẫn xuất được tạo lập:

▫ Hàm dựng của lớp cơ sở sẽ tự động được gọi thực hiện trước

▫ Sau đó, hàm dựng của lớp dẫn xuất sẽ được thực hiện.

▫ Trong hàm dựng của lớp dẫn xuất, chúng ta có thể chỉ định hàm dựng nào của lớp cơ sở sẽ được gọi thực hiện Nếu không, hàm dựng mặc định của lớp

cơ sở sẽ được gọi.

Trang 29

Hàm dựng & huỷ trong kế thừa (tt)

Trang 30

Hàm dựng & huỷ trong kế thừa (tt)

Ngôn ngữ C# cung cấp cơ chế thu dọn rác tự động

(garbage collection) và do vậy không cần phải khai báo tường minh các phương thức hủy

• Tuy nhiên, khi làm việc với các đoạn mã không được quản lý thì cần phải khai báo tường minh các phương thức hủy để giải phóng các tài nguyên C# cung cấp ngầm định một phương thức để thực hiện điều khiển

công việc này, phương thức đó là Finalize() hay còn

gọi là bộ kết thúc

Phương thức Finalize() này sẽ được gọi một cách tự

động bởi cơ chế thu dọn khi đối tượng bị hủy.

Trang 31

Hàm dựng & huỷ trong kế thừa (tt)

Phương thức Finalize() chỉ giải phóng các tài nguyên

mà đối tượng nắm giữ, và không tham chiếu đến các đối tượng khác

• Nếu với những đoạn mã bình thường tức là chứa các tham chiếu kiểm soát được thì không cần thiết phải

tạo và thực thi phương thức Finalize() Ta chỉ làm

điều này khi xử lý các tài nguyên không kiểmsoát

được.

Ta không bao giờ gọi một phương thức Finalize()

của một đối tượng một cách trực tiếp, ngoại trừ gọi phương thức này của lớp cơ sở khi ở bên trong

phương thức Finalize() của lớp đang định nghĩa

Trình thu dọn sẽ tự động thực hiện việc gọi

Finalize() cho chúng ta.

Trang 32

Hàm dựng & huỷ trong kế thừa (tt)

Quá tải phương thức Finalize()

public override void Finalize()

{

// Thực hiện công việc dọn dẹp

base.Finalize();

}

Trang 33

FAQs

Trang 34

Hết chương 6

Môn Lập Trình Hướng Đối Tượng

Ngày đăng: 04/12/2015, 14:38

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm