Lập trình hướng đối tượng - Stolennguyen Website

Lập trình hướng đối tượng

Lập trình hướng đối tượng

Lập trình hướng đối tượng là gì?

Lập trình hướng đối tượng (Object-oriented programming, viết tắt là OOP ) là một mô hình lập trình dựa trên khái niệm “đối tượng”, nó có thể chứa dữ liệu dưới dạng thuộc tính và mã, hoặc dưới dạng phương thức.

Lập trình hướng đối tượng là một trong những kỹ thuật lập trình rất quan trọng. Được áp dụng hầu hết các ứng dụng thực tế tại các doanh nghiệp. Hầu hết các ngôn ngữ lập trình và Framework phổ biến hiện này: Java. PHP. .NET… đều hỗ trợ lập trình hướng đối tượng. Nói cách khác, lập trình hướng đối tượng là kiến thức cơ bản nhất mà các lập trình viên phải có.

Thuộc tính của lập trình hướng đối tượng

Đặc tính của OOP
Đặc tính của OOP

Inheritance (Tính Kế Thừa)

Trong thực tế, kế thừa là việc thừa hưởng lại những gì mà người khác để lại. Ví dụ: con kế thừa tài sản của cha, . . . Trong lập trình cũng vậy, nó là kỹ thuật cho phép kế thừa lại những tính năng mà một đối tượng khác đã có, giúp tránh việc trùng lặp code gây dư thừa mà chỉ xử lý công việc tương tự. Cho phép chia sẻ thông tin chung nhằm tái sử dụng, đồng thời giúp dễ dàng nâng cấp và bảo trì

Cách thực hiện:

  • Định nghĩa các lớp mới chưaa các thuộc tính chung
  • Các lớp hiện tại kế thừa lớp mới
  • Khai báo những thuộc tính riêng trong lớp hiện tại

Lớp mới được gọi là lớp cơ sở, hay còn gọi là lớp cha. Lớp hiện tại được gọi là lớp kết thừa, lớp dẫn xuất, lớp con

Nguyên tắc: Lớp kế thừa thừa hưởng tất cả từ lớp cơ sở

Ví dụ về Tính kế thừa
Ví dụ về Tính kế thừa

Các ngôn ngữ hỗ trợ các lớp hầu như luôn hỗ trợ kế thừa. Điều này cho phép các lớp được sắp xếp theo thứ bậc đại diện cho các mối quan hệ “is-a-type-of”. Ví dụ, lớp Nhân viên có thể kế thừa từ lớp Người. Tất cả dữ liệu và phương thức có sẵn cho lớp cha cũng xuất hiện trong lớp con có cùng tên. Ví dụ, lớp Người có thể định nghĩa các biến “Họ tên” và “Địa chỉ”. Chúng cũng sẽ có sẵn trong lớp Nhân viên, có thể thêm các biến “Chức vụ” và “Tiền lương”. 

Kỹ thuật này cho phép dễ dàng sử dụng lại các quy trình và định nghĩa dữ liệu tương tự, ngoài khả năng phản ánh các mối quan hệ trong thế giới thực theo cách trực quan. Thay vì sử dụng các bảng cơ sở dữ liệu và chương trình con lập trình, nhà phát triển sử dụng các đối tượng mà người dùng có thể quen thuộc hơn: các đối tượng từ miền ứng dụng của họ.

Có 3 tầm vực: Public, Protected, và Private

  • Public: Trong lớp truy xuất được, lớp con truy xuất được, ngoài lớp truy xuất được
  • Protected: Trong lớp truy xuất được, lớp con truy xuất được nhưng Ngoài lớp không truy xuất được
  • Private: Chỉ có trong lớp truy xuất được

Truy cập protected như một mức trung gian của sự bảo vệ giữa public private. Các thành viên protected của một lớp cơ sở có thể chỉ được truy cập bởi các hàm thành viên và các hàm friend của lớp cơ sở và bởi các hàm thành viên và các hàm friend của lớp dẫn xuất. Dưới đây là bảng tầm vực trong kế thừa:

Bảng tầm vực trong kế thừa
Bảng tầm vực trong kế thừa

Polymorphism (Tính Đa Hình)

Tính đa hình trong hướng đối tượng
Tính đa hình trong hướng đối tượng

Tính đa hình là hiện tượng các đối tượng thuộc các lớp khác nhau có thể hiểu cùng một thông điệp theo các cách khác nhau.

