Gần đây tôi đã bắt đầu quấn đầu quanh OOP, và bây giờ tôi đến mức càng đọc về sự khác biệt giữa các lớp trừu tượng và giao diện, tôi càng trở nên bối rối. Cho đến nay, không thể được khởi tạo. Các giao diện là các bản thiết kế cấu trúc ít nhiều có cấu trúc xác định bộ xương và tóm tắt khác nhau bằng cách có thể thực hiện một phần mã.
Tôi muốn tìm hiểu thêm về những điều này thông qua tình huống cụ thể của tôi. Đây là một liên kết đến câu hỏi đầu tiên của tôi nếu bạn muốn biết thêm một chút thông tin cơ bản: mô hình thiết kế tốt cho lớp mới của tôi là gì?
Đây là hai lớp tôi đã tạo:
class Ad {
$title;
$description
$price;
function get_data($website){ }
function validate_price(){ }
}
class calendar_event {
$title;
$description
$start_date;
function get_data($website){ //guts }
function validate_dates(){ //guts }
}
Vì vậy, như bạn có thể thấy các lớp này gần như giống hệt nhau. Không được hiển thị ở đây, nhưng có những chức năng khác, like get_zip()
, save_to_database()
được phổ biến trên khắp các lớp học của tôi. Tôi cũng đã thêm các lớp khác Ô tô và Thú cưng có tất cả các phương thức phổ biến và tất nhiên các thuộc tính dành riêng cho các lớp đó (ví dụ như số dặm, trọng lượng).
Bây giờ tôi đã vi phạm nguyên tắc DRY và tôi đang quản lý và thay đổi cùng một mã trên nhiều tệp. Tôi dự định sẽ có nhiều lớp học hơn như thuyền, ngựa, hoặc bất cứ điều gì.
Vì vậy, đây là nơi tôi sẽ sử dụng một giao diện hoặc một lớp trừu tượng? Từ những gì tôi hiểu về các lớp trừu tượng, tôi sẽ sử dụng một siêu lớp làm mẫu với tất cả các phần tử phổ biến được xây dựng trong lớp trừu tượng, và sau đó chỉ thêm các mục cần thiết đặc biệt trong các lớp trong tương lai. Ví dụ:
abstract class content {
$title;
$description
function get_data($website){ }
function common_function2() { }
function common_function3() { }
}
class calendar_event extends content {
$start_date;
function validate_dates(){ }
}
Hoặc tôi sẽ sử dụng một giao diện và, vì chúng rất giống nhau, tạo ra một cấu trúc mà mỗi lớp con bị buộc phải sử dụng vì lý do toàn vẹn và để cho nhà phát triển cuối cùng tìm ra lớp đó chịu trách nhiệm cho từng lớp chi tiết của các chức năng phổ biến. Tôi nghĩ rằng có một số chức năng 'phổ biến' có thể cần phải được điều chỉnh trong tương lai cho các nhu cầu của lớp cụ thể của chúng.
Bất chấp tất cả những điều trên, nếu bạn tin rằng tôi đang hiểu sai về lý do và lý do của các lớp và giao diện trừu tượng hoàn toàn, bằng mọi cách hãy để một câu trả lời hợp lệ ngừng suy nghĩ theo hướng này và đề xuất cách thích hợp để tiến về phía trước!
Cảm ơn!