Abstract Base Class

Một phần của tài liệu TÀI LIỆU HƯỚNG DẪN VISUAL BASIC (Trang 73 - 75)

II.9.1. Từ khố MustInherit

Khi chúng ta 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:

Cú pháp:

Public MustInherit Class <tên lớp>

II.9.2. Từ khố MustOverride

Tương tự với ý niệm MustInherit trong Class, ta cũng cĩ từ khĩa MustOverride cho một phương thức. Trong lớp cơ sở ta 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, ta sẽ khai báo phương thức đĩ như sau:

Cú pháp:

MustOverride Sub <tên thủ tục>

Thủ tục này khơng được cĩ gì khác ngồ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 cài đặt (Override) để sử dụng.

Kết hợp hai ý niệm MustInherit và MustOverride, chúng ta 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.

Public MustInherit Class Con_nguoi Public MustOverride Sub Chao() Public MustOverride Sub Hoi_tham() End Class

Lớp Abstract Base Class rất thích hợp để chúng ta tạo cái sườn hay bố cục của chương trình trong lúc thiết kế. Tất cả những lớp kế thừa lớp Abstract Base Class đều phải cài đặt các thành phần đã khai báo trong Abstract Base Class:

Ví dụ:

Public Class Nguoi_Viet Inherits Con_nguoi

Public Override Sub Chao() …

End Sub

Public Override Sub Hoi_tham() …

End Sub End Class

II.10. 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 lớp tiếp nhận Interface đều phải cài cặt các thành phần của Interface như đã khai báo.

Chúng ta cĩ cú pháp sau để khai báo Interface:

Cú pháp:

[<Từ khĩa>] Interface <tên gọi>

[ Inherits <tên interface1>[,<ten interface2>]] [ [ Default ] Property <thuộc tính> ]

[ Function <tên hàm>] [ Sub <tên thủ tục>] [ Event <tên sự kiện>] End Interface

Các từ khĩa cĩ thể là Public, Friend, Protected, Protected Friend hoặc Private

Ví dụ:

Public Interface IChaohoi Sub Chao()

Sub Hoi_tham() End Interface

Public Class Nguoi_Phap Implements IChaohoi

Public Sub Chao() Implements IChaohoi.Chao End Sub

Public Sub Hoi_tham() As String Implements IChaohoi.Hoi_tham End Sub

End Class

Một số yếu tố sau đây 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), tồ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, chúng ta buộc phải tạo Interface mới hồn tồn.

ƒ Nếu muốn chức năng tạo ra sẽ áp dụng cho nhiều nhĩm đối tượng (Class) khác nhau, Interface là 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 Class 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ĩ.

Một phần của tài liệu TÀI LIỆU HƯỚNG DẪN VISUAL BASIC (Trang 73 - 75)

Tải bản đầy đủ (PDF)

(188 trang)