Book description
Software Design for Engineers and Scientists integrates three core areas of computing:. Software engineering - including both traditional methods and the insights of 'extreme programming'
. Program design - including the analysis of data structures and algorithms
. Practical object-oriented programming
Without assuming prior knowledge of any particular programming language, and avoiding the need for students to learn from separate, specialised Computer Science texts, John Robinson takes the reader from small-scale programing to competence in large software projects, all within one volume. Copious examples and case studies are provided in C++ and students can access complementary examples in Java on an accompanying website.
The book is especially suitable for undergraduates in the natural sciences and all branches of engineering who have some knowledge of computing basics, and now need to understand and apply software design to tasks like data analysis, simulation, signal processing or visualisation. John Robinson introduces both software theory and its application to problem solving using a range of design principles, applied to the creation of medium-sized systems, providing key methods and tools for designing reliable, efficient, maintainable programs. The case studies are presented within scientific contexts to illustrate all aspects of the design process, allowing students to relate theory to real-world applications. All listings are available on this book’s companion website.
· Core computing topics - usually found in separate specialised texts - presented to meet
the specific requirements of science and engineering students
· Demonstrates good practice through applications, case studies and worked examples
based in real-world contexts
· Additional website resources are available, including useful links and further worked examples using Java
Table of contents
- Cover
- Software Design for Engineers and Scientists
- Contents (1/2)
- Contents (2/2)
- Preface
- 1 Introduction
-
2 Fundamentals
- 2.1 Introduction
- 2.2 The nature of software
- 2.3 Software as mathematics
- 2.4 Software as literature
- 2.5 Organic software
- 2.6 Software design as engineering
- 2.7 Putting the program in its place (1/2)
- 2.7 Putting the program in its place (2/2)
- 2.8 User-centred design
- 2.9 The craft of program construction
- 2.10 Programmers' programming
- 2.11 Living with ambiguity
- 2.12 Summary
- 2.13 Chapter end material
- 3 The craft of software design
-
4 Beginning programming in C++
- 4.1 Introduction
- 4.2 The programming environment
- 4.3 Program shape, output, and the basic types
- 4.4 Variables and their types
- 4.5 Conditionals and compound statements
- 4.6 Loops
- 4.7 Random numbers, timing and an arithmetic game
- 4.8 Functions
- 4.9 Arrays and C-strings
- 4.10 Program example: A dice-rolling simulation
- 4.11 Bitwise operators
- 4.12 Pointers
- 4.13 Arrays of pointers and program arguments
- 4.14 Static and global variables
- 4.15 File input and output
- 4.16 Structures
- 4.17 Pointers to structures
- 4.18 Making the program more general
- 4.19 Loading structured data
- 4.20 Memory allocation
- 4.21 typedef
- 4.22 enum
- 4.23 Mechanisms that underlie the program
- 4.24 More on the C/C++ standard library
- 4.25 Chapter end material
-
5 Object-oriented programming in C++
- 5.1 The motivation for object-oriented programming
- 5.2 Glossary of terms in object-oriented programming
- 5.3 C++ type definition, instantiation and using objects
- 5.4 Overloading
- 5.5 Building a String class (1/2)
- 5.5 Building a String class (2/2)
- 5.6 Derived types, inheritance and polymorphism
- 5.7 Exceptions
- 5.8 Templates
- 5.9 Streams
- 5.10 C++ and information localization
- 5.11 Chapter end material
-
6 Program style and structure
- 6.1 Write fewer bugs!
-
6.2 Ten programming errors and how to avoid them
- The invalid memory access error
- The off-by-1 error
- Incorrect initialization
- Variable type errors
- Loop errors
- Incorrect code blocking
- Returning a pointer or a reference to a local variable
- Other problems with new and delete
- Inadequate checking of input data
- Different modules interpret shared items differently
- 6.3 Style for program clarity
- 6.4 Multifile program structure
- 6.5 A program that automatically generates a multifile structure
- 6.6 Chapter end material
-
7 Data structures
- 7.1 Structuring data
- 7.2 Memory usage and pointers
- 7.3 Linked lists
- 7.4 Data structures for text editing
- 7.5 Array/Linked list hybrids
- 7.6 Trees
- 7.7 Elementary abstract data types
- 7.8 The ADT table – definition
- 7.9 Implementing the ADT table with an unordered array
- 7.10 Alternative implementations
- 7.11 Chapter end material
- 8 Algorithms
- 9 Design methodology
- 10 Understanding the problem
-
11 Researching possible solutions
- 11.1 Introduction
- 11.2 Basic analysis
- 11.3 Experiment
- 11.4 Prototyping and simulation
- 11.5 Notations and languages for developing designs
- 11.6 Dataflow diagrams
- 11.7 Specifying event-driven systems
- 11.8 Table-driven finite state machines
- 11.9 Statecharts
- 11.10 Using statecharts – a clock radio example
- 11.11 State sketches – using state diagrams to understand algorithms
- 11.12 Chapter end material
- 12 Modularization
- 13 Detailed design and implementation
-
14 Testing
- 14.1 Introduction
- 14.2 Finding faults
- 14.3 Static analysis
- 14.4 Dynamic testing: (deterministic) black box test
- 14.5 Statistical black box testing
- 14.6 White box testing
- 14.7 Final words on testing for finding faults
- 14.8 Assessing performance
- 14.9 Testing to discover
- 14.10 Release
- 14.11 Chapter end material
-
15 Case study: Median filtering
- 15.1 Introduction to the case studies
- 15.2 Introduction to this chapter
- 15.3 Background
- 15.4 Why use median filtering?
- 15.5 The application
- 15.6 Approaching the problem
- 15.7 Rapid prototyping
- 15.8 Exploit existing solutions (1/2)
- 15.8 Exploit existing solutions (2/2)
- 15.9 Finishing (1/2)
- 15.9 Finishing (2/2)
- 16 Multidimensional minimization – a case study in numerical methods
-
17 stable – designing a string table class
- 17.1 A perennial problem in data analysis
- 17.2 Design approach
- 17.3 Rapid prototyping a framework
- 17.4 A quick fix
- 17.5 Reading and writing
- 17.6 Finding things
- 17.7 Matching the requirements
- 17.8 Generalizing stable to do more
- 17.9 Size flexibility
- 17.10 Yet more generality: using templates to store other types in stable
- 17.11 A final program before refactoring
- 17.12 Refactoring (1/4)
- 17.12 Refactoring (2/4)
- 17.12 Refactoring (3/4)
- 17.12 Refactoring (4/4)
- Appendix: Comparison of algorithms for standard median filtering (1/2)
- Appendix: Comparison of algorithms for standard median filtering (2/2)
- Index
Product information
- Title: Software Design for Engineers and Scientists
- Author(s):
- Release date: October 2004
- Publisher(s): Newnes
- ISBN: 9780080474403
You might also like
book
Statistics for Biomedical Engineers and Scientists
Statistics for Biomedical Engineers and Scientists: How to Analyze and Visualize Data provides an intuitive understanding …
book
Introduction to Optimum Design, 2nd Edition
Introduction to Optimum Design is intended for use in a first course on engineering design and …
book
Essential MATLAB for Engineers and Scientists Fourth Edition
The essential guide to MATLAB as a problem solving tool This text presents MATLAB both as …
book
Essential MATLAB for Engineers and Scientists, 3rd Edition
Essential MATLAB for Engineers and Scientists, Third Edition, is an essential guide to MATLAB as a …