Select Page

Vật thể trong Java: Khởi đầu với Class và Object

Bài viết này sẽ cung cấp cho bạn một cái nhìn tổng quan về khái niệm Object trong Java, cách thức hoạt động của Class và Object, cũng như cách sử dụng Phương thức đối tượng. Bạn sẽ hiểu rõ hơn về cách tạo và sử dụng các đối tượng trong Java, từ đó áp dụng vào các dự án lập trình của mình.

Khái niệm Cơ bản về Class và Object

Trong thế giới lập trình hướng đối tượng (OOP), ClassObject là hai khái niệm nền tảng, đặc biệt quan trọng trong Java. Để hiểu rõ về Object trong Java, chúng ta cần bắt đầu bằng việc phân biệt rõ ràng giữa hai khái niệm này.

Class (Lớp)

Một Class có thể được xem như một bản thiết kế hoặc khuôn mẫu. Nó định nghĩa các thuộc tính (dữ liệu) và hành vi (phương thức) mà các Object (đối tượng) của nó sẽ sở hữu. Nói cách khác, Class là một bản phác thảo, còn Object là sản phẩm cụ thể được tạo ra dựa trên bản phác thảo đó. Class không phải là một thực thể vật lý, nó chỉ là một định nghĩa trừu tượng. Ví dụ, nếu bạn có một Class tên là “XeHoi”, nó sẽ định nghĩa các thuộc tính như màu sắc, số chỗ ngồi, và các hành vi như tăng tốc, phanh. Nhưng bản thân Class “XeHoi” không phải là một chiếc xe cụ thể.

Object (Đối tượng)

Một Object là một thể hiện cụ thể của một Class. Nó là một thực thể vật lý tồn tại trong bộ nhớ, có các thuộc tính và hành vi được định nghĩa bởi Class của nó. Khi bạn tạo một Object từ Class “XeHoi”, bạn sẽ có một chiếc xe cụ thể, ví dụ như một chiếc xe màu đỏ, 4 chỗ ngồi. Như vậy, Class và object có mối quan hệ mật thiết: Class là bản thiết kế, còn Object là sản phẩm được tạo ra từ bản thiết kế đó. Mỗi Object là một thể hiện riêng biệt của Class, có thể có các giá trị thuộc tính khác nhau.

Ví dụ minh họa bằng mã Java

Để hiểu rõ hơn, chúng ta sẽ xem xét một ví dụ cụ thể bằng mã Java:


public class Dog {
    String breed;
    String name;
    int age;

    public void bark() {
        System.out.println("Woof!");
    }

    public static void main(String[] args) {
        // Tạo một Object (đối tượng) từ Class Dog
        Dog myDog = new Dog();
        myDog.breed = "Golden Retriever";
        myDog.name = "Buddy";
        myDog.age = 3;

        System.out.println("Breed: " + myDog.breed);
        System.out.println("Name: " + myDog.name);
        System.out.println("Age: " + myDog.age);
        myDog.bark();

        // Tạo một Object khác
        Dog anotherDog = new Dog();
        anotherDog.breed = "Poodle";
        anotherDog.name = "Bella";
        anotherDog.age = 2;

        System.out.println("Breed: " + anotherDog.breed);
        System.out.println("Name: " + anotherDog.name);
        System.out.println("Age: " + anotherDog.age);
        anotherDog.bark();
    }
}

Trong ví dụ này:

  • public class Dog: Định nghĩa một Class tên là “Dog”.
  • String breed;, String name;, int age;: Các thuộc tính của Class “Dog”.
  • public void bark(): Một phương thức của Class “Dog”.
  • Dog myDog = new Dog();: Tạo một Object có tên là “myDog” từ Class “Dog”.
  • Dog anotherDog = new Dog();: Tạo một Object khác có tên là “anotherDog” từ Class “Dog”.

Mỗi Object (myDoganotherDog) là một thể hiện riêng biệt của Class “Dog”, có các giá trị thuộc tính khác nhau, mặc dù chúng đều có các thuộc tính và phương thức được định nghĩa trong Class “Dog”.

Sự khác biệt giữa Class và Object

  • Class là bản thiết kế, Object là sản phẩm cụ thể.
  • Class là trừu tượng, Object là thực thể.
  • Một Class có thể tạo ra nhiều Object.
  • Object chiếm bộ nhớ, Class không chiếm bộ nhớ (chỉ có định nghĩa).

