# Microsoft Foundation Classes

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

יש לך הודעות חדשות (השווה לגרסה הקודמת).

מחלקות התשתית של מיקרוסופט, Microsoft Foundation Classes, או MFC, זו ספרייה של מיקרוסופט, העוטפת במחלקות C++‎, חלקי API של חלונות שנכתבו ב־C. ומהווה מסגרת ישום[1] לפיתוח בסביבת חלונות. מחלקות מוגדרות בה עבור רבות מידיות־הטיפול באובייקטים של חלונות וכן עבור חלונות מוגדרים מראש (predefined windows) ופקדים שכיחים.

## [עריכה] היסטוריה של MFC

### [עריכה] תחילת הדרך

MFC נוצרה ב־1992 עם המהדר (C/C++ 7.0 (compiler של מיקרוסופט, לשימוש עם גרסאות 16 ביט של חלונות. היה זה חלק ממאמץ כללי של מיקרוסופט להשגת נתח שוק לכלי פיתוח. ו־MFC עוצבה להיות חלון הראווה ליכולותיה של שפת התכנות ++C. באותם ימים ++C רק החלה להחליף את C בפיתוחם של יישומי תוכנה מסחריים ו־C/C++ 7.0 הייתה הראשונה בין המהדרים של מיקרוסופט בהוספת תמיכה ב־++C. את ההשראה לפיתוחה קיבלה MFC מ־TCL) Think Class Library) של מקינטוש - שמאוחר יותר נרכשה על ידי סימנטק - והיא חייבת לה הרבה מהמבנה שלה.

### [עריכה] בתחרות עם בורלנד

OWL) Object Windows Library) היה מוצר מתחרה שהוצג בידי בורלנד בערך באותו זמן ועוצב עבור המהדר טורבו C של בורלנד. לזמן מה היה OWL פופולרי יותר מאשר MFC, מכיוון שהוא נאמן יותר לקווים המנחים של תכנות מונחה עצמים. אך למרות זאת הוא איבד נתח שוק, עקב הפיגור בהוצאת עידכוני OWL למאפייניה החדישים של חלונות וכאשר בורלנד שיחררה גירסה חדשה של סביבת פיתוח, חסרת תאימות למהדורות הקודמות, היה זה עקב כך, שנאלצה לרכוש ממיקרוסופט רשיון לשימוש ב־MFC.

### [עריכה] שינויים במאקרויים של ++C

כאשר MFC הוצגה, מיקרוסופט הרחיבה את תחביר ++C עם סדרות של מאקרויים לניהול הודעות (messages), חריגות (exceptions) וטיפול דינמי בעצמים בזמן ריצה (dynamic class instantiation), של חלונות. השינויים התחביריים להודעות חלונות נועדו לצמצום הזיכרון הנדרש, באמצעות מניעת שימוש מיותר בטבלה וירטואלית (vtable) וסיפקו מבנה יותר קונקרטי למגוון הכלים המסופקים בסביבת הפיתוח Visual C++‎ לעריכת ולתמרון קוד בלא לנתח את כל השפה. המאקרויים לטיפול בהודעות החליפו את מנגנון הפונקציות הווירטואליות שסופק על ידי ++C. מכיוון שכמה ורסיות של מאקרויים הכשילו את בדיקת הטיפוס הנעשית בידי המהדר, השימוש בהם נעשה מקור פורה לבאגים עבור משתמשי MFC. המאקרויים המיישמים סִדרות (serialization), תמיכה בחריגות וטיפוסי זמן ריצה דינמיים (dynamic runtime types), היו פחות בעייתיים והקדימו יכולות להרחבות של שפה מבוססת תקן, במספר שנים. גרסות 32־ביט של MFC, עבור Windows NT 3.1 ומערכות הפעלה מאוחרות יותר של חלונות, שמרו על מאפיינים אלו לשם תאימות.

### [עריכה] התפתחויות מאוחרות

MFC קודמה מאוד בתחילה בידי מיקרוסופט. אך הבולטות שניתנה לה, הועמדה מאוחר יותר בצילן של מספר טכנולוגיות אחרות. ההתפתחות באה כשנעשה ברור ש־MFC מורכבת מדי עבור מתכנתים רבים ולכן שמה מיקרוסופט דגש רב יותר על Visual Basic ככלי פיתוח לתוכנה מסחרית. כיום, היורש של Visual Basic ושל MFC הוא Windows Forms[2] ב [3]RAD) Rapid application development). של Net.. תוכניות C++ Native[4] יכולות להשתמש ב־Windows Forms באמצעות הוספת [5]C++ Managed Extensions.

