Introduction to Software Design with Java

This textbook provides an in-depth introduction to software design, with a focus on object-oriented design, and using the Java programming language. Its goal is to help readers learn software design by discovering the experience of the design process. To this end, a narrative is used that introduces...

Full description

Saved in:
Bibliographic Details
Main Author Robillard, Martin P
Format eBook
LanguageEnglish
Published Cham Springer Nature 2019
Springer International Publishing AG
Springer International Publishing
Edition1
Subjects
Online AccessGet full text

Cover

Loading…
Abstract This textbook provides an in-depth introduction to software design, with a focus on object-oriented design, and using the Java programming language. Its goal is to help readers learn software design by discovering the experience of the design process. To this end, a narrative is used that introduces each element of design know-how in context, and explores alternative solutions in that context. The narrative is supported by hundreds of code fragments and design diagrams.The first chapter is a general introduction to software design. The subsequent chapters cover design concepts and techniques, which are presented as a continuous narrative anchored in specific design problems. The design concepts and techniques covered include effective use of types and interfaces, encapsulation, composition, inheritance, design patterns, unit testing, and many more. A major emphasis is placed on coding and experimentation as a necessary complement to reading the text. To support this aspect of the learning process, a companion website with practice problems is provided, and three sample applications that capture numerous design decisions are included. Guidance on these sample applications is provided in a section called "Code Exploration" at the end of each chapter. Although the Java language is used as a means of conveying design-related ideas, the book's main goal is to address concepts and techniques that are applicable in a host of technologies.This book is intended for readers who have a minimum of programming experience and want to move from writing small programs and scripts to tackling the development of larger systems. This audience naturally includes students in university-level computer science and software engineering programs. As the prerequisites to specific computing concepts are kept to a minimum, the content is also accessible to programmers without a primary training in computing. In a similar vein, understanding the code fragments requires only a minimal grasp of the language, such as would be taught in an introductory programming course.
AbstractList This textbook provides an in-depth introduction to software design, with a focus on object-oriented design, and using the Java programming language. Its goal is to help readers learn software design by discovering the experience of the design process. To this end, a narrative is used that introduces each element of design know-how in context, and explores alternative solutions in that context. The narrative is supported by hundreds of code fragments and design diagrams.The first chapter is a general introduction to software design. The subsequent chapters cover design concepts and techniques, which are presented as a continuous narrative anchored in specific design problems. The design concepts and techniques covered include effective use of types and interfaces, encapsulation, composition, inheritance, design patterns, unit testing, and many more. A major emphasis is placed on coding and experimentation as a necessary complement to reading the text. To support this aspect of the learning process, a companion website with practice problems is provided, and three sample applications that capture numerous design decisions are included. Guidance on these sample applications is provided in a section called "Code Exploration" at the end of each chapter. Although the Java language is used as a means of conveying design-related ideas, the book's main goal is to address concepts and techniques that are applicable in a host of technologies.This book is intended for readers who have a minimum of programming experience and want to move from writing small programs and scripts to tackling the development of larger systems. This audience naturally includes students in university-level computer science and software engineering programs. As the prerequisites to specific computing concepts are kept to a minimum, the content is also accessible to programmers without a primary training in computing. In a similar vein, understanding the code fragments requires only a minimal grasp of the language, such as would be taught in an introductory programming course.
Author Robillard, Martin P
Author_xml – sequence: 1
  fullname: Robillard, Martin P
