Beginning C# 2008 Objects From Concept to Code Grant Palmer and Jacquie Barker Beginning C# 2008 Objects: From Concept to Code Copyright © 2008 by Grant Palmer and Jacquie Barker All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher. ISBN-13 (pbk): 978-1-4302-1088-7 ISBN-13 (electronic): 978-1-4302-1087-0 Printed and bound in the United States of America 9 8 7 6 5 4 3 2 1 Trademarked names may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, we use the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. Lead Editors: Joohn Choe, Dominic Shakeshaft Technical Reviewer: Andy Olsen Editorial Board: Clay Andres, Steve Anglin, Mark Beckner, Ewan Buckingham, Tony Campbell, Gary Cornell, Jonathan Gennick, Michelle Lowman, Matthew Moodie, Jeffrey Pepper, Frank Pohlmann, Ben Renow-Clarke, Dominic Shakeshaft, Matt Wade, Tom Welsh Project Manager: Beth Christmas Copy Editor: Nancy Sixsmith Associate Production Director: Kari Brooks-Copony Production Editor: Elizabeth Berry Compositor: Diana Van Winkle Proofreader: Linda Seifert Indexer: John Collin Artist: April Milne Cover Designer: Kurt Krames Manufacturing Director: Tom Debolski Distributed to the book trade worldwide by Springer-Verlag New York, Inc., 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax 201-348-4505, e-mail [email protected], or visit http://www.springeronline.com. For information on translations, please contact Apress directly at 2855 Telegraph Avenue, Suite 600, Berkeley, CA 94705. Phone 510-549-5930, fax 510-549-5939, e-mail [email protected], or visit http://www.apress.com. Apress and friends of ED books may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Special Bulk Sales–eBook Licensing web page at http://www.apress.com/info/bulksales. The information in this book is distributed on an “as is” basis, without warranty. Although every precaution has been taken in the preparation of this work, neither the author(s) nor Apress shall have any liability to any person or entity with respect to any loss or damage caused or alleged to be caused directly or indirectly by the information contained in this work. The source code for this book is available to readers at http://www.apress.com. In loving memory of my wonderful parents,Bill and Dorothy Jost —Jacquie Barker To Lisa,Zachary,and Jackson,oh my! —Grant Palmer Contents at a Glance About the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii PART ONE ■ ■ ■ The ABCs of Objects ■CHAPTER 1 A Little Taste of C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 ■CHAPTER 2 Abstraction and Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 ■CHAPTER 3 Objects and Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 ■CHAPTER 4 Object Interactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 ■CHAPTER 5 Relationships Between Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 ■CHAPTER 6 Collections of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 ■CHAPTER 7 Polymorphism and Some Final Object Concepts . . . . . . . . . . . . . . . 191 PART TWO ■ ■ ■ Object Modeling 101 ■CHAPTER 8 The Object Modeling Process in a Nutshell . . . . . . . . . . . . . . . . . . . . 239 ■CHAPTER 9 Formalizing Requirements Through Use Cases . . . . . . . . . . . . . . . . 249 ■CHAPTER 10 Modeling the Static/Data Aspects of the System . . . . . . . . . . . . . . 261 ■CHAPTER 11 Modeling the Dynamic/Behavioral Aspects of the System . . . . . 307 ■CHAPTER 12 Wrapping Up Our Modeling Efforts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 iv PART THREE ■ ■ ■ Translating a UML “Blueprint” into C# Code ■CHAPTER 13 A Deeper Look at C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 ■CHAPTER 14 Transforming Our UML Model into C# Code . . . . . . . . . . . . . . . . . . . 409 ■CHAPTER 15 Rounding Out Our Application,Part 1: Adding File Persistence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 ■CHAPTER 16 Rounding Out Our Application,Part 2: Adding a Graphical User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 ■CHAPTER 17 Next Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601 ■APPENDIX A Installing .NET and Compiling C# Programs . . . . . . . . . . . . . . . . . . . 605 ■APPENDIX B Downloading and Compiling the SRS Source Code . . . . . . . . . . . . 619 ■INDEX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 621 Contents About the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix About the Technical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxiii Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxvii PART ONE ■ ■ ■ The ABCs of Objects ■CHAPTER 1 A Little Taste of C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Getting Hands-On with C# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Why C#? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Practice Makes Perfect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 C# Is Part of an Integrated Application Development Framework . . 4 C# Is Object-Oriented from the Ground Up . . . . . . . . . . . . . . . . . . . . . 5 C# Is Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 C# Language Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 A Reminder About Pseudocode vs.Real C# Code . . . . . . . . . . . . . . . . 6 Anatomy of a Simple C# Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 The using System; Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Class Declaration/“Wrapper” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Main Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 Predefined Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 Variable Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Variable Initialization and Value Assignment . . . . . . . . . . . . . . . . . . . 11 Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Case Sensitivity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 C# Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 Assignment Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Arithmetic Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Evaluating Expressions and Operator Precedence . . . . . . . . . . . . . . 16 Logical Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 vii viii ■CONTENTS Implicit Type Conversions and Explicit Casting . . . . . . . . . . . . . . . . . . . . . . 18 Loops and Other Flow of Control Structures . . . . . . . . . . . . . . . . . . . . . . . . 19 if Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 switch Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 for Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 while Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 do Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 Jump Statements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Code Blocks and Variable Scope . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Printing to the Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Write versus WriteLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Escape Sequences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Elements of C# Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Proper Use of Indentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Use Comments Wisely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 Placement of Braces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Self-Documenting Variable Names . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 ■CHAPTER 2 Abstraction and Modeling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Simplification Through Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Generalization Through Abstraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Organizing Abstractions into Classification Hierarchies . . . . . . . . . . 47 Abstraction As the Basis for Software Development . . . . . . . . . . . . 50 Reuse of Abstractions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 Inherent Challenges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 What Does It Take to Be a Successful Object Modeler? . . . . . . . . . . 53 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 ■CHAPTER 3 Objects and Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 What Is an Object? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 State/Fields/Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 Behavior/Operations/Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 A Note Regarding Naming Conventions . . . . . . . . . . . . . . . . . . . . . . . 62 Instantiation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 User-Defined Types and Reference Variables . . . . . . . . . . . . . . . . . . . . . . . 64 Instantiating Objects:A Closer Look . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 ■CONTENTS ix Objects As Fields . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Association . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Three Distinguishing Features of an Object-Oriented Programming Language . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 ■CHAPTER 4 Object Interactions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Events Drive Object Collaboration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 Declaring Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Method Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Passing Arguments to Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Method Return Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Method Bodies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Methods Implement Business Rules . . . . . . . . . . . . . . . . . . . . . . . . . . 81 The return Statement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Naming Suggestions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Method Invocation and Dot Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Arguments vs.Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 Objects As the Context for Method Invocation . . . . . . . . . . . . . . . . . . 85 C# Expressions,Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Capturing the Return Value from a Method Call . . . . . . . . . . . . . . . . 87 Method Signatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Object Interaction via Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Accessing Fields via Dot Notation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 Delegation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Access to Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Objects As Clients and Suppliers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 Information Hiding/Accessibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Types of Accessibility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Accessing Members of a Class from Within Its Own Methods . . . 101 Camel vs.Pascal Casing,Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Method Headers,Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Accessing Private Members from Client Code . . . . . . . . . . . . . . . . . 104 The “Persistence”of Field Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Exceptions to the Public/Private Rule . . . . . . . . . . . . . . . . . . . . . . . . 111 The Power of Encapsulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Constructors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 x ■CONTENTS ■CHAPTER 5 Relationships Between Objects . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Associations and Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 Multiplicity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Aggregation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Benefits of Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 One Drawback of Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Class Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 Is Inheritance Really a Relationship? . . . . . . . . . . . . . . . . . . . . . . . . . 147 Avoiding “Ripple Effects”. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 Rules for Deriving Classes:The “Do’s” . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Overriding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Rules for Deriving Classes:The “Don’ts” . . . . . . . . . . . . . . . . . . . . . 152 Overloading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 A Few Words About Multiple Inheritance . . . . . . . . . . . . . . . . . . . . . . . . . . 156 Three Distinguishing Features of an Object-Oriented Programming Language,Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 ■CHAPTER 6 Collections of Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 What Are Collections? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Collections Must Be Instantiated Before They Can First Be Used. . . 166 Collections Are Defined by Classes . . . . . . . . . . . . . . . . . . . . . . . . . 168 OO Collections Are Encapsulated . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 Arrays As Simple Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Multidimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 More Sophisticated Collection Types . . . . . . . . . . . . . . . . . . . . . . . . . 176 Generic Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Referencing the Same Object Simultaneously from Multiple Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Collections As Method Return Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Collections of Supertypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 Composite Classes,Revisited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 Exercises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Description: