Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session 13 10. November 2008.

Similar presentations


Presentation on theme: "Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session 13 10. November 2008."— Presentation transcript:

1 Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session 13 10. November 2008

2 Chair of Software Engineering 2 This week  Inheritance:  Deferred classes & features  Redefinition, renaming  Observer Pattern  Genericity  Hint for Assignment

3 Chair of Software Engineering 3 Let's play Lego! BRICK LEGO_BRICK LEGO_BRICK_WITH_HOLE LEGO_BRICK_SLANTED Inheritance Relation of Lego bricks

4 Chair of Software Engineering 4 class BRICK deferred class BRICK feature -- Access width: INTEGER depth: INTEGER height: INTEGER color: COLOR volume: INTEGER deferred end

5 Chair of Software Engineering 5 Class LEGO_BRICK class LEGO_BRICK inherit BRICK feature -- Access number_of_nubs: INTEGER do Result :=... end volume: INTEGER do Result :=... end Inherit all features of class BRICK New feature, calculate all nubs Implementation of `volume'

6 Chair of Software Engineering 6 Class LEGO_BRICK_SLANTED Feature `volume' is going to be redefined (=changed). `volume' comes from LEGO_BRICK class LEGO_BRICK_SLANTED inherit LEGO_BRICK redefine volume end feature -- Access volume: INTEGER do Result :=... end end

7 Chair of Software Engineering 7 Class LEGO_BRICK_WITH_HOLE class LEGO_BRICK_WITH_HOLE inherit LEGO_BRICK redefine volume end feature -- Access volume: INTEGER do Result :=... end end Feature `volume' is going to be redefined (=changed). `volume' comes from LEGO_BRICK

8 Chair of Software Engineering 8 Notation volume++ Notation: Deferred * Effective + Redefinition ++ BRICK LEGO_BRICK LEGO_BRICK_WITH_HOLE LEGO_BRICK_SLANTED + + + volume* volume+ * volume++

9 Chair of Software Engineering 9 Deferred & effective Deferred  Deferred classes can possess deferred features  A class with at least one deferred feature must be declared as deferred  A deferred feature does not have an implementation yet  Attributes can't be deferred (because they don't need a feature body anyways) ‏  Deferred classes cannot be instantiated and hence cannot contain a create clause Effective  Effective classes do not possess deferred features (the “standard case”) ‏  Effective features have an implementation of their feature body (“do.. end”)

10 Chair of Software Engineering 10 Precursor If a feature was redefined, but you still wish to call the old one, use the precursor keyword volume: INTEGER do Result := Precursor -... end

11 Chair of Software Engineering 11 Types in the source code Expressions have a static type For attributes and functions it is denoted after the declaration ':' name: STRING list: LINKED_LIST [INTEGER] A class is the static part of a program, which contains only static types

12 Chair of Software Engineering 12 Type of an object  The type of an object is set upon creation local lego: LEGO_BRICK brick: BRICK create {LEGO_BRICK} brick-- explicit -- same as --create lego; brick := lego create lego-- implicit  Objects belong to the dynamic part of a program - >dynamic types

13 Chair of Software Engineering 13 Dynamic types local a_bag: SOME_BAG do create {MONEY_BAG} a_bag.put (10) ‏ What is the static type of `a_bag'? What's the dynamic type of the object denoted by `a_bag'? Hands-On SOME_BAG MONEY_BAG

14 Chair of Software Engineering The Observer Pattern PUBLISHER * GUI_CLASS subscribed attach detach trigger OBSERVER * APP_CLASS Deferred (abstract)‏ Effective (implemented)‏ * + Inherits from Client (uses)‏ update* subscribe update+

15 Chair of Software Engineering Observer pattern Publisher keeps a list of observers: subscribed: LINKED_LIST [OBSERVER] To register itself, an observer may execute subscribe (some_publisher) ‏ where subscribe is defined in OBSERVER: subscribe (p: PUBLISHER) ‏ -- Make current object observe p. require publisher_exists: p /= Void do p. attach (Current) ‏ end

16 Chair of Software Engineering Attaching an observer In class PUBLISHER: attach (s: OBSERVER) ‏ -- Register s as subscriber to current publisher. require subscriber_exists: s /= Void do subscribed. extend (s) ‏ end The invariant of PUBLISHER includes the clause subscribed /= Void (List subscribed is created by creation procedures of PUBLISHER) ‏

17 Chair of Software Engineering trigger -- Ask all observers to -- react to current event. do from subscribed.start until subscribed.after loop subscribed.item. subscribed.forth end end Each descendant of OBSERVER defines its own version of update Triggering an event update PUBLISHER * GUI_CLASS attach detach OBSERVER * APP_CLASS update* update+

18 Chair of Software Engineering Changing the implementation of the pattern How would the implementation of the Observer pattern change if:  each observer subscribes not itself, but one of its routines to the publisher  when the event occurs, the publisher must call these subscribed routines with information about the event Hands-On

19 Chair of Software Engineering Exercise: a news agency  Consider you must create an application which allows a news agency to dispatch news to various papers, radio and TV stations, etc.  How would you design and implement this application? Hands-On

20 Chair of Software Engineering Genericity But what if a certain box should only contain Lego bricks, i.e. all kinds of them (slanted, 2x4, etc.)? class BOX [G] feature wipe_out is... put (v: G) is... end

21 Chair of Software Engineering For Assignment 7  Vector Geometry 21

22 Chair of Software Engineering End exercise session 15


Download ppt "Chair of Software Engineering 1 Introduction to Programming Bertrand Meyer Exercise Session 13 10. November 2008."

Similar presentations


Ads by Google