Object-Oriented Programming and Polymorphism

Lesson1

Objects

  • Abstraction = ability of programmatic objects to represent real-world things
  • Class = template for object
  • Object created -> copy of instance data defined by class created in memory and assigned to reference variable
  • Each object independent of one another

 

Members

  • Objects composed of members
    • properties - data
    • fields - data
    • methods – actions object can perform
    • events – notifications object receives

 

Object Model

  • hierarchical organisation of objects contained and exposed within main object
    • Car object contains Engine object, Wheel objects and Transmission object. Composition of subordinate objects affects how Car behaves – e.g. value of cylinders property of Engine modifies performance

 

Encapsulation

  • Object implementation independent from its interface
  • App interacts with object through its interface (public properties and methods)
  • If interface remains constant, implementation can change without impacting app
  • Internal object data should never be exposed – ensure fields are private

 

Polymorphism

  • Different classes providing different implementations of same public interface
  • e.g. Driver object can interact with both Car and Truck object through same interface
  • Interface Polymorphism
    • Interface = behaviour contract
    • Defines members to be implemented, but not how
    • Object can implement multiple interfaces
    • Many objects can implement same interface
    • By convention interfaces start with I, e.g. IDrivable
  • Inheritance polymorphism
    • Inheritance allows class to incorporate functionality of previously defined class, implementing different members as needed
    • Can only inherit form one class (the base class)
    • Inherited class has is-a relationship with base (e.g. PickupTruck is-a Truck)
    • Can add additional members – extend functionality
    • Can override base class members - modify functionality

 

Lesson 2

Overloading Members

  • Multiple methods with same name but different signatures
  • Access level and return type may vary
  • Run time calls method matching signature provided – if no match then error!

 

Overloading Methods

 

public void DisplayMessage(int i)

{

     MessageBox.Show(i.ToString());

}

 

public void DisplayMessage(string s)

{

     MessageBox.show(s);

}

Overloading Operators

  • For user defined types may be desirable to overload operator (e.g. complicated structure

 

public struct HoursWorked

{

     float RegularHours;

     float OvertimeHours;

}

 

  • Overload operator using

 

public static type operator op (Arg1[, Arg 2])

{

    

}

 

  • Unary operators – provide one argument
  • Binary operators – provide two arguments (at least one same type)
  • Must be static
  • Must be public
  • Must be defined within user defined type

 

public struct HoursWorked

{

     float RegularHours;

     float OvertimeHours;

 

     public static HoursWorked operator + (HoursWorked a, HoursWorked b)

{

     HoursWorked Result = new HoursWorked();

     Result.RegularHours = a.RegularHours + b.RegularHours;

     Result.OvertimeHours = a.OvertimeHours + b.OvertimeHours;

     return Result;

}

 

public static HoursWorked operator + (HoursWorked a, int b)

{

     HoursWorked Result = new HoursWorked();

     Result.RegularHours = a.RegularHours + b;

     return Result;

}

}

 

 

HoursWorked tot = new HoursWorked();

tot = Sunday + Monday;

 

Lesson 3

Interface Polymorphism

  • Interface defined using interface keyword
  • Member methods signature provided, but not access modifiers
  • Can not defined fields
  • Objects implementing interface are obliged to implement its methods, clients do not need to use them, implement event handlers, etc.

 

public interface IDrivable

{

     void GoForward();

     void Halt();

     int DistanceTravelled();

 

     int FuelLevel

     {

          get:

             

     }

     event System.EventHandler OutOfFuel;

}

 

  • Method signature may indicate an interface is required

 

public void GoSomewhere(IDrivable v)

{

    

}

 

  • Any object implementing required interface may be passed to method
  • Object will be cast to appropriate interface – only interface members will be accessible within method implementation

 

Implement Interface

  • Classes can implement multiple interfaces
  • Specify interfaces as comma separated list
  • Implementation below makes interface members available both via interface and class

 

public class Truck : IDrivable, IFuelBurning

{

     public void GoForward(int Speed)

{

}

}

 

  • Implementation below makes interface members available only via interface. No access modifier – has same level as member defined by class

 

public class Truck : IDrivable, IFuelBurning

{

     void IDrivable.GoForward(int Speed)

{

}

}

 

Inheritance Polymorphism

  • Instance of derived class can polymorphically behave as instance of its base
  • If method requires Truck object can pass PickupTruck
  • When cast to base, methods implemented by derived are unavailable
  • Class inherit one base, multiple interfaces. List interfaces following base

 

public class FourWheelDrivePickupTruck : PickupTruck, IFourWheelDrive

{

    

}

 

  • Stop class acting as base by others using sealed keyword

 

public sealed class AClass

{

}

 

Overriding Base Class Members

  • Substitute new implementation for base class member
  • Only override methods and properties
  • Can not override fields and events
  • New implementation must have same access level, signature and return type

 

public class SportsCar : Car

{

     public override void GoForward(int Speed)

     {

     }

}

 

  • Overridden member called in place of base version – regardless of context called in. If inherited class is cast to base and method called, new implementation still called. Type of object, not variable, determines which member called
  • To override base member must be marked virtual

 

public virtual void OverrideMe()

{

    

}

 

Hiding Base Class Members

  • Obscure base class members and replace with new implementation
  • Must have same kind and have same signature as original
  • Access level and return type can be different
  • Use new keyword to indicate that base implementation should be hidden
  • Can have interoperability implications (change to return type and accessibility) – only use where certain about compatibility
  • Base implementation can be accessed on occasions – dependent on type of variable not object (unlike overriding)
  • On inheritance hidden implementations not exposed – the base implementation is exposed

 

public class MyBaseClass

{

     public string MyMethod(int I)

     {

     }

}

 

public class MyInheritedClass : MyBaseClass

{

     internal new int MyMethod(int I)

     {

     }

}

 

Access Base Implementation

  • Can access base implementation from inherited one using base keyword

 

public override void MyMethod()

{

     base.MyMethod();

}

 

Abstract Classes and Members

  • Allows creation of base class providing some invariant functionality, whilst leaving implementation of others to inheriting classes
  • Abstract class can not be instantiated
  • Regular members of abstract class can be virtual (allowing inheriting classes to provide own implementations) or non-virtual (i.e. fixed)
  • Abstract members provide declaration, but not implementation

 

public abstract class AbstractClass

{

     public abstract void GoForward(int I);

     public abstract string Colour

     {

          get:

          set:

     }

}

 

  • Inheriting classes must implement abstract members
  • If inheriting class is abstract it is not required to implement abstract members

 

 

Tuition

home
home
tuition
index
Last updated: 26th December 2006.
copyright © 2000 Greystoke Systems Ltd.
Web address: http://www.gsys.biz/Documents/Services/Tuition/MCP/70-316/ApplicationDeployment.htm