WorksheetsDesign
Total questions: 85
Worksheet time: 43mins
Sommerville 2014
As new software engineering techniques help us to build larger, more complex systems, the demands change. Systems have to be built and delivered more quickly. Larger, even more complex systems are required. Systems have to have new capabilities that were previously thought to be impossible.
For every 25% increase in problem complexity, there is a 100% increase in complexity of the software solution.
The aim of the design workflow is to refine the artifacts of the analysis workflow until the material is in a form that can be implemented by the programmers.
Glass 2004
For every 25% increase in problem complexity, there is a 100% increase in complexity of the software solution.
As new software engineering techniques help us to build larger, more complex systems, the demands change. Systems have to be built and delivered more quickly. Larger, even more complex systems are required. Systems have to have new capabilities that were previously thought to be impossible.
The aim of the design workflow is to refine the artifacts of the analysis workflow until the material is in a form that can be implemented by the programmers.
UP Design Workflow
a complex, iterative process. The initial design solution will likely be wrong and certainly not optimal.
The aim of the design workflow is to refine the artifacts of the analysis workflow until the material is in a form that can be implemented by the programmers.
The process of resolving a functional relationship into its constituent parts
Architectural design – critical early decisions
There is seldom one best design solution to a software problem.
focus on nonfunctional requirements • decomposition into modules - module = function? class? package?
a complex, iterative process. The initial design solution will likely be wrong and certainly not optimal.
Design
Code-and-fix Functional decomposition Structured programming Object-oriented programming, design, and requirements analysis Design patterns and tactics
There is seldom one best design solution to a software problem.
a complex, iterative process. The initial design solution will likely be wrong and certainly not optimal.
Design is Iterative
Top designers pursue a design solution not by working in an ordered and top-down (or even bottom-up) fashion, but by pursuing targets of important opportunity. And those targets of important opportunity are usually the difficult ones, the ones for which the designer sees no immediate solution. When expert designers got right down to the nitty-gritty of design work, their approaches turned out to be heuristic, trial and error.
There is seldom one best design solution to a software problem.
Code-and-fix Functional decomposition Structured programming Object-oriented programming, design, and requirements analysis Design patterns and tactics
Design Choices
The process of resolving a functional relationship into its constituent parts
Code-and-fix Functional decomposition Structured programming Object-oriented programming, design, and requirements analysis Design patterns and tactics
There is seldom one best design solution to a software problem. In a room of top software designers, if any two of them agree, that’s a majority. Bill Curtis. The design process is opportunistic.
Evolving Design Strategies
A lexically contiguous sequence of program statements, bounded by boundary elements, with an aggregate identifier (Yourdon 1979)
The process of resolving a functional relationship into its constituent parts
Code-and-fix Functional decomposition Structured programming Object-oriented programming, design, and requirements analysis Design patterns and tactics
Functional Decomposition
A module is any collection of executable program statements meeting all of the following criteria
The process of resolving a functional relationship into its constituent parts
A lexically contiguous sequence of program statements, bounded by boundary elements, with an aggregate identifier (Yourdon 1979)
Functional Development types
reductionism (vs holism) - decomposition, reductionism, stepwise refinement, divide and conquer, top-down design, etc. • hierarchy • modularity • information hiding - hide information about the design from other modules, at the points of difficulty or likely change - abstraction, encapsulation
A lexically contiguous sequence of program statements, bounded by boundary elements, with an aggregate identifier
A module is any collection of executable program statements meeting all of the following criteria:
D.L. Parnas
On the Criteria to be Used in Decomposing Systems into Modules,” Communications of the ACM, December 1972.
A lexically contiguous sequence of program statements, bounded by boundary elements, with an aggregate identifier
A module is any collection of executable program statements meeting all of the following criteria
Yourbon 1979
A module is any collection of executable program statements meeting all of the following criteria
A lexically contiguous sequence of program statements, bounded by boundary elements, with an aggregate identifier
avoid tests and gotos that lead to "spaghetti code"
Myers 1978
avoid tests and gotos that lead to "spaghetti code"
A lexically contiguous sequence of program statements, bounded by boundary elements, with an aggregate identifier
A module is any collection of executable program statements meeting all of the following criteria
it is a closed subroutine • it can be called from any other module in the program • it has the potential of being independently compiled
Structured Programming
avoid tests and gotos that lead to "spaghetti code
A programming paradigm aimed at improving the clarity, quality, and development time of a computer program by making extensive use of subroutines, block structures, for and while loops
The art of designing the components of a system and the interrelationships between those components in the best possible way
McCracken
it was the use of the three basic control structures, single-entry/single-exit modules, and the use of indented code.
the use of the three basic control structures, short routine lengths, and indented coding.
the three basic control structures, application of management techniques to top-down design and implementation, and levels of abstraction.
"a top-down sequence for program unit creation and testing, and a technical standard for the coding of each unit
Donaldson
the use of the three basic control structures, single-entry/single-exit modules, and the use of indented code.
"a top-down sequence for program unit creation and testing, and a technical standard for the coding of each unit
as the use of the three basic control structures, short routine lengths, and indented coding.
it as the three basic control structures, application of management techniques to top-down design and implementation, and levels of abstraction.
Miller and Lindamood
"a top-down sequence for program unit creation and testing, and a technical standard for the coding of each unit
the three basic control structures, application of management techniques to top-down design and implementation, and levels of abstraction.
as the use of the three basic control structures, short routine lengths, and indented coding.
s the use of the three basic control structures, single-entry/single-exit modules, and the use of indented code.
Baker and Mills
"a top-down sequence for program unit creation and testing, and a technical standard for the coding of each unit
the three basic control structures, application of management techniques to top-down design and implementation, and levels of abstraction.
the use of the three basic control structures, short routine lengths, and indented coding.
the use of the three basic control structures, single-entry/single-exit modules, and the use of indented code.
Yourbon 1979
The structure of a product must conform to the structure of its data
The art of designing the components of a system and the interrelationships between those components in the best possible way The process of deciding which components interconnected in which way will solve some well-specified problem.
Any algorithm can be expressed using only three control structures. • executing one subprogram, and then another subprogram (sequence) • executing one of two subprograms according to the value of a Boolean expression (selection) • executing a subprogram until a Boolean expression is true (iteration)
Structured Design includes
the use of the three basic control structures, single-entry/single-exit modules, and the use of indented code.
The art of designing the components of a system and the interrelationships between those components in the best possible way. The process of deciding which components interconnected in which way will solve some well-specified problem.
Using three control structures (sequential, iteration, selection) • Single entry / single exit - Does not use GOTOs • Indented code • Short functions (fit on 1-2 pages) • High cohesion, low coupling, …
Bohm-Jacopini Theorem
The structure of a product must conform to the structure of its data
Any algorithm can be expressed using only three control structures. • executing one subprogram, and then another subprogram (sequence) • executing one of two subprograms according to the value of a Boolean expression (selection) • executing a subprogram until a Boolean expression is true (iteration)
has never been as popular as operationoriented design • with the rise of OOD, data-oriented design has largely fallen out of fashion
Basic Principle
The structure of a product must conform to the structure of its data
• has never been as popular as operationoriented design • with the rise of OOD, data-oriented design has largely fallen out of fashion
Three similar methods - output oriented analysis
Michael Jackson [1975] • Jean-Dominique Warnier [1976] • Kenneth Orr [1981]
The structure of a product must conform to the structure of its data
• has never been as popular as operationoriented design • with the rise of OOD, data-oriented design has largely fallen out of fashion
Data-oriented design
The structure of a product must conform to the structure of its data
• has never been as popular as operationoriented design • with the rise of OOD, data-oriented design has largely fallen out of fashion
Michael Jackson [1975] • Jean-Dominique Warnier [1976] • Kenneth Orr [1981]
Object Oriented Programming
aka stepwise refinement, reductionism (vs wholism) - Comprehensible (Understandable) (Module size): small enough to understand (Miller’s Law 7 ± 2) - Separation of Concerns
Represents concepts as “objects” that have • data (attributes that describe the object) • associated procedures known as methods Objects are usually instances of classes. Data is accessed by calling specially written functions, commonly called methods. - Objects encapsulate their data within a set of functions designed to ensure that the data are used appropriately.
Are packages of design decisions that have been found to work repeatedly in practice Have known properties that permit reuse Describe classes of design solutions • “chunk” design solutions into a single concept Patterns are found in practice by definition • one does not invent patterns – one discovers them • patterns spontaneously emerge in reaction to environmental conditions - as long as conditions change, new patterns will emerge
Design Patterns
Are packages of design decisions that have been found to work repeatedly in practice Have known properties that permit reuse Describe classes of design solutions • “chunk” design solutions into a single concept Patterns are found in practice by definition • one does not invent patterns – one discovers them • patterns spontaneously emerge in reaction to environmental conditions - as long as conditions change, new patterns will emerge
Information hiding, low coupling, high cohesion are the foundation for the object-oriented paradigm. Represents concepts as “objects” that have • data (attributes that describe the object) • associated procedures known as methods Objects are usually instances of classes. Data is accessed by calling specially written functions, commonly called methods. - Objects encapsulate their data within a set of functions designed to ensure that the data are used appropriately.
- aka stepwise refinement, reductionism (vs wholism) - Comprehensible (Understandable) (Module size): small enough to understand (Miller’s Law 7 ± 2) - Separation of Concerns
Managing Intellectual Complexity
aka stepwise refinement, reductionism (vs wholism) - Comprehensible (Understandable) (Module size): small enough to understand (Miller’s Law 7 ± 2) - Separation of Concerns
solving ever more complex problems building systems that can be maintained
hide details that may change
Divide and Conquer
solving ever more complex problems building systems that can be maintained
aka stepwise refinement, reductionism (vs wholism) - Comprehensible (Understandable) (Module size): small enough to understand (Miller’s Law 7 ± 2) - Separation of Concerns
hide details that may change
Information Hiding
solving ever more complex problems building systems that can be maintained
aka stepwise refinement, reductionism (vs wholism) - Comprehensible (Understandable) (Module size): small enough to understand (Miller’s Law 7 ± 2) - Separation of Concerns
hide details that may change
chunking into higher-level concepts
High Cohesion
Focused on one thing
minimize interconnections
chunking into higher-level concepts
Low Coupling
chunking into higher-level concepts
focused on one thing
minimize interconnections
Three Universal Means of Reducing Complexity
Partitioning the system into parts having identifiable and understandable boundaries
Representing the system as a hierarchy
Maximizing the independence among the parts of the system
aka stepwise refinement, reductionism (vs wholism) - Comprehensible (Understandable) (Module size): small enough to understand (Miller’s Law 7 ± 2) - Separation of Concerns
hide details that may change
Partitioning the system into parts having identifiable and understandable boundaries
Divide-and-conquer - Boundaries Interfaces - Boundaries Abstraction, Encapsulation
Allows us to iteratively separate our ideas and to deal with increasing amounts of detail - Design tree
Module independence - Low coupling
Representing the system as a hierarchy
Divide-and-conquer - Boundaries Interfaces - Boundaries Abstraction, Encapsulation
Allows us to iteratively separate our ideas and to deal with increasing amounts of detail - Design tree
Module independence - Low coupling
Maximizing the independence among the parts of the system
Divide-and-conquer - Boundaries Interfaces - Boundaries Abstraction, Encapsulation
Allows us to iteratively separate our ideas and to deal with increasing amounts of detail - Design tree
Module independence - Low coupling
Module Independence
The most important consideration in good design, and the single idea on which most of composite design is based, is the idea of high module independence. - To have achieved high independence, the system should have been partitioned so that if two components were not closely related, they would fall into separate partitions, and if two components were closely related, they would fall into the same partition. The key to successful program structuring, therefore, is maximizing module independence.
recursively breaking down a problem into two or more sub-problems of the same or related type, until these become simple enough to be solved directly - aka stepwise refinement, decomposition, functional decomposition, top-down design, reductionism
decompose until “simple enough”? - divided into modules small enough for the programmer to easily understand - one or two pages (no more than 100 lines of codes) is a reasonable rule of thumb - very small modules (less than 10 lines of code) are recommended by many experts
Divide-and-Conquer
recursively breaking down a problem into two or more sub-problems of the same or related type, until these become simple enough to be solved directly - aka stepwise refinement, decomposition, functional decomposition, top-down design, reductionism
- decompose until “simple enough”? - divided into modules small enough for the programmer to easily understand - one or two pages (no more than 100 lines of codes) is a reasonable rule of thumb - very small modules (less than 10 lines of code) are recommended by many experts
If the subtasks are not truly independent of one another, then we are not solving just the two subtasks – for in the solution of non-independent parts, we also are simultaneously dealing with some aspects of the other parts.
How do you know when to stop?
recursively breaking down a problem into two or more sub-problems of the same or related type, until these become simple enough to be solved directly - aka stepwise refinement, decomposition, functional decomposition, top-down design, reductionism
decompose until “simple enough”? - divided into modules small enough for the programmer to easily understand - one or two pages (no more than 100 lines of codes) is a reasonable rule of thumb - very small modules (less than 10 lines of code) are recommended by many experts
If the subtasks are not truly independent of one another, then we are not solving just the two subtasks – for in the solution of non-independent parts, we also are simultaneously dealing with some aspects of the other parts.
Hierarchical Structure
A hierarchical approach is an aid because it allows us to iteratively separate our ideas and to deal with increasing amounts of detail. Hierarchical structure • partial ordering (uses or depends on) between modules or programs • “design tree”
A program that embodies Separation of Concerns well is called a modular program. • Modularity, and hence separation of concerns, is achieved by encapsulating information inside a section of code that has a well-defined interface. • Encapsulation is a means of information hiding. - Wikipedia “Separation of concerns” • Many other design principles derive from SoC
“Clean” decomposition • every module is characterized by its knowledge of a design decision which it hides from all others • “information hiding” and its derivatives
Separation of Concerns
A hierarchical approach is an aid because it allows us to iteratively separate our ideas and to deal with increasing amounts of detail. Hierarchical structure • partial ordering (uses or depends on) between modules or programs • “design tree”
A program that embodies Separation of Concerns well is called a modular program. • Modularity, and hence separation of concerns, is achieved by encapsulating information inside a section of code that has a well-defined interface. • Encapsulation is a means of information hiding. - Wikipedia “Separation of concerns” • Many other design principles derive from SoC
“Clean” decomposition • every module is characterized by its knowledge of a design decision which it hides from all others • “information hiding” and its derivatives
Clean Decomposition
A hierarchical approach is an aid because it allows us to iteratively separate our ideas and to deal with increasing amounts of detail. Hierarchical structure • partial ordering (uses or depends on) between modules or programs • “design tree”
A program that embodies Separation of Concerns well is called a modular program. • Modularity, and hence separation of concerns, is achieved by encapsulating information inside a section of code that has a well-defined interface. • Encapsulation is a means of information hiding. - Wikipedia “Separation of concerns” • Many other design principles derive from SoC
“Clean” decomposition • every module is characterized by its knowledge of a design decision which it hides from all others • “information hiding” and its derivatives
Information Hiding Principle
The principle of segregation of the design decisions in a computer program that are most likely to change, thus protecting other parts of the program from extensive modification if the design decision is changed • provide a stable interface which protects the remainder of the program from the implementation (the details that are most likely to change) • the ability to prevent certain aspects of a class or software component from being accessible to its clients
Generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose
define a procedure — extend the language • abstraction to functions (procedures, methods, routines, subroutines)
designer thinks at the level of an abstract data type • abstraction to classes (abstract data types)
Abstraction
Generalization by reducing the information content of a concept or an observable phenomenon, typically in order to retain only information which is relevant for a particular purpose
define a procedure — extend the language • abstraction to functions (procedures, methods, routines, subroutines)
designer thinks at the level of an abstract data type • abstraction to classes (abstract data types)
Procedural Abstraction
define a procedure — extend the language • abstraction to functions (procedures, methods, routines, subroutines)
designer thinks at the level of an abstract data type • abstraction to classes (abstract data types)
Used to hide the values or state of a structured data object inside a class A language mechanism for restricting direct access to some of the object's components
The fundamental of wrapping chunks of cohesive data with meaningful code. (Unhelkar 2017)
localizes data and prevents them from being directly exposed to the rest of the system • enhances quality and reuse because the data are only accessible through calls to the operations (methods or functions) of a class
the degree to which the elements of a module belong together - focusing on a single concept - cohesion measures the strength of relationship between pieces of functionality within a given module
the manner and degree of interdependence between software modules - a measure of how closely connected two routines or modules are - the strength of the relationships between modules
High Cohesion
the degree to which the elements of a module belong together - focusing on a single concept - cohesion measures the strength of relationship between pieces of functionality within a given module
the manner and degree of interdependence between software modules - a measure of how closely connected two routines or modules are - the strength of the relationships between modules
The degree of interaction between two modules The degree of interdependence between software modules A measure of how closely connected two routines or modules are The strength of the relationships between modules
Levels of Coupling
The degree of interaction between two modules The degree of interdependence between software modules A measure of how closely connected two routines or modules are The strength of the relationships between modules
5. Data coupling
4. Stamp coupling
3. Control coupling
2. Common coupling
1. Content coupling
Two modules are data coupled if all parameters are homogeneous data items (simple parameters, or data structures all of whose elements are used by called module). - when modules share data through, for example, parameters - each datum is an elementary piece, and these are the only data shared (e.g., passing an integer to a function that computes a square root) (Wikipedia)
Goodness of the Types of Coupling
Data coupling is the only good kind of coupling. • maximizes information hiding • follows the principle of least privilege The other kinds of coupling compromise information hiding to one degree or another.
A change in one module usually forces a ripple effect of changes in other modules. Assembly of modules may require more effort and/or time due to the increased inter-module dependency. A particular module may be harder to reuse and/or test because dependent modules must be included.
the number of (non-unique) modules invoked by this module - high fan-out (more than about seven) suggests an overly complex class bad (McConnell 2004) - Green zone -- Up to fan out 6 (Tockey 2018) - Yellow zone -- Fan out 7-9 - Red zone -- Fan out 10 or greater
Disadvantages of High Coupling
Data coupling is the only good kind of coupling. • maximizes information hiding • follows the principle of least privilege The other kinds of coupling compromise information hiding to one degree or another.
A change in one module usually forces a ripple effect of changes in other modules. Assembly of modules may require more effort and/or time due to the increased inter-module dependency. A particular module may be harder to reuse and/or test because dependent modules must be included.
the number of (non-unique) modules invoked by this module - high fan-out (more than about seven) suggests an overly complex class bad (McConnell 2004) - Green zone -- Up to fan out 6 (Tockey 2018) - Yellow zone -- Fan out 7-9 - Red zone -- Fan out 10 or greater
Fan out
The number of modules invoked by this module
the number of occurrences of other modules invoking this module
number of other classes that is a class is coupled to
Green zone
Up to fan out 6(Tockey 2018)
Fan out 7-9
Fan out 10 or greater
Yellow Zone
Up to fan out 6(Tockey 2018)
Fan out 7-9
Fan out 10 or greater
Red Zone
Up to fan out 6(Tockey 2018)
Fan out 7-9
Fan out 10 or greater
Fan in
The number of (non-unique) modules invoked by this module
the number of occurrences of other modules invoking this module
number of other classes that a class is coupled to
CBO(coupling between objects)
number of other classes that a class is coupled to
number of classes that directly inherit one class
Maximum number of nodes between root and lowest node in the hierarchy
number of methods a class is accessible to, including methods implemented in own class as well as methods accessible due to inheritance
NOC(number of children)
number of other classes that directly inherit one class
number of other classes that a class is coupled to
Maximum number of nodes between root and lowest node in the hierarchy
DIT(Depth of Inheritance
maximum number of nodes between root and lowest node in the hierarchy
number of other classes that a class is coupled to
number of classes that directly inherit one class
RFC(Response for a class)
number of methods a class is accessible to, including methods implemented in own class as well as methods accessible due to inheritance
number of classes that directly inherit one class
maximum number of nodes between root and lowest node in the hierarchy
The degree of interaction within a module
a measure of the strength of relationship between the methods and data of a class and some unifying purpose or concept served by that class (Wikipedia)
• focusing on a single thing • having a single responsibility - knowing something - doing something
the probability that a change scenario that affects a responsibility will also affect other (different) responsibilities - the higher the cohesion, the lower the probability that a given change will affect multiple responsibilities
High Cohesion
the probability that a change scenario that affects a responsibility will also affect other (different) responsibilities - the higher the cohesion, the lower the probability that a given change will affect multiple responsibilities
• focusing on a single thing • having a single responsibility - knowing something - doing something
a measure of the strength of relationship between the methods and data of a class and some unifying purpose or concept served by that class (Wikipedia)
A measure of how strongly the responsibilities of a module are related (“unity of purpose”)
a measure of the strength of relationship between the methods and data of a class and some unifying purpose or concept served by that class (Wikipedia)
focusing on a single thing • having a single responsibility - knowing something - doing something
- the probability that a change scenario that affects a responsibility will also affect other (different) responsibilities - the higher the cohesion, the lower the probability that a given change will affect multiple responsibilities
A module has coincidental cohesion if
when parts of a module are grouped because they are logically categorized to do the same thing even though they are different by nature (e.g. grouping all mouse and keyboard input handling routines) (Wikipedia)
it performs multiple, completely unrelated actions.
when parts of a module are grouped by when they are processed; the parts are processed at a particular time in program execution (e.g. a function which is called after catching an exception which closes open files, creates an error log, and notifies the user) (Wikipedia)
A module has logical cohesion when
it performs a series of related actions, one of which is selected by the calling module.
it performs multiple, completely unrelated actions.
it performs a series of actions related in time.
A module has temporal cohesion when
it performs a series of related actions, one of which is selected by the calling module.
it performs multiple, completely unrelated actions.
it performs a series of actions related in time.
A module has procedural cohesion if
it performs a series of actions related in time.
it performs a series of actions related by the procedure to be followed by the product
it performs a series of related actions, one of which is selected by the calling module.
A module has communicational cohesion if
it performs a series of actions related by the procedure to be followed by the product, but in addition all the actions operate on the same data.
it performs a series of actions related by the procedure to be followed by the product, but in addition all the actions operate on the same data.
it performs a series of actions related in time.
A module has information cohesion if
It performs a number of actions, each with its own entry point, with independent code for each action, all performed on the same data structure.
if it performs a series of actions related by the procedure to be followed by the product, but in addition all the actions operate on the same data.
it performs a series of actions related by the procedure to be followed by the product.
A module with functional cohesion
Performs exactly one action
More reusable
Corrective maintenance is easier
Easier to extend a product
When parts of a module are grouped because the output from one part is the input to another part like an assembly
Why is functional cohesion good
it performs a number of actions, each with its own entry point, with independent code for each action, all performed on the same data structure
When parts of a module are grouped because the output from one part is the input to another part like an assembly line
More reusable
Corrective maintenance is easier
Easier to extend a product
Sequential Cohesion
logical cohesion
communicational & sequential cohesion are good • functional & informational cohesion are superior
which parts of a module are grouped because the output from one part is the input to another part like an assembly line
Studies by Constantine, Yourdon, and McConnell indicate that
communicational & sequential cohesion are good • functional & informational cohesion are superior
logical cohesion
temporal cohesion
communication cohesion
If you decompose around a flowchart
Temporal cohesion
communicational cohesion
logical cohesion
If you decompose with respect to time
logical cohesion
you get modules like initialize, Process, and Terminate
Temporal cohesion
a start toward defining abstract data types
communicational cohesion
Sequential Cohesion
If you cluster functions which access a shared data base
a start toward defining abstract data types
Communicational cohesion
sequential cohesion
logical cohesion
You get modules like initialize, process, and terminate
TeTemporal cohesion
If you decompose using a data flow diagram
logical cohesion
Sequential cohesion
a start toward defining abstract data types
communicational cohesion
Reduced module complexity
simpler, having fewer operations
Logical changes in the domain affect fewer modules
Changes in one module require fewer changes in other modules
application developers will find the component they need more easily among the cohesive set of operations provided by the module
Increased System Maintainability
simpler, having fewer operations
logical changes in the domain affect fewer modules
Changes in one module require fewer changes in other modules
application developers will find the component they need more easily among the cohesive set of operations provided by the module
Increased Module reusability
application developers will find the component they need more easily among the cohesive set of operations provided by the module
logical changes in the domain affect fewer modules
changes in one module require fewer changes in other modules
application developers will find the component they need more easily among the cohesive set of operations provided by the module
J.Visser, Building Maintainable Software: Ten Guidelines for Future Proof Code
Too many parameters to a function suggests that the function is trying to do too much
Keep unit interfaces small by limiting the number of parameters on the function to no more than 4
up to 4 parameters
5 or 6 parameters
7 or more
Green Zone
5 or 6 parameters
up to 4 parameters
7 or more
Yellow Zone
5 or 6 parameters
7 or more
up to 4 parameters
Red Zone
up to 4 parameters
5 or 6 parameters
7 or more
Classification
The ability of an instantiated object (at runtime) to understand and interpret the message sent from a calling object.
is the starting point of object oriented paradigm
results from classes being generalized into higher-level or abstracted classes.
Inheritance
results from classes being generalized into higher-level or abstracted classes
The ability of an instantiated object to understand and interpret the message sent from a calling object
Is the starting point of object oriented paradigm based on the requirements appearing in the problem space
Corrective maintenance
fixing defects
changing environment-porting to new platforms
improve performance or maintainability, including enhancements
detect and correct latent faults in the software product refactoring!
