Récemment, j'ai commencé à faire le tour de la POO et je suis maintenant au point où plus je lis sur les différences entre les classes abstraites et les interfaces, plus je deviens confus. Jusqu'à présent, aucun des deux ne peut être instancié. Les interfaces sont des plans plus ou moins structurels qui déterminent le squelette et les résumés sont différents en pouvant implémenter partiellement du code.
J'aimerais en savoir plus à ce sujet à travers ma situation particulière. Voici un lien vers ma première question si vous souhaitez un peu plus d'informations générales: Qu'est-ce qu'un bon modèle de conception pour ma nouvelle classe?
Voici deux classes que j'ai créées:
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 }
}
Donc, comme vous pouvez le voir, ces classes sont presque identiques. Non illustré ici, mais il existe d'autres fonctions like get_zip()
, save_to_database()
qui sont communes à toutes mes classes. J'ai également ajouté d'autres classes Cars and Pets qui ont toutes les méthodes communes et bien sûr des propriétés spécifiques à ces classes (kilométrage, poids, par exemple).
Maintenant, j'ai violé le principe DRY et je gère et modifie le même code sur plusieurs fichiers. J'ai l'intention d'avoir plus de cours comme des bateaux, des chevaux ou autre chose.
Est-ce donc là que j'utiliserais une interface ou une classe abstraite? D'après ce que je comprends des classes abstraites, j'utiliserais une super classe comme modèle avec tous les éléments communs intégrés dans la classe abstraite, puis j'ajouterais uniquement les éléments spécifiquement nécessaires dans les futures classes. Par exemple:
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(){ }
}
Ou devrais-je utiliser une interface et, parce qu'elles sont si similaires, créer une structure que chacune des sous-classes est obligée d'utiliser pour des raisons d'intégrité, et laisser le soin au développeur final qui étoffe cette classe d'être responsable de chacun des détails même des fonctions communes. ma pensée est que certaines fonctions «communes» devront peut-être être modifiées à l'avenir pour les besoins de leur classe spécifique.
Malgré tout ce qui précède, si vous croyez que je comprends mal le quoi et le pourquoi des classes abstraites et des interfaces, laissez par tous les moyens une réponse valable cesser de penser dans cette direction et suggérer la bonne façon d'aller de l'avant!
Merci!