STATIC AND DYNAMIC POLYMORPHISM
Polymorphism
Recall that polymorphism is the phenomenon
where the same message sent to two different objects produces two different set
of actions. Polymorphism is broadly divided into two parts:
- Static polymorphism – exhibited by overloaded functions.
- Dynamic polymorphism – exhibited by using late binding.
Static Polymorphism
Static polymorphism refers to an entity existing in
different physical forms simultaneously. Static polymorphism involves binding
of functions based on the number, type, and sequence of arguments. The various
types of parameters are specified in the function declaration, and therefore
the function can be bound to calls at compile time. This form of association is
called early binding. The term early binding stems from the fact
that when the program is executed, the calls are already bound to the
appropriate functions.
The resolution of a function call is based on number,
type, and sequence of arguments declared for each form of the function.
Consider the following function declaration:
void add(int , int);
void add(float, float);
When the add() function is invoked, the parameters
passed to it will determine which version of the function will be executed.
This resolution is done at compile time.
Dynamic Polymorphism
Dynamic polymorphism refers to an entity changing
its form depending on the circumstances. A function is said to exhibit dynamic
polymorphism when it exists in more than one form, and calls to its various
forms are resolved dynamically when the program is executed. The term late
binding refers to the resolution of the functions at run-time
instead of compile time. This feature increases the flexibility of the program
by allowing the appropriate method to be invoked, depending on the context.
Static Vs Dynamic Polymorphism
Static polymorphism is considered more efficient, and
dynamic polymorphism more flexible. Statically bound methods are those methods
that are bound to their calls at compile time. Dynamic function calls are bound
to the functions during run-time. This involves the additional step of
searching the functions during run-time. On the other hand, no run-time search
is required for statically bound functions.
As applications are becoming larger and more complicated,
the need for flexibility is increasing rapidly. Most users have to periodically
upgrade their software, and this could become a very tedious task if static
polymorphism is applied. This is because any change in requirements requires a
major modification in the code. In the case of dynamic binding, the function
calls are resolved at run-time, thereby giving the user the flexibility to
alter the call without having to modify the code.
To the programmer, efficiency and performance would
probably be a primary concern, but to the user, flexibility or maintainability
may be much more important. The decision is thus a trade-off between efficiency
and flexibility.
No comments:
Post a Comment