Now that we have presented the complete ATM implementation, you can see that many issues arose during implementation for which we did not provide detailed UML diagrams. This is not uncommon in an object-oriented design and implementation experience. For example, many attributes listed in the class diagrams were implemented as C# properties so that clients of the classes could gain controlled access to the underlying private instance variables. We did not make all of these properties during our design process, because there was nothing in the requirements document or our design process to indicate that certain attributes would eventually need to be accessed outside of their classes.
We also encountered various issues with simulating hardware. A real-world ATM is a hardware device that does not have a complete computer keyboard. One problem with using a computer keyboard to simulate the keypad is that the user can enter non-digits as input. We did not spend much time dealing with such issues, because this problem is not possible in a real ATM, which has only a numeric keypad. However, having to think about issues like this is a good thing. Quite typically, software designs for complete systems involve simulating hardware devices like the cash dispenser and keypad. Despite the fact that some aspects of our ATM may seem contrived, in real-world systems, hardware design and implementation often occurs in parallel with software design and implementation. In such cases, the software cannot be implemented in final form because the hardware is not yet ready. So, software developers must simulate the hardware, as we have done in this case study.
Congratulations on completing the entire software engineering ATM case study! We hope you found this experience to be valuable and that it reinforced many of the concepts that you learned in Chapters 111. We would sincerely appreciate your comments, criticisms and suggestions. You can reach us at deitel@deitel.com. We will respond promptly.
Preface
Index
Introduction to Computers, the Internet and Visual C#
Introduction to the Visual C# 2005 Express Edition IDE
Introduction to C# Applications
Introduction to Classes and Objects
Control Statements: Part 1
Control Statements: Part 2
Methods: A Deeper Look
Arrays
Classes and Objects: A Deeper Look
Object-Oriented Programming: Inheritance
Polymorphism, Interfaces & Operator Overloading
Exception Handling
Graphical User Interface Concepts: Part 1
Graphical User Interface Concepts: Part 2
Multithreading
Strings, Characters and Regular Expressions
Graphics and Multimedia
Files and Streams
Extensible Markup Language (XML)
Database, SQL and ADO.NET
ASP.NET 2.0, Web Forms and Web Controls
Web Services
Networking: Streams-Based Sockets and Datagrams
Searching and Sorting
Data Structures
Generics
Collections
Appendix A. Operator Precedence Chart
Appendix B. Number Systems
Appendix C. Using the Visual Studio 2005 Debugger
Appendix D. ASCII Character Set
Appendix E. Unicode®
Appendix F. Introduction to XHTML: Part 1
Appendix G. Introduction to XHTML: Part 2
Appendix H. HTML/XHTML Special Characters
Appendix I. HTML/XHTML Colors
Appendix J. ATM Case Study Code
Appendix K. UML 2: Additional Diagram Types
Appendix L. Simple Types
Index