35986841_10216840653711318_1105697261150535680_n

Software essentials : design and construction / Adair Dingle, Seattle University, Washington, USA.

By: Dingle, Adair
Material type: TextTextSeries: Chapman & Hall/CRC innovations in software engineering and software development seriesPublisher: Boca Raton : CRC Press, Taylor & Francis Group, 2014Edition: 1st edDescription: xxii, 413 pages ; 25 cmContent type: text Media type: unmediated Carrier type: volumeISBN: 9781439841204 (hardback : acidfree paper); 1439841209 (hardback : acidfree paper)Subject(s): Software architecture | Computer software -- Development | COMPUTERS / Software Development & Engineering / General | COMPUTERS / Programming / AlgorithmsDDC classification: 005.12 LOC classification: QA76.76.D47 | D545 2014Other classification: COM051230 | COM051300
Contents:
section I. Software construction -- 1. 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 -- 2. 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 -- section II. Software fundamentals -- 3. Functionality -- Control flow -- Structured control flow -- Controlled interruption to sequential execution -- Readability -- Boolean logic -- Short-circuit evaluation -- Recursion -- Sequential execution -- Optimization -- Inlining -- 4. 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 -- 5. 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 -- section III. Software design -- 6. 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 -- 7. 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 -- 8. 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 -- Imperfections -- Single inheritance with composition -- Simulated design without inheritance -- Multiple inheritance design -- Evaluating design options -- Relevance of type -- section IV. Software durability -- 9. Software correctness -- Exceptions and software design -- Testing design -- Scale -- Perspective -- Coverage -- Data values -- Software qualities -- 10. Software longevity -- Software maintenance -- Software evolution -- Nonfunctional properties -- Refactoring -- Reverse engineering -- Glossary : definitions and conceptual details -- Appendix A. Memory and the pointer construct -- Appendix B. Heap memory and aliases -- Appendix C. Function pointers -- Appendix D. Operator overloading.
Summary: "Preface Why this book? Why should you read this book? The short answer is to study software design from a structured but hands-on perspective and to understand different models of control flow, memory, dynamic behavior, extensibility, etc. Software complexity and the growing impact of legacy systems motivate a renewed interest in software design and modeling. We emphasize design (and construction) in this text, using and contrasting C# and C++. Many CS texts are 'learn to' books that focus on one programming language or tool. When perspective is so limited to a specific tool or programming language, high-level concepts are often slighted. Students may gain exposure to an idea via a 'cookbook' implementation and thus fail to truly absorb essential concepts. Students and/or practitioners can understand and apply design principles more readily when such concepts are explicitly defined and illustrated. Design, not just syntax, must be stressed. The progression of programming languages, software process methodologies and development tools continues to support abstraction: software developers should exploit this abstraction and solve problems (design) without being tied to a particular syntax or tool. Software design and modeling are neither new nor trendy topics. Software development often focuses on immediate effect: implement, test (minimally) and deploy. Yet, the complexity, scale and longevity of modern software require an intricate understanding of a software system as a whole -- components and relationships, user interfaces, persistent data, etc. To accommodate existing use while preserving longevity, a software developer must look forward for extensibility and backward for compatibility. Hence, software developers must understand software design. "--
Tags from this library: No tags from this library for this title. Log in to add tags.
    Average rating: 0.0 (0 votes)
Item type Current location Call number Status Date due Barcode
Books Books Centeral Library
Second Floor - Computer Sciences
005.12 D.A.S 2014 (Browse shelf) Available 23973

Includes bibliographical references (pages 329-330) and index.

section I. Software construction -- 1. 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 -- 2. 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 -- section II. Software fundamentals -- 3. Functionality -- Control flow -- Structured control flow -- Controlled interruption to sequential execution -- Readability -- Boolean logic -- Short-circuit evaluation -- Recursion -- Sequential execution -- Optimization -- Inlining -- 4. 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 -- 5. 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 -- section III. Software design -- 6. 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 -- 7. 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 -- 8. 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 -- Imperfections -- Single inheritance with composition -- Simulated design without inheritance -- Multiple inheritance design -- Evaluating design options -- Relevance of type -- section IV. Software durability -- 9. Software correctness -- Exceptions and software design -- Testing design -- Scale -- Perspective -- Coverage -- Data values -- Software qualities -- 10. Software longevity -- Software maintenance -- Software evolution -- Nonfunctional properties -- Refactoring -- Reverse engineering -- Glossary : definitions and conceptual details -- Appendix A. Memory and the pointer construct -- Appendix B. Heap memory and aliases -- Appendix C. Function pointers -- Appendix D. Operator overloading.

"Preface Why this book? Why should you read this book? The short answer is to study software design from a structured but hands-on perspective and to understand different models of control flow, memory, dynamic behavior, extensibility, etc. Software complexity and the growing impact of legacy systems motivate a renewed interest in software design and modeling. We emphasize design (and construction) in this text, using and contrasting C# and C++. Many CS texts are 'learn to' books that focus on one programming language or tool. When perspective is so limited to a specific tool or programming language, high-level concepts are often slighted. Students may gain exposure to an idea via a 'cookbook' implementation and thus fail to truly absorb essential concepts. Students and/or practitioners can understand and apply design principles more readily when such concepts are explicitly defined and illustrated. Design, not just syntax, must be stressed. The progression of programming languages, software process methodologies and development tools continues to support abstraction: software developers should exploit this abstraction and solve problems (design) without being tied to a particular syntax or tool. Software design and modeling are neither new nor trendy topics. Software development often focuses on immediate effect: implement, test (minimally) and deploy. Yet, the complexity, scale and longevity of modern software require an intricate understanding of a software system as a whole -- components and relationships, user interfaces, persistent data, etc. To accommodate existing use while preserving longevity, a software developer must look forward for extensibility and backward for compatibility. Hence, software developers must understand software design. "--

There are no comments on this title.

to post a comment.