1 / 77

ניתוח מערכות מידע ב

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

jethro
Download Presentation

ניתוח מערכות מידע ב

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  4. ספרים • 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.

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

  6. דוגמא - טיפול בקלט ופלט 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(); } }

  7. קלט של מספרים 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(); } }

  8. דוגמא - 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(); } }

  9. דוגמא - 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(); } }

  10. דוגמא - while 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(); won = int.Parse(tmp); } ratio = (double)won / NUM_GAMES; Console.WriteLine ("Winning percentage is: {0}", ratio); } }

  11. 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."); break; case 8: Console.WriteLine("Above average. Nice job."); break; case 7: Console.WriteLine("Average."); break; default: Console.WriteLine("Study some more."); break; }

  12. הבדלים בין אופרטורים של VB ל C#

  13. הבדלים בין אופרטורים של VB ל C#המשך...

  14. מחלקות

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

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

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

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

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

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

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

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

  23. דוגמא של פונקציה שמחזירה ערך 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"); } } }

  24. דוגמא של מערך 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]); } } }

  25. קוד 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) { //method body } public void draw(float sum) { //method body } } תכונות בנאי (constructor) פעולה (מתודה)

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

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

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

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

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

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

  32. פקודת 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; }

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

  34. בנאים • בנאי יכול להופיע ללא פרמטרים או עם פרמטרים • אפשר להגדיר מספר בנאים, אם יש לכל אחד פרמטרים שונים • מספר שונה של פרמטירם או • טיפוסים שונים של פרמטרים 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; _balance = 0; } • }

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

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

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

  38. קוד 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); } } יצירת אוביקטים שימוש בפעולות

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

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

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

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

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

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

  45. בנאי העתקה

  46. המחלקה 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; } }

  47. הוספת מתודה 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; } }

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

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

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

More Related