
Cat כוללת name מסוג string ו-age מסוג number, בלי let, const או var. הרשאת ברירת המחדל היא public, והמרצה מעדיף לכתוב אותה במפורש.this, כאשר this.name הוא השדה ו-name הוא המשתנה המקומי.display מחזירה void ומדפיסה את הערכים. אובייקט נוצר עם new Cat, ואם מכניסים ערך מיד אין צורך לציין את הטיפוס.private בשם _age, ומוסיפים get age ו-set age. ב-set לא מצהירים על ערך מוחזר, ובודקים שהערך חוקי. אם לא, זורקים throw new Error עם הודעה "illegal age".myCat.age כאילו היה משתנה. הכנסת 5 תקינה, והכנסת מינוס 5 גורמת לשגיאה שנראית בקונסול.Flower יש name כ-public, family כ-protected ו-cost כ-private. protected נגיש רק למחלקה וליורשים שלה. אם כותבים את הרשאת הגישה ישירות בפרמטרי הבנאי, TypeScript יוצר את השדה ומבצע את ההשמה לבד, וניתן לוותר על ההצהרות ועל השורות בגוף הבנאי.הטקסט המלא של הדקות הראשונות בהרצאה «יצירת מחלקה ואובייקטים ב-TypeScript» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
אנחנו מגיעים בטייפסקריפט לנושא האובג'קט אוריינטד. כאן אנחנו רוצים לראות איך בטייפסקריפט אפשר לבנות מחלקות, לבצע הורשה, לבצע את הנושא של פולימורפיזם, אבסטרקטיות, ממשקים ועוד.
הקורס הזה בא להראות איך אנחנו מיישמים אובג'קט אוריינטד בטייפסקריפט. אז ראשית אנחנו הולכים לראות איך אנחנו יכולים ליצור קלאס וכל מה שמתלווה לקלאס לפני שנעבור לדברים יותר מתקדמים.
אז בואו פשוט נייצר לעצמנו פה קובץ חדש, מה שמקובל זה שקלאס תמיד תהיה בקובץ משלה, ואני אצור כרגע cat, איזושהי מחלקה שמתארת לי חתול.
ומה שאנחנו רוצים לעשות זה class cat, ויש לנו כאן name, והוא string, ויש לנו כאן age, והוא number. אנחנו לא רושמים פה let, אנחנו לא רושמים const, אנחנו לא רושמים var, וזה בעצם התחביר.
בי דיפולט, הרשאת הגישה שיש לנו עבור השדות של המחלקה זה public. אני אישית אוהב לרשום את המילה public אפילו שהדיפולט זה public.
לי זה יותר נוח וברור. כל הדברים האלה זה data members, השדות של המחלקה. בנוסף אנחנו רוצים שיהיה לנו איזשהו קונסטרקטור שמאתחל את השדות של האובייקט.
אז בואו נבנה פה קונסטרקטור שמקבל name ו-age והוא number ואנחנו רוצים לגשת לשדות. הגישה תמיד מתבצעת על ידי this name שווה ל-name this.h שווה h כאשר ה-name הזה זה כמובן המשתנה הלוקאלי ו-dis.name זה המשתנה הגלובלי.
בואו נבנה איזושהי מתודה, זה סיטור ונבנה פה methods, איזושהי מתודה שתציג את הערכים של החתול. בואו נציג display חזירה void דוקיומנט right בואו נציג את ה-name של החתול ונרד שורה, אז זה יהיה this.name ונשכפל גם ל-age וזה יהיה this.age בצורה כזאת.
ויש לנו כאן קלאס שמתאר את חתול ואנחנו יכולים לגשת ולבנות אובייקט. את זה נעשה במיין, אני שם את החתול פה בצד ויש לנו פה איזשהו let myCat = newCat בצורה כזאת, ואני מכניס לו מיצי ו4. עכשיו, יכלנו גם לבצע let cat נקודותיים cat שווה new cat, אבל כמובן אין צורך כי מיד הכנסנו ערך.
אז אם היינו עושים את זה בשתי שורות זה היה בסדר. אני קודם כל אומר שהסוג נתונים של המשתנה הזה זה cat, ואז אני יוצר אובייקט ומכניס לתוך המשתנה את האובייקט הזה. אפשר לעשות את הכל באותה שורה, ולכן לא צריך להגדיר שזה נקודות עם קאט, זה גם בסדר.
אגב, אם אני לא הולך להכניס לתוכו ערך, כמובן עדיף קונסט. בואו נקרא למייקאט נקודה דיספליי, נריץ קומפיילר psc-w, נראה שהקומפיילר רץ, ונוכל להריץ את המחלקה, את הקובץ, אבל אני רואה ששכחתי נטפל את זה ולהגדיר שאנחנו גם רוצים את cat.js
שאמורה להיות פה. הנה היא כאן המחלקה. עכשיו זה בסדר, אנחנו יכולים להריץ את זה ולראות שבעצם יש לנו בדיוק את מה שרצינו לראות על המסך.
עכשיו, מה בקשר לגטר סטרס, אינקפסוליישן, איך אנחנו יכולים ליצור גטרים סטרים, ומה שנקרא יגנו על המידע. בואו נניח שמבחינתי אג', אני רוצה להגן עליו, אני לא רוצה שיהיה בו מידע שגוי כמו גיל שלילי. כרגע אם מישהו מכניס לפה מינוס ארבע, אז הגיל של החתול זה מינוס ארבע,
שזה כמובן משהו שאני לא רוצה לאפשר. אז אנחנו לא רוצים לחשוף שום דבר החוצה מבחינת פאבליק עבור דברים שיכולים להכיל מידע שגוי, אז הנוהל אומר כזה דבר.
דבר ראשון בואו נהפוך את זה ל-private ואני משנה לו את השם ל-underlineage.com underlineage underline עבור private הדבר הבא אנחנו מגדירים פונקציות getters וsetter על ידי המילה השמורה get וset יש לנו פה את ה-get age אני מחזיר number return this.underlineage בצורה כזאת
זה רק יחזיר לי את הגיל ויש לנו פה public set h, אני מקבל איזשהו value שהוא number, שימו לב שאנחנו ב-set לא רושמים שאנחנו מחזירים number, ולא רושמים שאנחנו מחזירים void, בסדר?
אנחנו לא מחזירים שום דבר. וכאן אני מבצע בדיקה אם הvalue לא חוקי מבחינתי, נניח קטן שווה 0, אז בואו נבצע throw new error ונקשור מ-illegal h נניח.