Có 3 con vật: con chó, con mèo và con vịt. Cả 3 con vật đều là động vật. Nhưng khi cả 3 động vật kêu thì con chó sẽ sủa “gâu gâu”, con mèo sẽ kêu “meo meo” và con vịt sẽ kêu “cạp cạp”. Trong ví dụ này, 3 con vật là 3 đối tượng thuộc các lớp khác nhau và thực hiện cùng thôn gđiệp “Kêu” theo 3 cách khác nhau

Vậy, để thể hiện được tính đa hình, thì các lớp con phải kế thừa từ cùng một lớp cha, và phương thức đa hình phải được override (tức là ghi đè) ở các lớp con

Để thể hiện phương thức này cần hai từ khóa: virtual  và override. Virtual để đánh dấu 1 phương thức ảo, có thể ghi đè; Còn Override để đánh dấu phương thức sẽ ghi đè lên phương thức của lớp cha

Encapsulation (Tính Đóng Gói)

TÍnh đóng gói (Encapsulation)
TÍnh đóng gói (Encapsulation)

Tính đóng gói tức là quy tắc yêu cầu trạng thái bên trong của một đối tượng được bảo vệ và tránh truy cập được từ bên ngoài (tức là bên ngoài không thể trực tiếp nhìn thấy và thay đổi trạng thái của đối tượng đó).

Bất cứ truy cập nào tới trạng thái bên trong này bắt buộc phải thông qua một public API để đảm bảo trạng thái của đối tượng luôn hợp lệ bởi vì các public API chịu trách nhiệm thực hiện kiểm tra tính hợp lệ cũng như trình tự cập nhật trạng thái của đối tượng đó.

Nói chung trạng thái đối tượng không hợp lệ thường do: chưa được kiểm tra tính hợp lệ, các bước thực hiện không đúng trình tự hoặc bị bỏ qua nên trong OOP có một quy tắc quan trọng cần nhớ đó là phải luôn khai báo các trạng thái bên trong của đối tượng là private và chỉ cho truy cập qua các public/protected method/property.

Khi sử dụng các đối tượng ta không cần biết bên trong nó làm việc như thế nào, ta chỉ cần biết các public API là gì và điều này đảm bảo những gì thay đổi đối tượng sẽ được kiểm tra bởi các quy tắc logic bên trong, tránh đối tượng bị sử dụng không chính xác.

Nói cách khác, đóng gói là cách để che dấu những tính chất xử lý bên trong của đối tượng, những đối tượng khác không thể tác động trực tiếp làm thay đổi trạng thái  chỉ có thể tác động thông các method public của của đối tượng đó.

Abstraction (Tính Trừu Tượng)

Là phương pháp trừu tượng hóa định nghĩa lên những hành động, tính chất của loại đối tượng nào đó cần phải có. Ví dụ khi bạn định nghĩa một lớp động vật, động vật thì có rất nhiều loại, làm sao để xác định đó là một loại động vật?

Lúc này bạn sẽ hình dung trong đầu động vật có những tính chất hành vi cơ bản nhất định phải có như tiếng kêu, cân nặng. Một đối tượng thuộc lớp động vật sẽ kế thừa lại lớp Động vật sẽ có tiếng kêu, cân nặng , đối tượng được tạo ra có thể khác nhau như chó hoặc mèo nhưng đều có những đặc điểm của động vật là tiếng kêu, cân nặng

Trong ví dụ trên nhìn vào đặc điểm tiếng kêu, cân nặng của chó và mèo ta có thể khẳng định nó thuộc lớp động vật. Vậy chốt lại tính trừu tượng ở đây sinh ra chủ yếu để trừu tượng hóa và định nghĩa các tính chất, hành vi phải có để xác định đó là đối tượng gì dựa vào tính chất hành vi của đối tượng. Các method trừu tượng đều rỗng không thực hiện bất kỳ hành vi nào, hành vi sẽ được triển khai cụ thể do các đối tượng kế thừa.

Kết thúc

Trên đây mình đã giới thiệu cho bạn Lập trình hướng đối tượng là gì và Những thuộc tính của lập trình hướng đối tượng. Đây là kiến thức rất cơ bản nhưng rất quan trọng cho các bạn có ý định theo lập trình backend và frontend và phỏng vấn xin việc làm. Câu hỏi mở dành cho các bạn để hiểu rõ thêm vế hướng đối tượng nhé: Trong lập trình hướng đối tượng, thuộc tính nào là quan trọng nhất? Vì sao?

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *