top of page
Tuyen Nguyen

Mối quan hệ IS-A với ví dụ Racing Animal

Đã cập nhật: 30 thg 6, 2024

Hãy bắt đầu với Animal class


public class Animal {
    private String name;
    private int speed;
    private boolean flyAble;

    public Animal() {
    }

    public String getName() {
        return name;
    }

    public int getSpeed() {
        return speed;
    }

    public boolean isFlyAble() {
        return flyAble;
    }

    @Override
    public String toString() {
        return name + " {" +
                "speed= " + speed +
                ", flyAble= " + flyAble +
                "}"';
    }
    
}

Lớp Animal đại diện cho một loài động vật với các thuộc tính như name, speed, và flyAble. Nó cung cấp các phương thức để truy cập các thuộc tính này và ghi đè phương thức toString() để tạo ra một biểu diễn đọc được của đối tượng Animal.


Tạo 1 class AnimalController


import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class AnimalController {

    public void winnerSpeedWithoutWings(List<Animal> animalList){
        Map<Integer,String> mapWinnerList = new HashMap<>();
        for (Animal animal : animalList) {
            if(!animal.isFlyAble()){
                mapWinnerList.put(animal.getSpeed(), animal.getName());
            }
        }

        int maxSpeed = Collections.max(mapWinnerList.keySet());

        for (Map.Entry<Integer, String> entry : mapWinnerList.entrySet()) {
            if(entry.getKey() == maxSpeed){
                System.out.printf("===> Winner is %s, with speed: %d\n", entry.getValue(), entry.getKey());
            }
        }
    }
}

Lớp AnimalController chứa một phương thức winnerSpeedWithoutWings để xác định động vật không bay nhanh nhất trong một danh sách các động vật. Nó sử dụng một HashMap để lưu trữ tốc độ và tên của các động vật không bay, tìm ra tốc độ tối đa bằng cách sử dụng Collections.max(), và sau đó in ra người chiến thắng.


Giờ hãy thử run chương trình nào:


import java.security.SecureRandom;
import java.util.Arrays;

public class TestAnimal {
    public static void main(String[] args) {
        Animal horse = new Animal("Horse", new SecureRandom().nextInt(100), false);
        System.out.println(horse.toString());

        Animal dog = new Animal("Dog", new SecureRandom().nextInt(50), false);
        System.out.println(dog.toString());

        Animal eagle = new Animal("Eagle", new SecureRandom().nextInt(100), true);
        System.out.println(eagle.toString());

        Animal duck = new Animal("Duck", new SecureRandom().nextInt(50), true);
        System.out.println(duck.toString());

        Animal lion = new Animal("Lion", new SecureRandom().nextInt(100), false);
        System.out.println(lion.toString());

        AnimalController animalController = new AnimalController();
        animalController.winnerSpeedWithoutWings(Arrays.asList(horse, dog, eagle, duck, lion));
    }
}

Lớp TestAnimal chứa phương thức main để chạy mô phỏng cuộc đua. Nó tạo ra các thể hiện của các loài động vật khác nhau và chuyển chúng cho AnimalController để xác định người chiến thắng giữa các động vật không bay.


Kết Luận

Ưu Điểm

  • Sự Rõ Ràng và Dễ Đọc: Mã nguồn được cấu trúc tốt và dễ hiểu, làm cho nó dễ tiếp cận ngay cả với những người có kinh nghiệm lập trình hạn chế. Tên biến rõ ràng và các chú thích tăng cường tính đọc được của nó.

  • Thiết Kế Module: Bằng cách chia chức năng thành các lớp riêng biệt (Animal và AnimalController), mã nguồn tuân theo nguyên tắc về tính module và đóng gói, khuyến khích tính bảo trì và tái sử dụng.

  • Sử Dụng Hiệu Quả của Collections: Việc sử dụng một HashMap để lưu trữ tốc độ và tên của các động vật không bay giúp việc truy xuất dữ liệu hiệu quả và cho phép xác định người chiến thắng một cách dễ dàng.

Hạn Chế

  • Static Test Data: Việc tạo ra các thể hiện của động vật trong lớp TestAnimal giới hạn tính linh hoạt và khả năng mở rộng của mã nguồn. Trong một ứng dụng thực tế, dữ liệu nên được lấy động từ nguồn bên ngoài hoặc nhập từ người dùng.

  • Khả Năng Mở Rộng Hạn Chế: Mặc dù mã nguồn hiện tại phục vụ cho các cuộc đua giữa các động vật với các thuộc tính được xác định trước, mở rộng nó để chứa các thuộc tính hoặc điều kiện đua thêm có thể đòi hỏi sự sửa đổi đáng kể, có thể ảnh hưởng đến tính bảo trì của mã nguồn.



Comments


bottom of page