Principles of OOP - Part 2
Telerik Academy Alpha
Table of contents
Polymorphism
Polymorphism
- Polymorphism is a Greek word that means "many-shaped"
- Polymorphism = ability to take more than one form(objects have more than one type)
- A class can be used through its parent interface/base class
- A child class may override some of the behaviors of the parent class
Polymorphism
-
Why handle an object of given type as object of its base type?
- To invoke abstract operations
-
To mix different related types in the same collection
- E.g. List <object> can hold anything
- To pass more specific object to a method that expects a parameter of a more generic type
- To declare a more generic field which will be initialized and "specialized" later
Virtual, abstract, override, new
Virtual
-
Virtual member is
- Defined in a base class and can be changed (overridden) in the descendant classes
- Can be called through the base class' interface
- Virtual methods are declared through the keyword virtual
public virtual void Draw { // do something }
- Methods declared as virtual in a base class can be overridden using the keyword override
public override void Draw { // do something ELSE }
Abstract
-
Abstract methods are purely virtual
- If a method is abstract → it is virtual as well
- Abstract methods are designed to be changed (overridden) later
-
Interface members are also purely virtual
- They have no default implementation and are designed to be overridden in a descendant class
-
Virtual methods can be hidden through the new keyword
- Use it with caution
public new void Draw { // do something ELSE }
Override
-
Using override we can modify a method or property
- An override method provides a replacement implementation of an inherited member
- You cannot override a non-virtual or static method
- The overridden base method must be virtual, abstract, or override
How polymorphism works
- Polymorphism ensures that the appropriate method of the subclass is called through its base class' interface
-
Polymorphism is implemented using a technique called late method binding
- The exact method to be called is determined at runtime, just before performing the call
- Applied for all abstract/virtual methods
- Note: Late binding is a bit slower than normal (early) binding
Polymorphism types
-
Static (compile time) Polymorphism Early binding -
- methods with same name but different signatures because of this we will perform different tasks with same method name
- overloaded methods, overloaded operators and overridden methods that are called directly by using derived objects
Polymorphism types
-
Runtime Polymorphism / Late Binding
- override a method in base class by creating similar function in derived class
- overridden methods that are called using base class object
Polymorphism - live demo
Cohesion and Coupling
Cohesion
Cohesion
-
Cohesion describes
- How closely the routines in a class or the code in a routine support a central purpose
-
Cohesion must be strong
- Well-defined abstractions keep cohesion strong
- Classes must contain strongly related functionality and aim for single purpose
- Cohesion is a powerful tool for managing complexity
Cohesion
- Strong cohesion is when you have a class that does a well defined job
Cohesion
-
Strong cohesion (good cohesion) example
-
Class Math that has methods:
- Sin(), Cos(), Asin()
- Sqrt(), Pow(), Exp()
- Math.PI, Math.E
-
Class Math that has methods:
-
Weak cohesion (bad cohesion) example
-
Class that makes many unrelated tasks
- Create Document
- Format Document
- Send Document as email
-
Class that makes many unrelated tasks
Coupling
Coupling
- Coupling describes how tightly a class or routine is related to other classes or routines
-
Coupling must be kept loose
-
Modules must depend little on each other
- Or be entirely independent (loosely coupled)
- All classes / routines must have small, direct, visible, and flexible relationships to other classes / routines
- One module must be easily used by other modules
-
Modules must depend little on each other
Coupling
-
Loose Coupling
- Easily replace old HDD
- Easily place this HDD to another motherboard
-
Tight Coupling
-
Integrated video card on a motherboard
- What happens if the video card fails?
-
Integrated video card on a motherboard
Questions?
[C# OOP] Principles of OOP - Part 2
By telerikacademy
[C# OOP] Principles of OOP - Part 2
- 1,255