1 / 29

Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer. Lecture 9: Abstraction. Topics for today. Abstraction, especially functional abstraction The notion of routine The final word on features: all feature categories The Uniform Access principle

qiana
Download Presentation

Einführung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Einführung in die ProgrammierungIntroduction to ProgrammingProf. Dr. Bertrand Meyer Lecture 9: Abstraction

  2. Topics for today Abstraction, especially functional abstraction The notion of routine The final word on features: all feature categories The Uniform Access principle Abstraction and client privileges Information hiding

  3. Routine: algorithm abstraction To abstract is to capture the essence behind the details and the specifics Implies giving a name to the result In programming: • Data abstraction: class • Algorithm (operational) abstraction: routine

  4. A routine is one of the two kinds of feature... ... the other is attribute We have encountered lots of routines already, without the name.

  5. A routine r (arg: TYPE; ...) is -- Header comment require Precondition (boolean expression) do Body (instructions) ensure Postcondition (boolean expression) end

  6. create_fancy_lineis -- Create line and fill -- stations. do -- To be completed -- BM, 26 Oct 08 end Uses of routines Bottom-up: capture existing algorithm, possibly for reuse Top-down: placeholder routines — attractive alternative to pseudocode. build_a_lineis -- Build imaginary line. do Paris.display Metro.highlight create_fancy_line end

  7. Two kinds of routine Procedure: doesn’t return a result • Yields a command • Calls are instructions Function: returns a resultf (arg: TYPE; ...): RESULT_TYPEis ... (The rest as before) ... • Yields a query • Calls are expressions

  8. Features: the full story A class is characterized by its features Each feature is an operation on the corresponding objects: query or command Features are grouped into categories for readability Class clauses: • Indexing • Inheritance • Creation • Feature (any number) • Invariant Anatomy of a class: • Demo

  9. Features: the full story Client view(specification) Internal view (implementation) Command Procedure Routine No result Computation Feature Feature Feature Feature Memory Returns result Function Computation Query Memory Attribute

  10. Uniform access principle Itdoesn‘t matter totheclientwhetheryoulookuporcompute A call such as your_account.balance could use an attribute or a function

  11. Uniform Access: an example balance = list_of_deposits.total – list_of_withdrawals.total list_of_deposits (A1) list_of_withdrawals balance list_of_deposits (A2) list_of_withdrawals

  12. Uniform Access Principle Expressed more technically: • Features should be accessible to clients the same way • whether implemented by storage or by computation

  13. An objecthas aninterface set x y set_x set_y

  14. An objecthas animplementation set first x y set_x count set_y

  15. Information hiding set x y set_x set_y

  16. What clients may do class METRO_STATION feature x, y: REAL -- Coordinates of metro station size: REAL -- Size of bounding square upper_left: POSITION -- Upper-left position of bounding square adjust_positionsis -- Set positions of bounding square do upper_left. set (x – size/2, y + size/2) ... end end

  17. What clients may not do class METRO_STATION feature x, x, y: REAL -- Coordinates of metro station size: REAL -- Size of bounding square upper_left: POSITION -- Upper-left position of bounding square-- Upperposition of bounding square adjust_positionsis • ---- Set positions of bounding square do upper_left. x := 3 ... end end NOT PERMITTED!

  18. Use procedures: upper_left.set(3, upper_left.y) upper_left.set_x(3) upper_left.move(3, h)

  19. If class A has an attribute att: SOME_TYPE, what may a client class C with a : A do with ? att a att C A a : A Possible client privileges The attribute may be: Read,restricted write Read-only Secret Full write Modify through “set_...” procedure Example: modify x with move in POINT

  20. If class A has an attribute att : SOME_TYPE, what may a client class C with a : A do with ? a a a att att att C A a : A att Modify through Modify through a some_procedure a set_att (v) invalid permitted inC(for access) Possible client privileges The attribute may be: Read,restricted write Read-only Secret Full write

  21. If class A has an attribute att : SOME_TYPE, what may a client class C with a : A do with ? att a att C A a: A Abstraction and client privileges Read access if attribute is exported • a.att is an expression. • An assignment a.att := v would be syntactically illegal! (It would assign to an expression, like x + y := v.)

  22. Applying abstraction principles Beyond read access: full or restricted write, through exported procedures. Full write privileges: set_attribute procedure, e.g. set_temperature (u: REAL) is-- Settemperaturevalue tou.dotemperature := uensuretemperature_set: temperature = uend Client will use e.g. x.set_temperature (21.5).

  23. Other uses of a setter procedure set_temperature (u : REAL) is-- Settemperaturevalue tou.require not_under_minimum: u>= -273 not_above_maximum:u<= 2000 dotemperature := uupdate_database ensuretemperature_set: temperature = uend

  24. Having it both ways Make it possible to call a setter proceduretemperature: REAL assignset_temperature Then the syntax x.temperature:=21.5 is accepted as a shorthand for x.set_temperature(21.5) Retains contracts etc.

  25. Information hiding classA feature f ... g ... feature{NONE} h, i ... feature{B, C} j, k, l ... feature{A, B, C} m, n… end Status of calls in a client with a1:A: • a1.f, a1.g: valid in any client • a1.h: invalid everywhere (including in A’s own text!) • a1.j: valid only in B, C and their descendants (not valid in A!) • a1.m: valid in B, C and their descendants, as well as in A and its descendants

  26. count 3 first_element active Haupt-bahnhof Haldenegg Central right item right right item item An example of selective export LINKABLE exports its features to LINKED_LIST • Does not export them to the rest of the world • Clients of LINKED_LIST don’t need to know about LINKABLE cells.

  27. Exporting selectively These features are selectively exported to LINKED_LIST and its descendants (and no other classes) class LINKABLE [G] feature{LINKED_LIST} put_right(...)is do ... end right: Gisdo ... end ... end

  28. Information hiding Information hiding only applies to use by clients, using dot notation or infix notation, as with a1.f (Qualified calls). Unqualified calls (within class) not subject to information hiding: classA feature {NONE} his...do ... end feature fisdo ...; h ; ...end end

  29. What we have seen

More Related