Rate this post

Lập trình hướng đối tượng (Object-Oriented Programming – OOP) là một phương pháp lập trình dựa trên khái niệm “đối tượng” (object) để thiết kế các ứng dụng và chương trình máy tính. OOP mang lại nhiều lợi ích như dễ bảo trì, tái sử dụng mã nguồn và khả năng mở rộng. Trong Java, OOP đóng vai trò quan trọng, giúp lập trình viên xây dựng các ứng dụng phức tạp một cách rõ ràng và hiệu quả.

Các khái niệm cơ bản trong OOP

Đối tượng (Object)

Đối tượng là thực thể trong thế giới thực hoặc trong chương trình, có trạng thái (dữ liệu) và hành vi (phương thức). Mỗi đối tượng là một instance của một lớp.

Lớp (Class)

Lớp là một bản thiết kế hoặc khuôn mẫu cho các đối tượng. Lớp xác định các thuộc tính và phương thức mà các đối tượng của nó sẽ có.

Thuộc tính (Attributes)

Thuộc tính là các biến được khai báo trong lớp, biểu thị trạng thái của đối tượng.

Phương thức (Methods)

Phương thức là các hàm được định nghĩa trong lớp, biểu thị hành vi của đối tượng.

Các nguyên tắc cơ bản của OOP

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

Tính đóng gói là nguyên tắc gói gọn dữ liệu và các phương thức thao tác dữ liệu vào một đơn vị, thường là một lớp, và che giấu chi tiết thực thi của chúng khỏi các đối tượng khác. Điều này giúp bảo vệ dữ liệu và giảm sự phụ thuộc giữa các thành phần của chương trình.

Tính kế thừa (Inheritance)

Tính kế thừa 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, giúp tái sử dụng mã nguồn và tạo ra các cấu trúc phân cấp tự nhiên.

Tính đa hình (Polymorphism)

Tính đa hình cho phép một phương thức có thể hoạt động trên nhiều đối tượng khác nhau theo những cách khác nhau. Điều này có thể đạt được qua overloading và overriding.

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

Tính trừu tượng là quá trình ẩn đi các chi tiết thực thi và chỉ hiển thị các tính năng cần thiết của đối tượng. Điều này có thể thực hiện bằng cách sử dụng các lớp trừu tượng và interfaces.

Tạo và sử dụng lớp và đối tượng trong Java

Cách định nghĩa một lớp

Một lớp được định nghĩa bằng từ khóa class theo sau là tên lớp và các thuộc tính, phương thức bên trong.

public class Person {
    String name;
    int age;

    void display() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}

Khởi tạo và sử dụng đối tượng

Đối tượng được khởi tạo từ lớp bằng từ khóa new.

Person person = new Person();
person.name = "John";
person.age = 30;
person.display();

Ví dụ cơ bản về lớp và đối tượng

public class Car {
    String model;
    int year;

    void showDetails() {
        System.out.println("Model: " + model);
        System.out.println("Year: " + year);
    }

    public static void main(String[] args) {
        Car car = new Car();
        car.model = "Toyota";
        car.year = 2020;
        car.showDetails();
    }
}

Encapsulation trong Java

Định nghĩa và tầm quan trọng của tính đóng gói

Tính đóng gói bảo vệ dữ liệu bằng cách ẩn chi tiết thực thi và chỉ cung cấp các phương thức công khai để truy cập và thay đổi dữ liệu.

Sử dụng các phương thức getter và setter

Getter và setter là các phương thức công khai dùng để truy cập và thay đổi giá trị của các thuộc tính.

public class Employee {
    private String name;
    private double salary;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }
}

Ví dụ về tính đóng gói trong Java

public class BankAccount {
    private double balance;

    public double getBalance() {
        return balance;
    }

    public void deposit(double amount) {
        if (amount > 0) {
            balance += amount;
        }
    }

    public void withdraw(double amount) {
        if (amount > 0 && amount <= balance) {
            balance -= amount;
        }
    }
}

Inheritance trong Java

