|
State of Software Development |
|
|
1 | (17) |
|
|
|
1 | (1) |
|
Software Development Process |
|
|
2 | (3) |
|
Assessing Software Quality |
|
|
5 | (4) |
|
Quality Factors in Software Products |
|
|
5 | (4) |
|
Aspiring to Measure Software Quality |
|
|
9 | (1) |
|
Principles of Software Design |
|
|
9 | (3) |
|
Modularity and Localization |
|
|
9 | (1) |
|
Abstraction and Information Hiding |
|
|
10 | (1) |
|
Loose Coupling and High Cohesion |
|
|
11 | (1) |
|
Approaches to Software Design |
|
|
12 | (4) |
|
|
|
13 | (2) |
|
Compositional (Bottom-Up) Design |
|
|
15 | (1) |
|
|
|
15 | (1) |
|
|
|
16 | (1) |
|
|
|
17 | (38) |
|
|
|
18 | (1) |
|
|
|
19 | (1) |
|
|
|
19 | (1) |
|
|
|
19 | (2) |
|
|
|
19 | (1) |
|
|
|
20 | (1) |
|
|
|
21 | (1) |
|
|
|
21 | (4) |
|
|
|
21 | (1) |
|
Increment and Decrement Operators |
|
|
21 | (1) |
|
|
|
22 | (1) |
|
|
|
22 | (1) |
|
Object-Oriented Notation for Operations |
|
|
23 | (1) |
|
|
|
23 | (2) |
|
|
|
25 | (7) |
|
|
|
25 | (1) |
|
Statements for Input and Output to the Console |
|
|
26 | (1) |
|
|
|
27 | (1) |
|
Compound Statement or Block |
|
|
27 | (1) |
|
|
|
28 | (1) |
|
|
|
29 | (1) |
|
|
|
30 | (1) |
|
|
|
30 | (2) |
|
|
|
32 | (2) |
|
|
|
34 | (2) |
|
|
|
36 | (1) |
|
|
|
36 | (4) |
|
|
|
37 | (1) |
|
|
|
38 | (1) |
|
|
|
39 | (1) |
|
|
|
39 | (1) |
|
|
|
40 | (4) |
|
|
|
44 | (2) |
|
|
|
46 | (2) |
|
|
|
46 | (1) |
|
|
|
47 | (1) |
|
Debugging Techniques for Incorrect Output |
|
|
47 | (1) |
|
|
|
48 | (2) |
|
Java Virtual Machine (JVM) |
|
|
50 | (1) |
|
|
|
50 | (2) |
|
|
|
52 | (3) |
|
|
|
55 | (18) |
|
|
|
55 | (1) |
|
|
|
56 | (1) |
|
|
|
57 | (6) |
|
|
|
57 | (2) |
|
|
|
59 | (1) |
|
|
|
60 | (1) |
|
|
|
61 | (1) |
|
|
|
62 | (1) |
|
|
|
62 | (1) |
|
|
|
63 | (2) |
|
Relationships to Describe Class Interactions |
|
|
65 | (7) |
|
|
|
72 | (1) |
|
|
|
73 | (16) |
|
An Array Application and Analysis of the Problem |
|
|
73 | (1) |
|
|
|
74 | (3) |
|
|
|
77 | (2) |
|
Storage Structure, Assignment, 'and Equality for Reference Types |
|
|
79 | (4) |
|
|
|
83 | (1) |
|
|
|
84 | (1) |
|
|
|
85 | (1) |
|
|
|
85 | (4) |
|
Array Algorithms and Their Analysis |
|
|
89 | (54) |
|
|
|
90 | (20) |
|
Analytical Timing Analysis |
|
|
91 | (17) |
|
Experimental Timing Comparison |
|
|
108 | (1) |
|
|
|
109 | (1) |
|
|
|
110 | (5) |
|
|
|
111 | (2) |
|
|
|
113 | (2) |
|
|
|
115 | (7) |
|
|
|
115 | (1) |
|
|
|
116 | (6) |
|
Introduction to Object Comparison, Interfaces, and the Object Class |
|
|
122 | (4) |
|
|
|
126 | (15) |
|
|
|
127 | (8) |
|
|
|
135 | (6) |
|
|
|
141 | (1) |
|
|
|
141 | (2) |
|
Abstract Data Types and Their Implementation |
|
|
143 | (44) |
|
|
|
143 | (1) |
|
|
|
144 | (2) |
|
Specifying Abstract Data Types |
|
|
146 | (15) |
|
|
|
146 | (1) |
|
|
|
147 | (7) |
|
The Constructive Approach |
|
|
154 | (4) |
|
The Postcondition Approach |
|
|
158 | (3) |
|
Specifying and Implementing ADTs in Java |
|
|
161 | (10) |
|
ADT Syntax Specification in Java |
|
|
162 | (2) |
|
ADT Semantics Specification in Java |
|
|
164 | (2) |
|
ADT Implementation in Java |
|
|
166 | (5) |
|
Assertion Checking and Exceptions |
|
|
171 | (8) |
|
Visibility of Classes and Class Members |
|
|
179 | (3) |
|
Introduction to Design by Contract |
|
|
182 | (1) |
|
|
|
183 | (2) |
|
|
|
185 | (2) |
|
|
|
187 | (42) |
|
A Simple List Application |
|
|
188 | (1) |
|
|
|
189 | (3) |
|
|
|
192 | (16) |
|
|
|
192 | (5) |
|
|
|
197 | (8) |
|
|
|
205 | (3) |
|
Examples of Linked Operations |
|
|
208 | (7) |
|
|
|
208 | (1) |
|
Position of a Value in a List |
|
|
209 | (1) |
|
Inserting a Value Prior to Another Value |
|
|
210 | (1) |
|
The toString(), equals(), and clone() Methods |
|
|
211 | (4) |
|
|
|
215 | (6) |
|
|
|
221 | (5) |
|
|
|
221 | (2) |
|
|
|
223 | (3) |
|
List with a Head and Circular List |
|
|
226 | (1) |
|
|
|
226 | (1) |
|
|
|
227 | (2) |
|
Advanced List Concepts and the Uos Data Structure Library |
|
|
229 | (54) |
|
|
|
230 | (12) |
|
|
|
230 | (1) |
|
|
|
230 | (9) |
|
|
|
239 | (3) |
|
Library of Dictionaries and List Data Structures |
|
|
242 | (13) |
|
|
|
255 | (18) |
|
A University Library Application |
|
|
255 | (11) |
|
|
|
266 | (7) |
|
Polymorphism and Heterogeneous Lists |
|
|
273 | (8) |
|
|
|
281 | (1) |
|
|
|
281 | (2) |
|
|
|
283 | (22) |
|
|
|
284 | (1) |
|
|
|
285 | (1) |
|
|
|
286 | (5) |
|
|
|
291 | (12) |
|
|
|
292 | (1) |
|
|
|
293 | (10) |
|
|
|
303 | (2) |
|
|
|
305 | (22) |
|
Recursive Definitions from Mathematics |
|
|
305 | (2) |
|
|
|
307 | (2) |
|
Developing and Verifying Recursive Methods |
|
|
309 | (4) |
|
Timing Analysis for Simple Recursive Methods |
|
|
313 | (3) |
|
|
|
316 | (8) |
|
|
|
324 | (1) |
|
|
|
324 | (3) |
|
Queues and Priority Queues |
|
|
327 | (32) |
|
|
|
328 | (3) |
|
|
|
328 | (2) |
|
|
|
330 | (1) |
|
|
|
331 | (1) |
|
|
|
331 | (6) |
|
|
|
335 | (1) |
|
|
|
335 | (2) |
|
Application: Discrete Simulations |
|
|
337 | (21) |
|
|
|
358 | (1) |
|
|
|
358 | (1) |
|
Object-Oriented Development: An Example |
|
|
359 | (86) |
|
|
|
360 | (1) |
|
Object-Oriented Development Life Cycle |
|
|
360 | (1) |
|
Various Stakeholders in Software Development |
|
|
361 | (1) |
|
An Object-Oriented Development Approach |
|
|
362 | (5) |
|
A Simplified Banking Example |
|
|
367 | (68) |
|
Specify System Requirements |
|
|
367 | (2) |
|
Determine the System Boundary |
|
|
369 | (6) |
|
Identify Objects and Classes |
|
|
375 | (3) |
|
Identify Class Interactions and Features |
|
|
378 | (22) |
|
Group Classes into Subsystems |
|
|
400 | (3) |
|
Determine High-Level System Architecture |
|
|
403 | (5) |
|
Find More Detailed Design Classes and Perform Detailed Class Design |
|
|
408 | (5) |
|
Write Code for First Working Prototype |
|
|
413 | (13) |
|
Review System for Quality Considerations |
|
|
426 | (5) |
|
Refine Coding for First Working Prototype and Perform Testing |
|
|
431 | (1) |
|
Sample Output from the System |
|
|
432 | (3) |
|
|
|
435 | (3) |
|
Seamless Software Development |
|
|
438 | (1) |
|
Benefits of the Object Model |
|
|
439 | (1) |
|
|
|
440 | (1) |
|
|
|
440 | (5) |
|
|
|
445 | (70) |
|
Introduction and Applications |
|
|
446 | (4) |
|
Binary Tree Abstract Data Type |
|
|
450 | (3) |
|
|
|
453 | (37) |
|
|
|
453 | (9) |
|
|
|
462 | (9) |
|
|
|
471 | (12) |
|
|
|
483 | (4) |
|
Binary Tree Data Structures in the Uos Library |
|
|
487 | (3) |
|
|
|
490 | (4) |
|
|
|
494 | (19) |
|
|
|
494 | (2) |
|
Languages, Grammars, and Parsing |
|
|
496 | (15) |
|
|
|
511 | (2) |
|
|
|
513 | (2) |
|
Elementary Problem Modeling and System Design |
|
|
515 | (72) |
|
|
|
515 | (1) |
|
Modeling Static System Structure |
|
|
516 | (31) |
|
Generating a Context Model |
|
|
517 | (1) |
|
|
|
518 | (9) |
|
Using Relationships to Describe Class Interactions |
|
|
527 | (13) |
|
|
|
540 | (5) |
|
Using a Layered Architecture in System Design |
|
|
545 | (2) |
|
|
|
547 | (9) |
|
Users, Actors, and Use Cases |
|
|
548 | (1) |
|
|
|
548 | (2) |
|
|
|
550 | (3) |
|
|
|
553 | (3) |
|
Analysis and Architectural Design of a Student Registration System |
|
|
556 | (24) |
|
Specify System Requirements |
|
|
556 | (3) |
|
Determine the System Boundary |
|
|
559 | (7) |
|
Identify Objects and Classes |
|
|
566 | (2) |
|
Identify Class Interactions and Features |
|
|
568 | (5) |
|
Group Classes into Subsystems |
|
|
573 | (2) |
|
Determine High-Level System Architecture |
|
|
575 | (5) |
|
|
|
580 | (7) |
|
Principles of Software Design |
|
|
587 | (84) |
|
|
|
588 | (1) |
|
|
|
589 | (11) |
|
|
|
589 | (1) |
|
|
|
590 | (2) |
|
Subcontracting and Inheritance |
|
|
592 | (4) |
|
|
|
596 | (1) |
|
Other Types of Assertion Support |
|
|
597 | (2) |
|
Purposes of Using Assertions |
|
|
599 | (1) |
|
|
|
600 | (18) |
|
Notions of Exception Handling |
|
|
600 | (2) |
|
|
|
602 | (7) |
|
Predefined Exception Classes |
|
|
609 | (2) |
|
Defining and Throwing Your Own Exceptions |
|
|
611 | (2) |
|
Strategies for Exception Handling |
|
|
613 | (3) |
|
The Effect of Inheritance on Exception Handling |
|
|
616 | (1) |
|
Summary and Exception Guidelines |
|
|
617 | (1) |
|
|
|
618 | (8) |
|
|
|
618 | (2) |
|
State Space and Behavior of a Class |
|
|
620 | (1) |
|
Side Effects in Functions |
|
|
621 | (1) |
|
How Many Parameters in Methods? |
|
|
622 | (1) |
|
|
|
623 | (1) |
|
Dealing with Abnormal Cases: Class Robustness |
|
|
624 | (1) |
|
Class-Level Design Guidelines |
|
|
625 | (1) |
|
Building Inheritance Taxonomies |
|
|
626 | (7) |
|
Overview of Some Categories of Inheritance |
|
|
626 | (1) |
|
Inheritance versus Aggregation |
|
|
627 | (2) |
|
Some Characteristics of Inheritance Taxonomies |
|
|
629 | (3) |
|
Guidelines for Building Good Inheritance Taxonomies |
|
|
632 | (1) |
|
Coupling and Cohesion in Object-Oriented Software |
|
|
633 | (12) |
|
|
|
633 | (7) |
|
|
|
640 | (5) |
|
Using Patterns in Software Design |
|
|
645 | (17) |
|
|
|
645 | (3) |
|
Review of Patterns Presented Earlier |
|
|
648 | (4) |
|
|
|
652 | (3) |
|
|
|
655 | (7) |
|
|
|
662 | (1) |
|
|
|
663 | (1) |
|
Boundary Classes for Subsystems |
|
|
663 | (1) |
|
Detailed Design of a Student Registration System |
|
|
663 | (3) |
|
|
|
666 | (5) |
|
|
|
671 | (42) |
|
Fundamentals of Software Testing |
|
|
672 | (5) |
|
|
|
672 | (1) |
|
|
|
673 | (1) |
|
|
|
674 | (1) |
|
|
|
675 | (1) |
|
|
|
675 | (2) |
|
|
|
677 | (1) |
|
|
|
677 | (1) |
|
|
|
677 | (1) |
|
|
|
678 | (1) |
|
|
|
678 | (7) |
|
|
|
679 | (2) |
|
Equivalence Class Testing |
|
|
681 | (4) |
|
White-Box (Program-Based) Testing |
|
|
685 | (5) |
|
|
|
690 | (14) |
|
Issues in Testing Object-Oriented Software |
|
|
690 | (1) |
|
|
|
691 | (3) |
|
Testing Recursive Methods |
|
|
694 | (2) |
|
State-Based Class Testing |
|
|
696 | (4) |
|
The Effect of Inheritance on Testing |
|
|
700 | (1) |
|
Object-Oriented Integration Testing |
|
|
701 | (2) |
|
Object-Oriented System Testing |
|
|
703 | (1) |
|
Locating and Repairing Dynamic Faults |
|
|
704 | (6) |
|
|
|
704 | (1) |
|
|
|
705 | (1) |
|
Debugging by Backtracking |
|
|
706 | (1) |
|
|
|
706 | (2) |
|
|
|
708 | (1) |
|
|
|
708 | (2) |
|
|
|
710 | (3) |
|
Bags, Sets, and Dictionaries |
|
|
713 | (74) |
|
|
|
714 | (4) |
|
Bit Vector Implementation |
|
|
718 | (2) |
|
|
|
720 | (17) |
|
|
|
721 | (1) |
|
Design of a Hash Function |
|
|
721 | (3) |
|
Collision-Resolution Techniques |
|
|
724 | (13) |
|
|
|
737 | (47) |
|
Introduction and Motivation |
|
|
737 | (2) |
|
|
|
739 | (15) |
|
|
|
754 | (20) |
|
Data Structures for Good Expected Performance |
|
|
774 | (6) |
|
|
|
780 | (4) |
|
|
|
784 | (1) |
|
|
|
785 | (2) |
|
|
|
787 | (38) |
|
|
|
788 | (1) |
|
|
|
788 | (1) |
|
|
|
789 | (1) |
|
|
|
790 | (5) |
|
Use of Recurrence Relations for Time Requirements |
|
|
795 | (13) |
|
Development of Recurrence Relations |
|
|
795 | (6) |
|
Solving Recurrence Relations by Repeated Substitution |
|
|
801 | (3) |
|
Solving Divide-and-Conquer Recurrence Relations |
|
|
804 | (4) |
|
|
|
808 | (8) |
|
|
|
816 | (5) |
|
|
|
821 | (1) |
|
|
|
822 | (3) |
|
|
|
825 | (96) |
|
Introduction and Examples of Graph Modeling |
|
|
826 | (7) |
|
Basic Definitions of Graph Theory |
|
|
833 | (6) |
|
|
|
839 | (6) |
|
Paths, Reachability, and Connectedness |
|
|
845 | (4) |
|
|
|
849 | (20) |
|
Adjacency Matrix Representation |
|
|
852 | (8) |
|
Adjacency Lists Representation |
|
|
860 | (3) |
|
|
|
863 | (6) |
|
Computing Paths from a Matrix Representation of Graphs |
|
|
869 | (14) |
|
Computing Reachability, Using Matrix Multiplications |
|
|
869 | (2) |
|
Efficient Reachability Algorithm |
|
|
871 | (3) |
|
All Pairs Shortest Paths Algorithm |
|
|
874 | (3) |
|
Single Source Shortest Paths Algorithm |
|
|
877 | (6) |
|
Traversals of Undirected Graphs |
|
|
883 | (13) |
|
|
|
883 | (5) |
|
|
|
888 | (8) |
|
|
|
896 | (23) |
|
Connectivity and Components |
|
|
896 | (3) |
|
|
|
899 | (4) |
|
|
|
903 | (4) |
|
|
|
907 | (5) |
|
|
|
912 | (7) |
|
|
|
919 | (2) |
|
|
|
921 | (58) |
|
|
|
922 | (1) |
|
|
|
923 | (4) |
|
|
|
923 | (1) |
|
|
|
924 | (3) |
|
|
|
927 | (2) |
|
Persistent Storage Support in Java |
|
|
929 | (21) |
|
|
|
929 | (2) |
|
|
|
931 | (1) |
|
Overview of the I/O Streams |
|
|
932 | (1) |
|
|
|
933 | (5) |
|
|
|
938 | (4) |
|
An Overview of Buffered Streams in Java |
|
|
942 | (3) |
|
|
|
945 | (5) |
|
|
|
950 | (10) |
|
The Structure of Sequential Files |
|
|
950 | (3) |
|
Processing Sequential Files |
|
|
953 | (7) |
|
|
|
960 | (7) |
|
|
|
967 | (1) |
|
Notions of Indexed Sequential Files |
|
|
967 | (1) |
|
Indexed Sequential File Implementation |
|
|
968 | (1) |
|
|
|
968 | (6) |
|
|
|
969 | (5) |
|
|
|
974 | (4) |
|
|
|
978 | (1) |
| A Java Appendix |
|
979 | (122) |
|
|
|
981 | (2) |
|
|
|
983 | (2) |
|
|
|
984 | (1) |
|
|
|
985 | (2) |
|
|
|
985 | (2) |
|
|
|
987 | (1) |
|
|
|
987 | (1) |
|
Data Types and Declarations |
|
|
987 | (14) |
|
|
|
988 | (3) |
|
|
|
991 | (1) |
|
|
|
991 | (3) |
|
|
|
994 | (2) |
|
|
|
996 | (3) |
|
|
|
999 | (1) |
|
Summary of Variable Declarations and Types |
|
|
1000 | (1) |
|
|
|
1001 | (14) |
|
|
|
1003 | (1) |
|
Typecasting and the Casting Expression |
|
|
1004 | (4) |
|
|
|
1008 | (1) |
|
|
|
1009 | (2) |
|
|
|
1011 | (1) |
|
|
|
1012 | (2) |
|
Review of Operator Precedence and Order of Evaluation |
|
|
1014 | (1) |
|
|
|
1015 | (6) |
|
|
|
1016 | (1) |
|
|
|
1016 | (1) |
|
Parenthesized Expressions |
|
|
1017 | (1) |
|
|
|
1017 | (1) |
|
|
|
1018 | (1) |
|
|
|
1019 | (1) |
|
|
|
1019 | (1) |
|
|
|
1020 | (1) |
|
|
|
1021 | (14) |
|
|
|
1022 | (1) |
|
|
|
1023 | (1) |
|
|
|
1024 | (1) |
|
|
|
1025 | (1) |
|
|
|
1025 | (1) |
|
|
|
1026 | (1) |
|
|
|
1027 | (3) |
|
|
|
1030 | (1) |
|
|
|
1031 | (1) |
|
|
|
1032 | (1) |
|
|
|
1032 | (1) |
|
|
|
1033 | (1) |
|
|
|
1034 | (1) |
|
|
|
1034 | (1) |
|
|
|
1034 | (1) |
|
|
|
1035 | (1) |
|
|
|
1035 | (4) |
|
|
|
1035 | (1) |
|
|
|
1036 | (1) |
|
|
|
1036 | (1) |
|
|
|
1036 | (1) |
|
|
|
1037 | (1) |
|
|
|
1037 | (2) |
|
|
|
1039 | (2) |
|
|
|
1040 | (1) |
|
|
|
1041 | (1) |
|
|
|
1041 | (1) |
|
|
|
1041 | (5) |
|
|
|
1043 | (1) |
|
|
|
1043 | (2) |
|
|
|
1045 | (1) |
|
|
|
1046 | (12) |
|
|
|
1046 | (2) |
|
|
|
1048 | (2) |
|
|
|
1050 | (1) |
|
|
|
1051 | (1) |
|
|
|
1052 | (1) |
|
|
|
1052 | (2) |
|
|
|
1054 | (1) |
|
Multiple Fields with the Same Name |
|
|
1055 | (2) |
|
Multiple Methods with the Same Signature |
|
|
1057 | (1) |
|
Multiple Types with the Same Name |
|
|
1057 | (1) |
|
Packages and Access Modifiers |
|
|
1058 | (3) |
|
|
|
1060 | (1) |
|
|
|
1061 | (5) |
|
|
|
1061 | (1) |
|
|
|
1062 | (4) |
|
|
|
1066 | (7) |
|
|
|
1066 | (2) |
|
|
|
1068 | (1) |
|
|
|
1069 | (1) |
|
Creating and Throwing Your Own Exceptions |
|
|
1070 | (1) |
|
The Effect of Inheritance on Exception Handling |
|
|
1071 | (2) |
|
|
|
1073 | (10) |
|
|
|
1075 | (1) |
|
|
|
1075 | (8) |
|
|
|
1083 | (10) |
|
Thread Class Versus Runnable Interface |
|
|
1083 | (2) |
|
|
|
1085 | (3) |
|
|
|
1088 | (1) |
|
|
|
1089 | (3) |
|
Interthread Communication |
|
|
1092 | (1) |
|
|
|
1093 | (1) |
|
|
|
1093 | (8) |
|
|
|
1093 | (1) |
|
|
|
1093 | (1) |
|
|
|
1094 | (1) |
|
Graphical User Interfaces (AWT) |
|
|
1094 | (3) |
|
|
|
1097 | (4) |
| B The Java Data Structure Library |
|
1101 | (20) |
|
|
|
1103 | (6) |
|
|
|
1106 | (1) |
|
|
|
1107 | (2) |
|
|
|
1109 | (4) |
|
|
|
1111 | (1) |
|
|
|
1112 | (1) |
|
|
|
1113 | (4) |
|
|
|
1116 | (1) |
|
|
|
1116 | (1) |
|
|
|
1117 | (1) |
|
Arrays and Collections Classes |
|
|
1117 | (1) |
|
|
|
1118 | (1) |
|
BigInteger and BigDecimal |
|
|
1118 | (3) |
| C Math Primer |
|
1121 | (20) |
|
|
|
1121 | (5) |
|
|
|
1126 | (2) |
|
Cross Product and Function Notation |
|
|
1128 | (1) |
|
|
|
1129 | (5) |
|
Further Techniques for Recurrence Relations |
|
|
1134 | (7) |
|
Verifying Recurrence Relation Solutions |
|
|
1134 | (2) |
|
Solving Linear Homogeneous Recurrence Relations |
|
|
1136 | (5) |
| Bibliography |
|
1141 | (4) |
| Index |
|
1145 | |