Như ở các phần trước chúng ta đã nêu, để giải quyết được những vấn đề tồn tại trong công nghệ phần mềm thì chúng ta cần phải sử dụng những phương pháp, công cụ thích hợp để phát triển phần mềm. Trong các mục Đ1 và Đ2 chúng ta đã đề cập đến phương pháp phân tích, thiết kế hướng đối tượng. Trong mục này chúng ta tiếp tục nghiên cứu về phương pháp lập trình hướng đối tượng.
Lập trình hướng đối tượng đặt trọng tâm vào đối tượng, yếu tố quan trọng trong quá trình phát triển chương trình và nó không cho phép dữ liệu chuyển động tự do trong hệ thống. Dữ liệu được gắn chặt với từng hàm thành các vùng riêng mà các hàm đó tác động lên và nó được bảo vệ cấm các hàm bên ngoài không được truy nhập một cách tuỳ tiện. LTHĐT cho phép chúng ta phân tích bài toán thành tập các thực thể được gọi là các đối tượng và sau đó xây dựng các dữ liệu cùng với các hàm xung quanh các đối tượng đó. Tổ chức dữ liệu và hàm trong các chương trình hướng đối tượng được mô tả như trong hình 3-3.
Đối tượng A Đối tượng B
Dữ liệu Dữ liệu Hàm Hàm Đối tượng C Dữ liệu Hàm
Hình 3-3. Tổ chức dữ liệu và hàm trong chương trình HĐT
Dữ liệu của một đối tượng chỉ có thể được truy nhập bởi chính các hàm xác định trong đối tượng đó. Tuy nhiên các hàm của đối tượng này có thể truy nhập tới các hàm của đối tượng khác, nghĩa là các đối tượng trao đổi với nhau thông qua việc trao đổi thông báo. Lập trình hướng đối tượng có những đặc tính chủ yếu sau:
1. Tập chung vào dữ liệu thay cho các hàm. 2. Chương trình được chia thành các đối tượng.
3. Các cấu trúc dữ liệu được thiết kế sao cho đặc tả được các đối tượng.
4. Các hàm xác định trên các vùng dữ liệu của đối tượng được gắn với nhau trên cấu trúc dữ liệu đó. 5. Dữ liệu được bao bọc, che giấu và không cho phép các hàm ngoại lai truy nhập tự do.
6. Các đối tượng trao đổi với nhau thông qua các hàm.
7. Dữ liệu và các hàm mới có thể dễ dàng bổ sung vào đối tượng nào đó khi cần thiết. 8. Chương trình được thiết kế theo cách tiếp cận bottom-up (dưới-lên).
Lập trình hướng đối tượng là khái niệm mới và được hiểu rất khác nhau đối với nhiều người. ở đây chúng ta có thể hiểu lập trình hướng đối tượng là cách tiếp cận để phân chia chương trình thành các đơn thể (module) bằng cách tạo ra các vùng bộ nhớ cho cả dữ liệu lẫn hàm và chúng sẽ được sử dụng như các mẫu để tạo ra bản sao từng đơn thể khi cần thiết. Đối tượng ở đây được xem như là vùng phân chia bộ nhớ trong máy tính để lưu trữu dữ liệu và tập các hàm tác động trên dữ liệu gắn với chúng. Bởi vì các vùng phân hoạch bộ nhớ là độc lập với nhau nên các đối tượng có thể sử dụng bởi nhiều chương trình khác nhau mà không ảnh hưởng lẫn nhau.
Khái niệm "hướng đối tượng" nhiều người hiểu rất khác nhau. Vì vậy, để hiểu rõ bản chất và có thể đi đến thống nhất quan điểm, chúng ta cần phải nghiên cứu kỹ những khái niệm cơ bản trong LTHĐT. Trong phần này chúng ta đề cập đến những khái niệm sau:
1. Đối tượng 2. Lớp
3. Trừu tượng hoá dữ liệu 4. Kế thừa
5. Tương ứng bội 6. Liên kết động
7. Truyền thông báo
Đối tượng
Trong các mục trước chúng ta đã nêu cách xác định đối tượng trong quá trình phân tích và thiết kế hướng đối tượng. ở đây chúng ta tìm hiểu chi tiết hơn để hiểu rõ vai tò của đối tượng trong cách tiếp cận hướng đối
tượng nói chung và LTHĐT nói riêng.
Đối tượng là thực thể được xác định trong thời gian hệ thống hướng đối tượng hoạt động. Như vậy đối tượng có thể biểu diễn là con người, vật, hay một bảng dữ liệu hoặc bất kỳ một hạng thức nào đó cần xử lý trong chương trình. Đối tượng cũng có thể là các dữ liệu được định nghĩa bởi người sử dụng (người lập trình) như vector, danh sách, các record v.v... Nhiệm vụ của LTHĐT là phân tích bài toán thành các đối tượng và xác định được bản chất của sự trao đổi thông tin giữa chúng. Đối tượng trong chương trình cần phải được chọn sao cho nó thể hiện được một cách gần nhất so với những thực thể trong thế giới thực.
Khi chương trình thực hiện, các đối tượng sẽ trao đổi với nhau bằng cách gửi hay nhận thông báo. Ví dụ BAN_DOC và CHO_MUON là hai đối tượng trong hệ thống thư viện, đối tượng BAN_DOC có thể gửi một thông báo (bằng phiếu yêu cầu chẳng hạn) cho đối tượng CHO_MUON yêu cầu mượn cuốn "Lập trình hướng đối tượng với c++". Mỗi đối tượng có dữ liệu và các hàm để xử lý dữ liệu đó. Các đối tượng trao đổi với nhau mà không cần biết chi tiết về dữ liệu và các thuật toán xử lý của đối tượng khác. Để trao đổi được với nhau, mỗi đối tượng chỉ cần biết kiểu thông báo mà nó nhận và kiểu thông báo mà nó sẽ gửi cho các đối tượng khác.
Các lớp đối tượng
Như trên chúng ta đã xác định, đối tượng trong chương trình gồm cả dữ liệu và các hàm xử lý trên dữ liệu đó. Một tập dữ liệu và các hàm của một đối tượng có thể được xem như một kiểu dữ liệu được định nghĩa bởi người sử dụng. Kiểu dữ liệu ở đây được gọi là lớp (class). Trong lập trình, các đối tượng là các biến có kiểu class. Khi một lớp được định nghĩa, thì nó có thể tạo ra số lượng các đối tượng tuỳ ý của lớp đó. Như vậy, TOA, LE, BUOI, CAM là các loại quả trong lớp HOA_QUA. Lớp là kiểu được người sử dụng định nghĩa và nó cũng có các tính chất như các kiểu chuẩn integer, float trong các ngôn ngữ lập trình. Tương tự như kiểu dữ liệu đã được định nghĩa trong chương trình, lệnh khai báo
HOA_QUA TAO;
sẽ tạo ra đối tượng TAO trong lớp HOA_QUA.
Trừu tượng hoá dữ liệu và bao gói thông tin
Việc đóng gói dữ liệu và các hàm vào một đơn vị cấu trúc (được gọi là lớp) được xem như một nguyên tắc bao gói (che giấu) thông tin. Dữ liệu được tổ chức sao cho thế giới bên ngoài (các đối tượng ở lớp khác) không truy nhập được vào mà chỉ cho phép các hàm trong cùng lớp hoặc trong những lớp có quan hệ kế thừa với nhau được quyền truy nhập. Chính các hàm thành phần của lớp sẽ đóng vai trò như là giao diện giữa dữ liệu của đối tượng và phần còn lại của chương trình. Nguyên tắc bao gói dữ liệu để ngăn cấm sự truy nhập trực tiếp trong
lập trình được gọi là sự che giấu thông tin.
Trừu tượng hoá là cách biểu diễn những đặc tính và bỏ qua những chi tiết vụn vặt hoặc những giải thích. Để xây dựng các lớp, chúng ta phải sử dụng khái niệm trừu tượng hoá. Ví dụ chúng ta có thể định nghĩa một lớp là danh sách các thuộc tính trừu tượng như là kích thước, hình dáng, mầu và các hàm xác định trên các thuộc tính này để mô tả các đối tượng trong không gian hình học. Trong lập trình, lớp sử dụng như kiểu dữ liệu trừu tượng.
Kế thừa
Kế thừa là quá trình mà các đối tượng của lớp này được quyền sử dụng một số tính chất của các đối tượng của lớp khác. Nguyên lý kế thừa hỗ trợ cho việc tạo ra cấu trúc phân cấp các lớp. Ví dụ, một trường đại học đào tạo sinh viên theo ba khối: Xã hội, Công nghệ, và Khoa học cơ bản. Mỗi khối lại có các khoa. Khối công nghệ có các khoa: Cơ khí, Điện, Máy dân dụng; còn khối Khoa học cơ bản có các khoa: Toán, Lý, Hoá, Sinh. Hệ thống sẽ tổ chức thành cấu trúc phân cấp các lớp kề nhau như sau:
Hình 3.4. Cấu trúc phân cấp các lớp trong quân hệ kế thừa