Inversion of controlבהנדסת תוכנה, היפוך שליטה (באנגלית: Inversion of control; בראשי תיבות: IoC) היא תבנית עיצוב בתכנות מונחה-עצמים שבמסגרתה צימוד (coupling) האובייקטים מבוצע בזמן ריצה על ידי אובייקט הרכבה (assembler object), ובדרך כלל אינו ידוע מראש בזמן ההידור באמצעות ניתוח קוד סטטי. בתכנות מסורתי, בקרת הזרימה של הלוגיקה העסקית נקבעת על ידי אובייקטים שמוקצים סטטית אחד אל השני. לעומת זאת, כאשר עובדים עם היפוך שליטה, הזרימה תלויה בגרף האובייקטים שנוצר על ידי אובייקט ההרכבה, והיא מתאפשרת על ידי הגדרת האינטראקציות בין האובייקטים באמצעות אבסטרקציות. תהליך הקישור בין אובייקטים מושג באמצעות הזרקת תלויות (dependency injection). יש הטוענים כי ניתן להשיג היפוך שליטה גם על ידי שימוש בתבנית העיצוב service locator. על מנת שאובייקט ההרכבה יקשור אובייקטים אחד אל השני, לאובייקטים חייבות להיות קיימות אבסטרקציות מתאימות. לדוגמה, מחלקה למעשה, היפוך שליטה הוא סגנון של עיצוב תוכנה שבו קוד הניתן לשימוש חוזר שולט בביצוע של קוד המיועד לפתרון של בעיות ספציפיות. המשמעות היא שהקוד שניתן לשימוש חוזר והקוד המיועד לפתרון של בעיה ספציפית מפותחים בנפרד, ולבסוף מאוחדים לקבלת יישום אחד כולל, המשלב את חלקי הקוד השונים. שימוש בעקרונות העיצוב של היפוך שליטה משרת את המטרות הבאות:
לעיתים מתייחסים בהומור להיפוך שליטה כאל עיקרון הוליווד: "אל תתקשר אלינו, אנחנו נתקשר אליך", מכיוון שהלוגיקה של התוכנה רצה כנגד אבסטרקציות כדוגמת פונקציות callback. טכניקות מימושטכניקות מימוש מושפעות משפת התכנות הנבחרת. ב-Java ישנן כמה טכניקות בסיסיות למימוש היפוך שליטה:
דוגמאותpublic class ServerFacade {
public <K, V> V respondToRequest(K request) {
if (businessLayer.validateRequest(request)) {
DAO.getData(request);
return Aspect.convertData(request);
}
return null;
}
}
מתווה בסיסי זה ב-Java מדגים קוד הפועל על פי מתודולוגיית היפוך השליטה. עם זאת, חשוב לשים לב לכך ש- public class ServerFacade {
public <K, V> V respondToRequest(K request, DAO dao) {
return dao.getData(request);
}
}
דוגמה זו ממחישה את העובדה שהצורה בה המתודה ממשקי תכנות יישומים המשתמשים בהיפוך שליטהSAX הוא דוגמה לממשק תכנות יישומים (API) אשר משתמש בהיפוך שליטה בכל מקום (לאחר אתחול). באופן כללי SAX יעיל יותר מ-DOM, אבל לעיתים קרובות DOM נחשב לנוח יותר לתכנות מכיוון שהוא לא מחייב שימוש בהיפוך שליטה. ראו גםקישורים חיצוניים |
Portal di Ensiklopedia Dunia