logo

סוגי נתונים מופשטים

א סוג נתונים מופשט (ADT) הוא מודל מושגי המגדיר קבוצה של פעולות והתנהגויות עבור מבנה נתונים מבלי לציין כיצד פעולות אלו מיושמות או כיצד הנתונים מאורגנים בזיכרון. ההגדרה של ADT מזכירה רק מה יש לבצע פעולות אבל לא אֵיך פעולות אלו יבוצעו. הוא אינו מפרט כיצד הנתונים יאורגנו בזיכרון ובאילו אלגוריתמים ישמשו ליישום הפעולות. זה נקרא 'מופשט' מכיוון שהוא מספק השקפה בלתי תלויה ביישום.

התהליך של מתן רק את הדברים החיוניים והסתרת הפרטים ידוע בשם הַפשָׁטָה.

תכונות של ADT



סוגי נתונים מופשטים (ADTs) הם דרך לכלול נתונים ופעולות על נתונים אלה ליחידה אחת. חלק מהתכונות העיקריות של ADTs כוללות:

  • הַפשָׁטָה: המשתמש אינו צריך לדעת את היישום של מבנה הנתונים רק ניתנים אלמנטים חיוניים.
  • מושג טוב יותר: ADT נותן לנו מושג טוב יותר של העולם האמיתי.
  • חָסוֹן: התוכנית חזקה ובעלת יכולת לתפוס שגיאות.
  • אנקפסולציה : ADTs מסתירים את הפרטים הפנימיים של הנתונים ומספקים ממשק ציבורי למשתמשים לאינטראקציה עם הנתונים. זה מאפשר תחזוקה ושינוי קל יותר של מבנה הנתונים.
  • הפשטת נתונים : ADTs מספקים רמת הפשטה מפרטי היישום של הנתונים. המשתמשים צריכים לדעת רק את הפעולות שניתן לבצע על הנתונים ולא כיצד פעולות אלו מיושמות.
  • עצמאות מבנה נתונים : ניתן ליישם ADTs באמצעות מבני נתונים שונים כגון מערכים או רשימות מקושרות מבלי להשפיע על הפונקציונליות של ADT.
  • הסתרת מידע: ADTs יכולים להגן על שלמות הנתונים על ידי מתן גישה רק למשתמשים מורשים ולפעולות. זה עוזר למנוע שגיאות ושימוש לרעה בנתונים.
  • מודולריות : ניתן לשלב ADTs עם ADTs אחרים כדי ליצור מבני נתונים גדולים יותר ומורכבים יותר. זה מאפשר גמישות ומודולריות רבה יותר בתכנות.

ADTs בסך הכל מספקים כלי רב עוצמה לארגון ולתפעל נתונים בצורה מובנית ויעילה.

תמונה זו מדגימה כיצד סוג נתונים מופשט (ADT) מסתיר מבני נתונים פנימיים (כמו רשימות מקושרות מערכים) באמצעות פונקציות ציבוריות ופרטיות החושפות רק ממשק מוגדר לתוכנית היישום.

סוגי נתונים מופשטים

למה להשתמש ב-ADTs?

הסיבות העיקריות לשימוש ב-ADT ב-Java מפורטות להלן:

  • אנקפסולציה: מסתיר פרטי יישום מורכבים מאחורי ממשק נקי.
  • שימוש חוזר : מאפשר יישומים פנימיים שונים (למשל מערך או רשימה מקושרת) מבלי לשנות שימוש חיצוני.
  • מודולריות: מפשט תחזוקה ועדכונים על ידי הפרדת לוגיקה.
  • בִּטָחוֹן: מגן על נתונים על ידי מניעת גישה ישירה תוך מזעור באגים ושינויים לא מכוונים.

דוגמה להפשטה

לדוגמה, אנו משתמשים בערכים פרימיטיביים כמו int float ו-char מתוך הבנה שסוגי נתונים אלו יכולים לפעול ולבצע ללא כל ידיעה על פרטי היישום שלהם. ADTs פועלים באופן דומה על ידי הגדרה אילו פעולות אפשריות מבלי לפרט את יישומן.

