PracticU

יתרונות של תכנות מונחה עצמים

בלי כתוביותעם כתוביות
PracticU › קורס תכנות מונחה עצמים - OOP - Object Oriented Programming - חומר לימוד של מדעי המחשב › יתרונות של תכנות מונחה עצמים
מילון מושגים:
OOP - תכנות מונחה עצמים: גישת פיתוח שמארגנת את הקוד סביב אובייקטים המאגדים נתונים ופעולות.
באג - תקלה או שגיאה בקוד שגורמת לתוכנה להתנהג בניגוד למצופה.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
כימוס - עיקרון בתכנות מונחה עצמים שמסתיר את הפרטים הפנימיים של אובייקט וחושף רק ממשק מבוקר.
ירושה - מנגנון בתכנות מונחה עצמים שבו מחלקה יורשת תכונות ופעולות ממחלקת אב, ויכולה להרחיב אותן.
פולימורפיזם - עיקרון בתכנות מונחה עצמים שבו אובייקטים ממחלקות שונות מגיבים לאותה פעולה כל אחד בדרכו.
C# - שפת תכנות מונחית עצמים של מיקרוסופט, המשמשת בעיקר לפיתוח יישומים על פלטפורמת .NET.
Java - שפת תכנות עילית ומונחית עצמים, הרצה על מכונה וירטואלית (JVM) ומשמשת לפיתוח מגוון יישומים.

יתרונות של תכנות מונחה עצמים
למה בכלל עוברים לתכנות מונחה עצמים, ומה הבעיה שהוא פותר? ההרצאה משווה בין תכנות פרוצדורלי ל-Object Oriented ומציגה את שלושת העקרונות שמגדירים שפה מונחית עצמים.
הבעיה בתכנות פרוצדורלי
בתכנות פרוצדורלי (למשל שפת C הישנה) מגדירים רק משתנים ופונקציות. בדוגמה של תוכנית שקולטת ומציגה פרטי לקוח ופרטי רכב, היו משתנים כמו first name ו-last name, ופונקציות כמו input customer, display customer, input car ו-display car. הבעיות:
1. אין קשר בין המשתנים והפונקציות לישות שלהם: הכול "זרוק" בקובץ אחד, משתנים בצד אחד ופונקציות בצד אחר.
2. קשה לאתר באגים: קשה למצוא מה שייך ללקוח ומה לרכב.
3. קשה להחליף פונקציה: ייתכן שהיא בשימוש במקומות רבים ובהקשרים שונים, גם בטעות.
4. קשה לתחזק תוכנית גדולה: מתכנת חדש שמחליף את הקודם מתקשה להבין מה קורה.
הפתרון: ישויות ו-class
מזהים את הישויות בתוכנית ובונים כל אחת עם המילה השמורה class. בתוך מחלקה יש רק משתנים (Data Members) ופונקציות (Methods). בדוגמה יש מחלקה Customer עם first name ו-last name, ופונקציות בשם Input ו-Display בלי להוסיף "customer" לשם, כי הן כבר שייכות לישות. הרכב הוא מחלקה נפרדת. היתרון: אפשר לכתוב כל מחלקה בקובץ משלה, להחליף את כולה כמו שמחליפים חלק בטלוויזיה, והישויות לא מפריעות זו לזו.
שלושת המרכיבים של שפה מונחית עצמים
1. Encapsulation (כימוס): היכולת לבנות ישות סגורה שיש בה משתנים ופונקציות.
2. Inheritance (הורשה): לקחת ישות ולהעביר את כל מה שבה לישות אחרת בלי קוד חוזר. בדוגמה, "רכב מנהלים" יורש מ"כלי רכב" ומוסיף דברים משלו.
3. Polymorphism (רב צורתיות): פונקציה משנה את המימוש שלה בין מחלקת בסיס למחלקה היורשת. בדוגמה, Display של רכב מנהלים דורסת את Display של כלי רכב ומציגה מידע אחר.
אילו שפות נחשבות מונחות עצמים
שפה שיש בה את שלושת המרכיבים היא Object Oriented. לפי המרצה: C# ו-Java ו-C++‎ ו-VB.NET כן, C לא, ו-VB6 לא, כי יש בה רק כימוס בלי הורשה ופולימורפיזם.
תרגילים שהוצעו בסוף
להסביר מה הבעיה בתכנות פרוצדורלי, איך תכנות מונחה עצמים פותר אותה, ולהגדיר כימוס, הורשה ורב צורתיות.
אחרי ההרצאה אפשר להסביר למה מפרקים תוכנית לישויות ולנקוב בשלושת עקרונות ה-OOP.
השיעור הבא בקורס: הבדלים בין Class לבין Object

פרקי ההרצאה: יתרונות של תכנות מונחה עצמים

  1. 00:00

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

  2. 00:36

    תכנות פרוצדורלי משתנים ופונקציות

  3. 01:53

    חסרונות התכנות הפרוצדורלי

  4. 04:00

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

  5. 04:36

    Data Members ו-Methods במחלקה

  6. 08:01

    שלושת מרכיבי Object Oriented

  7. 08:55

    הורשה Inheritance

