首先,Beginning C# 2008 Objects: From Concepts to Code是一本关于软件对象的书籍,全面介绍了对象的概念,对象如此神奇而直观的原因以及程序员如何构造软件应用程序以正确地使用对象。 本书是一本关于C#的书籍,但不是一本“C#大全”,而是对该语言的和缓而全面的介绍。本书特别强调如何将对象模型转换为具备完整功能的C#应用程序,其他书籍很少提供这方面的介绍。 本书目标 编写本书的目标(希望也是您购买本书的目的)如下: ● 帮助读者熟悉基本的面向对象(object-oriented,OO)术语和概念。 ● 提供对象建模的亲手实践的体验;也就是说,开发可用于随后构建OO软件系统的基础的“蓝图”。 ● 展示如何将这些对象模型转换为可用的软件应用程序的基础——特别是对于C#应用程序,虽然本书介绍的对象建模技术可以同等地应用于任何面向对象编程语言(object-oriented Programming language,OOPL)。 如果您已经使用过C#语言(但是不熟悉有关对象的基础知识),本书将提供关于该语言的OO根源的关键知识。另一方面,如果您是C#初学者,本书将帮助您正确地起步。从这两方面来看,对于希望精通OOPL(如C#)的任何人,本书都将是必须阅读的书籍。 同样重要的是,本书并不打算实现如下目标: ● 帮助读者快速精通对象建模:类似于所有高级技能,完全掌握对象建模技术有两个前提条件:良好的理论基础和大量实践。本书提供了基础知识,以及帮助您应用和实践所学新知识的项目和练习的建议。但是,真正掌握对象建模的唯一方法是不断参与OO建模和开发项目。本书中提供的各种技能(希望能够给您带来信心),帮助您在专业机构中开始应用对象技术,这样您才能真正学习对象技术。特别是,如果有一位OO经验丰富的导师在您的第一次符合“行业标准”的项目中不断指导您,您将受益匪浅。 ● 帮助读者成为特定OO方法论方面的专家:OO软件开发领域有数十种不同的正式方法;新的方法不断出现,而且并无优劣之分。例如,UML(Unified Modeling Language,统一建模语言)符号体系是一种最新的方法,而OMT(Object Modeling Technique,对象建模技术)符号体系是一种最古老的方法,然而两者极为相似,因为UML从根本上极大地扩展了OMT。确保理解对象建模的一般过程以及UML的细节之后,您就具备了足够的知识,可以自己检阅、评估和选择特定的方法论(或者创建自己的方法论——甚至将来某一天编写关于自己创建的方法论的书籍)。 ● 介绍读者所需的全部C#知识:C#是内容相当丰富的语言,由数十个核心类、可以通过.NET类库使用的数百个其他类以及由这些类执行的数以千计的操作组成。如果C#提供了执行特定操作的多种备选方法,本书将只介绍一到两种最适合于解决当前问题的方法,帮助读者理解解决该问题的方式。尽管如此,本书仍然提供了构建完整的应用程序所需的足够C#语言知识。 掌握从本书中获得的知识之后,您就能够理解关于C#的更为彻底的阐述,例如,当前市面上的其他C#参考书籍提供的知识或者深入介绍UML的参考书籍中的知识。 成功的OO程序员必须理解对象的原因 我们经常与一些软件开发人员会面——在工作场所、在客户的办公室、在专业会议上以及在大学校园内——这些开发人员都尝试掌握C#这样的OOPL,他们参加C#培训,阅读C#相关书籍,或者安装并使用C#集成开发环境(integrated development environment,IDE),如Visual Studio .NET。然而,这是舍本逐末的方法:他们缺乏对象概念的基础知识,更严重的是,他们不知道如何从头开始构造软件应用程序以充分利用对象。 假设您知道如何构造住宅的基础知识,并且被要求构建房屋。实际上,您还是一位广受欢迎的世界知名建筑家!客户告诉您,建筑材料已经运送给您。在开始构造房屋的当天,一辆卡车开到了施工现场,卸下一大堆蓝色、星型的奇怪建材,每块建材的中间有一个空洞。因此,您只有完全停工!您曾经使用木材、砖材和石材等建筑材料建构过无数房屋,并且知道如何使用熟悉的材料施工;但是,您并不知道如何使用蓝星材料堆叠房屋。 经过一番冥思苦想,您拿出一把锤子和一些钉子,尝试按照以前处理木材的方式将这些蓝星材料钉在一起,但是材料无法完全合缝。然后,您又尝试使用砌砖材的灰泥填充蓝星材料之间的缝隙,但是灰泥似乎无法将这些蓝星材料粘在一起。由于预算紧张并且工期有限制(并且由于您自称是建筑专家,但是却不知道如何使用现代化的建材),因此您只好勉强施工。最终,您拼凑出一个至少在外表上看起来类似于房屋的建筑。 您的客户前来检查工作,他完全感到失望。客户选择蓝星材料作为建材的一个原因是它们相当节省能源,但是因为您使用钉子和灰泥装配蓝星建材,它们失去了大部分隔离房屋的固有能力。为了补偿热量的损失,客户要求您将房屋中的窗户全部换为绝热玻璃窗,这使您手足无措!更换窗户花费的时间远多于新建房屋的时间,更不要说替换在更换窗户时损坏的蓝星材料所需的成本。当您告诉客户目前的情况时,他立刻暴跳如雷!客户选择蓝星材料作为建材的另一个原因是,这种建材具有很强的适应性,易于迎合设计的更改,但是由于您采用无效的方式装配蓝星材料,因此必须逐个拆开它们,并更换其中的大部分。 遗憾的是,这也是许多程序员构建OO应用程序的方式,因为他们并没有很好地理解如何从对象的角度完成项目。更糟糕的是,绝大多数即将成为OO程序员的人员对于理解对象并将其用于OO语言编程的必要性一无所知。因此,他们使用C#这样的语言编程拼凑出远非理想的结果:在必须执行“中期修正”(例如,在部署应用程序之后需要引入新功能)时缺乏灵活性的程序。 本书读者对象 本书为希望最有效地使用C#这样的OOPL的任何人编写!本书的目标读者如下: ● 还没有开始使用C#,但是希望正确起步的人群。 ● 曾经购买过C#书籍并且满怀希望地读完该书籍,但是只理解该语言的基础知识,而不知道如何构造应用程序以充分利用该语言的OO功能。 ● 已经购买C# IDE软件工具,但是实际上只了解如何拖放图形用户界面(graphical user interface,GUI)组件以及在按钮和菜单的后台添加少量逻辑,而没有真正地了解围绕对象正确地构造应用程序的核心。 ● 已经构建过C#应用程序,但是对在应用程序生命周期的后期出现新需求时维护或修改该应用程序的困难程度感到失望。 ● 前面已经学习过对象建模的相关知识,但是不了解如何将对象模型转换为真实的代码(C#或其他语言)。 底线是,希望掌握C#这样的OO语言的人必须首先成为对象方面的专家。 为了从本书获得最大的价值,您应该具备一些编程经验,无论何种语言均可。您应该理解如下的简单编程概念: ● 简单数据类型(整型、浮点型等) ● 变量和它们的作用域(包括全局数据的概念) ● 控制流程(if-then-else语句、for/do/while循环等) ● 数组:数组的概念和使用方式 ● 函数/子例程/方法的概念:如何传入数据和返回结果 您不需要预先了解C#(在本书的第Ⅰ部分将简要介绍该语言,而在第Ⅲ部分将深入研究该语言)。并且,您也不需要了解对象——至少在软件层面上是如此!在第2章中将会介绍对象,人类天生就是从对象的角度来看世界的。 如果您已经开发过具备完整功能的C#应用程序,但仍然不清楚应用程序构建中的对象方面,则阅读本书也为时未晚。大学中通常会提供关于对象建模和C#编程的单独课程。学生最好按照顺序选修这两门课程,但是通常会在选修对象建模之前就已经学习了C#。这些学生会在本书中看到一些熟悉的“地标(landmark)”(在C#代码示例中),但是即使如此,他们仍然会在本书中学到在使用C#(或其他OOPL)编程时执行各种操作的原因的基本原理,从而极大地增长见识。 您不仅需要了解语言的机制,更需要了解面向对象的“原因”,这样才能最终成为更优秀的C#程序员。如果您已经具备C#编程经验,则可以快速浏览简单介绍该语言的章节,即第Ⅰ部分中的第1章和第Ⅲ部分中的第13章。 本书根源于作者的课程教学,因此非常适合于用作一学期课程或分为对象建模和C#编程两门课程的教科书。 如果您感兴趣于对象建模,但是不希望学习C#编程 本书仍然绝对有价值!即使您并不打算从事编程行业(许多对象建模学生都是如此),但是阅读少量使用C#这样的OOPL编写的代码示例确实有助于您牢固掌握对象概念。因此,鼓励您阅读本书的第Ⅲ部分——至少是第14章——即使您永远不会动手编写C#程序。 本书的结构安排 本书围绕以下3个主要主题展开介绍: 第Ⅰ部分:对象ABC 在深入研究如何执行对象建模以及C#的OO编程详情之前,我们有必要说同一种关于对象的语言。本书的第Ⅰ部分包括第1~7章,从定义位于所有软件开发方式(OO或其他方式)之下的基础概念开始逐步介绍。但是,第Ⅰ部分很快就开始讨论高级对象概念,从而在学习完这一部分时,您将会充分理解对象。 第Ⅱ部分:对象建模101 在第Ⅱ部分(第8~12章)中,主要介绍在开发应用程序的对象模型时,执行各种操作的方式以及(更重要的是)原因的原理——这是所有对象建模技术共有的原理。了解UML符号非常重要,因为它是行业标准,并且很可能是大多数同事/客户将会使用的符号。因此,本部分将介绍UML知识,并且将UML用于所有具体的建模示例。使用这些章节中介绍的建模技术,为学生选课系统(Student Registration System,SRS)开发对象模型“蓝图”,本前言的末尾给出了有关该系统的需求说明。 第Ⅲ部分:将对象“蓝图”转换为C#代码 在本书的第Ⅲ部分(第13~17章)中,将展示如何将在第Ⅱ部分中开发的SRS对象模型交付为具备完整功能的C#应用程序,包括图形化用户界面以及在不同用户登录该系统时持久保存数据的方法。这一部分中给出的所有代码示例都可以从Apress网站和本书信息网站(www.tupwk.com.cn/downpage)下载,并且强烈鼓励您下载这些代码并实验它们。实际上,在每章末尾都提供了可供实验的练习。本部分使用通常表达软件系统需求的描述风格编写SRS的需求说明。您可能现在就有信心构建应用程序来解决这种问题,但是在学习完本书之后,您将会更加相信自己能够将其构建为面向对象的应用程序。 为了完善本书,本书包括了最后一章“下一步”,其中给出了一些建议,帮助您在学习完本书后了解如何继续自己的OO发现之旅。本书给出了推荐书籍列表,您可以根据自己下一步的发展领域,借助这些书籍更上一层楼。 作为本书基础的C#版本 与任何编程语言一样,Microsoft不断推出新的C#版本。在出版本书的第2版时(2008年秋天),.NET的最新版本是3.5,因此本书使用了C#语言的一些“最新和最优秀”的功能,例如,自动实现的属性和对象初始化器。然而,您在阅读本书后获得的正确OO编程的技术和概念并不与任何.NET版本密切相关,而是同样可以应用于未来的C#版本。 开始学习本书之前的最后思考 对于有经验的程序员来说,本书中的许多内容——特别是第Ⅰ部分开始处的内容——看起来可能过于简单。这是因为许多对象技术都建立于基础软件工程原理之上,多年以来已经在许多项目中实践过这些原理,在此只是稍微重新包装而已!确实有一些技巧使OOPL具备非常强大的功能,而使用非OO语言则不可能实现这些功能,例如,分别在第5章和第7章中介绍的继承和多态(可以在非OOPL中手动模仿这些技术,如同程序员可以从头开始编写自己的数据库管理系统(database management system,DBMS),而不是使用商业化的产品,如Oracle、Sybase和MY SQL Server,但是谁也不愿意这样做)。 对于有经验的程序员,在精通对象的道路上面临的最大挑战是,重新调整他们解决问题的方式: ● 已经使用非OO方法开发过应用程序的软件工程师/程序员通常必须“忘却”在软件分析和设计的传统方法中使用的特定手段。 ● 看似矛盾的情况是,对于刚刚成为程序员(或者成为OO建模师)的人,他们在学习软件开发的OO实现时反而更容易接受和用于实践。 幸运的是,在开发软件时思考对象的方式基本上与人们通常思考世界的方式相同。因此,学习“思考”对象以及使用C#编写对象就像1、2、3一样容易! 读者反馈 我们努力编写本书,力求使本书为读者提供更多的有用信息,因此希望知道您的想法,并且始终急切地希望了解您需要知道的信息。 我们衷心感谢您对本书提供的反馈,并且在将来的编辑工作中牢记您所提出的批评和建议。如果您希望给出反馈意见,可以在info@appress.com或上直接发布反馈意见,或者通过grantepalmer@gmail.com、jacquie@objectstart.com