Tôi đã bắt gặp thuật ngữ "lập trình cho một giao diện thay vì triển khai" rất nhiều và tôi nghĩ rằng tôi hiểu được ý nghĩa của nó. Nhưng tôi muốn chắc chắn rằng tôi hiểu lợi ích của nó và việc triển khai có thể.
"Lập trình cho một giao diện" có nghĩa là, khi có thể, người ta nên tham khảo một mức độ trừu tượng hơn của một lớp (một giao diện, lớp trừu tượng hoặc đôi khi là một siêu lớp của một loại nào đó), thay vì tham chiếu đến một triển khai cụ thể.
Một ví dụ phổ biến trong Java, là sử dụng:
List myList = new ArrayList();
thay vì ArrayList myList = new ArrayList();
.
Tôi có hai câu hỏi liên quan đến điều này:
Tôi muốn chắc chắn rằng tôi hiểu những lợi ích chính của phương pháp này. Tôi nghĩ rằng lợi ích chủ yếu là linh hoạt. Khai báo một đối tượng như một tài liệu tham khảo cấp cao hơn, chứ không phải là một triển khai cụ thể, cho phép linh hoạt hơn và duy trì hơn trong suốt chu kỳ phát triển và trong toàn bộ mã. Điều này có đúng không? Là linh hoạt là lợi ích chính?
Có nhiều cách hơn để "lập trình cho một giao diện" không? Hay là "khai báo một biến như một giao diện chứ không phải là một triển khai cụ thể" là cách thực hiện duy nhất của khái niệm này?
Tôi không nói về Giao diện xây dựng Java . Tôi đang nói về nguyên tắc OO "lập trình cho một giao diện, không phải là triển khai". Trong nguyên tắc này, "giao diện" thế giới đề cập đến bất kỳ "siêu kiểu" nào của một lớp - một giao diện, một lớp trừu tượng hoặc một siêu lớp đơn giản, trừu tượng hơn và ít cụ thể hơn các lớp con cụ thể hơn.