ความแตกต่างระหว่างเสมือนและนามธรรม

ความแตกต่างระหว่างเสมือนและนามธรรม
ความแตกต่างระหว่างเสมือนและนามธรรม

วีดีโอ: ความแตกต่างระหว่างเสมือนและนามธรรม

วีดีโอ: ความแตกต่างระหว่างเสมือนและนามธรรม
วีดีโอ: รู้จัก IaaS PaaS SaaS ความแตกต่างของทั้ง 3 ฟังก์ชัน และการใช้งานบน Cloud 2024, พฤศจิกายน
Anonim

เสมือนกับนามธรรม

Virtual และ Abstract เป็นคำสำคัญสองคำที่ใช้ในภาษาการเขียนโปรแกรม Object Oriented (OO) ส่วนใหญ่ เช่น Java และ C แม้ว่าจะมีความแตกต่างเล็กน้อยในความหมายในภาษาต่างๆ กัน แต่ทั้งคีย์เวิร์ดเสมือนและบทคัดย่อก็ให้ความรู้สึกถึงการใช้งานบางส่วนกับเอนทิตีที่เชื่อมต่ออยู่

นามธรรม

โดยปกติ คลาสนามธรรม หรือที่เรียกว่า Abstract Base Classes (ABC) จะไม่สามารถสร้างอินสแตนซ์ได้ (ไม่สามารถสร้างอินสแตนซ์ของคลาสนั้นได้) ดังนั้น คลาสนามธรรมจะมีความหมายก็ต่อเมื่อภาษาการเขียนโปรแกรมรองรับการสืบทอด (ความสามารถในการสร้างคลาสย่อยจากการขยายคลาส)คลาสนามธรรมมักจะแสดงแนวคิดหรือเอนทิตีที่เป็นนามธรรมที่มีการนำไปใช้บางส่วนหรือไม่มีเลย ดังนั้นคลาสนามธรรมจึงทำหน้าที่เป็นคลาสพาเรนต์ซึ่งคลาสย่อยได้รับมา ดังนั้นคลาสย่อยจะแชร์คุณสมบัติที่ไม่สมบูรณ์ของคลาสพาเรนต์และสามารถเพิ่มฟังก์ชันการทำงานเพื่อทำให้สมบูรณ์ได้ คลาสนามธรรมอาจมีเมธอดนามธรรม คลาสย่อยที่ขยายคลาสนามธรรมอาจใช้วิธีนามธรรม (สืบทอด) เหล่านี้ ถ้าคลาสลูกใช้วิธี Abstract ทั้งหมด คลาสนั้นจะเป็นคลาสที่เป็นรูปธรรม แต่ถ้าไม่ใช่ คลาสย่อยก็จะกลายเป็นคลาสนามธรรมด้วย ทั้งหมดนี้หมายความว่า เมื่อโปรแกรมเมอร์เสนอชื่อคลาสเป็นบทคัดย่อ เธอกำลังบอกว่าคลาสจะไม่สมบูรณ์และจะมีองค์ประกอบที่จำเป็นต้องทำให้สมบูรณ์โดยคลาสย่อยที่สืบทอดมา นี่เป็นวิธีที่ดีในการสร้างสัญญาระหว่างโปรแกรมเมอร์สองคน ซึ่งทำให้งานในการพัฒนาซอฟต์แวร์ง่ายขึ้น โปรแกรมเมอร์ที่เขียนโค้ดเพื่อสืบทอดต้องปฏิบัติตามคำจำกัดความของเมธอด (แต่แน่นอนว่าสามารถนำไปใช้ได้เอง)ใน Java และ C คลาสและเมธอดของบทคัดย่อถูกประกาศโดยใช้คำสำคัญที่เป็นนามธรรม

เสมือน

เมธอด/ฟังก์ชันเสมือนให้ความสามารถในการเลือกแทนที่พฤติกรรมโดยคลาสที่สืบทอดมา (โดยใช้ฟังก์ชันที่มีลายเซ็นเดียวกัน) แนวคิดของฟังก์ชันเสมือนมีความสำคัญในสถานการณ์ต่อไปนี้ สมมติว่าคลาสได้รับมาจากคลาสย่อย เมื่อใดก็ตามที่มีการใช้อ็อบเจ็กต์ของคลาสที่ได้รับ คลาสนั้นอาจอ้างถึงอ็อบเจ็กต์ของคลาสฐานหรือคลาสที่ได้รับ แต่พฤติกรรมการเรียกเมธอดอาจคลุมเครือได้หากเมธอดคลาสพื้นฐานถูกแทนที่ ดังนั้น เพื่อแก้ไขความกำกวมนี้ คำหลักเสมือนจึงถูกใช้ หากเมธอดถูกทำเครื่องหมายเป็นเสมือน ฟังก์ชันของคลาสที่ได้รับจะถูกเรียก (ถ้ามี) หรือมิฉะนั้นจะเรียกฟังก์ชันของคลาสพื้นฐาน ตัวอย่างเช่น ใน C ++ คำหลักเสมือนถูกใช้เพื่อจุดประสงค์นี้ทุกประการ ใน C มีการใช้คีย์เวิร์ดเสมือนในลักษณะเดียวกัน แต่นอกจากนี้ ควรใช้การแทนที่คีย์เวิร์ดเพื่อแก้ไขวิธีการแทนที่ทั้งหมดแต่ใน Java ไม่มีคีย์เวิร์ดเสมือนที่ชัดเจน วิธีการที่ไม่คงที่ทั้งหมดถือเป็นเสมือน ฟังก์ชันเสมือนที่ไม่มีเนื้อหาเรียกว่าฟังก์ชันเสมือนบริสุทธิ์ ใน Java และ C วิธีการแบบนามธรรมนั้นแท้จริงแล้ว Pure Virtual

ความแตกต่างระหว่างเสมือนจริงและนามธรรม

แม้ว่าบทคัดย่อและเสมือนเป็นคำหลัก/แนวคิดสองคำที่ให้ความหมายของการใช้งานที่ไม่สมบูรณ์กับหน่วยงานที่เกี่ยวข้อง แต่ก็มีความแตกต่างกัน เมธอดนามธรรม (ที่ต้องกำหนดไว้ในคลาสบทคัดย่อ) ไม่มีการนำไปใช้เลย ในขณะที่เมธอดเสมือนอาจมีการนำไปใช้ หากวิธีการนามธรรมถูกขยายโดยคลาสที่เป็นรูปธรรม จะต้องดำเนินการวิธีการนามธรรมที่สืบทอดมาทั้งหมด ในขณะที่เมธอดเสมือนที่สืบทอดมาอาจถูกแทนที่หรือไม่ก็ได้