תמלול ההרצאה: יתרונות של תכנות מונחה עצמים

הטקסט המלא של הדקות הראשונות בהרצאה «יתרונות של תכנות מונחה עצמים» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:01

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

  2. 00:16

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

  3. 00:36

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

  4. 00:56

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

  5. 01:21

    והיינו את ה-last name של הלקוח, והיינו יכולים ליצור עוד משתנים עבור כלי הרכב, לדוגמה היצרן והדגם של הרכב. לאחר מכן היינו צריכים ללכת ולבנות כל מיני פונקציות, לדוגמה input customer בשביל לקבל את הפרטים של הלקוח, display customer בשביל להציג את הפרטים של הלקוח, input car בשביל לקלוט את הנתונים של הרכב, וdisplay car בכדי

  6. 01:51

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

  7. 02:15

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

  8. 02:30

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

  9. 02:45

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

  10. 03:06

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

  11. 03:18

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

  12. 03:41

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

  13. 03:55

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

  14. 04:11

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

  15. 04:31

    קלאס מגדירה לנו ישות חדשה, לדוגמה במקרה הזה, קסטומר, לקוח. בתוך הקלאס יש רק שני דברים בגדול, משתנים ופונקציות. המשתנים של הקלאס נקראים Data Members, הפונקציות של הקלאס נקראות Methodot או Methods באנגלית.

  16. 04:49

    אז בתוך הישות הסגורה הזאת שאנחנו הולכים לבנות שנקראת customer אנחנו בונים את המשתנה first name ואנחנו בונים את המשתנה last name המשתנים האלה לא זרוקים במיין כמו בתכנות פרוצדורלי שיכל להיות לא זרוקים בסתם פונקציה אחרת הם זרוקים בעטיפה כזאת שהעטיפה היא הישות לקוח

  17. 05:13

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

  18. 05:37

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

  19. 05:50

    בנוגע לכלי רכב, כלי רכב זה ישות אחרת, ולכן תהיה לנו מחלקה אחרת, קלאס נפרדת לגמרי, ובקלאס הזאת יש כמובן משתנים, אז את היצרן ואת הדגם אנחנו יכולים להגדיר בתוך הקלאס קר, בנוסף יש שם פונקציות, input וdisplay במקום לקרוא לזה input card וdisplay card פשוט input וdisplay או print שם חלופי שיכול להיות לדיספלי

  20. 06:18

    ולכן יש לנו עכשיו שתי אישויות למה התכנות הזה הוא הרבה יותר טוב מהתכנות הפרוצדורלית והסיבה היא מפני שכעת אם קיים לנו баг בנוגע ללקוח אז אנחנו כנראה יודעים לגשת בדיוק לקלאס שמתארת את הקסטומר שהדרך אגב נכתבת בקובץ משלה קובץ source code משלה ומבחינתן אנחנו פשוט יכולים להעיף את כל הקלאס הזאת ולכתוב אחת אחרת

  21. 06:47

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

  22. 07:10

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

  23. 07:37

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

  24. 08:03

    כרגע רק על הראשון בין המרכיבים אז בואו נראה את שלושת המרכיבים שכל שפה שהיא נחשבת Object Oriented תומכת בהם אז המרכיבים של כל שפת Object Oriented הדבר הראשון נקרא Encapsulation או בעברית זה נקרא כימוס Encapsulation זה בעצם היכולת לבנות ישות סגורה בדיוק כמו שמקודם אנחנו הראינו איך אפשר לבנות ישות

  25. 08:30

    שמתארת לקוח וישות אחרת בכלל שמתארת מכונית כאשר יש לנו את היכולת הזאת לבנות ישות סגורה שבעצם מה שיש בתוך הישות הסגורה זה משתנים ופונקציות ברגע שיש לנו את היכולת הזאת זה החלק הראשון ב-Object Oriented וזה נקרא Incapsulation היכולת השנייה בעצם נקראת Inheritance Inheritance או בעברית הורשה זה היכולת שלנו

  26. 09:01

    לקחת ישות מסוימת ולהעביר את כל מה שיש בה לישות אחרת בלי לכתוב קוד חוזר, בלי לעשות copy-paste של דברים מה יש בתוך ישות? בתוך ישות אמרנו שיש מאפיינים ופעילויות, כלומר משתנים ופונקציות, אוקיי?

לקורס המלא: קורס תכנות מונחה עצמים OOP

ההרצאה הקודמת: הסבר על Console - דוט-נט Framework vs Core

ההרצאה הבאה: הבדלים בין Class לבין Object

הרצאות קשורות מקורסים אחרים

  • תכנות מונחה עצמים ב-NodeJS
  • עקרונות תכנות מונחה עצמים - Unity OOP
  • אובייקטים ומחלקות CLASS - תכנות מונחה עצמים בשפת Dart
  • יתרונות של MongoDB

קורסים נוספים במסלול

  • קורס יסודות התכנות - שפת C# .NET - קורס תכנות למתחילים - דוט-נט / סי-שארפ - חומר לימוד של מדעי המחשב