# Object Oriented Programming
# UML - Unified Modelling Language
Tools
- GitUML
- Revolutionize code documentation and code visualization
- Pyreverse - Pylint
# 💹 UML Diagram
- UML - Unified Modelling Language
structure of a software system
# Entities / Classes
# Relationships
Deligating Responsibility
- Inheritance --|>
- Assocaition
- Aggregation - has a
- can exist without source object and independently
- Composition - is a part of
- has the scope and lifetime of called object, cannot exist without it
# Composition
class Employee:
def __init__(self, name, pay, bonus):
self.name = name
self.emp_salary = Salary(pay, bonus)
# Aggregation
class Employee:
def __init__(self, name, pay, bonus, Salary):
self.name = name
# Multiplicity
- How is it all done in Python?
# OOP - Object Oriented Programming Concepts
# 🚰 Polymorphism wiki
Static (compilet time) or Dynamic (run time) implementation
provision of a single interface to entities of different types
# 1. Ad-hoc Poylmorphism
common interface for an arbitrary set of individually specified types.
- Operator Overloading wiki
- aka adhoc Polymorphism, syntactic sugar
- Different implementations based on arguments
Eg,
- In javascript and python,
+
operator acts either as arithmetic addition or string concatination based on the type of arguments
print(1 + 2) print("Avi" + "Mehenwal") print("Avi" * 4) # repeat 4 times
- Whats the difference between operator overloading and overriding?
The main difference between overloading and overriding is that in overloading we can use same function name with different parameters for multiple times for different tasks with on a class. and overriding means we can use same name function name with same parameters of the base class in the derived class. this is also called as re useability of code in the programme.
Polymorphic functions can be supplied with arguments of different types
- Functional Overloading
Functions of same name with different implementations
For example,
doTask()
anddoTask(object O)
are overloaded functions.- Operator Overloading
Different operators have different implementations based on their argument
For example, use of
+
and*
operator in python language
Useful Links for this topic
# 2. Parametric Polymorphism
Function usage doesnt not depend on argument type, implementation takes care of it Skip providing types with arguments
A function or a data type can be written generically so that it can handle values identically without depending on their type.[1] Such functions and data types are called generic functions and generic datatypes respectively and form the basis of generic programming.
For example, a function append
that joins two lists can be constructed so that it does not care about the type of elements: it can append lists of integers, lists of real numbers, lists of strings, and so on.
# 3. Subtyping / Inclusion Polymorphism
when a name denotes instances of many different classes related by some common superclass
- Why need it? whats the advantage?
to restrict the range of types that can be used in a particular case of polymorphism
Uses Inheritance principles of base class and super class
Subtyping and Supertyping