לפני שנדע על סוג הנתונים המופשטים, עלינו לדעת על מהו מבנה נתונים.
מהו מבנה הנתונים?
מבנה נתונים הוא טכניקה לארגון הנתונים כך שניתן יהיה לנצל את הנתונים ביעילות. ישנן שתי דרכים להציג את מבנה הנתונים:
למה מבנה נתונים?
להלן היתרונות של השימוש במבנה הנתונים:
- אלו הם המרכיבים החיוניים המשמשים ליצירת אלגוריתמים מהירים וחזקים.
- הם עוזרים לנו לנהל ולארגן את הנתונים.
- מבני נתונים הופכים את הקוד לנקי יותר וקל יותר להבנה.
מהו סוג נתונים מופשט?
סוג נתונים מופשט הוא הפשטה של מבנה נתונים המספק רק את הממשק אליו חייב מבנה הנתונים לדבוק. הממשק אינו נותן פרטים ספציפיים על משהו שצריך להיות מיושם או באיזו שפת תכנות.
במילים אחרות, אנו יכולים לומר שסוגי נתונים מופשטים הם הישויות שהן הגדרות של נתונים ופעולות אך אין להן פרטי יישום. במקרה זה, אנו יודעים את הנתונים שאנו מאחסנים ואת הפעולות שניתן לבצע בנתונים, אך איננו יודעים על פרטי היישום. הסיבה לכך שאין פרטי יישום היא שלכל שפת תכנות יש אסטרטגיית יישום שונה למשל; מבנה נתונים C מיושם באמצעות מבנים בעוד שמבנה נתונים C++ מיושם באמצעות אובייקטים ומחלקות.
לדוגמה, רשימה הוא סוג נתונים מופשט המיושם באמצעות מערך דינמי ורשימה מקושרת. תור מיושם באמצעות תור מבוסס רשימות מקושר, תור מבוסס מערך ותור מבוסס מחסנית. מפה מיושמת באמצעות מפת עץ, מפת גיבוב או טבלת גיבוב.
מודל סוג נתונים מופשט
לפני שנדע על מודל סוגי הנתונים המופשטים, עלינו לדעת על הפשטה ואנקפסולציה.
מפה חוזרת ב-java
הפשטה: זוהי טכניקה של הסתרת הפרטים הפנימיים מהמשתמש ורק הצגת הפרטים הדרושים למשתמש.
אנקפסולציה: זוהי טכניקה של שילוב הנתונים ופונקציית האיבר ביחידה אחת המכונה אנקפסולציה.
האיור שלמעלה מציג את מודל ה-ADT. ישנם שני סוגים של מודלים במודל ADT, כלומר, הפונקציה הציבורית והפונקציה הפרטית. מודל ADT מכיל גם את מבני הנתונים שבהם אנו משתמשים בתוכנית. במודל זה, מתבצעת אנקפסולציה ראשונה, כלומר, כל הנתונים עטופים ביחידה אחת, כלומר, ADT. לאחר מכן, ההפשטה מבוצעת פירושה הצגת הפעולות שניתן לבצע על מבנה הנתונים ומהם מבני הנתונים שבהם אנו משתמשים בתוכנית.
בואו נבין את סוג הנתונים המופשטים עם דוגמה מהעולם האמיתי.
אם ניקח בחשבון את הסמארטפון. אנו מסתכלים על המפרט הגבוה של הסמארטפון, כגון:
- 4GB של זיכרון RAM
- מעבד Snapdragon 2.2GHz
- מסך LCD בגודל 5 אינץ'
- מצלמה כפולה
- אנדרואיד 8.0
המפרט לעיל של הסמארטפון הם הנתונים, ונוכל גם לבצע את הפעולות הבאות בסמארטפון:
הסמארטפון הוא ישות שהנתונים או המפרט והפעולות שלה ניתנים לעיל. ההשקפה המופשטת/לוגית והפעולות הן השקפות מופשטות או לוגיות של סמארטפון.
תצוגת היישום של התצוגה המופשטת/הלוגית לעיל ניתנת להלן:
class Smartphone { private: int ramSize; string processorName; float screenSize; int cameraCount; string androidVersion; public: void call(); void text(); void photo(); void video(); }
הקוד לעיל הוא יישום המפרטים והפעולות שניתן לבצע בסמארטפון. תצוגת היישום יכולה להיות שונה מכיוון שהתחביר של שפות התכנות שונה, אך התצוגה המופשטת/הלוגית של מבנה הנתונים תישאר זהה. לכן, אנו יכולים לומר שההשקפה המופשטת/הלוגית אינה תלויה בהשקפת היישום.
הערה: אנו יודעים את הפעולות שניתן לבצע על סוגי הנתונים המוגדרים מראש כגון int, float, char וכו', אך איננו יודעים את פרטי היישום של סוגי הנתונים. לכן, אנו יכולים לומר שסוג הנתונים המופשטים נחשב לתיבה הנסתרת שמסתירה את כל הפרטים הפנימיים של סוג הנתונים.
דוגמה למבנה נתונים
נניח שיש לנו מערך אינדקס בגודל 4. יש לנו מיקום אינדקס שמתחיל מ-0, 1, 2, 3. מערך הוא מבנה נתונים שבו האלמנטים מאוחסנים במיקום רציף. כתובת הזיכרון של האלמנט הראשון היא 1000, האלמנט השני הוא 1004, האלמנט השלישי הוא 1008, והאלמנט הרביעי הוא 1012. מכיוון שהוא מסוג מספר שלם אז הוא יתפוס 4 בתים וההבדל בין הכתובות של כל אלמנט הוא 4 בתים. הערכים המאוחסנים במערך הם 10, 20, 30 ו-40. ערכים אלו, מיקומי האינדקס וכתובות הזיכרון הם המימושים.
ניתן להגדיר את התצוגה המופשטת או הלוגית של מערך המספרים השלמים כ:
כיצד להמיר char ל-string Java
- הוא מאחסן קבוצה של אלמנטים מסוג מספר שלם.
- הוא קורא את האלמנטים לפי מיקום, כלומר, אינדקס.
- זה משנה את האלמנטים לפי אינדקס
- הוא מבצע מיון
תצוגת היישום של מערך המספרים השלמים:
a[4] = {10, 20, 30, 40} cout<< a[2] a[3] = 50