Lập trình hướng đối tượng - Phần 4

china

Administrator
19/11/08
8.875
2
38
34
tapchiict.com
Từ khóa Me được dùng khi bạn chỉ rõ muốn dùng các thành phần của chính thể hiện Class nơi viết lệnh chứ không phải thành phần nào khác.

Từ khóa Me
Ví dụ :

Từ khóa Mybase

Từ khóa Mybase được dùng trong Class kế thừa, khi bạn muốn dùng các phương thức của chính Class cơ sở.
Ví dụ : bạn có class lopCha với thủ tục Gioithieu như sau :

Và tạo tiếp class lopCon kế thừa lopCha

Khi gọi phương thức Gioithieu của lopCon, bạn sẽ có hai thông báo : một của chính lopCon và một của lopCha.

Chú ý : từ khóa Mybase
- Chỉ được dùng để tham chiếu đến Class trung gian và các thành phần được kế thừa của nó.
- Không phải là một đối tượng, nên không thể gán trị, dùng làm tham số hoặc dùng trong toán tử Is.
- Không được sử dụng trong các Standard Module.

Từ khóa MyClass
Từ khóa MyClass cho phép bạn gọi các phương thức Overridable của Class dẫu các Class kế thừa đã có các phương thức Overrides tương ứng.

Ví dụ : bạn có Class lopCha với hai thủ tục Chao và Gioi_thieu cho phép ghi chồng. Thủ tục Gioi_thieu được gọi trong thủ tục Chao.

Và một Class lopCon kế thừa từ lopCha có thủ tục Gioithieu ghi chồng và kế thừa thủ tục Chao của lopCha.

Với đoạn lệnh sau :

Nhưng nếu thủ tục Chao của lopCha như sau :

Thì :

Khởi tạo thể hiện
Để tạo đối tượng cho một Class, trình biên dịch gọi một hàm đặc biệt được gọi là bộ khởi tạo (Constructor). Bạn có thể định nghĩa bộ khởi tạo trong Class. Nhưng nếu bạn không định nghĩa, VB sẽ sử dụng bộ khởi tạo mặc định. Để định nghĩa bộ khởi tạo, bạn chỉ cần định nghĩa một thủ tục New bên trong Class. Do tính chất nạp chồng (Overloading) nên Class có thể định nghĩa nhiều bộ khởi tạo.

Abstract Base Class
Khi bạn muốn tạo một lớp chỉ dùng để thừa kế, phải khai báo với từ khóa MustInherit.
Lớp này không cho phép khởi tạo thể hiện, nhưng phải tạo lớp con kế thừa từ lớp này và khởi tạo thể hiện từ lớp kế thừa :

• Từ khóa MustOverride
Tương tự với ý niệm MustInherit trong Class, bạn cũng có từ khóa MustOverride cho một phương thức. Trong lớp cơ sở bạn khai báo một phương thức, nhưng yêu cầu phải được cài đặt trong lớp kế thừa, bạn sẽ khai báo phương thức đó như sau :

Thủ tục này không được có gì khác ngoài dòng khai báo. Thủ tục này được gọi là abstract method hay pure virtual function, vì nó chỉ có phần khai báo không có phần định nghĩa. Trong các lớp kế thừa, các thủ tục này buộc phải được ghi chồng (Override) để sử dụng.

Kết hợp hai ý niệm MustInheritMustOverride, bạn sẽ có Abstract base class. Đây là một Class chỉ có khai báo không có phần cài đặt. Muốn dùng phải tạo class kế thừa, từ đó mới sử dụng được.
Ví dụ :

Lớp Abstract base class rất thích hợp để bạn tạo cái sườn hay bố cục cho các lớp khác trong lúc thiết kế. Lớp nào kế thừa ClassCha đều phải định nghĩa hai thủ tục Chao va Hoi_tham :

Giao tiếp (Interface)
Tương tự Abstract Base Class, Interface có thể khai báo tập hợp các thuộc tính, phương thức và sự kiện nhưng không có phần cài đặt chúng (Implementation). Các Class hỗ trợ Interface đều phải cài đặt các thành phần của Interface như đã khai báo.

Bạn có cú pháp khai báo Interface như sau :

Các từ khóa có thể là Public, Friend, Protected, Protected Friend hoặc Private.
Ví dụ :
Lớp nào cài đặt (Implements) lớp giao tiếp Ichaohoi đều phải định nghĩa thủ tục Chao và Hoi_tham.

Một số yếu tố sau giúp xác định sử dụng Abstract Base Class hay Interface :
- Nếu Class tạo ra, sẽ được kế thừa nhiều tầng sau đó, thì Abstract Class là giải pháp thích hợp. Vì trong trường hợp này, nếu nâng cấp lớp cơ sở (base class), toàn bộ các lớp kế thừa từ nó sẽ được tự động nâng cấp theo. Ngược lại, Interface không cho phép thay đổi sau khi đã tạo ra. Nếu có yêu cầu thay đổi, bạn buộc phải tạo Interface mới hoàn toàn.

- Nếu chức năng tạo ra sẽ áp dụng cho nhiều loại đối tượng khác nhau, Interface là giải pháp thích hợp. Abstract class chỉ áp dụng được cho một nhóm đối tượng liên quan mật thiết nhau, trong khi Interface là cách thức thích hợp nhất cho các lớp không có gì liên quan nhau.
- Để thiết kế một số ít chức năng nhỏ, ngắn gọn , sử dụng Interface. Nếu thiết kế một bộ các chức năng lớn, sử dụng Abstract Class.
- Nếu muốn cung cấp một số chức năng đã được cài đặt sẵn cho các đối tượng, sử dụng Abstract class, vì nó cho phép cài đặt sẵn trong Abstract Class trong khi Interface không cho phép cài đặt sẵn trên bất kỳ thành phần nào của nó.

Cài đặt lớp chồng ghép
Cài đặt lớp chồng ghép là tạo và sử dụng các đối tượng trong một lớp nhưng không muốn cho bên ngoài truy cập và sử dụng. Trở lại với ví dụ lớp Xe hơi có một Tay lái, nếu trong ứng dụng không cần thiết phải có lớp Tay lái, bạn có thể xây dựng lớp Xe hơi có lồng ghép lớp Tay lái. Thông thường, những trường này, lớp lồng ghép được khai báo là Private. Tuy nhiên các lớp lồng ghép cũng khiến cho việc sử dụng và bảo trì thêm phần phức tạp. Dưới đây là một vài yếu tố giúp bạn quyết định việc sử dụng lớp lồng ghép :
- Nếu lớp đó không hề có ý nghĩa gì bên ngoài lớp chứa nó. Ví dụ Tay lái chỉ có ý nghĩa với Xe hơi chứ không hề được quan tâm tại nơi nào khác trong ứng dụng.
- Nếu các thành phần của nó có nhu cầu truy xuất các thành phần khai báo Private của lớp chứa nó.

Ví dụ :
 

Facebook Comment

Find Diễn đàn Công nghệ thông tin và truyền thông on mobile

Thành viên trực tuyến

Không có thành viên nào trực tuyến.

Thống kê diễn đàn

Chủ đề
31.050
Bài viết
33.103
Thành viên
5.957
Thành viên mới nhất
susu93439

Mobile app users
0
Latest mobile user

Tài nguyên mới