Object Oriented programming is a programming style that is associated with the concept of Class, Objects and various other concepts revolving around these two, like Inheritance, Polymorphism, Abstraction, Encapsulation etc . Object-oriented programming aims to implement real-world entities like inheritance, hiding, polymorphism etc in programming. The main aim of OOP is to bind together the data and the functions that operate on them so that no other part of the code can access this data except that function. -:OOPs:-
OOPs Concept Definitions Now , let us discuss some of the main features of Object Oriented Programming which you will be using in Python. -:OOPs:- Objects Classes Abstraction Encapsulation Inheritance Polymorphism
Objects It is a basic unit of Object Oriented Programming and represents the real life entities The object is an entity that has state and behavior . It may be any real-world object like the mouse, keyboard, chair, table, pen, etc. Everything in Python is an object, and almost everything has attributes and methods. all Objects shares two characteristics, they all have attributes and they all have behaviors . for example dogs have attributes like (name, color , type) and behaviors like (Running, barking, fetching etc ). Another Example: Pen is an object. Its name is Reynolds, color is white etc. known as its state. It is used to write, so writing is its behavior. -:OOPs:-
Object is a real world entity . Object is a run time entity . Object is an entity which has state and behavior . Object is an instance of a class . Object is group of data and functions. Object is minimal identifiable component in OOPS program. -:OOPs:-
An object consists of : State : It is represented by attributes of an object. It also reflects the properties of an object . Behavior : It is represented by methods of an object. It also reflects the response of an object with other objects . Identity : It gives a unique name to an object and enables one object to interact with other objects. Object
Example of an object: dog -:OOPs:-
Class- A class is a user defined blueprint or prototype from which objects are created. It represents the set of properties or methods that are common to all objects of one type. In general, class declarations can include these components, in order : -:OOPs:-
Class- Modifiers : A class can be public or has default access (Refer this for details). Class name : The name should begin with a initial letter (capitalized by convention). Superclass( if any): The name of the class’s parent (superclass), if any, preceded by the keyword extends. A class can only extend (subclass) one parent. Body : The class body surrounded by braces, { }. -:OOPs:-
Class -:OOPs:-
-:OOPs:- Method The method is a function that is associated with an object. In Python, a method is not unique to class instances. Any object type can have methods. T he methods are used to implement the functionalities of an object . For example if we created ”start()” and ”stop()” methods for the ”Car” class
-:OOPs:- Method class Car : # create class attributes name = " c200“ make = " mercedez “ model = 2008 # create class methods def start(self ): print ("Engine started ") def stop(self ): print ("Engine switched off")
-:OOPs:- Method In Above Program there is two method are created named “Start ” and “Stop” under “Car” Class.We can call them with the help of object of the “Car” class . You can create more method or function in any class for reducing complexity and simplifying the code. Actually method is also called building b lock of the program.
-:OOPs:- Abstraction Data abstraction and encapsulation both are often used as synonyms. Both are nearly synonym because data abstraction is achieved through encapsulation . Abstraction is used to hide internal details and show only functionalities . Abstracting something means to give names to things so that the name captures the core of what a function or a whole program does
-:OOPs:- Abstraction Data abstraction allows us to transform a complex data structure into one that’s simple and easy to use. Data abstraction refers to providing only essential information about the data to the outside world, hiding the background details or implementation
-:OOPs:- Abstraction
-:OOPs:- Encapsulation Data encapsulation is one of the fundamentals of OOP (object-oriented programming ). It refers to the bundling of data with the methods that operate on that data. Encapsulation is used to hide the values or state of a structured data object inside a class, preventing unauthorized parties' direct access to them
-:OOPs:- Encapsulation Abstraction and Encapsulation are two important Object Oriented Programming (OOPS) concepts. Encapsulation and Abstraction both are interrelated terms. Real Life Difference Between Encapsulation and Abstraction is that Encapsulate means to hide. Encapsulation is also called data hiding. You can think Encapsulation like a capsule (medicine tablet) which hides medicine inside it
-:OOPs:- Basic Different Between Abstraction and Encapsulation Encapsulation is used for hide the code and data in a single unit to protect the data from the outside the world. Class is the best example of encapsulation. Abstraction refers to showing only the necessary details to the intended user. . Abstraction is implemented using interface and abstract class Encapsulation is implemented using private and protected access modifier
Inheritance -:OOPs:- Inheritance is an important pillar of OOP(Object Oriented Programming). It is the mechanism in Python by which one class is allow to inherit the features(fields and methods) of another class. T Inheritance is an OOPS concept in which one object acquires the properties and behaviors of the parent object. It’s creating a parent-child relationship between two classes. It offers robust and natural mechanism for organizing and structure of any software .
Inheritance -:OOPs:- Important terminology: Super Class : The class whose features are inherited is known as superclass(or a base class or a parent class). Sub Class: The class that inherits the other class is known as subclass(or a derived class, extended class, or child class). The subclass can add its own fields and methods in addition to the superclass fields and methods. Reusability: Inheritance supports the concept of “reusability”, i.e. when we want to create a new class and there is already a class that includes some of the code that we want, we can derive our new class from the existing class. By doing this, we are reusing the fields and methods of the existing class .
Inheritance -:OOPs:- Inheritance allows us to inherit attributes and methods from the base/parent class. This is useful as we can create sub-classes and get all of the functionality from our parent class. Then we can overwrite and add new functionalities without affecting the parent class.
Inheritance -:OOPs:- A class which inherits the properties is known as Child Class. A class whose properties are inherited is known as Parent class . Inheritance refers to the ability to create Sub-classes that contain specializations of their parents.
Inheritance -:OOPs:-
Inheritance -:OOPs:- Single inheritance : When a child class inherits from only one parent class, it is called as single inheritance .
Inheritance -:OOPs:- Multi-level inheritance : is archived when a derived class inherits another derived class. There is no limit on the number of levels up to which, the multi-level inheritance is archived in python.
Inheritance -:OOPs:- hierarchical inheritance: When more than one derived classes are created from a single base – it is called hierarchical inheritance.
Inheritance -:OOPs:- M ultiple Inherit: Python provides us the flexibility to inherit multiple base classes in the child class.
Polymorphism -:OOPs:- Polymorphism is an ability (in OOP) to use common interface for multiple form (data types ). Suppose, we need to color a shape, there are multiple shape option (rectangle, square, circle). However we could use same method to color any shape. This concept is called Polymorphism.
Polymorphism -:OOPs:- Polymorphism is an ability (in OOP) to use common interface for multiple form (data types ). Suppose, we need to color a shape, there are multiple shape option (rectangle, square, circle). However we could use same method to color any shape. This concept is called Polymorphism.
Advantage of OOPs -:OOPs:- OOP offers easy to understand and a clear modular structure for programs. Objects created for Object-Oriented Programs can be reused in other programs. Thus it saves significant development cost. Large programs are difficult to write, but if the development and designing team follow OOPS concept then they can better design with minimum flaws. It also enhances program modularity because every object exists independently .
class Add: def input(self, c, d): self.a = c self.b = d def process(self): self.sum = self.a + self.b def show(self) : print( self.sum ) p1 = Add() p1.input(10,20) p1.process() p1.show() Sample program
Python – Access Specifier Various object-oriented languages like C++, Java, Python control access modifications which are used to restrict access to the variables and methods of the class. Most programming languages has three forms of access modifiers, which are Public, Protected and Private in a class. Python uses ‘_’ symbol to determine the access control for a specific data member or a member function of a class. Access specifiers in Python have an important role to play in securing data from unauthorized access and in preventing it from being exploited.
Python - public, private and protected A Class in Python has three types of access modifiers – Public Access Modifier Private Access Modifier Protected Access Modifier
Public Access Modifier The members of a class that are declared public are easily accessible from any part of the program. All data members and member functions of a class are public by default . Example1: class employee: def __ init __(self, name, sal ): self.name=name self.salary = sal e1=employee("Shiv",12000) print(e1.name) print(e1.salary)
Python – Access Specifier Example2: class employee: def __ init __(self, name, sal ): self.name=name self.salary = sal def display(self): print(self.name) print( self.salary ) e1=employee("Shiv",12000) print(e1.name) print(e1.salary) print("**********") print(e1.display())
Python – Access Specifier Example3: Public data members can also be access on python shell. You can access employee class's attributes and also modify their values, >>> e1=employee (" Kiran ", 10000) >>> e1.salary 10000 >>> e1.salary=20000 >>> e1.salary 20000
Private Access Modifier: The members of a class that are declared private are accessible within the class only, private access modifier is the most secure access modifier. Data members of a class are declared private by adding a double underscore ‘__’ symbol before the data member of that class. Example1: class employee: def __ init __( self,name,sal ): self.__name =name self.__salary = sal def display(self): print( self.__name ) print( self.__salary ) e1=employee("Shiv",12000) print(e1.display())
Private Access Modifier: Note in the example1 we see that the value of variable is access through member function. If you access the variable direct through object Example: class employee: def __ init __( self,name,sal ): self.__name =name self.__salary = sal def display(self): print( self.__name ) print( self.__salary ) e1=employee("Shiv",12000) print(e1.name) print(e1.salary) Output: 'employee' object has no attribute 'name'
Private Access Modifier: If you try to access variable on Python shell Example3: >>> e1=employee("Bill",10000) >>> e1.__salary AttributeError : 'employee' object has no attribute '__salary '
Protected Access Modifier The members of a class that are declared protected are only accessible to a class derived from it. Data members of a class are declared protected by adding a single underscore ‘_’ symbol before the data member of that class. Example3: class employee: def __ init __( self,name,sal,age ): self._name =name self._salary = sal self._age =age class person(employee): def display(self): print( self._name ) print( self._salary ) print( self._age ) p=person("John",20000,29) print( p.display ())
Access Modifier Note:- Python doesn't have any mechanism that effectively restricts access to any instance variable or method. That means we can access protected and private variable from outside the class also
Method overloading Like other languages (for example method overloading in C++) do, python does not supports method overloading. We may overload the methods but can only use the latest defined method . def product(a, b): p = a * b print(p) def product(a, b, c): p = a * b*c print(p) product(4 , 5, 5)
Method overloading In Python you can define a method in such a way that there are multiple ways to call it. Depending on the function definition, it can be called with zero, one, two or more parameters. This is known as method overloading. In the given code, there is a class with one method sayHello (). We rewrite as shown below. The first parameter of this method is set to None, this gives us the option to call it with or without a parameter . An object is created based on the class, and we call its method using zero and one parameter. To implement method overloading, we call the method sayHello () in two ways: 1. obj.sayHello () and 2.obj.sayHello('Rambo') class Human: def sayHello (self, name=None): if name is not None: print 'Hello ' + name else: print 'Hello ' obj = Human() print( obj.sayHello ()) print( obj.sayHello ('Rambo')) Output Hello None Hello Rambo None
Method Overriding We can provide some specific implementation of the parent class method in our child class. When the parent class method is defined in the child class with some specific implementation, then the concept is called method overriding. We may need to perform method overriding in the scenario where the different definition of a parent class method is needed in the child class. Consider the following example to perform method overriding in python . class Animal: def speak(self): print("speaking") class Dog(Animal): def speak(self): print("Barking") d=Dog() d.speak ()
Real Life Example of method overriding class Bank: def getroi (self): return 10; class SBI(Bank): def getroi (self): return 7; class ICICI(Bank): def getroi (self): return 8; b1=Bank() b2=SBI() b3=ICICI() print("Bank Rate of interest:",b1.getroi()); print("SBI Rate of interest:",b2.getroi()); print("ICICI Rate of interest:",b3.getroi ());