- ลักษณะของการถ่ายทอดทางพันธุกรรม
- ลำดับชั้น
- ความแตกต่าง
- ประเภทของการถ่ายทอดทางพันธุกรรม
- มรดกที่ไม่ซ้ำกัน
- การสืบทอดหลายระดับ
- การสืบทอดตามลำดับชั้น
- การสืบทอดลูกผสม
- การสืบทอดหลายรายการ
- ประเภทของการสืบทอดจากคลาสพื้นฐาน
- มรดกสาธารณะ
- มรดกที่ได้รับการคุ้มครอง
- มรดกส่วนตัว
- ตัวอย่าง
- ตัวอย่าง Python
- ตัวอย่างใน C ++
- อ้างอิง
การสืบทอดในการเขียนโปรแกรมเชิงวัตถุเป็นวิธีการจัดระเบียบวัตถุในลำดับชั้นจากทั่วไปไปยังเฉพาะ เป็นอุปกรณ์ที่ใช้ในการขยายคลาสไปยังคลาสอื่นโดยรักษาการทำงานแบบอะนาล็อก
ในภาษาเชิงอ็อบเจ็กต์ที่อิงคลาสส่วนใหญ่อ็อบเจ็กต์ที่สร้างขึ้นโดยการสืบทอดเรียกว่าอ็อบเจ็กต์ลูกจะได้รับคุณสมบัติและพฤติกรรมทั้งหมดของอ็อบเจ็กต์พาเรนต์
การพิสูจน์การสืบทอดอย่างง่ายในการวางแนววัตถุ ที่มา: Pluke / CC0 Creative Commons CC0 1.0 โดเมนสาธารณะสากล
ดังนั้นจึงเป็นคุณภาพที่แสดงถึงความสัมพันธ์ระหว่างชนชั้นต่างๆ การสืบทอดช่วยให้ชั้นเรียนมีพฤติกรรมเช่นเดียวกับคลาสอื่นและสามารถขยายหรือปรับพฤติกรรมนั้นเพื่อให้มีการดำเนินการพิเศษสำหรับความต้องการเฉพาะ
การสืบทอดสามารถช่วยแสดงถึงวัตถุที่มีความแตกต่างบางอย่างและความคล้ายคลึงกันบางอย่างในวิธีการทำงาน คุณสามารถใส่ฟังก์ชันทั้งหมดที่อ็อบเจ็กต์มีเหมือนกันในคลาสพื้นฐานแล้วกำหนดคลาสย่อยอย่างน้อยหนึ่งคลาสด้วยฟังก์ชันที่คุณกำหนดเอง
ลักษณะของการถ่ายทอดทางพันธุกรรม
การสืบทอดเป็นหนึ่งในลักษณะสำคัญของการเขียนโปรแกรมเชิงวัตถุซึ่งใช้เพื่อกำหนดคลาสใหม่จากคลาสที่มีอยู่
นั่นคือคลาสใหม่สามารถได้มาจากคลาสพื้นฐานที่มีอยู่เพิ่มคุณสมบัติใหม่ คุณไม่จำเป็นต้องเขียนตั้งแต่เริ่มต้น ดังนั้นการสืบทอดจึงเป็นวิธีการนำโค้ดที่มีอยู่กลับมาใช้ใหม่ได้อย่างง่ายดาย
หากคุณมีคลาสที่ทำเกือบทุกอย่างที่คุณต้องการอยู่แล้วคุณสามารถสร้างคลาสย่อยที่พฤติกรรมบางอย่างถูกแทนที่บางส่วนหรืออาจมีการเพิ่มฟังก์ชันใหม่ ๆ
คลาสที่ได้รับสืบทอดวิธีการทั้งหมดของคลาสพื้นฐานยกเว้นสิ่งต่อไปนี้:
- ผู้สร้างผู้ทำลายและผู้สร้างสำเนาของคลาสพื้นฐาน
- ตัวดำเนินการมากเกินไปจากคลาสพื้นฐาน
- ฟังก์ชั่นที่เป็นมิตรระดับพื้นฐาน
ลำดับชั้น
ในฐานะที่เป็นแผนผังครอบครัวการสืบทอดทำหน้าที่สร้างลำดับชั้นของคลาส สิ่งสำคัญคือต้องสังเกตว่าแอตทริบิวต์ที่กำหนดสำหรับคลาสพื้นฐานจะปรากฏในคลาสที่ได้รับโดยอัตโนมัติ นอกจากนี้วิธีการสำหรับคลาสพื้นฐานจะใช้ได้กับอนุพันธ์
คลาสถูกกล่าวว่าเป็นคลาสย่อยของคลาสที่สืบทอดมา ในทางกลับกันคลาสนี้จะเป็นซูเปอร์คลาสของคุณ คลาสทั่วไปส่วนใหญ่สามารถเรียกได้ว่าเป็นคลาสฐานเนื่องจากอยู่ที่ฐานของลำดับชั้น
ความแตกต่าง
การสืบทอดเป็นที่นิยมมากในบางภาษาที่มีประเภทคงที่เนื่องจากโปรแกรมเมอร์สามารถหลีกเลี่ยงข้อ จำกัด บางประการของประเภทคงที่ได้
อ็อบเจ็กต์ที่สืบทอดมาจากอ็อบเจ็กต์อื่นถือเป็นประเภทย่อยของอ็อบเจ็กต์นั้น ตัวอย่างอาจเป็นวัตถุ "ผู้สอน" และ "นักเรียน" ซึ่งแต่ละอย่างสืบทอดมาจาก "บุคคล"
หากผู้สอนและนักเรียนเป็นบุคคลประเภทเดียวกันคุณสามารถเขียนฟังก์ชันที่ยอมรับประเภทบุคคลเป็นพารามิเตอร์และใช้ได้กับอ็อบเจ็กต์ของผู้สอนและนักเรียนเนื่องจากทั้งคู่เป็นทายาทของบุคคล
ประเภทของการถ่ายทอดทางพันธุกรรม
มรดกที่ไม่ซ้ำกัน
เมื่อคลาสที่ได้รับสืบทอดคุณสมบัติและพฤติกรรมของคลาสฐานเดียว นั่นคือคลาสหนึ่งขยายไปยังคลาสอื่นเพียงคลาสเดียว
การสืบทอดหลายระดับ
หมายถึงแกดเจ็ตที่คุณสามารถสืบทอดจากคลาสที่ได้รับมาทำให้คลาสที่ได้รับนี้เป็นคลาสพื้นฐานสำหรับคลาสใหม่ นั่นคือผลลัพธ์เมื่อคลาสที่ได้รับถูกสร้างขึ้นจากคลาสที่ได้รับอื่น
การสืบทอดตามลำดับชั้น
ในการสืบทอดนี้คลาสย่อยจำนวนมากสืบทอดมาจากคลาสเดียว นั่นคือมันเกิดขึ้นเมื่อคลาสพื้นฐานเดียวได้รับการสืบทอดโดยคลาสที่ได้รับมากกว่าหนึ่งคลาส
การสืบทอดลูกผสม
เป็นผลจากการสืบทอดเมื่อมีการรวมมรดกก่อนหน้านี้สามรายการ (เดี่ยวลำดับชั้นและหลายระดับ)
การสืบทอดหลายรายการ
มันสอดคล้องกับตัวเลขการถ่ายทอดทางพันธุกรรมเมื่อคลาสสืบทอดจากซูเปอร์คลาสมากกว่าหนึ่งคลาส ข้อเสียเปรียบของการสืบทอดประเภทนี้คือคลาสที่ได้รับจะต้องจัดการกับการพึ่งพาที่มีในคลาสพื้นฐานสองคลาส
ในทางกลับกันการสืบทอดประเภทนี้ช่วยให้โปรแกรมเมอร์สามารถสร้างคลาสที่รวมแง่มุมของหลายคลาสและลำดับชั้นที่สอดคล้องกัน
ประเภทของการสืบทอดจากคลาสพื้นฐาน
มรดกสาธารณะ
เมื่อคลาสมาจากคลาสฐานสาธารณะสมาชิกสาธารณะของคลาสพื้นฐานจะกลายเป็นสมาชิกสาธารณะของคลาสที่ได้รับและสมาชิกที่ได้รับการป้องกันของคลาสพื้นฐานจะกลายเป็นสมาชิกที่ได้รับการป้องกันของคลาสที่ได้รับ
สมาชิกส่วนตัวของซูเปอร์คลาสจะไม่สามารถเข้าถึงได้โดยตรงจากคลาสที่ได้รับ แต่สามารถเข้าถึงได้ผ่านการโทรไปยังสาธารณะและสมาชิกที่ได้รับการป้องกันของคลาสพื้นฐาน
มรดกที่ได้รับการคุ้มครอง
เมื่อคลาสถูกสร้างขึ้นซึ่งสืบทอดมาจากซูเปอร์คลาสที่ได้รับการป้องกันทั้งสมาชิกสาธารณะและสมาชิกที่ได้รับการป้องกันของซูเปอร์คลาสนี้จะกลายเป็นสมาชิกที่ได้รับการป้องกันของคลาสที่ได้รับ
มรดกส่วนตัว
เมื่อคลาสย่อยถูกสร้างขึ้นจากซูเปอร์คลาสส่วนตัวสมาชิกสาธารณะและสมาชิกที่ได้รับการป้องกันของซูเปอร์คลาสนี้จะกลายเป็นสมาชิกส่วนตัวของคลาสย่อย
ตัวอย่าง
ตัวอย่าง Python
เพื่อแสดงให้เห็นว่าหลักการของการสืบทอดทำงานอย่างไรเราจะใช้โรบ็อตหรือคลาสโรบ็อตที่ดีกว่าในภาษาโปรแกรม Python ในการทำเช่นนี้จะมีการระบุคลาสที่เรียกว่าRobotMédico (PhysicianRobot) ซึ่งได้มาจาก Robot superclass
หากคุณดูโค้ดของคลาสRobotMédicoคุณจะเห็นว่าไม่มีการกำหนดแอตทริบิวต์หรือวิธีการในคลาสนี้
เนื่องจากคลาส RobotMedico เป็นคลาสย่อยของ Robot จึงสืบทอดทั้งเมธอด __init__ และ say_hi ในกรณีนี้ การสืบทอดวิธีการเหล่านี้หมายความว่าสามารถใช้งานได้ราวกับว่าถูกกำหนดไว้ในคลาสRobotMédico
เมื่อสร้างอินสแตนซ์ของ RobotMedico ฟังก์ชัน __init__ จะสร้างแอตทริบิวต์ชื่อด้วย เมธอด say_hi สามารถใช้กับอ็อบเจกต์“ y” ของRobotMédicoได้ดังที่เห็นในผลลัพธ์ของโค้ดก่อนหน้า
ตัวอย่างใน C ++
คลาสสามารถสืบทอดจากคลาสได้มากกว่าหนึ่งคลาสซึ่งหมายความว่าคลาสนั้นสามารถสืบทอดข้อมูลและฟังก์ชันจากซูเปอร์คลาสหลาย ๆ คลาสได้ ในการกำหนดคลาสที่ได้รับคุณใช้รายการการสืบทอดคลาสเพื่อระบุคลาสพื้นฐาน
รายการที่มาของคลาสใน C ++ ตั้งชื่อคลาสพื้นฐานตั้งแต่หนึ่งคลาสขึ้นไปและมีรูปแบบต่อไปนี้คลาสที่ได้รับคลาส: คลาสพื้นฐานของตัวระบุการเข้าถึงโดยที่ตัวระบุการเข้าถึงเป็นแบบสาธารณะมีการป้องกันหรือไพรเวตและคลาสฐานคือ ชื่อของคลาสที่กำหนดไว้ก่อนหน้านี้ หากไม่ได้ใช้ตัวระบุการเข้าถึงความเป็นส่วนตัวจะถูกยึดตามค่าเริ่มต้น
Superclass "Shape" และคลาสที่ได้รับ "Rectangle" สามารถพิจารณาได้ดังนี้:
เมื่อรวบรวมและดำเนินการโค้ดด้านบนผลลัพธ์ต่อไปนี้จะเกิดขึ้น: "Total area: 35"
อ้างอิง
- Dave Braunschweig (2020) การถ่ายทอดทางพันธุกรรมและความหลากหลาย ชุมชน Rebus นำมาจาก: press.rebus.community.
- หลักสูตร Python (2020) มรดก นำมาจาก: python-course.eu.
- Data Mentor (2020) R การสืบทอด นำมาจาก: datamentor.io.
- จุดสอน (2020) มรดก C ++ นำมาจาก: tutorialspoint.com.
- ข้อมูลสุทธิ (2020) มรดกประเภทต่างๆ นำมาจาก: net-informations.com.