Daily Archives: 11/04/2017

Java 8 – Hướng đối tượng – Phần 2

Trong phần này chúng ta tiếp tục tìm hiểu về các đặc điểm của lập trình hướng đối tượng.

Thừa kế – Inheritance

Trong thế giới thực, có nhiều đối tượng khác nhau nhưng có chung một số đặc điểm nào đó. Chẳng hạn như xe đạp thì có nhiều loại như xe đạp leo núi, xe đạp đi đường, xe đạp đôi…v.v

Cho dù là loại nào thì chúng cũng có chung các đặc điểm như vận tốc, loại tay lái… và tùy loại xe mà sẽ có thêm các đặc điểm riêng biệt khác nhau, chẳng hạn như xe đạp đôi xe có 2 ghế ngồi và 2 tay lái, xe đạp leo núi có nhiều dây chuyền hơn…v.v

Lập trình hướng đối tượng cho phép chúng ta thực hiện việc kế thừa các thuộc tính và phương thức giữa các lớp. Chẳng hạn như lớp Bicycle (xe đạp) sẽ có lớp kế thừa là MountainBike (xe đạp leo núi), RoadBike (xe đạp đi đường) và CoupleBike (xe đạp đôi). Trong Java thì mỗi lớp chỉ có một lớp cha, tức là chỉ kế thừa từ một lớp, và có thể có nhiều lớp con, tức là nhiều lớp kế thừa từ nó.

Cú pháp kế thừa lớp trong Java rất đơn giản, chúng ta ghi từ khóa extends và tên lớp cha sau lớp con là được. Ví dụ:

class Bicycle {

}

class MountainBike extends Bicycle {

}

class RoadBike extends Bicycle {

}

class CoupleBike extends Bicycle {

}

Tất cả các lớp con là MountainBike, RoadBikeCoupleBike sẽ có các thuộc tính và phương thức giống với thuộc tính của lớp cha là Bicycle, bây giờ coder chỉ cần tập trung vào việc khai báo các thuộc tính và phương thức riêng của mỗi lớp con chứ không cần phải khai báo các thuộc tính và phương thức cũ lại từ đầu.

Giao diện – Interface

Giao diện ở đây không phải là giao diện màn hình, giao diện đồ họa hay bất cứ thứ gì liên quan tới hình họa như nút bấm, nhãn, textbox..v.v.

Chúng ta đã biết là các đối tượng sẽ tương tác với thế giới bên ngoài thông qua phương thức, thế giới bên ngoài sẽ gọi phương thức của đối tượng là giao diện, ý nghĩa của từ giao diện là một cái gì đó thực hiện một chức năng gì đó mà không biết nó thực hiện như thế nào.

Chẳng hạn như cái TV có nút bấm dùng để chuyển kênh, người dùng chỉ biết là nút đó dùng để chuyển kênh chứ không biết nó làm những gì để chuyển kênh được.

Trong Java thì giao diện là một tập hợp các phương thức nhưng không có phần thân {}, các lớp có thể khác cài đặt (implement) các phương thức này. Để khai báo một giao diện thì chúng ta dùng từ khóa interface, theo sau là tên giao diện, bên trong là tập hợp các tên phương thức, ví dụ:

interface Bicycle {
    void changeGear(int newGear);
    void speedUp(int value);
}

Các lớp khác có thể code giao diện này, tức là code lại các phương thức có trong giao diện, chúng ta dùng từ khóa implements sau tên lớp, rồi ghi tên giao diện cần cài đặt. Ví dụ:

class RoadBike implements Bicycle {
    int gear = 1;
    int speed = 0;

    void changeGear(int newGear) {
        gear = newGear;
    }

    void speedUp(int value) {
        speed = speed + value;
    }
}

class MountainBike implements Bicycle {
    int gear = 1;
    int speed = 0;

    void changeGear(int newGear) {
        gear = newGear;
    }

    void speedUp(int value) {
        speed = speed + value * 10;
    }
}

Một lớp code lại một giao diện cho phép lớp đó trở nên “chính thức” hơn, bởi vì chúng ta có thể có nhiều lớp cùng code lại một giao diện, nhưng các lớp khác nhau sẽ code lại các phương thức trong giao diện một cách khác nhau tùy vào mục đích của từng lớp, do đó khi nhìn tên lớp thì chúng ta có thể hình dùng là lớp đó code các phương thức như thế nào, và dùng lớp thích hợp.

Ví dụ như trong đoạn code trên, chúng ta cho phương thức speedUp() của lớp MountainBike tính ra giá trị cao hơn so với phương thức speedUp() của lớp RoadBike, khi người khác dùng thì cũng sẽ luôn nghĩ là lớp MountainBike sẽ có speed cao hơn lớp RoadBike, và họ sẽ dùng lớp tương ứng tùy mục đích của họ.

Khi code lại một giao diện thì phải code toàn bộ phương thức có trong giao diện.

Gói – Package

Gói ở đây là một cái tên dùng để gom nhóm các lớp và giao diện có liên quan với nhau lại. Bạn có thể nghĩ gói cũng giống như một cái thư mục trên máy tính vậy, chẳng hạn như trong làm web, các file HTML nằm chung một thư mục, các file ảnh nằm chung một thư mục…v.v

Trong Java cũng thế, sẽ có lúc số lượng các lớp lên tới hàng trăm, hàng ngàn, và tốt nhất là nên gom những thứ có liên quan với nhau lại cho đễ quản lý.

Chúng ta sẽ tìm hiểu thêm sau.