ההבדל בין ADTs ו-UDTs

הטבלה שלהלן מדגימה את ההבדל בין ADTs ו-UDTs.

תחליף js

אַספֶּקט

סוגי נתונים מופשטים (ADTs)

סוגי נתונים בהגדרת משתמש (UDTs)

הַגדָרָה

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

סוג נתונים מותאם אישית שנוצר על ידי שילוב או הרחבה של סוגים פרימיטיביים קיימים המציינים גם מבנה וגם פעולות.

ג'אווה בוליאני

מוֹקֵד

אילו פעולות מותרות וכיצד הן מתנהגות מבלי להכתיב כיצד הן מיושמות.

כיצד הנתונים מאורגנים בזיכרון וכיצד מבוצעות פעולות.

מַטָרָה

מספק מודל מופשט להגדרת מבני נתונים בצורה רעיונית.

מאפשר למתכנתים ליצור יישומים קונקרטיים של מבני נתונים באמצעות טיפוסים פרימיטיביים.

פרטי יישום

אינו מציין כיצד מבצעים מיושמות או כיצד הנתונים בנויים.

מציין כיצד ליצור ולארגן סוגי נתונים כדי ליישם את המבנה.

נוֹהָג

משמש לתכנון והמשגה של מבני נתונים.

משמש ליישום מבני נתונים המממשים את המושגים המופשטים המוגדרים על ידי ADTs.

דוּגמָה

רשימת ADT Stack ADT תור ADT.

מבנים רשומות ספירות כיתות.

דוגמאות ל-ADTs

עכשיו בואו נבין שלושה ADT נפוצים: List ADT Stack ADT ו-Queue ADT.

1. רשימת ADT

List ADT (סוג נתונים מופשט) הוא אוסף רציף של אלמנטים התומכים בסט של פעולות מבלי לציין את היישום הפנימי . הוא מספק דרך מסודרת לאחסן גישה ולשנות נתונים.

סוגי נתונים מופשטיםנראות של רשימה

פעולות:

עיצוב יחיד

ה- List ADT צריך לאחסן את הנתונים הנדרשים ברצף וצריך לבצע את הפעולות הבאות :

  • לְקַבֵּל(): החזר רכיב מהרשימה בכל מיקום נתון.
  • לְהַכנִיס(): הוסף אלמנט בכל מיקום ברשימה.
  • לְהַסִיר(): הסר את המופע הראשון של רכיב כלשהו מרשימה שאינה ריקה.
  • removeAt(): הסר את הרכיב במיקום מוגדר מרשימה לא ריקה.
  • לְהַחלִיף(): החלף אלמנט בכל מיקום באלמנט אחר.
  • גוֹדֶל(): החזר את מספר האלמנטים ברשימה.
  • isEmpty(): החזר אמת אם הרשימה ריקה; אחרת החזר false.
  • isFull(): החזר true אם הרשימה מלאה אחרת החזר false. ישים רק ביישומים בגודל קבוע (למשל, רשימות מבוססות מערך).

2. מחסנית ADT

ה-Stack ADT הוא מבנה נתונים ליניארי העוקב אחר עקרון LIFO (Last In First Out). זה מאפשר להוסיף ולהסיר אלמנטים רק מקצה אחד הנקראים העליון של הערימה.

סוגי נתונים מופשטיםמבט על ערימה

פעולות:

