C++/מבוא

מתוך ויקיספר, אוסף ספרי הלימוד והמדריכים החופשי.

< C++
קפיצה אל: ניווט, חיפוש


תוכן עניינים

[עריכה] הצורך בשפת תכנות

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

[עריכה] שפת תכנות

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

שפת התכנות הראשונה הייתה שפת סף (בלעז Assembly). בשפה זו כל פקודת מעבד מיוצגת על ידי מילה אחת והפרמטרים לפקודה. פרמטרים הינם נתונים אשר בהם משתמשת הפקודה בזמן ביצוע.למשל פקודה יכולה להיות "חיבור" הפרמטרים הם "2" ו-"4". כך למעשה, מלבד העובדה שהפקודות מיוצגות בצורה מילולית ולא בעזרת סיביות, התוכנית בזיכרון המחשב ובשפת סף היו זהות.

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

[עריכה] על ++C

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

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

[עריכה] אז למה C++?

יש מספר סיבות שניתן להעלות על הדעת להסתפק ב C.

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

על אף שכלים רבים של C++ דורשים יותר הבנה מהמתכנת, השימוש בכלים אלה מפשט את התוכנית:

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

[עריכה] מבוא לתכנות מונחה עצמים

כאשר הניח אלן טיורינג את יסודות התכנות, הוא תכנן את העניינים באופן מתמטי, שיהיה אפשרי. אכן, כל פעולה ניתן לבצע בעזרת לולאות ותנאים, ומידע המסודר באמצעות משתנים ומערכים. אולם, במשך הזמן התגלו בעיות של תכנון בעזרת הכלים האלו. הפרוייקטים נעשו מורכבים יותר ויותר, ונוצר צורך בכלים מתקדמים יותר, ואף שאינם נצרכים באופן מתמטי, הרי שהם נצרכים כדי שהתוכניתן יחשוב ויעבוד בצורה מסודרת. המצאת הפונקציה היתה המהלך הראשון בנושא, והיא בעצם חילקה את התוכנית לחתיכות קטנות שניתן לסמן V לגבי הצלחת כל אחת מהן. ובכל זאת, עדיין נתקלו פרוייקטים בקשיים גדולים, שגיאות לוגיות שלא חשבו עליהן מראש, ופעמים רבות הפרוייקט ביקש עוד זמן ועוד כסף ובסוף התמוטט והלקוח נותר בלא כספו ובלא המוצר שהזמין.
בכנס של תוכניתנים, שדן בבעיה הזאת, הועלה הרעיון הבא: לדמות את התכנות לחיים האמיתיים. בחיים אנחנו עובדים עם עצמים, לא עם פונקציות. עצם יכול להיות כל דבר: מחיפושית ועד חללית.
לעצם כזה יש תכונות, ויש פעולות שהוא יכול לבצע. גם בתוך עצמים ישנם עצמים פנימיים שונים. זהו ה class: אובייקט המכיל משתנים, מערכים, והחידוש: גם פונקציות!
כאשר יצרנו אותו, יצרנו תבנית. נוכל לאחר מכן ליצור כמה ממנו שנרצה.
למשל, נוכל ליצור עצם המייצג מכונית. יהיו לו משתנים שיכילו את הצבע, את הדגם, את נפח המנוע ועוד תכונות נוספות. תהיינה לו גם פונקציות: פונקציה בשם start בשביל להתניע, פונקציה בשם go בשביל לנסוע, פונקציה בשם fuel בשביל לתדלק. נוכל ליצור "מופעים" רבים של המכונית הזאת, בדיוק כשם שאנחנו יוצרים משתנים מכל סוג אחר. נוכל ליצור מכוניות שונות ולהגדיר לכל אחד את תכונותיו.
לרכב יש גם תהליכים ונתונים פנימיים שרק הטכנאי מטפל בהם. הלקוח אינו אמור להתעסק איתם, ועל כן ניתן להסתיר אותם מעיניו, ולתת לו להתעסק רק במה שהוחצן. למשל, אם בעת ההתנעה צריכים להפסיק לרגע את הרדיו כדי שלא ישרף, לא ניתן ללקוח לשנות זאת. ניתן לו רק את הפונקציה start, והוא יבחר האם להשתמש בה על כל השלכותיה.
בנוסף, תוכננה גם האפשרות לבנות אובייקטי-על. כשם שאנחנו יכולים לבנות אובייקט מסוג מכונית וליצור מגוון רחב של מכוניות בעזרתו, כך נוכל ליצור אובייקט-על שממנו נוכל ליצור אובייקטים מדויקים יותר. למשל, נוכל ליצור אובייקט-על מסוג כלי רכב וממנו ניצור אובייקט מסוג מכונית, אובייקט מסוג משאית, אובייקט מסוג קורקינט. גם הם עדיין תבניות, אבל הן נבנו מתוך התבנית הכללית יותר של כלי הרכב. למשל, בתבנית הכללית יהיו גלגלים, אבל ניתן יהיה לשנות את כמותן. לעומת זאת בכל אחד מהמימושים תהיה הגדרה מדויקת של כמה הם, ולא ניתן יהיה לשנות. באובייקט כלי הרכב תהיה הגדרה של נסיעה, אבל לא של התנעה, למקרה שהמשתמש יצור קורקינט.


- מבוא הפרק הבא:
שלום עולם!