Download presentation
Presentation is loading. Please wait.
Published byStella Wigg Modified over 9 years ago
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
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.