4 Tính chất trong lập trình hướng đối tượng | Học trực tuyến CNTT, học lập trình từ cơ bản đến nâng cao

4 Tính chất trong lập trình hướng đối tượng

Chia sẻ kiến thức 04/03/2022

Bất kỳ một developer nào muốn gắn bó lâu dài với công việc lập trình, đều cần phải biết về lập trình hướng đối tượng bao gồm cả 4 tính chất quan trọng của nó. Vậy 4 tính chất trong lập trình hướng đối tượng là gì? 

Lập trình hướng đối tượng (OOP – Object-Oriented Programming) là một phương pháp lập trình được sử dụng rộng rãi trong phát triển phần mềm hiện đại. OOP tập trung vào việc tổ chức mã nguồn thành các đối tượng, mỗi đối tượng có thể chứa dữ liệu và các phương thức để thao tác với dữ liệu đó. Một trong những yếu tố quan trọng giúp OOP trở thành một công cụ mạnh mẽ và dễ dàng quản lý trong việc phát triển phần mềm là bốn tính chất cơ bản của nó: Encapsulation (Đóng gói), Abstraction (Trừu tượng hóa), Inheritance (Kế thừa)Polymorphism (Đa hình). Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về bốn tính chất này và cách chúng đóng vai trò quan trọng trong lập trình hướng đối tượng.

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

Lập trình hướng đối tượng hay còn gọi là OOP (viết tắt của Object Oriented Programming) là một phương pháp giúp việc code trở nên dễ phát triển, tái sử dụng được, bảo mật cao và dễ bảo trì. 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ệ, trong đó mỗi đối tượng sẽ có các thuộc tính (dữ liệu) và hành vi (phương thức). 

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

Đối tượng trong OOP bao gồm 2 thành phần chính:

  • Thuộc tính (Attribute): Những thông tin, đặc điểm của đối tượng.
  • Phương thức (Method): Những hành vi mà đối tượng có thể thực hiện.

Ví dụ: Đối tượng smart tivi sẽ có:

  • Thuộc tính: kích thước màn hình (inch), hiệu suất, hệ điều hành,  
  • Phương thức: tìm kiếm bằng giọng nói, xem youtube, chơi game,…

Muốn lập trình và thiết kế chương trình theo phương pháp này, bạn cần hiểu rõ về 4 tính chất lập trình hướng đối tượng.

>>> Xem thêm: Lập trình hướng đối tượng từ cơ bản đến nâng cao trong php

2. Các tính chất trong lập trình hướng đối tượng

OPP hiện có 4 tính chất cơ bản bao gồm: tính đóng gói, tính kế thừa, tính đa hình và tính trừu tượng. Đặc điểm của từng tính chất sẽ được thể hiện cụ thể dưới đây:

2.1. Tính đóng gói (Encapsulation)

Encapsulation (hay còn gọi là đóng gói) là một trong những tính chất cơ bản của lập trình hướng đối tượng. Đóng gói liên quan đến việc nhóm dữ liệu (các thuộc tính) và các phương thức (hành vi) có liên quan lại với nhau thành một đối tượng duy nhất. Đối tượng này có thể ẩn đi chi tiết triển khai bên trong và chỉ cung cấp một giao diện công khai để người sử dụng tương tác với nó.

Một trong những mục tiêu chính của đóng gói là bảo vệ dữ liệu khỏi sự thay đổi không mong muốn và không kiểm soát. Điều này được thực hiện thông qua cơ chế quyền truy cập. Các trường dữ liệu của một lớp có thể được khai báo là private hoặc protected, nghĩa là chúng không thể bị truy cập trực tiếp từ bên ngoài lớp. Thay vào đó, các phương thức gettersetter sẽ được sử dụng để truy xuất và sửa đổi giá trị của các trường này.

Ví dụ, giả sử chúng ta có một lớp Person với một thuộc tính age. Để đảm bảo rằng tuổi của người không thể được thay đổi tùy tiện, chúng ta có thể đóng gói thuộc tính này và chỉ cho phép thay đổi tuổi thông qua một phương thức kiểm tra tính hợp lệ:

java
public class Person {
private int age; // thuộc tính đóng gói

public int getAge() {
return age; // phương thức getter
}

public void setAge(int age) {
if (age > 0) { // phương thức setter với kiểm tra hợp lệ
this.age = age;
}
}
}

Ở đây, thuộc tính age không thể bị truy cập trực tiếp từ bên ngoài, mà chỉ có thể được thay đổi thông qua phương thức setAge. Điều này giúp đảm bảo tính toàn vẹn của dữ liệu

Tính đóng gói trong lập trình hướng đối tượng
Tính đóng gói trong lập trình hướng đối tượng

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

Inheritance (kế thừa) là một trong những tính chất mạnh mẽ của lập trình hướng đối tượng, cho phép một lớp con kế thừa các thuộc tính và phương thức của một lớp cha. Điều này giúp giảm thiểu mã nguồn, tái sử dụng mã một cách hiệu quả và xây dựng hệ thống phân cấp dễ hiểu.

Khi một lớp kế thừa từ một lớp khác, nó có thể sử dụng lại tất cả các phương thức và thuộc tính công khai và bảo vệ của lớp cha. Lớp con cũng có thể ghi đè các phương thức của lớp cha để cung cấp hành vi riêng biệt.

Ví dụ, ta có thể định nghĩa một lớp Vehicle đại diện cho các phương tiện giao thông, và các lớp CarBike sẽ kế thừa từ lớp Vehicle:

