לדלג לתוכן

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++‎ דורשים יותר הבנה מהמתכנת, השימוש בכלים אלה מפשט את התוכנית:

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

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

[עריכה]

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


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