Vai trò của Class và Object trong OOP

Trong lập trình hướng đối tượng, ClassObject là các khái niệm cốt lõi giúp chúng ta tổ chức và quản lý code một cách hiệu quả. Class giúp chúng ta mô hình hóa các đối tượng trong thế giới thực thành các cấu trúc dữ liệu và hành vi, trong khi Object cho phép chúng ta làm việc với các đối tượng này một cách cụ thể. Thông qua việc sử dụng Class và object, chúng ta có thể tạo ra các ứng dụng có cấu trúc rõ ràng, dễ bảo trì và mở rộng.

Hiểu rõ về Object trong Java, Class và object là bước đầu tiên và quan trọng nhất để tiếp cận lập trình hướng đối tượng. Nắm vững các khái niệm này, chúng ta có thể xây dựng các ứng dụng phức tạp một cách dễ dàng và hiệu quả hơn. Sau khi hiểu rõ về Class và Object, chúng ta sẽ tiếp tục tìm hiểu về Phương thức đối tượng và cách chúng tương tác với Object để thực hiện các hành vi cụ thể. Phương thức đối tượng và thao tác trên Object sẽ là chủ đề của chương tiếp theo.

Tiếp nối từ chương trước, nơi chúng ta đã khám phá “Khái niệm Cơ bản về Class và Object”, trong đó chúng ta đã hiểu về việc định nghĩa một Class và tạo một Object từ Class đó, chương này sẽ tập trung vào một khía cạnh quan trọng khác của lập trình hướng đối tượng trong Java: Phương thức đối tượng và cách chúng ta thao tác với Object thông qua các phương thức này.

Phương thức đối tượng, hay còn gọi là method, là các hành động mà một đối tượng có thể thực hiện. Chúng là các khối mã được định nghĩa bên trong một class và được sử dụng để thao tác với dữ liệu của đối tượng đó. Các phương thức này cho phép chúng ta tương tác với các thuộc tính của đối tượng, thực hiện các tính toán, và cung cấp các chức năng cho đối tượng.

Định nghĩa Phương thức Đối tượng

Để định nghĩa một phương thức đối tượng trong Java, chúng ta sử dụng cú pháp sau:


modifier returnType methodName(parameterList) {
    // body of the method
}
  • modifier: Xác định phạm vi truy cập của phương thức (ví dụ: public, private, protected).
  • returnType: Kiểu dữ liệu mà phương thức trả về. Nếu phương thức không trả về giá trị nào, sử dụng từ khóa void.
  • methodName: Tên của phương thức.
  • parameterList: Danh sách các tham số mà phương thức nhận vào (có thể không có tham số).
  • body of the method: Khối mã thực thi của phương thức.

Gọi Phương thức Đối tượng

Sau khi đã định nghĩa một phương thức trong một class, chúng ta có thể gọi phương thức đó trên một đối tượng của class đó bằng cách sử dụng toán tử chấm (.):


objectName.methodName(arguments);

Ví dụ, nếu chúng ta có một đối tượng myCar từ class Car và class Car có một phương thức startEngine(), chúng ta sẽ gọi nó như sau: myCar.startEngine();

Các Loại Phương thức Đối tượng

Có nhiều loại phương thức đối tượng khác nhau, nhưng một số loại phổ biến nhất bao gồm:

  • Phương thức khởi tạo (Constructor): Đây là một phương thức đặc biệt được gọi khi một đối tượng được tạo ra. Nó được sử dụng để khởi tạo trạng thái ban đầu của đối tượng. Constructor có tên giống với tên của class và không có kiểu trả về.
    
    public class Car {
        private String model;
        private String color;
        public Car(String model, String color) {
            this.model = model;
            this.color = color;
        }
    }
    
  • Phương thức truy xuất (Getter): Các phương thức getter được sử dụng để truy cập vào các thuộc tính (biến instance) của đối tượng. Chúng thường có tên bắt đầu bằng get, ví dụ: getModel(), getColor().
    
    public String getModel() {
        return this.model;
    }
    public String getColor() {
        return this.color;
    }
    
  • Phương thức cập nhật (Setter): Các phương thức setter được sử dụng để thay đổi giá trị của các thuộc tính của đối tượng. Chúng thường có tên bắt đầu bằng set, ví dụ: setModel(), setColor().
    
    public void setModel(String model) {
        this.model = model;
    }
    public void setColor(String color) {
        this.color = color;
    }
    
  • Các phương thức khác: Ngoài các loại phương thức trên, chúng ta có thể định nghĩa bất kỳ phương thức nào cần thiết để thực hiện các thao tác cụ thể trên đối tượng, ví dụ: startEngine(), stopEngine(), accelerate(), brake(), v.v.

