ניתוח מערכות מידע ב נעים להכיר... תכנות ב C#.

Slides:



Advertisements
Similar presentations
Object Oriented 33 MCSD DORON AMIR
Advertisements

ממיבחניםC שאלות ++.
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
מבוא למדעי המחשב לתעשייה וניהול
בתרגול הקודם הורשה: –ניתן להרחיב רק מחלקה אחת –כל מה שלא private – עובר בהורשה –המילה השמורה super –יצירת היררכיה –Object היא שורש ההיררכיה –דריסה אופרטור.
האוניברסיטה העברית בירושלים
מבוא למדעי המחשב לתעשייה וניהול דוגמאות ותרגול נוסף במערך חד ממדי הרצאה 12.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
מבוא לשפת C חידות ונקודות חשובות נכתב על-ידי יורי פקלני. © כל הזכויות שמורות לטכניון – מכון טכנולוגי לישראל.
תכנות ב C#. דוגמא לפלט using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void.
מבוא למדעי המחשב © אריק פרידמן 1 מצביעים כמערכים דוגמה.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
מבני בקרה מבוא לתכנות למנע " ס - שבוע מספר 3 - מאיר קומר - סמסטר ב ' - תשס " ו הסתעפות “ אם השמאל ואימנה ואם הימין ואשמאילה ”
קורס תכנות – סימסטר ב ' תשס " ח שיעור שישי: מערכים
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
Last time on Clang משתנה: "פתק" המשמש את המחשב לשמירת מידע. לכל משתנה יש שם וטיפוס כללים לשמות משתנים –חייבים להכיל רק אותיות, מספרים ו '_' –חייבים להתחיל.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
מבוא כללי למדעי המחשב הקצאת זיכרון דינאמית
מתמטיקה בדידה תרגול 2.
1 מבוא למדעי המחשב סיבוכיות. 2 סיבוכיות - מוטיבציה סידרת פיבונאצ'י: long fibonacci (int n) { if (n == 1 || n == 2) return 1; else return (fibonacci(n-1)
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
Sscanf example #include int main () { char sentence []="Rudolph is 12 years old"; char str [20]; int i; sscanf (sentence,"%s %*s %d",str,&i); printf ("%s.
אתחול עצמים. אתחולים ובנאים יצירת מופע חדש של עצם כוללת: הקצאת זכרון, אתחול, הפעלת בנאים והשמה לשדות במסגרת ריצת הבנאי נקראים גם הבנאי/ם של מחלקת הבסיס.
Structure. מה לומדים היום ? דרך לבנות מבנה נתונים בסיסי – Structure מייצר " טיפוס " חדש מתאים כאשר רוצים לאגד כמה משתנים יחד דוגמאות : עובד : שם, טלפון,
הגדרת משתנים יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר 2015 יום שישי 18 ספטמבר.
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
Practice session 3 תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי ) שיטות חישוב : Applicative & Normal Evaluation Partial Evaluation.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים עוברים לג ' אווה.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 7. סברוטינות subroutines.
Practice session 3.  תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי )  שיטות חישוב : Applicative & Normal Evaluation.
 Client, Supplier ומה שביניהם ( ADT!).  שאלה 1: יצירת ADT עבור מעגל במישור נניח שלקוח מעוניין בפעולות הבאות : הזזת מעגל וחישוב שטח מעגל. הספק יספק ללקוח.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
