 Client, Supplier ומה שביניהם ( ADT!).  שאלה 1: יצירת ADT עבור מעגל במישור נניח שלקוח מעוניין בפעולות הבאות : הזזת מעגל וחישוב שטח מעגל. הספק יספק ללקוח.

Slides:



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

ממיבחניםC שאלות ++.
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
1 Formal Specifications for Complex Systems (236368) Tutorial #4 Refinement in Z: data refinement; operations refinement; their combinations.
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 7. Data directed programming Section 2.4, pages ,2.5.2 pages (but with a different example)
מתמטיקה בדידה תרגול 3.
Inverse kinematics (Craig ch.4) ב"ה. Pieper’s solution נתבונן ברובוט עם 6 מפרקי סיבוב כאשר שלושת הצירים של המפרקים האחרונים נחתכים. נקודת החיתוך נתונה.
חורף - תשס " ג DBMS, Design1 שימור תלויות אינטואיציה : כל תלות פונקציונלית שהתקיימה בסכמה המקורית מתקיימת גם בסכמה המפורקת. מטרה : כאשר מעדכנים.
שאלות חזרה לבחינה. שאלה דיסקים אופטיים מסוג WORM (write-once-read-many) משמשים חברות לצורך איחסון כמויות גדולות של מידע באופן קבוע ומבלי שניתן לשנותו.
Map-Reduce Input: a collection of scientific articles on different topics, each marked with a field of science –Mathematics, Computer Science, Biology,
1 Formal Specifications for Complex Systems (236368) Tutorial #5 Refinement in Z: data refinement; operations refinement; their combinations.
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
מסדי נתונים תשס " ג 1 תכנון סכמות – אלגוריתם פירוק לתבניות בצורת BCNF מסדי נתונים.
שאילת שאלות שאלת חקר המפתח למנעול 1. שאילת שאלות – שאלת חקר מה ניתן לשנות ? :  בתנאים : טמפ ' או לחץ או הכלים, או הציוד  בחומרים : איכות או כמות או.
Formal Specifications for Complex Systems (236368) Tutorial #6 appendix Statecharts vs. Raphsody 7 (theory vs. practice)
תורת הקבוצות חלק ב'. קבוצה בת מניה הגדרה: קבוצה אינסופית X היא ניתנת למניה אם יש התאמה חד-חד ערכית בין X לבין .
1 Formal Specifications for Complex Systems (236368) Tutorial #1 Course site : T.A. :Emilia Katz.
מערכות הפעלה ( אביב 2009) חגית עטיה ©1 מערכת קבצים log-structured  ה log הוא העותק היחיד של הנתונים  כאשר משנים בלוק (data, header) פשוט כותבים את הבלוק.
מבני בקרה לולאות. שאלה #1 שאלה ב' – תכתוב תוכנה הכותבת את תפריט הבאה Type 1 to find the area of a circle Type 2 to find the circumference of a circle.
מבוא מורחב - שיעור 12 1 Lecture 12 Data directed programming Message passing dotted-tail notation & apply Section 2.4, pages ,2.5.2 pages.
הפקולטה למדעי המחשב אוטומטים ושפות פורמליות (236353)
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 10. Data directed programming Message passing Section 2.4, pages ,2.5.2 pages (but with.
מבוא מורחב למדעי המחשב בשפת Scheme תרגול 7. Outline Symbols Data Directed Programming, Message Passing.
אלכסנדר ברנגולץ דואר אלקטרוני: אלכסנדר ברנגולץ דואר אלקטרוני: פעולות מורפולוגיות.
משטר דינמי – © Dima Elenbogen :14. הגדרת cd ו -pd cd - הזמן שעובר בין הרגע שראשון אותות הכניסה יוצא מתחום לוגי עד אשר אות המוצא יוצא מתחום.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
עקרון ההכלה וההדחה.
מבוא למדעי המחשב תרגול 3 שעת קבלה : יום שני 11:00-12:00 דוא " ל :
מבוא למדעי המחשב, סמסטר א ', תשע " א תרגול מס ' 1 נושאים  הכרת הקורס  פסאודו - קוד / אלגוריתם 1.
Markov Decision Processes (MDP) תומר באום Based on ch. 14 in “Probabilistic Robotics” By Thrun et al. ב"הב"ה.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
R. Bar-Yehuda © 1 Graph theory – תורת הגרפים 4. ORDERED TREES 4.1 UNIQUELY DECIPHERABLE CODES מבוסס על הספר : S. Even,
PPL Pairs, lists and data abstraction. Data Abstraction? An interface: separate implementation from usage Think of the Map interface in Java: we know.
PPL Pairs, lists and data abstraction. Compound Data Until now: atomic, unrelated entities Now: organized into structures Why? – Better conceptual level.
פיתוח מערכות מידע 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.
COP4020 Programming Languages Functional Programming Prof. Xin Yuan.
1 מבוא למדעי המחשב הרצאה 21: Queue, Iterator & Iterable.
Practice session 3.  תחביר ממשי ( קונקרטי ) ותחביר מופשט ( אבסטרקטי )  שיטות חישוב : Applicative & Normal Evaluation.
Practical Session 6. NASM Preprocessor NASM contains a powerful macro processor, which supports conditional assembly multi-level file inclusion two forms.
Practice session 6 Sequence Operations Partial Evaluation Lazy Lists.
Practice session 5 טיפוסים מורכבים Abstract Data Types הכנה לעבודה 3.
1 Subt. model interpreter: Introduction Abstract Syntax Parser Abstract Syntax Parser Derived Expressions Core Test Data Structures Utils (a racket lib)
Data Structures in Scheme Building data structures: Java class Circle { private double center_x, center_y, radius; Circle(double x, double y, double r)
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:
CS61A Lecture Colleen Lewis. Clicker poll How do you think the midterm compared to previous midterms online? A)Harder B)A little harder.
תרגול 7: מנשקים, פולימורפיזם ועוד
Additional Scheme examples
PPL Lecture 3 Slides by Yaron Gonen,
Computer Architecture and Assembly Language
Formal Specifications for Complex Systems (236368) Tutorial #1
תרגול 7: מנשקים, פולימורפיזם ועוד
SQL בסיסי – הגדרה אינדוקטיבית
טרנזיסטור כמתג דו מצבי ממסר - RELAY הפעלה רציפה , PWM
ממשקים - interfaces איך לאפשר "הורשה מרובה".
תרגול מס' 6 מחלקות, עצמים, וקצת חוזים
בעיות נוספות ב-NPC.
Marina Kogan Sadetsky –
הרצאה 21: Queue, Iterator & Iterable
ניתוח מערכות מידע תכנות ב C#
תזכורת על מה דיברנו שיעור שעבר? בנינו אתר אינטרנט עם כותרות
מבוא לתכנות מונחה עצמים Object Oriented Programming
תוכנה 1 תרגול 13 – סיכום.
מחסנית ותור Stacks and Queues.
Computer Programming תרגול 3 Summer 2016
Engineering Programming A
Computer Architecture and Assembly Language
Chapter 4 Data and Behavior Abstraction
Presentation transcript:

 Client, Supplier ומה שביניהם ( ADT!)

 שאלה 1: יצירת ADT עבור מעגל במישור נניח שלקוח מעוניין בפעולות הבאות : הזזת מעגל וחישוב שטח מעגל. הספק יספק ללקוח את ה -ADT הבא עבור מעגל במישור ( ממשק ואינווריאנטות ). הממשק : Signature: make-circle(x-center, y-center, radius) Purpose: constructs a circle. Type: [Number * Number * Number -> Circle] Pre-conditions: radius >= 0 Signature: get-x-center(circle) Purpose: returns the x coordinate of the circle's center. Type: [Circle -> Number] Signature: get-y-center(circle) Purpose: returns the y coordinate of the circle's center. Type: [Circle -> Number] Signature: circle? (x) Purpose: returns true iff x is a circle. Type: [T -> Boolean] Signature: circle-equal?(circle1, circle2) Purpose: Compares two circles. Type: [Circle * Circle -> Boolean] *Signature: small-enough?(circle, edge) Purpose: Check whether the circle can fit into a square of a given edge length. Type: [Circle * Number -> Boolean]

