OOAD
OOAD
Chapter 1
Complexity
Systems: Systems are constructed by interconnecting components (Boundaries,
Environments,Characters, Emergent Properties), which may well be systems in their own right.
The larger the number of these components and relationships between them, higher will be the
complexity of the overall system.
Software Systems: Software systems are not any different from other systems with respect
tothese characteristics. Thus, they are also embedded within some operational environment, and
perform operations which are clearly defined and distinguished from the operations of other
systems in this environment. They also have properties which emerge from the interactions of
their components and/or the interactions of themselves with other systems in their environment.
A system that embodies one or more software subsystems which contribute to or control a
significant part of its overall behavior is what we call a software intensive system. As examples
of complex software- intensive systems, we may consider stock and production control systems,
aviation systems, rail systems, banking systems, health care systems and so on.
Complexity: Complexity depends on the number of the components embedded in them as wellas
the relationships and the interactions between these components which carry;
• Impossible for humans to comprehend fully
• Difficult to document and test
• Potentially inconsistent or incomplete
• Subject to change
• No fundamental laws to explain phenomena and approaches
The Properties of Complex and Simple Software Systems: Software may involve elements
ofgreat complexity which is of different kind.
Some software systems are simple.
• These are the largely forgettable applications that are specified, constructed, maintained,
and used by the same person, usually the amateur programmer or the professional
developer working in isolation.
• Such systems tend to have a very limited purpose and a very short life span.
• We can afford to throw them away and replace them with entirely new software rather
than attempt to reuse them, repair them, or extend their functionality, Such applications
are generally more tedious than difficult to develop; consequently, learning how to design
them does not interest us.
Some software systems are complex
.
• The applications that exhibit a very rich set of behaviors, as, for example, in
reactivesystems that drive or are driven by events in the physical world, and for which
time and space are scarce resources; applications that maintain the integrity of hundreds
of thousands of records of information while allowing concurrent updates and queries;
and
Object Oriented System Analysis and Design Chapter 1 : Complexity
systems for the command and control of real-world entities, such as the routing of air or
railway traffic.
• Software systems such as world of industrial strength software tend to have a long life
span, and over time, many users come to depend upon their proper functioning.
• The frameworks that simplify the creation of domain-specific applications, and programs
that mimic some aspect of human intelligence.
• Although such applications are generally products of research and development they are
no less complex, for they are the means and artifacts of incremental and exploratory
development.
The complexity of software is an essential property not an accidental one. The inherent
complexity derives from four elements; the complexity of the problem domain, the difficultly of
managing the developmental process, the flexibility possible through software and the problems
of characterizing the behavior of discrete systems.
3
Object Oriented System Analysis and Design Chapter 1 : Complexity
Within a large application, there may be hundreds or even thousands of variables well as more
than one thread of control. The entire collection of these variables as well as their current values
and the current address within the system constitute the present state of the system with discrete
states. Discrete systems by their very nature have a finite numbers of possible states.
Our failure to master the complexity of software results in projects that are late, over budget, and
deficient in their stated requirements. We often call this condition the software crisis, but frankly,
a malady that has carried on this long must be called normal. Sadly, this crisis translates into the
squandering of human resources - a most precious commodity - as well as a considerable loss of
opportunities. There are simply not enough good developers around to create all the new
software that users need. Furthermore, a significant number of the developmental personnel in
any given organization must often be dedicated to the maintenance or preservation of geriatric
software. Given the indirect as well as the direct contribution of software to the economic base of
most industrialized countries, and considering the ways in which software can amplify the
powers of the individual, it is unacceptable to allow this situation to continue.
Examples of Complex Systems: The structure of personal computer, plants and animals,
matter,social institutions are some examples of complex system.
The structure of a Personal Computer: A personal computer is a device of
moderatecomplexity. Major elements are CPU, monitor, keyboard and some secondary storage
devices. CPU encompasses primary memory, an ALU, and a bus to which peripheral devices are
attached. An ALU may be divided into registers which are constructed from NAND gates,
inverters and so on. All are the hierarchical nature of a complex system.
The structure of Plants: Plants are complex multicellular organism which are composed ofcells
which is turn encompasses elements such as chloroplasts, nucleus, and so on. For example,at the
highest level of abstraction, roots are responsible for absorbing water and minerals from the soil.
Roots interact with stems, which transport these raw materials up to the leaves. The leaves in
turn use water and minerals provided by stems to produce food through photosynthesis. The
structure of Animals: Animals exhibit a multicultural hierarchical structure in whichcollection
of cells form tissues, tissues work together as organs, clusters of organs define systems (such as
the digestive system) and so on.
The structure of Matter: Nuclear physicists are concerned with a structural hierarchy of
matter.Atoms are made up of electrons, protons and neutrons. Elements and elementary particles
but protons, neutrons and other particles are formed from more basic components called quarks,
which eventually formed from pro-quarks.
4
Object Oriented System Analysis and Design Chapter 1 : Complexity
The structure of Social institutions: In social institutions, group of people join together
toaccomplish tasks that can not be done by made of divisions which in turn contain branches
which in turn encompass local offices and so on.
The five Attributes of a complex system: There are five attribute common to all
complexsystems. They are as follows:
1.Hierarchical and interacting subsystems
Frequently, complexity takes the form of a hierarchy, whereby a complex system is
composed of interrelated subsystems that have in turn their own subsystems and so on,
until some lowest level of elementary components is reached.
2.Arbitrary determination of primitive components
The choice of what components in a system are primitive is relatively arbitrary and is
largely up to the
discretion of the observer of the system class structure and the object structure are not
completely
independent each object in object structure represents a specific instance of some class.
3.Stronger intra-component than inter-component link
Intra-component linkages are generally stronger than inter-component linkages. This fact
has the involving the high frequency dynamics of the components-involving the internal
structure of the components – from the low frequency dynamic involving interaction
among components.
4.Combine and arrange common rearranging subsystems
Hierarchic systems are usually composed of only a few different kinds of subsystems in
various combinations and arrangements. In other words, complex systems have common
patterns. These patterns may involve the reuse of small components such as the cells found
in both plants or animals, or of larger structures, such as vascular systems, also found in
both plants and animals.
5.Evolution from simple to complex systems
A complex system that works is invariably bound to have evolved from a simple system
that worked ……….. A complex system designed from scratch never works and can't be
patched up to make it work. You have to start over, beginning with a working simple
system.
Booch has identified five properties that architectures of complex software systems have in
common.
Very often subsystems are decomposed again into subsystems, which are decomposed and so on.
The way how this decomposition is done and when it is stopped, i.e. which components are
considered primitive, is rather arbitrary and subject to the architects decision.
5
Object Oriented System Analysis and Design Chapter 1 : Complexity
The decomposition should be chosen, such that most of the coupling is between components that
lie in the same subsystem and only a loose coupling exists between components of different
subsystem. This is partly motivated by the fact that often different individuals are in charge with
the creation and maintenance of subsystems and every additional link to other subsystems does
imply an higher communication and coordination overhead.
Certain design patterns re-appear in every single subsystem. Examples are patterns for iterating
over collections of elements, or patterns for the creation of object instances and the like.
The development of the complete system should be done in slices so that there is an increasing
number of
subsystems that work together. This facilitates the provision of feedback about the overall
architecture.
virtually all complex system take on the same (canonical) form as shown in figure. There are two
orthogonal hierarchies of system, its class structure and the object structure.
The figure 1.1 represents the relationship between two different hierarchies: a hierarchy of
objects and a hierarchy of classes. The class structure defines the 'is-a' hierarchy, identifying the
commonalities between different classes at different levels of abstractions. Hence class C4 is also
a class C1 and therefore has every single property that C1 has. C4, however, may have more
specific properties that C1 does not have; hence the distinction between C1 and C4. The object
structure defines the 'part- of' representation. This identifies the composition of an object from
component objects, like a car is composed from wheels, a steering wheel, a chassis and an
engine. The two hierarchies are not entirely orthogonal as objects are instances of certain classes.
The relationship between these two hierarchies is shown by identifying the instance-of
relationship as well. The objects in component D8 are instances of C6 and C7 As suggested by
the diagram, there are many more objects then there are classes. The point in identifying classes
is therefore to have a vehicle to describe only once all properties that all instances of the class
have.
Approaching a Solution
Hampered by human limitations
• dealing with complexities
• memory
• communications
7
Object Oriented System Analysis and Design Chapter 1 : Complexity
When we devise a methodology for the analysis and design of complex systems, we need to bear
in mind the limitations of human beings, who will be the main acting agents, especially during
early phases. Unlike computers, human beings are rather limited in dealing with complex
problems and any method need to bear that in mind and give as much support as possible.
Human beings are able to understand and remember fairly complex diagrams, though linear
notations expressing the same concepts are not dealt with so easily. This is why many methods
rely on diagramming techniques as a basis. The human mind is also rather limited. Miller
revealed in 1956 that humans can only remember 7 plus or minus one item at once. Methods
should therefore encourage its users to bear these limitations in mind and not deploy overly
complex diagrams.
The analysis process is a communication intensive process where the analyst has to have
intensive communications with the stakeholders who hold the domain knowledge. Also the
design process is a communication intensive process, since the different agents involved in the
design need to agree on decompositions of the system into different hierarchies that are
consistent with each other.
The Limitations of the human capacity for dealing with complexity: Object model is
theorganized complexity of software. As we begin to analyze a complex software system, we
find many parts that must interact in a multitude of intricate ways with little commonality among
either the parts or their interactions. This is an example of disorganized complexity. In complex
system, we find many parts that must interact in a multitude of intricate ways with little
commonality among either the parts or their intricate. This is an example in an air traffic control
system, we must deal with states of different aircraft at once, and involving such it is absolutely
impossible for a single person to keep track of all these details at once.
8
Object Oriented System Analysis and Design Chapter 1 : Complexity
The role of Hierarchy: Identifying the hierarchies within a complex software system
makesunderstanding of the system very simple. The object structure is important because it
illustrates how different objects collaborate with one another through pattern of interaction
(called mechanisms). By classifying objects into groups of related abstractions (for example,
kinds of plant cells versus animal cells, we come to explicitly distinguish the common and
distinct properties of different objects, which helps to master their inherent complexity.
Different hierarchies support the recognition of higher and lower orders. A class high in the ‘is-a’
hierarchy is a rather abstract concept and a class that is a leaf represents a fairly concrete
concept. The ‘is-a’ hierarchy also identifies concepts, such as attributes or operations, that are
common to a number of classes and instances thereof. Similarly, an object that is up in the part-
of hierarchy represents a rather coarse-grained and complex objects, assembled from a number of
objects, while objects that are leafs are rather fine grained. But note that there are many other
forms of patterns which are nonhierarchical: interactions, ‘relationships’.
9
Object Oriented System Analysis and Design Chapter 1 : Complexity
Object oriented decomposition: Objects are identified as Master file and check sum
whichderive directly from the vocabulary of the problem as shown in figure. We know the world
as a set of autonomous agents that collaborate to perform some higher level behavior. Get
formatted update thus does not exist as an independent algorithm; rather it is an operation
associated with the object file of updates. Calling this operation creates another object, update to
card. In this manner, each object in our solution embodies its own unique behavior .Each
hierarchy in layered with the more abstract classes and objects built upon more primitive ones
especially among the parts of the object structure, object in the real world. Here decomposition is
based on objects and not algorithms.
objects that encapsulate both a state and a certain behavior. Then communication among these
objects leads to the desired solutions.
Although both solutions help dealing with complexity we have reasons to believe that an object-
oriented decomposition is favorable because, the object-oriented approach provides for a
semantically richer framework that leads to decompositions that are more closely related to
entities from the real world. Moreover, the identification of abstractions supports (more abstract)
solutions to be reused and the object-oriented approach supports the evolution of systems better
as those concepts that are more likely to change can be hidden within the objects.
1.4 On Designing Complex Systems
Engineering as a Science and an Art:Every engineering discipline involves elements of
bothscience and art. The programming challenge is a large scale exercise in applied abstraction
and thus requires the abilities of the formal mathematician blended with the attribute of the
competent engineer. The role of the engineer as artist is particularly challenging when the task is
to design an entirely new system.
The meaning of Design: In every engineering discipline, design encompasses the
disciplineapproach we use to invent a solution for some problem, thus providing a path from
requirements to implementation. The purpose of design is to construct a system that.
1.Satisfies a given (perhaps) informal functional specification
2.Conforms to limitations of the target medium
3.Meets implicit or explicit requirements on performance and resource usage
4.Satisfies implicit or explicit design criteria on the form of the artifact
5. Satisfies restrictions on the design process itself, such as its length or cost, or the available
fordoing the
design.
According to Stroustrup, the purpose of design is to create a clean and relatively simple internal
structure, sometimes also called as architecture. A design is the end product of the design
process.
The Importance of Model Building: The buildings of models have a broad acceptance
amongall engineering disciplines largely because model building appeals to the principles of
decomposition, abstraction and hierarchy. Each model within a design describes a specific aspect
of the system under consideration. Models give us the opportunity to fail under controlled
conditions. We evaluate each model under both expected and unusual situations and then after
them when they fail to behave as we expect or desire. More than one kind of model is used on
order to express all the subtleties of a complex system.
The Elements of Software design Methods: Design of complex software system involves
anincremental and iterative process. Each method includes the following:
1.Notation: The language for expressing each model.
2.Process: The activities leading to the orderly construction of the system's mode.
3.Tools: The artifacts that eliminate the medium of model building and enforce rules about
the models
themselves, so that errors and inconsistencies can be exposed.
11
Object Oriented System Analysis and Design Chapter 1 : Complexity
The models of Object Oriented Development: The models of object oriented analysis
anddesign reflect the importance of explicitly capturing both the class and object hierarchies of
the system under design. These models also over the spectrum of the important design decisions
that we must consider in developing a complex system and so encourage us to craft
implementations that embody the five attributes of well formed complex systems.
12
ent4
Object Oriented System Analysis and Design Chapter 2 : The Object Model
Chapter 2
The Object Model
The elements of the object oriented technology collectively known as the object model. The
object model encompasses the principles of abstraction, encapsulation, modularity, hierarchy,
typing, concurrency and persistency. The object model brought together these elements in a
synergistic way.
1
Object Oriented System Analysis and Design Chapter 2 : The Object Model
- Visual Basic – Eased development of the graphical user interface (GUI) for
windows applications
- Java – Successor to Oak; designed for portability
- Python – Object oriented scripting language
- J2EE – Java based framework for enterprise computing
- .NET – Microsoft’s object based framework
- Visual C# - Java competitor for the Microsoft .NET framework
- Visual Basic .NET – VB for Microsoft .NET framework
Fig 2.1: The Topology of First- and Early Second-Generation Programming Languages
2
Object Oriented System Analysis and Design Chapter 2 : The Object Model
Fig 2.2: The Topology of Late Second- and Early Third-Generation Programming Languages
- Data and operations are united in such a way that the fundamental logical building blocks of
our systems are no longer algorithms, but are classes and objects.
- In large application system, classes, objects and modules essential yet insufficient means of
abstraction.
Fig 2.5: The Topology of Large Applications Using Object-Based and Object-Oriented
Programming Languages
4
Object Oriented System Analysis and Design Chapter 2 : The Object Model
5
Object Oriented System Analysis and Design Chapter 2 : The Object Model
Important Characteristics:
temperature
location
Figure 2.6: Abstraction of a Temperature Sensor
Object Oriented System Analysis and Design Chapter 2 : The Object Model
Encapsulation
The act of grouping data and operations into a single object.
Private
Clas
Public
Information and Public Interface
operations
Private
Encapsulation
Representation
Class heater
Information hiding
{ Public:
heater (location): ~
( ); void turnoff ( );
private:
Abstraction: Heater
Important Characteristics:
location
status
7
Object Oriented System Analysis and Design Chapter 2 : The Object Model
Modularity
The act of partitioning a program into individual components is called modularity. It is reusable
component which reduces complexity to some degree. Although partitioning a program is
helpful for this reason, a more powerful justification for partitioning a program is that it creates a
number of well-defined, documented boundaries within the program. These boundaries, or
interfaces, are invaluable in the comprehension of the program. In some languages, such as
Smalltalk, there is no concept of a module, so the class forms the only physical unit of
decomposition. Java has packages that contain classes. In many other languages, including
Object Pascal, C++, and Ada, the module is a separate language construct and therefore warrants
a separate set of design decisions. In these languages, classes and objects form the logical
structure of a system; we place these abstractions in modules to produce the system’s physical
architecture. Modularization consists of dividing a program into modules which can be compiled
separately, but which have connections with other modules. Modularity is the property of a
system that has been decomposed into a set of cohesive and loosely coupled modules.
- modules can be compiled separately. modules in C++ are nothing more than separately
compiled files, generally called header files.
- Interface of module are files with .h extensions & implementations are placed in files with
.c or .cpp suffix.
- Modules are units in pascal and package body specification in ada.
- modules Serve as physical containers in which classes and objects are declared like gates in
IC of computer.
- Group logically related classes and objects in the same module.
- E.g. consider an application that runs on a distributed set of processors and uses a message
passing mechanism to coordinate their activities.
- A poor design is to define each message class in its own module; so difficult for users to find
the classes they need. Sometimes modularization is worse than no modulation at all.
- Developer must balance: desire to encapsulate abstractions and need to make certain
abstractions visible to other modules.
- Principles of abstraction, encapsulation and modularity are synergistic (having common
effect)
Example of modularity
Let’s look at modularity in the Hydroponics Gardening System. Suppose we decide to use a
commercially available workstation where the user can control the system’s operation. At this
workstation, an operator could create new growing plans, modify old ones, and follow the
progress of currently active ones. Since one
of our key abstractions here is that of a growing plan, we might therefore create a module whose
purpose is to collect all of the classes associated with individual growing plans (e.g.,
FruitGrowingPlan, GrainGrowingPlan). The implementations of these GrowingPlan classes
would appear in the implementation of this module. We might also define a module whose
purpose is to collect all of the code associated with all user interface functions.
8
Object Oriented System Analysis and Design Chapter 2 : The Object Model
Hierarchy
Hierarchy is a ranking or ordering of abstractions Encapsulation hides company inside new of
abstraction and modularity logically related abstraction & thus a set of abstractions form
hierarchy. Hierarchies in complex system are its class structure (the "is a" hierarchy) and its
object structure (the "part of" hierarchy).
FruitGrowingPlan GrowingPlan
Is a
As we evolve our inheritance hierarchy, the structure and behavior that are common for different
classes will tend to migrate to common superclasses. This is why we often speak of inheritance
as being a generalization/specialization hierarchy. Superclasses represent generalized
abstractions, and subclasses represent specializations in which fields and methods from the
superclass are added, modified, or even hidden.
Compiled By: Er. Hari Aryal [haryal4@gmail.com], Er. Hari Pokhrel [hpokhrel24@gmail.com] 9
Reference: OOAD By Grady Booch|
Object Oriented System Analysis and Design Chapter 2 : The Object Model
Figure 2.9: The Rose Class, Which Inherits from Multiple Superclasses (Multiple Inheritance)
Repeated inheritance occurs when two or more peer superclasses share a common superclass.
Hierarchy: Aggregation
10
Object Oriented System Analysis and Design Chapter 2 : The Object Model
Aggregation raises the issue of ownership. Our abstraction of a garden permits different plants to
be raised in a garden over time, but replacing a plant does not change the identity of the garden
as a whole, nor does removing a garden necessarily destroy all of its plants (they are likely just
transplanted). In other words, the lifetime of a garden and its plants are independent. In contrast,
we have decided that a GrowingPlan object is intrinsically associated with a Garden object and
does not exist independently. Therefore, when we create an instance of Garden, we also create an
instance of GrowingPlan; when we destroy the Garden object, we in turn destroy the
GrowingPlan instance.
Typing
A type is a precise characterization of structural or behavioral properties which a collection of
entities share. Type and class are used interchangeably class implements a type. Typing is the
enforcement of the class of an object. Such that object of different types may not be
interchanged. Typing implements abstractions to enforce design decisions. E.g. multiplying temp
by a unit of force does not make serve but multiplying mass by force does. So this is strong
typing. Example of strong and weak typing: In strong type, type conformance is strictly
enforced. Operations can not be called upon an object unless the exact signature of that operation
is defined in the object's class or super classes.
A given programming language may be strongly typed, weakly typed, or even untyped, yet still
be called object-oriented. A strongly typed language is one in which all expressions defined in
super class are guaranteed to be type consistent. When we divide distance by time, we expect
some value denoting speed, not weight. Similarly, dividing a unit of force by temperature doesn’t
make sense, but dividing force by mass does. These are both examples of strong typing, wherein
the rules of our domain prescribe and enforce certain legal combinations of abstractions.
Benefits of Strongly typed languages:
• Without type checking, program can crash at run time
• Type declaration help to document program
• Most compilers can generate more efficient object code if types are declared.
Static typing (static binding/early binding) refers to the time when names are bound to types i.e.
types of all variables are fixed at the time of compilation. Dynamic binding (late binding) means
that types of all variables and expressions are not known until run time. Dynamic building
(object pascal, C++) small talk (untyped).
Polymorphism is a condition that exists when the features of dynamic typing and inheritance
interact. Polymorphism represents a concept in type theory in which a single name (such as a
11
Object Oriented System Analysis and Design Chapter 2 : The Object Model
variable declaration) may denote objects of many different classes that are related by some
common superclass. The opposite of polymorphism is monomorphism, which is found in all
languages that are both strongly and statically typed.
Concurrency
OO-programming focuses upon data abstraction, encapsulation and inheritance concurrency
focuses upon process abstraction and synchronization. Each object may represent a separate
thread of actual (a process abstraction). Such objects are called active. In a system based on an
object oriented design, we can conceptualize the word as consisting of a set of cooperative
objects, some of which are active (serve as centers of independent activity) .Thus concurrency is
the property that distinguishes an active object from one that is not active. For example: If two
active objects try to send messages to a third object, we must be certain to use some means of
mutual exclusion, so that the state of object being acted upon is not computed when both active
objects try to update their state simultaneously. In the preserve of concurrency, it is not enough
simply to define the methods are preserved in the presence of multiple thread of control.
Examples of Concurrency
Persistence
Persistence is the property of an object through which its existence transcends time and or space
i.e. objects continues to exist after its creator ceases to exist and/or the object's location moves
from the address space in which it was created. An object in software takes up some amount of
space and exists for a particular amount of time. Object persistence encompasses the followings.
• Transient results in expression evaluation
• Local variables in procedure activations
• Global variables where exists is different from their scope
• Data that exists between executions of a program
12
Object Oriented System Analysis and Design Chapter 2 : The Object Model
13
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
Chapter 3
Classes and Objects
When we use object-oriented methods to analyze or design a complex software system, our basic
building blocks are classes and objects.
An object is an abstraction of something in a problem domain, reflecting the capabilities of a
system to keep information about it, interact with it, or both
• Objects have an internal state that is recorded in a set of attributes.
• Objects have a behavior that is expressed in terms of operations. The execution of
operations changes the state of the object and/or stimulates the execution of operations in
other objects.
• Objects (at least in the analysis phase) have an origin in a real world entity.
Classes represent groups of objects which have the same behavior and information structures.
• Every object is an instance of a single class
• Class is a kind of type, an ADT (but with data), or an 'entity' (but with methods)
• Classes are the same in both analysis and design
• A class defines the possible behaviors and the information structure of all its object
instances.
State
The state of an object encompasses all of the (usually static) properties of the object plus the
current (usually dynamic) values of each of these properties.
Consider a vending machine that dispenses soft drinks. The usual behavior of such objects is that
when someone puts money in a slot and pushes a button to make a selection, a drink emerges
from the machine. What happens if a user first makes a selection and then puts money in the
1
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
slot? Most vending machines just sit and do nothing because the user has violated the basic
assumptions of their operation. Stated another way, the vending machine was in a state (of
waiting for money) that the user ignored (by making a selection first). Similarly, suppose that the
user ignores the warning light that says, “Correct change only,” and puts in extra money. Most
machines are user-hostile; they will happily swallow the excess money.
A property is a distinctive characteristic that contributes to making an object uniquely that object
properties are usually static because attributes such as these are unchanging and fundamental to
the nature of an object. Properties have some value. The value may be a simple quantity or it
might denote another object. The fact that every object has static implies that every object has
state implies that every object takes up some amount of space be it in the physical world or in
computer memory.
We may say that all objects within a system encapsulate some state and that all of the state
within a system is encapsulated by objects. Encapsulating the state of an object is a start, but it is
not enough to allow us to capture the full intent of the abstractions we discover and invent during
development
e.g. consider the structure of a personnel record in C++ as follows
struct personnelRecord{
char name[100];
int socialsecurityNumber;
char department[10];
float salary;
};
This denotes a class. Objects are as personnel Record Tom, Kaitlyn etc are all 2 distinct objects
each of which takes space in memory. Own state in memory class can be declared as follows.
Class personnelrecord{
public: char*employeename()const;
int SSN() const;
char* empdept const;
protected:
char name[100];
int SSN;
char department[10];
float salary;
};
2
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
Figure 3–3 Employee Class with Protected Attributes and Public Operations
Class representation is hidden from all other outside clients. Changing class representation will
not break outside source code. All clients have the right to retrieve the name, social security No
and department of an employee. Only special clients (subclass) have permission to modify the
values of these properties as well as salary. Thus, all objects within a system encapsulate some
state.
Behavior
Behavior is how an object acts and reacts, in terms of its state changeable state of object affect
its behavior. In vending machine, if we don't deposit change sufficient for our selection, then the
machine will probably do nothing. So behavior of an object is a function of its state as well as
the operation performed upon it. The state of an object represents the cumulative results of its
behavior.
e.g. consider the declaration of queue in C++
Class Queue{
public:
Queue();
Queue(constQueue);
virtual ~Queue();
virtual Queue&operator = (ConstQueue);
Virtual int operator == (constQueue&)const;
int operator = (constQueue)const;
virtual voidclear();
Virtual voidappend(constvoid*);
virtual voidPOP();
virtual void remove (int
at); virtual int length();
virtual int isempty( ) const;
3
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
queue a, b;
a. append (& Tom);
a.append (& Kaitlyn);
b = a;
a. pop( );
Operations
An operation denotes a service that a class offers to its clients. A client performs 5 kinds of
operations upon an object.
• Modifier: An operation that alters the state of an object.
• Selector: An operation that accesses the state of an object but does not alter the state.
• Iterator: An operation that permits all parts of an object to be accessed in some well
defined order. In queue example operations, clear, append, pop, remove) are modifies,
const functions (length, is empty, front location) are selectors.
• Constructor: An operation that creates an object and/or initializes its state.
• Destructor: An operation that frees the state of an object and/or destroys the object itself.
Identity
Identity is that property of an object which distinguishes it from all other
objects. Consider the following declarations in C++.
struct point
{ int x;
int y;
point ( ) : x (0), y (0){}
point (int x value, int y value) : x (x value), (y value) {}
};
4
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
First declaration creates four names and 3 distinct objects in 4 diff location. Item 1 is the name of
a distinct display item object and other 3 names denote a pointer to a display item objects. Item 4
is no such objects, we properly say that item 2 points to a distinct display item object, whose
name we may properly refer to indirectly as * item2. The unique identity (but not necessarily the
name) of each object in preserved over the lifetime of the object, even when its state is changed.
Copying, Assignment, and Equality Structural sharing takes place when the identity of an object
is aliased to a second name.
initial stable state. Often objects are created implicitly in C++ programming an object by value
creates a new objection the stack that is a copy of the actual parameters.
In languages such as smalltalk, an object is destroyed automatically as part of garbage collection
when all references to it have been lost. In C++, objects continuous exist and consume space
even if all references to it are lost. Objects created on the stack are implicitly destroyed wherever
control panels beyond the block in which the object can declared. Objects created with new
operator must be destroyed with the delete operator. In C++ wherever an object is destroyed
either implicitly or explicitly, its destructor is automatically involved, whose purpose is to
declared space assigned to the object and its part.
Roles and Responsibilities
A role is a mask that an object wears and so defines a contract between an abstraction and its
clients.
Responsibilities are meant to convey a sense of the purpose of an object and its place in the
system. The responsibilities of an object are all the services it provides for all of the contracts it
supports.
In other words, we may say that the state and behavior of an object collectively define the roles
that an object may play in the world, which in turn fulfill the abstraction’s responsibilities.
Most interesting objects play many different roles during their lifetime such as:
• A bank account may have the role of a monetary asset to which the account owner may
deposit or withdraw money. However, to a taxing authority, the account may play the
role of an entity whose dividends must be reported on annually.
Objects as Machines
The existence of state within an object means that the order in which operations are invoked is
important. This gives rise to the idea that each object is like a tiny, independent machine.
Continuing the machine metaphor, we may classify objects as either active or passive. An active
object is one that encompasses its own thread of control, whereas a passive object does not.
Active objects are generally autonomous, meaning that they can exhibit some behavior without
being operated on by another object. Passive objects, on the other hand, can undergo a state
change only when explicitly acted on. In this manner, the active objects in our system serve as
the roots of control. If our system involves multiple threads of control, we will usually have
multiple active objects. Sequential systems, on the other hand, usually have exactly one active
object, such as a main object responsible for managing an event loop that dispatches messages.
In such architectures, all other objects are passive, and their behavior is ultimately triggered by
messages from the one active object. In other kinds of sequential system architectures (such as
transaction -processing systems), there is no obvious central active object, so control tends to be
distributed throughout the system’s passive objects.
3.2 Relationship among Objects
Objects contribute to the behavior of a system by collaborating with one another. E.g. object
structure of an airplane. The relationship between any two objects encompasses the assumptions
that each makes about the other including what operations can be performed. Two kinds of
objects relationships are links and aggregation.
Links
A link denotes the specific association through which one object (the client) applies the services
of another object (the supplier) or through which are object may navigate to another. A line
between two object icons represents the existence of pass along this path. Messages are shown as
6
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
directed lines representing the direction of message passing between two objects is typically
unidirectional, may be bidirectional data flow in either direction across a link.
As a participation in a link, an object may play one of three roles:
• Controller: This object can operate on other objects but is not operated on by other
objects. In some contexts, the terms active object and controller are interchangeable.
• Server: This object doesn’t operate on other objects; it is only operated on by other
objects.
• Proxy: This object can both operate on other objects and be operated on by other
objects. A proxy is usually created to represent a real-world object in the domain of the
application.
Visibility
Consider two objects, A and B, with a link between the two. In order for A to send a message to
object B, B must be visible to A. Four ways of visibility
• The supplier object is global to the client
• The supplier object is a programmer to some operation of the client
• The supplier object is a part of the client object.
• The supplier object is locally declared object in some operation of the client.
Synchronization
Wherever one object passes a message to another across a link, the two objects are said to be
synchronized. Active objects embody their own thread of control, so we expect their semantics to
be guaranteed in the presence of other active objects. When one active object has a link to a
passive one, we must choose one of three approaches to synchronization.
1. Sequential: The semantics of the passive object are guaranteed only in the presence of
a single active object at a time.
2. Guarded: The semantics of the passive object are guaranteed in the presence of multiple
threads of control, but the active clients must collaborate to achieve mutual exclusion.
3. Concurrent: The semantics of the passive object are guaranteed in the presence of
multiple threads of control, and the supplier guarantees mutual exclusion.
7
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
Aggregation
Whereas links denote peer to peer or client/supplier relationships, aggregation denotes a
whole/part hierarchy, with the ability to navigate from the whole (also called the aggregate) to its
parts. Aggregation is a specialized kind of association. Aggregation may or may not denote
physical containment. E.g. airplane is composed of wings, landing gear, and so on. This is a case
of physical containment. The relationship between a shareholder and her shares is an aggregation
relationship that doesn't require physical containment.
There are clear trade-offs between links and aggregation. Aggregation is sometimes better
because it encapsulates parts as secrets of the whole. Links are sometimes better because they
permit looser coupling among objects.
8
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
Association
Of the different kinds of class relationships, associations are the most general. The identification
of associations among classes is describing how many classes/objects are taking part in the
relationship. As an example for a vehicle, two of our key abstractions include the vehicle and
wheels. As shown in Figure 3–7, we may show a simple association between these two classes:
the class Wheel and the class Vehicle.
Multiplicity/Cardinality
This multiplicity denotes the cardinality of the association. There are three common kinds of
multiplicity across an association:
1. One-to-one
2. One-to-many
3. Many-to-many
Inheritance
Inheritance, perhaps the most semantically interesting of the concrete relationships, exists to
express generalization/specialization relationships. Inheritance is a relationship among classes
wherein one class shares the structure and/or behavior defined in one (single inheritance) or more
(multiple inheritance) other classes. Inheritance means that subclasses inherit the structure of
their superclass.
Space probe (spacecraft without people) report back to ground stations with information
regarding states of important subsystems (such as electrical power & population systems) and
different sensors (such as radiation sensors, mass spectrometers, cameras, detectors etc), such
relayed information is called telemetry data. We can take an example for Telemetry Data for our
illustration.
9
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
Single Inheritence
10
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
Multiple Inheritence
11
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
Polymorphism
Polymorphism is a concept in type theory wherein a name may denote instances of many
different classes as long as they are related by some common superclass. Any object denoted by
this name is thus able to respond to some common set of operations in different ways. With
polymorphism, an operation can be implemented differently by the classes in the hierarchy.
Consider the class hierarchy in Figure 3–11, which shows the base class DisplayItem along with
three subclasses named Circle, Triangle, and Rectangle. Rectangle also has one subclass, named
SolidRectangle. In the class DisplayItem, suppose that we define the instance variable theCenter
(denoting the coordinates for the center of the displayed item), along with the following
operations:
■ draw: Draw the item.
■ move: Move the item.
■ location: Return the location of the item.
The operation location is common to all subclasses and therefore need not be redefined, but we
expect the operations draw and move to be redefined since only the subclasses know how to
draw and move themselves.
Aggregation
We also need aggregation relationships, which provide the whole/part relationships manifested in
the class’s instances. Aggregation relationships among classes have a direct parallel to
aggregation relationships among the objects corresponding to these classes. As shown in Figure
3–12, the class TemperatureController denotes the whole, and the class Heater is one of its parts.
12
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
Physical Containment
In the case of the class TemperatureController, we have aggregation as containment by value, a
kind of physical containment meaning that the Heater object does not exist independently of its
enclosing TemperatureController instance. Rather, the lifetimes of these two objects are
intimately connected: When we create an instance of TemperatureController, we also create an
instance of the class Heater. When we destroy our TemperatureController object, by implication
we also destroy the corresponding Heater object.
Using
Using shows a relationship between classes in which one class uses certain services of
another class in a variety of ways. "Using" relationship is equivalent to an association,
although the reverse is not necessarily true.
Genericity
The possibility for a language to provided parameterized modules or types. E.g. List (of:
Integer) or List (of: People). There are four basic ways of genericity
• Use of Macros – in earlier versions of C++, does not work well except on a small scale.
• Building heterogenous container class: used by small task and rely upon instance of
some distant base class.
• By building generalized container classes as in small task, but then using explicity type
checking code to enforce the convention that the contents are all of the same clam,
which is asserted when the container object is created used in object Pascal, which are
strongly typed support heritance but don't support any form of parameterized class.
• Using parameterized class (Also known as generic class) is one that serves as a
temperature for other classes & template that may be parameterized by other classes,
objects and or operations. A parameterized class must be instantiated (i.e. parameters
must be filled in) before objects can be created.
Metaclass
Metaclass is a class whose instances are themselves classes. Small task and CLOS support the
concept of a metaclass directly, C++ does not. A class provides an interface for the programmer
to interface with the definition of objects. Programmers can easily manipulate the class.
13
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
Metaclass is used to provide class variables (which are shared by all instances of the class) and
operations for initializing class variables and for creating the metaclass's single instance.
As shown in figure 3-13, a class variable next ID for the metaclass of telemetry data can be
defined in order to assist in generating district ID's up on the creation of each instance of
telemetry data. Similarly, an operation can be defined for creating new instances of the class,
which perhaps generates them from some pre-allocated pool of storage. In C++, and destructors
serve the purpose of metaclass creation operations. Member function and member objects as
static in C++ are shared by all instances of class in C++. Static member’s objects and static
member function of C++ are equivalent to small task's metaclass operations.
Importance of proper classification
Classification is the means where by we order knowledge. There is no any golden path to
classification. Classification and object oriented development: The identification of classes and
objects is the hardest part of object oriented analysis and design, identification involves both
discovery and invention. Discovery helps to recognize the key abstractions and mechanisms that
form the vocabulary of our problem domain. Through invention, we desire generalized
abstractions as well as new mechanisms that specify how objects collaborate discovery and
inventions are both problems of classifications.
Intelligent classification is actually a part of all good science class of should be meaningful is
relevant to every aspect of object oriented design classify helps us to identify generalization,
specialization, and aggregation hierarchies among classes classify also guides us making
decisions about modularizations.
taxonomy is the kingdom, increased in order from phylum, subphylum class, order, family,
genus and finally species. Recently classify has been approached by grouping organisms that
share a common generic heritage i.e. classify by DNA. DNA in useful in distinguishing
organisms that are structurally similar but genetically very different classify depends on what
you want classification to do. In ancient times, all substances were through to be sure ambulation
of earth, fire, air and water. In mid 1960s – elements were primitive abstractive of chemistry in
1869 periodic law came.
Classical categorizations
All the entities that have a given property or collection of properties in common forms a
category. Such properties are necessary and sufficient to define the category. i.e. married people
constitute a category i.e. either married or not. The values of this property are sufficient to decide
to which group a particular person belongs to the category of tall/short people, where we can
agree to some absolute criteria. This classification came from plato and then from Aristotle's
classification of plants and animals. This approach of classification is also reflected in modern
theories of child development. Around the age of one, child typically develops the concept of
object permanence, shortly there after, the child acquires skill in classifying these objects, first
using basic category such as dogs, cats and toys. Later the child develops more general
categories (such as animals). In criteria for sameness among objects specifically, one can divide
objects into disjoint sets depending upon the presence or absence of a particular property.
Properties may denote more than just measurable characteristics. They may also encompass
observable behaviors e.q. bird can fly but others can notis one property.
15
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
Conceptual clustering
It is a more modern variation of the classical approach and largely derives from attempts to
explain how knowledge is represented in this approach, classes are generated by first formulating
conceptual description of these classes and then classifying the entities according to the
descriptions. e.g. we may state a concept such as "a love song". This is a concept more than a
property, for the "love songness" of any song is not something that may be measured
empirically. However, if we decide that a certain song is more of a love song than not, we place
it in this category. thus this classify represents more of a probabilistic clustering of objects and
objects may belong to one or more groups, in varying degree of fitness conceptual clustering
makes absolute judgments of classify by focusing upon the best fit.
Prototype theory
It is more recent approach of classify where a class of objects is represented by a prototypical
object, an object is considered to be a member of this class if and only if it resembles this
prototype in significant ways. e.g. category like games, not in classical since no single common
properties shared by all games, e.g. classifying chairs (beanbag chairs, barber chairs, in
prototypes theory, we group things according to the degree of their relationship to concrete
prototypes.
There approaches to classify provide the theoretical foundation of objected analysis by which we
identify classes and objects in order to design a complex software system.
Classical approaches
It is one of approaches for analysis which derive primarily from the principles of classical
categorization. e.g. Shlaer and Mellor suggest that classes and objects may come from the
following sources:
• Tangible things, cars, pressure sensors
• Roles – Mother, teacher, politician
• Events – landing, interrupt
• Interactions – meeting
From the perspective of database modeling, ross offers the following list:
(i) People – human who carry out some function
(ii) Places – Areas set for people or thing
(iii) Things – Physical objects (tangible)
(iv) Organizations – organized collection of people resources
(v) Concepts – ideas
(vi) Events – things that happen
Coad and Yourdon suggest another set of sources of potential objects.
(i) Structure
16
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
(ii) Dences
(iii) Events remembered (historical)
(iv) Roles played (of users)
(v) Locations (office, sites)
(vi) Organizational units (groups)
Behavior Analysis
Dynamic behavior also be one of the primary source of analysis of classes and objects things can
are grouped that have common responsibilities and form hierarchies of classes (including
superclasses and subclasses). System behaviors of system are observed. These behaviors are
assigned to parts of system and tried to understand who initiates and who participates in these
behaviors. A function point is defined as one and user business functions and represents some
kind of output, inquiry, input file or interface.
Domain Analysis
Domain analysis seeks to identify the classes and objects that are common to all applications
within a given domain, such as patient record tracking, compliers, missile systems etc. Domain
analysis defined as an attempt to identify the objects, operations and, relationships that are
important to particular domain.
More and Bailin suggest the following steps in domain analysis.
i) Construct a strawman generic model of the domain by consulting with domain expert.
ii) Examine existing system within the domain and represent this understanding in
a common format.
iii) Identify similarities and differences between the system by consulting with
domain expert.
iv) Refine the generic model to accommodate existing systems.
Vertical domain Analysis: Applied across similar applications.
Horizontal domain Analysis: Applied to related parts of the same application domain expert
islike doctor in a hospital concerned with conceptual classification.
CRC cards
CRC are a useful development tool that facilitates brainstorming and enhances communication
among developers. It is 3 x 5 index card (class/Responsibilities/collaborators i.e. CRC) upon
which the analyst writes in pencil with the name of class (at the top of card), its responsibilities
17
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
(on one half of the card) and its collaborators (on the other half of the card). One card is created
for each class identified as relevant to the scenario. CRC cards are arranged to represent
generalization/specialization or aggregation hierarchies among the classes.
Structured Analysis
Same as English description as an alternative to the system, many CASE tools assists in
modeling of the system. In this approach, we start with an essential model of the system, as
described by data flow diagrams and other products of structured analysis. From this model we
may proceed to identify the meaningful classes and objects in our problem domain in 3 ways.
• Analyzing the context diagrams, with list of input/output data elements; think about what
they tell you or what they describe e.g. these make up list of candidate objects.
• Analyzing data flow domains, candidate objects may be derived from external entities,
data stores, control stores, control transformation, candidate classes derive from data
flows and candidate flows.
• By abstraction analysis: In structured analysis, input and output data are examined and
followed inwards until they reach the highest level of abstraction.
18
Object Oriented System Analysis and Design Chapter 3 : Classes and Objects
general, thus making inheritance by a subclass difficult because of the large semantic gap. This is
called a grainsize conflict.
Naming conventions are as follows:
- Objects should be named with proper noun phrases such as the sensor or simply shapes.
- Classes should be named with common noun phrases, such as sensor or shapes.
- Modifier operations should be named with active verb phrases such as draw, moveleft.
- Selector operations should imply a query or be named with verbs of the form "to be"
e.g. is
open, extent of.
Identifying Mechanisms
Finding Mechanism
A mechanism is a design decision about how collection of objects cooperates. Mechanisms
represent patterns of behavior e.g. consider a system requirement for an automobile: pushing the
accelerator should cause the engine to run faster and releasing the accelerator should cause the
engine to run slower. Any mechanism may be employed as long as it delivers the required
behavior and thus which mechanism is selected is largely a matter of design choice. Any of the
following design might be considered.
- A mechanical linkage from the acceleration to the (the most common mechanism)
- An electronic linkage from a preserve sensor below the accelerator to a computer that
controls the carburetor (a drive by wire mechanism)
- No linkage exists; the gas tank is placed on the roof of the car and gravity causes fuel to
flow to the engine. Its rate of flow is regulated by a clip around the fuel the pushing on
the
accelerator pedal eases tension on the clip, causing the fuel to flow faster (a low cost
mechanism)
Key abstractions reflect the vocabulary of the problem domain and mechanisms are the soul of
the design. Idioms are part of a programming culture. An idiom is an expression peculiar to a
certain programming language. e.g. in CLOS, no programmer use under score in function or
variable names, although this is common practice in ada.
A frame work is collection of classes that provide a set of service for a particular domain. A
framework exports a number of individual classes and mechanisms which clients can use.
Examples of mechanisms:
Consider the drawing mechanism commonly used in graphical user interfaces. Several objects
must collaborate to present an image to a user: a window, a new, the model being viewed and
some client that knows when to display this model. The client first tells the window to draw
itself. Since it may encompass several subviews, the window next tells each if its subviews to
draw them. Each subview in turn tells the model to draw itself ultimately resulting in an image
shown to the user.
19
Object Oriented System Analysis and Design Chapter 4 : The Notation
3
3
7
Object Oriented System Analysis and Design
Chapter 7 : Applications: Client Server Computing