Bài 14: Tính chất của lập trình hướng đối tượng trong Java - Lập trình Java cơ bản

Đăng bởi: Admin | Lượt xem: 5283 | Chuyên mục: Java


Lập trình hướng đối tượng (OOP-Object-Oriented Programming) có 4 tính chất chính, đó là:
  1. Kế thừa (Inheritance)
  2. Đa hình (Polymorphism)
  3. Trừu tượng (Abstraction)
  4. Đóng gói (Encapsulation)

1. Tính kế thừa 

Kế thừa trong java là sự liên quan giữa hai class với nhau, trong đó có class cha (superclass) và class con (subclass). Khi kế thừa class con được hưởng tất cả các phương thức và thuộc tính của class cha. Tuy nhiên, nó chỉ được truy cập các thành viên public và protected của class cha. Nó không được phép truy cập đến thành viên private của class cha.
Cú pháp: Sử dụng từ khóa extends
class SubclassName extends SuperclassName {  
   //methods and fields
}
Khi một lớp được kế thừa từ nhiều lớp đươc gọi là đa kế thừa. Trong java, đa kế thừa chỉ được support thông qua interface, sẽ được nhắc đến sau.
Ví dụ về kế thừa: 
package com.company;

class People {
    public void run() {
        System.out.println("Running...");
    }
}

class Employee extends People{// kế thừa lớp People
    public void work() {
        System.out.println("Working...");
    }
}

public class Main {

    public static void main(String args[]) {
        Employee employee = new Employee();
        employee.run();//Gọi phương thức của lớp cha (Lớp People)
        employee.work();
    }
}
Kết quả thu được
Running...
Working...

2. Tính đa hình

Tính đa hình là khả năng một đối tượng có thể thực hiện một tác vụ theo nhiều cách khác nhau.
Với tính đa hình, nếu cùng một phương thức ứng dụng cho các đối tượng thuộc các lớp khác nhau thì nó đưa đến những kết quả khác nhau. Bản chất của sự việc chính là phương thức này bao gồm cùng một số lượng các tham số.
Trong Java, chúng ta sử dụng nạp chồng phương thức (method overloading) và ghi đè phương thức (method overriding) để có tính đa hình.
  1. Nạp chồng (Overloading): Đây là khả năng cho phép một lớp có nhiều thuộc tính, phương thức cùng tên nhưng với các tham số khác nhau về loại cũng như về số lượng. Khi được gọi, dựa vào tham số truyền vào, phương thức tương ứng sẽ được thực hiện.
  2. Ghi đè (Overriding): là hai phương thức cùng tên, cùng tham số, cùng kiểu trả về nhưng thằng con viết lại và dùng theo cách của nó, và xuất hiện ở lớp cha và tiếp tục xuất hiện ở lớp con. Khi dùng override, lúc thực thi, nếu lớp Con không có phương thức riêng, phương thức của lớp Cha sẽ được gọi, ngược lại nếu có, phương thức của lớp Con được gọi.
Ví dụ: 
package com.company;

abstract class People {
    public void work() {
        System.out.println("Working...");
    }
}

class Employee extends People{
    @Override
    public void work() {
        System.out.println("Coding...");
    }
}

class Student extends People{
    @Override
    public void work() {
        System.out.println("Studing...");
    }
}

public class Main {

    public static void main(String args[]) {
        People people = new Employee();
        people.work();
    }
}
Kết quả thu được:
Coding...
Trong ví dụ trên, đối tương people được tạo có thể hiện là employee, nên tác vụ work sẽ trả về là Coding. Trong một trường hợp khác, nếu đối tương people có thể hiện là Student, kết quả trả về sẽ là Studing.

3. Tính trừu tượng

Tính trừu tượng trong Java là tính chất không thể hiện cụ thể mà chỉ nêu tên vấn đề. Đó là một quá trình che giấu các hoạt động bên trong và chỉ hiển thị những tính năng thiết yếu của đối tượng tới người dùng.
Ưu điểm khi sử dụng tính trừu tượng để lập trình:
  1. Tính trừu tượng cho phép các lập trình viên loại bỏ tính chất phức tạp của đối tượng bằng cách chỉ đưa ra các thuộc tính và phương thức cần thiết của đối tượng trong lập trình, cải thiện khả năng bảo trì của hệ thống.
  2. Tính trừu tượng giúp chúng ta tập trung vào những cốt lõi cần thiết của đối tượng thay vì quan tâm đến cách nó thực hiện.
  3. Tính trừu tượng cung cấp nhiều tính năng mở rộng khi sử dụng kết hợp với tính đa hình và kế thừa trong lập trình hướng đối tượng.

4. Tính đóng gói

Tính đóng gói (Encapsulation) là việc kết hợp một bộ các dữ liệu (data) liên quan đến nhau cùng với một bộ các hàm/phương thức (functions/methods) hoạt động trên các dữ liệu đó, “gói” tất cả vào trong một lớp. Các đối tượng của lớp này chỉ có thể truy cập đến dữ liệu thông qua phương thức được cài đặt
Tính đóng gói có những đặc điểm như sau:
  1. Tạo ra cơ chế để ngăn ngừa việc gọi phương thức của lớp này tác động hay truy xuất dữ liệu của đối tượng thuộc về lớp khác.
  2. Dữ liệu riêng (khi được khai báo là private) của mỗi đối tượng được bảo vệ khỏi sự truy xuất không hợp lệ từ bên ngoài.
  3. Người lập trình có thể dựa vào cơ chế này để ngăn ngừa việc gán giá trị không hợp lệ vào thành phần dữ liệu của mỗi đối tượng.
  4. Cho phép thay đổi cấu trúc bên trong của một lớp mà không làm ảnh hưởng đến những lớp bên ngoài có sử dụng lớp đó.
Để cài đặt tính đóng gói, chúng ta có 2 bước như sau:
  1. Khai báo các thuộc tính của đối tượng trong lớp là private để các lớp khác không thể truy cập trực tiếp/sửa đổi được.
  2. Cung cấp các phương thức getter/setter có phạm vi truy cập là public để truy cập và sửa đổi các giá trị của thuộc tính trong lớp. Phương thức getter là phương thức truy cập vào thuộc tính của đối tượng và trả về các thuộc tính của đối tượng, còn phương thức setter là phương thức truy cập vào thuộc tính của đối tượng và gán giá trị cho các thuộc tính của đối tượng đó.
Ví dụ:
package com.company;

class People {
    private String name;

    public String getName() {
        return name;
    }

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

public class Main {

    public static void main(String args[]) {
        People people = new People();
        people.setName("Huy Nguyen");
        System.out.println(people.getName());
    }
    
}
Huy Nguyen
Trong ví dụ trên, name sẽ không thể được truy cập trực tiếp mà phải truy cập thông qua phương thức get/set của đối tượng people.
Thông qua bài này, chúng ta đã tìm hiểu tổng quan về các tính chất, khái niệm quan trọng của Java OOP. Bài tiếp theo, chúng ta sẽ tìm hiểu kĩ hơn về lớp và đối tượng.
Bài tiếp theo: Abstract class và Interface trong Java >>
vncoder logo

Theo dõi VnCoder trên Facebook, để cập nhật những bài viết, tin tức và khoá học mới nhất!