Class và Object Trong Lập Trình: Nền Tảng Của Thế Giới OOP

Trong lập trình, đặc biệt là lập trình hướng đối tượng (OOP), hai khái niệm bạn sẽ nghe đến rất nhiều đó chính là ClassObject.
Đây là nền tảng để bạn mô hình hóa thế giới thực vào trong chương trình, giúp việc xây dựng phần mềm trở nên có tổ chức, dễ hiểu, và dễ bảo trì.

Tại sao Class và Object lại là nền tảng của lập trình hướng đối tượng? Đơn giản mà, trong lập trình hướng đối tượng, thì mọi thứ đều xoay quanh đối tượng!

Vậy ClassObject thực chất là gì? Chúng đóng vai trò như thế nào trong lập trình, và cụ thể trong ngôn ngữ Java thì chúng được sử dụng ra sao?

Trong bài viết này, mình sẽ đề cập đến những thứ sau:

Ok, cơ bản là thế, giờ thì “nổ máy” thôi!

1. Class là gì?

Định nghĩa: Class (lớp) được coi là một bản thiết kế (blueprint) để tạo ra các Objects (đối tượng). Class thì bao gồm

  • Thuộc tính (state) của đối tượng
  • Hành vi (behavior) mà đối tượng có thể thực hiện

Một vài cặp từ đồng nghĩa khác mà một vài người đồng nghiệp của mình dùng để nói về thuộc tính và hành vi

  • Thuộc tính – State – Properties – Attributes
  • Hành vi – Behavior – Functions – Methods

Nhưng đúng bản chất nhất thì chúng ta vẫn sẽ dùng State và Behavior, bởi vì:

  • Properties/Attributes tạo nên State (Trạng thái của đối tượng)
  • Hành vi (Behavior) được thực thi bởi Methods/Functions của Object (Đối tượng đó có thể làm được gì)

Một ví dụ ngắn để các bạn có thể hiểu hơn về nó:

Vì Class là một bản vẽ, nên hãy hình dung như sau:

Tôi có một cái khuôn làm bánh trung thu – đó là Class
Kích thước của khuôn, hình dạng của khuôn – đó là Class Properties
Tôi làm ra 10 cái bánh trung thu bằng cái khuôn đó – mỗi một cái bánh là một Object
Kích thước, hình dạng của một cái bánh cụ thể sau khi đúc – đó là State
Đổ bột vào khuôn, nướng bánh, tháo khuôn – đó là Behavior

Để tôi diễn giải nó cụ thể hơn nữa

  • Class giống như khuôn làm bánh: bạn định nghĩa trước hình dạng, kích thước, loại bánh mà bạn muốn.
  • Objectchiếc bánh thật bạn đổ bột vào khuôn đó rồi đem nướng ra thành phẩm.
  • Properties/Attributescác đặc điểm của khuôn (ví dụ: khuôn tròn 20cm, khuôn hình ngôi sao…).
  • Statecác đặc điểm cụ thể của bánh sau khi nướng xong (ví dụ: bánh hình tròn đường kính 20cm, bánh hình sao 5 cánh).
  • Methods/Functionscác hành động với khuôn (đổ bột, nướng, tháo bánh ra…).

2. Object là gì

Ở phần trước nếu các bạn đọc kỹ thì cũng có thể hình dung ra được Object là cái gì, và mối tương quan giữa Object và Class. Thử đọc tiếp xem bạn hiểu có đúng không nhé

Object (đối tượng) là một thực thể cụ thể được tạo ra từ một Class.

Mỗi đối tượng:

  • giá trị dữ liệu riêng (state).
  • hành vi riêng (behavior).

Ví dụ dễ hiểu:

  • Bạn có một Class “Xe Ô tô”.
  • Khi bạn tạo ra chiếc xe màu đỏ, hãng Toyota, 4 bánh, 5 chỗ, vô lăng bên trái … đó chính là Object của lớp “Xe Ô tô”.
  • Hoặc, khi bạn cùng có 2 chiếc xe y hệt nhau đi, vẫn là màu đỏ, hãng Toyota, 4 bánh, 5 chỗ, vô lăng bên trái, nhưng ở đời thật thì kiểu gì đi nữa bạn cũng sẽ có identity để phân biệt 2 xe với nhau – ở đây là một state có thể là biển số xe

Đặc điểm của Object:

  • Identity (Danh tính): Phân biệt từng object với nhau.
  • State (Trạng thái): Các giá trị thuộc tính (ví dụ màu đỏ, 4 bánh…).
  • Behavior (Hành vi): Các hành động có thể thực hiện (chạy, dừng, rẽ…).

3. Class và Object trong Java

3.1. Các bước cơ bản để thiết kế Class trong code

Ok, nếu không có vướng mắc gì thì chúng ta bắt đầu thôi!

Về cơ bản, quy trình thực hiện thì nó sẽ là như thế này: Observation → Conceptualization → Modeling → Implementation
Mình có một bài viết riêng đề cập về nó tại đây

Hãy nghĩ đến những chiếc ô tô ngoài đời thật. Ô tô nào cũng có các thuộc tính như: hãng xe, dòng xe, màu xe, năm sản xuất đúng không nào.
Ví dụ đi, mình có một chiếc xe ô tô hãng Honda, dòng xe City, màu đỏ tươi, sản xuất năm 2021.
Hay một anh bạn của mình có một chiếc xe hãng BMW dòng E46 màu xám xi măng, sản xuất năm 2004.
Các bạn hình dung được chứ?

Đến đây, mình nghĩ bạn sẽ có thắc mắc như là “Ô, xe có cả biển số mà, có giá bán mà, có rất nhiều thuộc tính nữa mà? Sao không liệt kê tiếp?”
Để mình giải đáp thắc mắc này nhé!

