חזרה – מחשבון צורות
חלק מהיחידה תכנות מונחה עצמים במסלול ה-Dart של Coddy. שיעור 49 מתוך 110.
אתגר
קלבואו נבנה מערכת לחישוב צורות, שמשלבת מחלקות מופשטות וממשקים כדי ליצור ערכת כלים גמישה לגאומטריה. תתכננו היררכיית מחלקות שבה צורות שונות חולקות התנהגות משותפת באמצעות הפשטה, וכל צורה מספקת חישובים ייחודיים משלה.
תארגנו את הקוד שלכם בשלושה קבצים:
shape.dart: הגדירו כאן את מחלקת הבסיס המופשטת ואת הממשק:- מחלקה מופשטת
Shapeעם מאפייןString nameובנאי. כללו את המתודות המופשטותdouble calculateArea()ו-double calculatePerimeter(). הוסיפו מתודה רגילהdescribe()שמדפיסה את[name] - Area: [calculateArea()], Perimeter: [calculatePerimeter()] - מחלקה
Drawableעם מתודהdraw()שמדפיסה אתDrawing shape...
- מחלקה מופשטת
shapes.dart: ייבאו אתshape.dartוצרו את מחלקות הצורות הקונקרטיות:- מחלקה
Rectangleשמרחיבה אתShapeומממשת אתDrawable. הוסיפו את המאפייניםdouble widthו-double height. חשבו את השטח באמצעותwidth * heightואת ההיקף באמצעות2 * (width + height). המתודהdraw()צריכה להדפיס אתDrawing rectangle [width]x[height] - מחלקה
Circleשמרחיבה אתShapeומממשת אתDrawable. הוסיפו מאפייןdouble radius. השתמשו ב-3.14159עבור pi. חשבו את השטח באמצעותpi * radius * radiusואת ההיקף (היקף המעגל) באמצעות2 * pi * radius. המתודהdraw()צריכה להדפיס אתDrawing circle with radius [radius]
- מחלקה
main.dart: ייבאו אתshapes.dartוהדגימו את מחשבון הצורות שלכם:- צרו
Rectangleבשם'Rectangle'עם רוחב5.0וגובה3.0 - צרו
Circleבשם'Circle'עם רדיוס4.0 - עבור כל צורה, קראו ל-
draw()ולאחר מכן ל-describe() - הדפיסו שורה ריקה בין שתי הצורות
- צרו
האתגר הזה מדגים כיצד מחלקות מופשטות מגדירות מבנה משותף (לכל צורה יש חישובים של שטח והיקף), בעוד שממשקים מוסיפים יכולות נוספות (צורות שאפשר לצייר). כל מחלקה קונקרטית מרחיבה את המחלקה המופשטת כדי להגדיר את זהותה הבסיסית, ומממשת את הממשק כדי להוסיף פונקציונליות.
הפלט הצפוי:
Drawing rectangle 5.0x3.0
Rectangle - Area: 15.0, Perimeter: 16.0
Drawing circle with radius 4.0
Circle - Area: 50.26544, Perimeter: 25.13272נסו בעצמכם
import 'shapes.dart';
void main() {
// TODO: ליצור Rectangle בשם 'Rectangle' עם רוחב 5.0 וגובה 3.0
// TODO: ליצור Circle בשם 'Circle' עם רדיוס 4.0
// TODO: עבור המלבן, לקרוא ל־draw() ואז ל־describe()
// TODO: להדפיס שורה ריקה
// TODO: עבור העיגול, לקרוא ל־draw() ואז ל־describe()
}
כל השיעורים ביחידה תכנות מונחה עצמים
1יסודות התכנות מונחה העצמים
קבצים חיצונייםספריות וייבואמבוא לתכנות מונחה עצמיםמחלקות לעומת אובייקטיםמילת המפתח thisמתודותמשתני מופעיסודות הבנאיחזרה: מחשבון פשוט4בטיחות מפני ערכי null
מבוא לבטיחות מפני ערכי nullניתן להקצאה ל-null לעומת לא ניתן להקצאה ל-nullהאופרטורים ? ו-!מילת המפתח Late ובטיחות מפני ערכי nullאופרטורים מודעי nullבטיחות מפני ערכי null במחלקותסיכום – מערכת פרופילי משתמשים7מחלקות מופשטות וממשקים
מחלקות מופשטותמתודות מופשטותממשקים ב-Dartממשקים משתמעיםמימוש לעומת הורשהממשקים מרוביםחזרה – מחשבון צורות10אוספים וגנריות
סקירה כללית של List, Set ו-Mapאוספים בטוחים מבחינת טיפוסיםמחלקות גנריותמתודות גנריותאילוצים גנרייםIterable ו-Iteratorסיכום – אחסון גנרי13מושגי OOP מתקדמים
הרכבה לעומת הורשהמתודות הרחבהמחלקות קריאותמחלקות אטומות (Dart 3)רשומות (Dart 3)תבניות והתאמה (3.0)טיפוסים מונים עם מתודות16פרויקט: ניהול ספרייה
סקירת הפרויקטמחלקות ספר ומשתמש2בנאים ב-Dart
בנאי ברירת מחדלבנאים בעלי שםרשימות אתחולבנאים קבועיםבנאי Factoryבנאים מפניםסיכום - בונה צורות5כימוס
חברים ציבוריים לעומת פרטייםמוסכמת הקידומת _פרטיות ברמת הספרייההעמקה ב-getters וב-settersהסתרת מידעסיכום – רשומות תלמידים8מיקסינים
מבוא למיקסיניםיצירת מיקסיניםשימוש במספר מיקסיניםמילת המפתח on במיקסיניםמיקסינים לעומת ירושהמיקסינים לעומת ממשקסיכום – מערכת בעלי החיים3מאפייני מחלקה
איברי מופע לעומת איברים סטטייםשדות final ו-constמשתני lateמתודות ושדות סטטייםGetters ו-Settersסיכום – מנהל חשבונות בנק6ירושה
ירושה בסיסיתמילת המפתח superדריסת מתודותהאנוטציה @overrideמילת המפתח final למחלקהבנאים וירושהסיכום – היררכיית עובדים9פולימורפיזם
יסודות הפולימורפיזםפולימורפיזם באמצעות ממשקיםבדיקת טיפוסים בזמן ריצההאופרטורים is ו-asמילת המפתח קווריאנטיסיכום — מעבד תשלומים12תכנות מונחה עצמים אסינכרוני
Future-ים ו-async/awaitיסודות ה-Streamsבקרי Streamsבנאים אסינכרונייםאסינכרוניות במתודות של מחלקהסיכום - אחזור נתוניםתרגלו בעצמכם: קומפיילר Dart אונליין