Lecture No.
01
01.1. Introduction
        Course Objective:
        Objective of this course is to make students familiar with the concepts of object
        oriented programming. These concepts will be reinforced by their
        implementation in C++.
        Course Contents:
        The main topics that we will study in the 45 lectures of this course are given
        below,
             Object Orientation
             Objects and Classes
             Overloading
             Inheritance
             Polymorphism
             Generic Programming
             Exception Handling
             Introduction to Design Patterns
        Recommended Text Book:
                C++ How to Program ( Deitel & Deitel )
        Reference Books:
            1. Object-Oriented Software Engineering
               By Jacobson, Christerson, Jonsson, Overgaard
               (For object oriented programming introductory concepts)
            2. The C++ Programming Language
               By Bjarne Stroustrup
               (For better c++ understanding)
Object-Orientation (OO)
What is Object-Orientation?
It is a technique in which we visualize our programming problems in the form of
objects and their interactions as happens in real life.
Examples:
We have different objects around us in our real life that interact with each other to
perform different operations for example,
                    A Person                       A House
                      A Tree                           A Car
                                   Different Objects
These objects interact with each other to perform different operations,
                               Lives in
              Ali                                      House
                    Drives
              Car                                       Tree
Take another example of a School; the objects in a school are student, teacher, books,
pen ,school bag, classroom, parents, playground and so on… ,
Objects in a School
Teacher                    Student                           School Bag
Book                       Pen                               Playground
Parents                    Classroom                         Library
Suppose we want to develop a fee collection system for a school for this we will need to
find out related objects and their interactions as happens in real life.
In this way we can say that object orientation makes it easier for us to solve our real
world problems by thinking solution of the problem in terms of real world objects.
So we can say that in our daily life everything can be taken as an object that behaves in a certain
way and has certain attributes.
In object orientation we move our concentration to objects in contrast to procedural
paradigm in which we simply write our code in functions and call them in our main
program.
01.2. What is a Model?
A model is an abstraction of something real or conceptual.
We need models to understand an aspect of reality.
Model Examples
Highway maps
Architectural models
Mechanical models
01.3. OO Models:
In the context of programming models are used to understand the problem before
starting developing it.
We make Object Oriented models showing several interacting objects to understand
a system given to us for implementation.
Example 1– Object Oriented Model
                                                                    lives-in
                                                     Ali                       House
                                                           drives
                                                     Car                       Tree
 Objects                                      Interactions
 Ali, Car, House, Tree                        Ali lives in the house
                                              Ali drives the car
Example 2– Object Oriented Model (A School Model)
    A School Model
                                Teaches                           Plays-in
         Teacher                                      Student                Playground
                                                            Has
                                 Book                   Pen          School Bag
    Objects                                           Interactions
    Teacher, Student, School Bag, Pen,                Teacher teaches Student.
    Book Playground                                   Student has School Bag, Book and Pen
01.4. Object-Orientation - Advantages
As Object Oriented Models map directly to reality as we have seen in examples above
therefore,
We can easily develop an object oriented model for a problem.
Everyone can easily understand an object oriented model.
We can easily implement an object oriented model for a problem using any object
oriented language like c++ using its features1 like classes, inheritance, virtual functions
and so on…
01.5. What is an Object?
An object is,
       1. Something tangible (Ali, School, House, Car).
       2. Something conceptual (that can be apprehended intellectually for example
          time, date and so on…).
An object has,
       1. State (attributes)
       2. Well-defined behavior (operations)
1
    We will study these features in detail in this course
   3. Unique identity
01.6. Tangible and Intangible Objects
Examples of Tangible Objects:
Ali is a tangible object, having some characteristics (attributes) and behavior as given
below,
   Ali
   Characteristics (attributes)                     Behaviour (operations)
   Name                                             Walks
   Age                                              Eats
We will identify Ali using his name.
Car is also a tangible object having some characteristics (attributes) and behavior
given below,
   Car
   State (attributes)                               Behavior (operations)
   Color                                            Accelerate
   Model                                            Start Car
                                                    Change Gear
