Lập trình Hướng Đối tượng (OOP) trong Java

OOP là một trong những khái niệm cốt lõi của Java. Hiểu rõ 4 trụ cột của OOP sẽ giúp bạn thiết kế code tốt hơn.

1. Encapsulation (Đóng gói)

Che giấu dữ liệu nội bộ và chỉ cho phép truy cập thông qua các phương thức công khai.

public class BankAccount {
    // Private fields - không thể truy cập trực tiếp
    private double balance;
    private String accountNumber;
    
    // Public methods để tương tác
    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;
        }
    }
}

2. Inheritance (Kế thừa)

Class con kế thừa thuộc tính và phương thức từ class cha.

// Class cha
public class Animal {
    protected String name;
    
    public void eat() {
        System.out.println(name + " is eating");
    }
}

// Class con kế thừa
public class Dog extends Animal {
    public void bark() {
        System.out.println(name + " is barking");
    }
}

// Sử dụng
Dog dog = new Dog();
dog.name = "Buddy";
dog.eat();  // Kế thừa từ Animal
dog.bark(); // Phương thức riêng của Dog

3. Polymorphism (Đa hình)

Một đối tượng có thể có nhiều hình thái khác nhau.

// Overloading - Đa hình compile-time
public class Calculator {
    public int add(int a, int b) {
        return a + b;
    }
    
    public double add(double a, double b) {
        return a + b;
    }
    
    public int add(int a, int b, int c) {
        return a + b + c;
    }
}

// Overriding - Đa hình runtime
public class Animal {
    public void makeSound() {
        System.out.println("Some sound");
    }
}

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

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

// Sử dụng
Animal myPet = new Dog();
myPet.makeSound(); // Output: Bark!

myPet = new Cat();
myPet.makeSound(); // Output: Meow!

4. Abstraction (Trừu tượng)

Ẩn chi tiết implementation, chỉ hiển thị những gì cần thiết.

// Abstract class
public abstract class Shape {
    protected String color;
    
    // Abstract method - bắt buộc override
    public abstract double calculateArea();
    
    // Concrete method
    public void setColor(String color) {
        this.color = color;
    }
}

public class Circle extends Shape {
    private double radius;
    
    public Circle(double radius) {
        this.radius = radius;
    }
    
    @Override
    public double calculateArea() {
        return Math.PI * radius * radius;
    }
}

// Interface - trừu tượng 100%
public interface Drawable {
    void draw(); // abstract by default
}

public class Rectangle extends Shape implements Drawable {
    private double width, height;
    
    @Override
    public double calculateArea() {
        return width * height;
    }
    
    @Override
    public void draw() {
        System.out.println("Drawing rectangle");
    }
}

Lợi ích của OOP

Kết luận

4 trụ cột của OOP (Encapsulation, Inheritance, Polymorphism, Abstraction) là nền tảng để viết code Java chuyên nghiệp. Hãy thực hành thường xuyên để thành thạo!