Object Oriented Analysis and Design Class Notes
Object Oriented Analysis and Design Class Notes
Object Oriented Analysis and Design Class Notes
A Brief History
The object-oriented paradigm took its shape from the initial concept of a new programming
approach, while the interest in design and analysis methods came much later.
The first object–oriented language was Simula (Simulation of real systems) that was
developed in 1960 by researchers at the Norwegian Computing Center.
In 1970, Alan Kay and his research group at Xerox PARK created a personal computer
named Dynabook and the first pure object-oriented programming language (OOPL) -
Smalltalk, for programming the Dynabook.
In the 1980s, Grady Booch published a paper titled Object Oriented Design that mainly
presented a design for the programming language, Ada. In the ensuing editions, he
extended his ideas to a complete object–oriented design method.
In the 1990s, Coad incorporated behavioral ideas to object-oriented methods.
The other significant innovations were Object Modelling Techniques (OMT) by James
Rumbaugh and Object-Oriented Software Engineering (OOSE) by Ivar Jacobson.
Object-Oriented Analysis
The main difference between object-oriented analysis and other forms of analysis is that in
object-oriented approach, requirements are organized around objects, which integrate both data
and functions. They are modelled after real-world objects that the system interacts with. In
traditional analysis methodologies, the two aspects - functions and data - are considered
separately.
Grady Booch has defined OOA as, “Object-oriented analysis is a method of analysis that
examines requirements from the perspective of the classes and objects found in the vocabulary of
the problem domain”.
Identifying objects
Organizing the objects by creating object model diagram
Defining the internals of the objects, or object attributes
Defining the behavior of the objects, i.e., object actions
Describing how the objects interact
The common models used in OOA are use cases and object models.
Page 1 of 72
Object-Oriented Design
Grady Booch has defined object-oriented design as “a method of design encompassing the
process of object-oriented decomposition and a notation for depicting both logical and physical
as well as static and dynamic models of the system under design”.
Object-Oriented Programming
Some examples of object-oriented programming languages are C++, Java, Smalltalk, Delphi, C#,
Perl, Python, Ruby, and PHP.
Page 2 of 72
OOAD - Object Model
The object model visualizes the elements in a software application in terms of objects. In this
chapter, we will look into the basic concepts and terminologies of object–oriented systems.
The concepts of objects and classes are intrinsically linked with each other and form the
foundation of object–oriented paradigm.
Object
Objects can be modelled according to the needs of the application. An object may have a
physical existence, like a customer, a car, etc.; or an intangible conceptual existence, like a
project, a process, etc.
Class
A class represents a collection of objects having same characteristic properties that exhibit
common behavior. It gives the blueprint or description of the objects that can be created from it.
Creation of an object as a member of a class is called instantiation. Thus, object is an instance of
a class.
A set of attributes for the objects that are to be instantiated from the class. Generally,
different objects of a class have some difference in the values of the attributes. Attributes
are often referred as class data.
A set of operations that portray the behavior of the objects of the class. Operations are
also referred as functions or methods.
Example
Page 3 of 72
Let us consider a simple class, Circle, that represents the geometrical figure circle in a two–
dimensional space. The attributes of this class can be identified as follows:
During instantiation, values are assigned for at least some of the attributes. If we create an object
my_circle, we can assign values like x-coord : 2, y-coord : 3, and a : 4 to depict its state. Now, if
the operation scale() is performed on my_circle with a scaling factor of 2, the value of the
variable a will become 8. This operation brings a change in the state of my_circle, i.e., the object
has exhibited certain behavior.
Encapsulation
Encapsulation is the process of binding both attributes and methods together within a class.
Through encapsulation, the internal details of a class can be hidden from outside. It permits the
elements of the class to be accessed from outside only through the interface provided by the
class.
Data Hiding
Typically, a class is designed such that its data (attributes) can be accessed only by its class
methods and insulated from direct outside access. This process of insulating an object’s data is
called data hiding or information hiding.
Example
In the class Circle, data hiding can be incorporated by making attributes invisible from outside
the class and adding two more methods to the class for accessing class data, namely:
Here the private data of the object my_circle cannot be accessed directly by any method that is
not encapsulated within the class Circle. It should instead be accessed through the methods
setValues() and getValues().
Page 4 of 72
Message Passing
Inheritance
Inheritance is the mechanism that permits new classes to be created out of existing classes by
extending and refining its capabilities. The existing classes are called the base classes/parent
classes/super-classes, and the new classes are called the derived classes/child classes/subclasses.
The subclass can inherit or derive the attributes and methods of the super-class(es) provided that
the super-class allows so. Besides, the subclass may add its own attributes and methods and may
modify any of the super-class methods. Inheritance defines an “is – a” relationship.
Example
From a class Mammal, a number of classes can be derived such as Human, Cat, Dog, Cow, etc.
Humans, cats, dogs, and cows all have the distinct characteristics of mammals. In addition, each
has its own particular characteristics. It can be said that a cow “is – a” mammal.
Types of Inheritance:
Page 5 of 72
Polymorphism
Polymorphism is originally a Greek word that means the ability to take multiple forms. In object-
oriented paradigm, polymorphism implies using operations in different ways, depending upon
the instance they are operating upon. Polymorphism allows objects with different internal
Page 6 of 72
structures to have a common external interface. Polymorphism is particularly effective while
implementing inheritance.
Example
Let us consider two classes, Circle and Square, each with a method findArea(). Though the name
and purpose of the methods in the classes are same, the internal implementation, i.e., the
procedure of calculating area is different for each class. When an object of class Circle invokes
its findArea() method, the operation finds the area of the circle without any conflict with the
findArea() method of the Square class.
Generalization
In the generalization process, the common characteristics of classes are combined to form a class
in a higher level of hierarchy, i.e., subclasses are combined to form a generalized super-class. It
represents an “is – a – kind – of” relationship. For example, “car is a kind of land vehicle”, or
“ship is a kind of water vehicle”.
Specialization
Specialization is the reverse process of generalization. Here, the distinguishing features of groups
of objects are used to form specialized classes from existing classes. It can be said that the
subclasses are the specialized versions of the super-class.
Page 7 of 72
Link
A link represents a connection through which an object collaborates with other objects.
Rumbaugh has defined it as “a physical or conceptual connection between objects”. Through a
link, one object may invoke the methods or navigate through another object. A link depicts the
relationship between two or more objects.
Association
Association is a group of links having common structure and common behavior. Association
depicts the relationship between objects of one or more classes. A link can be defined as an
instance of an association.
Degree of an Association
Degree of an association denotes the number of classes involved in a connection. Degree may be
unary, binary, or ternary.
Aggregation or Composition
Example
In the relationship, “a car has–a motor”, car is the whole object or the aggregate, and the motor is
a “part–of” the car. Aggregation may denote:
Page 8 of 72
Physical containment : Example, a computer is composed of monitor, CPU, mouse,
keyboard, and so on.
Conceptual containment : Example, shareholder has–a share.
Now that we have gone through the core concepts pertaining to object orientation, it would be
worthwhile to note the advantages that this model has to offer.
Page 9 of 72
Phases in Object-Oriented Software Development
The major phases of software development using object–oriented methodology are object-
oriented analysis, object-oriented design, and object-oriented implementation.
Object–Oriented Analysis
In this stage, the problem is formulated, user requirements are identified, and then a model is
built based upon real–world objects. The analysis produces models on how the desired system
should function and how it must be developed. The models do not include any implementation
details so that it can be understood and examined by any non–technical application expert.
Object–Oriented Design
Object-oriented design includes two main stages, namely, system design and object design.
System Design
In this stage, the complete architecture of the desired system is designed. The system is
conceived as a set of interacting subsystems that in turn is composed of a hierarchy of interacting
objects, grouped into classes. System design is done according to both the system analysis model
and the proposed system architecture. Here, the emphasis is on the objects comprising the system
rather than the processes in the system.
Object Design
In this phase, a design model is developed based on both the models developed in the system
analysis phase and the architecture designed in the system design phase. All the classes required
are identified. The designer decides whether:
The associations between the identified classes are established and the hierarchies of classes are
identified. Besides, the developer designs the internal details of the classes and their associations,
i.e., the data structure for each attribute and the algorithms for the operations.
In this stage, the design model developed in the object design is translated into code in an
appropriate programming language or software tool. The databases are created and the specific
hardware requirements are ascertained. Once the code is in shape, it is tested using specialized
techniques to identify and remove the errors in the code.
Page 10 of 72
Principles of Object-Oriented Systems
The conceptual framework of object–oriented systems is based upon the object model. There are
two categories of elements in an object-oriented system:
Major Elements : By major, it is meant that if a model does not have any one of these elements,
it ceases to be object oriented. The four major elements are:
Abstraction
Encapsulation
Modularity
Hierarchy
Minor Elements : By minor, it is meant that these elements are useful, but not indispensable part
of the object model. The three minor elements are:
Typing
Concurrency
Persistence
Abstraction
Abstraction means to focus on the essential features of an element or object in OOP, ignoring its
extraneous or accidental properties. The essential features are relative to the context in which the
object is being used.
“An abstraction denotes the essential characteristics of an object that distinguish it from all other
kinds of objects and thus provide crisply defined conceptual boundaries, relative to the
perspective of the viewer.”
Example : When a class Student is designed, the attributes enrolment_number, name, course,
and address are included while characteristics like pulse_rate and size_of_shoe are eliminated,
since they are irrelevant in the perspective of the educational institution.
Encapsulation
Encapsulation is the process of binding both attributes and methods together within a class.
Through encapsulation, the internal details of a class can be hidden from outside. The class has
methods that provide user interfaces by which the services provided by the class may be used.
Page 11 of 72
Modularity
“Modularity is the property of a system that has been decomposed into a set of cohesive and
loosely coupled modules.”
Hierarchy
Typing
According to the theories of abstract data type, a type is a characterization of a set of elements. In
OOP, a class is visualized as a type having properties distinct from any other types. Typing is the
enforcement of the notion that an object is an instance of a single class or type. It also enforces
that objects of different types may not be generally interchanged; and can be interchanged only
in a very restricted manner if absolutely required to do so.
Strong Typing : Here, the operation on an object is checked at the time of compilation,
as in the programming language Eiffel.
Weak Typing : Here, messages may be sent to any class. The operation is checked only
at the time of execution, as in the programming language Smalltalk.
Page 12 of 72
Concurrency
In an object-oriented environment, there are active and inactive objects. The active objects have
independent threads of control that can execute concurrently with threads of other objects. The
active objects synchronize with one another as well as with purely sequential objects.
Persistence
An object occupies a memory space and exists for a particular period of time. In traditional
programming, the lifespan of an object was typically the lifespan of the execution of the program
that created it. In files or databases, the object lifespan is longer than the duration of the process
creating the object. This property by which an object continues to exist even after its creator
ceases to exist is known as persistence.
In the system analysis or object-oriented analysis phase of software development, the system
requirements are determined, the classes are identified and the relationships among classes are
identified.
The three analysis techniques that are used in conjunction with each other for object-oriented
analysis are object modelling, dynamic modelling, and functional modelling.
Object Modelling
Object modelling develops the static structure of the software system in terms of objects. It
identifies the objects, the classes into which the objects can be grouped into and the relationships
between the objects. It also identifies the main attributes and operations that characterize each
class.
Page 13 of 72
Define the operations that should be performed on the classes
Review glossary
Dynamic Modelling
After the static behavior of the system is analyzed, its behavior with respect to time and external
changes needs to be examined. This is the purpose of dynamic modelling.
Dynamic Modelling can be defined as “a way of describing how an individual object responds to
events, either internal events triggered by other objects, or external events triggered by the
outside world”.
Functional Modelling
Functional Modelling is the final component of object-oriented analysis. The functional model
shows the processes that are performed within an object and how the data changes as it moves
between methods. It specifies the meaning of the operations of object modelling and the actions
of dynamic modelling. The functional model corresponds to the data flow diagram of traditional
structured analysis.
Feasibility Study
Requirement Analysis and Specification
System Design
Page 14 of 72
Implementation
Post-implementation Review
Now, we will look at the relative advantages and disadvantages of structured analysis approach
and object-oriented analysis approach.
It allows effective management of software All the interfaces between the objects cannot be
complexity by the virtue of modularity. represented in a single diagram.
It is based upon functionality. The overall purpose is The initial cost of constructing the system
Page 15 of 72
identified and then functional decomposition is done
is high, since the whole system needs to
for developing the software. The emphasis not only
be designed at once leaving very little
gives a better understanding of the system but also
option to add functionality later.
generates more complete systems.
The specifications in it are written in simple English It does not support reusability of code. So,
language, and hence can be more easily analyzed by the time and cost of development is
non-technical personnel. inherently high.
Dynamic Modeling
The dynamic model represents the time–dependent aspects of a system. It is concerned with the
temporal changes in the states of the objects in a system. The main concepts are:
State, which is the situation at a particular condition during the lifetime of an object.
Transition, a change in the state
Event, an occurrence that triggers transitions
Action, an uninterrupted and atomic computation that occurs due to some event, and
Concurrency of transitions.
A state machine models the behavior of an object as it passes through a number of states in its
lifetime due to some events as well as the actions occurring due to the events. A state machine is
graphically represented through a state transition diagram.
State
The state is an abstraction given by the values of the attributes that the object has at a particular
time period. It is a situation occurring for a finite time period in the lifetime of an object, in
which it fulfils certain conditions, performs certain activities, or waits for certain events to occur.
In state transition diagrams, a state is represented by rounded rectangles.
Parts of a state
Name : A string differentiates one state from another. A state may not have any name.
Entry/Exit Actions : It denotes the activities performed on entering and on exiting the
state.
Internal Transitions : The changes within a state that do not cause a change in the state.
Sub–states : States within states.
Page 16 of 72
Initial and Final States
The default starting state of an object is called its initial state. The final state indicates the
completion of execution of the state machine. The initial and the final states are pseudo-states,
and may not have the parts of a regular state except name. In state transition diagrams, the initial
state is represented by a filled black circle. The final state is represented by a filled black circle
encircled within another unfilled black circle.
Transition
A transition denotes a change in the state of an object. If an object is in a certain state when an
event occurs, the object may perform certain activities subject to specified conditions and change
the state. In this case, a state−transition is said to have occurred. The transition gives the
relationship between the first state and the new state. A transition is graphically represented by a
solid directed arc from the source state to the destination state.
Example
Suppose a person is taking a taxi from place X to place Y. The states of the person may be:
Waiting (waiting for taxi), Riding (he has got a taxi and is travelling in it), and Reached (he has
reached the destination). The following figure depicts the state transition.
Events
Page 17 of 72
Events are some occurrences that can trigger state transition of an object or a group of objects.
Events have a location in time and space but do not have a time period associated with it. Events
are generally associated with some actions.
Examples of events are mouse click, key press, an interrupt, stack overflow, etc.
Events that trigger transitions are written alongside the arc of transition in state diagrams.
Example
Considering the example shown in the above figure, the transition from Waiting state to Riding
state takes place when the person gets a taxi. Likewise, the final state is reached, when he
reaches the destination. These two occurrences can be termed as events Get_Taxi and
Reach_Destination. The following figure shows the events in a state machine.
External events are those events that pass from a user of the system to the objects within the
system. For example, mouse click or key−press by the user are external events.
Internal events are those that pass from one object to another object within a system. For
example, stack overflow, a divide error, etc.
Deferred Events
Deferred events are those which are not immediately handled by the object in the current state
but are lined up in a queue so that they can be handled by the object in some other state at a later
time.
Event Classes
Event class indicates a group of events with common structure and behavior. As with classes of
objects, event classes may also be organized in a hierarchical structure. Event classes may have
attributes associated with them, time being an implicit attribute. For example, we can consider
the events of departure of a flight of an airline, which we can group into the following class:
Page 18 of 72
Flight_Departs (Flight_No, From_City, To_City, Route)
Actions
Activity
Activity is an operation upon the states of an object that requires some time period. They are the
ongoing executions within a system that can be interrupted. Activities are shown in activity
diagrams that portray the flow from one activity to another.
Action
An action is an atomic operation that executes as a result of certain events. By atomic, it is meant
that actions are un-interruptible, i.e., if an action starts executing, it runs into completion without
being interrupted by any event. An action may operate upon an object on which an event has
been triggered or on other objects that are visible to this object. A set of actions comprise an
activity.
Entry action is the action that is executed on entering a state, irrespective of the transition that led
into it.
Likewise, the action that is executed while leaving a state, irrespective of the transition that led
out of it, is called an exit action.
Scenario
There are two primary diagrams that are used for dynamic modelling:
Interaction Diagrams
Interaction diagrams describe the dynamic behavior among different objects. It comprises of a
set of objects, their relationships, and the message that the objects send and receive. Thus, an
interaction models the behavior of a group of interrelated objects. The two types of interaction
diagrams are:
Page 19 of 72
Collaboration Diagram : It represents the structural organization of objects that send
and receive messages through vertices and arcs.
State transition diagrams or state machines describe the dynamic behavior of a single object. It
illustrates the sequences of states that an object goes through in its lifetime, the transitions of the
states, the events and conditions causing the transition and the responses due to the events.
Concurrency of Events
System Concurrency
Here, concurrency is modelled in the system level. The overall system is modelled as the
aggregation of state machines, where each state machine executes concurrently with others.
Here, an object can issue concurrent events. An object may have states that are composed of sub-
states, and concurrent events may occur in each of the sub-states.
A simple state has no sub-structure. A state that has simpler states nested inside it is called a
composite state. A sub-state is a state that is nested inside another state. It is generally used to
reduce the complexity of a state machine. Sub-states can be nested to any number of levels.
In sequential sub-states, the control of execution passes from one sub-state to another sub-state
one after another in a sequential manner. There is at most one initial state and one final state in
these state machines.
Page 20 of 72
(c) Concurrent Sub-states
In concurrent sub-states, the sub-states execute in parallel, or in other words, each state has
concurrently executing state machines within it. Each of the state machines has its own initial
and final states. If one concurrent sub-state reaches its final state before the other, control waits
at its final state. When all the nested state machines reach their final states, the sub-states join
back to a single flow.
Page 21 of 72
Functional Modeling
Functional Modelling gives the process perspective of the object-oriented analysis model and an
overview of what the system is supposed to do. It defines the function of the internal processes in
the system with the aid of Data Flow Diagrams (DFDs). It depicts the functional derivation of
the data values without indicating how they are derived when they are computed, or why they
need to be computed.
Rumbaugh et al. have defined DFD as, “A data flow diagram is a graph which shows the flow of
data values from their sources in objects through processes that transform them to their
destinations on other objects.”
Processes,
Data Flows,
Actors, and
Data Stores.
Constraints, and
Control Flows.
Features of a DFD
Processes
Processes are the computational activities that transform data values. A whole system can be
visualized as a high-level process. A process may be further divided into smaller components.
The lowest-level process may be a simple function.
Representation in DFD : A process is represented as an ellipse with its name written inside it
and contains a fixed number of input and output data values.
Page 22 of 72
Example : The following figure shows a process Compute_HCF_LCM that accepts two integers
as inputs and outputs their HCF (highest common factor) and LCM (least common multiple).
Data Flows
Data flow represents the flow of data between two processes. It could be between an actor and a
process, or between a data store and a process. A data flow denotes the value of a data item at
some point of the computation. This value is not changed by the data flow.
Representation in DFD : A data flow is represented by a directed arc or an arrow, labelled with
the name of the data item that it carries.
In the above figure, Integer_a and Integer_b represent the input data flows to the process, while
L.C.M. and H.C.F. are the output data flows.
The output value is sent to several places as shown in the following figure. Here, the
output arrows are unlabelled as they denote the same value.
The data flow contains an aggregate value, and each of the components is sent to
different places as shown in the following figure. Here, each of the forked components is
labelled.
Actors
Actors are the active objects that interact with the system by either producing data and inputting
them to the system, or consuming data produced by the system. In other words, actors serve as
the sources and the sinks of data.
Page 23 of 72
Representation in DFD: An actor is represented by a rectangle. Actors are connected to the
inputs and outputs and lie on the boundary of the DFD.
Example : The following figure shows the actors, namely, Customer and Sales_Clerk in a
counter sales system.
Data Stores
Data stores are the passive objects that act as a repository of data. Unlike actors, they cannot
perform any operations. They are used to store data and retrieve the stored data. They represent a
data structure, a disk file, or a table in a database.
Representation in DFD : A data store is represented by two parallel lines containing the name
of the data store. Each data store is connected to at least one process. Input arrows contain
information to modify the contents of the data store, while output arrows contain information
retrieved from the data store. When a part of the information is to be retrieved, the output arrow
is labelled. An unlabelled arrow denotes full data retrieval. A two-way arrow implies both
retrieval and update.
Example : The following figure shows a data store, Sales_Record, that stores the details of all
sales. Input to the data store comprises of details of sales such as item, billing amount, date, etc.
To find the average sales, the process retrieves the sales records and computes the average.
Page 24 of 72
Constraints
Constraints specify the conditions or restrictions that need to be satisfied over time. They allow
adding new rules or modifying existing ones. Constraints can appear in all the three models of
object-oriented analysis.
In Object Modelling, the constraints define the relationship between objects. They may
also define the relationship between the different values that an object may take at
different times.
In Dynamic Modelling, the constraints define the relationship between the states and
events of different objects.
In Functional Modelling, the constraints define the restrictions on the transformations and
computations.
Example : The following figure shows a portion of DFD for computing the salary of employees
of a company that has decided to give incentives to all employees of the sales department and
increment the salary of all employees of the HR department. It can be seen that the constraint
{Dept:Sales} causes incentive to be calculated only if the department is sales and the constraint
{Dept:HR} causes increment to be computed only if the department is HR.
Control Flows
A process may be associated with a certain Boolean value and is evaluated only if the value is
true, though it is not a direct input to the process. These Boolean values are called the control
flows.
Representation in DFD : Control flows are represented by a dotted arc from the process
producing the Boolean value to the process controlled by them.
Page 25 of 72
Example : The following figure represents a DFD for arithmetic division. The Divisor is tested
for non-zero. If it is not zero, the control flow OK has a value True and subsequently the Divide
process computes the Quotient and the Remainder.
In order to develop the DFD model of a system, a hierarchy of DFDs are constructed. The top-
level DFD comprises of a single process and the actors interacting with it.
At each successive lower level, further details are gradually included. A process is decomposed
into sub-processes, the data flows among the sub-processes are identified, the control flows are
determined, and the data stores are defined. While decomposing a process, the data flow into or
out of the process should match the data flow at the next level of DFD.
Example : Let us consider a software system, Wholesaler Software, that automates the
transactions of a wholesale shop. The shop sells in bulks and has a clientele comprising of
merchants and retail shop owners. Each customer is asked to register with his/her particulars and
is given a unique customer code, C_Code. Once a sale is done, the shop registers its details and
sends the goods for dispatch. Each year, the shop distributes Christmas gifts to its customers,
which comprise of a silver coin or a gold coin depending upon the total sales and the decision of
the proprietor.
The functional model for the Wholesale Software is given below. The figure below shows the
top-level DFD. It shows the software as a single process and the actors that interact with it.
Customers
Salesperson
Proprietor
Page 26 of 72
In the next level DFD, as shown in the following figure, the major processes of the system are
identified, the data stores are defined and the interaction of the processes with the actors, and the
data stores are established.
Register Customers
Process Sales
Ascertain Gifts
Customer Details
Sales Details
Gift Details
Page 27 of 72
The following figure shows the details of the process Register Customer. There are three
processes in it, Verify Details, Generate C_Code, and Update Customer Details. When the
details of the customer are entered, they are verified. If the data is correct, C_Code is generated
and the data store Customer Details is updated.
Page 28 of 72
The following figure shows the expansion of the process Ascertain Gifts. It has two processes in
it, Find Total Sales and Decide Type of Gift Coin. The Find Total Sales process computes the
yearly total sales corresponding to each customer and records the data. Taking this record and the
decision of the proprietor as inputs, the gift coins are allotted through Decide Type of Gift Coin
process.
Advantages Disadvantages
Page 29 of 72
The preparation of DFDs is a complex process
DFDs provide detailed information about the that needs considerable expertise. Also, it is
system processes. difficult for a non-technical person to
understand.
They are used as a part of the system The method of preparation is subjective and
documentation. leaves ample scope to be imprecise.
The Object Model, the Dynamic Model, and the Functional Model are complementary to each
other for a complete Object-Oriented Analysis.
Object modelling develops the static structure of the software system in terms of objects.
Thus it shows the “doers” of a system.
Dynamic Modelling develops the temporal behavior of the objects in response to external
events. It shows the sequences of operations performed on the objects.
Functional model gives an overview of what the system should do.
The four main parts of a Functional Model in terms of object model are:
Process : Processes imply the methods of the objects that need to be implemented.
Actors : Actors are the objects in the object model.
Data Stores : These are either objects in the object model or attributes of objects.
Data Flows : Data flows to or from actors represent operations on or by objects. Data
flows to or from data stores represent queries or updates.
The dynamic model states when the operations are performed, while the functional model states
how they are performed and which arguments are needed. As actors are active objects, the
dynamic model has to specify when it acts. The data stores are passive objects and they only
respond to updates and queries; therefore the dynamic model need not specify when they act.
The dynamic model shows the status of the objects and the operations performed on the
occurrences of events and the subsequent changes in states. The state of the object as a result of
the changes is shown in the object model.
Page 30 of 72
UML Analysis Model
The Unified Modeling Language (UML) is a graphical language for OOAD that gives a standard
way to write a software system’s blueprint. It helps to visualize, specify, construct, and document
the artifacts of an object-oriented system. It is used to depict the structures and the relationships
in a complex system.
Brief History
System : A set of elements organized to achieve certain objectives form a system. Systems are
often divided into subsystems and described by a set of models.
Model : Model is a simplified, complete, and consistent abstraction of a system, created for
better understanding of the system.
Things
Relationships
Diagrams
(a) Things:
Page 31 of 72
There are four kinds of things in UML, namely:
Structural Things : These are the nouns of the UML models representing the static
elements that may be either physical or conceptual. The structural things are class,
interface, collaboration, use case, active class, components, and nodes.
Behavioral Things : These are the verbs of the UML models representing the dynamic
behavior over time and space. The two types of behavioral things are interaction and state
machine.
Grouping Things : They comprise the organizational parts of the UML models. There is
only one kind of grouping thing, i.e., package.
Annotational Things : These are the explanations in the UML models representing the
comments applied to describe elements.
(b) Relationships:
Relationships are the connection between things. The four types of relationships that can be
represented in UML are:
Dependency : This is a semantic relationship between two things such that a change in
one thing brings a change in the other. The former is the independent thing, while the
latter is the dependent thing.
Association : This is a structural relationship that represents a group of links having
common structure and common behavior.
Generalization : This represents a generalization/specialization relationship in which
subclasses inherit structure and behavior from super-classes.
Realization : This is a semantic relationship between two or more classifiers such that
one classifier lays down a contract that the other classifiers ensure to abide by.
Class Diagram
Object Diagram
Use Case Diagram
Sequence Diagram
Collaboration Diagram
State Chart Diagram
Activity Diagram
Component Diagram
Deployment Diagram
Rules
UML has a number of rules so that the models are semantically self-consistent and related to
other models in the system harmoniously. UML has semantic rules for the following:
Page 32 of 72
Names
Scope
Visibility
Integrity
Execution
Common Mechanisms
Specifications
Adornments
Common Divisions
Extensibility Mechanisms
Specifications
In UML, behind each graphical notation, there is a textual statement denoting the syntax and
semantics. These are the specifications. The specifications provide a semantic backplane that
contains all the parts of a system and the relationship among the different paths.
Adornments
Each element in UML has a unique graphical notation. Besides, there are notations to represent
the important aspects of an element like name, scope, visibility, etc.
Common Divisions
Object-oriented systems can be divided in many ways. The two common ways of division are:
Extensibility Mechanisms
Stereotypes : It extends the vocabulary of the UML, through which new building blocks
can be created out of existing ones.
Tagged Values : It extends the properties of UML building blocks.
Constraints : It extends the semantics of UML building blocks.
Page 33 of 72
Page 34 of 72
UML Basic Notations
Class
The visibility of the attributes and operations can be represented in the following ways:
Public : A public member is visible from anywhere in the system. In class diagram, it is
prefixed by the symbol ‘+’.
Private : A private member is visible only from within the class. It cannot be accessed
from outside the class. A private member is prefixed by the symbol ‘−’.
Protected : A protected member is visible from within the class and from the subclasses
inherited from this class, but not from outside. It is prefixed by the symbol ‘#’.
Example : Let us consider the Circle class introduced earlier. The attributes of Circle are x-
coord, y-coord, and radius. The operations are findArea(), findCircumference(), and scale(). Let
us assume that x-coord and y-coord are private data members, radius is a protected data member,
and the member functions are public. The following figure gives the diagrammatic representation
of the class.
Object
Page 35 of 72
The top section contains the name of the object with the name of the class or package of
which it is an instance of. The name takes the following forms:
o object-name : class-name
o object-name : class-name :: package-name
o class-name : in case of anonymous objects
The bottom section represents the values of the attributes. It takes the form attribute-name
= value.
Sometimes objects are represented using rounded rectangles.
Example : Let us consider an object of the class Circle named c1. We assume that the center of
c1 is at (2, 3) and the radius of c1 is 5. The following figure depicts the object.
Component
A component is a physical and replaceable part of the system that conforms to and provides the
realization of a set of interfaces. It represents the physical packaging of elements like classes and
interfaces.
Interface
Interface is a collection of methods of a class or component. It specifies the set of services that
may be provided by the class or component.
Notation : Generally, an interface is drawn as a circle together with its name. An interface is
almost always attached to the class or component that realizes it. The following figure gives the
notation of an interface.
Page 36 of 72
Package
A package is an organized group of elements. A package may contain structural things like
classes, components, and other packages in it.
Relationship
Usually, elements in a relationship play specific roles in the relationship. A role name signifies
the behavior of an element participating in a certain context.
Example : The following figures show examples of different relationships between classes. The
first figure shows an association between two classes, Department and Employee, wherein a
Page 37 of 72
department may have a number of employees working in it. Worker is the role name. The ‘1’
alongside Department and ‘*’ alongside Employee depict that the cardinality ratio is one–to–
many. The second figure portrays the aggregation relationship, a University is the “whole–of”
many Departments.
UML structural diagrams are categorized as follows: class diagram, object diagram, component
diagram, and deployment diagram.
Class Diagram
A class diagram models the static view of a system. It comprises of the classes, interfaces, and
collaborations of a system; and the relationships between them.
Page 38 of 72
A bank has many branches. In each zone, one branch is designated as the zonal head office that
supervises the other branches in that zone. Each branch can have multiple accounts and loans.
An account may be either a savings account or a current account. A customer may open both a
savings account and a current account. However, a customer must not have more than one
savings account or current account. A customer may also procure loans from the bank.
Page 39 of 72
Classes in the system:
Bank, Branch, Account, Savings Account, Current Account, Loan, and Customer.
Page 40 of 72
Relationships:
From the class Account, two classes have inherited, namely, Savings Account and Current
Account.
Object Diagram
An object diagram models a group of objects and their links at a point of time. It shows the
instances of the things in a class diagram. Object diagram is the static part of an interaction
diagram.
Example : The following figure shows an object diagram of a portion of the class diagram of the
Banking System.
Page 41 of 72
Component Diagram
Component diagrams show the organization and dependencies among a group of components.
Components
Interfaces
Relationships
Packages and Subsystems (optional)
Example
Page 42 of 72
The following figure shows a component diagram to model a system’s source code that is
developed using C++. It shows four source code files, namely, myheader.h, otherheader.h,
priority.cpp, and other.cpp. Two versions of myheader.h are shown, tracing from the recent
version to its ancestor. The file priority.cpp has compilation dependency on other.cpp. The file
other.cpp has compilation dependency on otherheader.h.
Deployment Diagram
A deployment diagram puts emphasis on the configuration of runtime processing nodes and their
components that live on them. They are commonly comprised of nodes and dependencies, or
associations between the nodes.
Example
The following figure shows the topology of a computer system that follows client/server
architecture. The figure illustrates a node stereotyped as server that comprises of processors. The
figure indicates that four or more servers are deployed at the system. Connected to the server are
the client nodes, where each node represents a terminal device such as workstation, laptop,
Page 43 of 72
scanner, or printer. The nodes are represented using icons that clearly depict the real-world
equivalent.
UML behavioral diagrams visualize, specify, construct, and document the dynamic aspects of a
system. The behavioral diagrams are categorized as follows: use case diagrams, interaction
diagrams, state–chart diagrams, and activity diagrams.
Page 44 of 72
Use Case Model
A use case describes the sequence of actions a system performs yielding visible results. It shows
the interaction of things outside the system with the system itself. Use cases may be applied to
the whole system as well as a part of the system.
(b) Actor
An actor represents the roles that the users of the use cases play. An actor may be a person (e.g.
student, customer), a device (e.g. workstation), or another system (e.g. bank, institution).
The following figure shows the notations of an actor named Student and a use case called
Generate Performance Report.
Use case diagrams present an outside view of the manner the elements in a system behave and
how they can be used in the context.
Use cases
Actors
Relationships like dependency, generalization, and association
To model the context of a system by enclosing all the activities of a system within a
rectangle and focusing on the actors outside the system by interacting with it.
To model the requirements of a system from the outside point of view.
Example
Page 45 of 72
Let us consider an Automated Trading House System. We assume the following features of the
system:
The trading house has transactions with two types of customers, individual customers and
corporate customers.
Once the customer places an order, it is processed by the sales department and the
customer is given the bill.
The system allows the manager to manage customer accounts and answer any queries
posted by the customer.
Interaction Diagrams
Interaction diagrams depict interactions of objects and their relationships. They also include the
messages passed between them. There are two types of interaction diagrams:
Sequence Diagrams
Collaboration Diagrams
Page 46 of 72
Sequence Diagrams
Sequence diagrams are interaction diagrams that illustrate the ordering of messages according to
time.
Notations : These diagrams are in the form of two-dimensional charts. The objects that initiate
the interaction are placed on the x–axis. The messages that these objects send and receive are
placed along the y–axis, in the order of increasing time from top to bottom.
Example : A sequence diagram for the Automated Trading House System is shown in the
following figure.
Collaboration Diagrams
Collaboration diagrams are interaction diagrams that illustrate the structure of the objects that
send and receive messages.
Notations : In these diagrams, the objects that participate in the interaction are shown using
vertices. The links that connect the objects are used to send and receive messages. The message
is shown as a labeled arrow.
Page 47 of 72
Example : Collaboration diagram for the Automated Trading House System is illustrated in the
figure below.
State–Chart Diagrams
A state–chart diagram shows a state machine that depicts the control flow of an object from one
state to another. A state machine portrays the sequences of states which an object undergoes due
to events and their responses to events.
State-chart diagrams are used for modeling objects which are reactive in nature.
Example
In the Automated Trading House System, let us model Order as an object and trace its sequence.
The following figure shows the corresponding state–chart diagram.
Page 48 of 72
Activity Diagrams
An activity diagram depicts the flow of activities which are ongoing non-atomic operations in a
state machine. Activities result in actions which are atomic operations.
Example
The following figure shows an activity diagram of a portion of the Automated Trading House
System.
Page 49 of 72
Page 50 of 72
Object Oriented Design
After the analysis phase, the conceptual model is developed further into an object-oriented model
using object-oriented design (OOD). In OOD, the technology-independent concepts in the
analysis model are mapped onto implementing classes, constraints are identified, and interfaces
are designed, resulting in a model for the solution domain. In a nutshell, a detailed description is
constructed specifying how the system is to be built on concrete technologies
System Design
Object-oriented system design involves defining the context of a system followed by designing
the architecture of the system.
Context : The context of a system has a static and a dynamic part. The static context of
the system is designed using a simple block diagram of the whole system which is
expanded into a hierarchy of subsystems. The subsystem model is represented by UML
packages. The dynamic context describes how the system interacts with its environment.
It is modelled using use case diagrams.
System Architecture : The system architecture is designed on the basis of the context of
the system in accordance with the principles of architectural design as well as domain
knowledge. Typically, a system is partitioned into layers and each layer is decomposed to
form the subsystems.
Object-Oriented Decomposition
Decomposition means dividing a large complex system into a hierarchy of smaller components
with lesser complexities, on the principles of divide–and–conquer. Each major component of the
system is called a subsystem. Object-oriented decomposition identifies individual autonomous
objects in a system and the communication among these objects.
Page 51 of 72
The individual components are of lesser complexity, and so more understandable and
manageable.
It enables division of workforce having specialized skills.
It allows subsystems to be replaced or modified without affecting other subsystems.
Identifying Concurrency
Concurrency allows more than one objects to receive events at the same time and more than one
activity to be executed simultaneously. Concurrency is identified and represented in the dynamic
model.
To enable concurrency, each concurrent element is assigned a separate thread of control. If the
concurrency is at object level, then two concurrent objects are assigned two different threads of
control. If two operations of a single object are concurrent in nature, then that object is split
among different threads.
Concurrency is associated with the problems of data integrity, deadlock, and starvation. So a
clear strategy needs to be made whenever concurrency is required. Besides, concurrency requires
to be identified at the design stage itself, and cannot be left for implementation stage.
Identifying Patterns
While designing applications, some commonly accepted solutions are adopted for some
categories of problems. These are the patterns of design. A pattern can be defined as a
documented set of building blocks that can be used in certain types of application development
problems.
Façade pattern
Model view separation pattern
Observer pattern
Model view controller pattern
Publish subscribe pattern
Proxy pattern
Controlling Events
During system design, the events that may occur in the objects of the system need to be
identified and appropriately dealt with.
An event is a specification of a significant occurrence that has a location in time and space.
Page 52 of 72
Signal Event : A named object thrown by one object and caught by another object.
Call Event : A synchronous event representing dispatch of an operation.
Time Event : An event representing passage of time.
Change Event : An event representing change in state.
The system design phase needs to address the initialization and the termination of the system as a
whole as well as each subsystem. The different aspects that are documented are as follows:
The start–up of the system, i.e., the transition of the system from non-initialized state to
steady state.
The termination of the system, i.e., the closing of all running threads, cleaning up of
resources, and the messages to be sent.
The initial configuration of the system and the reconfiguration of the system when
needed.
Foreseeing failures or undesired termination of the system.
Object Design
After the hierarchy of subsystems has been developed, the objects in the system are identified
and their details are designed. Here, the designer details out the strategy chosen during the
system design. The emphasis shifts from application domain concepts toward computer
concepts. The objects identified during analysis are etched out for implementation with an aim to
minimize execution time, memory consumption, and overall cost.
Object identification
Object representation, i.e., construction of design models
Classification of operations
Algorithm design
Design of relationships
Implementation of control for external interactions
Package classes and associations into modules
Object Identification
The first step of object design is object identification. The objects identified in the object–
oriented analysis phases are grouped into classes and refined so that they are suitable for actual
implementation.
Page 53 of 72
Identifying and refining the classes in each subsystem or package
Defining the links and associations between the classes
Designing the hierarchical associations among the classes, i.e., the
generalization/specialization and inheritances
Designing aggregations
Object Representation
Once the classes are identified, they need to be represented using object modelling techniques.
This stage essentially involves constructing UML diagrams.
Static Models : To describe the static structure of a system using class diagrams and
object diagrams.
Dynamic Models : To describe the dynamic structure of a system and show the
interaction between classes using interaction diagrams and state–chart diagrams.
Classification of Operations
In this step, the operation to be performed on objects are defined by combining the three models
developed in the OOA phase, namely, object model, dynamic model, and functional model. An
operation specifies what is to be done and not how it should be done.
Algorithm Design
The operations in the objects are defined using algorithms. An algorithm is a stepwise procedure
that solves the problem laid down in an operation. Algorithms focus on how it is to be done.
There may be more than one algorithm corresponding to a given operation. Once the alternative
algorithms are identified, the optimal algorithm is selected for the given problem domain. The
metrics for choosing the optimal algorithm are:
Page 54 of 72
Understandability : This determines whether the chosen algorithm is easy to understand
and implement.
Design of Relationships
The strategy to implement the relationships needs to be chalked out during the object design
phase. The main relationships that are addressed comprise of associations, aggregations, and
inheritances.
Implementation of Control
The object designer may incorporate refinements in the strategy of the state–chart model. In
system design, a basic strategy for realizing the dynamic model is made. During object design,
this strategy is aptly embellished for appropriate implementation.
Page 55 of 72
Packaging Classes
Design Optimization
The analysis model captures the logical information about the system, while the design model
adds details to support efficient information access. Before a design is implemented, it should be
optimized so as to make the implementation more efficient. The aim of optimization is to
minimize the cost in terms of time, space, and other metrics.
The various things that may be done for design optimization are:
Page 56 of 72
Addition of Redundant Associations
During design optimization, it is checked if deriving new associations can reduce access costs.
Though these redundant associations may not add any information, they may increase the
efficiency of the overall model.
Presence of too many associations may render a system indecipherable and hence reduce the
overall efficiency of the system. So, during optimization, all non-usable associations are
removed.
Optimization of Algorithms
Derived attributes are those attributes whose values are computed as a function of other attributes
(base attributes). Re-computation of the values of derived attributes every time they are needed is
a time–consuming procedure. To avoid this, the values can be computed and stored in their
computed forms.
However, this may pose update anomalies, i.e., a change in the values of base attributes with no
corresponding change in the values of the derived attributes. To avoid this, the following steps
are taken:
With each update of the base attribute value, the derived attribute is also re-computed.
All the derived attributes are re-computed and updated periodically in a group rather than
after each update.
Design Documentation
Documentation is an essential part of any software development process that records the
procedure of making the software. The design decisions need to be documented for any non–
trivial software system for transmitting the design to others.
Page 57 of 72
Usage Areas
Contents
Features
Page 58 of 72
OOAD Implementation Strategies
Usually, the task of transforming an object design into code is a straightforward process. Any
object-oriented programming language like C++, Java, Smalltalk, C# and Python, includes
provision for representing classes. In this chapter, we exemplify the concept using C++.
The following figure shows the representation of the class Circle using C++.
Implementing Associations
Unidirectional Associations
Page 59 of 72
Optional Associations : Here, a link may or may not exist between the participating
objects. For example, in the association between Customer and Current Account in the
figure below, a customer may or may not have a current account.
class Customer
{
private:
// attributes
Current_Account c; //an object of Current_Account as attribute
public:
Customer()
{
c = NULL;
} // assign c as NULL
Current_Account getCurrAc()
{
return c;
}
void removeAcc()
{
c = NULL;
}
};
Page 60 of 72
This is implemented by including in Department, an object of Manager that should not be
NULL. Implementation using C++:
class Department
{
private:
// attributes
Manager mgr; //an object of Manager as attribute
public:
Department (/*parameters*/, Manager m) //m is not NULL
{
// assign parameters to variables
mgr = m;
}
Manager getMgr()
{
return mgr;
}
};
One–to–many Associations : Here, one instance of a class is related to more than one
instances of the associated class. For example, consider the association between
Employee and Dependent in the following figure.
class Employee
{
private:
char * deptName;
list <Dependent> dep; //a list of Dependents as attribute
public:
void addDependent ( Dependent d)
{
dep.push_back(d);
} // adds an employee to the department
Page 61 of 72
// find() function returns the index of d in list dep
dep.erase(index);
}
};
Bi-directional Associations
Class Project
{
private:
// attributes
Project_Manager pmgr;
public:
void setManager ( Project_Manager pm);
Project_Manager changeManager();
};
class Project_Manager
{
private:
// attributes
Project pj;
public:
void setProject(Project p);
Project removeProject();
};
Page 62 of 72
class Department
{
private:
char * deptName;
list <Employee> emp; //a list of Employees as attribute
public:
void addEmployee ( Employee e)
{
emp.push_back(e);
} // adds an employee to the department
class Employee
{
private:
//attributes
Department d;
public:
void addDept();
void removeDept();
};
If an association has some attributes associated, it should be implemented using a separate class.
For example, consider the one–to–one association between Employee and Project as shown in
the figure below.
Page 63 of 72
class WorksOn
{
private:
Employee e;
Project p;
Hours h;
char * date;
public:
// class methods
};
Implementing Constraints
Constraints in classes restrict the range and type of values that the attributes may take. In order to
implement constraints, a valid default value is assigned to the attribute when an object is
instantiated from the class. Whenever the value is changed at runtime, it is checked whether the
value is valid or not. An invalid value may be handled by an exception handling routine or other
methods.
Example
Consider an Employee class where age is an attribute that may have values in the range of 18 to
60. The following C++ code incorporates it:
class Employee
{
private: char * name;
int age;
// other attributes
public:
Employee() // default constructor
{
strcpy(name, "");
age = 18; // default value
}
Page 64 of 72
Implementing State Charts
There are two alternative implementation strategies to implement states in state chart diagrams.
In this approach, the states are represented by different values of a data member (or set of data
members). The values are explicitly defined by an enumeration within the class. The transitions
are represented by member functions that change the value of the concerned data member.
In this approach, the states are arranged in a generalization hierarchy in a manner that they can
be referred by a common pointer variable. The following figure shows a transformation from
state chart diagram to a generalization hierarchy.
Persistency of Objects
Overview of RDBMS
A database management system (DBMS) is a collection of software that facilitates the processes
of defining, creating, storing, manipulating, retrieving, sharing, and removing data in databases.
Page 65 of 72
In relational database management systems (RDBMS), data is stored as relations or tables, where
each column or field represents an attribute and each row or tuple represents a record of an
instance.
Each row is uniquely identified by a chosen set of minimal attributes called primary key.
To map a class to a database table, each attribute is represented as a field in the table. Either an
existing attribute(s) is assigned as a primary key or a separate ID field is added as a primary key.
The class may be partitioned horizontally or vertically as per requirement.
For example, the Circle class can be converted to table as shown in the figure below.
One–to–One Associations
To implement 1:1 associations, the primary key of any one table is assigned as the foreign key of
the other table. For example, consider the association between Department and Manager:
Page 66 of 72
SQL commands to create the tables:
One–to–Many Associations
To implement 1:N associations, the primary key of the table in the 1-side of the association is
assigned as the foreign key of the table at the N-side of the association. For example, consider
the association between Department and Employee:
Page 67 of 72
CREATE TABLE EMPLOYEE
(
EMPID INTEGER PRIMARY KEY,
ENAME VARCHAR2(50) NOT NULL,
ADDRESS VARCHAR2(70),
D_ID INTEGER REFERENCES DEPARTMENT
);
Many–to–Many Associations
To implement M:N associations, a new relation is created that represents the association. For
example, consider the following association between Employee and Project:
(
EMPID INTEGER,
PID INTEGER,
HOURS INTEGER,
START_DATE DATE,
PRIMARY KEY (EMPID, PID),
FOREIGN KEY (EMPID) REFERENCES EMPLOYEE,
FOREIGN KEY (PID) REFERENCES PROJECT
);
To map inheritance, the primary key of the base table(s) is assigned as the primary key as well as
the foreign key in the derived table(s).
Example
Page 68 of 72
OOAD Testing and Quality Assurance
Once a program code is written, it must be tested to detect and subsequently handle all errors in
it. A number of schemes are used for testing purposes.
Another important aspect is the fitness of purpose of a program that ascertains whether the
program serves the purpose which it aims for. The fitness defines the software quality.
Page 69 of 72
Unit Testing
In unit testing, the individual classes are tested. It is seen whether the class attributes are
implemented as per design and whether the methods and the interfaces are error-free. Unit
testing is the responsibility of the application engineer who implements the structure.
Subsystem Testing
This involves testing a particular module or a subsystem and is the responsibility of the
subsystem lead. It involves testing the associations within the subsystem as well as the
interaction of the subsystem with the outside. Subsystem tests can be used as regression tests for
each newly released version of the subsystem.
System Testing
System testing involves testing the system as a whole and is the responsibility of the quality-
assurance team. The team often uses system tests as regression tests when assembling new
releases.
The different types of test cases that can be designed for testing object-oriented programs are
called grey box test cases. Some of the important types of grey box testing are:
State model based testing : This encompasses state coverage, state transition coverage,
and state transition path coverage.
Use case based testing : Each scenario in each use case is tested.
Class diagram based testing : Each class, derived class, associations, and aggregations
are tested.
Sequence diagram based testing : The methods in the messages in the sequence
diagrams are tested.
Thread based testing : All classes that are needed to realize a single use case in a
subsystem are integrated and tested.
Use based testing : The interfaces and services of the modules at each level of hierarchy
are tested. Testing starts from the individual classes to the small modules comprising of
classes, gradually to larger modules, and finally all the major subsystems.
Page 70 of 72
Categories of System Testing
Alpha testing : This is carried out by the testing team within the organization that
develops software.
Beta testing : This is carried out by select group of co-operating customers.
Acceptance testing : This is carried out by the customer before accepting the
deliverables.
Software Quality
Schulmeyer and McManus have defined software quality as “the fitness for use of the total
software product”. A good quality software does exactly what it is supposed to do and is
interpreted in terms of satisfaction of the requirement specification laid down by the user.
Quality Assurance
Software quality assurance is a methodology that determines the extent to which a software
product is fit for use. The activities that are included for determining software quality are:
Auditing
Development of standards and guidelines
Production of reports
Review of quality system
Quality Factors
Object-Oriented Metrics
Metrics can be broadly classified into three categories: project metrics, product metrics, and
process metrics.
Page 71 of 72
Project Metrics
Project Metrics enable a software project manager to assess the status and performance of an
ongoing project. The following metrics are appropriate for object-oriented software projects:
Product Metrics
Product metrics measure the characteristics of the software product that has been developed. The
product metrics suitable for object-oriented systems are:
Methods per Class : It determines the complexity of a class. If all the methods of a class
are assumed to be equally complex, then a class with more methods is more complex and
thus more susceptible to errors.
Inheritance Structure : Systems with several small inheritance lattices are more well–
structured than systems with a single large inheritance lattice. As a thumb rule, an
inheritance tree should not have more than 7 (± 2) number of levels and the tree should
be balanced.
Coupling and Cohesion : Modules having low coupling and high cohesion are
considered to be better designed, as they permit greater reusability and maintainability.
Response for a Class : It measures the efficiency of the methods that are called by the
instances of the class.
Process Metrics
Process metrics help in measuring how a process is performing. They are collected over all
projects over long periods of time. They are used as indicators for long-term software process
improvements. Some process metrics are:
Page 72 of 72