Câu trả lời là: Tùy thuộc vào mục đích của chương trình mà bạn muốn viết.

Là như này, bạn bán xe ô tô, hay là bạn trông giữ xe ô tô, thì cái đó gọi là bài toán. Nếu bạn bán xe thì bạn cần gì quan tâm đến biển số của chiếc xe, bạn chỉ quan tâm đến giá tiền, năm sản xuất … đúng không nào. Nhưng nếu là bài toán về trông giữ xe đi, bạn sẽ muốn biết được xe đấy biển số là gì, màu gì, xe đó vào bãi giờ nào.
Đến đây thì bạn hiểu ý mình rồi chứ? Tùy vào bài toán mà áp dụng nhé

Nếu bạn đã hiểu những gì ở bên trên thì chúc mừng bạn, bạn đã biết đến domain-driven design. Bạn có thể đọc thêm về nó tại đây

3.2. Code một Class Java

Ok, nếu bạn đã hiểu phân bên trên rồi thì mình tiếp tục nhé!
Nếu bạn chưa quá quen thuộc với ngôn ngữ lập trình Java, các bạn có thể đọc tại đây


Bây giờ, mình sẽ giả định rằng, mục đích của mình là bán xe nhé.


Mình sẽ tận dụng lại project mình đã tạo từ trước. Nếu bạn chưa tạo được project thì có thể xem bài này.
Tiếp theo mình sẽ sử dụng ngôn ngữ Java để bắt đầu tạo thành Class ở trong code, mình sẽ tạo một file java mới và đặt tên là Car.java

public class Car {      // Lớp xe ô tô
    String brand;       // Hãng xe
    String name;        // Tên dòng xe
    String color;       // Màu xe
    double price;       // Giá tiền
    int numberOfSeat;   // Số ghế
    int productionYear; // Năm sản xuất
}

Ở phần tạo lớp có một lưu ý nhỏ là cái tên class “public class Car” kìa, nó bắt buộc phải trùng với tên file Java bạn tạo nhé. Ở đây class Car thì nó phải nằm trong file Car.java nhé

3.3. Tạo ra Object từ Class

Đến đây, bạn đã tạo xong một Class trong Java rồi đấy. Tiếp theo hãy tạo ra một object dựa trên class này.
Trong project chúng ta đã có sẵn một file Main.java rồi, mở file đó ra và bắt đầu viết trong hàm main() nhé:

public static void main(String[] args) {
Car toyota = new Car(); // Tạo mới đối tượng toyota từ lớp Car
toyota.brand = "Toyota"; // Gán giá trị cho thuộc tính brand của đối tượng toyota là "Toyota"
toyota.name = "Camry"; // Gán giá trị cho thuộc tính name của đối tượng toyota là "Camry"
toyota.color = "Blue"; // Gán giá trị cho thuộc tính color của đối tượng toyota là "Blue"
toyota.price = 1000000000; // Gán giá trị cho thuộc tính price của đối tượng toyota là 1.000.000.000
toyota.numberOfSeat = 5; // Gán giá trị cho thuộc tính numberOfSeat của đối tượng toyota là 5
toyota.productionYear = 2025; // Gán giá trị cho thuộc tính productionYear của đối tượng toyota là 2025

Car honda = new Car(); // Tạo mới đối tượng honda từ lớp Car
honda.brand = "Honda"; // Gán giá trị cho thuộc tính brand của đối tượng honda là "Honda"
honda.name = "City"; // Gán giá trị cho thuộc tính name của đối tượng honda là "City"
honda.color = "Red"; // Gán giá trị cho thuộc tính color của đối tượng honda là "Red"
honda.price = 460000000; // Gán giá trị cho thuộc tính price của đối tượng honda là 460.000.000
honda.numberOfSeat = 5; // Gán giá trị cho thuộc tính numberOfSeat của đối tượng honda là 5
honda.productionYear = 2021; // Gán giá trị cho thuộc tính productionYear của đối tượng honda là 2021
}

Như vậy là bạn đã tạo ra được 2 object toyota và honda từ lớp Car rồi đó.

Về cơ bản thì các đến đây các bạn đã nắm qua được về class và object rồi đó, để chi tiết hơn nữa thì các bạn hãy đọc bài tiếp nhé

4. Vai trò của Class và Object trong lập trình

ClassObject chính là trái tim của lập trình hướng đối tượng.
Chúng giúp:

  • Mô hình hóa thế giới thực: dễ dàng chuyển những đối tượng ngoài đời vào trong chương trình.
  • Quản lý dữ liệu và hành vi: gọn gàng, trực quan.
  • Tái sử dụng mã nguồn: chỉ cần xây dựng Class một lần, có thể tạo ra nhiều Object khác nhau.
  • Phát triển phần mềm theo module: dễ bảo trì, dễ mở rộng khi dự án lớn dần.

Không có Class và Object, lập trình hướng đối tượng sẽ không thể tồn tại.

5. Kết luận

Nếu coi lập trình hướng đối tượng như xây dựng một thế giới thu nhỏ, thì Class chính là “bản thiết kế”, còn Object là “các nhân vật sống động” hoạt động trong thế giới đó.

Khi bạn hiểu rõ Class và Object, bạn đã nắm trong tay chìa khóa quan trọng để tiến xa trong hành trình lập trình của mình — đặc biệt với Java, C#, C++, Python,…

Mình sẽ nêu bật một vài thứ cần phải nhớ:

  • Class là bản vẽ
  • Object là thể hiện của class
  • Object được tạo ra từ Class

Tóm lại, nắm vững khái niệm classobject thì bạn sẽ thấy lập trình hướng đối tượng khá đơn giản

Để lại một bình luận

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 *

Lên đầu trang