תכנות גנרי

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש

תכנות גנריאנגלית: Generic Programming), הוא סגנון פיתוח תוכנה בו אלגוריתמים נכתבים במונחים של טיפוסים אשר יוגדרו בהמשך, כאשר סוג הטיפוס יוגדר על פי הצורך ואז יתבצע שימוש באלגוריתם עבור הטיפוס המסוים שנקבע. גישה זו, אשר החלוצה בה הייתה 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("Edo");
stack.Push("Tzumer");
string str = stack.Pop();

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

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

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

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

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