Inheritance : tính kế thừa.
Polymorphism : tính đa hình
Encapsulation : tính đóng gói.

Đây là ba đặc điểm chính của lập trình hướng đối tượng và đây là nội dung chính chúng ta cần quan tâm. Các bài trước là tiền đề để ta nắm rõ các phương pháp này, tuy nhiên vẫn còn thiếu sót một vài vấn đề mà trong bài này sẽ bổ sung tiếp cho các bạn.



A. Tính Thừa Kế

Thừa kế ở đây là gì ? Là sự kế thừa, tái sử dụng phương thức, thuộc tính của lớp cơ sở. Và lớp kế thừa được gọi là lớp con, nó sẽ thừa hưởng những gì lớp cha có và cho phép. Kế thừa giúp tiết kiệm thời gian viết code, tái sử dụng và mở rộng hiệu quả, dễ bảo trì sửa chữa. Có 2 loại thừa kế, đó là đa thừa kế và đơn thừa kế. Trong các ngôn ngữ hướng đối tượng như C#,Java . . . thì không hỗ trợ đa thừa kế. (C++ có hỗ trợ đa thừa kế).

- Đa thừa kế là một lớp con có thể kế thừa từ hai hoặc nhiều lớp cha (lớp cơ sở). Nó mang lại sự phức tạp, trùng lặp không đáng có . . .Chúng ta không tìm hiểu thêm tại đây
- Đơn thừa kế là một lớp con chỉ kế thừa từ một lớp cha. Và tất nhiên một lớp cha có thể có nhiều lớp con kế thừa từ nó và lớp con đó có thể là lớp cha của lớp khác.
- Trong kế thừa nếu Class B kế thừa từ Class A và Class C kế thừa từ Class B. Thì Class C được thừa hưởng các thuộc tính phương thức (cho phép) của A và B.

Trong C# ta dùng dấu hai chấm ':' để kế thừa class khác.

Cách gọi :
Lớp cha (lớp cơ sở) - Base class
Lớp con (lớp dẫn xuất) - Derived class


Xem ví dụ dưới




- Từ hình trên bạn có thể thấy, chúng ta có 2 interface. Và class A kế thừa cùng lúc cả 2 interface này, bên dưới class B kế thừa A tương tự ta có class C kế thừa B.
- Hình mũi tên màu đen miêu tả sự kế thừa của các class.
 Màu đỏ miều tả class C được thừa hưởng từ A và B.
 Màu xanh  miêu tả class B vẫn có thể thể hiện các interface do class A kế thừa. Nếu class A không thực thi các interface này mà nhường cho lớp B của nó bằng cách sử dụng abstract.

Interface
- Nó giống như abstract class. Bất kỳ một class nào kế thừa phải thực thi các method của nó.
- Một class có thể kế thừa cùng lúc nhiều interface
- Cú pháp của nó chỉ đơn giản là các method trống giống abstract vậy
- Cùng xem các ví dụ để hiểu rõ hơn nhé !

B. Tính Đa Hình

Tính đa hình cho phép các chức năng (method) khác nhau được thực thi khác nhau trên các đối tượng khác nhau. Nói nôm na đơn giản hơn là bạn có 3 lớp A,B,C kế thừa nhau và trong 3 lớp này có ba method cùng tên là show(); . Khi ta tạo mới đối tượng cho các lớp trên thì những đối tượng này gọi tới method show() nằm ở lớp nào thì thực thi chức năng phương thức ở lớp đó. Bởi vì chúng kế thừa nên sử dụng rõ tính đa hình này.

Cụ thể ta có đa hình tĩnh và đa hình động.

 1. Đa hình tĩnh là việc dùng Overloading gồm các phương thức có trùng tên trong một class. Nhưng các phương thức này được thực thi khác nhau, tùy vào cài đặt. Bạn xem lại bài trước . . . Ở đây chúng ta không đề cập tới nữa

2. Đa hình động lại gồm có Abstract và Virtual. Trong đó abstract bạn có thể xem lại bài trước, chúng ta sẽ nói rõ về phương thức Virtual.

Thực ra virtual cũng giống như abstract, điểm khác biệt là bạn có thể viết các tuyên bố lệnh cho nó còn abstract method thì không. Và khi sử dụng phương thức abstract thì class đó cũng là abstract class còn Virtual thì không.

// Virtual method
public virtual void abc()
{
// Do something here !
}

// Abstract method
public abstract void abc();



Giả sử ta có lớp con kế thừa từ lớp cha chứa 2 phương thức virtual abstract. Thì lớp con này buộc phải triển khai lớp abstract từ lớp cha. Nhưng đối với phương thức virtual lớp con có thể sử dụng hoặc không. Một điểm chung đó là khi triển khai cả hai phương thức này ở lớp con chúng ta cần phải override chúng.

Vậy từ nãy giờ lang man mà cụ thể đa hình là sao, hoạt động như thế nào ?


Từ hình trên ta thấy rằng lớp B và C đã triển khai phương thức Abstract từ A (là bắt buộc). Tuy nhiên B triển khai tiếp phương thức Virtual của A mà C lại không (Vì không bắt buộc).
Giờ ta để ý p.thức virtual mà B tái sử dụng có từ khóa base, từ này ở đây có tác dụng gọi lại chức năng phương thức gốc của lớp A. Bạn có thể bỏ đi nếu không cần thiết và thay thế mã mới theo yêu cầu cài đặt.


Tại hàm Main khởi tạo đối tượng (Object) mới cho class B và C. Bạn có thể khởi tạo đối tượng bằng lệnh:  classB obj = new classB();
Sau đó thực thi 3 phương thức ta có kết quả như hình trên.
Lưu ý: Abstract class A không thể khởi tạo đối tượng vì nó là abstract.


C. Tính Đóng Gói

Đơn giản là việc sử dụng các  Access Modifiers để che dấu và bảo vệ thông tin cho các trường dữ liệu hoặc phương thức. Xem lại bài trước về access modifiers. Việc sử dụng thuần thục nó là rất quan trọng, vì nếu các thông tin về dữ liệu không được bảo vệ cẩn thận thì sẽ để lại lỗ hổng rất đáng lo ngại.

-----------------------------------------------------------------------
Dưới đây là mã nguồn demo các bạn tải về để xem nhé !





Chú ý:
Demo được thực hiện bằng VS Studio 2012. Nếu bạn dùng phiên bản thấp hơn, chẳng hạn 2010 thì làm như sau:

B1: Mở file *.sln bằng Notepad
B2: Bạn sẽ thấy những dòng đầu như thế này
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11 .........
...................................

B3: Thay số 12.00 in đậm thành 11.00 và 2012 thành 2010.
B4: Save
Hope this helps !

thumbnail OOP: Tính Kế Thừa - Tính Đa Hình - Tính Đóng Gói

data:label.name author

premiumpng.com

Design Publisher

Download 0
No comments
Template in .PSD format

MR Laboratory License

Free for personal purpose use . More info


Buy Now This Template

No comments:

Post a Comment

Commets Download Photoshop Actions, Lightroom Presets, PSD Template, Mockups, Stocks, Vectors, Fonts. Download free

Newer Post Older Post Home

Copyright © 2021 MR Laboratory All rights reserved.

Setting