OOSD Unit 1.4
OOSD Unit 1.4
LECTURE-1
Introduction:
Programmers write instructions in various programming languages to perform their computation
tasks such as:
(i) Machine level Language
(ii) Assembly level Language
(iii) High level Language
The first high-level programming languages were designed in the 1950s. Now there are dozens of
different languages, including Ada , Algol, BASIC, COBOL, C, C++, JAVA, FORTRAN, LISP,
Pascal, and Prolog. Such languages are considered high-level because they are closer to human
languages and farther from machine languages. In contrast, assembly languages are considered low-
level because they are very close to machine languages.
5
1 P.T.O
Procedure Oriented Programming Language
In the procedure oriented approach, the problem is viewed as sequence of things to be done such as
reading , calculation and printing.
Procedure oriented programming basically consist of writing a list of instruction or actions for the
computer to follow and organizing these instruction into groups known as functions.
Main program
6
2 P.T.O
LECTURE-2
Object A Object B
Data Data
Communication
Functions Functions
Object-Oriented Programming
(OOP) is a programming paradigm Object C
that relies on the concept of
classes and objects. It is used to
structure a software program into
simple, reusable pieces of code
Functions
blueprints (usually called classes),
which are used to create individual
instances of objects.
Data
7
3 P.T.O
Element of Object Oriented Approach
The object-oriented approach revolves around organizing software design around data, or
objects, rather than functions and logic. Here are the key elements:
1.Classes: A blueprint or template for creating objects. It defines attributes (data) and methods
(functions) that the objects created from the class will have.
Example: In a class `Car`, attributes might be `color`, `model`, and `year`, while
methods might be `start()` and `drive()`.
2. Objects: Instances of a class. Once a class is defined, you can create objects from that
class. Each object can have its own state but shares the class's structure.
Example: `myCar = Car("red", "Toyota", 2020)` creates an object from the `Car` class.
3. Encapsulation: Bundling the data (attributes) and the methods that operate on the data
within a single unit (class) and restricting access to some of the object’s components. It
protects an object's internal state and only allows modification through public methods.
Example: Using private attributes (e.g., `_speed`) and public getter/setter methods (e.g.,
`get_speed()`).
4. Abstraction: Hiding the complexity of certain processes and exposing only the essential
features. It allows users to interact with the object without needing to know the internal
implementation details.
Example: A car’s `drive()` method abstracts the complex mechanics of operating a car
engine.
5. Inheritance: Mechanism by which one class (child) can inherit properties and methods from
another class (parent). This promotes code reuse and establishes a hierarchy between classes.
Example: A class `ElectricCar` can inherit from the `Car` class, adding additional attributes
like `battery_life` while reusing the attributes and methods of `Car`.
6. Polymorphism: Ability of different classes to respond to the same method call in different
ways. This can happen through method overriding (redefining a parent class's method in the
child class) or method overloading (multiple methods with the same name but different
parameters).
Example: Both `Car` and `ElectricCar` may have a `drive()` method, but they can
implement it differently.
4
Element of Object Oriented Approach
7. Composition: A design principle where one class contains an instance of another class,
allowing objects to be built from smaller, reusable parts.
Example: A `Garage` class might have a list of `Car` objects as its components.
These elements help in building scalable, maintainable, and modular software by modeling
real-world entities and interactions.
In Object-Oriented Programming (OOP), function and behavior are not considered primary
elements but are intrinsic to how objects and classes operate:
1. Functions(or methods in OOP terminology) are part of classes and objects. They define the
operations or actions that an object can perform. Methods allow objects to interact with other
objects or manipulate their own data. However, they are not considered a core "element" of
OOP in the same way as classes, objects, inheritance, etc., but they are crucial to the
functionality of those elements.
2. Behavior refers to how an object reacts to messages or function calls and interacts with other
objects. It's often described through the methods defined in a class. While behavior is a
consequence of OOP (i.e., what objects do), it is not considered a formal element like
encapsulation or inheritance.
In summary, functions (methods) are a key part of implementing OOP, and behavior is the
outcome of how objects interact and respond, but neither are core "elements" of OOP
themselves. They are more like properties or outcomes of objects and classes.
5
Features of Object-Oriented Approach
1. Encapsulation
Definition: Encapsulation involves bundling the data (attributes) and methods
(functions) that operate on that data within a class, while restricting access to some of
the object’s components.
Example: Private variables in a class that are accessed through public methods like
`getName()`.
2. Abstraction
Definition: Abstraction focuses on simplifying complex systems by modeling only
essential details, leaving out the intricate underlying implementation.
Example: A `Car` class could provide a `drive()` method without exposing the
complexities of the engine mechanics.
3. Inheritance
Definition: Inheritance allows one class (child or subclass) to inherit attributes and
methods from another class (parent or superclass). This promotes code reuse and
helps model hierarchical relationships.
Types of Inheritance:
Single Inheritance: A class inherits from one superclass.
Multiple Inheritance: A class inherits from more than one superclass (though not all
languages support this, such as Java).
Example: `FlyingCar` class inherits from both `Car` and `Airplane` classes.
Multilevel Inheritance: A class inherits from a class that is itself derived from another
class.
6
Hierarchical Inheritance: Multiple classes inherit from the same superclass.
Example: A `FlyingCar` class might inherit attributes and behaviors from both a
`Car` and an `Airplane` class, combining different inheritance styles.
Benefit: It promotes code reuse and establishes clear relationships between classes.
Example: A `Truck` class can inherit common properties like `wheels` and `engine`
from a `Vehicle` superclass.
Benefit: It promotes flexibility by allowing the same interface to handle different types
of objects.
Example: Both `Dog` and `Bird` can inherit from `Animal` and implement their own
`makeSound()` method, so calling `makeSound()` on each object behaves differently.
5. Modularity
Definition: Modularity refers to breaking down the program into self-contained units
(classes/objects) that can be developed and tested independently.
6. Message Passing
Definition: In OOP, objects communicate with each other through method calls or
message passing. One object sends data to another object by invoking methods, which
process the data.
7
Example: A `User` object calling a `sendMessage()` method on a `Chat` object to
send a message.
Example: A variable of type `Animal` may refer to a `Dog` or `Cat` object, and the
correct version of `makeSound()` is determined at runtime.
8. Reusability
Definition: OOP encourages the reuse of code across different parts of a project or
even across different projects.
Example: A `Logger` class can be reused across various projects that require logging
functionality.
Benefit: It makes complex software easier to maintain and extend over time.
---
8
Object modelling technique:
Object Modelling Technique (OMT) is a method used in object-oriented software
development to model and design systems. It focuses on representing systems as a
collection of objects that interact with one another.
When discussing object-oriented modeling (OOM), three primary types of models are
commonly used to represent different aspects of a system. These models work together
to give a holistic view of how the system is structured, behaves, and interacts. The three
types are:
What it Includes:
Relationships: How objects interact or are related to each other (e.g., association,
aggregation, composition).
Class Diagrams: Used to visualize the relationships between classes and objects in a
system.
Example:
In a **Library Management System**, the object model would define classes such as
`Book`, `Member`, and `Loan`, their attributes like `title`, `name`, `dueDate`, and
their relationships like “a `Member` borrows a `Book`.”
Key Diagrams:
Class Diagrams
Object Diagrams
9
What it Includes:
Interactions between objects: How messages are passed between objects (methods
and functions) in response to events.
State Transitions: How objects change from one state to another due to events or
methods being invoked.
-Example:
In the same **Library Management System**, the dynamic model would show how a
`Member` object sends a `borrow()` message to a `Book` object, changing its state
from `available` to `borrowed`.
Key Diagrams:
Activity Diagrams: Represent workflows and the dynamic behavior of the system.
State Diagrams: Show how objects move between different states based on events.
What it Includes:
Use Cases: Descriptions of the functional requirements of the system from the user's
perspective.
Actors: External entities (people or systems) that interact with the system.
Scenarios: Specific paths or processes that describe how actors use the system to
accomplish tasks.
Example:
Key Diagrams Use Case Diagrams: Depict the system's functionality by representing
use cases, actors, and their interaction.
10
Importance of Model:
Models play a crucial role in software development and system design, offering several
key benefits. Here’s a detailed explanation of the importance of models in object-
oriented modeling and software engineering:
2. Improved Communication
Requirements Gathering: Functional models (e.g., use case diagrams) help in gathering
and confirming requirements by showing what the system will do and how it will interact
with users and other systems.
Conceptualizing System Structure: Object models help define the overall structure of
the system, including classes, objects, attributes, and relationships. This facilitates a
deeper understanding of how different parts of the system will interact.
Modularity: Models promote modular design, allowing different parts of the system to
be designed and developed independently. This increases flexibility and makes future
enhancements or changes easier.
11
4. Easier Maintenance and Scalability
Scalability: Object models often use principles like inheritance and polymorphism,
which allow systems to scale efficiently. New features can be added with minimal
impact on existing code by extending classes or objects.
Error Detection: Models help identify potential issues and design flaws early in the
development process. By visualizing the system, developers can catch problems such
as mismatched data types, missing relationships, or unhandled edge cases before
writing any code.
Risk Reduction: By testing and validating the models, potential risks or challenges can
be identified early, reducing the chances of expensive errors or rework later in the
project lifecycle.
6. Reusability
Reusable Components: Object-oriented models allow for the reuse of classes, objects,
and patterns across different parts of the system or even in different projects. This
reduces duplication of effort and speeds up development.
Libraries and Frameworks: Once modeled and developed, classes can be reused as
part of libraries or frameworks in future projects, saving time and improving
consistency.
12
8. Support for Automation and Code Generation
Testing and Simulation: Models can also be used in automated testing and simulation
environments to verify the behavior of the system before actual implementation.
Principle of Model:
The principles of modeling are essential guidelines that help ensure that models are
effective, useful, and well-constructed. In object-oriented modeling, these principles
serve as the foundation for creating meaningful representations of systems. Here’s a
detailed explanation of key modeling principles:
1. Abstraction
Importance: This allows modelers to manage complexity by breaking down systems into
smaller, manageable parts. Abstraction hides unnecessary implementation details and
provides a clear, high-level view of the system.
2. Encapsulation
13
Example: A `BankAccount` class may encapsulate its balance attribute, allowing
external entities to interact with the account only through methods like `deposit()` or
`withdraw()`, rather than accessing the balance directly.
3. Modularity
Example: In a **Shopping Cart System**, the system may be divided into modules like
`Cart`, `Product`, `Payment`, and `User`. Each module can be independently
developed and reused in other systems if needed.
4. Hierarchy
Example: A **Vehicle** superclass might have common attributes like `make` and
`model`, while specific subclasses like `Car`, `Truck`, and `Motorcycle` inherit
those properties and define their own unique attributes or behaviors.
5. Reusability
14
6. Consistency
Definition: Consistency refers to ensuring that all parts of the model follow the same
rules, conventions, and logic across the system.
Importance: Consistent models are easier to understand, maintain, and debug. They
minimize confusion and ensure that the system behaves predictably.
Example: If the model uses camelCase for method names (e.g., `getUserDetails()`), it
should consistently use camelCase throughout the system to maintain uniformaly.
In C++, the identity of an object is tied to its memory address. Two objects of the same class or type may have the
same state (data members with identical values), but their identities are distinct because they reside at different
memory addresses.
15
Unified Modeling Language (UML) is a standardized visual modeling language that is a versatile, flexible,
and user-friendly method for visualizing a system’s design. Software system artifacts can be specified,
visualized, built, and documented with the use of UML.
The UML is a graphical language for visualizing, specifying, constructing, and documenting the artifacts
of a software-intensive system. The UML gives you a standard way to write a system's blueprints,
covering conceptual things, such as business processes and system functions, as well as concrete things,
such as classes written in a specific programming language, database schemas, and reusable software
components.
Importance of modeling
A model is a simplification of reality. A model provides the blueprints of a system. A
model may be structural, emphasizing the organization of the system, or it may be
behavioral, emphasizing the dynamics of the system.
Aims of modeling
We build models so that we can better understand the system we are developing.
Principles of Modeling
There are four basic principles of model
1. The choice of what models to create has a profound influence on how a problem
is attacked and how a solution is shaped.
2. Every model may be expressed at different levels of precision.
3. The best models are connected to reality.
4. No single model is sufficient. Every nontrivial system is best approached through
a small set of nearly independent models.
[Type here]
16
• In this approach, the main building block of all software is the procedure or
function.
• This view leads developers to focus on issues of control and the decomposition of
larger algorithms into smaller ones.
• As requirements change and the system grows, systems built with an algorithmic
focus turn out to be very hard to maintain.
Object-Oriented Perspective
• The contemporary view of software development takes an object-oriented
perspective.
• In this approach, the main building block of all software systems is the object or
class.
• A class is a description of a set of common objects.
• Every object has identity, state, and behavior.
• Object-oriented development provides the conceptual foundation for assembling
systems out of components using technology such as Java Beans or COM+.
An Overview of UML
• The Unified Modeling Language is a standard language for writing software
blueprints. The UML may be used to visualize, specify, construct, and document
the artifacts of a software-intensive system.
• The UML is appropriate for modeling systems ranging from enterprise
information systems to distributed Web-based applications and even to hard real
time embedded systems. It is a very expressive language, addressing all the views
needed to develop and then deploy such systems.
[Type here]
17
Conceptual model of UML
To understand the UML, you need to form a conceptual model of the language, and
this requires learning three major elements:
Basic building blocks of the UML: Vocabulary of the UML can be defined
1. Things
2. Relationships
3. Diagrams
Structural things are the nouns of UML models. These are the mostly static parts of a
model, representing elements that are either conceptual or physical. In all, there are
seven kinds of structural things.
1. Classes
I CAN CC U
2. Interfaces
3. Collaborations
4. Use cases
5. Active classes
6. Components
7. Nodes
Class
• It is a description of a set of objects that share the same attributes, operations,
relationships, and semantics.
• A class implements one or more interfaces.
• Graphically, a class is rendered as a rectangle, usually including its name,
attributes, and operations.
Fig: Class
[Type here]
18
Interface
• Interface is a collection of operations that specify a service of a class or
component.
• An interface therefore describes the externally visible behavior of that element.
• An interface might represent the complete behavior of a class or component or
only a part of that behavior.
• An interface is rendered as a circle together with its name. An interface rarely
stands alone. Rather, it is typically attached to the class or component that
realizes the interface.
IUnkonwn
Fig: Interface
Collaboration
• It defines an interaction and is a society of roles and other elements that work
together to provide some cooperative behavior that's bigger than the sum of all
the elements.
• Therefore, collaborations have structural, as well as behavioral, dimensions.
• A given class might participate in several collaborations.
• Graphically, a collaboration is rendered as an ellipse with dashed lines, usually
including only its name.
Fig: Collaboration
Use case
• Use case is a description of set of sequence of actions that a system performs that
yields an observable result of value to a particular actor
• Use case is used to structure the behavioral things in a model.
• A use case is realized by a collaboration. Graphically, a use case is rendered as an
ellipse with solid lines, usually including only its name
Active class
• It is just like a class except that its objects represent elements whose behavior is
concurrent with other elements.
• Graphically, an active class is rendered just like a class, but with heavy lines,
usually including its name, attributes, and operations.
[Type here]
19
Fig: Active class
Component
• It is a physical and replaceable part of a system that conforms to and provides the
realization of a set of interfaces.
• Graphically, a component is rendered as a rectangle with tabs.
Fig: Component
Node
• It is a physical element that exists at run time and represents a computational
resource, generally having at least some memory and, often, processing
capability.
• Graphically, a node is rendered as a cube, usually including only its name.
Fig: Node
Behavioral Things
• They are the dynamic parts of UML models. These are the verbs of a model,
representing behavior over time and space.
• In all, there are two primary kinds of behavioral things.
Interaction
State machine
Interaction
• Interaction is a behavior that comprises a set of messages exchanged among a set
of objects within a particular context to accomplish a specific purpose
• An interaction involves a number of other elements, including messages, action
sequences and links
• Graphically a message is rendered as a directed line, almost always including the
name of its operation
Fig: Message
State Machine
• State machine is a behavior that specifies the sequences of states an object or an
interaction goes through during its lifetime in response to events, together with its
responses to those events
[Type here]
20
• State machine involves a number of other elements, including states, transitions,
events and activities
• Graphically, a state is rendered as a rounded rectangle, usually including its name
and its substates
Package
• A package is a general-purpose mechanism for organizing elements into groups.
Structural things, behavioral things, and even other grouping things may be placed in
a package
• Graphically, a package is rendered as a tabbed folder, usually including only its name
and, sometimes, its contents.
Fig: Package
Annotational things
• These are the explanatory parts of UML models. These are the comments you may
apply to describe about any element in a model.
• There is one primary kind of Annotational thing, namely, note.
Note
• A note is simply a symbol for rendering constraints and comments attached to an
element or a collection of elements.
• Graphically, a note is rendered as a rectangle with a dog-eared corner, together with a
textual or graphical comment.
Fig: Note
Relationships in the UML: There are four kinds of relationships in the UML:
1. Dependency
2. Association
3. Generalization
4. Realization
[Type here]
21
Dependency
Fig: Dependency
Association
• Association is a structural relationship that describes a set of links, a link being a
connection among objects.
• Graphically an association is rendered as a solid line, possibly directed, occasionally
including a label, and often containing other adornments, such as multiplicity and
role names.
Fig: Association
Generalization
• Generalization is a special kind of association, representing a structural relationship
between a whole and its parts.
• Graphically, a generalization relationship is rendered as a solid line with a hollow
arrowhead pointing to the parent.
Fig: Generalization
Realization
• Realization is a semantic relationship between classifiers, wherein one classifier
specifies a contract that another classifier guarantees to carry out.
• Graphically a realization relationship is rendered as a cross between a generalization
and a dependency relationship.
Fig: Realization
[Type here]
22
• Class diagram
• Object diagram
• Use case diagram
• Sequence diagram
• Collaboration diagram
• State chart diagram
• Activity diagram
• Component diagram
• Deployment diagram
Class diagram
• A class diagram shows a set of classes, interfaces, and collaborations and their
relationships.
• Class diagrams that include active classes address the static process view of a system.
Object diagram
• Object diagrams represent static snapshots of instances of the things found in
class diagrams
• These diagrams address the static design view or static process view of a system
• An object diagram shows a set of objects and their relationships
Interaction Diagrams
• Both sequence diagrams and collaboration diagrams are kinds of interaction
diagrams
• Interaction diagrams address the dynamic view of a system
• A sequence diagram is an interaction diagram that emphasizes the time-ordering
of messages
• A collaboration diagram is an interaction diagram that emphasizes the structural
organization of the objects that send and receive messages
• Sequence diagrams and collaboration diagrams are isomorphic, meaning that you
can take one and transform it into the other.
Statechart diagram
• A state chart diagram shows a state machine, consisting of states, transitions,
events, and activities
• State chart diagrams address the dynamic view of a system
• They are especially important in modeling the behavior of an interface, class, or
collaboration and emphasize the event-ordered behavior of an object.
Activity diagram
An activity diagram is a special kind of a state chart diagram that shows the flow
from activity to activity within a system
Activity diagrams address the dynamic view of a system
They are especially important in modeling the function of a system and
emphasize the flow of control among objects.
[Type here]
23
Component diagram
• A component diagram shows the organizations and dependencies among a set of
components.
• Component diagrams address the static implementation view of a system
• They are related to class diagrams in that a component typically maps to one or
more classes, interfaces, or collaborations.
Deployment diagram
• A deployment diagram shows the configuration of run-time processing nodes and
the components that live on them
• Deployment diagrams address the static deployment view of an architecture
#include <iostream>
using namespace std;
class Example {
public:
int value;
Example(int val) : value(val) {}
};
int main() {
Example obj1(10); // Object 1
Example obj2(10); // Object 2 with the same value
if (&obj1 == &obj2) {
cout << "obj1 and obj2 have the same identity (same address)." << endl;
} else {
cout << "obj1 and obj2 have different identities (different addresses)." << endl;
}
return 0;
}
[Type here]
24
from java T point
Architecture Of UML:
• A system's architecture is perhaps the most important artifact that can be used to
manage these different viewpoints and so control the iterative and incremental
development of a system throughout its life cycle.
• Architecture is the set of significant decisions about
• The organization of a software system
• The selection of the structural elements and their interfaces by which the system is
composed
• Their behavior, as specified in the collaborations among those elements
• The composition of these structural and behavioral elements into progressively larger
subsystems
• The architectural style that guides this organization: the static and dynamic elements
and their interfaces, their collaborations, and their composition.
• Software architecture is not only concerned with structure and behavior, but also with
usage, functionality, performance, resilience, reuse, comprehensibility, economic and
technology constraints and trade-offs, and aesthetic concerns.
25
Fig: Modeling a System's Architecture
Design View
• The design view of a system encompasses the classes, interfaces, and collaborations
that form the vocabulary of the problem and its solution.
• This view primarily supports the functional requirements of the system, meaning the
services that the system should provide to its end users.
Process View
• The process view of a system encompasses the threads and processes that form the
system's concurrency and synchronization mechanisms.
• This view primarily addresses the performance, scalability, and throughput of the
system.
Implementation View
• The implementation view of a system encompasses the components and files that are
used to assemble and release the physical system.
• This view primarily addresses the configuration management of the system's releases,
made up of somewhat independent components and files that can be assembled in
various ways to produce a running system.
26
Deployment View
• The deployment view of a system encompasses the nodes that form the system's
hardware topology on which the system executes.
• This view primarily addresses the distribution, delivery, and installation of the parts
that make up the physical system.
27