Component-Level Design
Data, architectural, and interface design must be translated into operational software. To accomplish this, the design must be represented at a level of abstraction that is close to code. Component-level design establishes the algorithmic detail required to manipulate data structures, effect communication between software components via their interfaces, and implement the processing algorithms allocated to each component. Three resource topics are considered:
Component-Level Design Concepts
Object Constraint Language
Structured Programming
Component-Based Software Engineering
Tutorials, Articles and Papers on Components
Reuse and Reusability
Component Libraries and Tools
Books
Component-Level Design Concepts
General Principles of Component Design
A collection of design principles provided by Microsoft.
Essential Properties (or Characteristics) of Software Components
The fundamental characteristics of effective components.
Software Component Design
A discussion of preconditions, tasks and work products.
Component Design Guidelines
A set of simple guidelines for the design and construction of software components.
Component Level Detailed Design
Guidelines for component level design by Caltrans
Software Component Specification Using Design by Contract
A slide presentation that addresses design by contract.
The Software Component Assembly Model
An introduction to the JavaBeans software component model.
"Component model" vs "MVC structure"
A brief commentary.
pdf: On a Software Component Marketplace
A paper in which "architectural style is analyzed to determine its potential as a future software component marketplace in the user interface domain."
Software Components
Definitions, comparisons and related technologies.
Papers on Component Design
Also links to checklists, templates and guides.
Video: Class and Component Level Design
An introductory lecture on class and component level design.
OO Design
A brief discussion of OOD with examples.
OO Design Principles - 1
How to determine whether an OO design is 'good.'
OO Design Principles - 2
A short paper on OO design principles with emphasis on Visual basic.
OO Design Principles - 3
Two principles to help create robust, reusable object-oriented design apps
Design of an OO Calculator
Discussion of design principles and useful examples in UML.
Object Constraint Language (OCL)
Introduction to OCL
A brief but worthwhile introduction. Recommended.
OCL Resources
A limited collection of pointers to documents and tools.
OCL Resources-Tools
Pointers to selected OCL tools.
Object Constraint Language
Quotes, pointers and other useful information.
pdf: UML 2.0 OCL Specification
"This specification contains defines the Object Constraint Language (OCL), version 2.0. OCL version 2.0 is the version of. OCL that is aligned with UML 2.0."
pdf: Object Constraint Language (OCL) Introduction
A fairly detailed slideshow on OCL. Recommended.
What is OCL?
Useful information provided in a white paper about OCL.
OCL Center
Information on the latest release of the standards, general introduction, tools, and other resources.
OCL Resources
OCL resources and statements from IBM.
OCL Tutorial
In-depth discussion of OCL along with many examples.
Using OCL for Meta-Modeling
An in-depth report out of McGill University.
OCL examples
Examples of important OCL notation.
Some Shortcomings of OCL, the Object Constraint Language of UML
A downloadable paper.
Structured Programming
Structured Programming Tutorial
A simple tutorial on structured programming basics.
Structured Programming in Java
A brief paper discussed the use of structured programming constructs in Java.
Wikipedia Structured Programming
A brief discussion of structured programming.
The Genesis of Structured Programming (pdf)
You can download Dijkstra's handwritten recollection of the genesis of his 'Notes on Structured Programming.'
Flow Charting Tutorial
For those who have no prior experience with this procedural design form.
Decision Tables
A brief description of table structure and mechanics.
Component-Based Software Engineering
Wikipedia-CBSE
An excellent introduction to CBSE. Recommended.
Generative and Component-Based Software Engineering-Hotlist
A hotlist of resources, research projects and other useful information.
Component-Based Software Engineering Group-Hotlist
Links to publications and other resources relevant to CBSE.
Introduction to CBSE
This introductory papers address "what" and "why." Also considers the CBSE process and domain engineering.
Component-Based Software Engineering-Slide Presentation
A introduction to CBSE.
pdf: Component-Based Software Engineering in Pervasive Computing Environments
Pervasive computing raises a number of new challenges for component-based software engineering that heretofore have been given little attention, such as mobility, adaptability, and resource awareness.
pdf: Aspect Component Based Software Engineering
This paper analyses the problem of crosscutting which is produced during component development, and a component based development extension using Aspect Oriented techniques is proposed.
CBSE/CBD Resources
A useful collection of links to papers and other resources. Recommended.
Tutorials, Articles and Papers on Components
CBSE-Selected papers and references-early 2000s
Downloadable CBSE references with links.
CBSE Subtopics
This conference "call for papers" presents a useful listing of subtopics that have direct relevance to CBSE. No active links provided, however.
Support for Collaborative Component-Based Software Engineering
Little support for maintaining large distributed collections of heterogeneous software components across a number of projects has been developed. The CoDEEDS project addresses the collaborative determination, elaboration, and evolution of design spaces that describe both static and dynamic compositions of software components from sources such as component libraries, software service directories, and reuse repositories. Downloadable paper.
Reuse and Reusability
Fundamental Principles of Reuse
A brief, but useful discussion of reuse the the principles that guide its application.
The importance of integrating software reuse into corporate culture
An article that argues that "In order to achieve efficient and methodical code reuse, organizations must integrate this goal into their culture."
Why Software Reuse has Failed and How to Make It Work for You
"When technical impediments to reuse are combined with common non-technical organizational, economical, administrative, political, and psychological impediments, achieving significant levels of software reuse throughout an organization becomes decidedly non-trivial."
What's Wrong with Software Reuse?
A commentary by Robert Glass
No Name: Just Notes on Software Reuse
"In the beginning, so our myths and stories tell us, the programmer created the program from the eternal nothingness of the void. In this essay, we recognise that programs these days are like any other assemblage, and suggest that in fact programming has always been about reuse"
RKT (Rapid Knowledge Transfer) Design Principles
Five important principles for creating effective reuse libraries.
Reuse metrics
A summary of reuse-specific metrics that can be useful when instituting a reuse program.
Software Reuse articles
A small collection of articles on reuse.
APPRAISAL Project
The APPRAISAL project is a technology transfer project which is intended to support the industrial exploitation of software reuse.
Software Reuse Manufacturing Reference Model: Development and Validation
"The software development industry will not be successful in utilizing and managing software reuse paradigms until there is a conceptualized, well defined and "validated empirical reference model" for software manufacturing that incorporates best software reuse practice and that can be customized for different kinds of software development enterprises."
pdf: Software Reuse and Commercial Off-the-Shelf Software
A discussion of reuse and the use of COTS components.
pdf: Towards a Practical and Efficient Process for Software Reuse
The main contribution of this work will be the development of a systematic reuse process in order to allow the development of components and applications. The process will be based on the analysis of the state-of-the-art in the area, including processes for domain engineering and software product lines.
pdf: Characteristics of Software Reuse Strategies
This research identifies the characteristics of systematic software reuse strategies and evaluates how they contribute to a successful reuse program using survey data collected from seventy-one software development groups.
Video: Writing Reusable Apps in Django
Some very language specific stuff, but also some good advice.
Component Libraries and Tools
Reusable Software Components
A library of useful software components.
The LibMib Software Component Library
"The Libmib software library consists of highly reusable software functions in C and C++. Using the Libmib library and other reusable components reduces risk and cuts development time."
AI/Knowledge-based Systems Components
"Each component represents an entity, event, role or property. By instantiating and combining these components, complex representations can be built simply."
OpenMAX - The Standard for Media Library Portability
"OpenMAX is a royalty-free, cross-platform API developed by the Khronos Group that provides a comprehensive media codec and application portability by enabling accelerated multimedia components to be developed, integrated and programmed across multiple operating systems and silicon platforms."
AGI Software Components
Although these are commercial products and not free, this site provides a worthwhile view of the component marketplace and a representative example of for-fee software component libraries.
pdf: Math Description Engine (MDE) Software Component Library
A document describing NASA's component library.
pdf: Classifying software components using design characteristics
Classifying software modules in a component library is a major problem in software reuse. Indexing criteria must adequately reflect the semantics of the components. The authors present a method for determining if indexing criteria are effective, and show results using a set of criteria automatically extracted from an existing collection of programs.
pdf: Specification-Based Browsing of Software Component Libraries
Specification-based retrieval provides exact contentoriented access to component libraries but requires too much deductive power. Specification-based browsing evades this bottleneck by moving any deduction into an offline indexing phase.
Books
Design principles, concepts, guidelines and techniques for software components are discussed in many books on software engineering and modeling methods. Among the many sources of information are:
Object-Oriented Analysis and Design, second edition
Applying UML and Patterns
Object-Oriented Software Engineering
Streamlined Object Modeling: Patterns, Rules and Implementation
Object-Oriented and Classical Software Engineering, fifth edition
Systems Analysis and Design: An Object-Oriented Approach with UML
Object-Oriented Methods: Principles and Practice
Designing Flexible Object-Oriented Systems with UML
Using UML: Software Engineering with Objects and Components
Object-Oriented Design Heuristics.
The design by contract concept is a useful design paradigm. The following books consider this topic in details:
Design by Contract by Example
Design Patterns and Contracts.
Books on design patterns can be found at our Pattern-Based Design page. In addition the following titles are worth examining:
Design Patterns Java Workbook
Design Patterns Explained
Design iteration is essential for the creation of high quality designed.
Refactoring: Improving the Design of Existing Code provides useful guidance that can be applied as a design evolves.
Structured Programming: Theory and Practice remains a definitive treatment of the subject. The text contains a good PDL as well as detailed discussions of the ramifications of structured programming.
Other books that focus on procedural design issues for traditional systems include:
Simple Program Design, third edition
A Guide to Programming Logic and Design
Programming Pearls, second edition
The Practice of Programming
Structured Programming
Object Modeling with the OCL discusses "the Rationale behind the Object Constraint Language"
Many books on component-based development and component reuse have been published in recent years. The following provide a reasonable sample:
Practical Software Reuse
Software Reuse: Methods, Techniques, and Tools
Service- and Component-based Development
Component-Based Software Engineering: Putting the Pieces Together
Large Scale Component Based Development
Realizing eBusiness with Components
Business Component Factory presents a "Comprehensive Overview of Component-Based Development for the Enterprise."
The Domain Theory discusses "patterns for knowledge and software reuse."
UML Components: A Simple Process for Specifying Component-Based Software discusses CBSE with a UML emphasis.
Testing and Quality Assurance for Component-Based Software and
Component-Based Software Testing With UML presents testing and SQA issues for component-based systems.
|