ב-Stack ADT סדר ההכנסה והמחיקה צריך להיות לפי עקרון FILO או LIFO. אלמנטים מוכנסים ומוסרים מאותו קצה הנקרא החלק העליון של הערימה. זה אמור לתמוך גם בפעולות הבאות:

  • לִדחוֹף(): הכנס אלמנט בקצה אחד של הערימה שנקרא העליון.
  • פּוֹפּ(): הסר והחזר את האלמנט בחלק העליון של הערימה אם הוא לא ריק.
  • לְהָצִיץ(): החזר את האלמנט בחלק העליון של הערימה מבלי להסיר אותו אם הערימה אינה ריקה.
  • גוֹדֶל(): החזר את מספר האלמנטים בערימה.
  • isEmpty(): החזר אמת אם המחסנית ריקה; אחרת החזר false.
  • isFull(): החזר אמת אם הערימה מלאה; אחרת החזר false. רלוונטי רק עבור ערימות בעלות קיבולת קבועה (לדוגמה, מבוסס מערך).

3. תור ADT

ה-Queue ADT הוא מבנה נתונים ליניארי העוקב אחר עקרון ה-FIFO (first In First Out). הוא מאפשר להכניס אלמנטים בקצה אחד (אחורי) ולהוציא אותם מהקצה השני (הקדמי).

סוגי נתונים מופשטיםמבט על תור

פעולות:

ה-Queue ADT עוקב אחר עיצוב דומה ל-Stack ADT אך סדר ההכנסה והמחיקה משתנה ל-FIFO. אלמנטים מוכנסים בקצה אחד (הנקרא האחורי) ומוסרים מהקצה השני (הנקרא הקדמי). זה אמור לתמוך בפעולות הבאות:

אין אות כניסה
  • enqueue(): הכנס אלמנט בסוף התור.
  • לְפִיכָך(): הסר והחזר את הרכיב הראשון של התור אם התור לא ריק.
  • לְהָצִיץ(): החזר את הרכיב של התור מבלי להסיר אותו אם התור לא ריק.
  • גוֹדֶל(): החזר את מספר האלמנטים בתור.
  • isEmpty(): החזר אמת אם התור ריק; אחרת החזר false.

יתרונות וחסרונות של ADT

לסוגי נתונים מופשטים (ADT) יש כמה יתרונות וחסרונות שיש לקחת בחשבון כאשר מחליטים להשתמש בהם בפיתוח תוכנה. להלן כמה מהיתרונות והחסרונות העיקריים של שימוש ב-ADTs:

יִתרוֹן:

היתרונות מפורטים להלן:

  • אנקפסולציה : ADTs מספקים דרך לכלול נתונים ופעולות ביחידה אחת מה שמקל על ניהול ושינוי מבנה הנתונים.
  • הַפשָׁטָה : ADTs מאפשרים למשתמשים לעבוד עם מבני נתונים מבלי לדעת את פרטי היישום אשר יכולים לפשט את התכנות ולהפחית שגיאות.
  • עצמאות מבנה נתונים : ניתן ליישם ADTs באמצעות מבני נתונים שונים שיכולים להקל על ההסתגלות לצרכים ולדרישות המשתנות.
  • הסתרת מידע : ADTs יכולים להגן על שלמות הנתונים על ידי שליטה בגישה ומניעת שינויים לא מורשים.
  • מודולריות : ניתן לשלב ADTs עם ADTs אחרים כדי ליצור מבני נתונים מורכבים יותר שיכולים להגביר את הגמישות והמודולריות בתכנות.

חסרונות:

החסרונות מפורטים להלן:

  • מִמַעַל : יישום ADTs יכול להוסיף תקורה במונחים של זיכרון ועיבוד שיכולים להשפיע על הביצועים.
  • מוּרכָּבוּת : ADTs יכולים להיות מורכבים ליישום במיוחד עבור מבני נתונים גדולים ומורכבים.
  • לְמִידָה עקומה: שימוש ב-ADT מצריך ידע על היישום והשימוש שלהם, מה שיכול לקחת זמן ומאמץ ללמוד.
  • גמישות מוגבלת: חלק מה-ADTs עשויים להיות מוגבלים בפונקציונליות שלהם או שלא יתאימו לכל סוגי מבני הנתונים.
  • עֲלוּת : יישום ADTs עשוי לדרוש משאבים נוספים והשקעה שיכולים להגדיל את עלות הפיתוח.
צור חידון