We can identify Car using its registration number
Examples of Intangible Objects (also called as conceptual objects):
Time is an intangible (conceptual) object
    Time
    State (attributes)                               Behavior (operations)
    Hours                                            Set/Get Hours
    Seconds                                          Set/Get Seconds
    Minutes                                          Set/Get Minutes
We will assign our own generated unique ID in the model for Time object
Date is also an intangible (conceptual) object
    State (attributes)                               Behavior (operations)
    Year                                             Set/Get Year
    Day                                              Set/Get Day
    Month                                            Set/Get Month
We will assign our own generated unique ID in the model for Date object.
01.7. Summary:
      Model is the abstraction of some real word scenario. It helps us to understand
       that scenario.
      Object oriented model of any scenario (problem) describes that scenario
       (problem) in the form of interacting objects.
      We use Object Orientation because it helps us in mapping real world problem
       in a programming language.
      Object Orientation is achieved using objects and their relationships.
      Properties of an object are described using its data members and behavior of an
       object is described using its functions.
      Objects may be tangible (physical) or intangible (also called conceptual or
       virtual).
      Generally when we have given a certain problem description, nouns in that
       problem description are candidates for becoming objects of our system.
      There may be more than one aspects of an object
      It is not necessary that every object has a specific role in implementation of a
       problem there may be some objects without any role, like school parking in our
       school.
      It is easier to develop programs using Object Oriented Programming because
       it is closer to real life.
     Lecture No.02
Lecture Contents
   1.   Information Hiding
   2.   Encapsulation
   3.   Interface
   4.   Implementation
   5.   Separation of Interface & Implementation
   6.   Messages
02.1. Information Hiding:
Information hiding is one of the most important principles of OOP inspired from real life
which says that all information should not be accessible to all persons. Private
information should only be accessible to its owner.
By Information Hiding we mean “Showing only those details to the outside world which
are necessary for the outside world and hiding all other details from the outside world.”
   Real Life Examples of Information Hiding
   1. Ali’s name and other personal information is stored in his brain we can’t access
      this information directly. For getting this information we need to ask Ali about
      it and it will be up to Ali how much details he would like to share with us.
   2. An email server may have account information of millions of people but it will
      share only our account information with us if we request it to send anyone else
      accounts information our request will be refused.
   3. A phone SIM card may store several phone numbers but we can’t read the
      numbers directly from the SIM card rather phone-set reads this information
      for us and if the owner of this phone has not allowed others to see the numbers
      saved in this phone we will not be able to see those phone numbers using phone.
In object oriented programming approach we have objects with their attributes and
behaviors that are hidden from other classes, so we can say that object oriented
programming follows the principle of information hiding.
In the perspective of Object Oriented Programming Information Hiding is,
        “Hiding the object details (state and behavior) from the users”
        Here by users we mean “an object” of another class that is calling functions of
        this class using the reference of this class object or it may be some other program
        in which we are using this class.
        Information Hiding is achieved in Object Oriented Programming using the
        following principles,
                      All information related to an object is stored within the object
                      It is hidden from the outside world
                      It can only be manipulated by the object itself
Advantages of Information Hiding
Following are two major advantages of information hiding,
It simplifies our Object Oriented Model:
As we saw earlier that our object oriented model only had objects and their interactions
hiding implementation details so it makes it easier for everyone to understand our
object oriented model.
It is a barrier against change propagation
As implementation of functions is limited to our class and we have only given the name
of functions to user along with description of parameters so if we change
implementation of function it doesn’t affect the object oriented model.
We can achieve information hiding using Encapsulation and Abstraction, so we see
these two concepts in detail now,
02.2. Encapsulation
   Encapsulation means “we have enclosed all the characteristics of an object in the object
   itself”
   Encapsulation and information hiding are much related concepts (information
   hiding is achieved using Encapsulation)
   We have seen in previous lecture that object characteristics include data members
   and behavior of the object in the form of functions.
   So we can say that Data and Behavior are tightly coupled inside an object and
   both the information structure and implementation details of its operations are
   hidden from the outer world.
   Examples of Encapsulation
   Consider the same example of object Ali of previous lecture we described it as
   follows,
              Ali
                   Characteristics
                     (attributes)
                        Name
                        Age
                    Behavior
                      (operations)
                       Walks
                       Eats
