Mục lục:
1. Trừu tượng hóa dữ liệu là gì ?
2. Đối tượng trong thế giới thực và trong lập trình
4. Gọi các phương thức và thuộc tính của lớp cha
6. Các mức độ truy cập trong kế thừa lồng
Trừ tượng hóa là quá trình đơn giản hóa một đối tượng mà trong đó chỉ bao gồm những đặc điểm quan tâm và bỏ qua những đặc điểm chi tiết nhỏ. Quá trình trừu tượng hóa dữ liệu giúp ta xác định được những thuộc tính, hành động nào của đối tượng cần thiết sử dụng cho chương trình.
Trừu tượng hóa dữ liệu là quá trình trừu tượng hóa một đối tượng một cách đủ thông tin để lưu vào hệ thống dữ liệu. Quá trình này rất giống với bộ phận phân tích hệ thống dữ liệu, lấy thông tin của khách hàng và trừu tượng hóa để đưa vào CSDL.
Ví dụ: Xây dựng chương trình quản lý sinh viên
Đối tượng: Các Sinh Viên.
Dữ liệu:
Hành động:
Ta thấy có rất nhiều thuộc tính và hành động của sinh viên nhưng khi lưu vào hệ thống ta phải trừu tượng hóa lại CSDL, tức là sàn lọc thuộc tính, hành động cần thiết cho phần mềm quản lý sinh viên, bỏ đi những thuộc tính không cần thiết và hành động không cần thiết.
Tóm lại: Trừu tượng hóa dữ liệu là quá trình tổ chức một bài toán phức tạp thành những đối tượng có cấu trúc chặt chẽ, trong đó các dữ liệu và hành động của đối tượng được định nghĩa. Trong đối tượng dữ liệu và hành động có sự gắn kết chặt chẽ với nhau.
Đối tượng trong thế giới thực là một thực thể mà ta có thể sờ, nhìn thấy và cảm nhận được. Mỗi đối tượng đều có những thuộc tính, hành động riêng biệt.
Ví dụ:
Đối tượng trong lập trình dùng để mô tả, biểu diễn đối tượng trong thế giới thực, nó cũng có các thuộc tính hành động tác động lên nó (tác động lên dữ liệu).
Ví dụ: Lớp đối tượng mô tả con chó
|
Giả sử tôi có 2 lớp Động Vật và lớp Con Trâu có những thuộc tính và phương thức sau:
Nhìn vào hình ta thấy 2 đối tượng Động Vật và Con Trâu có những đặc điểm chung và riêng. đối tượng Con trâu chỉ có một đặc tính khác đó là nó có sừng, còn đối tượng động vật thì không có. Vậy ta có nhận xét như sau: Con trâu cũng là một động vật nên nó có những đặc tính của động vật, hay nói cách khác nó có những đặc điểm và hành động của động vật, vì vậy con trâu có thể kế thừa nhưng đặc điểm và phương thức của động vật.
Bài viết này được đăng tại [free tuts .net]
Đấy là ta đang nói đến tính kế thừa của các đối tượng trong thế giới thực, còn trong lập trình thì như thế nào ?
Nếu khai báo thông thường thì ta sẽ tạo hai class như sau:
Lớp Động Vật:
|
Lớp Con Trâu:
|
Rõ ràng 2 đối tượng Động Vật và Con Trâu có những thuộc tính và phương thức giống nhau tại sao ta lại phải khai báo 2 đối tượng dài như vậy? Vì thế trong lập trình hướng đối tượng cung cấp chúng ta một tính chất để giải quyết vấn đề này đó là tính kế thừa.
Cú pháp như sau:
|
Sau khi khai báo như vậy thì classCon
sẽ có tất cả những thuộc tính, phương thức của classCha
nên nó không cần phải viết lại.
Bài toán trên sẽ viết lại dưới dạng kế thừa như sau:
|
Sau khi kế thừa thì lớp có sẽ có những thuộc tính và phương thức ở lớp cha, vậy làm thế nào để lớp con có thể truy xuất đến những thuộc tính và phương thức đó? Ta sẽ tìm hiểu thông qua hai cách gọi đó là gọi từ bên trong lớp con và gọi từ bên ngoài lớp.
Như khái niệm tính kế thừa, lớp con kế thừa từ lớp cha nên tất cả các phương thức và thuộc tính đều coi như là của nó (coi như chứ không phải là của nó hẳn) nên cách gọi cũng như cách nó gọi các phương thức thuộc tính của nó, đó là từ khóa $this->thuoctinh
, $this->phuong_thuc()
.
Tuy nhiên để phân biệt hàm nào của cha, hàm nào của con người ta hay gọi bằng từ khóa: parent::thuoctinh
, parent::phuong_thuc()
.
Ví dụ:
|
Cách gọi cũng như cách 1 của phần gọi bên trong lớp con, tuy nhiên không được sử dụng cách 2 (parent::thuoctinh
, parent::phuong_thuc()
).
Ví dụ:
|
Kế thừa lồng hay còn gọi là kế thừa nhiều lớp, nghĩa là một lớp được kế thừa từ nhiều lớp. Lớp B kế thừa lớp A, lớp C kế thừa lớp B và thế là ta có luồng kế thừa A -> B -> C. Một ví dụ khác thực tế hơn, giả sử Ông mình sinh ra Ba mình, Ba mình sinh ra mình như vậy mình kế thừa dòng máu của Ông mình và Ba mình.
Ví dụ:
|
Nhìn ví dụ thật đơn giản phải không nào, nhưng đi sâu vào bên trong nó không đơn giản tí nào đâu. Vấn đề đặt ra là khi kế thừa nhiều cấp như vậy thì các biến (thuộc tính), các hàm (phương thức) ở các lớp cha được sử dụng ở lớp con như thế nào ? Để hiểu rõ hơn vấn đề này ta sẽ đi qua phần hai.
Như ta đã biết có 3 mức độ truy cập hay dùng nhất đó là private, public và protected. Cũng như trong kế thừa một cấp, tất cả những biến (thuộc tính) và hàm (phương thức) ở dạng public thì ở tất cả các lớp con dù ở cấp độ nào nó cũng có thể truy xuất vào được. Nếu ở dạng private thì chỉ dùng trong lớp đó. Nếu ở dạng protected thì tất cả các lớp kế thừa nó dù là lồng bao nhiêu lần thì cũng có thể sử dụng. Định nghĩa này chúng ta đã được học ở bài trước và cũng được giữ nguyên cho bài kế thừa lồng này.
Ví dụ:
|
Qua các phần ghi chú trong ví dụ tôi đã giải thích cho các bạn rồi. Như vậy là các bạn thấy nó cũng không có gì đặc biệt đúng không nào.
Về bài trước... |
Bài tiếp theo... |
+ Lê Văn Thuyên-0379136392:Cảm ơn quý vị và các bạn đã vào Website của Lê Thuyên! Lê thuyên rất mong nhận được sự góp ý của quý vị và các bạn cho sự phát triển của website này. Xin chân thành cảm ơn!
* Dũng Trung-090567448:Lê Văn Thuyên0379136392--->Ok.Anh!
* Bé Nguyễn-benguyen@gmail,com:Lê Văn Thuyên0379136392--->Good job!
+ -:
+ -: