1. Lập trình hướng đối tượng trong Java là gì?

Lập trình hướng đối tượng trong Java hay còn được gọi là Java OOP viết tắt của ObjectOriented Programming . Nó là phương pháp lập trình hỗ trợ công nghệ đối tượng giúp ta đơn giản hóa công việc và tăng năng xuất, giúp các lập trình viên làm với các đối tượng giống như trong thực tế.

Đối tượng ở đây ta sẽ hiểu một cách thực tế nhất(dựa theo cách hiểu của mình) là các sự việc mà có tính chất hành động giống nhau và ta đem nó gom lại thành một nhóm. Ví dụ: xoài, ổi, nhãn, táo sẽ là hoa quả; chó, mèo, lợn, gà là động vật; lớp, tên, mã sinh viên, điểm là đặc điểm của sinh viên,…

2. Các khái niệm lập trình hướng đối tượng trong Java

Trước hết ta sẽ tìm hiểu và nắm bắt được một số khái niệm của lập trình hướng đối tượng trước khi có thể đi sâu vào học. Trong lập trình hướng đối tượng chung hay trong Java nói riêng thì OOP thì đều cung cấp cho ta một số khái niệm như:

  • Object
  • Class
  • Package
  • Tính chất : đa hình, kế thừa, …
  • Một số thuật ngữ : Coupling , Cohesion , Association

2.1. Object trong Java

Object – Đối tượng ở đây ta sẽ hiểu một cách thực tế nhất(dựa theo cách hiểu của mình) là các sự việc mà có tính chất hành động giống nhau và ta đem nó gom lại thành một nhóm. Ví dụ: xoài, ổi, nhãn, táo sẽ là hoa quả; chó, mèo, lợn, gà là động vật; lớp, tên, mã sinh viên, điểm là đặc điểm của sinh viên,…

Trong một đối tượng sẽ bao gồm 2 thông tin: thuộc tính và phương thức

  • Thuộc tính : là những thông tin của đối tượng. Ví dụ người có họ tên, chiều cao, tuổi , …
  • Phương thức : là những thao tác, hành động mà đối tượng đó có thể thực hiện. Ví dụ người có những hành động ăn, ngủ, đi lại, học, …

2.2. Class trong Java

Class hay còn được gọi là lớp. Nó chính là tập hợp các đối tượng. Các đối tượng có cùng trạng thái và hành vi, vì vậy nó định nghĩa các tính chất của một tập hợp các đối tượng cùng kiểu. Và ta có thể sử dụng lớp để tạo ra những đối tượng khác nhau.

Ví dụ có quá nhiều những chiếc ô tô đang được sử dụng nhưng ta đều có thể nói đến đặc điểm chung của nó như: đèn, bánh xe, màu, chất liệu,… Thì ở đây ta có ô tô chính là một lớp còn đối tượng có thể là BMW , G63 , Lamborghini

Ví dụ về code trong Java

public class Student {
    // thuộc tính (instance variable)
    private String id;
    private String name;
    private String information;
     
    // Phương thức này có tên inputInformation và không có giá trị trả về
    public void inputInformation() {
         
    }
     
    // Phương thức này có tên showInformation và có kiểu trả về là String
    public String showInformation() {
     
    }
     
    // hàm main
    public static void main(String[] args) {
         
    }
 
}

2.3. Tính chất lập trình hướng đối tượng trong Java

Ta có 4 tính chất của lập trình hướng đối tượng trong Java:

  • Kế thừa (Inheritance) : cho phép các class sắp xếp thành các mối quan hệ theo thứ bậc (ông -> cha -> con -> cháu). Class cấp thấp có thể sử dụng các thuộc tính, method… của class cấp trên
  • Đa hình (Polymorphism) : đối tượng có thể biểu hiện bằng nhiều hình thức và các hành động khác nhau
  • Trìu tượng (Abstraction) : cho phép ẩn đi quá trình thực thi bên trong và chỉ hiển thị những chức năng
  • Đóng gói (Encapsulation) : liên kết dữ liệu và method lại với nhau và giữ chúng an toàn khỏi những tác động bên ngoài

Trong Java một class có thể cấp quyền cho một thuộc tính hay một phương thức ra bên ngoài dựa vào các từ khoá:

  • public : Cho phép truy cập ở mọi phạm vi
  • private : Cho phép truy cập trong nội bộ class
  • protected : Chỉ cho phép các class kế thừa truy cập
  • default : Chỉ cho phép truy cập nội bộ class và cùng package

2.4. Package trong Java

Package – Gói là một nhóm các kiểu tương tự của các lớp, giao diện và các package con. Package trong Java có thể được phân loại theo hai hình thức: package được dựng sẵn và package do người dùng định nghĩa.

Ví dụ:

package gpcoder; // Package cha
package com.gpcoder; // Package gpcode là con của package com

3. So sánh giữa lập trình OOP và lập trình hướng thủ tục trong Java

Lập trình hướng đối tượng giúp việc phát triển và bảo trì dễ dàng hơn. Trong khi phương pháp lập trình hướng thủ tục là không dẽ dàng quản lý khi code lớn.

Lập trình hướng đối tượng có tính năng ẩn dấu thông tin, trong khi hướng thủ tục có thể truy cập dữ liệu toàn cục ở bất kỳ nơi nào

Lập trình hướng đối tượng cung cấp khả năng mô phỏng sự kiện thực tế hiệu quả hơn.

Ví dụ:

Với một đoạn code sử dụng lập trình hướng thủ tục

class Main{

    public static void main(String[] args) {
       String name = "Thành Nguyễn";
       float height = 1.7f;
       int age = 19;
        
        System.out.println(name);
        System.out.println(height);
        System.out.println(age);
        
    }

}

Kết quả

Thành Nguyễn
1.7
19

Ta có thể chuyển đoạn code trên thành code OOP như sau:

  • Tạo một file có đuôi .java riêng khai báo lớp Person có thuộc tính name , height , age
public class Person {
    String name;
    int age;
    float height;
}
  • Sau đó tạo một đối tượng từ lớp Person và cung cấp thông tin cho nó. Cú pháp Person a = new Person(); có nghĩa là tạo đối tượng a thuộc lớp Person
public class Main {
    public static void main(String[] args) {
        Person a = new Person();
        a.name = "Thành Nguyễn";
        a.age = 19;
        a.height = 1.7f;
        System.out.println(a.name);
             System.out.println(a.height);
             System.out.println(a.age);
    }
}

Kết quả

Thành Nguyễn
1.7
19

Với cách này ta dễ dàng quản lý chương trình hơn vì ta biết rõ thông tin nào thuộc đối tượng nào. Biết được đối tượng a có tên gì, chiều cao và độ tuổi bao nhiêu. Và quan trọng nhất là việc giả sử có đối tượng b thì khó nhầm lẫn thông tin với đối tượng a được.