ฉันยังคงห่างไกลจากการเข้าใจความแตกต่างระหว่างคลาสนามธรรมและอินเตอร์เฟสอย่างเต็มที่ ทุกครั้งที่ฉันคิดว่าฉันได้รับการจัดการกับแนวคิดพื้นฐานฉันไปดู stackexchange และฉันกลับสองขั้นตอน แต่ความคิดเล็ก ๆ น้อย ๆ ในหัวข้อและคำถาม OPs:
ครั้งแรก:
มีคำอธิบายทั่วไปสองอย่างของอินเตอร์เฟส:
อินเทอร์เฟซคือรายการของวิธีการและคุณสมบัติที่คลาสใดสามารถนำไปใช้และโดยการใช้อินเทอร์เฟซคลาสที่รับประกันวิธีการเหล่านั้น (และลายเซ็นของพวกเขา) และคุณสมบัติเหล่านั้น (และชนิดของพวกเขา) วัตถุของคลาสนั้น อินเทอร์เฟซคือสัญญา
อินเทอร์เฟซเป็นคลาสนามธรรมที่ไม่ / ไม่สามารถทำอะไรได้ มันมีประโยชน์เพราะคุณสามารถนำไปใช้มากกว่าหนึ่งซึ่งแตกต่างจากชั้นเรียนผู้ปกครองเฉลี่ย เช่นฉันอาจเป็นวัตถุของคลาส BananaBread และสืบทอดมาจาก BaseBread แต่นั่นไม่ได้หมายความว่าฉันไม่สามารถใช้ทั้ง IWithNuts และส่วนต่อประสาน ITastesYummy ได้ ฉันยังสามารถใช้งานอินเทอร์เฟซของ IDoesTheDish ได้เพราะฉันไม่ใช่แค่ขนมปังใช่มั้ย
มีคำอธิบายทั่วไปสองแบบของคลาสนามธรรม:
คลาสนามธรรมคือ yknow สิ่งที่ไม่ใช่สิ่งที่สามารถทำได้ มันเป็นสาระสำคัญไม่ใช่ของจริงเลย รอก่อนนี่จะช่วยได้ เรือเป็นคลาสนามธรรม แต่เพลย์บอยยอชต์เซ็กซี่น่าจะเป็นคลาสย่อยของ BaseBoat
ฉันอ่านหนังสือในชั้นเรียนนามธรรมและบางทีคุณควรอ่านหนังสือเล่มนั้นเพราะคุณอาจไม่เข้าใจและจะทำผิดถ้าคุณยังไม่ได้อ่านหนังสือเล่มนั้น
โดยวิธีการที่หนังสือ Citers ดูน่าประทับใจเสมอแม้ว่าฉันจะยังคงเดินสับสน
ประการที่สอง:
บน SO มีคนถามคำถามแบบง่ายกว่านี้คลาสสิคว่า "ทำไมต้องใช้ส่วนต่อประสานต่าง ๆ ? อะไรคือความแตกต่างอะไร และหนึ่งคำตอบใช้นักบินกองทัพอากาศเป็นตัวอย่างง่ายๆ มันไม่ได้ขึ้นบก แต่มันได้จุดประกายความคิดเห็นที่ยอดเยี่ยมซึ่งหนึ่งในนั้นกล่าวถึงส่วนต่อประสาน IFlyable ที่มีวิธีการเช่น TakeOff, pilotEject เป็นต้นและนี่เป็นการคลิกจริง ๆ สำหรับฉันเป็นตัวอย่างในโลกแห่งความเป็นจริงว่าทำไมอินเตอร์เฟสไม่เพียงมีประโยชน์ แต่สำคัญมาก อินเทอร์เฟซทำให้วัตถุ / คลาสใช้งานง่ายหรืออย่างน้อยก็ให้ความรู้สึกว่าเป็น อินเทอร์เฟซไม่ใช่เพื่อประโยชน์ของวัตถุหรือข้อมูล แต่เป็นสิ่งที่ต้องมีการโต้ตอบกับวัตถุนั้น ผลไม้คลาสสิค -> Apple-> Fuji หรือ Shape-> Triangle-> ตัวอย่างด้านการสืบทอดด้านเท่ากันหมดเป็นตัวอย่างที่ดีสำหรับการทำความเข้าใจเกี่ยวกับอนุกรมวิธานของวัตถุที่อ้างอิงจากลูกหลานของมัน มันแจ้งให้ผู้บริโภคและโปรเซสเซอร์ทราบถึงคุณสมบัติทั่วไปพฤติกรรมไม่ว่าวัตถุจะเป็นกลุ่มของสิ่งต่าง ๆ จะเชื่อมต่อระบบของคุณหากคุณใส่ผิดที่หรืออธิบายข้อมูลทางประสาทสัมผัสตัวเชื่อมต่อไปยังแหล่งข้อมูลเฉพาะหรือ ข้อมูลทางการเงินที่จำเป็นในการทำบัญชีเงินเดือน
วัตถุเครื่องบินที่เฉพาะเจาะจงอาจหรือไม่อาจมีวิธีสำหรับการลงจอดฉุกเฉิน แต่ฉันจะโกรธถ้าฉันถือว่า EmergencyLand ของมันเช่นเดียวกับวัตถุ flyable อื่น ๆ ทุกคนเท่านั้นที่จะตื่นขึ้นปกคลุมใน DumbPlane และเรียนรู้ว่านักพัฒนาไปกับ quickLand เพราะพวกเขาคิดว่ามันเหมือนกันหมด เช่นเดียวกับที่ฉันจะผิดหวังถ้าผู้ผลิตสกรูทุกคนมีความหมายของตัวเองที่ถูกต้องว่าแน่นหรือถ้าทีวีของฉันไม่มีปุ่มเพิ่มระดับเสียงเหนือปุ่มลดระดับเสียง
คลาสนามธรรมเป็นรูปแบบที่กำหนดว่าวัตถุที่สืบทอดใด ๆ จะต้องมีคุณสมบัติเป็นคลาสนั้น หากคุณไม่มีคุณสมบัติทั้งหมดของเป็ดมันไม่สำคัญว่าคุณจะมีการใช้งานอินเตอร์เฟส IQuack คุณเพียงแค่เป็นเพนกวินแปลก ๆ การเชื่อมต่อเป็นสิ่งที่เหมาะสมแม้ว่าคุณจะไม่มั่นใจในสิ่งอื่น Jeff Goldblum และ Starbuck ต่างก็สามารถบินยานอวกาศมนุษย์ต่างดาวได้เนื่องจากอินเตอร์เฟสมีความคล้ายคลึงกัน
ที่สาม:
ฉันเห็นด้วยกับเพื่อนร่วมงานของคุณเพราะบางครั้งคุณต้องบังคับใช้วิธีการบางอย่างตั้งแต่เริ่มต้น หากคุณสร้าง Active Record ORM จะต้องมีวิธีการบันทึก สิ่งนี้ไม่ขึ้นอยู่กับคลาสย่อยที่สามารถสร้างอินสแตนซ์ได้ และถ้าอินเทอร์เฟซ ICRUD สามารถเคลื่อนย้ายได้มากพอที่จะไม่รวมเข้ากับคลาสนามธรรมเพียงคลาสเดียวก็สามารถนำไปใช้กับคลาสอื่น ๆ เพื่อให้พวกเขาเชื่อถือได้และใช้งานง่ายสำหรับทุกคนที่คุ้นเคยกับคลาสลูกหลาน
ในทางตรงกันข้ามมีตัวอย่างที่ดีก่อนหน้านี้เมื่อไม่ควรข้ามไปผูกอินเทอร์เฟซกับคลาสนามธรรมเนื่องจากไม่ใช่ทุกชนิดลิสต์จะ (หรือควร) ใช้คิวอินเตอร์เฟส คุณบอกว่าสถานการณ์นี้เกิดขึ้นครึ่งเวลาซึ่งหมายความว่าคุณและเพื่อนร่วมงานของคุณทั้งคู่ผิดเวลาและสิ่งที่ดีที่สุดที่ต้องทำคือการโต้เถียงอภิปรายพิจารณาและหากพวกเขากลายเป็นถูกต้องรับทราบและยอมรับการมีเพศสัมพันธ์ . แต่อย่าเป็นนักพัฒนาที่ทำตามปรัชญาแม้ว่ามันจะไม่ใช่สิ่งที่ดีที่สุดสำหรับงานในมือ