You can see that Ali stores his personal information in itself and its behavior is
also implemented in it.
Now it is up to object Ali whether he wants to share that information with outside
world or not. Same thing stands for its behavior if some other object inreal life
wants to use his behavior of walking it can not use it without the permission of Ali.
So we say that attributes and behavior of Ali are encapsulated in it.
Any other object don’t know about these things unless Ali share this information
with that object through an interface,
Same concept also applies to phone which has some data and behavior of showing
that data to user we can only access the information stored in the phoneif phone
interface allow us to do so.
Advantages of Encapsulation
The following are the main advantages of Encapsulation,
a. Simplicity and clarity
As all data and functions are stored in the objects so there is no data or function
around in program that is not part of any object and is this way it becomes very easy
to understand the purpose of each data member and function in an object.
b. Low complexity
As data members and functions are hidden in objects and each object has a
specific behavior so there is less complexity in code there will be no such
situations that a functions is using some other function and that functions is
using some other function.
c. Better understanding
Everyone will be able to understand whole scenario by simple looking into object
diagrams without any issue as each object has specific role and specific relation with
other objects.
Output :
Area = 30
// Java program to demonstrate encapsulation
class Encapsulate {
    // private variables declared
    // these can only be accessed by
    // public methods of class
    private String geekName;
    private int geekRoll;
    private int geekAge;
    // get method for age to access
    // private variable geekAge
    public int getAge() { return geekAge; }
    // get method for name to access
    // private variable geekName
    public String getName() { return geekName; }
    // get method for roll to access
    // private variable geekRoll
    public int getRoll() { return geekRoll; }
    // set method for age to access
    // private variable geekage
    public void setAge(int newAge) { geekAge = newAge; }
    // set method for name to access
    // private variable geekName
    public void setName(String newName)
    {
        geekName = newName;
    }
    // set method for roll to access
    // private variable geekRoll
    public void setRoll(int newRoll) { geekRoll = newRoll; }
}
public class TestEncapsulation {
  public static void main(String[] args)
  {
        Encapsulate obj = new Encapsulate();
        // setting values of the variables
        obj.setName("Harsh");
        obj.setAge(19);
        obj.setRoll(51);
        // Displaying values of the variables
        System.out.println("Geek's name: " + obj.getName());
        System.out.println("Geek's age: " + obj.getAge());
        System.out.println("Geek's roll: " + obj.getRoll());
        // Direct access of geekRoll is not possible
        // due to encapsulation
        // System.out.println("Geek's roll: " +
        // obj.geekName);
    }
}
Practice:
In this example program, we are creating a class Student and declare
variables stdName, stdRollNo, and stdId as private.
https://cisserv1.towson.edu/~cssecinj/modules/other-modules/build-the-
lab/build-the-lab-lab-module-1/encapsulation-java/
Generalization
       In OO models, some classes may have common characteristics.
       We extract these features into a new class and inherit original classes from this new
       class. There are many objects with common characteristics in object model. The
       common characteristics (attributes and behaviour) of all these objects are combined
       in a single general class. Base class encapsulates the idea of commonality of derived
       classes. Base class is general class representing common behaviour of all derived classes.
       This concept is known as Generalization.
       It reduces the redundancy and gives us reusability, using generalization our solution
       becomes less complex.
       In generalization there should be “Is a Kind of Relationship” (also called “Is A
       relationship”) between base and child classes.
 Common attributes
 Color vertices
 Common behaviour
 Set Color, Move
Example: Student Doctor and Teacher