BookMark eNpNkM1OwzAQhI34EbT0AbhFXFAPoes4ie0jlAJFlTiAuFpOsm5Dg13itH19kgYhTqtZfbOrmQE5sc4iIVcUbikAn0guQhYCgzCKQcYhOyID1sqDguP_4owMKKUQRTwRcE5G3n8CtBJku7wg47ltalds86Z0Nmhc8OZMs9c1Bg_oy6UN9mWzCl70Tl-SU6Mrj6PfOSQfj7P36XO4eH2aT-8WoaYJBxmaXMSFQRmnhnODWog41RnEAsEwTFMZG8MlTYoMheGY5WleoM6lSTREOkc2JOP-sPZr3PuVqxqvdhVmzq29aqP_hWMtO-lZv6lLu8Ra9RQF1RXV0YqpllcHg-ocN71jU7vvLfpGHQ7n2PagKzW7nyaSyu7HkFz3ZK69rkpbqi9n3bLWm5VXCUsETyT7AfjZcio
ContentType eBook
Copyright Springer Nature Switzerland AG 2019
Copyright_xml – notice: Springer Nature Switzerland AG 2019
DBID I4C
DEWEY 005
DOI 10.1007/978-3-030-24094-3
DatabaseName Casalini Torrossa eBooks Institutional Catalogue
DatabaseTitleList
DeliveryMethod fulltext_linktorsrc
Discipline Computer Science
EISBN 3030240940
9783030240943
Edition 1
1st ed. 2019.
ExternalDocumentID 9783030240943
473117
EBC5919830
5358759
GroupedDBID 38.
AABBV
AAJYQ
AATVQ
ABBUY
ABCYT
AEHEY
AEJLV
AEKFX
AIFIR
ALEXF
ALMA_UNASSIGNED_HOLDINGS
ATJMZ
AYMPB
BBABE
CXBFT
CZZ
EXGDT
FCSXQ
I4C
IEZ
MGZZY
NSQWD
OORQV
SBO
TPJZQ
Z5O
Z7R
Z7S
Z7U
Z7W
Z7X
Z7Y
Z7Z
Z81
Z83
Z84
Z85
Z87
Z88
ACDTA
ACDUY
AHNNE
ID FETCH-LOGICAL-a15709-fc84dfe946f77fea8846ab048e0f3e6694ff7915dbe8f7ebc6cdeac9f5a02ace3
ISBN 3030240940
9783030240943
9783030240936
3030240932
IngestDate Fri Jul 25 04:36:22 EDT 2025
Tue Jul 29 19:58:24 EDT 2025
Fri May 30 22:47:38 EDT 2025
Wed Jun 18 05:46:40 EDT 2025
IsPeerReviewed false
IsScholarly false
LCCallNum_Ident Q
Language English
LinkModel OpenURL
MergedId FETCHMERGED-LOGICAL-a15709-fc84dfe946f77fea8846ab048e0f3e6694ff7915dbe8f7ebc6cdeac9f5a02ace3
OCLC 1110227580
PQID EBC5919830
PageCount 303
ParticipantIDs askewsholts_vlebooks_9783030240943
springer_books_10_1007_978_3_030_24094_3
proquest_ebookcentral_EBC5919830
casalini_monographs_5358759
PublicationCentury 2000
PublicationDate 2019
20190713
2019-07-12
PublicationDateYYYYMMDD 2019-01-01
2019-07-13
2019-07-12
PublicationDate_xml – year: 2019
  text: 2019
