Xin chào các bạn
Mình là Cường- Sinh viên khóa java 21st
Ở blog trước chúng ta đã được khái quát qua các khái niệm java core là gì, Object Oriented Programing là gì?
Link: https://techmaster.vn/posts/38077/welcome-to-java-core
Thì hôm nay Cường sẽ giải thích sâu hơn về Object Oriented Programing hay là OOP trong java nhé👌👌

Object Oriented Programing - OOP

javaoopimg

Mục Lục

  • Khái niệm về lập trình hướng đối tượng trong java
  • Đối tượng (Object)
  • Lớp (Class)

Khái niệm về lập trình hướng đối tượng trong java (Object Oriented Programming - OOP)

Khái Niệm

  • Một đối tượng có thể được hiểu là một thực thể bao gồm dữ liệu (thuộc tính) và các phương thức (Hành vi) để tương tác với dữ liệu

Ví dụ

cuongimg

Đối tượng Cường có các thuộc tính “Tên:Trần Triều Cường,tuổi:20, cao: 1,7m, nặng: 69kg, tình trạng: độc thân, sở thích: nấu ăn, thích mèo, thích cậu❤❤”

  • Lập trình hướng đối tượng (Object Oriented Programming - OOP) là phương pháp lập trình dưa trên việc sử dụng các đối tượng để thiết kế và phát triển phần mềm.

Bốn đặc điểm chính của lập trình hướng đối tượng (Object Oriented Programming - OOP):

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

Đóng gói (encapsulation) là một trong bốn nguyên tắc cơ bản của lập trình hướng đối tượng (OOP). Đóng gói là khả năng ẩn các chi tiết triển khai của đối tượng, giúp cho đối tượng dễ sử dụng và bảo trì hơn.

encapsulationimg

Cụ thể, đóng gói được thể hiện qua các điểm sau:

  • Đóng gói các dữ liệu và mã của đối tượng thành một đơn vị duy nhất. Điều này giúp cho việc sử dụng đối tượng trở nên đơn giản hơn, vì người sử dụng chỉ cần quan tâm đến các thuộc tính và phương thức của đối tượng mà không cần phải quan tâm đến cách thức triển khai các thuộc tính và phương thức đó.
    Hạn chế truy cập trực tiếp đến các dữ liệu và mã của đối tượng. Điều này giúp cho đối tượng trở nên an toàn và ổn định hơn, vì chỉ có các phương thức của đối tượng mới có thể truy cập đến các dữ liệu và mã của đối tượng.
  • Đóng gói được thực hiện bằng cách sử dụng các từ khóa truy cập trong ngôn ngữ lập trình. Các từ khóa truy cập được sử dụng để chỉ định mức độ truy cập của các thuộc tính và phương thức của đối tượng. Trong ngôn ngữ lập trình Java, các từ khóa truy cập được sử dụng như sau:
    Accessmodifilerimg

Tính kế thừa (inheritance)

cho phép một lớp mới kế thừa các thuộc tính và phương thức từ một lớp khác, gọi là lớp cha. Các lớp con không cần phải định nghĩa lại các thuộc tính và phương thức đã có trong lớp cha, mà có thể sử dụng lại trực tiếp. Ngoài ra, các lớp con cũng có thể mở rộng hoặc thay đổi các thuộc tính và phương thức đã được kế thừa từ lớp cha.

inheritanceimg

Kế thừa có thể được chia thành nhiều loại, bao gồm:

  • Kế thừa đơn: Một lớp chỉ có thể kế thừa từ một lớp khác.
  • Kế thừa đa: Một lớp có thể kế thừa từ nhiều lớp khác.
  • Kế thừa đa cấp: Một lớp có thể kế thừa từ một lớp cha, và lớp cha đó có thể kế thừa từ một lớp khác.
  • Kế thừa thứ bậc: Một lớp có thể kế thừa từ nhiều lớp cha, và các lớp cha đó có thể có mối quan hệ với nhau.

Tính đa hình (polymorphism)

Cho phép các đối tượng khác nhau phản ứng khác nhau với cùng một phương thức, tùy thuộc vào kiểu đối tượng hoặc lớp của chúng

polymorphismimg

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

Cho phép tạo ra các lớp đối tượng mà chỉ tập chung vào các chi tiết cần thiết, che giấu nhưng phần chi tiết phức tạp không cần thiết

abstractionimg