קורס תכנות שיעור עשירי: מיונים, חיפושים, וקצת סיבוכיות חישוב.
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 12. ספריות.
מבנים קרן כליף. ביחידה זו נלמד :  מהו מבנה (struct)  איתחול מבנה  השמת מבנים  השוואת מבנים  העברת מבנה לפונקציה  מבנה בתוך מבנה  מערך של מבנים.
Object-oriented programming ( תכנות מונחה עצמים) involves programming using objects. An object עצם)) represents an entity in the.
מבוא למדעי המחשב לתעשייה וניהול הרצאה 6. מפעל השעווה – לולאות  עד עכשיו  טיפלנו בייצור נרות מסוג אחד, במחיר אחיד  למדנו להתמודד עם טיפול במקרים שונים.
מבנה נתונים ואלגוריתמים ) לשעבר - עיבוד מידע( ד"ר אבי רוזנפלד ד"ר אריאלה ריכרדסון.
1 תרגול 11: Design Patterns ומחלקות פנימיות אסף זריצקי ומתי שמרת 1 תוכנה 1.
1 נתבונן בפונקציה הבאה public static int min(int[] a,int n) { int min = a[0]; for (int i = 1; (i < n ) && (i < a.length) ; i++) if (min > a[i]) min = a[i];
Java Reflection הוכן על-ידי אחמד ג'בארה
מחרוזות – הטיפוס String
Programming Arrays.
Object Oriented Programming
Object Oriented Programming
Operators Overloading
Object Oriented Programming
Object Oriented Programming
מחלקות classes.
מבוא למדעי המחשב סיבוכיות.
מבוא לתכנות מונחה עצמים Object Oriented Programming
מצביעים קרן כליף.
תכנות מכוון עצמים ושפת JAVA
Static and enum קרן כליף.
תכנות מכוון עצמים ושפת JAVA
תכנות מכוון עצמים בשפת JAVA
ממשקים - interfaces איך לאפשר "הורשה מרובה".
ניתוח מערכות מידע תכנות ב C#
ניתוח מערכות מידע תכנות ב C#
תכנות מכוון עצמים ושפת JAVA
תכנות מכוון עצמים ושפת JAVA
מבוא לתכנות מונחה עצמים Object Oriented Programming
תוכנה 1 תרגול 13 – סיכום.
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Presentation transcript:

ניתוח מערכות מידע ב נעים להכיר... תכנות ב C#

ניתוח מערכות מידע ב' מרצים מכון לב - ד"ר אבי רוזנפלד מכון טל – ד"ר אריאלה ריכרדסון שעות קבלה: בתאום מראש בדוא"ל אתר הקורס – http://www.jct.ac.il/~rosenfa/nituach2 עדכונים מצגות דוגמאות וחומר לחזרה סילבוס

נושאים שילמדו בקורס הכרות עם C# תיכנון מונחה עצמים מתקדם Polymorphism, composition, association תרשימי UML מתאימים בניית ממשק למשתמש הכרות ADO שילוב בין בסיסי נתונים וC# פרויקט מסכם

ספרים Requirements Analysis and System Design, 3rd ed. Leszek A. Maciaszek Object-Oriented Systems Analysis and Design Using UML, 3rd ed. , Simon Bennett, Steve Mcrobb, Ray Farmer #C  כשפת אם. – Object Oriented Design .net framework. יצחק גרבר. Visual C# 2010, How to Program (4th Edition), Deitel and Deitel. Pro Asp.Net 4 in C# 2010, 4th ed. Matthew MacDonald, Adam Freeman, and Mario Szpuszta.

הכרות עם C# פקודות כלליות

דוגמא - טיפול בקלט ופלט using System; class IOProgram { דוגמא - טיפול בקלט ופלט using System; class IOProgram { static void Main(string[] args) Console.WriteLine("Please Type Something:"); String x; x = Console.ReadLine(); Console.WriteLine("You typed {0}" , x ); Console. ReadKey(); }

קלט של מספרים using System; class numberProgram { static void Main(string[] args) String x; int y; Console.WriteLine("Enter a number:"); x = Console.ReadLine(); y = int.Parse(x); Console.WriteLine("You typed {0}" ,x); Console.WriteLine("Adding 2 makes: {0} or {1}", x+2, y+2 ); Console. ReadKey(); }

דוגמא - if using System; class ifProgram { static void Main(string[] args) string x; x = Console.ReadLine(); if (x == "a" || x == "A") Console.WriteLine("A is for apple"); else if (x == "b" || x == "B") Console.WriteLine("B is for Boy"); else Console.WriteLine("Not defined"); Console.ReadKey(); }

דוגמא - for using System; class ifProgram { static void Main(string[] args) for (int i = 0; i < 100; i++) Console.WriteLine("The square root of {0} is {1} ", i, Math.Sqrt(i) ); Console.ReadKey(); }

דוגמא - while int won; double ratio; using System; class FirstProgram { static void Main(string[] args) int NUM_GAMES = 12; int won; double ratio; Console.WriteLine("Enter num of games won (0 to {0})", NUM_GAMES); string tmp = Console.ReadLine(); won = int.Parse(tmp); while (won < 0 || won > NUM_GAMES) Console.WriteLine ("Invalid input. Please reenter: "); tmp = Console.ReadLine(); } ratio = (double)won / NUM_GAMES; Console.WriteLine ("Winning percentage is: {0}", ratio);

int grade, category; Console.WriteLine("Enter a numeric grade (0 to 100): "); string tmp = Console.ReadLine(); grade = int.Parse(tmp); category = grade / 10; switch (category) { case 10: Console.WriteLine("Perfect score. Well done."); break; case 9: Console.WriteLine("Well above average. Excellent."); case 8: Console.WriteLine("Above average. Nice job."); case 7: Console.WriteLine("Average."); default: Console.WriteLine("Study some more."); }

הבדלים בין אופרטורים של VB ל C# VB.NET Purpose / \ Integer division % Mod Modulus (division returning only the remainder) n/a ^ Exponentiation /= \= Integer division Assignment += &= NEW Concatenate %= Modulus &= Bitwise-AND ^= Bitwise-exclusive-OR |= Bitwise-inclusive-OR == = Equal != <> Not equal Is Compare two object reference variables x is Class1 TypeOf x Is Class1 Compare object reference type + & Concatenate strings && AndAlso Shortcircuited Boolean AND || OrElse Shortcircuited Boolean OR . and base . Scope resolution

הבדלים בין אופרטורים של VB ל C# המשך... VB.NET Purpose [ ] () Array element )type) Cint, CDbl, ..., CType Type cast ++ n/a Postfix increment -- Postfix decrement * (unsafe mode only) Indirection & (unsafe mode only; also see fixed) AddressOf Address of ! Not Logical-NOT ~ One's complement Prefix increment Prefix decrement sizeof Size of type & And Bitwise-AND ^ Xor Bitwise-exclusive-OR | Or Bitwise-inclusive-OR && Logical-AND || Logical-OR ?: If Function () Conditional . )Unsafe mode only) Pointer to member

מחלקות

עקרונות בתכנון מונחה עצמים תכנון מונחה עצמים תומך בעקרונות הבאים הכמסה – encapsulation ירושה – inheritance פולימורפיזם‎ - polymorphism נלמד עכשיו נלמד בהמשך

חשבון הבנק – מחלקה ואוביקט אוביקטים (המימוש) מחלקה (הרעיון/תבנית) שם אוביקט שם מחלקה שם מחלקה תכונות + ערכים תכונות פעולות

נראה תחילה איך מייצרים מחלקה

מהי הכמסה (encapsulation) אפשר להסתכל על מחלקה בשני אופנים פנימי – הפרטים של המחלקה, התכונות והפעולות שלה חיצוני – השירותים שהמחלקה מספקת פנימי חיצוני

מהי הכמסה (encapsulation) אפשר להסתכל על מחלקה בשני אופנים פנימי – הפרטים של המחלקה, התכונות והפעולות שלה חיצוני – השירותים שהמחלקה מספקת פנימי חיצוני

public - מאפשר גישה גם מחוץ למחלקה תכונות בדרך כלל תכונות לא יוגדרו public מתודות בדרך כלל יוגדרו public שכן הן מיועדות לשימוש מחוץ למחלקה מאפשר גישה למתודות מחוץ למחלקה מאפשר גישה מכל מתודות המחלקה

get, set כיוון שאין גישה לתכונות המחלקה באופן ישיר, מקובל להגדיר מתודות גישה לתכונות מתודות אלו נקראות בשמות getX - מחזירה את ערך התכונה X (נקרא גם accessor) setX - קובע את ערך התכונה X (נקרא גם mutator) מתודות get ו- set מאפשרות גישה מבוקרת לתכונות המחלקה ניתן להגביל טווח ערכים ניתן לבדוק שהערכים תקינים כאשר אין צורך לא נגדיר לתכונות מתודות get ו set

דוגמא של פונקציה של VOID namespace ConsoleApplication1 { class Program public static void XYZ() Console.WriteLine("There"); } public static void Do(int x) Console.WriteLine(x+2); static void Main(string[] args) XYZ(); Do(4); int y = 3; Do(y); Console.WriteLine("Hi");

דוגמא של פונקציה שמחזירה ערך namespace ConsoleApplication1 { class Program public static int XYZ(int x) return x + 2; } static void Main(string[] args) XYZ(4); int y = 3; XYZ(y); Console.WriteLine("Hi");

דוגמא של מערך namespace ConsoleApplication1 { class Program static void Main(string[] args) int[] numbers = new int[10]; // numbers is a 10-element array numbers[0] = 1; numbers[2] = -3; for (int i = 0; i < 10; i++) Console.WriteLine("pos " + i + " is " + numbers[i]); }

קוד C# למימוש מחלקה BankAccount using System; public class BankAccount { private String name; private float balance; public BankAccount(String name) { //constructor body } public float getBalance( ) { //method body } public void deposit(float sum) public void draw(float sum) } תכונות בנאי (constructor) פעולה (מתודה)

המימוש המלא – חלק 1 using System; public class BankAccount { //attributes private String _name; private float _balance; //constructor public BankAccount(String name) _name = name; _balance = 0; } המשך בשקף הבא

המימוש המלא – חלק 2 //methods public float getBalance( ) { return _balance; } public void deposit(float sum) _balance += sum; public void draw(float sum) _balance -= sum;

מתודות - דגשים דגשים

כותרת המתודה הצהרת מתודה מתחילה בכותרת סוג גישה public int calc (int num1, int num2) שם המתודה רשימת פרמטרים רשימת הפרמטרים מגדירה עבור כל פרמטר את הטיפוס שלו ואת שמו טיפוס הערך המוחזר

גוף המתודה לאחר הכותרת מגיע גוף המתודה public int calc (int num1, int num2) { int sum = num1 + num2; return sum; } sumהוא משתנה לוקלי הוא מיוצר בכל פעם שהמתודה נקראת ומושמד כאשר מסיימת להתבצע הטיפוס שמחזירים צריך להיות זהה לטיפוס הערך המוחזר

פקודת return טיפוס הערך המוחזר של מתודה קובע את הטיפוס של הערך שיוחזר למקום ממנו נקראה המתודה למתודה שלא מחזירה ערך יש טיפוס ערך מוחזר void public int calc (int num1, int num2) { int X; // do something return X; } public void calc (int num1, int num2) { // do something }

פקודת return (המשך) פקודת ה-return קובעת את הערך המוחזר הערך שיש ב X יוחזר ניתן גם להחזיר ערך של ביטוי הערך המוחזר ע"י הביטוי צריך להתאים לטיפוס הערך המוחזר public int calc (int num1, int num2) { int X; // do something return X; } public bool calc (int num1, int num2) { return num1<num2; }

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

בנאים בנאי יכול להופיע ללא פרמטרים או עם פרמטרים public class BankAccount { private String _name; private float _balance; //constructor without parameters public BankAccount() _name = null; _balance = 0; } //constructor with parameters public BankAccount(String name) _name = name; בנאי יכול להופיע ללא פרמטרים או עם פרמטרים אפשר להגדיר מספר בנאים, אם יש לכל אחד פרמטרים שונים מספר שונה של פרמטירם או טיפוסים שונים של פרמטרים

בנאים - ערך מוחזר לבנאים אין ערך מוחזר!!! אפילו לא void טעות נפוצה – לתת טיפוס לבנאי גורם לבנאי להיות מתודה רגילה במידה ולא הוגדר בנאי למחלקה: יוגדר באופן אוטומטי בנאי ריק לבנאי הריק אין פרמטרים הבנאי הריק לא מבצע שום פעולה

שימוש במחלקות ואוביקטים דגשים

יצרנו את המחלקה, עכשיו נרצה לייצר אוביקטים (המימוש)

קוד C# ליצירת אוביקטים של BankAccount using System; public class test { static void Main(String[] args) BankAccount Account1 = new BankAccount("Tamar"); BankAccount Account2 = new BankAccount("Moshe"); Account1.deposit(20000); Account2.deposit(100); Account2.draw(600); } יצירת אוביקטים שימוש בפעולות

יצירת אוביקטים משתנה מכיל טיפוס בסיסי (int, float …) או הצבעה לאוביקט ניתן להצהיר על משתנה מטיפוס מחלקה כלשהי Circle circ1; לא נוצר אוביקט בהצהרה הנ"ל!! המשתנה מכיל כתובת בזכרון עבור האוביקט יש לייצר את האוביקט במפורש ע"י שימוש ב new המבצע קריאה לבנאי circ1 = new Circle (); Circle circ1 = new Circle (); ניתן לשלב את שתי הפעולות ביחד: diameter = 30; xPosition = 20; yPosition = 60; color = "blue"; isVisible = false; circ1

הפעלת מתודות ברגע שיצרנו אוביקט אפשר להשתמש באופרטור '.' כדי להפעיל מתודות שלו. int size=0; Circle circ1; circ1 = new Circle(); circ1.moveHorizontal(10); size = circ1.getSize(); מתודה יכולה להחזיר ערך (כמו getSize() ) ניתן להשתמש בערך לביצוע השמה או בתוך ביטוי אפשר לחשוב על קריאה למתודה כ"הפעלת שירות של המחלקה"

העמסה - overloading ראינו כבר שאפשר לייצר כמה בנאים ניתן לתת הגדרות שונות גם למתודות רגילות העמסה (overloading) – יש מספר מתודות עם אותו שם על החותמת (signature) של המתודה להיות יחודית, כלומר: מספר הפרמטרים, הטיפוס שלהם והסדר שלהם הטיפוס המוחזר אינו חלק מהחותמת כלומר אסור ששני מתודות יבדלו רק ע"י הטיפוס המוחזר

העמסה – רשימת הפרמטרים הקומפיילר קובע לאיזה מתודה לקרוא ע"י ניתוח הפרמטרים static float tryMe(int x) { return x + 10; } result = tryMe(25, 5) מי יופעל? static float tryMe(int x, int y) { return x*y; }

null null הוא ערך מיוחד עבור אוביקטים טיפוסים פרימיטיבים (int, float, …) לא יכולים לקבל null מקביל ל Nothing ב VB ניתן לתת לאובייקט ערך null בצורה הבאה: String s = null; אפשר גם לבדוק אם אובייקט מסויים הוא null: if (s == null) // Do something האובייקטים שהוכרזו אך לא אותחלו - מכילים ערך null. ניסיון לבצע פעולה על אובייקט שהוא null יגרור קריסה של התוכנית

enum Season {winter, spring, summer, fall}; Enumerated Types משתמשים ב enum כדי להגדיר טיפוס המקבל ערכים מוגדרים מראש שקול ל Enum של VB למשל נגדיר טיפוס שנקרא Season enum Season {winter, spring, summer, fall}; ניתן להגדיר כמה ערכים שנרצה לאחר ההגדרה ניתן להגדיר משתנים מהטיפוס החדש Season time; ולאתחל ערכים time = Season.fall;

בנאי העתקה

המחלקה Point נגדיר מחלקה בשם Point של נקודה במרחב. למחלקה שני מאפיינים, רכיב X ורכיב Y public class Point { private double _x,_y; public Point(double x, double y) { _x = x; _y = y;} public double getX() { return _x; } public double getY() { return _y; } public void setX(double x) { _x = x; } public void setY(double y) { _y = y; } }

הוספת מתודה toString public class Point { private double _x,_y; public Point(double x, double y) { _x = x; _y = y;} public double getX() { return _x; } public double getY() { return _y; } public void setX(double x) { _x = x; } public void setY(double y) { _y = y; } public String toString() {//return the relevant string return _x + "," + _y; }

השמה של אוביקטים עבור אוביקטים השמה מעתיקה את הכתובת Before: Then: p1 Before: 1 2 Point p2 = p1; p1 p2 Then: 1 2 p2.setX(5); p1 p2 After: 5 2

מה שרוצים: לייצר אוביקט חדש שהתוכן שלו זהה לישן Before: Then: After: p1 Before: 1 2 Point p2 = new Point(p1) p2 p1 Then: 1 2 p2.setX(5); p1 After: 1 2 5 2 p2

הפתרון: בנאי העתקה בנאי העתקה copy constructor משכפל אוביקט מייצר אוביקט חדש מאתחל את האוביקט החדש באופן זהה לישן p2 1 2 p1 1 2

הוספת בנאי העתקה (copy constructor) public class Point { private double _x,_y; public Point(double x, double y) { _x = x; _y = y;} //copy constructor public Point(Point otherPoint) _x = otherPoint._x; _y = otherPoint._y; } public double getX() { return _x; } public double getY() { return _y; } public void setX(double x) { _x = x; } public void setY(double y) { _y = y; } public String toString() {//return the relevant string return _x + "," + _y;

העברת אוביקטים

העברת אוביקט כפרמטר אפשר להעביר אוביקט כפרמטר - נראה דוגמא במחלקה Point נממש מתודה שמחשבת מרחק בין הנקודה של האוביקט לנקודה אחרת מרחק בין 2 נקודות מוגדר: public double distance(Point otherPoint) { double diffX = Math.Pow(_x-otherPoint._x,2); double diffY = Math.Pow(_y-otherPoint._y,2); return Math.Sqrt(diffX+diffY); }

החזרת אוביקט ממתודה ב Point נממש מתודה שמחזירה את הנקודה באמצע הדרך מהמרכז (0,0) לנקודה של האוביקט עבור הנקודה (10,4) תחזיר (5,2) עבור הנקודה (4,7) תחזיר (2,3.5) public Point halfPoint() { double halfX = _x/2; double halfY = _y/2; Point halfPoint = new Point(halfX, halfY); return halfPoint; }

עוד דרך להחזרת אוביקט: אפשר לבצע את ה new בתוך פקודת ה return public Point halfPoint() { return new Point(_x/2,_y/2); }

דוגמא לשימוש במתודה halfPoint Point p1 = new Point(10,4); Point p2 = new Point(4,7); Point middlePoint = p1.halfPoint(); Console.WriteLine(p2.halfPoint()); פלט: 2.0,3.5

אוביקט כתכונה Aggregation

אוביקט כתכונה נרצה להגדיר למחלקה תכונות שהן מחלקה אחרת שיצרנו. מאפשר שימוש חוזר של קוד ובנייה של מחלקות מורכבות נניח נרצה ליצור מחלקה המתארת מעגל הגדרנו מחלקה עבור נקודה Point נגדיר מחלקה עבור מעגל תכונה 1: המרכז (מסוג Point) תכונה 2: רדיוס radius Point

הגדרת המעגל שימו לב! בכל הבנאים על מנת לאתחל את המרכז יש לבצע new public class Circle { private double _radius; private Point _center; //constructor 1 public Circle(double r, double x, double y) _radius = r; _center = new Point(x, y); } //constructor 2 public Circle(double r, Point p) _center = new Point(p); הגדרת המעגל שימו לב! בכל הבנאים על מנת לאתחל את המרכז יש לבצע new

הגדרת המעגל public class TestCircle { static void Main(String[] args) //making a circle using radius and x,y coordiantes Circle circ1 = new Circle(10,2,4); //making a circle using a radius, and a point Point pt = new Point(5,6); Circle circ2 = new Circle(20, pt); what if we want to print the circle information? } הגדרת המעגל

הגדרת המעגל כאן נקראת מתודת toString של Point public class Circle { private double _radius; private Point _center; //constructor 1 public Circle(double r, double x, double y) _radius = r; _center = new Point(x, y); } //constructor 2 public Circle(double r, Point p) _center = new Point(p); //toString public String toString() return ("radius is " + _radius + ",\t" + "center is " + _center); הגדרת המעגל כאן נקראת מתודת toString של Point

הגדרת המעגל public class TestCircle { static void Main(String[] args) //making a circle using radius and x,y coordiantes Circle circ1 = new Circle(10,2,4); //making a circle using a radius, and a point Point pt = new Point(5,6); Circle circ2 = new Circle(20, pt); //Now we can print Console.WriteLine("circ1: " + circ1.ToString()); Console.WriteLine("circ2: " + circ2.ToString()); } הגדרת המעגל

הגדרת המעגל set & get עבור רדיוס (טיפוס double ) public class Circle { private double _radius; private Point _center; //constructor 1 public Circle(double r, double x, double y) _radius = r; _center = new Point(x, y); } //constructor 2 public Circle(double r, Point p) _center = new Point(p); //toString public String ToString() return ("radius is " + _radius + ",\t" + "center is " + _center.ToString()); public void setRadius(double r) public double getRadius() return _radius; הגדרת המעגל set & get עבור רדיוס (טיפוס double )

setCenter - אפשרות א' המתודה תקבל את הקואורדינטות x ו y public void setCenter(double x, double y) { _center.setX(x); _center.setY(y); } public void setCenter(double x, double y) { _center._x=x; _center._y=y; } לא ניתן לגשת לתכונות פרטיות של center מסוג Point !!!

setCenter - אפשרות ב' או המתודה תקבל מרכז (נקודה) משתמש בבנאי העתקה של Point המתודה תקבל מרכז (נקודה) (העברת אוביקט כפרמטר) public void setCenter(Point p) { _center = new Point(p); } public void setCenter(Point p) { _center.setX(p.getX()); _center.setY(p.getY()); } או public void setCenter(Point p) { _center =p; } public void setCenter(Point p) { _center._x = p._x; _center._y = p._y; } aliasing private

getCenter - הנכון הדרך הנכונה להחזרת המרכז: public Point getCenter() { return new Point(_center); } במקרה זה יוחזר העתק של התכונה שימוש בבנאי העתקה עקרון ההכמסה (encapsulation) נשמר. אם היינו מחזירים בלי new היה אפשר לשנות מחוץ למחלקה

הגדרת המעגל דוגמאות לשימוש set, get: public class TestCircle { static void Main(String[] args) Circle circ1 = new Circle(10, 2, 4); //set and get as usual circ1.setRadius(100); double rad2 = circ1.getRadius(); //set using coordinates circ1.setCenter(7, 8); //set using a Point Point p3 = new Point(9, 9); circ1.setCenter(p3); //get returning a Point Point center2 = circ1.getCenter(); } הגדרת המעגל דוגמאות לשימוש set, get:

נרחיב את המחלקה Circle מתודה המחזירה שטח המעגל public double area() { return _radius * _radius * Math.PI; } מתודה המחזירה היקף המעגל public double perimeter() { return _radius * 2 * Math.PI; }

מעבדה נרחיב את המחלקה Circle מתודה הבודקת אם המעגל מוכל כולו ברביע הראשון איך נדע? public boolean isInFirstQuarter() { return (_center.getX() - _radius >=0 && _center.getY() - _radius >=0); }

מעבדה 2 נרחיב את המחלקה Circle מתודה הבודקת אם נקודה היא בתוך המעגל מה צריך לבדוק? public boolean isPointInside(Point p) { return (_center.distance(p) <_radius ); }

C#מערכים

מערך – הצהרה ויצירה ניתן להצהיר על מערך באופן הבא: int[] scores; הצהרה כנ"ל מגדירה רק קיום של מערך ללא המערך עצמו scores מצביע כעת לכתובת null אם רוצים לייצר מופע (instance) של המערך נשתמש ב new: scores = new int[10]; זה יגדיר מערך של 10 int

דוגמאות להצהרה ויצירה int[] prices = new int[500]; bool[] flags; int length = 20; flags = new bool[length]; char[] codes = new char[1750]; מערך שגודלו נקבע בזמן ריצה: int n = int.Parse(Console.ReadLine()); int[] a = new int[n];

מערכים – גישה לתא בודד 0 1 2 3 4 5 6 7 8 9 79 87 94 82 67 98 87 81 74 91 scores מתיחסים לתא בודד במערך ע"י [ ] (סוגריים מרובעים) למשל scores[3] מתיחס לתא הרביעי במערך, וערכו 82. התא הראשון הוא scores[0] המערך הזה הוא של int ולכן בתא בודד ניתן להשתמש כמו כל int אחר int a = scores[2]; mean = (scores[0] + scores[1])/2; Console.WriteLine ("Top = " + scores[5]);

אורך מערך Length מייצג את מספר האיברים במערך ידפיס 10 שימו לב: int a = scores.Length; ל a יהיה הערך 10 Console.WriteLine(scores.Length); ידפיס 10 שימו לב: Length מכיל את מספר האיברים ולא האינדקס הכי גבוה! האינדקס הכי גבוה הוא Length-1

רשימת אתחול ניתן ליצור מערך ולמלא בו ערכים ע"י שימוש ברשימת אתחול ניתן ליצור מערך ולמלא בו ערכים ע"י שימוש ברשימת אתחול int[] units = {147, 323, 89, 933, 540, 269, 97, 114} char[] letterGrades = {'A', 'B', 'C', 'D', 'F'}; הערכים מופרדים ע"י פסיק גודל המערך נקבע לפי אורך הרשימה אין צורך להשתמש ב new אפשר להשתמש ברשימת אתחול רק בזמן הגדרת המערך

מערך - הדפסת כל האיברים יש לעבור על המערך (נעבור על כל התאים שלו) אורכו arr.Length נדפיס את התוכן של התא int[] arr = {1,2,3,4,5}; for(int i =0; i<arr.Length; i++) { Console.WriteLine(arr[i]); }