1 / 57

Object-Oriented Programming Objects, Classes and Inheritance (VRH 7.1-4) Polymorphism (VRH 6.4.3)

Object-Oriented Programming Objects, Classes and Inheritance (VRH 7.1-4) Polymorphism (VRH 6.4.3). Carlos Varela RPI Adapted with permission from: Seif Haridi KTH Peter Van Roy UCL. Overview. What is object-oriented programming? Objects Classes Interfaces Inheritance Polymorphism

khanh
Télécharger la présentation

Object-Oriented Programming Objects, Classes and Inheritance (VRH 7.1-4) Polymorphism (VRH 6.4.3)

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. Object-Oriented ProgrammingObjects, Classes and Inheritance (VRH 7.1-4)Polymorphism (VRH 6.4.3) Carlos Varela RPI Adapted with permission from: Seif Haridi KTH Peter Van Roy UCL C. Varela; Adapted from S. Haridi and P. Van Roy

  2. Overview • What is object-oriented programming? • Objects • Classes • Interfaces • Inheritance • Polymorphism • Static and dynamic binding • Multiple Inheritance • Method dispatching, multi-methods • Reflection • Active Objects • Relationship to Other Programming Models C. Varela; Adapted from S. Haridi and P. Van Roy

  3. System building • Abstraction is the best tool to build complex systems • Complex systems are built by layers of abstractions • Each layer has two parts: • Specification, and • Implementation • Any layer uses the specification of the lower layer to implement its functionality C. Varela; Adapted from S. Haridi and P. Van Roy

  4. Properties needed to support the principle of abstraction • Encapsulation • Hide internals from the interface • Compositionality • Combine parts to make new parts • Instantiation/invocation • Create new instances of parts C. Varela; Adapted from S. Haridi and P. Van Roy

  5. Component-based programming • Supports • Encapsulation • Compositionality • Instantiation C. Varela; Adapted from S. Haridi and P. Van Roy

  6. Object-oriented programming • Supports • Encapsulation • Compositionality • Instantiation • Plus • Inheritance C. Varela; Adapted from S. Haridi and P. Van Roy

  7. Inheritance • Programs can be built in hierarchical structure from ADT’s that depend on other ADT’s (Components) • Object-oriented programming (inheritance) is based on the idea that ADTs have so much in common • For example, sequences (stacks, lists, queues) • Object oriented programming enables building ADTs incrementally, through inheritance • An ADT can be defined to inherit from another abstract data type, substantially sharing functionality with that abstract data type • Only the difference between an abstract datatype and its ancestor has to be specified C. Varela; Adapted from S. Haridi and P. Van Roy

  8. What is object-oriented programming? • OOP (Object-oriented programming) = encapsulated state + inheritance • Object • An entity with unique identity that encapsulates state • State can be accessed in a controlled way from outside • The access is provided by means of methods (procedures that can directly access the internal state) • Class • A specification of objects in an incremental way • Incrementality is achieved inheriting from other classes by specifying how its objects (instances) differ from the objects of the inherited classes C. Varela; Adapted from S. Haridi and P. Van Roy

  9. Instances (objects) Interface (what methods are available) State (attributes) Procedures (methods) C. Varela; Adapted from S. Haridi and P. Van Roy

  10. Classes (simplified syntax) A class is a statement classClassVariable attr AttrName1 : AttrNameN meth Pattern1 Statement end : meth PatternN Statement end end C. Varela; Adapted from S. Haridi and P. Van Roy

  11. Classes (simplified syntax) A class can also be a value that can be in an expression position class $ attr AttrName1 : AttrNamen meth Pattern Statement end : meth Pattern Statement end end C. Varela; Adapted from S. Haridi and P. Van Roy

  12. Classes in Oz The class Counter has the syntactic form class Counterattr valmeth display {Browse @val}endmeth inc(Value) val := @val + Valueendmeth init(Value) val := Valueendend C. Varela; Adapted from S. Haridi and P. Van Roy

  13. Attributes of Classes The class Counter has the syntactic form class Counterattr valmeth display {Browse @val}endmeth inc(Value) val := @val + Valueendmeth init(Value) val := Valueendend val is an attribute: a modifiable cell that is accessed by the atom val C. Varela; Adapted from S. Haridi and P. Van Roy

  14. Attributes of classes The class Counter has the syntactic form class Counterattr valmeth display {Browse @val}endmeth inc(Value) val := @val + Valueendmeth init(Value) val := Valueendend the attribute val is accessed by the operator @val C. Varela; Adapted from S. Haridi and P. Van Roy

  15. Attributes of classes The class Counter has the syntactic form class Counterattr valmeth display {Browse @val}endmeth inc(Value) val :=@val + Valueendmeth init(Value) val := Valueendend the attribute val is assigned by the operator := as val := ... C. Varela; Adapted from S. Haridi and P. Van Roy

  16. Methodsof classes The class Counter has the syntactic form class Counterattr valmeth display {Browse @val}endmeth inc(Value) val := @val + Valueendmeth init(Value) val := Valueendend methods are statements method head is a record (tuple) pattern C. Varela; Adapted from S. Haridi and P. Van Roy

  17. Classes in Oz The class Counter has the syntactic form class Counterattr valmeth display {Browse @val}endmeth inc(Value) val := @val + Valueendmeth init(Value) val := Valueendend C. Varela; Adapted from S. Haridi and P. Van Roy

  18. Example • An object is created from a class using the procedure New/3, whose first argument is the class, the second is the initial method, and the result is the object (such as in the functor and procedure implementation approaches) • New/3 is a generic procedure for creating objects from classes. declare C = {New Counter init(0)}{C display}{C inc(1)}{C display} C. Varela; Adapted from S. Haridi and P. Van Roy

  19. Example • The following shows how an object is created from a class using the procedure New/3, whose first argument is the class, the second is the initial method, and the result is the object. • New/3 is a generic procedure for creating objects from classes. declare C = {New Counter init(0)}{C display}{C inc(1)}{C display} Object interface is as a procedure of one argument, which expects a record representing a method C. Varela; Adapted from S. Haridi and P. Van Roy

  20. Summary • A class X is defined by: • classX ... end • Attributes are defined using the attribute-declaration part before the method-declaration part: • attrA1 ... AN • Then follow the method declarations, each has the form: • methESend • The expression Eevaluates to a method head, which is a record whose label is the method name. C. Varela; Adapted from S. Haridi and P. Van Roy

  21. Summary • An attribute A is accessed using @A. • An attribute is assigned a value using A:=E • A class can be defined as a value: • X=class $ ... end C. Varela; Adapted from S. Haridi and P. Van Roy

  22. Attribute Initialization • Stateful (may be updated by :=) • Initialized at object creation time, all instanceshave the initial balance = 0 • class Account attr balance:0 meth … end … end In general the initial value of an attribute could be any legal value (including classes and objects) C. Varela; Adapted from S. Haridi and P. Van Roy

  23. Attribute Initialization • Initialization by instance class Account attr balance methinit(X) balance := X end … end • C1 = {New Account init(100)} • C1 = {New Account init(50)} C. Varela; Adapted from S. Haridi and P. Van Roy

  24. Attribute Initialization • Initialization by brand declare L=linux class RedHat attr ostype:L meth get(X) X = @ostype end end class SuSE attr ostype:L meth get(X) X = @ostype end end class Debian attr ostype:L meth get(X) X = @ostype end end C. Varela; Adapted from S. Haridi and P. Van Roy

  25. Example class Queue attr front back count meth init Q in front := Q back := Qcount := 0 end meth put(X) Q in @back = X|Q back := Q count :=@count + 1 end ... end C. Varela; Adapted from S. Haridi and P. Van Roy

  26. Example class Queue attr front back count meth init Q in front := Q back := Qcount := 0 end meth put(X) Q in @back = X|Q back := Q count :=@count + 1 end ... end front Q0 back put(a) front a | Q1 back C. Varela; Adapted from S. Haridi and P. Van Roy

  27. Example class Queue attr front back count ... meth get(?X) Q in X|Q =@front front:=Q count :=@count - 1 end meth count(X) X = @count end ... end front a | Q1 back X front a | Q1 back X C. Varela; Adapted from S. Haridi and P. Van Roy

  28. Classes as incremental ADTs • Object-oriented programming allows us to define a class by extending existing classes • Three things have to be introduced • How to express inheritance, and what does it mean? • How to access particular methods in the new class and in preexisting classes • Visibility – what part of the program can see the attributes and methods of a class C. Varela; Adapted from S. Haridi and P. Van Roy

  29. Inheritance • Inheritance should be used as a way to specialize a class while retaining the relationship between methods • In this way it is just an extension of an ADT • The other view is inheritance is just a (lazy) way to construct new abstract data types! • No relationships are preserved general class specialized class C. Varela; Adapted from S. Haridi and P. Van Roy

  30. Inheritance class Account attr balance:0 meth transfer(Amount) balance := @balance+Amount end meth getBal(B) B = @balance end end A={New Account transfer(100)} C. Varela; Adapted from S. Haridi and P. Van Roy

  31. Inheritance II The class VerboseAccount has the methods: transfer, getBal, and verboseTransfer Conservative extension class VerboseAccount from Account meth verboseTransfer(Amount) ... end end C. Varela; Adapted from S. Haridi and P. Van Roy

  32. Inheritance II The class AccountWithFee has the methods: transfer, getBal, and verboseTransfer The method transfer has been redefined (overridden) with another definition Non-Conservative extension class AccountWithFee from VerboseAccount attr fee:5 meth transfer(Amount) ... end end C. Varela; Adapted from S. Haridi and P. Van Roy

  33. Inheritance II Account Non-Conservative extension class AccountWithFee from VerboseAccount attr fee:5 meth transfer(Amount) ... end end VerboseAccount AccountWithFee C. Varela; Adapted from S. Haridi and P. Van Roy

  34. Polymorphismn Account The ability for operations to take objects (instances) of different types. For example, the transfer method can be invoked in account object instances of three different classes. The most specific behavior should be executed. VerboseAccount AccountWithFee C. Varela; Adapted from S. Haridi and P. Van Roy

  35. Static and dynamic binding Dynamic binding • Inside an object O we want to invoke a method M • This is written as {self M}, and chooses the method visible in the current object (M of D) class C meth M class D a subclass of C meth M O an instance of D C. Varela; Adapted from S. Haridi and P. Van Roy

  36. Static and dynamic binding Static binding • Inside an object O we want to invoke a method M in a specific (super) class • This is written as C, M and chooses the method visible in the super class C (M of C) class C meth M class D a subclass of C meth M O an instance of D C. Varela; Adapted from S. Haridi and P. Van Roy

  37. Static method calls • Given a class and a method head m(…), a static method-call has the following form:C, m(…) • Invokes the method defined in the class argument. • A static method call can only be used inside class definitions. • The method call takes the current object denoted by self as implicit argument. • The method m could be defined in the class C, or inherited from a super class. C. Varela; Adapted from S. Haridi and P. Van Roy

  38. Inheritance class Account attr balance:0 meth transfer(Amount) balance := @balance+Amount end meth getBal(B) B = @balance end end A={New Account transfer(100)} C. Varela; Adapted from S. Haridi and P. Van Roy

  39. Inheritance II The class VerboseAccount has the methods: transfer, getBal, and verboseTransfer Conservative extension class VerboseAccount from Account meth verboseTransfer(Amount) {selftransfer(Amount)} {Browse @balance} end end C. Varela; Adapted from S. Haridi and P. Van Roy

  40. Inheritance II The class AccountWithFee has the methods: transfer, getBal, and verboseTransfer The method transfer has been redefined (overridden) with another definition Non-Conservative extension class AccountWithFee from VerboseAccount attr fee:5 meth transfer(Amount) VerboseAccount,transfer(Amount-@fee) end end C. Varela; Adapted from S. Haridi and P. Van Roy

  41. Inheritance II Non-Conservative inheritance is dangerous because it might change the relationship between methods and the invariants the programmer depends on Non-Conservative extension class AccountWithFee from VerboseAccount attr fee:5 meth transfer(Amount) VerboseAccount,transfer(Amount-@fee) end end Account getBalance(B); transfer(S); getBalance(B1) => B1 = B+S C. Varela; Adapted from S. Haridi and P. Van Roy

  42. Inheritance II Non-Conservative inheritance is dangerous because it might change the relationship between methods and the invariants the programmer depends on Non-Conservative extension class AccountWithFee from VerboseAccount attr fee:5 meth transfer(Amount) VerboseAccount,transfer(Amount-@fee) end end AccountWithFee getBalance(B); transfer(S); getBalance(B1) => B1 = B+S-@fee C. Varela; Adapted from S. Haridi and P. Van Roy

  43. Inheritance III • Classes may inherit from one or several classes appearing after the keyword: from. • A class B is a superclass of a class A if: • B appears in the from declaration of A, or • B is a superclass of a class appearing in the from declaration of A. • The methods (attributes and features) available in a class C (i.e. visible) are defined through a precedence relation on the methods that appear in the class hierarchy based on the overriding relation: • A method in a class C overrides any method, with the same label, in any super class of C. C. Varela; Adapted from S. Haridi and P. Van Roy

  44. SuperClass relation • SuperClass relation is directed and acyclic. C C. Varela; Adapted from S. Haridi and P. Van Roy

  45. SuperClass relation • SuperClass relation is directed and acyclic. • After striking out all overridden methods each remaining method should have a unique label and be defined only in one class in the hierarchy. C C. Varela; Adapted from S. Haridi and P. Van Roy

  46. Inheritance relation m m m A (valid hierarchy) m C (invalid hierarchy) C. Varela; Adapted from S. Haridi and P. Van Roy

  47. Multiple Inheritance Example class Account attr balance:0 meth transfer(Amount) balance  @balance+Amount end meth getBal(?B)B = @balanceend end class Customer attr name meth init(N)nameNend end class CustomerAccount from Customer Accountend A={New CustomerAccount init} C. Varela; Adapted from S. Haridi and P. Van Roy

  48. Illegal inheritance class Account attr balance methinit(Amount) balance  Amount end meth transfer(Amount) balance @balance+Amount end meth getBal(B)B = @balanceend end classCustomer attr name methinit(N) name Nend end classCustomerAccount from Customer Accountend There are two init methods visible for CustomerAccount This is illegal C. Varela; Adapted from S. Haridi and P. Van Roy

  49. Legal inheritance class Account attr balance meth init(Amount)balance  Amount end meth transfer(Amount)balance  @balance+Amount end meth getBal(B)B = @balance end end class Customer attr name meth init(N) nameN end end class CustomerAccount from Customer Account meth init(N A) Customer,init(N) Account,init(A) end end CustomerAccount has attributes balance and name methods init, transfer and getBalance This overriding is not harmful: it does not change relationships in super classes C. Varela; Adapted from S. Haridi and P. Van Roy

  50. Controlling visibility • Visibility is the control given to the user to limit access to members of a class (attributes, methods and properties) • Each member is defined with a scope (part of program text that the member can be accessed by name) • Programming languages use words like public, private and protected to define visibility • Unfortunately different languages use these keywords to define different scopes C. Varela; Adapted from S. Haridi and P. Van Roy

More Related