1 תרגול 11: Design Patterns ומחלקות פנימיות 1 תוכנה 1.

Slides:



Advertisements
Similar presentations
Transparency No. 1 Java Collection API : Built-in Data Structures for Java.
Advertisements

Object Oriented 33 MCSD DORON AMIR
תוכנה 1 סמסטר א ' תשע " ב תרגול מס ' 7 * מנשקים, דיאגרמות וביטים * לא בהכרח בסדר הזה.
Chapter 6 The Collections API. Simple Container/ Iterator Simple Container Shape [] v = new Shape[10]; Simple Iterator For( int i=0 ; i< v.length ; i++)
בתרגול הקודם הורשה: –ניתן להרחיב רק מחלקה אחת –כל מה שלא private – עובר בהורשה –המילה השמורה super –יצירת היררכיה –Object היא שורש ההיררכיה –דריסה אופרטור.
INTERFACES IN JAVA 1.Java Does not support Multiple Inheritance directly. Multiple inheritance can be achieved in java by the use of interfaces. 2.We need.
האוניברסיטה העברית בירושלים
CSC 205 – Java Programming II Lecture 25 March 8, 2002.
1 תוכנה 1 תרגול 14 – סיכום. 2 קצת על מנשקים מנשק יכול להרחיב יותר ממנשק אחד שירותים במנשק הם תמיד מופשטים וציבוריים public interface MyInterface { public.
©Silberschatz, Korth and Sudarshan4.1Database System Concepts סכימה לדוגמא.
CSE 143 Lecture 22: Advanced List Implementation (ADTs; interfaces; abstract classes; inner classes; generics; iterators)
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב'
תרגול חזרה. מבנה האובייקט תאר את מבנה האובייקט כולל מבנה טבלאות הפונקציות הוירטואליות עבור התכנית הבאה struct A { int x; virtual void a() {}; }; struct.
תכנות תרגול 6 שבוע : תרגיל שורש של מספר מחושב לפי הסדרה הבאה : root 0 = 1 root n = root n-1 + a / root n-1 2 כאשר האיבר ה n של הסדרה הוא קירוב.
מערכים עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר עד היום כדי לייצג 20 סטודנטים נאלצנו להגדיר int grade1, grade2, …, grade20; int grade1, grade2, …, grade20;
תכנות מונחה עצמים Object Oriented Programming (OOP) אתגר מחזור ב' Templates תבניות.
© המרכז להוראת המדעים האוניברסיטה העברית בירושלים
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.
אתחול עצמים. אתחולים ובנאים יצירת מופע חדש של עצם כוללת: הקצאת זכרון, אתחול, הפעלת בנאים והשמה לשדות במסגרת ריצת הבנאי נקראים גם הבנאי/ם של מחלקת הבסיס.
תוכנה 1 תבנית העיצוב Observer 1 שחר מעוז בית הספר למדעי המחשב אוניברסיטת תל אביב.
COMP 103 Iterators and Iterable. RECAP  Maps and Queues TODAY  Queue Methods  Iterator and Iterable 2 RECAP-TODAY.
Observer Design Pattern Source: Design Patterns – Elements of Reusable Object- Oriented Software; Gamma, et. al.
CSC 313 – Advanced Programming Topics. Observer Pattern Intent  Efficiently perform 1-to-many communication  Easy to respond dynamically when event(s)
Copyright © 2002, Systems and Computer Engineering, Carleton University Patterns.ppt * Object-Oriented Software Development Part 11.
Nested References 2 inner reference data types Classes-Interfaces.
Recitation 4 Abstract classes, Interfaces. A Little More Geometry! Abstract Classes Shape x ____ y ____ Triangle area() base____ height ____ Circle area()
פיתוח מערכות מידע Class diagrams Aggregation, Composition and Generalization.
CS-2852 Data Structures LECTURE 7A Andrew J. Wozniewicz Image copyright © 2010 andyjphoto.com.
Methods public class Demonstrate { public static void main (String argv[]) { public static void main (String argv[]) { int script = 6, acting = 9, directing.
Information and Computer Sciences University of Hawaii, Manoa
CSC 313 – Advanced Programming Topics. Observer Pattern in Java  Java ♥ Observer Pattern & uses everywhere  Find pattern in JButton & ActionListener.
CSE 143 Lecture 24 Advanced collection classes (ADTs; abstract classes; inner classes; generics; iterators) read 11.1, 9.6, , slides.
1 Collection, Iterable, and Iterator Interfaces The Collection Interface and its Hierarchy The Iterable and Iterator Interfaces For-each Loops with Iterable.
OBSERVER DESIGN PATTERN. Behavioral Patterns  Behavioral patterns are those patterns that are most specifically concerned with communication between.
1 המרכז להוראת המדעים © האוניברסיטה העברית בירושלים פולימורפיזם מתקדם ממשקים בג ' אווה 1.
Computer Science 209 Software Development Inheritance and Composition.
List Interface and Linked List Mrs. Furman March 25, 2010.
Copyright (c) Systems and Computer Engineering, Carleton University * Object-Oriented Software Development Unit 13 The Collections Framework.
IMPLEMENTING ARRAYLIST COMP 103. RECAP  Comparator and Comparable  Brief look at Exceptions TODAY  Abstract Classes - but note that the details are.
Iteration Abstraction SWE Software Construction Fall 2009.
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 CMPSCI 187 Computer Science 187 Introduction to Introduction to Programming with Data Structures Lecture 9 Doubly Linked Lists and Ordered Lists Lecture.
עקרונות תכנות מונחה עצמים תרגול 11: OOP in C++. Outline  Where do the objects live ?  Inheritance  Slicing  Overriding vs Shadowing.
מחרוזות – הטיפוס String
האוניברסיטה העברית בירושלים
Object Oriented Programming
Object Oriented Programming
Operators Overloading
Object Oriented Programming
מחלקות classes.
תוכנה 1 בשפת Java שיעור מספר 7: מבנים מקושרים
תוכנה 1 תרגול 13 – סיכום.
תוכנה 1 תרגול 13 – סיכום.
תכנות מונחה עצמים.
תכנות מכוון עצמים ושפת JAVA
Static and enum קרן כליף.
תוכנה 1 תרגול מספר 11: Static vs. Dynamic Binding
תוכנה 1 בשפת Java שיעור מספר 6: מקושרים
null, true, and false are also reserved.
ניתוח מערכות מידע תכנות ב C#
CSE 143 Lecture 27: Advanced List Implementation
Lecture 26: Advanced List Implementation
סוגי משתנים קרן כליף.
מבוא לתכנות מונחה עצמים Object Oriented Programming
תוכנה 1 תרגול 13 – סיכום.
Abstract Class As per dictionary, abstraction is the quality of dealing with ideas rather than events. For example, when you consider the case of ,
תוכנה 1 תרגול 13 – סיכום.
פולימורפיזם מתקדם ממשקים בC# עריכה ועיצוב: קרן הרדי
CSE 143 Lecture 21 Advanced List Implementation
Presentation transcript:

1 תרגול 11: Design Patterns ומחלקות פנימיות 1 תוכנה 1

2 Design Patterns A general reusable solution to recurring design problems. Not a recipe A higher level language for design Factory, Singleton, Observer and not “this class inherits from that other class” Design Patterns: Elements of Reusable Object-Oriented Software Lots of information online

3 Different Views Data a=50 b=10 C=20

4 Different Views (cont.) When the data change all views should change Views dependant on data Views may vary, more added in the future Data store implementation may changes We want: Separate the data aspect from the view one Notify views upon change in data

5 The Observer Design Pattern A.k.a publish/subscribe

6 Observer and Java Java provides an Observer interface and an Observable classObserver Observable Subclass Observable to implement your own subject registration and removal of observers notification Implement Observer Other uses of this pattern throughout the JDK

Observer 7

Observable 8

9 Observable and Observer Observable O1O1 Observer O2O2 O3O3 addObserver change O1O1 O2O2 notify O3O3

10 Example Code - Subject public class IntegerDataBag extends Observable implements Iterable { private ArrayList list = new ArrayList (); public void add( Integer i ) { list.add(i); setChanged(); notifyObservers(); } public Iterator iterator() { return list.iterator(); } public Integer remove( int index ) { if( index < list.size() ) { Integer i = list.remove( index ); setChanged(); notifyObservers(); return i; } return null; }

11 Example Code - Observer public class IntegerAdder implements Observer { private IntegerDataBag bag; public IntegerAdder( IntegerDataBag bag ) { this.bag = bag; bag.addObserver( this ); } public void update(Observable o, Object arg) { if (o == bag) { println("The contents of the IntegerDataBag have changed."); int sum = 0; for (Integer i : bag) { sum += i; } println("The new sum of the integers is: " + sum); }... }

12 מחלקות מקוננות Nested Classes

מחלקה מקוננת מחלקה שמוגדרת בתוך מחלקה אחרת 1. סטטית (static member) 2. לא סטטית (nonstatic member) 3. אנונימית (anonymous) 4. מקומית (local) 13 Inner classes class Outer { static class NestedButNotInner {... } class Inner {... }

בשביל מה זה טוב קיבוץ לוגי אם עושים שימוש בטיפוס רק בהקשר של טיפוס מסוים נטמיע את הטיפוס כדי לשמר את הקשר הלוגי הכמסה מוגברת על ידי הטמעת טיפוס אחד באחר אנו חושפים את המידע הפרטי רק לטיפוס המוטמע ולא לכולם קריאות מיקום הגדרת טיפוס בסמוך למקום השימוש בו 14

תכונות משותפות למחלקה מקוננת יש גישה לשדות הפרטיים של המחלקה העוטפת ולהפך הנראות של המחלקה היא עבור "צד שלישי" אלו מחלקות (כמעט) רגילות לכל דבר ועניין יכולות להיות אבסטרקטיות, לממש מנשקים, לרשת ממחלקות אחרות וכדומה 15

Static Member Class מחלקה רגילה ש"במקרה" מוגדרת בתוך מחלקה אחרת החוקים החלים על איברים סטטיים אחרים חלים גם על מחלקות סטטיות גישה לשדות / פונקציות סטטיים בלבד גישה לאיברים לא סטטיים רק בעזרת הפניה לאובייקט גישה לטיפוס בעזרת שם המחלקה העוטפת OuterClass.StaticNestedClass יצירת אובייקט OuterClass.StaticNestedClass nested = new OuterClass.StaticNestedClass(); 16

AbstractMap 17 public abstract class AbstractMap implements Map { public static class SimpleEntry implements Entry, java.io.Serializable { private final K key; private V value;... }... }

Non-static Member Class כל מופע של המחלקה הפנימית משויך למופע של המחלקה החיצונית השיוך מבוצע בזמן יצירת האובייקט ואינו ניתן לשינוי באובייקט הפנימי קיימת הפניה לאובייקט החיצוני (qualified this) 18 מופע של המחלקה הפנימית מופע של המחלקה החיצונית

19 House Example public class House { private String address; public class Room { // implicit reference to a House private double width; private double height; public String toString(){ return "Room inside: " + address; } גישה למשתנה פרטי לא סטטי

20 Height of House Height of Room Same as this.height public class House { private String address; private double height; public class Room { // implicit reference to a House private double height; public String toString(){ return "Room height: " + height + " House height: " + House.this.height; } Inner Classes

AbstractList public abstract class AbstractList extends AbstractCollection implements List { public Iterator iterator() { return new Itr(); } private class Itr implements Iterator {... } private class ListItr extends Itr implements ListIterator {... } 21

22 יצירת מופעים כאשר המחלקה העוטפת יוצרת מופע של עצם מטיפוס המחלקה הפנימית אזי העצם נוצר בהקשר של העצם היוצר כאשר עצם מטיפוס המחלקה הפנימית נוצר מחוץ למחלקה העוטפת, יש צורך בתחביר מיוחד outerObject.new InnerClassConstructor

מחלקות אנונימיות מחלקה ללא שם הגדרה ויצירת מופע בנקודת השימוש מגבלות: חייבת לרשת מטיפוס קיים (מנשק או מחלקה) לא ניתן להגדיר איברים סטטים, לא ניתן להשתמש בהקשר שדורש שם (instanceof), לא ניתן לרשת ממספר טיפוסים, לקוחות מוגבלים לממשק של טיפוס האב מחלקה אנונימית צריכה להיות קצרה כדי לא לפגוע בקריאות של הקוד 23

דוגמאות שימוש Function object (functor) מיון מחרוזות לפי אורך מימוש איטרטור 24 Arrays.sort(stringArray, new Comparator () { public int compare(String s1, String s2) { return s1.length() - s2.length(); } }); public Iterator iterator() { return new Iterator () { boolean hasNext() {...} E next() {...} void remove() {...} }; }

המרה ממערך לרשימה static List intArrayAsList(final int[] a) { if (a == null) throw new IllegalArgumentException(); return new AbstractList () { public Integer get(int i) { return a[i]; } public Integer set(int i, Integer val) { int oldVal = a[i]; a[i] = val; return oldVal; } public int size() { return a.length; } }; } 25 גישה למשתנים מקומיים שהוגדרו final

26 מחלקות מקומיות מוגדרות בתוך מתודות יש להם שם וניתן להשתמש בהם מספר פעמים אובייקט עוטף רק אם הוגדרו בהקשר לא סטטי; לא ניתן להגדיר משתני סטטיים המחלקה הפנימית תוכל להשתמש גם במשתנים מקומיים של המתודה אבל רק אם הם הוגדרו כ- final

המרה ממערך לרשימה static List intArrayAsList(final int[] a) { if (a == null) throw new IllegalArgumentException(); class IntegerList extends AbstractList { public Integer get(int i) { return a[i]; } public Integer set(int i, Integer val) { int oldVal = a[i]; a[i] = val; return oldVal; } public int size() { return a.length; } return new IntegerList(); } 27