..
บางครั้งคุณต้องการที่จะสร้างชั้นของวัตถุที่มี"นี้"คุณสมบัติ แต่ยัง"นี้"และ"อื่น ๆ นี้"ซึ่งเป็นบางทีอาจจะถูกเขียนในที่อื่นในรหัสแหล่งที่มาของเรา
ในคำอื่น ๆ ที่เราต้องการจะสร้างชั้นที่ยืมวิธีการและคุณสมบัติที่กำหนดไว้ในส่วนอื่น ๆ ของรหัสแหล่งที่มาหรือในห้องสมุดบาง
ตรงกันข้ามเราจะรวบรวมรอบคุณสมบัติเช่นเดียวกับรหัสต้นฉบับของเราในสถานที่ที่สามารถเข้าถึงได้ทั้งหมดอย่างใดอย่างหนึ่ง อย่างไร?
purists หวาดกลัวที่จะเขียนโปรแกรมเชิงวัตถุและการสนับสนุน -- ในความคิดของฉันไม่ได้ทั้งหมดโดยไม่มีเหตุผล -- ที่จำเป็นต้องใช้ของประเภทนี้ทุกคนสามารถแก้ไขได้ด้วยการใช้ที่เหมาะสมของ polymorphism
อื่น ๆ โดยเฉพาะอย่างยิ่งหากพวกเขามาจากประสบการณ์กับภาษาเช่น C + +, ยืนยันว่าแม่นยำเนื่องจากความต้องการเหล่านี้ใช้มรดกหลาย
ภาษาในทางปฏิบัติเช่น Ruby, แต่แก้ไขปัญหาโดยการให้เทคนิคที่เรียกว่า"mixin", ชื่อ -- มันเสียง! -- คนไอศครีมให้เธอ Massuchussets ประกอบด้วยไอศครีมรสชาติต่างๆ (ครีมช็อคโกแลต, ... )
mixins ทับทิม
เทคนิค, mixins ทับทิมจะดำเนินการใช้ภายในคลาส, รหัสที่กำหนดไว้ในโมดูลต่างๆ (โมดูล)
เพื่อที่จะใช้เป็นตัวอย่างเล็กน้อยสมมติว่าผมต้องการที่จะดำเนินการประมวลผลคำที่จะพิมพ์ออกมาเป็นมิตรของฉันของจดหมายธุรกิจ ตั้งแต่ที่คุณต้องการจะป้อนเฉพาะข้อมูลที่จำเป็นเช่นผู้รับและข้อความ โปรแกรมจะคิดที่แตกต่างกันง่ายเช่น"เซอร์"และ"ขอแสดงความนับถือ."
ขอเริ่มต้นด้วยการกำหนดในรูปแบบที่เป็นมิตร :
CordialitaLettera โมดูล
def เริ่มต้น (ที่อยู่)
กลับ"รักนาย."ผู้รับ + +"\ n"
ท้าย
ลายเซ็นสุดท้าย (ตัวอักษร)
กลับตัวอักษร +"\ n"+"ขอแสดงความนับถือ \ nCarlo Smith"
ท้าย
ท้าย
ไม่มีสิ่งใดในโดยเฉพาะอย่างยิ่งจากนั้นเพียงสองวิธีที่สามารถเปลี่ยนข้อความที่ได้รับเป็นค่านำเข้า
Let's เขียนระดับ"ผสม"กับวิธีการเหล่านี้เพียง mixin :
ระดับตัวอักษร
รวมถึงการ CordialitaLettera
สุดท้าย stampaLettera (ผู้รับ, ข้อความ)
จุดเริ่มต้น = (รับ)
= ตัวอักษร + การโพสต์
ทำให้ลายเซ็น (ตัวอักษร)
ท้าย
ท้าย
ตัวอักษรดังกล่าวข้างต้นในชั้นเรียนมีวิธีการที่จะใช้เป็นอินพุทเท่านั้นส่วนตัวแปรของตัวอักษรด้วยรูปแบบที่เป็นมิตรที่กำหนดไว้ในโมดูล
ที่คุณสามารถดูไวยากรณ์ค่อนข้างคล้ายกับการรับมรดกใน Ruby, แต่แตกต่างจากหลังในชั้นเรียนสามารถใช้หมายเลขใด ๆ ของรูปแบบ -- และเป็นที่รู้จักกันเป็นชั้นเรียนสามารถจะได้มาจาก และมีเพียงชั้นผู้ปกครองหนึ่ง (ทับทิมไม่สนับสนุนการสืบทอดหลาย!)
ตัวอย่างเช่นเราสามารถเขียน :
def หลัก ()
Lettere.new Lengin =
lEngine.stampaLettera ('Alessio Saltarini',
'ฉันเพียงแค่การถ่ายโอนดำเนินการต่อไป
ที่คุณต้องการ.')
ทำให้
lEngine.stampaLettera ('แมทธิว Pisconi',
'ฉันส่งโทรสารไปยัง nr.038283873.')
ท้าย
ซึ่งผลตอบแทน :
Saltarini รัก sig.Alessio, ฉันได้ทำเพียงแค่การถ่ายโอนที่คุณร้องขอ ขอแสดงความนับถือ Rossi ติคาร์โล
Pisconi รัก sig.Matteo, ผมส่งโทรสารไปยัง nr.038283873 ขอแสดงความนับถือ Rossi ติคาร์โลเทคนิคนี้ในหมู่สิ่งอื่น ๆ ที่ช่วยให้เราสามารถดูดซึมการใช้งานของ mixins ที่ของการเชื่อมต่อใน Java : ในความเป็นจริงถ้าชั้นเป็น"ผสม"กับรูปแบบในความเป็นจริงก็จะใช้วิธีการ (และดังนั้นจึงมีคุณสมบัติตรงตามอินเตอร์เฟซบางอย่าง) .
| |
Ruby และ Ruby on Rails (หลักสูตร)
สร้างโปรแกรมซอฟต์แวร์และเว็บด้วยทับทิมและ ร. จาก 39 € |