Ví dụ Minh Họa

Dưới đây là một ví dụ minh họa cách chúng ta có thể sử dụng các phương thức trên một đối tượng của class Car:


public class Car {
    private String model;
    private String color;
    private boolean engineStarted;

    public Car(String model, String color) {
        this.model = model;
        this.color = color;
        this.engineStarted = false;
    }

    public String getModel() {
        return this.model;
    }

    public void setModel(String model) {
        this.model = model;
    }

     public String getColor() {
        return this.color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public void startEngine() {
        this.engineStarted = true;
        System.out.println("Engine started!");
    }

    public void stopEngine() {
        this.engineStarted = false;
        System.out.println("Engine stopped!");
    }

    public boolean isEngineStarted() {
        return this.engineStarted;
    }

    public static void main(String[] args) {
        Car myCar = new Car("Toyota Camry", "Silver");
        System.out.println("Car model: " + myCar.getModel());
        System.out.println("Car color: " + myCar.getColor());
        myCar.startEngine();
        System.out.println("Engine started? " + myCar.isEngineStarted());
        myCar.stopEngine();
        System.out.println("Engine started? " + myCar.isEngineStarted());
        myCar.setColor("Red");
        System.out.println("New color: " + myCar.getColor());
    }
}

Trong ví dụ trên, chúng ta đã tạo một object myCar từ class Car. Chúng ta đã sử dụng các phương thức getter để truy xuất thông tin về xe, và các phương thức khác để khởi động và dừng động cơ, cũng như thay đổi màu sắc của xe. Thông qua các phương thức đối tượng, chúng ta có thể thao tác với dữ liệu của đối tượng một cách an toàn và kiểm soát được. Việc sử dụng các phương thức là một phần quan trọng của lập trình hướng đối tượng, giúp chúng ta tổ chức code một cách logic và dễ bảo trì. Việc hiểu rõ cách sử dụng Class và object, cùng với các phương thức đối tượng, là nền tảng vững chắc để chúng ta tiếp tục khám phá các khái niệm nâng cao hơn trong Java.

Trong chương tiếp theo, chúng ta sẽ tìm hiểu về “Ứng dụng thực tế của Object trong Java”, nơi chúng ta sẽ thấy cách các đối tượng được sử dụng trong các tình huống thực tế.

Ứng dụng thực tế của Object trong Java

Sau khi đã tìm hiểu về Class và object, cũng như cách các Phương thức đối tượng hoạt động, chúng ta sẽ đi sâu vào việc khám phá các ứng dụng thực tế của Object trong Java. Việc nắm vững cách sử dụng Object trong các tình huống cụ thể sẽ giúp bạn hiểu rõ hơn về sức mạnh của lập trình hướng đối tượng.

Ví dụ 1: Quản lý thông tin sản phẩm

Hãy tưởng tượng bạn đang xây dựng một hệ thống quản lý bán hàng. Mỗi sản phẩm trong hệ thống có các thuộc tính như tên, mã sản phẩm, giá, và số lượng tồn kho. Chúng ta có thể tạo một Class `Product` để biểu diễn một sản phẩm, và mỗi sản phẩm cụ thể sẽ là một object của Class này.


public class Product {
    private String productName;
    private String productCode;
    private double price;
    private int stockQuantity;

    public Product(String productName, String productCode, double price, int stockQuantity) {
        this.productName = productName;
        this.productCode = productCode;
        this.price = price;
        this.stockQuantity = stockQuantity;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }

    public String getProductCode() {
        return productCode;
    }