1. לכל x,y,r : get-x-center (make-circle (x, y, r)) = x get-y-center (make-circle (x, y, r)) = y get-radius (make-circle (x, y, r)) = r 2. לכל e : circle?(e) ≡ ∃x, y, r: make-circle (x, y, r) = e 3. לכל e1, e2 : circle-equal(e1, e2) ≡ get-x-center(e1) = get-x-center(e2) & get-y-center(e1) = get-y-center(e2) & get- radius(e1) = get- radius(e2) 4. לכל x,y,r,a : small-enough(make-circle(x, y, r), a) ≡ 2r≤a  שאלה 1: יצירת ADT עבור מעגל במישור נניח שלקוח מעוניין בפעולות הבאות : הזזת מעגל, חישוב שטח מעגל. הספק יספק ללקוח את ה -ADT הבא עבור מעגל במישור ( ממשק ואינווריאנטות ). האינווריאנטות :

 שאלה 1: יצירת ADT עבור מעגל במישור – צד הלקוח Signature: move-circle(circle, x, y) Purpose: return a circle, with a center point that is transposed by (x, y) (we get a new circle, in Scheme we can't change the existing one) Type: [Circle * Number * Number -> Circle] (define move-circle (lambda (circle x y) (make-circle (+ (get-x-center circle) x) (+ (get-y-center circle) y) (get-radius circle)))) Signature: area-circle(circle) Purpose: Calculate the area of circle Type: [Circle -> Number] (define area-circle (lambda (circle) (* pi (sqr (get-radius circle)))))

 שאלה 1: יצירת ADT עבור מעגל במישור – צד הספק נייצג את המעגל באמצעות זוגות, בצורה הבאה : התווית circle מאפשרת לנו להבדיל מעגלים מ " סתם " זוגות אחרים. השימוש בתוויות מקובל במיוחד בשפות עם בדיקת טיפוסים דינאמית : לכל ערך מצמידים תווית טיפוס, ואז בודקים התאמה בזמן ריצה. לכן נוסיף ADT עבור tagging...

 ADT עבור tagging: ממשק : Signature: attach-tag(x, tag) Purpose: Construct a tagged-data value Type: [T * Symbol -> Tagged-data(T)] Signature: get-tag(tagged) Purpose: Select the tag from a tagged-data value Type: [Tagged-data(T) -> Symbol] Signature: get-content(tagged) Purpose: Select the data from a tagged-data value Type: [Tagged-data(T) -> T] Signature: tagged-data?(datum) Purpose: Identify tagged-data values Type: [T -> Boolean] Signature: tagged-by?(tagged, tag) Purpose: Identify tagged-data values Type: [T * Symbol -> Boolean]

 ADT עבור tagging: מימוש : (define attach-tag (lambda (x tag) (cons tag x))) (define get-tag (lambda (tagged) (car tagged))) (define get-content (lambda (tagged) (cdr tagged))) (define tagged-data? (lambda (datum) (and (pair? datum) (symbol? (car datum))))) (define tagged-by? (lambda (x tag) (and (tagged-data? x) (eq? (get-tag x) tag))))

 שאלה 1: יצירת ADT עבור מעגל במישור – צד הספק - מימוש Signature: make-circle(x-center, y-center, radius) Type: [Number * Number * Number -> Tagged-data(Pair(Number, Pair(Number, Number)))] (define make-circle (lambda (x-center y-center radius) (attach-tag (cons radius (cons x-center y-center)) 'circle))) בתוכניות הלקוח הטיפוס מוצהר באמצעות ADT מעגל, אבל המימוש של המעגל מוצהר רק באמצעות טיפוסים שמוגדרים ב -Scheme, או ב -ADT אחרים.

 שאלה 1: יצירת ADT עבור מעגל במישור – צד הספק - מימוש Signature: get-x-center(circle), get-y-center(circle), get-radius(circle) Type: [Tagged-data(Pair(Number, Pair(Number, Number))) -> Number] Pre-condition: (circle? circle) = #t (define get-x-center (lambda (circle) (cadr (get-content circle)))) (define get-y-center (lambda (circle) (cddr (get-content circle)))) (define get-radius (lambda (circle) (car (get-content circle))))

 שאלה 1: יצירת ADT עבור מעגל במישור – צד הספק - מימוש Signature: circle?(object) Type: [T -> Boolean] (define circle? (lambda (obj) (tagged-by? obj 'circle))) Signature: small-enough?(circle, edge) Type: [Tagged-data(Pair(Number, Pair(Number, Number))) * Number -> Boolean] Pre-condition: (circle? circle) = #t (define small-enough? (lambda (circle edge) (<= ((* 2 (get-radius circle)) edge)))) שימו לב כי במסגרת מימוש הפרדיקטים לא השתמשנו בפרטי המימוש של המעגל ( הזוגות ), אלא רק בסלקטורים. זה נותן לנו אפשרות לשנות את המימוש של המעגל מבלי לשכתב את הפרדיקטים.

 שאלה 1: יצירת ADT עבור מעגל במישור – צד הספק - מימוש Signature: circle-equal?(circle1, circle2) Type: [Tagged-data(Pair(Number, Pair(Number, Number)) * Tagged-data(Pair(Number, Pair(Number, Number))) -> Boolean] Pre-condition: (and (circle? circle1) (circle? circle2)) = #t (define circle-equal? (lambda (circle1 circle2) (and (= (get-x-center circle1) (get-x-center circle2)) (= (get-y-center circle1) (get-y-center circle2)) (= (get-radius circle1) (get-radius circle2))))) שימו לב כי במסגרת מימוש הפרדיקטים לא השתמשנו בפרטי המימוש של המעגל ( הזוגות ), אלא רק בסלקטורים. זה נותן לנו אפשרות לשנות את המימוש של המעגל מבלי לשכתב את הפרדיקטים.

 שאלה 1: יצירת ADT עבור מעגל במישור – צד הספק - הוכחות הוכחת האינווריאנטות של ה -ADT: הפרוצדורות שכתבנו חייבות למלא את הממשק ולכבד את האינווריאנטות של ה -ADT כדי שנאשר את השימוש בו. נוכיח, לדוגמה, את האינווריאנטה השלישית : get-radius(make-circle(x, y, r)) = r צריך להוכיח כי : For all x, y, r: applicative-eval[ (get-radius (make-circle x y r)) ] ==>* r

(define make-circle (lambda (x-center y-center radius) (attach-tag (cons radius (cons x-center y-center)) 'circle))) (define get-x-center (lambda (circle) (cadr (get-content circle)))) (define get-y-center (lambda (circle) (cddr (get-content circle)))) (define get-radius (lambda (circle) (car (get-content circle)))) (define circle? (lambda (circle) (tagged-by? circle 'circle)))

 שאלה 2: יצירת ADT עבור מעגל במישור – צד הספק – מימוש נוסף  ניתן לממש ערך באמצעות פרוצדורה המאחסנת את המידע של הערך.  פעולות שליפה יעשו ע " י הפניית בקשות messages לפרוצדורה.

 שאלה 2: יצירת ADT עבור מעגל במישור – צד הספק – מימוש חרוץ Signature: make-circle(x-center, y-center, radius) Type: [Number * Number * Number -> Tagged-data([Symbol -> Number])] (define make-circle (lambda (x-center y-center radius) (attach-tag (lambda (m) (cond ((eq? m 'x) x-center) ((eq? m 'y) y-center) (else radius))) 'circle))) Signature: get-x-center(circle), get-y-center(circle), get-radius(circle) Type: [Tagged-data([Symbol -> Number] ) -> Number] (define get-x-center (lambda (circle) ((get-content circle) 'x))) (define get-y-center (lambda (circle) ((get-content circle) 'y))) (define get-radius (lambda (circle) ((get-content circle) 'r))) השאר ללא שינוי – למה ?

 שאלה 2: יצירת ADT עבור מעגל במישור – צד הספק – הוכחות גם עבור המימוש החדש צריך להוכיח שמתקיימות האינווריאנטות ( ראו תרגול באתר הקורס )

 שאלה 3: יצירת ADT עבור מעגל במישור – צד הספק – מימוש עצל במימוש הזה הבנאי עוטף את המידע עם פרוצדורה אשר מצפה כפרמטר לפרוצדורה אחרת, שתופעל על המידע. Signature: make-circle(x-center, y-center, radius) Type: [Number * Number * Number -> Tagged-data([[Number * Number * Number -> T] -> T])] (define make-circle (lambda (x-center y-center radius) (attach-tag (lambda(sel) (sel x-center y-center radius)) 'circle))) Signature: get-x-center(circle), get-y-center(circle), get-radius(circle) Type: [Tagged-data([[Number * Number * Number->T] ->T]) -> Number] (define get-x-center (lambda (circle) ((get-content circle) (lambda (x y r) x)))) (define get-y-center (lambda (circle) ((get-content circle) (lambda (x y r) y))))

 שאלה 3: יצירת ADT עבור מעגל במישור – צד הספק – הוכחות גם עבור המימוש החדש צריך להוכיח שמתקיימות האינווריאנטות ( ראו תרגול באתר הקורס )

 שאלה 3: יצירת ADT עבור מעגל במישור – צד הספק – מימוש  הבדלים בין מימוש חרוץ למימוש עצל : ◦ במימוש העצל כל הלוגיקה נמצאת בסלקטורים, במימוש החרוץ כל הלוגיקה נמצאת בבנאי. ◦ אפשרות להרחיב את המימוש ע " י פרוצדורות נוספות בממשק : במימוש עצל צריך להוסיף פרוצדורה, במימוש חרוץ גם להוסיף פרוצדורה וגם לשכתב את הבנאי. ◦ המימוש החרוץ יקשה עלינו במקרה של יצירת מופעי מעגל רבים : אם למשל נוצרו אלפי מעגלים, שינוי כלשהו בלוגיקה ידרוש ליצור את כל המופעים שוב. לעומת זאת, המימוש העצל יאפשר להמשיך לעבוד עם אותם מופעים.