Sự Tương Thích Của Lớp Cơ Sở Và Lớp Dẫn Xuất


GV? Các bạn có nhận xét gì trong các câu lệnh trong đoạn chương trình trên.

Nhận xét: Cấu tử A( int xx ) ; không có tác dụng gì trong chương trình trên.


- Muốn sử dụng cấu tử có tham số của lớp cơ sở ta phải khai báo trong cấu tử của lớp dẫn xuất như sau:

Cấu_tử_dẫn_xuất ( danh sách đối số ) : cấu_tử_cơ_sở ( danh sách đối số )

{ khai báo cho cấu tử dẫn xuất ; }

Ví dụ: Viết lại chương trình trên:

class A

{ protected :

Có thể bạn quan tâm!

Xem toàn bộ 235 trang tài liệu này.

int x ; public :

A( ) { x = 5 ; }

Dạy học kĩ thuật lập trình cho sinh viên ngành Kĩ thuật điện tử - viễn thông theo hướng phát triển tư duy điện toán - 25

A( int xx ) { x = xx ; }

void print( ) { cout << “x= ” << x ; }

} ;

GV? Hãy viết lại đoạn chương trình trên và cho biết kết quả hiện ra trên màn hình sau khi chạy chương trình đó.


class B : public A

{ protected :

int y ; public :

B( ) { y = 7 ; }

B( int yy ) { y = yy ; }

B( int xx , int yy ) : A( xx ) { y = yy ; }

void print( ) { A :: print( ) ;

cout << “y= ” << y ; }

} ;

void main( )

{ B O1 , O2( 10 ) , O3 ( 1, 9 ) ;

O1. print( ) ;

O2. print( ) ;

O3. print( ) ;

}


GV đợi SV viết kết quả đoạn chương trình xong rồi phân tích, kiểm tra kết quả.


Kết quả hiện ra màn hình: x = 5 y = 7

x = 5 y = 10

x = 1 y = 9


2.7 Sự tương thích của lớp cơ sở và lớp dẫn xuất

a. Sự tương thích của các lớp đối tượng:

- Các đối tượng của lớp dẫn xuất có thể gán cho đối tượng của lớp cơ sở.

Chẳng hạn, Cho A là lớp cơ sở, B là lớp dẫn xuất từ lớp A. Ta có thể thực hiện phép gán sau:

A x ; B y ; x = y ;

Trong phép gán trên cần lưu ý:

+ x chỉ sử dụng được những thành phần của lớp cơ sở, không được phép truy xuất những thành phần bổ sung, sửa đổi của lớp dẫn xuất.

+ không thực hiện phép gán đối tượng thuộc lớp cơ sở cho lớp dẫn xuất, tức là y = x ; là sai, không thực hiện được.


b. Sự tương thích của con trỏ đối tượng:

- Con trỏ của lớp cơ sở có thể chứa địa chỉ của đối tượng lớp dẫn xuất.

Chẳng hạn:

A *pa ; B y ; pa = &y ;

pa nhap( ) ; // nhap( ) của lớp cơ sở A

Ví dụ minh họa sự tương thích trên:


class A

{ protected :

int x ; public :

A( ) { x = 5 ; }

A( int xx ) { x = xx ; }

void Print( ) { cout << “x= ” << x ; }

} ;

class B : public A

{ protected :

int y ; public :

B( ) { y = 7 ; }

B( int xx , int yy ) : A( xx ) { y = yy ; }

void Print( ) { A :: print( ) ;

cout << “y= ” << y ; } void Tong( ) { A :: print( ) ;

cout << “Tong = ” << x + y ; }

} ;

void main( )

{ A O1( 1 ) , *PO1 ;

B O2( 2, 3 ) ;

O1 = O2 ; // (1)

O1. Print( ) ; // x = 2, giải thích qua hình minh họa 2.9 ở dưới O1. Tong( ) ; // sai vì O1 không có phương thức Tong( );

phép gán O1 = O2 sẽ không cho phép truy xuất thành phần bổ sung (Tong( )) của lớp dẫn xuất B xem hình minh họa giải thích 2.10 ở dưới

PO1 = &O2 ; // (2)

PO1 Print( ) ; // x = 2

PO1 Tong( ) ;// sai vì không truy xuất vào thành phần Tong( );

}


GV: Phân tích rõ hơn trong hình minh họa sau.


O1 = O2

O1

O2

O1

O2

Hình 2.9. Giải thích sự truy xuất sau khi thực hiện phép gán (1) (O1 = O2;)

trong ví dụ trên minh họa.

PO1

O2

Hình 2.10. Giải thích sự truy xuất sau khi thực hiện phép gán (2) (PO1 = &O2;) trong ví dụ trên minh họa.


x = 1 Print( )


x = 2

y = 3 Print( ) Tong( )


x = 2 Print( )

x = 2 Print( )

y = 3 Tong( )

x = 2

A :: Print( )

y = 3 Print( ) Tong( )

Hoạt động 5: Hướng dẫn học ở nhà

Bài tập 1: Với mục đích tính diện tích các hình vuông, hình chữ nhật, hình tròn, hình thang, hình tam giác.

Hãy tổ chức các lớp sao cho có thể kế thừa thành phần dữ liệu cài đặt:

- Cấu tử

- Nhập, xuất

- Tính diện tích.


Bài tập 2: Thư viện có 3 loại tài liệu: sách, tạp chí, giáo trình. Có các dữ liệu chung: mã tài liệu, vị trí, số lượng, đơn giá. Và có dữ liệu riêng như sau:

- Sách: tác giả, tên sách, năm xuất bản.

- Tạp chí: tên tạp chí, chuyên ngành.

- Giáo trình: tác giả, tên.

