Preface, |
|
xi | |
Acknowledgments, |
|
xv | |
Detailed Book Outline, |
|
xvii | |
Section I Software Construction |
|
|
Chapter 1 Software Complexity And Modeling |
|
|
3 | (28) |
|
|
4 | (6) |
|
|
5 | (2) |
|
|
7 | (2) |
|
1.1.3 Software Production |
|
|
9 | (1) |
|
|
10 | (5) |
|
1.2.1 The Software Development Life Cycle (SDLC) |
|
|
11 | (2) |
|
1.2.2 Software Process Methodologies |
|
|
13 | (2) |
|
|
15 | (10) |
|
1.3.1 Requirements Analysis And Specification |
|
|
19 | (2) |
|
1.3.2 Software Architecture |
|
|
21 | (1) |
|
1.3.3 Model View Controller |
|
|
22 | (1) |
|
|
23 | (2) |
|
|
25 | (2) |
|
|
27 | (1) |
|
|
28 | (1) |
|
|
29 | (2) |
|
Chapter 2 Software Development |
|
|
31 | (28) |
|
|
32 | (1) |
|
2.2 General Purpose Utility And Support |
|
|
33 | (3) |
|
2.3 Programming Language Evolution |
|
|
36 | (13) |
|
|
36 | (6) |
|
|
42 | (1) |
|
|
43 | (1) |
|
|
44 | (3) |
|
2.3.5 Object-Oriented Programming Languages |
|
|
47 | (2) |
|
|
49 | (2) |
|
2.5 Libraries And Frameworks |
|
|
51 | (1) |
|
2.6 Software Construction Fundamentals |
|
|
52 | (2) |
|
|
54 | (1) |
|
|
54 | (5) |
Section II Software Fundamentals |
|
|
|
59 | (32) |
|
|
60 | (14) |
|
3.1.1 Structured Control Flow |
|
|
62 | (6) |
|
3.1.2 Controlled Interruption To Sequential Execution |
|
|
68 | (5) |
|
|
73 | (1) |
|
|
74 | (5) |
|
3.2.1 Short-Circuit Evaluation |
|
|
77 | (2) |
|
|
79 | (3) |
|
|
82 | (6) |
|
|
84 | (2) |
|
|
86 | (2) |
|
|
88 | (1) |
|
|
89 | (2) |
|
|
91 | (28) |
|
4.1 Abstraction Of Memory |
|
|
92 | (2) |
|
|
94 | (11) |
|
|
97 | (6) |
|
4.2.2 C#/Java Heap Memory Management |
|
|
103 | (2) |
|
|
105 | (8) |
|
|
106 | (1) |
|
|
107 | (2) |
|
|
109 | (2) |
|
|
111 | (2) |
|
4.4 Design: Storage Versus Computation |
|
|
113 | (3) |
|
|
116 | (1) |
|
|
117 | (2) |
|
Chapter 5 Design And Documentation |
|
|
119 | (32) |
|
5.1 Object-Oriented Design |
|
|
120 | (1) |
|
|
120 | (11) |
|
|
124 | (2) |
|
5.2.2 Accessors And Mutators |
|
|
126 | (2) |
|
|
128 | (2) |
|
|
130 | (1) |
|
5.3 Programming By Contract |
|
|
131 | (14) |
|
5.3.1 Defensive Programming |
|
|
132 | (3) |
|
5.3.2 Precondition And Postcondition |
|
|
135 | (2) |
|
|
137 | (2) |
|
|
139 | (6) |
|
5.3.5 Contractual Expectations |
|
|
145 | (1) |
|
|
145 | (1) |
|
|
146 | (1) |
|
|
147 | (4) |
Section III Software Design |
|
|
Chapter 6 Structural Design |
|
|
151 | (30) |
|
|
152 | (5) |
|
|
153 | (1) |
|
|
154 | (2) |
|
6.1.3 Class Design: has-a or holds-a? |
|
|
156 | (1) |
|
|
157 | (10) |
|
6.2.1 Automate Subtype Checking |
|
|
160 | (5) |
|
|
165 | (2) |
|
|
167 | (10) |
|
6.3.1 Class Design: has-a or is-a? |
|
|
171 | (5) |
|
6.3.2 Contractual Expectations |
|
|
176 | (1) |
|
|
177 | (1) |
|
|
177 | (1) |
|
|
178 | (3) |
|
Chapter 7 Behavioral Design |
|
|
181 | (42) |
|
7.1 Inheritance For Functionality |
|
|
182 | (1) |
|
|
182 | (4) |
|
|
183 | (1) |
|
|
184 | (1) |
|
7.2.3 Subtype Polymorphism |
|
|
185 | (1) |
|
7.3 Static Binding Versus Dynamic Binding |
|
|
186 | (10) |
|
7.3.1 Heterogeneous Collections |
|
|
193 | (3) |
|
7.4 Virtual Function Table |
|
|
196 | (2) |
|
|
198 | (5) |
|
|
199 | (4) |
|
7.6 Real-World Example: Disassembler |
|
|
203 | (8) |
|
7.6.1 Virtual Function Table |
|
|
208 | (3) |
|
|
211 | (9) |
|
|
211 | (4) |
|
7.7.2 C++ Virtual Destructors |
|
|
215 | (3) |
|
7.7.3 Accessibility Of C++ Virtual Functions |
|
|
218 | (2) |
|
|
220 | (1) |
|
|
220 | (1) |
|
|
220 | (3) |
|
Chapter 8 Design Alternatives And Perspectives |
|
|
223 | (46) |
|
|
224 | (1) |
|
|
224 | (12) |
|
|
224 | (2) |
|
|
226 | (2) |
|
|
228 | (1) |
|
|
229 | (2) |
|
|
231 | (2) |
|
8.2.6 Handle: Smart Pointers |
|
|
233 | (3) |
|
8.3 Design Specifications For Inheritance |
|
|
236 | (3) |
|
8.4 Inheritance Versus Composition |
|
|
239 | (5) |
|
|
244 | (11) |
|
8.5.1 Multiple Inheritance Imperfections |
|
|
246 | (5) |
|
8.5.2 Single Inheritance With Composition |
|
|
251 | (2) |
|
8.5.3 Simulated Design Without Inheritance |
|
|
253 | (2) |
|
8.6 Multiple Inheritance Design |
|
|
255 | (7) |
|
8.6.1 Evaluating Design Options |
|
|
260 | (1) |
|
|
261 | (1) |
|
|
262 | (1) |
|
|
263 | (1) |
|
|
264 | (5) |
Section IV Software Durability |
|
|
Chapter 9 Software Correctness |
|
|
269 | (16) |
|
|
269 | (6) |
|
9.1.1 Exceptions And Software Design |
|
|
274 | (1) |
|
|
275 | (6) |
|
|
275 | (2) |
|
|
277 | (1) |
|
|
278 | (1) |
|
|
279 | (2) |
|
|
281 | (2) |
|
|
283 | (1) |
|
|
283 | (2) |
|
Chapter 10 Software Longevity |
|
|
285 | (20) |
|
10.1 Software Maintenance |
|
|
286 | (1) |
|
|
286 | (3) |
|
10.3 Nonfunctional Properties |
|
|
289 | (6) |
|
|
295 | (5) |
|
|
300 | (3) |
|
|
303 | (1) |
|
|
303 | (2) |
Glossary: Definitions And Conceptual Details, |
|
305 | (24) |
References, |
|
329 | (2) |
Appendix A: Memory And The Pointer Construct, |
|
331 | (16) |
Appendix B: Heap Memory And Aliases, |
|
347 | (22) |
Appendix C: Function Pointers, |
|
369 | (10) |
Appendix D: Operator Overloading, |
|
379 | (28) |
Index, |
|
407 | |