องค์ประกอบคือเมื่อคลาสมีฟังก์ชั่นบางอย่างโดยการสร้างอินสแตนซ์คลาส (อาจเป็นภายใน) ซึ่งใช้ฟังก์ชันนี้แทนการสืบทอดจากคลาสนั้น
ตัวอย่างเช่นถ้าคุณมีคลาสที่จำลองเรือและตอนนี้คุณกำลังถูกบอกว่าเรือของคุณควรมีลานจอดเฮลิคอปเตอร์มันไม่ใช่เรื่องธรรมดาเลยที่จะได้รับเรือของคุณจากลานจอดเฮลิคอปเตอร์ (duh!) แทนคุณควรมี เรือของคุณมีชั้นเรียนลานจอดเฮลิคอปเตอร์และเปิดเผยด้วยShip.getHelipad()
วิธีการบางอย่าง
ในปีที่ผ่านมา (ทศวรรษหรือมากกว่านั้น) ผู้คนเคยมองว่าการสืบทอดเป็นวิธีที่รวดเร็วและง่ายต่อการรวมฟังก์ชันการทำงานดังนั้นจึงมีตัวอย่างมากมายของชนิด "เรือที่สืบทอดจากลานจอดเฮลิคอปเตอร์" ซึ่งแน่นอนว่าอ่อนแอมาก
แต่คำว่า "การประพันธ์ความโปรดปรานเหนือมรดก" ได้ถูกใช้ถ้อยคำอย่างระมัดระวังเพื่อให้ชัดเจนว่านี่เป็นเพียงข้อเสนอแนะไม่ใช่กฎ ผู้เขียนของ dictum นั้นระวังอย่างมากพอที่จะละเว้นจากการพูดอะไรบางอย่างเช่น "เจ้าจะไม่ใช้มรดกเพียงอย่างเดียวในการแต่งเพลง" สิ่งนี้ทำให้ความสนใจของชุมชนวิศวกรรมซอฟต์แวร์มีความจริงที่ว่าการถ่ายทอดทางพันธุกรรมมีการใช้มากเกินไปในขณะที่ในหลาย ๆ กรณีองค์ประกอบทำให้การออกแบบมีความชัดเจนสวยงามและบำรุงรักษาได้ดีกว่าการสืบทอด
ดังนั้นโดยพื้นฐานแล้วคำว่า "การประพันธ์ความโปรดปรานเหนือการสืบทอด" นั้นเป็นการแนะนำว่าเมื่อใดก็ตามที่คุณเผชิญกับ "การสืบทอดหรือการแต่ง?" คำถามคุณควรคิดให้ดีว่าอะไรคือกลยุทธ์ที่เหมาะสมที่สุดและโอกาสที่มากที่สุดคือกลยุทธ์ที่เหมาะสมที่สุดจะกลายเป็นองค์ประกอบไม่ใช่การสืบทอด
แต่เนื่องจากนี่ไม่ใช่กฎคุณควรจำไว้ว่ามีหลายกรณีที่การสืบทอดนั้นเป็นธรรมชาติมากกว่า หากคุณใช้การประพันธ์ที่นั่นซึ่งคุณควรใช้การสืบทอดสิ่งชั่วร้ายมากมายจะเกิดขึ้นในโค้ดของคุณ
หากต้องการกลับไปที่ตัวอย่างเรือถ้าเรือของคุณต้องการนำเสนออินเทอร์เฟซสำหรับการโต้ตอบกับFloatingMachine
มันจะเป็นเรื่องธรรมดากว่าที่จะได้มาจากFloatingMachine
คลาสนามธรรมซึ่งอาจเป็นไปได้ว่ามาจากMachine
คลาสนามธรรมอื่น
นี่คือกฎง่ายๆสำหรับคำตอบของการแต่งเทียบกับคำถามมรดก:
คลาสของฉันมีความสัมพันธ์แบบ "เป็น" กับส่วนต่อประสานที่ต้องเปิดเผยหรือไม่? ถ้าใช่ใช้การสืบทอด ถ้าไม่ใช้องค์ประกอบ
เรือ "เป็น" เครื่องลอยและเครื่องลอย "เป็น" เครื่อง ดังนั้นการรับมรดกจึงเป็นสิ่งที่ดีที่สุดสำหรับคนเหล่านั้น แต่เรือไม่ใช่ลานจอดเฮลิคอปเตอร์แน่นอน ดังนั้นควรเขียนฟังก์ชันการทำงานของลานจอดเฮลิคอปเตอร์ให้ดีขึ้น