
if בלבד ולא מאותחל לפני השימוש, יוצר שגיאה "use of unassigned local variable". יש לתת לו ערך התחלתי.if כפול מסבך את הקריאה. הירושה מאפשרת לצמצם אותם לשורה אחת.הטקסט המלא של הדקות הראשונות בהרצאה «פרויקט מעשי ב-#C - תוכנת צייר - חלק 25» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
טוב, אז בהצעה הקודמת, או לפחות זו שלפניה וזו שלפניה, אמרנו שאנחנו לא נפתח יותר פיצ'רים, רק נבדוק שהכל עובד. אוקיי, עדיין לא הזקנו יותר מדי.
השאלה היא, מה עוד אפשר לעשות? קודם כל, לפני שאנחנו ממשיכים לשתף עוד קוד בין freehand וline לבין האבא שלהם, שייפ, בואו קודם כל נבין מה זה אבסטראקט, פונקציה שהיא אבסטראקטית, מה זה מחלקה שהיא אבסטרקטית, מה זה בכלל מחלקה, מה זה אינטרנל, מה זה כל הדברים האלה.
אם אני אומר על draw שהיא פונקציה אבסטרקטית, זה אומר שאני לא מממש את הגוף שלה כאן. למה שאני לא ארצה לממש את הגוף שלה? כי אין שום היגיון לממש גוף של פונקציה או גוף של draw בתוך שייפ.
כי למה? דרו, אין לי מושג איך לציין את שייפ, כי אין דבר כזה שייפ, אין לי מה לציין. לא יודע אם זה קו ישר, קו עקום, קו תלת-ממדי, אין, אין דבר כזה שם, אין לדרו מימוש.
לכן, כמו שאמרנו, לכל דבר במציאות אנחנו רוצים את המקביל שלו בתכנות. פרקטי זה אומר שאין מקביל במציאות, אין מקביל לדרו במציאות.
היא פונקציה אבסטרקטית, פונקציה רעיונית. מה זאת אומרת? זאת אומרת, היא רק זמינה, אך ורק זמינה עבור פעולות שכאלה. אני יכול לפנות, יכול להגדיר פוינטר.
שייפ זה בעצם מערך של אובייקטים, יש שם פרי-אנדים וליינים ופרי-אנדים וליינים. אז אני יכול בכל אינטראציה לקבל פוינטר לבסיס, הפוינטר הוא מסוג בסיס, אבל הדבר האמיתי שאני מחזיק בזמן ריצה זה בעצם משהו מסוג אחר, זה לא מסוג שייפ.
זה המצביע שלי. האובייקט האמיתי שנמצא הוא בכלל משהו אחר. אם נצייר את המילים שעכשיו אמרתי, הרי שיש לנו מערך של אובייקטים, מערך של שייט, זה בעצם שייט, זה שייט, ויש לי בתוך המערך הזה הרבה אובייקטים.
נחלק אותו לרצועות, אלה הפריטים בתוך המערך, ויש לי כאן פוינטרים לאובייקטים. בזיכרון מפוזרים לי האובייקטים, בוא נגיד שזה כל המערך, אלה תאים ריקים, אם ריקים נסיים כמו בחשמל, נקצר אותם לאדמה, ככה נהוג לעשות, אולי נשמור את הכובד הזה, בהזדמנות זו ב-D, סטאז', אבטף ו-4,
קוד, זה בעצם, אנחנו מדברים עכשיו, אפשר להגיד, על ה-reference לבייסלאפ, יפה.
מה שבאמת יש לי בזיכרון זה נגדיר פה זה בעצם line ונגדיר עוד אחד ונקרא לו freehand יש לנו ארבעה אז נגיד שיש לנו ארבעה גם מאלה נגיד שניים מאלה ושניים מאלה את הפוינטר הזה אולי קצת נרחיק איתו ונשתמש במספר הפעמים האלה ונגזור את זה.
לא בדיוק לגזור את הגדר וננסה שוב לגזור את הגדר. יפה.
השייפים, המערך עצמו של השייפים, בעצם כל אחד מהתאים פה זה אובייקט, זה אובייקט. כל אחד מהפוינטרים פה זה אובייקט. מזה בעצם בנוי העיקרון של המערך.
הפוינטר עצמו הוא אובייקט. אבל אנחנו בזמן ריצה, כשאנחנו מבצעים את הקוד הזה ואנחנו אומרים לקומפיילר read shape as in shapes אנחנו בכל איטרציה מקבלים פוינטר מסוג, פוינטר הוא מסוג שייפ ואז אנחנו יכולים לפנות ואז אנחנו פונים, אנחנו מחזיקים פוינטר
ל-free hand אבל הפוינטר הוא מסוג שייפ. אבל מכיוון שלשייפ לקלאס שייפ יש דרו אז אני יכול לפנות לדרו של שייפ. עכשיו מכיוון שפרי-הנד הוא בעצם גם שייפ אפשר להגיד שפרי-הנד בזה שהוא יורש את שייפ הפרי-הנד מכיל את שייפ אפשר להגיד שתת חלק של פרי-הנד זה בעצם שייפ ובעצם כשאני מצביע עם פוינטר
מסוג שייפ לפרי-הנד אני מצביע לחלק ממנו לחלק ממנו שהוא באמת השייפ ולחלק לזה באמת יש את דרו, אז בעצם הפוינט השלישי S שלי בעצם מצביע לשייפ אמיתי ואז יש לי באמת דרו שאני יכול לפנות אליה.
זה הרעיון, זה הציור של מה שבעצם קורה כאן. אוקיי, אז זה היה דבר אחד שעשינו, אז רצינו לעבור בעצם על השדות האלה. אז אמרנו שפונקציה אבסטרקטית זה פונקציה שהיא רעיונית טהורה, היא ממש רעיון טהור.
מה זה מחלקה אבסטרקטית? מחלקה אבסטרקטית זו מחלקה שאני לא יכול ליצור ממנה אובייקטים. אני לא יכול לעשות New Shape, ויש היגיון, הקומפיילר מחייב אותנו לשים את המילה אבסטרקט לפני ה-Class Shape אם ה-Class Shape מכיל פונקציה שהיא אבסטרקטית. למה?
כי אין שום היגיון לאפשר יצירה של מחלקה שאין לחלק ממנה מימוש. אם מישהו עכשיו יעשה new shape, ויפנה לו פונקציה דרו, מה ולאן בעצם הוא פונה? לאיזה קוד הוא רוצה לפלוט?
אין קוד לדרו. אז אנחנו נחסום את היצירה של shape בזה שנחייב אותה להיות אבסטרקטית. אבסטרקטית אומר שאני לא יכול להקצות אובייקט מסוג shape, כי אין היגיון.
זה גם מאוד הגיוני. כן, זה קלאס, זה מחלקה רעיונית. אני יכול ליצור פוינטרים איסוף שייפ ולהצביע על הבסיס של היורשים, אבל אני לא יכול ליצור שייפים, אין לזה שום היגיון.
יפה. מה זה אינטרנל? אינטרנל זה לא קשור לירושה. אינטרנל זה אומר שהשדה הזה, או השדה הזה, כן? גם הקלאס הוא שדה של ה-Namespace.
מה זה Namespace? ניימספייס זה מקום שבו אני כותב לי קלאסים בתוך ניימספייס אני יכול לשים קלאסים בתוך קלאסים אני יכול לשים פונקציות משתנים ועוד קלאסים בתוך ניימספייס אני יכול להגדיר עוד דברים שעוד לא למדנו עליהם האמת למדנו על אינם אז בתוך ניימספייס אני גם יכול לשים אינם אני יכול לשים טיפוסים בניימספייס יפה אז הקלאס הוא שדה של הניימספייס אז אני יכול
להגיד על שדה מה רמת ההרשאה מה ה-access level שלו? מה רמת הרשעת הגישה אל הטיפוס הזה, אל השדה הזה? אינטרנל אומר ששייפ מוכר בכל הפרויקט ויידבורד 01. כל קלאסט שאני אוסיף לפרויקט הזה יכיר את שייפ.
דרו, כשאני אומר שהיא אינטרנל, אני אומר שדרו זמינה בדיוק באותה צורה לכל מחלקה בוויידבורד 01.
יפה אז זה היה קצת קצת דיברנו על מונחים בואו נחזור עכשיו שוב לקוד שלנו הבטחנו שאנחנו נאחה את שני השדות האלה אז בואו נעשה את זה אז אני מוציא את השדה מפרי הנד אני אעשה cut וגם מליין אני אוציא את השדות wits וcolor אני אעשה גם פה cut עכשיו נלך ל-shape, וב-shape אני אעשה פייס.
יפה. בואו ננסה להריץ את זה, וזה עובר בשלום. אני יכול לצייר, יפה. אבל האמת היא שאני יכול אפילו להגיד יותר מזה.
אני יכול להגיד שוויטס תמין, לא, בואו נעצור בשלב זה. יפה, אז בעצם חסכנו קוד. בואו נסתכל אם אפשר לחסוך עוד קוד, שוב נחזור לטופס הראשי שלנו.
בואו נסתכל כאן על מיוס אט,