java
public class Vehicle {
private String brand;

public void honk() {
System.out.println("Beep beep!");
}
}

public class Car extends Vehicle {
private int numberOfDoors;

public void openTrunk() {
System.out.println("Opening trunk");
}
}

public class Bike extends Vehicle {
private boolean hasBell;

public void ringBell() {
System.out.println("Ring ring!");
}
}

Ở đây, cả CarBike đều kế thừa phương thức honk() từ lớp Vehicle, giúp giảm thiểu sự trùng lặp mã nguồn. Cả hai lớp này đều có thể thêm các phương thức riêng biệt của chúng như openTrunk()ringBell().

Kế thừa cũng hỗ trợ cơ chế polymorphism (đa hình) thông qua việc lớp con có thể ghi đè (override) các phương thức của lớp cha để thay đổi hành vi của chúng. Điều này giúp OOP linh hoạt hơn trong việc mở rộng hệ thống mà không làm thay đổi cấu trúc của mã gốc.

>>> Xem thêm: OOP – Lập trình hướng đối tượng là gì? Tại sao áp dụng lập trình hướng đối tượng trong PHP lại quan trọng?

2.3. Tính đa hình (Polymorphism)

Polymorphism (đa hình) cho phép các đối tượng thuộc các lớp khác nhau có thể được xử lý qua cùng một giao diện, và mỗi đối tượng có thể thực hiện hành vi của mình một cách khác nhau. Đa hình giúp chương trình trở nên linh hoạt hơn và dễ dàng mở rộng.

Có hai dạng đa hình phổ biến trong OOP:

  1. Đa hình qua kế thừa (Method Overriding): Lớp con có thể ghi đè (override) phương thức của lớp cha để thực hiện hành vi riêng của nó.

  2. Đa hình qua giao diện (Interface Polymorphism): Các đối tượng có thể thực thi các giao diện khác nhau và cung cấp cách thức thực hiện cụ thể cho từng giao diện.

Ví dụ về đa hình qua kế thừa:

java
public class Animal {
public void makeSound() {
System.out.println("Some generic animal sound");
}
}

public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Woof");
}
}

public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow");
}
}

public class Main {
public static void main(String[] args) {
Animal myDog = new Dog();
Animal myCat = new Cat();

myDog.makeSound(); // Output: Woof
myCat.makeSound(); // Output: Meow
}
}

Ở đây, mặc dù myDogmyCat đều là đối tượng của lớp Animal, chúng thực hiện phương thức makeSound() theo cách khác nhau, tùy thuộc vào lớp con của chúng.

Đa hình không chỉ giúp giảm thiểu mã nguồn mà còn cải thiện khả năng mở rộng của hệ thống. Khi có thêm các lớp mới trong hệ thống, bạn không cần thay đổi mã nguồn hiện tại mà chỉ cần tạo thêm các lớp con kế thừa từ lớp cha và ghi đè các phương thức nếu cần thiết.

Ví dụ minh họa về tính đa hình trong lập trình hướng đối tượng
Ví dụ minh họa về tính đa hình trong lập trình hướng đối tượng

2.4. Tính trừu tượng (Abstraction)

Abstraction (trừu tượng hóa) là quá trình che giấu các chi tiết triển khai phức tạp và chỉ cung cấp những thông tin cần thiết và quan trọng cho người sử dụng. Mục đích của trừu tượng hóa là giảm thiểu sự phức tạp của hệ thống bằng cách chỉ tập trung vào các yếu tố quan trọng, bỏ qua những chi tiết không cần thiết.

Trong lập trình hướng đối tượng, trừu tượng hóa được thực hiện thông qua các lớp trừu tượnggiao diện (interface). Lớp trừu tượng là một lớp không thể tạo đối tượng trực tiếp, mà chỉ có thể được kế thừa bởi các lớp con. Các lớp trừu tượng có thể chứa các phương thức chưa được triển khai, cho phép các lớp con cung cấp cách thức thực thi cụ thể cho những phương thức này.

Ví dụ, ta có thể định nghĩa một lớp trừu tượng Animal với một phương thức makeSound(), nhưng không định nghĩa cụ thể cách mà các động vật phát ra âm thanh:

java
public abstract class Animal {
public abstract void makeSound(); // phương thức trừu tượng
}

Các lớp con như Dog hay Cat có thể kế thừa từ Animal và cung cấp cách thức cụ thể cho phương thức makeSound():

java
public class Dog extends Animal {
public void makeSound() {
System.out.println("Woof");
}
}

public class Cat extends Animal {
public void makeSound() {
System.out.println("Meow");
}
}

Bốn tính chất của lập trình hướng đối tượng – Encapsulation (Đóng gói), Abstraction (Trừu tượng hóa), Inheritance (Kế thừa)Polymorphism (Đa hình) – đóng vai trò quan trọng trong việc xây dựng các ứng dụng phần mềm hiệu quả và dễ bảo trì. Các tính chất này không chỉ giúp giảm thiểu sự phức tạp trong việc phát triển phần mềm mà còn tạo ra những hệ thống linh hoạt, dễ dàng mở rộng và tái sử dụng mã nguồn. Những nguyên lý cơ bản này đã làm nền tảng cho việc phát triển phần mềm hiện đại và tiếp tục được sử dụng trong các ngôn ngữ lập trình như Java, C++, Python, C# và nhiều ngôn ngữ khác.

Phạm Thị Thanh Ngọc

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
FUNiX V2 GenAI Chatbot ×

yêu cầu gọi lại