Kế thừa cho phép lớp con tái sử dụng các thuộc tính và phương thức của lớp cha, giúp giảm thiểu mã nguồn và tạo cấu trúc phân cấp.

Cách sử dụng từ khóa extends

Lớp con kế thừa từ lớp cha bằng từ khóa extends.

public class Animal {
    void eat() {
        System.out.println("This animal eats food.");
    }
}

public class Dog extends Animal {
    void bark() {
        System.out.println("The dog barks.");
    }
}

Ví dụ về tính kế thừa trong Java

public class Vehicle {
    String brand;
    int year;

    void display() {
        System.out.println("Brand: " + brand);
        System.out.println("Year: " + year);
    }
}

public class Car extends Vehicle {
    int numberOfDoors;

    void showDetails() {
        display();
        System.out.println("Number of doors: " + numberOfDoors);
    }

    public static void main(String[] args) {
        Car car = new Car();
        car.brand = "Honda";
        car.year = 2021;
        car.numberOfDoors = 4;
        car.showDetails();
    }
}

Polymorphism trong Java

Đ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ý thông qua cùng một giao diện.

Overloading và Overriding

  • Overloading: Định nghĩa nhiều phương thức cùng tên nhưng khác tham số.
  • Overriding: Lớp con định nghĩa lại phương thức của lớp cha.
public class MathUtils {
    // Overloading
    int add(int a, int b) {
        return a + b;
    }

    double add(double a, double b) {
        return a + b;
    }
}

public class Animal {
    void sound() {
        System.out.println("Animal makes a sound");
    }
}

public class Dog extends Animal {
    // Overriding
    @Override
    void sound() {
        System.out.println("Dog barks");
    }
}

Ví dụ về tính đa hình trong Java

public class Shape {
    void draw() {
        System.out.println("Drawing a shape");
    }
}

public class Circle extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a circle");
    }
}

public class Square extends Shape {
    @Override
    void draw() {
        System.out.println("Drawing a square");
    }
}

public class TestPolymorphism {
    public static void main(String[] args) {
        Shape shape1 = new Circle();
        Shape shape2 = new Square();

        shape1.draw();
        shape2.draw();
    }
}

Abstraction trong Java

Trừu tượng ẩn đi các chi tiết thực thi và chỉ hiển thị các hành vi cần thiết, giúp đơn giản hóa việc sử dụng đối tượng và giảm sự phức tạp.

Sử dụng lớp trừu tượng và interface

  • Lớp trừu tượng: Được khai báo với từ khóa abstract, có thể chứa các phương thức trừu tượng và phương thức cụ thể.
  • Interface: Định nghĩa các phương thức trừu tượng mà các lớp phải triển khai.
abstract class Animal {
    abstract void makeSound();

    void eat() {
        System.out.println("This animal eats food.");
    }
}

interface Drawable {
    void draw();
}

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

class Circle implements Drawable {
    @Override
    public void draw() {
        System.out.println("Drawing a circle");
    }
}

Ví dụ về tính trừu tượng trong Java

abstract class Vehicle {
    abstract void start();

    void stop() {
        System.out.println("Vehicle stopped");
    }


}

class Car extends Vehicle {
    @Override
    void start() {
        System.out.println("Car started");
    }
}

class Motorcycle extends Vehicle {
    @Override
    void start() {
        System.out.println("Motorcycle started");
    }
}

public class TestAbstraction {
    public static void main(String[] args) {
        Vehicle car = new Car();
        Vehicle motorcycle = new Motorcycle();

        car.start();
        car.stop();

        motorcycle.start();
        motorcycle.stop();
    }
}

Kết luận

Lập trình hướng đối tượng trong Java cung cấp các công cụ và kỹ thuật mạnh mẽ để xây dựng các ứng dụng phức tạp một cách rõ ràng và hiệu quả. Hiểu và áp dụng các nguyên tắc OOP giúp lập trình viên viết mã nguồn dễ bảo trì, mở rộng và tái sử dụng. Hãy tiếp tục học hỏi và thực hành để nắm vững kỹ năng này trong các dự án của bạ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 *

Contact Me on Zalo
Call now