Ostatnio zacząłem owijać głowę wokół OOP i teraz jestem do tego stopnia, że im więcej czytam o różnicach między klasami abstrakcyjnymi i interfejsami, tym bardziej się mylę. Jak dotąd nie można utworzyć żadnej z nich. Interfejsy są mniej więcej strukturalnymi planami, które określają szkielet, a streszczenia są różne, ponieważ są w stanie częściowo zaimplementować kod.
Chciałbym dowiedzieć się o nich więcej w mojej konkretnej sytuacji. Oto link do mojego pierwszego pytania, jeśli chcesz trochę więcej podstawowych informacji: Jaki jest dobry model projektowania dla mojej nowej klasy?
Oto dwie klasy, które utworzyłem:
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 }
}
Jak widać, klasy te są prawie identyczne. Nie pokazano tutaj, ale istnieją inne funkcje like get_zip()
, save_to_database()
które są wspólne dla moich klas. Dodałem również inne klasy Samochody i Zwierzęta, które mają wszystkie typowe metody i oczywiście właściwości właściwe dla tych klas (na przykład przebieg, waga).
Teraz naruszyłem zasadę DRY i zarządzam tym samym kodem w wielu plikach. Zamierzam mieć więcej klas, takich jak łodzie, konie itp.
Czy to tutaj użyłbym interfejsu lub klasy abstrakcyjnej? Z tego, co rozumiem na temat klas abstrakcyjnych, użyłbym superklasy jako szablonu ze wszystkimi wspólnymi elementami wbudowanymi w klasę abstrakcyjną, a następnie dodałbym tylko elementy szczególnie potrzebne w przyszłych klasach. Na przykład:
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(){ }
}
Czy też użyłbym interfejsu, a ponieważ są one do siebie podobne, utwórz strukturę, z której każda z podklas jest zmuszona korzystać ze względu na integralność, i pozostaw to programistom końcowym, którzy opracują tę klasę, aby była odpowiedzialna za każdą z szczegóły nawet popularnych funkcji. sądzę, że niektóre „wspólne” funkcje mogą wymagać dostosowania w przyszłości dla potrzeb ich konkretnej klasy.
Mimo wszystko powyższego, jeśli uważasz, że nie rozumiem co i dlaczego abstrakcyjnych klas i interfejsów w ogóle, na wszelki sposób pozwól, aby ważna odpowiedź przestała myśleć w tym kierunku i zaproponowała właściwy sposób, aby iść naprzód!
Dzięki!