תכנות אדפטיבי דינאמי הפרדת מטרות על ידי שימוש בתורת הגרפים

Slides:



Advertisements
Similar presentations
Completeness and Expressiveness. תזכורת למערכת ההוכחה של לוגיקה מסדר ראשון : אקסיומות 1. ) ) (( 2. )) ) (( )) ( ) ((( 3. ))) F( F( ( 4. ) v) ( ) v ((
Advertisements

Object Oriented 33 MCSD DORON AMIR
ממיבחניםC שאלות ++.
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
מבוא למדעי המחשב לתעשייה וניהול
בתרגול הקודם הורשה: –ניתן להרחיב רק מחלקה אחת –כל מה שלא private – עובר בהורשה –המילה השמורה super –יצירת היררכיה –Object היא שורש ההיררכיה –דריסה אופרטור.
קורס Java מתקדם Design Patterns
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
Interface ממשקים 1. ראינו כי ניתן לשמור אובייקטים במערכים באותו אופן כמו משתנים רגילים. ננסה כעת לראות כיצד למיין מערך של אובייקטים מסוג מסוים. נשתמש.
מכונת מצבים תרגול מס' 4 Moshe Malka.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
Recitation #9. Q1 גרף מכוון מורכב מקבוצה של צמתים (nodes) ומקשתות מכוונות (arcs) המחברות ביניהם. כל קשת מכוונת יוצאת מצומת אחד ונכנסת לצומת אחר. ( בגרפים.
רקורסיות נושאי השיעור פתרון משוואות רקורסיביות שיטת ההצבה
תרגול 5 רקורסיות. רקורסיה קריאה של פונקציה לעצמה –באופן ישיר או באופן עקיף היתרון : תכנות של דברים מסובכים נעשה ברור ונוח יותר, מכיוון שזו למעשה צורת.
חורף - תשס " ג DBMS, צורות נורמליות 1 צורה נורמלית שלישית - 3NF הגדרה : תהי R סכמה רלציונית ותהי F קבוצת תלויות פונקציונליות מעל R. R היא ב -3NF.
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 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 של הסדרה הוא קירוב.
Faster reliable phylogenetic analysis Article by: Vincent Berry & David Bryant Presented by: Leonid Shuman & Eva Frant.
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site : T.A. :Emilia Katz.
מנפה שגיאות - DEBUGGER מבוא למדעי המחשב (234114) רועי מלמד
א " ב, מילים, ושפות הפקולטה למדעי המחשב אוטומטים ושפות פורמליות ( ) תרגיל מספר 1.
טיב פני שטח (טפ"ש) טיב פני שטח- רמת החלקות של המשטח.
תכנות תרגול 5 שבוע : הגדרת פונקציות return-value-type function-name(parameter1, parameter2, …) הגדרת סוג הערכים שהפונקציה מחזירה שם הפונקציהרשימת.
משטר דינמי – © Dima Elenbogen :14. הגדרת cd ו -pd cd - הזמן שעובר בין הרגע שראשון אותות הכניסה יוצא מתחום לוגי עד אשר אות המוצא יוצא מתחום.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
מודל הלמידה מדוגמאות Learning from Examples קלט: אוסף של דוגמאות פלט: קונסיסטנטי עם פונקציה f ב- C ז"א קונסיסטנטי עם S ז"א מודל הלמידה מדוגמאות Learning.
עקרון ההכלה וההדחה.
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
Safari On-line books. מה זה ספארי ספארי זו ספריה וירטואלית בנושא מחשבים היא כוללת יותר מ כותרים כל הספרים הם בטקסט מלא ניתן לחפש ספר בנושא מסוים.
אביב תשס " ה JCT תיכון תוכנה ד " ר ר ' גלנט / י ' לויאןכל הזכויות שמורות 1 פרק 7 ISP דוגמא נוספת.
Text to speech In Mobile Phones איתי לוי. הקדמה שימוש בהודעות טקסט על המכשירים הסלולארים היא דרך תקשורת מאוד פופולארית בימינו אשר משתמשים בה למטרות רבות,
11 Introduction to Programming in C - Fall 2010 – Erez Sharvit, Amir Menczel 1 Introduction to Programming in C תרגול
1 Abstract Classes האם קיים אובייקט בשם רהיט? האם קיים אובייקט בשם כלי תחבורה? האם קיים אובייקט בשם כלי כתיבה? האם קיים אובייקט בשם אדם? האם קיים אובייקט.
פיתוח מערכות מידע 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.
תכנות אסינכרוני, תקשורת ופיתוח אפליקציות ל- Windows 8.1 ואפליקציות ל- Windows Phone 8 Control (Part II)
 Client, Supplier ומה שביניהם ( ADT!).  שאלה 1: יצירת ADT עבור מעגל במישור נניח שלקוח מעוניין בפעולות הבאות : הזזת מעגל וחישוב שטח מעגל. הספק יספק ללקוח.
הקדמה Comparator Containers שימושיים Iterator Factory Pattern Trove הטמעה תכנות מתקדם - תרגול 3 Containers ב Java אליהו חלסצ'י תכנות מתקדם
תכנות מכוון עצמים ושפת ++C וויסאם חלילי. TODAY TOPICS: 1. Function Overloading & Default Parameters 2. Arguments By Reference 3. Multiple #include’s 4.
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];
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site:
עקרונות תכנות מונחה עצמים תרגול 11: OOP in C++. Outline  Where do the objects live ?  Inheritance  Slicing  Overriding vs Shadowing.
Java Reflection הוכן על-ידי אחמד ג'בארה
תרגול 7: מנשקים, פולימורפיזם ועוד
מספרים אקראיים ניתן לייצר מספרים אקראיים ע"י הפונקציה int rand(void);
Tirgul 12 Trees 1.
PPL Lecture 3 Slides by Yaron Gonen,
Operators Overloading
Formal Specifications for Complex Systems (236368) Tutorial #1
Object Oriented Programming
תרגול 7: מנשקים, פולימורפיזם ועוד
מחלקות classes.
XML מבוא כללי MCSD Doron Amir
עבודה עם נתונים באמצעות ADO.NET
תכנות מכוון עצמים בשפת JAVA
פרוקטוז, C6H12O6 , חד-סוכר מיוחד
ממשקים - interfaces איך לאפשר "הורשה מרובה".
ניתוח מערכות מידע תכנות ב C#
תכנות מכוון עצמים ושפת JAVA
תכנות מכוון עצמים ושפת JAVA
מבוא לתכנות מונחה עצמים Object Oriented Programming
Shell Scripts בסביבת UNIX
תוכנה 1 תרגול 13 – סיכום.
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
Presentation transcript:

תכנות אדפטיבי דינאמי הפרדת מטרות על ידי שימוש בתורת הגרפים ניר אדר

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

תקציר (2) פרדיגמת תכנות המכונה תכנות אדפטיבי מציעה פתרון לבעיה. ניתן להתייחס לפרדיגמה זו כאל מקרה פרטי של תכנות מונחה אספקטים. בהרצאה: החוק של Demeter – כלל אצבע המאפשר תכנות OOP בעל תלות מופחתת בעץ המחלקות. עקרונות התכנות האדפטיבי. השוואה בין תכנות אדפטיבי לתכנות מונחה אספקטים.

החוק של Demeter (1) החוק הכללי של Demeter: רכיבי התוכנית השונים צריכים להכיר רק את רכיבי התוכנית האחרים הקשורים אליהם באופן קרוב ("closely related"). המטרה: הורדת התלות של מחלקות במימוש ובממשק של מחלקות אחרות. מערכותLoosely coupled - ניתן לקחת חלק אחד מהמערכת ולהחליפו באחר באופן שקוף למשתמש.

החוק של Demeter (2) החוק של Demeter עבור תכנות מונחה עצמים: מתודה M השייכת למחלקה C צריכה להשתמש אך ורק במתודות השייכות לארגומנטים שלה (כולל this), במתודות השייכות לאובייקטים הנוצרים על ידי M וברכיבים הישירים של המחלקה C.

החוק של Demeter (3) מחלק העיתונים, הקונה והארנק public class Customer { private String firstName; private String lastName; private Wallet myWallet; public String getFirstName() { return firstName; } public String getLastName() { return lastName; public Wallet getWallet() { return myWallet; public class Wallet { private float value; public float getTotalMoney() { return value; } public void setTotalMoney(float newValue) { value = newValue; public void addMoney(float deposit) { value += deposit; public void subtractMoney(float debit) { value -= debit;

החוק של Demeter (4) האם אתה היית נותן למחלק העיתונים את הארנק שלך? payment = 200; // "I want my two dollars!" Wallet theWallet = myCustomer.getWallet(); if (theWallet.getTotalMoney() > payment) { theWallet.subtractMoney(payment); } else { // come back later and get my money האם אתה היית נותן למחלק העיתונים את הארנק שלך? מחלק העיתונים חשוף ליותר מידע מהדרוש לו. תלות בין מחלקת הארנק למחלקת מחלק העיתונים. ואם גנבו ללקוח את הארנק? (getWallet() == null)

החוק של Demeter (5) החלפת המתודה getWallet() במתודה getPayment(). public class Customer { private String firstName; private String lastName; private Wallet myWallet; public String getFirstName() { return firstName; } public String getLastName() { return lastName; public float getPayment(float bill) { if (myWallet != null) { if (myWallet.getTotalMoney() > bill) { theWallet.subtractMoney(payment); return payment; else { // come back later and get my money החלפת המתודה getWallet() במתודה getPayment(). מודל הקרוב יותר למציאות. ביטול הקשר בין מחלק העיתונים לארנק. תכנות מונחה עצמים: המימוש של getPayment() יכול להשתנות. payment = 200; // "I want my two dollars!" paidAmount = myCustomer.getPayment(payment); if (paidAmount == payment) { // say thank you and give customer a receipt } else { // come back later and get my money }

החוק של Demeter (6) החוק של Demeter אכן מאפשר תחזוקה קלה יותר של תוכנית על ידי הפחתת התלות בין חלקי התוכנית השונים. אנחנו משלמים בכך שקוד המימוש של concern כלשהו בתוכנית יתפרש על פני מחלקות רבות (code scattering).

Adaptive Programming (1) הפתרון לבעיה: שימוש בפרדיגמה הנקראת "תכנות אדפטיבי" – Adaptive Programming או בשם נוסף Shy Programming. אבחנה: האבסטרקציה של מודול כ"קופסה שחורה" איננה מספיק טובה! "קופסה שחורה" מפרידה בין הממשק למימוש, אולם היא אינה מפרידה בין הממשק לאלו המשתמשים בו. תכנות אדפטיבי מאפשר את שינוי הממשק ללא שינוי מימוש התוכנית.

Adaptive Programming (2) מצב התוכנית בזמן ריצה, בייחוד מצב של תוכניות מונחות עצמים, יכול להיות מיוצג על ידי גרף מכוון. הצמתים הינם אובייקטים. הקשתות בין האובייקטים מבטאות קשרי has-a וקשרי is-a של המחלקות המתאימות לאובייקטים. נתייחס למהלך ריצת כל התוכנית כטיול על הגרף.

Adaptive Programming (3) הגדרות אפשרויות לטיול על הגרף: קבוצת האובייקטים אליהם ניתן להגיע מאובייקט נתון, שלהם מאפיין מסוים, נצפו במהלך הטיול. בוצעה פעולה כלשהי על תת קבוצה של קבוצת האובייקטים שניתן להגיע אליהם מאובייקט נתון. concern אשר מבצע טיול בין אובייקטים לצורך מימוש התנהגות מסוימת על אובייקטים יכונהtraversal-related concern . תוכנית טיפוסית הפועלת על קבוצות גדולות של אובייקטים מכילה concerns רבים מסוג זה.

Adaptive Programming (4) עבור דוגמת האוטובוס והנוסעים: שורש הגרף שלנו מתחיל באובייקט מסוג אוטובוס. אנו מעוניינים בכל הצמתים הישיגים שהם מסוג נוסע. ניתן להגדיר את האלגוריתם הכללי לפתרון הבעיה כך: "ספור את כל האובייקטים מסוג נוסע שניתן להגיע אליהם דרך האובייקט B (שהוא מסוג אוטובוס)". ניתן לנסח אלגוריתם כזה בשפות תכנות!

Adaptive Programming (5) תכנות אדפטיבי מסתמך על החוק של Demeter עבור Concerns: בעת מימוש של concern, אובייקט צריך לתקשר רק עם אובייקטים החולקים איתו באופן מובהק את אותו ה-concern.

Adaptive Programming (6) הספרייה DJ היא ספריית מחלקות המיועדות להפוך את הגדרת הטיול בגרף לקלה להגדרה, להבנה ולתחזוקה. נכתבה על ידי צוות Demeter. הדוגמאות בהמשך - יעשו שימוש בספרייה זו. מטרות העל של ספריית DJ: טיפול ב-concerns מסוג traversal-related concerns. ביטול התלות בין מטרות הטיול לבין עץ המחלקות. אפשור תכנות אדפטיבי בצורה ידידותית למתכנת.

Adaptive Programming (7) תכנות אדפטיבי דינאמי הוא תכנות בו ההחלטה על מסלול הטיול בגרף המחלקות נעשית בזמן ריצה. ספריית DJ מממשת תכנות אדפטיבי דינאמי. הספרייה משתמשת ב-Reflections - טכנולוגיה המאפשרת, בהינתן מחלקה, לזהות בזמן ריצה את המתודות והמאפיינים שלה, ובאופן דינמי להריץ מתודות השייכות לה. בעזרת השימוש ב-Reflections הספריה אינה דורשת התערבות בפעולת המהדר של Java.

Adaptive Programming (8) האלמנטים עליהם מושתתת החבילה DJ הן המחלקות ClassGraph, ObjectGraph, Strategy ו-Visitor. אובייקט מסוג ClassGraph הוא גרף מכוון בו הצמתים הם מחלקות, והקשתות מבטאות קשרי is-a וקשרי has-a בין המחלקות המתאימות. אובייקט מסוג ObjectGraph הוא גרף מכוון בו הצמתים הם האובייקטים של התוכנית. הגרף מתאים לאובייקטים הקיימים בזמן ריצה.

Adaptive Programming (9) Strategy מגדירה את הטיול שאנו רוצים לבצע. מחלקה זו מסוגלת להיות מתוארת גם כמחרוזת. אובייקטים מסוג Visitor שומרים את המידע הנדרש ליישום הטיול.

Adaptive Programming (10) class Company { Double sumSalaries(edu.neu.ccs.demeter.dj.ClassGraph cg) { String s = "from Company to Salary"; edu.neu.ccs.demeter.dj.Visitor v = new edu.neu.ccs.demeter.dj.Visitor() { private double sum; public void start() { sum = 0.0; } public void before(Salary host) { sum += host.getValue(); public Object getReturnValue() { return new Double(sum); return (Double) cg.traverse(this, s, v);

Adaptive Programming (11) מתודות בהם תומך Visitor: public void start() public void finish() public void before(<Class>) public void after(<Class>) public Object getReturnValue()

Adaptive Programming (12) המחלקה Strategy מגדירה את נקודת המוצא, נקודת היעד, ואופציונאלית גם תחנות ביניים. ניתן להשתמש במחרוזת בכל מקום שמשתמשים במחלקה זו. ניתן להתייחס למחרוזת כאל ביטוי רגולארי המתאים לאסטרטגיה. ניתן לבנות ולהגדיר אסטרטגיות בזמן ריצה.

Adaptive Programming (13) דוגמא: שמירת קובץ XML המייצג מחלקה. דוגמא: caching של ערכי פונקציה מוחזרים. לכאורה, caching של ערכי פונקציה מוחזרים נראה פעולה שהגיוני לבנות עבורה תבנית גנרית. בפועל – בשיטות התכנות המקובלות קשה לממש זאת, מכיוון שקיימים מקרי קצה רבים – מתי צריך לקרוא לפונקציה שוב ולא להשתמש בערך שנשמר. AP מאפשר לנו לבצע caching בקלות – נגדיר עצמים בגרף שכאשר נעבור דרכם – נחשב את הערך מחדש. עבור העצמים האחרים – נשתמש בערך שחושב ונשמר.

Adaptive Programming (14) כלים נוספים המאפשרים תכנות אדפטיבי: DemeterJ - סביבת עבודה המרחיבה את Java לצורך תמיכה בתכנות אדפטיבי. הטיול מוגדר בזמן הידור הקוד. DAJ – תוסף ל-AspectJ המאפשר תכנות אדפטיבי. הטיול מוגדר בזמן הידור הקוד. התחביר מאוד דומה לזה של DJ.

תכנות מונחה אספקטים ושיטות אדפטיביות (1) תכנות אדפטיבי הופיע מספר שנים לפני תכנות מונחה אספקטים. עם זאת, מתייחסים אל תכנות אדפטיבי כאל מקרה פרטי של תכנות מונחה אספקטים. תכנות אדפטיבי הוא תכנות מונחה אספקטים בו concern אחד לפחות מבוטא על ידי מושגים מתורת הגרפים.

תכנות מונחה אספקטים ושיטות אדפטיביות (2) גם תכנות מונחה האספקטים וגם תכנות אדפטיבי באים לטפל בבעיה זו על ידי הצגת יחידות מודולריות להפרדת ה-crosscutting concerns. תכנות מונחה אספקטים - "מודולריות טובה יותר עבור concerns". תכנות אדפטיבי - "concern-shyness" – הסתרת פעולת ה-concerns מ-concerns אחרים. תכנות אדפטיבי מתרכז ב-traversal-related concern וב- structural concern.

הרחבות ומידע נוסף http://underwar.livedns.co.il

מקורות Baris Aktemur (2004), "Aspect Oriented Programming" Bradford Appleton (1996), "Introducing Demeter and its Laws" Bradford Appleton (1995), "The Law of Demeter for Propagation Patterns" David Bock (2000), "The Paperboy, The Wallet, and The Law Of Demeter" Doug Kaye (2002), "Web Services Strategies" Karl Lieberherr, Doug Orleans (2000), "A Short Introduction to Adaptive Programming" Karl Lieberherr (2003), "AOSD and the Law of Demeter: Shyness in Programming" Karl Lieberherr, and Holland, I. (1989), "Assuring good style for object-oriented programs", IEEE Software, pp 38-48 Karl Lieberherr, Doug Orleans, Johan ovlinger (2001), "Aspect-Orient Programming with Adaptive Methods" Karl Lieberherr's (1997), "Connections between Demeter/Adaptive Programming and Aspect-Oriented Programming (AOP)" Karl Lieberherr (2001), "Coupling Mechanisms in Aspect-Oriented Software" Karl Lieberherr (2001), "Computer Science Adapts Techniques from Engineering and Mathematics" Karl Lieberherr (2004), "Controlling the Complexity of Software Designs" Karl Lieberherr, Doug Orleans (2001), "DJ: Dynamic Adaptive Programming in Java" Karl Lieberherr, Ian Holland (2002), "Preventive Maintenance of Object-Oriented Software" Karl Lieberherr, Boaz Patt-Shamir, Doug Orleans (2004), "Traversals of Object Structures: Specification and Efficient Implementation" wordIQ.com (2004), "Definition of Tree traversal" www.soaprpc.com (2004), "Web Service FAQ"