คุณได้คำตอบที่ดีอยู่แล้ว แต่ช้างตัวใหญ่ในห้องในคำถามของคุณคืออันนี้:
ได้ยินจากคนที่ใช้การสืบทอดต้องหลีกเลี่ยงและเราควรใช้อินเทอร์เฟซแทน
ตามกฎของหัวแม่มือเมื่อมีคนให้กฎของหัวแม่มือแล้วไม่สนใจมัน สิ่งนี้ไม่เพียงไปสำหรับ "ใครบางคนบอกคุณบางอย่าง" แต่ยังสำหรับการอ่านเนื้อหาบนอินเทอร์เน็ต ถ้าคุณไม่ทราบว่าทำไม (และสามารถยืนหยัดอยู่ได้) คำแนะนำดังกล่าวนั้นไร้ค่าและมักเป็นอันตรายมาก
จากประสบการณ์ของฉันแนวคิดที่สำคัญที่สุดและเป็นประโยชน์ใน OOP คือ "การมีเพศสัมพันธ์ต่ำ" และ "การติดต่อกันสูง" (ชั้นเรียน / วัตถุรู้น้อยที่สุดเท่าที่จะเป็นไปได้เกี่ยวกับกันและกันและแต่ละหน่วยมีความรับผิดชอบน้อยที่สุด)
คลัปต่ำ
ซึ่งหมายความว่า "มัดสิ่ง" ในรหัสของคุณควรขึ้นอยู่กับสภาพแวดล้อมของมันให้น้อยที่สุด สิ่งนี้ใช้สำหรับคลาส (การออกแบบคลาส) แต่ยังรวมถึงออบเจกต์ (การใช้งานจริง), "ไฟล์" โดยทั่วไป (เช่นจำนวนของ#include
s ต่อ.cpp
ไฟล์เดียว, จำนวนไฟล์import
ต่อ.java
ไฟล์เดียวเป็นต้น)
สัญญาณที่สองหน่วยงานเชื่อมต่อกันคือหนึ่งในนั้นจะแตก (หรือจำเป็นต้องเปลี่ยนแปลง) เมื่ออีกฝ่ายถูกเปลี่ยนแปลงในทางใดทางหนึ่ง
มรดกเพิ่มการมีเพศสัมพันธ์อย่างชัดเจน การเปลี่ยนคลาสพื้นฐานจะเปลี่ยนคลาสย่อยทั้งหมด
ส่วนต่อประสานลดการเชื่อมต่อ: ด้วยการกำหนดสัญญาที่ชัดเจนและอิงตามวิธีการคุณสามารถเปลี่ยนแปลงอะไรก็ได้เกี่ยวกับทั้งสองด้านของอินเทอร์เฟซได้อย่างอิสระตราบใดที่คุณไม่เปลี่ยนสัญญา (โปรดทราบว่า "อินเตอร์เฟส" เป็นแนวคิดทั่วไปinterface
คลาสJava หรือ C ++ เป็นเพียงรายละเอียดการใช้งาน)
การติดต่อกันสูง
นี่หมายถึงการมีแต่ละคลาสวัตถุไฟล์ ฯลฯ เกี่ยวข้องหรือรับผิดชอบน้อยที่สุด คือหลีกเลี่ยงชั้นเรียนขนาดใหญ่ที่ทำสิ่งต่างๆมากมาย ในตัวอย่างของคุณหากอาวุธของคุณมีลักษณะแยกจากกันอย่างสมบูรณ์ (กระสุน, พฤติกรรมการยิง, การแสดงกราฟิก, การแสดงสินค้าคงคลัง ฯลฯ ) คุณสามารถมีคลาสที่แตกต่างกันซึ่งแสดงถึงสิ่งเหล่านั้น ระดับอาวุธหลักจะเปลี่ยนเป็น "ผู้ถือ" ของรายละเอียดเหล่านั้น จากนั้นวัตถุอาวุธจะมีค่าน้อยกว่าตัวชี้เล็กน้อยสำหรับรายละเอียดเหล่านั้น
ในตัวอย่างนี้คุณจะต้องแน่ใจว่าคลาสของคุณเป็นตัวแทนของ "พฤติกรรมการยิง" รู้น้อยที่สุดเท่าที่มนุษย์จะทำได้เกี่ยวกับอาวุธหลัก อย่างดีที่สุดไม่มีอะไรเลย ตัวอย่างเช่นนี่หมายความว่าคุณสามารถมอบ "พฤติกรรมการยิง" ให้กับวัตถุใด ๆในโลกของคุณ (ป้อมปราการ, ภูเขาไฟ, NPCs ... ) เพียงแค่ปลายนิ้ว หากในบางครั้งคุณต้องการเปลี่ยนวิธีการแสดงอาวุธในสินค้าคงคลังคุณสามารถทำได้เพียงแค่คลาสสินค้าคงคลังของคุณเท่านั้นที่รู้เรื่องนี้
สัญญาณที่บ่งบอกว่าเอนทิตีไม่เหนียวแน่นคือถ้ามันใหญ่ขึ้นและใหญ่ขึ้นแยกออกไปในหลายทิศทางในเวลาเดียวกัน
การรับมรดกในขณะที่คุณอธิบายมันลดการทำงานร่วมกัน - ชั้นเรียนอาวุธของคุณในตอนท้ายของวันชิ้นใหญ่ที่จัดการทุกด้านที่แตกต่างและไม่เกี่ยวข้องกับอาวุธของคุณ
อินเทอร์เฟซทางอ้อมเพิ่มการเชื่อมโยงกันโดยแยกความรับผิดชอบออกอย่างชัดเจนระหว่างสองด้านของอินเทอร์เฟซ
สิ่งที่ต้องทำตอนนี้
ยังไม่มีกฎที่ยากและรวดเร็วทั้งหมดนี้เป็นเพียงแนวทาง โดยทั่วไปตามที่ผู้ใช้ TKK พูดถึงในคำตอบของเขามรดกได้รับการสอนเป็นอย่างมากในโรงเรียนและหนังสือ มันเป็นเรื่องแฟนซีเกี่ยวกับ OOP อินเทอร์เฟซอาจจะน่าเบื่อมากขึ้นในการสอนและ (ถ้าคุณผ่านตัวอย่างเล็กน้อย) ยิ่งยากสักหน่อยเปิดการฉีดขึ้นรูปแบบพึ่งพาซึ่งไม่ชัดเจนเหมือนการถ่ายทอดทางพันธุกรรม
ในตอนท้ายของวันแผนการรับมรดกของคุณยังดีกว่าไม่มีการออกแบบ OOP ที่ชัดเจนเลย ดังนั้นรู้สึกอิสระที่จะติดกับมัน หากคุณต้องการคุณสามารถ ruminate / google เล็กน้อยเกี่ยวกับการมีเพศสัมพันธ์ต่ำการติดต่อกันสูงและดูว่าคุณต้องการที่จะเพิ่มประเภทของความคิดที่คลังแสงของคุณ คุณสามารถรีแฟคเตอร์เพื่อทดลองใช้ได้หากต้องการในภายหลัง; หรือลองใช้วิธีการอินเทอร์เฟซบนโมดูลใหม่ที่ใหญ่ขึ้นของรหัส