Danh mục tài liệu

Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 8: Đa hình động, hàm ảo

Số trang: 21      Loại file: pdf      Dung lượng: 1.05 MB      Lượt xem: 15      Lượt tải: 0    
Xem trước 3 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 8: Đa hình động, hàm ảo. Những nội dung chính được trình bày trong chương này gồm có: Hàm ảo và đa hình động; ứng dụng của đa hình động; lớp trừu tượng, hàm tạo và hàm hủy ảo.
Nội dung trích xuất từ tài liệu:
Bài giảng Lập trình hướng đối tượng (Object-Oriented Programming) - Chương 8: Đa hình động, hàm ảo Chương 8. Đa hình động, Hàm ảo I. Hàm ảo và đa hình động II. Ứng dụng của đa hình động III. Lớp trừu tượng, hàm tạo và hàm hủy ảo Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 1 I. Hàm ảo và sự đa hình 1. Giới thiệu về hàm ảo và sự đa hình 2. Gọi hàm thành viên qua con trỏ lớp cơ sở 3. Sự liên kết động Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 2 I.1. Giới thiệu về hàm ảo và sự đa hình  Dạng đa hình thứ hai trong LTHĐT liên quan tới sự kế thừa, hàm ảo và con trỏ. Ở đây sự đa hình thái thể hiện ở chỗ: Lời gọi tới một hàm thành viên sẽ làm cho các hàm thành viên khác nhau được thực hiện tuỳ thuộc vào kiểu đối tượng gọi hàm đó. Sự đa hình này còn được gọi là sự liên kết động.  Hàm ảo là hàm thành viên của lớp, giống như các hàm thành viên thông thường, chỉ khác là được khai báo với từ khóa virtual đặt trước. virtual void nhap(); Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 3 I.2. Gọi hàm thành viên qua con trỏ lớp cơ sở  Con trỏ lớp cơ sở có thể chứa địa chỉ của đối tượng các lớp dẫn xuất. Bởi vì đối tượng lớp dẫn xuất là một loại đối tượng lớp cơ sở nên các con trỏ trỏ tới đối tượng của một lớp dẫn xuất có kiểu phù hợp với các con trỏ trỏ tới đối tượng của lớp cơ sở.  Khi một lớp cơ sở và các lớp dẫn xuất của nó có các hàm thành viên trùng nhau, nếu các hàm này được gọi qua con trỏ lớp cơ sở thì hàm được thực hiện luôn là hàm thành viên lớp cơ sở. Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 4 I.2. Gọi hàm thành viên qua con trỏ lớp cơ sở  Sở dĩ các hàm thành viên lớp cơ sở luôn được thực hiện vì trình biên dịch bỏ qua nội dung của con trỏ và chọn hàm thành viên phù hợp với kiểu con trỏ là lớp cơ sở. Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 5 I.2. Gọi hàm thành viên qua con trỏ lớp cơ sở  Để gọi được hàm thành viên của lớp dẫn xuất qua con trỏ lớp cơ sở ta cho các hàm thành viên của lớp cơ sở là hàm ảo.  Khi dùng hàm ảo, trình biên dịch lựa chọn hàm để thực hiện dựa trên nội dung của con trỏ, chứ không phải tên kiểu của con trỏ. Đây là sự đa hình thái, vì một lời gọi hàm mà có thể thực hiện các hàm khác nhau, tuỳ thuộc vào nội dung của con trỏ. Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 6 I.3. Sự liên kết động  Nếu trong lớp cơ sở có hàm ảo trùng tên với một hàm thành viên lớp dẫn xuất thì khi gọi hàm thành viên lớp dẫn xuất này qua con trỏ lớp cơ sở trình biên dịch sẽ không biết gọi hàm nào. Bởi vậy trình biên dịch phải sắp xếp để lựa chọn hàm thực hiện tại thời điểm chạy chương trình.  Việc lựa chọn một hàm tại thời điểm chạy chương trình được gọi là sự liên kết động (dynamic binding). Còn việc lựa chọn hàm thực hiện theo cách thông thường, tại thời điểm biên dịch, được gọi là sự liên kết tĩnh (static binding). Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 7 I.3. Sự liên kết động  Sự liên kết động cần nhiều thời gian và bộ nhớ hơn sự liên kết tĩnh: Lời gọi hàm lâu hơn, đối tượng lớp dẫn xuất lớn hơn.  Tóm lại, để cài đặt sự liên kết động cần có kế thừa, hàm ảo, con trỏ và sự trùng hàm thành viên. Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 8 II. Ứng dụng của sự đa hình động 1. Mảng con trỏ lớp cơ sở trỏ tới các đối tượng của các lớp dẫn xuất khác nhau 2. Phân lập các phần chương trình Ví dụ: Tính diện tích các hình: Hình tam giác biết 3 cạnh a,b,c; hình chữ nhật biết 2 cạnh a,b; hình tròn biết bán kính r; hình trụ biết bán kính r và chiều cao h. Nhập vào một số hình. Đưa ra diện tích các hình đã nhập. Yêu cầu cài đặt đa hình động. Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 9 II.1. Mảng con trỏ trỏ tới các đối tượng của các lớp khác nhau  Một ứng dụng của sự đa hình là sử dụng mảng con trỏ lớp cơ sở để chứa địa chỉ của các đối tượng lớp dẫn xuất khác nhau.  Ví dụ: Viết chương trình quản lý giảng viên và sinh viên. Thông tin về giảng viên có tên và số bài báo đã đăng, thông tin về sinh viên có tên và điểm TBC. Nhập vào một số giảng viên và sinh viên. Đưa ra màn hình thông tin về các giảng viên và sinh viên đã nhập, có kèm theo đánh giá: giảng viên giỏi nếu có số bài báo >=20, sinh viên giỏi nếu có điểm TBC>=9.0. Y/c cài đặt đa hình động. Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 10 II.2. Phân lập các phần chương trình  Sự đa hình thái cũng có thể được sử dụng để giúp cho việc phân lập, hay gỡ bỏ sự phụ thuộc của một phần chương trình vào phần chương trình khác.  Các chương trình OOP được chia thành hai phần được viết bởi những người lập trình khác nhau tại các thời điểm khác nhau. Đó là phần tạo lớp và phần sử dụng các lớp. Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 11 II.2. Phân lập các phần chương trình  Việc lập trình sẽ đơn giản hơn nếu chương trình của người sử dụng lớp chỉ phải làm việc với một lớp thay vi nhiều lớp khác nhau. Điều này thực hiện được bằng sự đa hình, đó là dùng các tham chiếu hoặc các con trỏ trỏ tới các đối tượng để truyền và trả về từ một hàm.  Ví dụ 1: Sử dụng đối số là tham chiếu Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 12 II.2. Phân lập các phần chương trình  Ví dụ 2: Sử dụng đối số là con trỏ  Ví dụ 3: Viết lại chương trình quản lý giảng viên và sinh viên trong đó có sử dụng hàm để truyền và trả về các đối tượng khác nhau. Ngô Công Thắng - Bài giảng LTHĐT - Chương 08 13 III. Lớp trừu tượng, hàm tạo và hàm hủy ảo 1 ...