Lập trình Hướng đối tượng (OOP) - Lớp và Đối tượng

Đăng ngày: 28-08-2025 17:45
học javalập trình javajava ooplập trình hướng đối tượngclass trong javaobject trong javađối tượng trong javaoop cho người mới bắt đầu

Chào mừng bạn đến với bài 7 của series "Chinh Phục Java"! Ở những bài trước, chúng ta đã làm quen với các khối xây dựng cơ bản của Java. Bạn đã biết về biến, vòng lặp, và phương thức. Hôm nay, chúng ta sẽ khám phá một tư duy lập trình hoàn toàn mới. Đó là **Lập trình Hướng đối tượng (Object-Oriented Programming - OOP)**. Đây chính là sức mạnh cốt lõi và là lý do Java trở nên phổ biến đến vậy.

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

Trước đây, chúng ta viết chương trình theo lối "tuần tự". Tức là ra lệnh cho máy tính làm gì từng bước một. OOP có một cách tiếp cận khác. Nó nhìn thế giới thực như một tập hợp các **đối tượng (objects)**. Ví dụ: một chiếc xe hơi, một con người, một tài khoản ngân hàng. Mỗi đối tượng đều có hai đặc điểm chính: các **thuộc tính (properties)** và các **hành vi (behaviors)**.

Ví dụ, một đối tượng "XeHoi" có các thuộc tính như màu sắc, thương hiệu, tốc độ tối đa. Nó cũng có các hành vi như chạy, dừng lại, bật đèn. OOP cho phép chúng ta mô hình hóa các đối tượng trong thế giới thực này thành các đối tượng trong code. Cách làm này giúp chương trình trở nên dễ hiểu, dễ quản lý và gần gũi hơn với cách chúng ta tư duy.

2. Lớp (Class) - Bản thiết kế của Đối tượng

Làm sao để tạo ra các đối tượng? Chúng ta cần một "bản thiết kế" hoặc một "khuôn mẫu". Trong OOP, bản thiết kế đó được gọi là **Lớp (Class)**. Một lớp mô tả chung cho một loại đối tượng. Nó định nghĩa tất cả các thuộc tính và hành vi mà một đối tượng thuộc loại đó sẽ có. Lớp không phải là một đối tượng cụ thể. Nó chỉ là một bản vẽ.

Ví dụ, kiến trúc sư tạo ra bản thiết kế của một ngôi nhà. Bản thiết kế đó chính là "Lớp". Dựa trên bản thiết kế đó, các kỹ sư có thể xây dựng nên nhiều ngôi nhà thực tế. Mỗi ngôi nhà thực tế đó chính là một "Đối tượng". Tất cả các ngôi nhà này đều có chung các đặc điểm từ bản thiết kế. Nhưng mỗi ngôi nhà là một thực thể riêng biệt.

Hãy cùng xem cách tạo một lớp `Student` đơn giản trong Java.


// File: Student.java
public class Student {
    // 1. Thuộc tính (Fields / Properties)
    String name;
    int age;
    String studentId;

    // 2. Hành vi (Methods / Behaviors)
    public void study() {
        System.out.println(name + " đang học bài.");
    }

    public void displayInfo() {
        System.out.println("Tên: " + name);
        System.out.println("Tuổi: " + age);
        System.out.println("Mã sinh viên: " + studentId);
    }
}

3. Đối tượng (Object) - Thể hiện của Lớp

Khi đã có bản thiết kế (Lớp), chúng ta có thể tạo ra các đối tượng thực tế. Quá trình này được gọi là **khởi tạo (instantiation)**. Mỗi đối tượng được tạo ra từ một lớp là một **thể hiện (instance)** của lớp đó. Bạn sử dụng từ khóa `new` để tạo một đối tượng mới. Các đối tượng khác nhau có thể có các giá trị thuộc tính khác nhau.

Hãy xem cách chúng ta tạo ra hai đối tượng sinh viên khác nhau từ lớp `Student` đã định nghĩa ở trên. Chúng ta sẽ làm điều này trong phương thức `main`.


// File: School.java
public class School {
    public static void main(String[] args) {
        // Tạo đối tượng sinh viên thứ nhất
        Student student1 = new Student();
        
        // Gán giá trị cho các thuộc tính của student1
        student1.name = "Nguyễn Văn An";
        student1.age = 20;
        student1.studentId = "SV001";

        // Tạo đối tượng sinh viên thứ hai
        Student student2 = new Student();
        student2.name = "Trần Thị Bình";
        student2.age = 21;
        student2.studentId = "SV002";

        // Gọi các phương thức của từng đối tượng
        System.out.println("--- Thông tin sinh viên 1 ---");
        student1.displayInfo();
        student1.study();

        System.out.println("\n--- Thông tin sinh viên 2 ---");
        student2.displayInfo();
    }
}

Như bạn thấy, `student1` và `student2` là hai đối tượng hoàn toàn riêng biệt. Chúng được tạo ra từ cùng một lớp `Student` nhưng có các giá trị thuộc tính khác nhau.

Lập trình Hướng đối tượng (OOP) - Lớp và Đối tượng - 0

4. Hàm khởi tạo (Constructor)

Việc gán giá trị cho từng thuộc tính sau khi tạo đối tượng có vẻ hơi dài dòng. Java cung cấp một cơ chế đặc biệt gọi là **hàm khởi tạo (constructor)**. Đây là một phương thức đặc biệt có tên trùng với tên lớp. Nó được tự động gọi mỗi khi bạn tạo một đối tượng mới bằng từ khóa `new`. Hàm khởi tạo thường được dùng để gán các giá trị ban đầu cho các thuộc tính.

Hãy cập nhật lại lớp `Student` với một hàm khởi tạo. Nó giúp việc tạo đối tượng mới trở nên nhanh chóng và gọn gàng hơn.


// File: Student.java (phiên bản cập nhật)
public class Student {
    String name;
    int age;
    String studentId;

    // Hàm khởi tạo (Constructor)
    public Student(String initialName, int initialAge, String initialId) {
        // Từ khóa 'this' dùng để tham chiếu đến các thuộc tính của đối tượng hiện tại
        this.name = initialName;
        this.age = initialAge;
        this.studentId = initialId;
    }
    
    // Các phương thức study() và displayInfo() giữ nguyên
    // ...
}

// File: School.java (cách sử dụng mới)
public class School {
    public static void main(String[] args) {
        // Tạo đối tượng và truyền giá trị ngay trong lúc khởi tạo
        Student student1 = new Student("Nguyễn Văn An", 20, "SV001");
        Student student2 = new Student("Trần Thị Bình", 21, "SV002");

        student1.displayInfo();
    }
}

Kết luận

Bạn vừa đặt những viên gạch đầu tiên vào thế giới Lập trình Hướng đối tượng. Bạn đã hiểu được khái niệm cốt lõi về Lớp và Đối tượng. Lớp là bản thiết kế, còn đối tượng là các thể hiện thực tế. Tư duy này sẽ giúp bạn xây dựng các chương trình phức tạp một cách có tổ chức. Ở bài tiếp theo, chúng ta sẽ khám phá bốn trụ cột của OOP. Đó là Đóng gói, Kế thừa, Đa hình và Trừu tượng.

Chức năng bình luận đã được tắt cho bài viết này.