Object-oriented design is the process of planning a system of interacting objects
for the purpose of solving a software problem. It is one approach to software
design. Overview
An object contains encapsulated data and procedures grouped together to represent
an entity. The 'object interface' defines how the object can be interacted
with. An object-oriented program is described by the interaction of these
objects. Object-oriented design is the discipline of defining the objects and
their interactions to solve a problem that was identified and documented
during object-oriented analysis. What follows is a description of the
class-based subset of object-oriented design, which does not include object
prototype-based approaches where objects are not typically obtained by instancing
classes but by cloning other objects. Object-oriented design is a method of
design encompassing the process of object-oriented decomposition and a
notation for depicting both logical and physical as well as state and dynamic
models of the system under design. Object-oriented design topics
= Input for object-oriented design= The input for object-oriented design is
provided by the output of object-oriented analysis. Realize that
an output artifact does not need to be completely developed to serve as input
of object-oriented design; analysis and design may occur in parallel, and in
practice the results of one activity can feed the other in a short feedback cycle
through an iterative process. Both analysis and design can be performed
incrementally, and the artifacts can be continuously grown instead of completely
developed in one shot. Some typical input artifacts for
object-oriented design are: Conceptual model: The result of
object-oriented analysis, it captures concepts in the problem domain. The
conceptual model is explicitly chosen to be independent of implementation
details, such as concurrency or data storage.
Use case: A description of sequences of events that, taken together, lead to a
system doing something useful. Each use case provides one or more scenarios that
convey how the system should interact with the users called actors to achieve
a specific business goal or function. Use case actors may be end users or
other systems. In many circumstances use cases are further elaborated into use
case diagrams. Use case diagrams are used to identify the actor and the
processes they perform. System sequence diagram: A system
sequence diagram is a picture that shows, for a particular scenario of a
use case, the events that external actors generate, their order, and
possible inter-system events. User interface documentations: Document
that shows and describes the look and feel of the end product's user
interface. It is not mandatory to have this, but it helps to visualize the
end-product and therefore helps the designer.
Relational data model: A data model is an abstract model that describes how
data is represented and used. If an object database is not used, the
relational data model should usually be created before the design, since the
strategy chosen for object-relational mapping is an output of the OO design
process. However, it is possible to develop the relational data model and
the object-oriented design artifacts in parallel, and the growth of an artifact
can stimulate the refinement of other artifacts.
= Object-oriented concepts= The five basic concepts of
object-oriented design are the implementation level features that are
built into the programming language. These features are often referred to by
these common names: Object/Class: A tight coupling or
association of data structures with the methods or functions that act on the
data. This is called a class, or object. Each object serves a separate function.
It is defined by its properties, what it is and what it can do. An object can be
part of a class, which is a set of objects that are similar.
Information hiding: The ability to protect some components of the object
from external entities. This is realized by language keywords to enable a
variable to be declared as private or protected to the owning class.
Inheritance: The ability for a class to extend or override functionality of
another class. The so-called subclass has a whole section that is derived from
the superclass and then it has its own set of functions and data.
Interface: The ability to defer the implementation of a method. The ability
to define the functions or methods signatures without implementing them.
Polymorphism: The ability to replace an object with its subobjects. The ability
of an object-variable to contain, not only that object, but also all of its
subobjects. = Designing concepts=
Defining objects, creating class diagram from conceptual diagram: Usually map
entity to class. Identifying attributes.
Use design patterns: A design pattern is not a finished design, it is a
description of a solution to a common problem, in a context. The main
advantage of using a design pattern is that it can be reused in multiple
applications. It can also be thought of as a template for how to solve a problem
that can be used in many different situations and/or applications.
Object-oriented design patterns typically show relationships and
interactions between classes or objects, without specifying the final application
classes or objects that are involved. Define application framework:
Application framework is a term usually used to refer to a set of libraries or
classes that are used to implement the standard structure of an application for
a specific operating system. By bundling a large amount of reusable code into a
framework, much time is saved for the developer, since he/she is saved the
task of rewriting large amounts of standard code for each new application
that is developed. Identify persistent objects/data:
Identify objects that have to last longer than a single runtime of the
application. If a relational database is used, design the object relation
mapping. Identify and define remote objects.
= Output of object-oriented design= Sequence diagram: Extend the system
sequence diagram to add specific objects that handle the system events.
A sequence diagram shows, as parallel vertical lines, different processes or
objects that live simultaneously, and, as horizontal arrows, the messages
exchanged between them, in the order in which they occur.
Class diagram: A class diagram is a type of static structure UML diagram that
describes the structure of a system by showing the system's classes, their
attributes, and the relationships between the classes. The messages and
classes identified through the development of the sequence diagrams can
serve as input to the automatic generation of the global class diagram
of the system. = Some design principles and strategies=
Dependency injection: The basic idea is that if an object depends upon having an
instance of some other object then the needed object is "injected" into the
dependent object; for example, being passed a database connection as an
argument to the constructor instead of creating one internally.
Acyclic dependencies principle: The dependency graph of packages or
components should have no cycles. This is also referred to as having a directed
acyclic graph. For example, package C depends on package B, which depends on
package A. If package A also depended on package C, then you would have a cycle.
Composite reuse principle: Favor polymorphic composition of objects over
inheritance. See also
Class-responsibility-collaboration card GRASP
SOLID IDEF4
Object-oriented analysis Object-oriented programming
References External links
Object-Oriented Analysis & Design - overview using UML
Larman, Craig. Applying UML and Patterns - Third Edition
Object-Oriented Analysis and Design LePUS3 and Class-Z: formal modelling
languages for object-oriented design