Software Essentials: Design and Construction, 1st Edition (Hardback) book cover

Software Essentials

Design and Construction, 1st Edition

By Adair Dingle

Chapman and Hall/CRC

436 pages | 49 B/W Illus.

Purchasing Options:$ = USD
Hardback: 9781439841204
pub: 2014-07-07
SAVE ~$17.39
Currently out of stock
$86.95
$69.56
x
eBook (VitalSource) : 9780429063442
pub: 2014-07-07
from $41.98


FREE Standard Shipping!

Description

Winner of a 2015 Alpha Sigma Nu Book Award, Software Essentials: Design and Construction explicitly defines and illustrates the basic elements of software design and construction, providing a solid understanding of control flow, abstract data types (ADTs), memory, type relationships, and dynamic behavior. This text evaluates the benefits and overhead of object-oriented design (OOD) and analyzes software design options. With a structured but hands-on approach, the book:

  • Delineates malleable and stable characteristics of software design
  • Explains how to evaluate the short- and long-term costs and benefits of design decisions
  • Compares and contrasts design solutions, such as composition versus inheritance
  • Includes supportive appendices and a glossary of over 200 common terms
  • Covers key topics such as polymorphism, overloading, and more

While extensive examples are given in C# and/or C++, often demonstrating alternative solutions, design—not syntax—remains the focal point of Software Essentials: Design and Construction.

About the Cover:

Although capacity may be a problem for a doghouse, other requirements are usually minimal. Unlike skyscrapers, doghouses are simple units. They do not require plumbing, electricity, fire alarms, elevators, or ventilation systems, and they do not need to be built to code or pass inspections.

The range of complexity in software design is similar. Given available software tools and libraries—many of which are free—hobbyists can build small or short-lived computer apps. Yet, design for software longevity, security, and efficiency can be intricate—as is the design of large-scale systems. How can a software developer prepare to manage such complexity? By understanding the essential building blocks of software design and construction.

Reviews

Alpha Sigma Nu 2015 Book Award Winner

"Software Essentials covers the material of software design and construction, an area where the field has made very rapid progress in the last few decades. The material is both accessible for disparate audiences and up to date."

—Alpha Sigma Nu Judge

"Dr. Dingle’s Software Essentials: Design and Construction is a superb companion for a pre, concomitant, and post-study of a 100 through 400 level college education in computer science. The principles outlined in her book are language agnostic and find application amongst myriad language choices faced by modern system developers. Her work provides missing discussion about object-oriented design and dynamic programming considerations that are difficult to glean from a strict, detail oriented, programming approach. This higher level discussion is perfect for students and professionals with a modicum of procedural experience to work with the details of what they already know while allowing them to understand a higher level of abstraction and generality to which their skills are transparently and specifically germane."

—Bruce Cresanta, Entrepreneur

Table of Contents

Preface

Acknowledgments

Detailed Book Outline

Section I: Software Construction

Software Complexity and Modeling

Modern Software

Software Design

Software Utility

Software Production

Software Engineering

The Software Development Life Cycle (SDLC)

Software Process Methodologies

Models

Requirements Analysis and Specification

Software Architecture

Model View Controller

Code Construction

Software Integration

Documentation

Summary

Design Insights

Software Development

Software Execution

General Purpose Utility and Support

Programming Language Evolution

Compilers

Software Design

ADTs

Class Construct

Object-Oriented Programming Languages

UML

Libraries and Frameworks

Software Construction Fundamentals

Summary

Design Insights

Section II: Software Fundamentals

Functionality

Control Flow

Structured Control Flow

Controlled Interruption to Sequential Execution

Readability

Boolean Logic

Short-Circuit Evaluation

Recursion

Sequential Execution

Optimization

Inlining

Summary

Design Insights

Memory

Abstraction of Memory

Heap Memory

C++ Deallocation

C#/Java Heap Memory Management

Memory Overhead

Allocation

Memory Reclamation

Garbage Collection

Reference Counting

Design: Storage versus Computation

Summary

Design Insights

Design and Documentation

Object-Oriented Design

Class Functionality

Constructors

Accessors and Mutators

Utility Functions

Destructors

Programming by Contract

Defensive Programming

Precondition and Postcondition

Invariants

Design Example

Contractual Expectations

OO Design Principles

Summary

Design Insights

Section III: Software Design

Structural Design

Relationships

Composition

Containment

Class Design: Has-a or Holds-a?

Inheritance

Automate Subtype Checking

Inheritance Design

Code Reuse

Class Design: Has-a or Is-a?

Contractual Expectations

OO Design Principles

Summary

Design Insights

Behavioral Design

Inheritance for Functionality

Polymorphism

Overloading

Generics

Subtype Polymorphism

Static Binding versus Dynamic Binding

Heterogeneous Collections

Virtual Function Table

Software Design

Abstract Classes

Real-World Example: Disassembler

Virtual Function Table

Language Differences

Type Introspection

C++ Virtual Destructors

Accessibility of C++ Virtual Functions

OO Design Principles

Summary

Design Insights

Design Alternatives and Perspectives

Comparative Design

Class Design Types

Concrete Class

Abstract Class

Node Class

Wrappers

Delegate

Handle: Smart Pointers

Design Specifications for Inheritance

Inheritance versus Composition

Multiple Inheritance

Multiple Inheritance Imperfections

Single Inheritance with Composition

Simulated Design without Inheritance

Multiple Inheritance Design

Evaluating Design Options

Relevance of Type

OO Design Principles

Summary

Design Insights

Section IV: Software Durability

Software Correctness

Exceptions

Exceptions and Software Design

Testing Design

Scale

Perspective

Coverage

Data Values

Software Qualities

Summary

Design Insights

Software Longevity

Software Maintenance

Software Evolution

Nonfunctional Properties

Refactoring

Reverse Engineering

Summary

Design Insights

Glossary: Definitions and Conceptual Details

References

Appendix A: Memory and the Pointer Construct

Appendix B: Heap Memory and Aliases

Appendix C: Function Pointers

Appendix D: Operator Overloading

Index

About the Author

Adair Dingle is a professor of computer science and software engineering at Seattle University, Washington, USA. She holds a B.Sc in mathematics from Duke University, Durham, North Carolina, USA; a M.Sc in computer science from Northwestern University, Evanston, Illinois, USA; and a Ph.D in computer science from the University of Texas at Dallas, USA. She is coauthor of the book, C++: Memory First, and her work has been published in numerous refereed journals and conference proceedings. Her research interests include computer game dynamics, efficient memory management for object-oriented programming languages and applications, and patterns as tools for software engineering education.

About the Series

Chapman & Hall/CRC Innovations in Software Engineering and Software Development Series

Learn more…

Subject Categories

BISAC Subject Codes/Headings:
COM012040
COMPUTERS / Programming / Games
COM051230
COMPUTERS / Software Development & Engineering / General
COM051300
COMPUTERS / Programming / Algorithms