תכנות גנרי

מתוך ויקיפדיה, האנציקלופדיה החופשית
ערך ללא מקורות
בערך זה אין מקורות ביבליוגרפיים כלל, לא ברור על מה מסתמך הכתוב וייתכן שמדובר במחקר מקורי.
אנא עזרו לשפר את אמינות הערך באמצעות הבאת מקורות לדברים ושילובם בגוף הערך בצורת קישורים חיצוניים והערות שוליים.
אם אתם סבורים כי ניתן להסיר את התבנית, ניתן לציין זאת בדף השיחה.
ערך ללא מקורות
בערך זה אין מקורות ביבליוגרפיים כלל, לא ברור על מה מסתמך הכתוב וייתכן שמדובר במחקר מקורי.
אנא עזרו לשפר את אמינות הערך באמצעות הבאת מקורות לדברים ושילובם בגוף הערך בצורת קישורים חיצוניים והערות שוליים.
אם אתם סבורים כי ניתן להסיר את התבנית, ניתן לציין זאת בדף השיחה.

תכנות גנריאנגלית: Generic Programming, ועל פי האקדמיה ללשון העברית: תכנות סוגני[1]), הוא סגנון פיתוח תוכנה בו אלגוריתמים נכתבים במונחים של טיפוסים שיוגדרו בהמשך, וסוג הטיפוס יוגדר על פי הצורך ואז יתבצע שימוש באלגוריתם עבור הטיפוס המסוים שנקבע. גישה זו, שהשפה שנקטה בה ראשונה הייתה ML בשנת 1973, הרשתה כתיבת פונקציות משותפות או טיפוסים השונים רק בקבוצת הטיפוסים עליהם הם משמשים, ועל ידי כך מופחתת כפילות בקוד.

ישויות תוכנה מסוג זה נקראות:

תמיכה בתכנות גנרי[עריכת קוד מקור | עריכה]

שפות מונחות עצמים[עריכת קוד מקור | עריכה]

כאשר יוצרים מחלקה בשפות תכנות בעלות טיפוסים סטטיים, לא נוח לכתוב מימוש עבור כל אחד מהטיפוסים המוכלים. דוגמה ב-++C למחלקה הנמנעת מהכפילות הזו על ידי הגדרת template:

template<typename T> 
class List 
{ 
 /* תוכן המחלקה */ 
};

/* דוגמה ליצירת רשימה גנרית המקבלת אתחול של הטיפוס */
List<Animal> list_of_animals;
List<Car> list_of_cars;

דוגמה למימוש מחסנית גנרית בשפת #C:

public class Stack<T>
{
 T[] items; 

// שימוש פונקציונלי באותו משתנה גנרי שהתקבל בהגדרת המחלקה בזמן ריצה
 public void Push(T item)
 {...}
 public T Pop()
 {...}
}

// שימוש במחלקה הגנרית - הגדרת מחסנית ואתחול למשתנים מסוג מחרוזת
Stack<string> stack = new Stack<string>();

// שימוש בפונקציות הגנריות עם הסוג המתאים
stack.Push("John");
stack.Push("Doe");
string str = stack.Pop();

שפות פונקציונליות[עריכת קוד מקור | עריכה]

שפות אחרות[עריכת קוד מקור | עריכה]

במשפחת שפות ML, ישנו פולימורפיזם פרמטרי, ומודלים גנריים הנקראים "functors". גם Standard ML וגם OCaml תומכים ב-functors, המתפקדים באופן דומה ל-"class templates" בחבילה הגנרית של Ada. אבסטרקציה סינטקטית ב-Scheme בעלת קשר לגנריות, אלו הם למעשה קבוצה מכילה של templating המצויה ב-++C.

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

VHDL הנגזרת מ-Ada מכילה אף היא יכולות גנריות.

הערות שוליים[עריכת קוד מקור | עריכה]