O BaseClasses và Abstract Methods

Một phần của tài liệu Kỹ thuật lập trình visual basic knowledge (Trang 50 - 52)

M ỗ i class đề u có ít nh ấ t m ộ t Sub New , g ọ i là Constructor (gi ố ng nh ư

T o BaseClasses và Abstract Methods

Cho đến giờ ta đã bàn về virtual method với đặc tính override trong nguyên tắc thừa kế. Trong các thí dụ trước đây BaseClass được instantiated thành Object để làm chuyện nầy, chuyện kia. Nhưng đôi khi ta muốn tạo một BaseClass chỉ để dùng cho thừa kế mà thôi.

Keyword MustInherit (Phải được Thừa Kế)

Trở lại cái thí dụ về Inheritance với Class LineItem. Sở dĩ ta đặt ra Class LineItem là vì nó chứa những thứ chung cho cả hai classes ProductLine và ServiceLine. Chớ thật ra một Object của Class LineItem không chứa đủ mọi đặc tính để làm một việc gì thực tế. Nếu ta muốn nói rõ rằng Class LineItem chỉđược dùng để tạo những SubClasses bằng cách thừa kế từ nó, ta có thể

declare như sau:

Public MustInherit Class LineItem

Tức là ta chỉ thêm keyword MustInherit thôi, chớ không thay đổi gì khác. Kết quả là từ nay Client code không thể instantiate một Object từ Class LineItem. Do đó dòng code sau sẽ bị

syntax error:

Dim myObject As New LineItem()

Thay vào đó, nếu muốn dùng LineItem ta phải tạo SubClass từ nó.

Keyword MustOverride (Phải bị Lấn Quyền)

Tương tự với ý niệm Phải-được-thừa-kế trong Class, ta cũng có MustOverride cho một method. Có thể trong BaseClass ta khai báo một method, nhưng ta đòi hỏi method ấy phải có một implementation trong SubClass. Ta declare như sau:

Dim MustOverride Sub CalculatePrice

Để ý là ởđây không có thân thể của Sub CalculatePrice hay statement End Sub gì cả. Khi dùng MustOverride ta không được phép cung cấp một implementation cho method trong BaseClass. Một method như thếđược gọi là abstract method hay pure virtual function, vì nó chỉ có phần khai báo chớ không có phần định nghĩa. Những abstract methods phải được overridden trong bất cứ SubClass nào của BaseClass thì mới dùng được. Nếu không, ta sẽ không có phần implementation của method đâu cả và khi compile sẽ gặp syntax error.

Abstract Base Classes

Nếu hợp cả hai ý niệm MustInherit và MustOverride lại ta sẽ tạo ra một abstract base class.

Đây là một Class chỉ có khai báo chớ hoàn toàn không có implementation. Ta phải SubClass từ

nó thì mới làm việc được, thí dụ như:

Public MustInherit Class ClassCha Public MustOverride Sub VôĐề() Public MustOverride Sub ChàoHỏi() End Class

Kỹ thuật nầy rất thích hợp để ta code cái sườn hay bố cục của program ngay trong lúc thiết kế. Class nào thừa kế ClassCha thì phải implement cả Sub VôĐề lẫn Sub ChàoHỏi, nếu không sẽ

bị syntax error.

Nhìn về một phương diện, abstract base class rất giống khai báo Interface. Nếu dùng Interface, chúng ta có thể khai báo như sau:

Public Interface ICha Sub VôĐề() Sub ChàoHỏi() End Interface

Bất cứ class nào chịu implement interface ICha thì phải implement cả Sub VôĐề lẫn Sub

ChàoHỏi, nếu không sẽ bị syntax error - do đó, ta thấy Interface rất giống một abstract base class.

Sự khác biệt chính giữa abstract base class với Interface là ở chỗ thừa kế. Khi ta tạo một class con bằng cách SubClass từ ClassCha, chính class con ấy lại cũng có thểđược SubClassed.

Mấy class cháu nầy sẽ tựđộng thừa kế VôĐề và ChàoHỏi từ class con.

Trong khi ấy nói về Interface, mỗi class phải tự implement ICha một cách độc lập và phải cung cấp hai Subs VôĐề và ChàoHỏi của chính nó. Vì thế, nếu ta không có ý định dùng lại code của các Subs khi ta tạo các classes mới thì ta có thể dùng interface. Ngược lại nếu ta muốn dùng lại code trong SubClass theo nguyên tắc thừa kế thì ta nên dùng abstract base class.

Bài 5 Nhng chc năng Đối Tượng mi ca VB.NET (phn

Một phần của tài liệu Kỹ thuật lập trình visual basic knowledge (Trang 50 - 52)

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

(133 trang)