Table of Contents

    What is Object-Oriented Programming?

    Chapter 16.1

    What is Object-Oriented Programming?

    Learn Object-Oriented Programming from the ground level with simple explanations, real-world examples, important terminology, advantages, limitations, and beginner-friendly conceptual code examples.

    Introduction

    Object-Oriented Programming, commonly known as OOP, is one of the most important programming paradigms used in modern software development. It is a way of writing programs by organizing code around objects. These objects represent real-world entities such as students, cars, bank accounts, employees, products, orders, books, or customers.

    In simple words, Object-Oriented Programming allows programmers to build software by thinking in terms of real-world things. Each object has some information about itself and some actions it can perform. This makes programs easier to understand, easier to maintain, and easier to expand as the project grows.

    For example, in a student management system, we may have objects such as Student, Teacher, Course, Exam, and Result. Each of these objects can store data and perform related operations.

    "Object-Oriented Programming is a programming approach where software is designed using objects that contain data and behavior."

    Simple Definition of Object-Oriented Programming

    Object-Oriented Programming is a programming style where a program is divided into small reusable units called objects. Each object contains two main things:

    • Data — information stored inside the object.
    • Behavior — actions that the object can perform.
    BASIC IDEA
    Object = Data + Behavior

    The data of an object is usually represented using properties or attributes. The behavior of an object is represented using methods or functions.

    Important: OOP does not only mean using classes and objects. It means designing software in a structured way where related data and behavior are grouped together.

    What is an Object?

    An object is a real-world or logical entity that has characteristics and actions. In programming, an object is created from a class and represents a specific item.

    Let us understand this with a real-world example. A mobile phone is an object. It has characteristics such as brand, model, color, storage, battery percentage, and price. It also performs actions such as calling, messaging, charging, taking photos, and playing music.

    Mobile Phone as an Object

    A mobile phone has data such as brand, color, and storage. It also has behavior such as calling, messaging, and taking photos.

    Object Data / Properties Behavior / Methods
    Student Name, Roll Number, Marks, Grade Study, Attend Class, Submit Assignment
    Car Brand, Color, Speed, Fuel Level Start, Stop, Accelerate, Brake
    Bank Account Account Number, Balance, Account Holder Deposit, Withdraw, Check Balance
    Book Title, Author, Price, ISBN Open, Read, Borrow, Return
    Product Product ID, Name, Price, Quantity Add to Cart, Apply Discount, Update Stock

    What is a Class?

    A class is a blueprint, plan, or template used to create objects. It defines what data an object will have and what actions the object can perform.

    A class itself is not a real object. It is only a design. When we create an actual item from that design, it becomes an object.

    Class and Object Analogy

    A house plan is like a class. Actual houses built from that plan are objects. One plan can be used to create many houses.

    CLASS AND OBJECT
    Class = Blueprint   |   Object = Actual Instance

    For example, Student can be a class. From this class, we can create many student objects such as student1, student2, student3, and so on.

    
    // Conceptual example
    
    Class Student
    {
        name
        rollNumber
        marks
    
        study()
        attendClass()
        submitAssignment()
    }
    
    // Objects created from Student class
    
    student1
    student2
    student3
    

    In the above example, Student is the class. The objects student1, student2, and student3 are individual students created from that class.

    Why Do We Need Object-Oriented Programming?

    As software projects become bigger, writing everything in a single file or as a long list of instructions becomes difficult. The code becomes hard to read, hard to debug, and hard to modify.

    Object-Oriented Programming solves this problem by dividing a large program into smaller, meaningful, reusable parts. Each part represents an object that manages its own data and behavior.

    Problems Without OOP

    • Code becomes long and difficult to manage.
    • Same code may be repeated many times.
    • Changing one part can affect many other parts.
    • Data may be accessed and modified incorrectly.
    • Large applications become difficult to maintain.
    • Team collaboration becomes harder.

    Benefits With OOP

    • Code becomes organized into logical units.
    • Objects can be reused in different parts of the program.
    • Data can be protected using encapsulation.
    • Programs become easier to modify and extend.
    • Large systems can be developed module by module.
    • Team members can work on different classes independently.

    Basic Idea Behind OOP

    The main idea behind Object-Oriented Programming is to model software based on real-world objects. Instead of thinking only about instructions, the programmer thinks about entities involved in the system.

    Suppose we are building a library management system. In this system, we can identify several objects:

    • Book
    • Member
    • Librarian
    • Library Card
    • Borrow Record
    • Fine Payment

    Each object has its own data and behavior. A Book object may store title, author, category, and availability status. A Member object may store member name, member ID, phone number, and borrowed books.

    OOP helps us convert a real-world problem into a software model by identifying objects, their properties, and their behaviors.

    Core Components of Object-Oriented Programming

    Object-Oriented Programming is built using several important components. A beginner should understand these terms clearly before learning advanced OOP concepts.

    Component Meaning Simple Example
    Class A blueprint or template for creating objects. Student class
    Object An actual instance created from a class. student1
    Attribute / Property Data or characteristic of an object. name, age, marks
    Method Function or action performed by an object. study(), displayResult()
    Constructor Special method used to initialize an object. Setting student name and roll number
    Access Modifier Controls visibility of class members. public, private, protected
    Message Passing Objects communicate by calling methods. account.deposit(500)

    Four Pillars of Object-Oriented Programming

    Object-Oriented Programming is mainly based on four important principles. These are known as the four pillars of OOP.

    1

    Encapsulation

    Wrapping data and methods together into a single unit

    Encapsulation means combining data and methods inside a class and controlling access to that data. It helps protect important information from being directly changed from outside the class.

    Example In a bank account object, balance should not be changed directly. It should be changed only through deposit and withdraw methods.
    2

    Inheritance

    Creating a new class from an existing class

    Inheritance allows one class to use the properties and methods of another class. It supports code reusability and helps create relationships between classes.

    Example A Car class and Bike class can inherit common features from a Vehicle class.
    3

    Polymorphism

    One name, many forms

    Polymorphism allows the same method or operation to behave differently depending on the object. It makes programs flexible and easier to extend.

    Example A method named makeSound() may behave differently for Dog, Cat, and Bird objects.
    4

    Abstraction

    Showing essential details and hiding internal complexity

    Abstraction means showing only the necessary features to the user and hiding the internal working details. It helps reduce complexity.

    Example When we drive a car, we use the steering wheel, brake, and accelerator. We do not need to understand the complete internal engine mechanism.

    Real-World Example: Car System

    Let us understand OOP with a simple car example. A car has several properties and behaviors.

    Category Examples
    Class Car
    Objects car1, car2, car3
    Properties brand, model, color, speed, fuelLevel
    Methods start(), stop(), accelerate(), brake()
    
    // Conceptual OOP example using a Car
    
    Class Car
    {
        brand
        color
        speed
    
        start()
        {
            print "Car started"
        }
    
        accelerate()
        {
            speed = speed + 10
        }
    
        stop()
        {
            print "Car stopped"
        }
    }
    
    // Creating objects
    
    car1 = Car()
    car2 = Car()
    
    car1.brand = "Toyota"
    car1.color = "Red"
    
    car2.brand = "Honda"
    car2.color = "Blue"
    

    Here, Car is a class. The objects car1 and car2 are created from the Car class. Both objects have the same structure, but they can store different data.

    Real-World Example: Student Management System

    A student management system is a very useful example for beginners because it clearly shows how OOP works in real projects.

    In this system, we can create a Student class. Each student object can store details such as name, roll number, course, marks, and grade. The student object can also perform actions such as calculating grade, displaying details, and checking pass or fail status.

    
    // Conceptual Student class
    
    Class Student
    {
        name
        rollNumber
        course
        marks
    
        calculateGrade()
        {
            if marks >= 90
                return "A"
            else if marks >= 75
                return "B"
            else if marks >= 60
                return "C"
            else
                return "Fail"
        }
    
        displayDetails()
        {
            print name
            print rollNumber
            print course
            print marks
        }
    }
    
    // Creating objects
    
    student1 = Student()
    student2 = Student()
    
    student1.name = "Rahul"
    student1.rollNumber = 101
    student1.course = "Programming Fundamentals"
    student1.marks = 85
    
    student2.name = "Ayesha"
    student2.rollNumber = 102
    student2.course = "Programming Fundamentals"
    student2.marks = 92
    

    This example shows that one class can be used to create multiple student objects. Each object stores its own data but follows the same structure defined by the class.

    How Objects Communicate

    In Object-Oriented Programming, objects communicate with each other by calling methods. This is often known as message passing.

    For example, in an e-commerce application, a customer object may place an order. The order object may calculate the total price. The payment object may process the payment. The delivery object may update shipping status.

    OBJECT COMMUNICATION
    Object A calls method Object B
    
    // Conceptual object communication
    
    customer.placeOrder()
    
    order.calculateTotal()
    
    payment.processPayment()
    
    delivery.updateStatus()
    

    This type of communication makes the application modular. Each object is responsible for its own work.

    Simple OOP Example in Java

    The following Java example shows a simple class, object, properties, and method.

    Prerequisite: To understand this example, you should know basic variables, data types, methods, and how to run a simple Java program.
    
    class Student {
    
        String name;
        int rollNumber;
        int marks;
    
        void displayDetails() {
            System.out.println("Name: " + name);
            System.out.println("Roll Number: " + rollNumber);
            System.out.println("Marks: " + marks);
        }
    }
    
    public class Main {
        public static void main(String[] args) {
    
            Student student1 = new Student();
    
            student1.name = "Rahul";
            student1.rollNumber = 101;
            student1.marks = 85;
    
            student1.displayDetails();
        }
    }
    

    In this example, Student is a class. The variable student1 is an object. The object stores values for name, rollNumber, and marks. The method displayDetails() displays the information of the student.

    Simple OOP Example in Python

    Python also supports Object-Oriented Programming. The following example shows the same Student concept using Python syntax.

    Prerequisite: To understand this example, you should know basic Python variables, functions, indentation, and print statements.
    
    class Student:
        def __init__(self, name, roll_number, marks):
            self.name = name
            self.roll_number = roll_number
            self.marks = marks
    
        def display_details(self):
            print("Name:", self.name)
            print("Roll Number:", self.roll_number)
            print("Marks:", self.marks)
    
    
    student1 = Student("Ayesha", 102, 92)
    
    student1.display_details()
    

    In this Python example, __init__() is a constructor. It initializes the object with name, roll number, and marks when the object is created.

    OOP Design Thinking

    Object-Oriented Programming is not only about writing code. It is also about thinking properly before coding. Before creating an OOP-based application, programmers usually identify:

    • What objects are needed?
    • What data should each object store?
    • What actions should each object perform?
    • How should objects communicate with each other?
    • Which data should be hidden or protected?
    • Which classes can reuse features from other classes?

    Steps to Think in OOP

    • Read the problem statement carefully.
    • Identify important real-world entities.
    • Convert those entities into possible classes.
    • List the properties of each class.
    • List the methods or actions of each class.
    • Identify relationships between classes.
    • Decide which data should be private or protected.
    • Create objects and define how they interact.

    Example: OOP in E-Commerce Application

    In an e-commerce application, Object-Oriented Programming can be used to represent different parts of the system as objects.

    Class Possible Properties Possible Methods
    Customer customerId, name, email, address login(), updateProfile(), placeOrder()
    Product productId, name, price, stock displayProduct(), updateStock()
    Cart cartId, productList, totalAmount addProduct(), removeProduct(), calculateTotal()
    Order orderId, orderDate, orderStatus confirmOrder(), cancelOrder(), trackOrder()
    Payment paymentId, amount, paymentStatus processPayment(), refundPayment()

    This example shows how a large system can be divided into multiple classes. Each class handles a specific responsibility.

    Procedural Programming vs Object-Oriented Programming

    Procedural programming and Object-Oriented Programming are two different approaches to writing programs. Procedural programming focuses mainly on functions and step-by-step instructions, while OOP focuses on objects and their interactions.

    Basis Procedural Programming Object-Oriented Programming
    Main Focus Functions and procedures Objects and classes
    Program Structure Program is divided into functions Program is divided into objects
    Data Handling Data may be shared between functions Data is usually kept inside objects
    Security Less data protection Better data protection using encapsulation
    Reusability Limited reusability High reusability using inheritance and classes
    Best Suitable For Small and simple programs Medium to large applications
    Real-World Modeling Difficult to model real-world entities Easy to model real-world entities
    Maintenance May become difficult as program grows Easier to maintain due to modular structure

    Advantages of Object-Oriented Programming

    Object-Oriented Programming provides many advantages, especially for large and complex software systems.

    Major Advantages

    • Modularity: The program is divided into small classes and objects.
    • Reusability: Existing classes can be reused in new programs.
    • Maintainability: Code becomes easier to update and maintain.
    • Scalability: Large applications can be expanded more easily.
    • Security: Data can be protected using encapsulation.
    • Flexibility: Polymorphism allows one interface to support different behaviors.
    • Real-world Modeling: Real entities can be represented naturally.
    • Team Development: Different developers can work on different classes.
    • Reduced Duplication: Common code can be placed in parent classes.
    • Better Testing: Individual classes and methods can be tested separately.

    Limitations of Object-Oriented Programming

    Although OOP is very powerful, it also has some limitations. Beginners should understand that OOP is not always the best solution for every type of problem.

    More Concepts to Learn Beginners need to understand classes, objects, inheritance, polymorphism, abstraction, and encapsulation.
    Can Be Overused Sometimes developers create too many classes for very simple problems, which makes the program unnecessarily complex.
    Memory Usage Object-oriented programs may use more memory because objects store data and methods require structure.
    Design Time OOP requires proper planning before coding. Poor class design can make the application difficult to maintain.

    Popular Object-Oriented Programming Languages

    Many modern programming languages support Object-Oriented Programming. Some languages are strongly based on OOP, while others support multiple programming paradigms.

    Language OOP Support Common Usage
    Java Strong OOP support Enterprise applications, Android apps, backend systems
    C++ Supports OOP and procedural programming Game development, system software, high-performance applications
    C# Strong OOP support Windows applications, web applications, game development
    Python Supports OOP and other paradigms Web development, automation, data science, AI
    JavaScript Supports object-based and prototype-based programming Frontend and backend web development
    PHP Supports OOP Web applications and CMS development
    Kotlin Supports OOP Android development and backend development
    Ruby Strong OOP style Web applications and scripting

    How to Identify Classes in a Problem?

    One of the most important skills in OOP is identifying classes from a problem statement. A simple method is to look for important nouns in the problem description.

    CLASS IDENTIFICATION RULE
    Important Nouns can become Classes

    For example, consider this problem statement:

    "A school wants to manage students, teachers, courses, exams, and results."

    The important nouns are:

    • School
    • Student
    • Teacher
    • Course
    • Exam
    • Result

    These nouns can become possible classes in the system.

    Best Practices for Beginners

    When learning Object-Oriented Programming, beginners should focus on writing simple and meaningful classes. Do not try to make the design too complicated in the beginning.

    Beginner-Friendly OOP Best Practices

    • Start with simple real-world examples such as Student, Car, Book, and Bank Account.
    • Keep each class focused on one responsibility.
    • Use meaningful class names and method names.
    • Do not expose important data directly if it should be protected.
    • Use methods to perform operations on object data.
    • Avoid creating unnecessary classes for very small problems.
    • Understand class and object clearly before learning inheritance.
    • Practice by converting real-world systems into classes and objects.
    • Use comments when the logic is not immediately clear.
    • Design first, then write code.

    Common Mistakes Beginners Make in OOP

    Beginners often face confusion when learning OOP. The following mistakes are common and should be avoided.

    Common Mistakes

    • Confusing class with object.
    • Creating too many unnecessary classes.
    • Putting all code inside one class.
    • Making all data public without protection.
    • Using inheritance where composition is better.
    • Writing methods that do too many tasks.
    • Ignoring naming conventions.
    • Not planning relationships between classes.

    Better Approach

    • Remember that class is a blueprint and object is an instance.
    • Create classes only when they represent meaningful entities.
    • Keep each class responsible for a specific task.
    • Protect important data using encapsulation.
    • Use clear and descriptive names.
    • Keep methods short and focused.
    • Draw simple class diagrams before coding.
    • Practice with small projects first.

    Mini Practice: Identify Objects and Classes

    Try to identify classes, objects, properties, and methods from the following scenarios.

    Scenario Possible Classes Possible Properties Possible Methods
    Banking System Account, Customer, Transaction accountNumber, balance, customerName deposit(), withdraw(), checkBalance()
    Library System Book, Member, Librarian title, author, memberId borrowBook(), returnBook(), calculateFine()
    Online Shopping Product, Cart, Order, Payment price, quantity, orderStatus addToCart(), placeOrder(), makePayment()
    Hospital System Patient, Doctor, Appointment patientName, doctorName, appointmentDate bookAppointment(), cancelAppointment(), prescribeMedicine()

    Frequently Asked Questions

    1. Is Object-Oriented Programming difficult for beginners?

    OOP may look difficult in the beginning because it introduces new terms such as class, object, method, constructor, inheritance, and polymorphism. However, if you learn it with real-world examples, it becomes much easier to understand.

    2. Is every programming language object-oriented?

    No. Not every programming language is object-oriented. Some languages are procedural, some are functional, some are scripting-based, and many modern languages support multiple paradigms including OOP.

    3. Can we write programs without OOP?

    Yes. Many programs can be written without OOP. For small scripts and simple programs, procedural programming may be enough. However, for larger applications, OOP provides better organization and maintainability.

    4. What is the difference between a class and an object?

    A class is a blueprint or template. An object is an actual instance created from that blueprint. For example, Student is a class, and Rahul or Ayesha can be student objects.

    5. Why is OOP important in software development?

    OOP is important because it helps developers build software that is reusable, modular, secure, scalable, and easier to maintain.

    Summary

    Object-Oriented Programming is a powerful programming approach that helps developers design software using objects. These objects represent real-world entities and contain both data and behavior.

    OOP makes software easier to understand because it allows programmers to think in terms of real-world models. Instead of writing everything as separate instructions, programmers create classes and objects that work together.

    The most important concepts in OOP are class, object, property, method, constructor, encapsulation, inheritance, polymorphism, and abstraction. These concepts are used in many popular programming languages such as Java, C++, C#, Python, PHP, JavaScript, Kotlin, and Ruby.

    Key Takeaway

    Object-Oriented Programming is a programming paradigm that organizes software around objects. An object combines data and behavior. OOP helps developers create software that is modular, reusable, secure, scalable, and easier to maintain.