דוא"ל:




קורס:"++C"

שיעור 1: מבוא

[ תוכן עניינים ] [ הבא >>> ]

מתוך הספר: ++C - מדריך מקצועי       ++C - מדריך מקצועי
תוכן עניינים


מתודולוגיות בפיתוח תוכנה

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

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

נסקור מספר מתודולוגיות עיקריות לפיתוח תוכנה:

  • פיתוח מונחה תהליכים / פיתוח מבני: החשיבה היא בכיוון התהליכים שהתוכנה צריכה לבצע. שפות תומכות: C, פסקל, פורטרן ועוד רבות:

  • פיתוח מונחה נתונים/טבלאות: פיתוח יישומים סביב טבלאות נתונים. כלי פיתוח: מחוללי יישומים, מנועי בסיסי נתונים, שפות שאילתות (SQL):

  • פיתוח מונחה עצמים: עצם הוא שילוב של נתונים ופעולות (Methods). היישום מורכב מאוסף עצמים ואינטראקציה ביניהם. שפות תומכות: C++, Java, Smalltalk, Simula  ועוד:

תכנות מונחה עצמים

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

    1.הפשטת נתונים (Data Abstraction) - התעלמות מפרטי המימוש של העצם והתרכזות במאפיינים הרלוונטיים שלו. לדוגמא, תוכנת סימולציה לכלי רכב כוללת ייצוג של מכונית:
     
    תוכנה זו עשוייה לטפל רק במאפייני המשקל, הצבע, מספר הגלגלים, הנהג, ההאצה, המהירות והמיקום. מצד שני ייתכן שלא יבואו לידי ביטוי סוג ומבנה השילדה, מבנה המנוע, מערכת החשמל ועוד מערכות רבות, אם אינן רלוונטיות.
    
    2. כימוס (Encapsulation) - הסתרת פרטי המימוש מהמשתמש בעצם. עקרון זה משלים את העיקרון הקודם, הפשטת נתונים, ביחד עם מנגנון הסתרת המידע (Information Hiding) שמספקת השפה. לדוגמא, המכונית שבתוכנה הנ"ל יכולה לספק את השירות "הגבר מהירות", מבלי לתאר את המנגנון והאלגוריתם להגברת המהירות.
    3. מודולריות - הפרדת התוכנה ליחידות נושאיות (=מודולים), כך שכל נושא מיוצג ע"י עצם:
    
    4. היררכיה - הגדרת יחסים היררכיים (היררכיות ירושה, היררכיות הכלה, היררכיות קריאות) בין עצמים. כחלק מהיררכית הירושה קיים מנגנון הפולימורפיזם, שמשמעותו טיפול אחיד בעצמים בעלי צורות שונות. לדוגמא, כלי רכב שונים בתוכנית מכילים מכנה משותף ברמות שונות, ולכן ניתן לייצגם באמצעות ירושה (Inheritance):
    
    5. טיפוסיות חזקה (Strong Typing) - מניעת בלבול/ערבוב בין טיפוסי עצמים שונים. לדוגמא, אם בתכנית קיים ייצוג למתקן שירות לרחיצת כלי רכב, למתקן זה לא ייכנסו מטוסים או ספינות...
    6. בו-זמניות (Concurrency) - תמיכה בפעולות בו-זמניות של עצמים שונים. לדוגמא, כלי רכב המייוצגים ביישום הנ"ל עשויים לנוע במקומות שונים באותו פרק זמן. לשם כך נדרשת הדמייה של פעילות אסינכרונית של העצמים השונים.
    7. הימשכות (Persistency) - יכולת שמירת מצב העצם לאורך זמן, כגון שמירת העצם לקובץ או למדיה אחרת. עקרון זה ידוע גם בשם Serialization. לדוגמא, המשתמש בתוכנה המייצגת כלי רכב עשויי לבקש לשמור את "תמונת העולם" ולכבות את המחשב. מאוחר יותר הוא יהיה מעוניין לטעון את התוכנה מאותה נקודה בה הפסיק, ולהמשיך משם.

קיימות שפות תכנות התומכות בעקרונות העצם. דוגמאות פופולריות לשפות כאלו הן C++Java, Smalltalk, Python. המושג העיקרי בתכנות מונחה עצמים בשפות אלו הוא "מחלקה" (class): זוהי הרחבה של המבנה (struct) שבשפת C, הכוללת בנוסף לנתונים של המבנה גם פונקציות לטיפול בהם. בנוסף לכך, כוללות שפות אלו גם תמיכה מובנית בהסתרת מידע, אתחול והריסה אוטומטיים של עצמים, ירושה ופולימורפיזם, טיפול בחריגות ועוד.

פיתוח תוכנה מונחה עצמים היא הגישה המקובלת והפופולרית כיום בעולם התוכנה. גישה זו מומשה כבר בשנות השישים בשפה  Simula67, ובמשך עשרים השנים הבאות בשפות Smalltalk, Objective C, Eiffel, Ada. אולם את הפריצה המסיבית לשוק התוכנה העולמי ביצעה בסוף שנות ה- 80 ותחילת שנות ה- 90 שפת C++, שנכתבה ע"י Bjarne Stroustrup שממעבדות AT&T Bell.

יתרונות פיתוח מונחה עצמים

  • מודל טבעי יותר של העולם האמיתי
  • מעבר ישיר בין שלבי הפיתוח: ניתוח (Analysis), תיכון (Design) ומימוש (Implementation)
  • יכולת טובה יותר בשימוש חוזר בתוכנה
  • תמיכה טובה יותר בתוספות ושינויים לתוכנה קיימת

מבוא לשפת ++C

היסטוריה

שפת C++ נכתבה ע"י Bjarne Stroustrup שממעבדות AT&T BELL. שפת C++ היא הרחבה של שפת ANSI-C התומכת בתכנות מונחה עצמים ובתכנות גנרי (Generic Programming).

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

שלבים בהתפתחות השפה:

  • 1980 - C with classes - כשיפור לשפת Simula67
  • 1983 - מתן השם C++ - שימוש ראשון בשפה
  • 1985 - גרסה 1.0 - מהדר בסיסי
  • 1987 - תחילת תהליך סטנדרטיזציה של השפה
  • 1989 - תקן ANSI C++ - ועדת X3J16  ANSI, תקן ISO
  • 1989 - גרסה 2.0 - ירושה מרובה, operator overloading
  • 1991 - גרסה 3.0 - templates
  • 1995 - ספרייה תקנית (STL), namespace, RTTI ועוד

תכנון השפה הושפע מהשפות Simula67, Algol68, Smalltalk.

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

יתרונות שפת ++C

  • בשימוש נרחב
  • הרחבה של שפת C - מה שמאפשר הגירה קלה ממנה ל- C++
  • תמיכה במרבית עקרונות תכנות מונחה עצמים
  • ספרייה תקנית עשירה וחזקה במיוחד (STL)
  • מאפשרת כתיבת תכניות יעילות במיוחד

חסרונות שפת ++C

  • שפה מורכבת מאוד
  • לא תומכת בתכנות עצמים מקבילי/מבוזר (Concurrency)
  • לא תומכת בהימשכות - שמירת עצמים ושיחזורם (Persistency / Serialization)

לגבי 2 החסרונות האחרונים, סביבות הפיתוח ומערכות ההפעלה מציעות בדרך כלל ספריות עצמים התומכות במקביליות (Mutli-Threading) וב- serialization, אך התמיכה לא קיימת בשפה עצמה באופן תקני.



[ תוכן עניינים ] [ הבא >>> ]