MFC ממשיכה גם כיום לשמש לפיתוח חדש, בחברות שנכנסו להתחייבות אסטרטגית ל־++C ולפלטפורמת חלונות.

## [עריכה] יתרונות של MFC

- מהצד המעשי, יתרונה העיקרי של MFC הוא באספקת מודל תכנות מונחה עצמים ל־APIs של חלונות.
- יתרון נוסף של MFC הן עטיפות טיפוסי ++C עבור טיפוסי נתונים משוייכי־משאב נפוצים של חלונות, שמספקים סגירת טיפול אוטומטית, כאשר האובייקט שייצר אותן חורג מהתחום.
- MFC מספקת מסגרת עבודה של מסמך/תצוגה (Document/View) ליצירת ארכיטקטורה מבוססת MVC) Model-View-Controller).

## [עריכה] מחלקות MFC

ב־MFC למעלה ממאתיים מחלקות, שקוד המקור המלא שלהן, כלול בכל עותק של סביבת הפיתוח ++Visual C . המחלקות מאורגנות בעץ תורשה שבראשו המחלקה CObject ורוב המחלקות יורשות ממנה. על פי רוב, גם מחלקה שכותב המתכנת תירש מ־CObject. את רובן של המחלקות אין צורך להכיר באופן מיידי. וכאשר עולה צורך באחת מהן, ניתן לחפש מידע עליה בעזרה המקוונת של מיקרוסופט MSDN.

## [עריכה] סימון בשיטה ההונגרית

בשיטת סימון זו מקבל משתנה שם תאורי שמתחיל באות גדולה. כאשר השם מורכב ממספר מילים, כל מילה מתחילה באות גדולה. את השם מקדמים באותיות שמציינות את טיפוסו. לדוגמה: b תציין משתנה בוליאני (boolean), מחלקה (class) תצויין ב־c ומחרוזת (string) תצויין באמצעות str או sz (או psz אם המחרוזת מוחזקת על ידי מצביע בתכנה).

משתנים בשיטה זו עשויים להראות כך: lpszName, או hWnd.

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

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

## [עריכה] לימוד MFC

כאמור MFC הייתה מורכבת מדי בעבור מתכנתים רבים ורבים המתחילים ללמוד אותה נשברים באמצע הדרך.

בסביבת הפיתוח ++Visual C ישנם אשפים (wizards) המייצרים כמויות גדולות של קוד במהירות רבה. למרות היתרון הקיים באשפים אלו, ישנם הממליצים להתחיל את הלימוד בלא להשתמש בהם כיוון שהם עלולים לבלבל את המתלמד.

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

בכדי לשלוט ב־MFC יש לדעת את הנושאים הבאים:

- שפת התכנות C. למרות שיש הסוברים כי לאחר שפותחה ++C, לימוד שפת C הינו מיותר. אך בכדי להכיר את Windows API שכתוב ב־C - וש־MFC מהווה מעטפת ++C עבורו - נחוץ לדעת גם שפה זו.
- שפת התכנות C++‎, משמשת בלימוד ובכתיבת הקוד של MFC.
- מערכת ההפעלה חלונות. נדרש ידע כללי על מרכיביה של מערכת הפעלה זו.
- הכרת יישום חלונות והדרך בה הוא מקושר למערכת ההפעלה חלונות, עליה הוא פועל.
- הכרה בסיסית של תכנות ב־API של חלונות.
- ידיעת סביבת הפיתוח Visual C++‎, על תפריטיה השונים ועל חלקי חלון הפרויקט שנבנה בה.
- ספריית MFC ודרך השימוש בה.

למידה מסודרת של נושאים אלו תשפר את הסיכוי להצלחה.

## [עריכה] לקריאה נוספת

- מאיר סלע, Visual C++/MFC‎-מדריך מקצועי - הוצאת 'מרכז ההדרכה 2000', 2001.

## [עריכה] קישורים חיצוניים

- MSDN Microsoft Foundation Class Library
- MSDN MFC Reference
- MSDN MFC newsgroup

מקור: http://he.wikipedia.org../../../m/i/c/Microsoft_Foundation_Classes_9b6f.html

קטגוריות: ספריות תוכנה | תכנות | מיקרוסופט

##### Views

- ערך
- שיחה
- גרסה נוכחית

##### קהילה

- שער הקהילה
- עזרה
- דלפק ייעוץ
- מזנון
- יצירת קשר
- ספר אורחים

##### חיפוש

##### שפות אחרות

- English
- Deutsch
- Español
- Français
- 日本語
- Nederlands
- Polski
- Português
- Русский
- 中文