    public void setProductCode(String productCode) {
        this.productCode = productCode;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    public int getStockQuantity() {
        return stockQuantity;
    }

    public void setStockQuantity(int stockQuantity) {
        this.stockQuantity = stockQuantity;
    }

    public void displayProductInfo() {
        System.out.println("Tên sản phẩm: " + productName);
        System.out.println("Mã sản phẩm: " + productCode);
        System.out.println("Giá: " + price);
        System.out.println("Số lượng tồn kho: " + stockQuantity);
    }
}

Trong đoạn mã trên, chúng ta đã định nghĩa Class `Product` với các thuộc tính và các Phương thức đối tượng để truy xuất và cập nhật thông tin sản phẩm. Bây giờ, chúng ta có thể tạo các object từ Class này:


public class Main {
    public static void main(String[] args) {
        Product product1 = new Product("Laptop", "LP001", 1200.0, 50);
        Product product2 = new Product("Mouse", "MS002", 25.0, 200);

        product1.displayProductInfo();
        System.out.println("-------------------");
        product2.displayProductInfo();
    }
}

Mỗi object `product1` và `product2` là một thể hiện của Class `Product`, và chúng có các giá trị thuộc tính riêng biệt. Các Phương thức đối tượng như `displayProductInfo()` cho phép chúng ta thao tác với dữ liệu của từng object.

Ví dụ 2: Quản lý thông tin khách hàng

Tương tự, chúng ta có thể sử dụng Object để quản lý thông tin khách hàng. Chúng ta có thể tạo một Class `Customer` để biểu diễn một khách hàng, với các thuộc tính như tên, địa chỉ, số điện thoại, và email. Mỗi khách hàng cụ thể sẽ là một object của Class `Customer`.


public class Customer {
    private String customerName;
    private String address;
    private String phoneNumber;
    private String email;

    public Customer(String customerName, String address, String phoneNumber, String email) {
        this.customerName = customerName;
        this.address = address;
        this.phoneNumber = phoneNumber;
        this.email = email;
    }

    public String getCustomerName() {
        return customerName;
    }

    public void setCustomerName(String customerName) {
        this.customerName = customerName;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public void displayCustomerInfo() {
        System.out.println("Tên khách hàng: " + customerName);
        System.out.println("Địa chỉ: " + address);
        System.out.println("Số điện thoại: " + phoneNumber);
        System.out.println("Email: " + email);
    }
}

Tương tự như ví dụ trước, chúng ta có thể tạo các object từ Class `Customer`:


public class Main {
    public static void main(String[] args) {
        Customer customer1 = new Customer("John Doe", "123 Main St", "555-1234", "john.doe@example.com");
        Customer customer2 = new Customer("Jane Smith", "456 Oak Ave", "555-5678", "jane.smith@example.com");

        customer1.displayCustomerInfo();
        System.out.println("-------------------");
        customer2.displayCustomerInfo();
    }
}

Mỗi object `customer1` và `customer2` là một thể hiện của Class `Customer`, và chúng chứa thông tin riêng biệt của từng khách hàng.

Ví dụ 3: Mô phỏng đối tượng trong thế giới thực

Ngoài việc quản lý dữ liệu, Object còn được sử dụng để mô phỏng các đối tượng trong thế giới thực. Ví dụ, một chiếc xe có thể được biểu diễn bằng một Class `Car`, với các thuộc tính như màu sắc, số chỗ ngồi, và tốc độ. Các object của Class này sẽ đại diện cho các chiếc xe cụ thể.

Các ví dụ trên chỉ là một vài trong số rất nhiều ứng dụng thực tế của Object trong Java. Việc sử dụng Object giúp chúng ta tổ chức code một cách rõ ràng và dễ quản lý hơn, đồng thời tận dụng được các lợi ích của lập trình hướng đối tượng. Để tiếp tục học hỏi và phát triển kỹ năng, bạn có thể tìm hiểu sâu hơn về các khái niệm như tính đóng gói, tính kế thừa và tính đa hình, vốn là những trụ cột của lập trình hướng đối tượng. Thực hành càng nhiều, bạn sẽ càng trở nên thành thạo trong việc sử dụng Object và các Phương thức đối tượng trong các dự án thực tế.

Chương tiếp theo chúng ta sẽ cùng tìm hiểu về tính đóng gói trong lập trình hướng đối tượng.

Conclusions

Bài viết đã cung cấp cho bạn những kiến thức cơ bản về Object trong Java, bao gồm khái niệm Class, Object và Phương thức. Hy vọng bài viết này sẽ giúp bạn hiểu rõ hơn về lập trình hướng đối tượng và áp dụng vào việc phát triển các ứng dụng Java.