Tổ chức các lớp sao cho kế thừa được các dữ liệu chung. Tiến hành cài đặt: - Cấu tử, hủy tử

- Thủ tục nhập, xuất.


PHỤ LỤC 4 – GIÁO ÁN MINH HỌA 2 Bài “BÀI TẬP VỀ SỰ KẾ THỪA ĐƠN”

(3 tiết trên lớp)


A. MỤC TIÊU BÀI HỌC

1. Kiến thức – Kỹ năng:

- Vận dụng kiến thức đã học để viết được chương trình có ứng dụng kế thừa nhằm giải quyết một vài bài toán đơn giản gắn liền với thực tiễn.

- Phát hiện và xử lý được lỗi cú pháp trong quá trình viết chương trình.

2. Phát triển biểu hiện của tư duy điện toán

- Phát triển khả năng phân tích vấn đề, phân tích từng hoạt động cụ thể của các cú pháp thành các hoạt động thành phần để nắm rõ hoạt động của bất kỳ cú pháp nào. Cũng như phát triển khả năng vẽ sơ đồ phân tích hoạt động.

- Phát triển khả năng nhận dạng mẫu để chọn ra phương thức cần khai báo trong từng lớp để sử dụng được sự kế thừa trong lập trình hướng đối tượng.

- Phát triển khả năng phân tích, thiết kế thuật toán để xây dựng được chương trình thực hiện nhiệm vụ được yêu cầu.

B. CÔNG VIỆC CHUẨN BỊ

1. Giáo viên chuẩn bị:

- Nghiên cứu nội dung bài học: Nghiên cứu Giáo trình Kĩ thuật lập trình (dành cho SV KTĐT, VT), tài liệu tham khảo liên quan, soạn kế hoạch giảng dạy, giáo án bài dạy theo hướng tổ chức hoạt động học cho SV.

- Xây dựng kế hoạch giảng dạy, giáo án bài dạy theo hướng tổ chức hoạt động học cho SV với hệ thống câu hỏi gợi ý hoạt động học tập, hệ thống các bài tập luyện tập kỹ năng trong bài học.


2. SV chuẩn bị:

- Ôn tập các kiến thức đã học trong các tiết học trước liên quan đến nội dung bài học.

3. Phương tiện dạy học:

- Giáo trình Kĩ thuật lập trình, tài liệu tham khảo.

- Máy tính, máy chiếu

- Bài giảng (điện tử)

- Công cụ lập trình (C/C++)

C. PHƯƠNG PHÁP DẠY HỌC

- Phương pháp dạy học: Dạy học hợp tác, kĩ thuật “mảnh ghép”.

D. NỘI DUNG HOẠT ĐỘNG

- Luyện tập viết chương trình có sử dụng cách thức kế thừa đơn trong chương trình.

Bài tập 1: Với mục đích tính diện tích các hình vuông, hình chữ nhật, hình tròn, hình thang, hình tam giác.

Hãy tổ chức các lớp sao cho có thể kế thừa thành phần dữ liệu cài đặt:

- Cấu tử

- Nhập, xuất

- Tính diện tích.

Bài tập 2: Thư viện có 3 loại tài liệu: sách, tạp chí, giáo trình. Có các dữ liệu chung: mã tài liệu, vị trí, số lượng, đơn giá. Và có dữ liệu riêng như sau:

- Sách: tác giả, tên sách, năm xuất bản.

- Tạp chí: tên tạp chí, chuyên ngành.

- Giáo trình: tác giả, tên sách.

Tổ chức các lớp sao cho kế thừa được các dữ liệu chung. Tiến hành cài đặt: - Cấu tử, hủy tử

- Thủ tục nhập, xuất.


E. GỢI Ý TIẾN TRÌNH DẠY HỌC Hoạt động 1: Luyện tập

* Mục tiêu hoạt động:

- Tạo cơ hội cho SV vận dụng cũng như tăng mức độ thành thạo trong việc sử dụng dạng kế thừa đơn trong lập trình hướng đối tượng.

- Tạo hứng thú học tập cho SV thông qua các bài toán liên hệ chặt chẽ với thực tiễn.

* Sản phẩm học tập của SV: Đoạn chương trình thực thi.

* Cách thức thực hiện hoạt động của GV và SV:

- Kĩ thuật “mảnh ghép” thường mất nhiều thời gian dành cho việc tổ chức, tạo các nhóm.

- Kĩ thuật “mảnh ghép” đòi hỏi các nhiệm vụ giao cho mỗi nhóm chuyên gia phải tương đương nhau về khổi lượng công việc và đặc biệt là phải có tính độc lập cao. “Tính độc lập cao” nghĩa là không có công việc nào phải thực hiện sau một công việc khác. Do đó, hai bài tập nêu trong hoạt động là độc lập với nhau và có độ khó tương đương đương nhau.

- Kĩ thuật “mảnh ghép” đòi hỏi GV phải rất chú trọng vào khả năng quan sát và bao quát lớp để đảm bảo được sự điều tiết các hoạt động học của SV. Nói chung, các bài tập đã nêu trong hoạt động là không khó vì chúng chỉ yêu cầu ở mức vận dụng trực tiếp. Tuy nhiên, đối với lớp có khả năng nhận thức thấp, GV sẽ điều tiết như sau:

+ Ở bước 2, nếu sắp hết thời gian, với mỗi nhiệm vụ đã giao, GV chỉ cần một nhóm chuyên gia làm đúng và khi nhóm đó làm xong thì lập tức yêu cầu SV chuyển sang bước 3.

+ Ở bước 3, nếu thấy hoạt động “chuyển giao sản phẩm” không có hiệu quả tốt, GV cho các nhóm dừng lại và chuyển sang phương pháp dạy học

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 02/09/2022