Khi nhắc tới lập trình hướng đối tượng chắc bạn sẽ nghĩ ngay tới 4 tính chất là tính đóng gói, tính kế thừa, tính đa hình và tính trừu tượng. Thực chất thì 4 tính chất này chỉ giống như các nguyên liệu để xây dựng chương trình theo phương pháp hướng đối tượng, quan trọng nhất vẫn là cách mà bạn sử dụng các nguyên liệu này để xây dựng chương trình như thế nào.

Đang xem: Lập trình hướng đối tượng là gì


Lập trình hướng đối tượng được hiểu đơn giản là một phương pháp để giải quyết bài toán lập trình mà khi áp dụng thì code sẽ trở nên dễ phát triển và dễ bảo trì hơn. Phương pháp này sẽ chia nhỏ chương trình thành các đối tượng và các mối quan hệ, mỗi đối tượng sẽ có các thuộc tính (dữ liệu) và hành vi (phương thức). Để có thể lập trình và thiết kế chương trình theo phương pháp này thì chắc chắn bạn cần hiểu rõ về 4 tính chất là là tính đóng gói, tính kế thừa, tính đa hình và tính trừu tượng.

*

Đây là kỹ thuật giúp bạn che giấu đi những thông tin bên trong đối tượng bằng cách sử dụng phạm vi truy cập private cho các thuộc tính, muốn giao tiếp hay lấy ra các thông tin của đối tượng thì phải thông qua các phương thức public, từ đó sẽ hạn chế được các lỗi khi phát triển chương trình. Tính chất này cũng giống với trong thực tế, bạn không thể thấy được các thuộc tính thực của một người (tính cách, sở thích, các thông tin riêng tư khác, …), những thứ mà bạn biết đều là thông qua các hành động của người đó. Ví dụ người đó nói cho bạn biết về sở thích, tuổi, … nhưng các thông tin này chưa chắc đã thực sự là thuộc tính thật của người đó (giống với việc các getter không trả về giá trị thực của thuộc tính mà trả về một giá trị khác).

Xem thêm: Cổng Gigabit Ethernet Là Gì ? Các Tính Năng Hàng Đầu Của Ethernet

*

Các lợi ích chính mà tính đóng gói đem lại:

1. Hạn chế được các truy xuất không hợp lệ tới các thuộc tính của đối tượng.2. Giúp cho trạng thái của các đối tượng luôn đúng. Ví dụ nếu thuộc tínhgpacủa lớpStudentlàpublicthì sẽ rất khó kiểm soát được giá trị, bạn có thể thay đổigpathành bất kỳ giá trị nào. Ngược lại, nếu bạn để thuộc tínhgpalàprivatevà cung cấp hàmsetGpa()giống như sau:

void setGpa(double gpa) {if (gpa >= 0 && gpa gpa = gpa;} else {cout thì lúc này giá trị của thuộc tínhgpasẽ luôn được đảm bảo là không âm và nhỏ hơn hoặc bằng4(do muốn thay đổigpathì phải thông qua hàmsetGpa()).

3. Giúp ẩn đi những thông tin không cần thiết về đối tượng.4. Cho phép bạn thay đổi cấu trúc bên trong lớp mà không ảnh hưởng tới lớp khác. Ví dụ ban đầu bạn thiết kế lớpStudentgiống như sau:

class Student {private: string firstName;string lastName;public:Student() {…}string getFullName() {return firstName + lastName;}};Sau này nếu bạn muốn gộp 2 thuộc tínhfirstNamevàlastNamethànhfullNamethì lớpStudentsẽgiống như sau:

class Student {private:string fullName;public:Student() {…}string getFullName() {return fullName;}};Lúc này cấu trúc lớpStudentđã bị thay đổi nhưng các đối tượng sử dụng lớp này vẫn không cần phải thay đổi do các đối tượng này chỉ quan tâm tới phương thứcgetFullName(). Nếu không có phương thức này thì bạn phải sửa tất cả những chỗ sử dụng thuộc tínhfirstNamevàlastNamecủa lớpStudent.

Xem thêm: Một Số Thuật Ngữ Tiếng Anh Cho Ngành Nước Côn Thu Tiếng Anh Là Gì

Lưu ý:hãy luôn nhớ rằng mục đích chính của tính đóng gói là để hạn chế các lỗi khi phát triển chương trình chứ không phải là bảo mật hay che giấu thông tin.

2. Tính kế thừa (Inheritance)

*

Khi lập trình chắc chắn sẽ có những trường hợp mà các đối tượng có chung một số thuộc tính và phương thức. Ví dụ như khi bạn viết chương trình lưu thông tin về các học sinh và giáo viên. Với học sinh thì cần lưu thông tin về tên, tuổi, địa chỉ, điểm và với giáo viên thì cần lưu thông tin về tên, tuổi, địa chỉ, tiền lương => lúc này code sẽ bị trùng lặp khá nhiều (từ các thuộc tính cho tới các setter, getter, …) và nó vi phạm một trong những nguyên tắc cơ bản nhất khi lập trình là DRY (Don”t Repeat Yourself – đừng bao giờ lặp lại code). Để thấy rõ hơn thì bạn hãy xem sơ đồ lớp sau:

function pinIt() { var e = document.createElement('script'); e.setAttribute('type','text/javascript'); e.setAttribute('charset','UTF-8'); e.setAttribute('src','https://assets.pinterest.com/js/pinmarklet.js?r='+Math.random()*99999999); document.body.appendChild(e); }

Leave a Reply

Your email address will not be published. Required fields are marked *