Lập Trình Hướng đối Tượng Oop Là Gì? - Hoclaptrinh

Lập trình hướng đối tượng (oop) là nền tảng cho hầu hết các design pattern hiện nay. Vậy lập trình hướng đối tượng oop là gì?

Khái niệm lập trình hướng đối tượng - OOP

Lập trình hướng đối tượng (tiếng Anh: Object-oriented programming, viết tắt: OOP) là một mẫu hình lập trình dựa trên khái niệm "công nghệ đối tượng", mà trong đó, đối tượng chứa đựng các dữ liệu, trên các trường, thường được gọi là các thuộc tính; và mã nguồn, được tổ chức thành các phương thức.

Phương thức giúp cho đối tượng có thể truy xuất và hiệu chỉnh các trường dữ liệu của đối tượng khác, mà đối tượng hiện tại có tương tác (đối tượng được hỗ trợ các phương thức "this" hoặc "self").

OOP giải quyết các bài toán từ nhỏ đến lớn bằng cách quan sát và tưởng tượng những hành động, đặc điểm của thực thể thật ngoài đời sống và đem vào lập trình như một đối tượng ảo. Thể hiện qua các lớp (class), đối tượng (Object) mà hành động là các hàm(method) còn đặc điểm chính là các biến(variable)

Nói 1 cách hoa mỹ hơn

OOP is the art of observing of objects in their natural appearance and trying to capture the functional abstractnesses in descriptive programming way, and to visualize them as virtual-workable objects

_OOP_ là nghệ thuật quan sát các đối tượng trong tự nhiên rồi cố gắng nắm bắt những hành động cùng đặc tính của chúng và biểu diễn dưới dạng đối tượng ảo trong ngôn ngữ lập trình Ví dụ:__

Xe (đời thực)-> class Xe(lập trình) -> Đối tượng Xe

Trong đó

  • Xe thật thì có màu, số bánh, tên xe
  • -> Class Xe (Biến màu, biến Số bánh. biến Tên)
  • -> Đối tượng xe(Màu,Số bánh, tên)

Đặc điểm của lập trình hướng đối tượng (oop)

  • Abstraction : tính trừu tượng.
  • Encapsulation : tính đóng gói.
  • Inheritance : tính kế thừa.
  • Polymorphism : tính đa hình.

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

  • Tính đóng gói (encapsulation) và Che giấu thông tin (information hiding)

Trước khi tìm hiểu tính đóng gói và che giấu thông tin, các bạn nên tìm hiểu cú pháp ngôn ngữ các thể hiện tính chất public, private, protected …

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

Hình ảnh trên là một ví dụ về tính đóng gói và che giấu thông tin trong lập trình OOP

Như bạn thấy, viên thuốc được bao quanh bởi lớp vỏ chính là Class Method và Variable là những thành phần bên trong viên thuốc, được bao lại, che giấu đi và không thể nhìn hoặc sử dụng nếu Class bên ngoài không cho phép.

Như vậy tính đóng gói có thể hiểu: Gói dữ liệu (data, ~ biến, trạng thái) và mã chương trình (code, ~ phương thức) thành một cục gọi là lớp (class) để dễ quản lí. Trong cục này thường data rất rối rắm, không tiện cho người không có trách nhiệm truy cập trực tiếp, nên thường ta sẽ che dấu data đi, chỉ để lòi phương thức ra ngoài

  • Tính kế thừa (inheritance) Và đa hình(Polymorphism)

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

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

Khái niệm: Kế thừa là cách tạo lớp mới từ các lớp đã được định nghĩa từ trước

Lớp cha có thể chia sẻ dữ liệu và phương thức cho các lớp con, các lớp con khỏi phải định nghĩa lại những logic chung, giúp chương trình ngắn gọn. Nếu lớp cha là interface, thì lớp con sẽ di truyền những contract trừu tượng từ lớp cha

Giả sử ta có 2 class A và B:

  • Class A: lớp cơ sở (lớp cha) - supper class
  • Class B: lớp dẫn xuất (lớp con) - sub class

Class B có thể dùng được hầu hết các phương thức (hàm) và các thuộc tính (biến) của lớp A ngoại trừ các các phương thức và các hàm các tính chất private.

Cài đặt: để cài đặt lớp kế thừa ta dùng toán tử “:” (trong C++, C#) và Extends (Java). Ví dụ B kế thừa A viết là: B:A

class A { .... } class B:A // hoặc B extends A (java) { ... }

Chú ý:

Một lớp cha có thể có nhiều lớp con Đến lượt mình mỗi lớp con lại có thể có các con khác Trong C++ cho phép đa kế thừa (một lớp con có thể nhận hơn 1 lớp cha) Java chỉ cho phép mỗi lớp con kế thừa 1 và chỉ một lớp cha/ từ khóa implement sẽ thay thế cho đa kế thừa từ C++

  • Tính trừu tượng, phương thức ảo:

Có câu “program to interfaces, not to concrete implementations”. Nghĩa là khi viết chương trình theo phong cách hướng đối tượng, khi thiết kế các đối tượng, ta cần rút tỉa ra những đặc trưng của chúng, rồi trừu tượng hóa thành các interface, và thiết kế xem chúng sẽ tương tác với nhau như thế nào. Nói cách khác, chúng ta định ra các interface và các contract mà chúng cần thỏa mãn.

Nói 1 cách đơn giản thì bạn chỉ cần khai báo hàm trong lớp cha (access modifier, phương thức trả về, tên hàm, tham số truyền vào). Còn định nghĩa trong phần thân hàm bạn không cần quan tâm đến. Vì nó sẽ được override lại từ class kế thừa.

Định nghĩa: Đây là khả năng của chương trình bỏ qua hay không chú ý đến một số khía cạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết (chỉ khai báo). Mỗi đối tượng phục vụ như là một “động tử” có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được các thao tác (sự override từ lớp con). Tính chất này thường được gọi là sự trừu tượng của dữ liệu.

Phương thức ảo là phương thức được định nghĩa ở lớp cơ sở (lớp cha) mà các lớp dẫn xuất (lớp con) muốn sử dụng phải định nghĩa lại. Dùng từ khoá virtual (c++) hay abstract (java)để khai báo phương thức ảo: Trong Class ảo có thể có phương thức ảo hoặc không nhưng phương thức ảo bắt buộc phải ở trong class ảo phương thức ảo không chứa body Khi kế thừa class ảo, bắt buộc phải viết lại phương thức ảo của nó

  • Tính đa hình (polymorphism)

poly (nhiều) + phism(body) = nhiều hình thái. Tính đa hình được thể hiện qua việc viết lại các method(hàm) từ class cha thông qua class kế thừa nó hoặc việc triển khai các interface.

Từ khóa » đặc Trưng Của Lập Trình Hướng đối Tượng