Tính chất này được thể hiện qua việc sử dụng interface hoặc abstract class.

  • Interface là một tập hợp các phương thức. Các lớp có thể triển khai một interface để hứa hẹn thực hiện các phương thức của giao diện đó.
  • Abstract class là một lớp không thể được khởi tạo, nhưng có thể được sử dụng làm lớp cha cho các lớp con. Các lớp con có thể kế thừa các thuộc tính và phương thức từ lớp trừu tượng, nhưng có thể thay đổi cách thức triển khai của các phương thức đó.

Đối tượng (Object)

Đối tượng là một thực thể có trạng thái và hành vi. Nó có thể mang tính vật lý hoặc logic.

  • Nếu ta xem xét thực tế ta có thể tìm thấy nhiều đồ vật xung quanh ta: cái bàn, con chó, con người, v.v… Tất cả các đối tượng này đều có thuộc tính và hành vi.

  • Hãy xem xét một chiếc xe ô tô, một đối tượng trong thế giới thực. Thuộc tính của nó có thể bao gồm – hãng xe, màu sắc, kiểu động cơ, năm sản xuất, và các hành vi của nó là – khởi động, lái, phanh, tăng tốc.

  • Tương tự, khi chúng ta xây dựng một đối tượng xe ô tô trong phần mềm, những đặc điểm này sẽ được biểu diễn thông qua các trường (field) và phương thức (method)

Ví dụ:

Thuộc tính (fields):
  • hãng xe (String brand)
  • màu sắc (String color)
  • kiểu động cơ (String engineType)
  • năm sản xuất (int yearOfManufacture)
    Hành vi (methods):
khởi động (void start())
  • lái (void drive())
  • phanh (void brake())
  • tăng tốc (void accelerate())
public class Car {
    // Thuộc tính của xe ô tô
    private String brand;
    private String color;
    private String engineType;
    private int yearOfManufacture;

    // Constructor
    public Car(String brand, String color, String engineType, int yearOfManufacture) {
        this.brand = brand;
        this.color = color;
        this.engineType = engineType;
        this.yearOfManufacture = yearOfManufacture;
    }

    // Hành vi của xe ô tô
    public void start() {
        System.out.println("The car is starting.");
    }

    public void drive() {
        System.out.println("The car is driving.");
    }

    public void brake() {
        System.out.println("The car is braking.");
    }

    public void accelerate() {
        System.out.println("The car is accelerating.");
    }
}

Lớp (Class)

  • Chúng ta có thể xem lớp như một khuôn mẫu (template) của đối tượng (Object). Trong đó bao gồm dữ liệu của đối tượng (fields hay properties) và các phương thức(methods) tác động lên thành phần dữ liệu đó gọi là các phương thức của lớp.

Cách khai báo 1 class:

[modifiers] class ClassName {
    // Các thuộc tính (fields)
    // Các phương thức (methods)
}

Trong đó:

  • modifiers: Từ khóa chỉ định quyền truy cập và các thuộc tính đặc biệt của lớp. Có thể là public, private, protected, hoặc bỏ qua nếu không cần thiết. Ngoài ra, các từ khóa như abstract hoặc final cũng có thể được sử dụng để chỉ định tính chất đặc biệt của lớp.
  • ClassName: Tên của lớp, nên bắt đầu bằng chữ cái viết hoa và tuân theo quy tắc đặt tên trong Java.

Ví dụ :

public class Person {
    // Các thuộc tính
    private String name;
    private int age;

    // Constructor (hàm khởi tạo)
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Phương thức để lấy tên
    public String getName() {
        return name;
    }

    // Phương thức để thiết lập tên
    public void setName(String name) {
        this.name = name;
    }

    // Phương thức để lấy tuổi
    public int getAge() {
        return age;
    }

    // Phương thức để thiết lập tuổi
    public void setAge(int age) {
        this.age = age;
    }

    // Phương thức hiển thị thông tin đối tượng
    public void displayInfo() {
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
    }
}

Khởi tạo 1 class

  • Để khởi tạo một lớp trong Java, bạn cần sử dụng từ khóa new kết hợp với hàm khởi tạo (constructor) của lớp đó. Quá trình này được gọi là tạo một đối tượng từ lớp.
    ClassName objectName = new ClassName(arguments);

Ví dụ:

public class Main {
    public static void main(String[] args) {
        // Khởi tạo một đối tượng của lớp Person
        Person person1 = new Person("John Doe", 25);

        // Sử dụng phương thức của đối tượng để hiển thị thông tin
        person1.displayInfo();
    }
}