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...
Saved in:
Main Author | |
---|---|
Format | eBook |
Language | English |
Published |
Cham
Springer Nature
2019
Springer International Publishing AG Springer International Publishing |
Edition | 1 |
Subjects | |
Online Access | Get 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 |