PublicationDecade 2010
PublicationPlace Cham
PublicationPlace_xml – name: Netherlands
– name: Cham
PublicationYear 2019
Publisher Springer Nature
Springer International Publishing AG
Springer International Publishing
Publisher_xml – name: Springer Nature
– name: Springer International Publishing AG
– name: Springer International Publishing
SSID ssj0002209102
Score 2.1204097
Snippet This textbook provides an in-depth introduction to software design, with a focus on object-oriented design, and using the Java programming language. Its goal...
SourceID askewsholts
springer
proquest
casalini
SourceType Aggregation Database
Publisher
SubjectTerms Computer programming, programs, data
Computer Science
Java
Java (Computer program language)
Programming Languages, Compilers, Interpreters
Software Engineering
TableOfContents Annotating Overridden Methods -- 7.5 Overloading Methods -- 7.6 Inheritance Versus Composition -- 7.7 Abstract Classes -- 7.8 Revisiting the DECORATOR Design Pattern -- 7.9 The TEMPLATE METHOD Design Pattern -- Final Methods and Classes -- Abstract Methods -- Summary of the Pattern -- 7.10 Proper Use of Inheritance -- Restricting What Clients of Base Classes Can Do -- Subclasses That Are Not Proper Subtypes -- Insights -- Code Exploration -- Edge Class Hierarchy -- NodeView Class Hierarchy -- Further Reading -- Chapter 8: Inversion of Control -- Design Context -- 8.1 Motivating Inversion of Control -- 8.2 The Model-View-Controller Decomposition -- 8.3 The OBSERVER Design Pattern -- Linking Model and Observers -- Control Flow Between Model and Observers -- Data Flow between Model and Observers -- Event-Based Programming -- Summary -- 8.4 Applying the OBSERVER Design Pattern -- 8.5 Introduction to Graphical User Interface Development -- 8.6 Graphical User Interface Component Graphs -- The User Experience Perspective -- The Logical Perspective -- The Source Code Perspective -- The Run-time Perspective -- Defining the Object Graph -- 8.7 Event Handling -- 8.8 The VISITOR Design Pattern -- Abstract and Concrete Visitors -- Integrating Operations into a Class Hierarchy -- Traversing the Object Graph -- Using Inheritance in the Pattern -- Supporting Data Flow in Visitor Structures -- Insights -- Code Exploration -- LuckyNumber -- Minesweeper -- Solitaire -- JetUML -- Further Reading -- Chapter 9: Functional Design -- Design Context -- 9.1 First-Class Functions -- 9.2 Functional Interfaces, Lambda Expressions, and Method References -- Functional Interfaces -- Lambda Expressions -- Method References -- 9.3 Using Functions to Compose Behavior -- 9.4 Using Functions as Suppliers of Data -- Supplier Functions and the OBSERVER Pattern
4.6 Final Fields and Variables -- 4.7 Object Identity, Equality, and Uniqueness -- 4.8 The FLYWEIGHT Design Pattern -- 4.9 The SINGLETON Design Pattern -- 4.10 Objects of Nested Classes -- Inner Classes -- Anonymous Classes -- Insights -- Code Exploration -- Minefield in Minesweeper -- Card in Solitaire -- Move Anonymous Classes in Solitaire -- ApplicationResources in JetUML -- Further Reading -- Chapter 5: Unit Testing -- Design Context -- 5.1 Introduction to Unit Testing -- 5.2 Unit Testing Framework Fundamentals with JUnit -- 5.3 Organizing Test Code -- 5.4 Metaprogramming -- Introspection -- Program Manipulation -- Program Metadata -- 5.5 Structuring Tests -- 5.6 Tests and Exceptional Conditions -- 5.7 Encapsulation and Unit Testing -- 5.8 Testing with Stubs -- 5.9 Test Coverage -- Statement Coverage -- Branch Coverage -- Path Coverage -- Insights -- Code Exploration -- An Example of Bug -- Chapter Samples from Solitaire -- TestClipboard in JetUML -- Further Reading -- Chapter 6: Composition -- Design Context -- 6.1 Composition and Aggregation -- 6.2 The COMPOSITE Design Pattern -- 6.3 Sequence Diagrams -- 6.4 The DECORATOR Design Pattern -- 6.5 Combining COMPOSITE and DECORATOR -- 6.6 Polymorphic Object Copying -- Declaring to Implement Cloneable -- Overriding Object.clone() -- Calling super.clone() -- Catching CloneNotSupportedException -- Adding clone() to an Interface -- 6.7 The PROTOTYPE Design Pattern -- 6.8 The COMMAND Design Pattern -- 6.9 The Law of Demeter -- Insights -- Code Exploration -- Commands in Solitaire -- Delegation in GameModel -- Cloning in JetUML -- Commands in JetUML -- Prototype Object in JetUML -- Further Reading -- Chapter 7: Inheritance -- Design Context -- 7.1 The Case for Inheritance -- 7.2 Inheritance and Typing -- Downcasting -- Singly-Rooted Class Hierarchy -- 7.3 Inheriting Fields -- 7.4 Inheriting Methods
9.5 First-Class Functions and Design Patterns -- Functional-Style STRATEGY -- Functional-Style COMMAND -- 9.6 Functional-Style Data Processing -- Data as a Stream -- Applying Higher-Order Functions to Streams -- Filtering Streams -- Mapping Data Elements -- Reducing Streams -- Insights -- Code Exploration -- Event Handlers in Minesweeper -- Strategies in Solitaire -- Event Handlers in JetUML -- Observer Notification in JetUML -- COMMAND Pattern in JetUML -- Absence of Streaming in JetUML -- Further Reading -- Appendix A: Important Java Programming Concepts -- A.1 Variables and Types -- A.2 Objects and Classes -- A.3 Static Fields -- A.4 Methods -- A.5 Packages and Importing -- A.6 Generic Types -- A.7 Collection Classes -- A.8 Exception Handling -- Appendix B: Coding Conventions -- Medial Capitals for Identifier Names -- All Capitals for Constants -- Variable Name Prefixes -- Indentation -- Use of the @Override Annotation -- Code Comments -- Ellipses and Adaptations -- Example -- Appendix C: Example Applications -- References -- Index
Intro -- Preface -- Organization of the Book -- Acknowledgments -- Contents -- Chapter 1: Introduction -- 1.1 Defining Software Design -- 1.2 Design in the Software Development Process -- 1.3 Capturing Design Knowledge -- The Unified Modeling Language -- 1.4 Sharing Design Know-How -- Design Patterns -- Design Antipatterns -- Insights -- Further Reading -- Chapter 2: Encapsulation -- Design Context -- 2.1 Encapsulation and Information Hiding -- 2.2 Encoding Abstractions as Types -- 2.3 Scopes and Visibility Restrictions -- 2.4 Object Diagrams -- 2.5 Escaping References -- Returning a reference to an internal object -- Storing an external reference internally -- Leaking references through shared structures -- 2.6 Immutability -- 2.7 Exposing Internal Data -- Extended interface -- Returning Copies -- Advanced Techniques -- 2.8 Design by Contract -- Insights -- Code Exploration -- Cell in Minesweeper -- Dimension in JetUML -- Card in Solitaire -- Rectangle JetUML -- Further Reading -- Chapter 3: Types and Interfaces -- Design Context -- 3.1 Decoupling Behavior from Implementation -- 3.2 Specifying Behavior with Interfaces -- 3.3 Class Diagrams -- 3.4 Function Objects -- 3.5 Iterators -- 3.6 The ITERATOR Design Pattern -- 3.7 The STRATEGY Design Pattern -- 3.8 The Interface Segregation Principle -- Insights -- Code Exploration -- Comparable Java Versions in JetUML -- Strategy Pattern Meets Interface Segregation in Solitaire -- Further Reading -- Chapter 4: Object State -- Design Context -- 4.1 The Static and Dynamic Perspectives of a Software System -- 4.2 Defining Object State -- 4.3 State Diagrams -- 4.4 Designing Object Life Cycles -- Invalid and Useless States -- Unnecessary Stateful Information -- 4.5 Nullability -- No Need to Model Absent Values -- Modeling Absent Values -- Optional Types -- The NULL OBJECT Design Pattern
Title Introduction to Software Design with Java
URI http://digital.casalini.it/9783030240943
https://ebookcentral.proquest.com/lib/[SITE_ID]/detail.action?docID=5919830
http://link.springer.com/10.1007/978-3-030-24094-3
https://www.vlebooks.com/vleweb/product/openreader?id=none&isbn=9783030240943
hasFullText 1
inHoldings 1
isFullTextHit
isPrint
link http://utb.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwnV1Lb9QwEB7R7YVeWl5iKaAIcQChVElsx_GxtFuVpVoqUareLDuxL6CtRNJW6q9nbOe5cAAuUTbJ2tZ8zrxnAvCWZyqjKqniNOUkpoxVsWbUxrpUaYX6aZkan-W7yk-_0eUVuxpaJfrqkkYflPd_rCv5H1TxGuLqqmT_Adl-ULyA54gvHhFhPG4ov_3PPvE8dGp14KH2-BWZ6Z3L4Tr2CRnBu7pUtz3PdWVeCHjIYw-tAz6cH4xNfl9lFIeKzYnLb8NpOPitJjYiyijXx0yEPiO_ccxxkgQ-6aItgsZkEA9dSHz1RZ4fn8izT6vP05teGFJOEO0t2OK8mMH24WJ5dtn7urLMaSXOKO4Xk4XmR8Piuohz2_R3spgd2FH1d2T6KBCa2mkQqlaucHRiFmxEsr2CcLEH28ZVjTyCB2b9GHa7b2VELet8Au_HkEXNddRBFgXIIgdZ5CB7Cpcni4uj07j9TEWsUsYTEduyoJU1guaWc2tUgTqd0sgaTWKJyXNBreUiZZU2heVGl3lZobwTlqkkU6Uhz2C2vl6b5xCRxBAl8EWxtkDTtSiUUrnmJc1QtdNJNoc3I0rI2x8-pF7LESkpmcN-RyCJOz60Pq8lIwyNUzGHqKOZ9P9us4Dl4uMRE6nAgebwrqOlDON3za1xHkkkziT9VJK8-PtH9-HhsJlfwqz5eWNeoUbX6NfthvkFnoRDig
linkProvider Library Specific Holdings
openUrl ctx_ver=Z39.88-2004&ctx_enc=info%3Aofi%2Fenc%3AUTF-8&rfr_id=info%3Asid%2Fsummon.serialssolutions.com&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=book&rft.title=Introduction+to+Software+Design+with+Java&rft.au=Robillard%2C+Martin+P.&rft.date=2019-07-13&rft.pub=Springer+International+Publishing&rft.isbn=9783030240936&rft_id=info:doi/10.1007%2F978-3-030-24094-3&rft.externalDBID=NO_PDF_LINK&rft.externalDocID=473117
thumbnail_m http://utb.summon.serialssolutions.com/2.0.0/image/custom?url=https%3A%2F%2Fvle.dmmserver.com%2Fmedia%2F640%2F97830302%2F9783030240943.jpg
thumbnail_s http://utb.summon.serialssolutions.com/2.0.0/image/custom?url=https%3A%2F%2Fmedia.springernature.com%2Fw306%2Fspringer-static%2Fcover-hires%2Fbook%2F978-3-030-24094-3