最近,我开始全神贯注于OOP,现在到了这样的地步,我越了解抽象类和接口之间的差异,就越会感到困惑。到目前为止,都无法实例化。接口或多或少是结构的蓝图,它们通过能够部分实现代码来确定骨架和摘要是否不同。
我想通过我的具体情况了解更多有关这些的信息。这是我第一个问题的链接,如果您需要更多背景信息:新班级的良好设计模型是什么?
这是我创建的两个类:
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 }
}
因此,如您所见,这些类几乎是相同的。这里没有显示,但也有其他的功能,like get_zip()
,save_to_database()
跨越我的课是常见的。我还添加了其他类“汽车”和“宠物”,这些类具有所有常用方法,并且当然具有这些类的特定属性(例如,里程,重量)。
现在,我违反了DRY原则,并且正在多个文件中管理和更改相同的代码。我打算开设更多课程,例如船,马或其他。
那么这是我要使用接口或抽象类的地方吗?根据我对抽象类的了解,我将使用超类作为模板,并将所有常见元素内置到抽象类中,然后仅添加将来类中特别需要的项目。例如:
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(){ }
}
还是我会使用一个接口,并且因为它们是如此相似,所以会创建一个结构,以使每个子类出于完整性的原因而不得不使用,然后由最终开发人员负责,后者负责充实该类以对每个子类负责甚至常见功能的细节。我的想法是,将来可能需要针对特定班级的需求对某些“通用”功能进行调整。
尽管有上述所有内容,但如果您认为我完全误解了抽象类和接口的含义和原因,则务必让一个有效的答案停止朝这个方向思考,并提出前进的正确方法!
谢谢!