
class הוא סוג מידע, ומכל מחלקה אפשר לייצר כמה אובייקטים, כמו כמה לקוחות שונים.public נגיש מבחוץ, ו-private נגיש רק בתוך המחלקה. העיקרון השלישי, פולימורפיזם, לא נלמד בקורס הזה.הטקסט המלא של הדקות הראשונות בהרצאה «עקרונות תכנות מונחה עצמים - Unity OOP» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
בשיעורים הקרובים אנחנו נדבר קצת על מה זה Object Oriented Design/Object Oriented Programming. השיעורים האלה יהיו קצת יותר תיאורטיים מכיוון שאנחנו כשאנחנו נפתח את המשחק או בכלל כשאנחנו מפתחים ביוניטי ברמה בסיסית יותר זה דברים שאנחנו אמנם משתמשים בהם אבל לא מייצרים אותם בעצמנו אלא
משתמשים בדברים שקיימים כבר. בשביל שנבין מה לעזאזל אנחנו כותבים חשוב לי שנכיר את הדברים האלה. אז ככה קודם כל מה זה Object Oriented Design זה בעצם design/אפיון זה סגנון של כתיבת קוד שהוא מתרכז יותר בנתונים שלי מאשר בפעולות שאני עושה איתה.
אני לא רוצה להיכנס לזה יותר מדי מי שלמד פעם תכנות פונקציונלי, אז שמה באמת היה הדגש על הפונקציות על הפעולות שאנחנו עושים בעולם של הobject oriented הדגש הוא על המידע ואחרי זה על איזה פעולות אנחנו עושים עם המידע ולמה הכוונה הכוונה היא שיש לנו למעשה אנחנו מסתכלים על הפרויקט
מסתכלים על מה שאנחנו רוצים לעשות אנחנו קודם כל בודקים איזה אובייקטים יש לנו אחרי זה מה אותם אובייקטים יכולים לעשות מה אנחנו יכולים לעשות לאותם אובייקטים וכן הלאה דוגמה מאוד מאוד מאוד בסיסית.
יש לי יחידת מידע אחת הדוגמאות הקלאסיות יש לי עסק ויש לי בעצם לקוחות אז מה מה אני רוצה לשמור על כל לקוח אז אני רוצה שיהיה לי בעצם נקרא לזה client ומה שאני רוצה לשמור עליו זה name address במידה ואני רוצה לשלוח לו במייל פרסומות או את מה שהוא קנה יש לו phone ולמשל יהיה לו by וזו פונקציה מתודה שאותו לקוח יכול לעשות.
הגיוני גם שיהיה לי בעצם גם מוצר ואז הביי יקבל לי כפרמטר את אותו מוצר ואני אדע איזה מוצר לקנות. אז נקרא לזה ביי פרודקט וזהו למעשה נניח לצורך הדוגמה זה מספיק אז כמובן שיהיה לי גם פרודקט ואותו פרודקט יהיה יהיה לו name יהיה לו פרייס ויהיה לו פונקציות חידוש מלאי וכן הלאה,
מספר במלאי וכן הלאה. אז מה קורה עכשיו? יש לי בעצם, הגדרתי מה זה קליינט אצלי בפרויקט ואיזה מידע חשוב שיהיה לי ואיזה פעולות אני רוצה שהוא יעשה.
עכשיו מה שקורה בפועל זה אני לוקח את אותו קליינט שזה למעשה קלאס וכל פעם שיש לי לקוח חדש אני מייצר מופע כלומר אובייקט מהסוג קליינט. זה קלאס קלאס זה דאטה טייפ זה סוג מידע סוג משתנה לצורך העניין כמו שיש לי אינט ויש לי פלואוט ויש לי אינאם שהגדרתי כסוג משתנה אותו דבר קלאס הוא בעצם סוג של דאטה טייפ ואני יכול לייצר ממנו אובייקטים אז זה מה שקורה
באובג'קט אוריינטד דזיין יכול להיות לי פה עכשיו כמה וכמה אובייקטים שנוצרים מהתבנית של הקלאס. אז זה קליינט אחד שקוראים לו איציק קליינט שני קוראים לו משה קליינט שלישי קוראים לה שולה קליינט רביעי קוראים לה יוכבד אז מה שקורה זה שאני מייצר קלאס ואני מייצר מהקלאס הזה שהוא תבנית אני מייצר אובייקטים אז זה מה שזה
מה שזה קלאסים ואובייקטים. עכשיו בוא נעבור לדוגמה אפילו עוד יותר פשוטה בשביל להדגים את הנושא של תורשה, שזה גם כן אחד משלושת העקרונות הבסיסיים של Object Oriented.
עכשיו אני אייצר חדש, ובמקום Client אני אייצר פה כלב, Dog. אז יש לי קלאס שנקרא Dog, יש לו Name, יש לו Color, יש לו Move ויש לו Bark.
אוקיי, אז זה קלאס שנקרא Dog, ממנו אני יכול לייצר מופעים. למשל אני יכול לייצר כלב חדש לקרוא לו שוקי להגיד שהצבע שלו שחור וכן הלאה אבל באותו פרויקט גם יש לי קאט קאט ולאותו קאט יכול להיות באופן מפתיע יהיה לו name יהיה לו color יהיה לו move ויהיה לו ניהו אוקיי אז למעשה יש לי פה שני קלאסים שמהם אני יכול לייצר אובייקטים קאט ודוג עכשיו מה זה
תורשה אני יכול להגדיר קלאס כללי יותר שנקרא animal אותו animal יכיל לי name, color ו-move.
הדברים היותר כלליים שקיימים לי נניח בכל החיות או בכל החיות שיש לי בפרויקט במשחק במה שזה לא יהיה ואז מה שאני יכול לעשות זה להגדיר שCat יורש מ-animal ושDog יורש מ-animal ואז בעצם בקובץ הקוד של קאט ובקובץ הקוד של דוג מה שאני יכול לעשות זה למחוק את אלה.
אני מגדיר שדוג וקאט יורשים מאנימל ואני אעשה את זה באמצעות חיצים לא לבנים אלא שחורים ודוג ועכשיו לדוג ולקאט לשניהם יש גם name גם color גם move וגם את הפונקציות או המשתנים שרלוונטיים להם בלבד.
זה נותן לנו שני דברים אחד זה חסכנו המון קוד לא כתבנו פעמיים וזה לא רק מבחינת הצלות אלא גם מהבחינה הזאת שאם במקום מסוים אם בדוג אני משנה איך מוב עובד אז או שכתבתי איזה משהו ויש לי פה באג אז אני צריך לתקן אותו גם בדוג וגם בקט וגם אם יש לי עוד 10 סוגים אחרים של חיות.
אז פה אני מעביר את היישום של מוב לאנימל וחסכתי לי המון קוד והמון בעיות. וגם לוגית אני מבין cat זה סוג של animal dog זה סוג של animal עכשיו נקודה אחרונה שרלוונטית למה שכבר דיברנו וזה הנושא של encapsulation כל הנושא הזה של private וpublic.