ฉันคิดว่าคุณอาจพบโพสต์บล็อกของฉันใน abstractions รั่วมีประโยชน์ นี่คือพื้นหลังที่เกี่ยวข้อง:
สิ่งที่เป็นนามธรรมเป็นกลไกที่จะช่วยให้เกิดสิ่งที่เป็นเรื่องธรรมดาในกลุ่มของชิ้นส่วนของโปรแกรมที่เกี่ยวข้องลบความแตกต่างและเปิดใช้งานโปรแกรมเมอร์โดยตรงกับโครงสร้างที่เป็นตัวแทนของแนวคิดนามธรรม โครงสร้างใหม่นี้ (จริง) มักจะมีการกำหนดพารามิเตอร์เสมอ: หมายถึงการปรับแต่งการใช้โครงสร้างเพื่อให้เหมาะกับความต้องการเฉพาะของคุณ
ยกตัวอย่างเช่นList
คลาสสามารถสรุปรายละเอียดของการใช้งานลิสต์ลิสต์ได้ - ซึ่งแทนที่จะคิดในแง่ของการจัดการnext
และพprevious
อยน์เตอร์คุณสามารถคิดในระดับของการเพิ่มหรือลบค่าในลำดับ Abstraction เป็นเครื่องมือที่จำเป็นสำหรับการสร้างคุณสมบัติที่มีประโยชน์มากมายและบางครั้งมีความซับซ้อนจากแนวคิดดั้งเดิมที่เล็กกว่า
สิ่งที่เป็นนามธรรมเกี่ยวข้องกับการห่อหุ้มและแยกส่วนและแนวคิดเหล่านี้มักเข้าใจผิด
ในList
ตัวอย่างการห่อหุ้มสามารถใช้เพื่อซ่อนรายละเอียดการนำไปใช้ของรายการที่ลิงก์ ยกตัวอย่างเช่นในภาษาเชิงวัตถุคุณสามารถสร้างnext
และพprevious
อยน์เตอร์ส่วนตัวได้ซึ่งอนุญาตให้มีการใช้งานรายการเท่านั้นเพื่อเข้าถึงฟิลด์เหล่านี้
การห่อหุ้มไม่เพียงพอสำหรับสิ่งที่เป็นนามธรรมเพราะมันไม่ได้แปลว่าคุณมีแนวคิดใหม่หรือแตกต่างกันในโครงสร้าง หากList
คลาสทั้งหมดได้ให้วิธีการเข้าถึงสไตล์ ' getNext
' / ' setNext
' คุณก็จะแค็ปซูลจากรายละเอียดการใช้งาน (เช่นคุณตั้งชื่อฟิลด์ว่าprev
'' หรือ ' previous
' หรืออะไรคือประเภทคงที่?) แต่มัน จะมีระดับนามธรรมที่ต่ำมาก
Modularityเกี่ยวข้องกับการซ่อนข้อมูล : มีการระบุคุณสมบัติที่เสถียรในอินเทอร์เฟซและโมดูลจะใช้อินเตอร์เฟสนั้นซึ่งจะเก็บรายละเอียดการใช้งานทั้งหมดไว้ในโมดูล Modularity ช่วยให้โปรแกรมเมอร์รับมือกับการเปลี่ยนแปลงได้เพราะโมดูลอื่น ๆ นั้นขึ้นอยู่กับอินเตอร์เฟสที่เสถียรเท่านั้น
การซ่อนข้อมูลนั้นได้รับความช่วยเหลือจากการห่อหุ้ม (เพื่อให้รหัสของคุณไม่ได้ขึ้นอยู่กับรายละเอียดการติดตั้งที่ไม่เสถียร) แต่การห่อหุ้มนั้นไม่จำเป็นสำหรับการแยกส่วน ตัวอย่างเช่นคุณสามารถใช้List
โครงสร้างใน C เปิดเผย ' next
' และ ' prev
ชี้' ไปทั่วโลก แต่ยังให้อินเตอร์เฟซที่มีinitList()
, addToList()
และremoveFromList()
ฟังก์ชั่น. โดยมีเงื่อนไขว่าจะปฏิบัติตามกฎของอินเทอร์เฟซคุณสามารถรับประกันได้ว่าคุณสมบัติบางอย่างจะมีอยู่เสมอเช่นการทำให้มั่นใจว่าโครงสร้างข้อมูลอยู่ในสถานะที่ถูกต้องเสมอ [กระดาษคลาสสิกของ Parnas บนโมดุลถูกเขียนด้วยตัวอย่างในการประกอบ อินเทอร์เฟซเป็นสัญญาและรูปแบบของการสื่อสารเกี่ยวกับการออกแบบมันไม่จำเป็นต้องถูกตรวจสอบทางกลไกแม้ว่าจะเป็นสิ่งที่เราวางใจในวันนี้]
แม้ว่าจะใช้คำอย่าง abstract, modular และ encapsulated เป็นคำอธิบายการออกแบบเชิงบวก แต่สิ่งสำคัญคือต้องตระหนักว่าการมีคุณสมบัติเหล่านี้ไม่ได้ช่วยให้คุณมีการออกแบบที่ดีโดยอัตโนมัติ:
หากอัลกอริทึม n ^ 3 เป็น "encapsulated อย่าง" มันจะยังคงทำงานได้แย่กว่าอัลกอริทึม n log n ที่ได้รับการปรับปรุง
หากอินเทอร์เฟซที่ใช้กับระบบปฏิบัติการเฉพาะจะไม่มีการรับรู้ประโยชน์ของการออกแบบแบบแยกส่วนเมื่อกล่าวว่าวิดีโอเกมจำเป็นต้องได้รับการย้ายจาก Windows ไปยัง iPad
หากสิ่งที่เป็นนามธรรมที่สร้างขึ้นมีรายละเอียดที่ไม่จำเป็นมากเกินไปมันจะล้มเหลวในการสร้างสิ่งปลูกสร้างใหม่ด้วยการดำเนินงานของมันเอง: มันจะเป็นเพียงชื่ออื่นในสิ่งเดียวกัน