[Học OOP] Bài 2: Tổng quan về lập trình hướng đối tượng
Bài viết này là phần 2 trong 9 bài của Series Học lập trình hướng đối tượng OOP Học lập trình hướng đối tượng OOP [Học OOP] Bài 1: Các đặc điểm mới trong c++ [Học OOP] Bài 2: Tổng quan về lập trình hướng đối tượng [Học OOP] Bài 3: Lớp trong lập trình hướng đối tượng [Học OOP] ...
Học lập trình hướng đối tượng OOP
- [Học OOP] Bài 1: Các đặc điểm mới trong c++
- [Học OOP] Bài 2: Tổng quan về lập trình hướng đối tượng
- [Học OOP] Bài 3: Lớp trong lập trình hướng đối tượng
- [Học OOP] Bài 4: Constructor, destructor và Copy constructor trong hướng đối tượng c++
- [Học OOP] Bài 5: Static trong hướng đối tượng c++
- [Học OOP] Bài 6: Hàm bạn, lớp bạn trong hướng đối tượng c++
- [Học OOP] Bài 7: Overload toán tử trong Lập trình hướng đối tượng c++
- [Học OOP] Bài 8: Kế thừa trong lập trình hướng đối tượng c++ (Phần 1)
- [Học OOP] Bài 9: Hiểu kế thừa như thế nào cho đúng trong hướng đối tượng (Phần 2)
Như các bạn đã biết, phần mềm ngày nay càng lúc càng phức tạp, nhiều chức năng hơn. Để đáp ứng được điều đó, một số hệ điều hành, phần mềm phải chứa hàng chục triệu dòng lệnh để có sản phẩm.
Hơn thế nữa, nhu cầu cập nhật, bảo trì phần mềm cũng diễn ra thường xuyên. Chính vì thế người ta thường chú trọng đến việc tái sử dụng để tiết kiệm thời gian, chi phí bảo trì và phát triển.
Để tái sử dụng lại mã nguồn, đòi hỏi mã nguồn:
- Cần phải dễ hiểu
- Có tính module hóa
- Được coi là chính xác
- Có giao diện rõ ràng
1. Mục tiêu của việc thiết kế phần mềm
– Tính tái sử dụng (reusability)
thiết kế các thành phần có thể được sử dụng lại trong nhiều phần mềm khác nhau.
– Tính mở rộng (extensibility)
Cho phép hỗ trợ các tiện tích mở rộng trên phần mềm sau này.
Ví dụ như trình duyệt Google Chrome cho phép người dùng tự phát triển Extensions theo ý riêng của mình để phục vụ nhu cầu riêng
– Tính mềm dẽo (flexibility)
- Phần mềm dễ dàng thay đổi khi thêm mới dữ liệu, tính năng.
- Các thay đổi đó không ảnh hưởng nhiều đến toàn bộ hệ thống.
2. Các phương pháp lập trình
- Lập trình không có cấu trúc.
- Lập trình có cấu trúc (thủ tục), hướng chức năng.
- Lập trình hướng đối tượng.
Trong bài học này, chúng ta chủ yếu sẽ nói về phương pháp thứ 3, Lập trình hướng đối tượng.
3. Phương pháp lập trình hướng đối tượng là gì?
Lập trình hướng đối tượng là phương pháp lập trình lấy đối tượng làm nền tảng để xây dựng thuật giải, xây dựng chương trình.
Nghĩa là chúng ta sẽ xây dựng các phương thức (hành động), cho một đối tượng cụ thể dựa vào các thuộc tính của nó (Thuộc tính đó chính là những thông tin của đối tương, đủ để phục vụ cho việc xây dựng phương thức).
4. Một số khái niệm cơ bản
Ở đây mình chủ yếu lấy ví dụ để bạn hiểu, mình sẽ không nói rõ như các tài liệu chính thức về Lập trình hướng đối tượng
a. Đối tượng (object) là gì?
– Một đối tượng trong lập trình hướng đối tượng sẽ gồm 2 thành phần:
- Thuộc tính (là thông tin về đối tượng)
- Phương thức (là hành động của đối tượng)
Ví dụ chúng ta có một đối tượng hình tròn như sau:
Với hình tròn như trên thuộc tính của nó là:
- Bán kính
- Màu sắc
Và các phương thức có thể xây dựng từ những thông số thuộc tính trên là:
- Vẽ hình tròn (Dựa vào bán kính, màu sắc)
- Tính diện tích hình tròn
- Tính chu vi hình tròn.
b. Lớp (class) là gì?
Các đối tượng có các đặc tính tương tự nhau được gom chung thành lớp đối tượng. Một lớp đối tượng đặc trưng bằng các thuộc tính, và các hành động (hành vi, thao tác).
Ví dụ chúng ta có một lớp hình học, trong class hình học đấy sẽ chứa nhiều đối tượng hình học, như hình tròn, hình chữ nhật, hình thoi,…
c. Ví dụ minh họa
Các bạn có thể tham khảo thêm các ví dụ dưới đây
Các bạn hãy tự phân tích lớp và đối tượng của các ví dụ trên để hiểu rõ khái niệm class và object trong phương pháp lập trình hướng đối tượng.
5. Sơ đồ lớp
Sơ đồ lớp dùng để mô tả các lớp đối tượng.
6. Các đặc điểm quan trọng của lập trình hướng đối tượng OOP
– Tính trừu tượng
Từ những đặc điểm bên ngoài của đối tượng, như ví dụ hình tròn ở trên, ta trừu tượng nó thành dữ liệu trong phần mềm (thông số bán kính, mã màu sắc…), còn các hành động của nó chính là hàm xử lí trong phần mềm.
Tất nhiên với một đối tượng, chúng ta có thể nhận thấy rất nhiều thuộc tính, hành động, tuy nhiên tùy vào mức độ yêu cầu của bài toán, mà chúng ta chỉ cần quan tâm đến 1 số thuộc tính và hành động nhất định
Ví dụ như chúng ta cần quản lí sinh viên, thì chúng ta không cần quan tâm đến các thuộc tính nhóm máu gì, sức khỏe ra sao,… mà chỉ quan tâm Tên, mã SV, Lớp, Điểm….
– Tính đóng gói
Nhóm những gì có liên quan đến nhau làm một, để sau này có thể dùng một cái tên để gọi đến.
- Đóng gói các câu lệnh
- Đóng gói dữ liệu và các thủ tục có liên quan
- Che giấu thông tin: Che giấu một số thông tin và chi tiết cài đặt bên trong, những gì mà mình cần giữ bí mật, và người dùng không dùng đến.
– Tính kế thừa
Là cơ chế cho phép một lớp được kế thừa các thuộc tính, phương thức của một lớp khác đã được định nghĩa.
Các mối quan hệ trong kế thừa:
- Đặc biệt hóa (“là”)
- Khái quát hóa
– Tính đa hình
Là cơ chế cho phép một tên thao tác hoặc thuộc tính có thể được định nghĩa tại nhiều lớp và có thể có nhiều cài đặt khác nhau tại mỗi lớp trong các lớp đó.