TopDev

Khái niệm Hướng đối tượng (Object-Oriented Programming - OOP)

minhu 📖 7 phút đọc

Khái niệm Hướng đối tượng (Object-Oriented Programming - OOP)#

OOP là một phương pháp lập trình dựa trên các đối tượng và lớp. Các đối tượng là các thực thể có dữ liệu (thuộc tính) và hành vi (phương thức). OOP giúp tổ chức mã nguồn tốt hơn, dễ bảo trì, mở rộng, và tái sử dụng. OOP bao gồm các khái niệm chính sau:

1. Lớp và Đối tượng (Class and Object)

  • Lớp (Class): Là một mẫu hoặc bản thiết kế cho các đối tượng. Lớp định nghĩa các thuộc tính (biến) và hành vi (phương thức) mà các đối tượng của lớp đó sẽ có.

  • Đối tượng (Object): Là một thể hiện cụ thể của lớp. Đối tượng chứa dữ liệu (trạng thái) và các phương thức để thao tác với dữ liệu đó.

Ví dụ: ` public class Dog { String name; int age;

public void bark() {
    System.out.println(name + " is barking.");
}

}

public class Main { public static void main(String[] args) { Dog myDog = new Dog(); // Tạo đối tượng từ lớp Dog myDog.name = "Buddy"; myDog.age = 3; myDog.bark(); // Output: Buddy is barking. } } `

2. Phương thức (Methods)

Phương thức là các hàm bên trong lớp. Phương thức thực hiện các hành động hoặc thao tác dữ liệu của đối tượng.

Ví dụ: public class Calculator { public int add(int a, int b) { return a + b; } }

3. Nạp chồng phương thức (Overloading)

Nạp chồng phương thức là khi bạn có nhiều phương thức cùng tên nhưng khác nhau về số lượng hoặc kiểu dữ liệu của tham số.

Ví dụ: ` public class Printer { public void print(int number) { System.out.println("Printing number: " + number); }

public void print(String text) {
    System.out.println("Printing text: " + text);
}

} `

4. Constructor

Constructor là một phương thức đặc biệt được gọi khi tạo một đối tượng. Nó được sử dụng để khởi tạo trạng thái của đối tượng.

Ví dụ: ` public class Person { String name; int age;

// Constructor
public Person(String name, int age) {
    this.name = name;
    this.age = age;
}

} `

5. Từ khóa static

Từ khóa static chỉ ra rằng biến hoặc phương thức thuộc về lớp chứ không phải đối tượng. Các thành viên static có thể được truy cập mà không cần tạo đối tượng của lớp.

Ví dụ: public class MathUtil { public static int square(int number) { return number * number; } }

6. Từ khóa this

Từ khóa this đại diện cho đối tượng hiện tại trong lớp. Nó thường được sử dụng để phân biệt giữa biến thành viên và biến cục bộ có cùng tên.

Ví dụ: ` public class Person { String name;

public void setName(String name) {
    this.name = name; // `this.name` tham chiếu đến biến thành viên, `name` tham chiếu đến tham số
}

} `

7. Tính kế thừa (IS-A)

Kế thừa là cơ chế cho phép một lớp (lớp con) kế thừa thuộc tính và phương thức từ một lớp khác (lớp cha). Tính kế thừa được thể hiện bằng từ khóa extends.

Ví dụ: ` public class Animal { public void eat() { System.out.println("This animal is eating."); } }

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

8. Quan hệ (HAS-A)

Quan hệ "HAS-A" mô tả việc một lớp chứa một hoặc nhiều đối tượng của lớp khác. Đây là cách để tổ chức và cấu trúc các đối tượng.

Ví dụ: ` public class Engine { // Engine properties and methods }

public class Car { Engine engine; // Car HAS-A Engine

public Car() {
    engine = new Engine();
}

} `

9. Ghi đè phương thức (Overriding)

Ghi đè phương thức là khi một lớp con cung cấp một cài đặt cụ thể cho phương thức đã được định nghĩa trong lớp cha. Điều này cho phép lớp con thay đổi hành vi của phương thức.

Ví dụ: ` public class Animal { public void makeSound() { System.out.println("Animal makes a sound."); } }

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

10. Kiểu trả về Covariant

Covariant return type cho phép một phương thức trong lớp con trả về kiểu dữ liệu con của kiểu dữ liệu được trả về bởi phương thức trong lớp cha.

Ví dụ: ` public class Animal { public Animal getAnimal() { return new Animal(); } }

public class Dog extends Animal { @Override public Dog getAnimal() { return new Dog(); } } `

11. Từ khóa super

Từ khóa super được sử dụng để truy cập các phương thức và thuộc tính của lớp cha. Nó cũng được sử dụng để gọi constructor của lớp cha.

Ví dụ: ` public class Animal { public void eat() { System.out.println("Animal is eating."); } }

public class Dog extends Animal { @Override public void eat() { super.eat(); // Gọi phương thức eat của lớp cha System.out.println("Dog is eating."); } } `

12. Từ khóa final

  • Biến: Khi biến được khai báo với từ khóa final, giá trị của nó không thể thay đổi sau khi được gán.

  • Phương thức: Phương thức không thể bị ghi đè trong lớp con.

  • Lớp: Lớp không thể bị kế thừa.

Ví dụ: ` public final class Constants { public static final int MAX_VALUE = 100; }

public class Dog { public final void bark() { System.out.println("Dog is barking."); } } `

13. Tính đa hình (Polymorphism)

Tính đa hình cho phép các đối tượng của các lớp khác nhau có thể được xử lý thông qua cùng một giao diện. Đa hình có thể được đạt được thông qua ghi đè phương thức và nạp chồng phương thức.

Ví dụ: ` public class Animal { public void makeSound() { System.out.println("Animal makes a sound."); } }

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

public class Main { public static void main(String[] args) { Animal myDog = new Dog(); myDog.makeSound(); // Output: Dog barks. } } `

14. Dynamic Binding

Dynamic binding (hoặc late binding) là khi loại của đối tượng được xác định tại thời điểm chạy, cho phép gọi phương thức ghi đè.

Ví dụ: ` public class Animal { public void makeSound() { System.out.println("Animal makes a sound."); } }

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

public class Main { public static void main(String[] args) { Animal myAnimal = new Dog(); myAnimal.makeSound(); // Output: Dog barks. } } `

15. Toán tử instanceof

Toán tử instanceof kiểm tra xem một đối tượng có phải là thể hiện của một lớp cụ thể hoặc lớp con của nó hay không.

Ví dụ: public class Main { public static void main(String[] args) { Animal myDog = new Dog(); if (myDog instanceof Dog) { System.out.println("myDog is an instance of Dog."); } } }

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

Tính trừu tượng che giấu chi tiết triển khai của đối tượng và chỉ hiển thị các thuộc tính cần thiết. Điều này được thực hiện thông qua các lớp trừu tượng và giao diện.

Ví dụ: ` public abstract class Animal { public abstract void makeSound(); }

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

17. Lớp abstract (Abstract Class)

Lớp abstract không thể được khởi tạo và có thể chứa các phương thức abstract (phương thức không có cài đặt).

Ví dụ: ` public abstract class Shape { abstract void draw(); }

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

18. Interface

Interface định nghĩa một

Bài liên quan trong #Java

✓ Đã sao chép link