ฉันคิดว่าสไลด์ 13 ในการนำเสนอของเขา ( ค่านิยม ) ช่วยให้เข้าใจสิ่งนี้:
ค่า
- ไม่ต้องการวิธีการ
- ฉันสามารถส่งค่าโดยไม่มีรหัส
และคุณก็สบาย
ความเข้าใจของฉันคือ Hickey แนะนำว่าถ้าฉันต้องการพูดเพิ่มค่าที่คุณส่งมาให้ฉันเป็นสองเท่าฉันก็เขียนโค้ดที่ดูเหมือน
MyValue = Double(YourValue)
คุณจะเห็นโค้ดข้างต้นจะเหมือนกันไม่ว่าสิ่งที่มีค่าชนิดที่คุณส่งไม่ - การเรียงลำดับของการนำมาใช้ใหม่ที่สมบูรณ์แบบ
ทีนี้มันจะเป็นอย่างไรในภาษาที่มีวัตถุและส่วนต่อประสาน?
Doublable MyValue = YourValue.Double()
โอ้เดี๋ยวก่อน! สิ่งที่ถ้าYourValue
ไม่ใช้Doublable
? ไม่ว่ามันจะไม่เป็นสองเท่า แต่มันอาจเป็นไปได้อย่างสมบูรณ์แบบ แต่ ... จะเกิดอะไรขึ้นถ้าไม่มีวิธี Double
? (เกิดอะไรขึ้นถ้ามีวิธีที่เรียกว่าพูดTwiceAsMuch
?)
เอ่อโอ้เรามีปัญหา YourValue.Double
จะไม่ทำงานมันไม่สามารถใช้ซ้ำได้อีก ตามที่ฉันได้อ่านสไลด์ด้านบนนี่เป็นสิ่งที่ Hickey หมายถึงเมื่อเขาพูดว่า
คุณจะเห็นว่าอินเทอร์เฟซสันนิษฐานว่าวัตถุถูกส่งผ่าน "พร้อมกับวิธีการ" พร้อมกับรหัสที่ทำงานกับสิ่งเหล่านี้ ในการใช้ออบเจกต์เราต้องเข้าใจวิธีการเรียกใช้โค้ดนั้นวิธีการเรียก
เมื่อวิธีการที่คาดว่าจะหายไปมีปัญหาแม้ว่าความหมายการดำเนินการที่ต้องการทำให้รู้สึกที่สมบูรณ์แบบสำหรับวัตถุ ตามที่ระบุไว้ในงานนำเสนอค่าไม่ต้องการวิธีการ ("ฉันสามารถส่งค่าโดยไม่มีรหัสและคุณไม่เป็นไร") อนุญาตให้เขียนรหัสที่เกี่ยวข้องกับพวกเขาในลักษณะทั่วไป
หมายเหตุด้าน: ความคิดในการส่งค่าที่ไม่ใช้โค้ดช่วยเตือนฉันถึงรูปแบบ Flyweightใน OOP
วัตถุที่ลดการใช้หน่วยความจำให้น้อยที่สุดโดยการแบ่งปันข้อมูลให้มากที่สุดกับวัตถุอื่นที่คล้ายคลึงกัน มันเป็นวิธีการที่จะใช้วัตถุในจำนวนมากเมื่อมีการแสดงที่เรียบง่ายซ้ำจะใช้ในปริมาณที่ไม่เป็นที่ยอมรับของหน่วยความจำ ... วัตถุฟลายเวทโดยมีความหมายวัตถุคุ้มค่า ตัวตนของอินสแตนซ์ของวัตถุนั้นไม่มีผลดังนั้นสองอินสแตนซ์ของ Flyweight ที่มีค่าเดียวกันจะถือว่าเท่ากัน ...
การใช้งานแบบ Flyweight ที่ฉันเคยเห็นมักใช้วิธีการเดียวกันในการลอกรหัส (วิธีการ, อินเทอร์เฟซ) จากวัตถุและส่งผ่านสิ่งต่าง ๆ รอบ ๆ ด้วยค่าที่ไม่ต้องใช้โค้ดคาดหวังว่าการรับรหัสมีความจำเป็น
สิ่งนี้ให้ความรู้สึกเหมือนอยู่ที่สไลด์ "ค่าไม่ต้องการวิธีการฉันสามารถส่งค่าโดยไม่มีรหัสและคุณสบายดี"