เมื่อเร็ว ๆ นี้ฉันเริ่มคลุมหัวของฉันรอบ ๆ 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(){ }
}
หรือฉันจะใช้อินเทอร์เฟซและเนื่องจากสิ่งเหล่านี้มีความคล้ายคลึงกันให้สร้างโครงสร้างที่แต่ละคลาสย่อยถูกบังคับให้ใช้ด้วยเหตุผลด้านความซื่อสัตย์และปล่อยให้มันขึ้นอยู่กับผู้พัฒนาที่สิ้นสุดชั้นเรียนนั้น ๆ รายละเอียดของฟังก์ชั่นทั่วไป ฉันคิดว่ามีฟังก์ชั่น 'ทั่วไป' บางอย่างอาจจำเป็นต้องได้รับการปรับแต่งในอนาคตสำหรับความต้องการของชั้นเรียนเฉพาะของพวกเขา
แม้จะมีทั้งหมดข้างต้นถ้าคุณเชื่อว่าฉันเข้าใจผิดว่าอะไรเป็นสาเหตุของคลาสและอินเทอร์เฟซที่เป็นนามธรรมทั้งหมดให้คำตอบที่ถูกต้องเพื่อหยุดคิดในทิศทางนี้และแนะนำวิธีที่เหมาะสมในการก้าวไปข้างหน้า!
ขอบคุณ!