ההבדל בין Virtual ו- Abstract

Anonim

Virtual לעומת Abstract

Virtual ו- Abstract הן שתי מילות מפתח המשמשות ברוב שפות התכנות מונחה עצמים (OO) כגון Java ו- C #. למרות שיש הבדלים קלים במה זה אומר בשפות שונות, הן מילות מפתח וירטואליות והן מילות מפתח מעניקות תחושה של יישום חלקי לגופים שהם מייחסים לו.

תקציר

- בדרך כלל, לא ניתן ליצור מופעים של כיתות אבסטרקטיות, הידועות גם בשם "כיתות בסיס מופשטות" (ABC) (לא ניתן ליצור מופע של מחלקה זו). אז, שיעורים מופשטים הם רק משמעות אם יש את שפת התכנות תומך ירושה (היכולת ליצור subclasses מ הרחבת בכיתה). שיעורים מופשטים בדרך כלל מייצגים מושג או ישות מופשטים עם יישום חלקי או ללא יישום. לכן, כיתות אבסטרקטיות משמשות ככיתות אב שמהן נגזרים כיתות ילדים, כך שכיתת הילדים תשתף את התכונות השלמות של קבוצת ההורה ותוכל להוסיף פונקציונליות להשלמתן. כיתות מופשטות עשויות להכיל שיטות מופשטות. תת-קבוצות המרחיבות מעמד מופשט יכולות ליישם שיטות אלו (מורשות). אם בכיתה הילד מיישם את כל אלה שיטות מופשטות, זה מעמד בטון. אבל אם זה לא, בכיתה הילד הופך גם בכיתה מופשטת. המשמעות של כל זה היא, שכאשר המתכנת מינה את הכיתה כתמצית, היא אומרת שהכיתה לא תהיה שלמה ויהיה לה אלמנט שצריך להשלים על ידי תת-הקבוצות המורשת. זוהי דרך טובה ליצור חוזה בין שני מתכנתים, אשר מפשט משימות בפיתוח תוכנה. מתכנת, שכותב קוד לרשת, צריך לעקוב אחר הגדרות השיטה בדיוק (אבל כמובן יכול להיות יישום משלה). ב- Java ו- C #, שיעורים ושיטות מופשטים מוסדרים באמצעות מילת מפתח מופשטת.

->

Virtual

שיטות / פונקציות וירטואליות מספקות את היכולת לעקוף את התנהגותה על ידי מחלקה בירושה (באמצעות פונקציה עם אותה חתימה). המושג פונקציה וירטואלית חשוב בתרחיש הבא. נניח שהמחלקה נגזרת על-ידי מחלקה של הילד, ולאחר מכן, כאשר נעשה שימוש באובייקט של המחלקה הנגזרת, ייתכן שהוא מתייחס לאובייקט של מחלקת הבסיס או של המחלקה הנגזרת. אבל, שיטת השיחה שיטת יכול להיות מעורפל אם בשיטות בכיתה בסיס הם בוטלו. אז, על מנת לפתור את העמימות, מילת מפתח וירטואלית משמש. אם השיטה מסומנת וירטואלית, אז הפונקציה של המחלקה הנגזרת נקראת (אם בכלל) או אחרת, הפונקציה של המחלקה הבסיסית נקראת. לדוגמה, ב- C + +, מילת מפתח וירטואלית משמשת בדיוק למטרה זו. ב- C #, מילת המפתח הווירטואלית משמשת באופן דומה, אך בנוסף, יש להחליף את מילת המפתח כדי לשנות את כל השיטות שנדחו.אבל ב- Java, אין מילת מפתח וירטואלית מפורשת. כל השיטות הלא סטטיות נחשבות וירטואליות. פונקציות וירטואליות ללא גוף נקראות פונקציות וירטואליות טהורות. ב- Java ו- C #, שיטות תקציר הם למעשה Pure Virtual.

ההבדל בין Virtual ו- Abstract

למרות Abstract ו Virtual הם שתי מילות מפתח / מושגים המספקים משמעות של יישום לא שלם ישויות הקשורות אליו, יש להם את ההבדלים ביניהם. שיטות אבסטרקטיות (שיש להגדירן בתוך כיתות אבסטרקטיות) אינן מיושמות כלל, בעוד ששיטות וירטואליות עשויות להיות מיושמות. אם שיטות אבסטרקט מורחבות על ידי מחלקה קונקרטית, כל שיטות מופשטות בירושה חייב להיות מיושם, תוך ירושה שיטות וירטואליות או לא ניתן לדרוס.