我爱Aspx >> 书籍 >> Beginning C# Objects从概念到代码【作者】
【出版社】
【ISBN】
【出版日期】
【开本】
【版别版次】
本书主要介绍了C#语言各方面的知识以及使用C#进行开发的原则与实践,结合C#深入浅出的阐述面向对象理论的基本内容。本书是由该书作者之一Jacquie Barker的经典畅销著作Beginning Java Object一脉传承而来,与之具有异曲同工的特色。
本书最初和最重要的关注点,是软件对象:什么是软件对象,为什么它们如此神奇而直白,以及如何正确使用对象去构建一个软件应用。
这也是一本关于C#的书:它并非一本“C#大全”,而是一份对该语言的温文但全面的介绍,还特别强调了如何把对象模型转换到功能完备的C#应用程序——其他图书很少这样编写。
本书的目标
我们撰写本书的目标(希望也是你买它的目的)是
• 让你熟悉基础的面向对象(OO)术语和概念。
• 让你得到对象建模领域的上手实践体验:即,创建一幅可用作后续面向对象软件系统构建基础的“蓝图”。
• 演示如何将类似对象模型转换为可用的软件应用程序,特别地,C#应用程序(虽然你将学到的对象建模技术也可用于其他语言)。
如果你已经熟悉C#语言(但不熟悉对象基础),那么,学习C#的面向对象根源,对你成功使用该语言至关重要。另一方面,如果你是C#新手,本书将让你能正确地“起跳”。从这两方面看,对于任何打算成为精通一门类似C#的OO编程语言的人,本书都是必读之作。
本书并不打算做到
• 让你一夜之间精通对象建模:和其他高级技能一样,完全掌握对象建模技术有两个条件:良好的理论基础和大量的练习!本书只告诉你基础知识,以及让你能应用和实践新学知识的项目/练习的建议。但是,真正精通对象建模技术的必经之路,还是坚持不断地参与OO建模和项目开发。本书给你以技能,希望还能给你以信心,让你能在一个专业机构中开始应用对象技术,那才是你真正学习的地方,尤其是如果拥有一位OO经验丰富的导师在整个“工业标准”项目中指导你时,更是如此。
• 让你变成某种特定OO术语体系的专家:OO软件开发领域有数十种不同的正式方法,新变种还在不断产生,而且并无优劣之分。例如,UML(即Unified Modeling Language,统一建模语言)符号体系是最新的,而OMT(即Object Modeling Technique,对象建模技术)是最旧的其中之一,然而两者极为相似,因为UML基本上极大地扩展了OMT。在理解了对象建模技术的一般过程和用UML建模的技术后,你就拥有足够的知识,可以自己检阅、评估和选择一种特定的术语体系(或创建你自己的体系——甚至也许有一天你会写一本关于自己发明的术语体系的书,谁知道呢!)
• 教给你所需的全部C#知识:C#是一种非常丰富的语言,在Framework Class Library中包括了数十个核心类、数百个其他类,以及这些类提供的数以千计的操作。假使C#提供了一打实现某种操作的方案,则我们将只介绍其中一两种最适合解决手边问题的方案,让你明白解决问题的方式。尽管如此,在本书中,你还是一定会看到足够用来构建一个完整应用的C#语言知识。
用从本书学到的基础知识武装好自己后,你将能欣赏关于该领域的更为彻底的阐述,例如坊间有售的C#参考书中的知识,或UML参考书中的描述。
对于想做成功OO程序员的人,为什么理解对象如此要紧
我们常常与一些软件开发者会面()在工作场所,在客户办公室,在专业会议上,或在大学校园里()
这些开发者都尝试去掌握一门类似C#的OO编程语言,他们参加C#培训,阅读关于C#的书,或是安装和使用像Visual Studio .NET这样的C#集成开发环境(IDE)。然而,这是舍本逐末的做法:他们缺乏对什么是对象的基础认识,更为严重的是,缺乏利用对象从头开始构建软件应用程序的知识。
想象一下,如果你被要求建造一所房屋,而且你也懂得关于建筑的基础知识。实际上,你还是一位抢手的世界知名建筑家!客户告诉你,建材已经运送给你。在开工那天,一辆卡车开到施工现场,卸下一大堆蓝色的、星形的奇怪建材,每块中间还有个洞。于是你只能暂时停工!你曾经使用木材、砖块、石头等建材建造过无数房屋,而且也懂得使用熟悉的材料去施工;但是,你却完全不知道怎样堆叠蓝星公司的建材。
一番冥思苦想后,你拿出一把锤子,想按照以前对付木材那套把蓝星建材钉到一起,但它们却无法严丝合缝。然后你又用砌砖的灰泥填充建材之间的缝隙,不过灰泥似乎无法粘到上面。然而,由于预算和工期都有限(因为你称自己为建筑“专家”,但却不懂如何使用现代建材,把自己推到了绝地),只好勉强上马。最终,你拼凑出一个看起来(至少从外面看起来)像是房子的玩意。客户来检查工作,并表示了完全的失望。他选择蓝星建材的原因之一是,使用这种建材搭的房屋相当节省能源;但是,由于你使用了钉子和灰泥,它们蓝星建材失去了大部分隔离能力。为了补偿热量损失,客户要求你把所有窗户玻璃换成绝热玻璃。这时你手足无措!换掉所有玻璃比新建一座房屋所耗时间还长,而且替换因为换玻璃而损伤的墙体所花时间还不计算在内。当你告诉客户这个情况时,他暴跳如雷!客户选择蓝星建材的另一个理由是,该种建材适应性十足,易于迎合设计改变;但是,由于你用极无效率的手段组装了它们,就不得不再将它们逐个拆开,换掉其中一大批。
很悲哀,这也是许多程序员搭建OO应用程序的方式,因为他们没有被很好地教会如何从对象的角度来完成项目。而更麻烦的是,绝大多数即将成为OO程序员的人,对于理解对象并将其用于OO语言编程的必要性,一无所知。所以,他们使用C#这样的语言编程,拼凑出远非理想的结果:在应用程序交付之后,需要引入新功能,从而导致需求规格改变,必须做“中期修正”时,程序就会因缺乏灵活性而无法适应。
本书为谁而写
本书为任何想要大体了解类似C#这样的面向对象编程语言的人而写!本书的目标读者
• 还没开始使用C#,希望有个正确的起步
• 曾经买过一本C#书,满怀希望地读完,了解了一些基础语言知识,但不大懂得如何充分利用该语言的OO特性来构建应用程序
• 买了一套C#集成开发环境(IDE)软件工具,但只会拖放GUI组件,为按钮、菜单等添加少量逻辑,但却对如何围绕对象正确地构建应用程序核心没有真正的认识
• 已经搭建了一个C#应用程序,但对因新需求产生而导致的维护或修改困难感到失望
• 曾经学过一些对象建模,但不明白如何把对象模型转换为真实代码(C#或其他语言)
底线是,如果谁真打算掌握一门C#这样的OO语言,那么他就必须首先成为对象专家!
为了从本书中获取最大价值,你应当具备一些编程经验,无论哪种语言均可。你应当了解简单的编程概念,例如
• 简单数据类型(整型、浮点型,等等)
• 变量及其作用域(包括全局数据的概念)
• 流程控制(if-then-else语句,for/do/while循环,等等)
• 什么是数组,如何使用数组
• 函数/子例程 (subroutine)/子程序(subprogram)的概念:如何传入数据和取回结果
不过,你不必对C#有任何认识(在第一部分,我们将让你尝试这种语言的滋味,在第三部分还会深入这种语言)。而且,你也不必对对象有所了解——至少在软件层面上!如你将在第2章所学到的那样,人类天生是从对象的角度看世界。
即便你已经开发过功能完备的C#应用程序,如果你还是对应用程序构建中的对象方案有所不解,现在再读本书也为时未晚。大学里常会提供关于对象建模和C#编程的单独课程。学生最好是顺序选修这两种课程,不过他们常常会在选修对象建模课之前已经选修了C#课。这类人会在本书中看到一些熟悉的“地标”(在C#代码范例中),即便如此,他们会学到在用C#(或其他OO编程语言)编程时为什么要这样做或那样做的原理,从而大大增长了见识。
不光了解语言机制,还要了解面向对象的“所以然”,才能让人从根本上成为更好的C#程序员。如果你有C#经验,可以快速扫读介绍这种语言的那些章节,即,第一部分第1章和第三部分第13章。
本书根源于作者的课程教学,所以也可作为一学期课程或分为对象建模和C#编程两门课的适用教材。在附录A中,我们提供了如何使用本书作为教材的一些建议。
如果你感兴趣于对象建模,但不想学C#编程
这本书还会有价值吗?绝对有!即便你不打算从事编程职业(许多对象建模学生都是如此),我们发现,阅读少量用C#这样的OO语言编写的代码范例,的确能帮助你牢固掌握对象概念。所以,我们鼓励你阅读第三部分——至少是第14章——即使你永远不会把手放到键盘上编写C#程序。
本书如何组织
本书围绕三个主题组织,如下:
第一部分:对象ABC
在一头扎进对象建模“怎样做”和C#的OO编程细节之前,我们最好都说同一种关于对象的语言。
本书第一部分由第1章到第17章组成,从定义所有软件开发手段(OO或其他)之下的基础概念开始,慢慢起步。不过,很快就冲入高级对象概念的讨论。这样,到第一部分结束时,你将会有“对象头脑”。
第二部分:对象建模101
在第二部分——第8章到第12章——中,集中于在开发应用程序的对象模型时,我们所做事情的“然”和“所以然”。了解UML符号体系很重要,它是工业标准,也多半会是你的同事/客户会使用的,所以我们教给你UML知识,并把UML应用到我们的具体建模范例上。使用这些章节呈现的建模技术,我们将为学生选修系统(Student Registration System,SRS)开发一个对象模型。本介绍末尾附带了这套系统的需求说明书。
第三部分:把对象“蓝图”翻译为C#代码
在本书第三部分——第13章到第17章——中,演示如何将在第二部分开发的SRS对象模型渲染成一个功能完备的C#应用程序,包括一个图形化用户界面,以及在用户登录并注销后持久化数据。这些章节中呈现的所有代码范例,都可从Apress网站——http://www.apress.com——下载到,我们强烈鼓励你下载这些代码并着手实验。实际上,我们在每章末尾部分都提供了可供实验的练习。SRS的需求说明书用描述风格写成,软件系统需求常常是这样表达的。也许现在你就有信心搭建一个应用程序解决此问题,但读完本书后,你将更相信自己有能力把它搭建成一个面向对象的应用程序。附录B中列出了三个额外的案例——处方跟踪系统、会议室预定系统和机票订座系统。它们是每章后面许多练习的基础。
为了完善本书,我们还写了标题是“下一步”的最后章节,它给出一些建议,让你在读完本书后,懂得如何继续自己的面向对象发现之旅。我们列出了一些推荐书目,让你根据自己下一步的发展领域,借助这些书籍更上一层楼。
约定
本书中我们使用一系列约定,帮助你更好地阅读和跟上思路。
例如:
提示框包括重要的背景信息。
对于字体风格
• 当谈及重要内容时,粗体显示。
• 用类似WriteObject()这样的字体显示文件名、URL和代码:
范例代码如下:
// 粗体字用来提示新的或重要的代码:
Student s = new Student();
// 普通字体表示在上下文中不那么重要的代码,
// 或者之前已经出现过的代码。
int x = 3;
本书基于哪个C#版本
Microsoft持续推出新版本的C#语言。好消息是,由于我们只关注核心C#语言语法——从C#出现之日起就固定下来的语言特性——所以与C#版本无关。你从本书中学到的技术和概念,也同样可以运用于未来版本的C#。
开始前的最后思考
书中的许多内容——特别是第一部分开始时那些——对于有经验的程序员看起来也许会过于简单。这是因为,许多对象技术建立于基础软件工程原则之上,这些原则经年以来在许多项目中实践过,只是稍加包装而已!的确有一些东西,使得OO语言极具威力,而非OO语言本质上不可能拥有这种威力,例如,你将在第5章和第7章学到的继承和多态。(这些技术也可用非OO语言模拟,就如同程序员编写自己的数据库管理系统(DBMS),而不使用Oracle、Sybase和MS SQL Server等现成的商业产品——不过谁肯那样做呢?)
有经验的程序员在精通对象的道路上遇到的最大挑战是,他们解决问题的方式需要得到再教育。
• 对于使用非面向对象方式开发过应用程序的软件工程师/程序员,不得不“忘掉”用在软件分析和设计的传统方式中的实现手段。
• 诡异的是,那些刚成为程序员(或OO建模师)的人,在学习软件开发的OO实现时,反而更易接受和用于实践。
幸运的是,在开发软件时思考对象——和用C#编写它们——的方式,大体上和人们思考世界的方式别无二致,就和1、2、3一样容易!
欢迎赐教
我们努力使本书尽可能对你有用,所以我们也乐意了解你的想法。我们总想了解,你想要的和希望知道的是什么。
欢迎对于本书或以后的著作给出反馈,赞弹均可。如果你有什么想说的,请通过info@apress.com或http://www.apress.com联系我们。也可以直接写E-mail到作者邮箱:jacquie@objectstart.com, http://objectstart.com,或者grantepalmer@msn.com。
目录
第1章 初尝C# 3
1.1 C#上手指南 4
1.2 为什么用C# 4
1.3 C#语言基础 6
1.4 解析一个简单的C#程序 6
1.5 预定义类型 9
1.6 变量 10
1.7 字符串(string) 12
1.8 大小写敏感 12
1.9 C#表达式 13
1.10 隐式类型转换和显式类型转换 16
1.11 循环和其他控制结构流程 18
1.12 跳出语句 26
1.13 代码块和变量作用范围 27
1.14 输出到屏幕 29
1.14.1 Write vs WriteLine 30
1.15 C#风格要素 31
1.16 小结 37
1.17 练习 37
第2章 抽象与建模 39
2.1 通过抽象进行简化 39
2.2 通过抽象来概括特征 40
2.3 抽象的重用 45
2.4 挑战 46
2.5 小结 47
2.6 练习 48
第3章 对象(Object)和类(Class) 51
3.1 什么是对象 51
3.2 状态(State)/attribute(特征属性)/数据(Data) 52
3.3 行为(Behavior)/操作(Operations)/方法(Methods) 53
3.4 类(Class) 55
3.5 用户定义类型(User-defined Type)和引用变量(Reference Variable) 58
3.6 近看对象实体化 59
3.7 作为attribute的对象 63
3.8 合成 64
3.9 面向对象编程语言的三要素 67
3.10 小结 67
3.11 练习 67
第4章 对象互操作 71
4.1 事件驱动对象协同 71
4.2 声明方法 73
4.3 方法调用和点符号 79
4.4 信息隐藏/可访问性 91
4.5 封装的威力 108
4.6 实体构造器 114
4.7 小结 117
4.8 练习 118
第5章 对象间关系 121
5.1 关联(association)与链接(link) 122
5.2 继承(inheritance) 128
5.3 再论面向对象编程语言三要素 149
5.4 小结 149
5.5 练习 149
第6章 对象群集 153
6.1 什么是群集 153
6.4 多个群集同时引用单个对象 167
6.5 创造自己的群集类型 168
6.6 作为方法返回类型的群集 172
6.7 超类型的群集 173
6.8 再论组合类 174
6.8.3 完成了的Student数据结构 177
6.9 小结 178
6.10 练习 178
第7章 对象概念末论 179
7.1 什么是多态(polymorphism) 180
7.2 面向对象编程语言三要素 187
7.3 抽象类 188
7.4 接口(Interface) 195
7.5 静态特性 208
7.7 小结 222
7.8 练习 223
第8章 对象建模过程简述 241
8.1 对象建模目标概观 241
8.2 对象建模过程概述 245
8.3 小结 249
8.4 练习 249
第9章 通过用例划定需求 251
9.1 什么是用例 252
9.1.1 功能性需求 vs. 技术性需求 252
9.3 细说用例 257
9.4 搭配操作者和用例 258
9.5 做图还是不做图 259
9.6 小结 260
9.7 练习: 260
第10章 对系统的静态/数据方面建模 263
10.1 确定合适的类 264
10.2 制作数据字典 276
10.3 决定类间关联 277
10.4 UML符号:对抽象模型的静态方面建模 282
10.5 对象图 294
10.6 关联“管道”和信息“流” 297
10.7 “混合与匹配”关系符号 301
10.8 关联类 303
10.9 “完成了的”学生注册选修系统类图 305
10.10 元数据 312
10.11 小结 313
10.12 练习 314
第11章 对系统的动态/行为方面建模 311
11.1 行为如何影响状态 312
11.2 场景 317
11.3 时序图(Sequence Diagram) 320
11.4 使用时序图来决定方法 325
11.5 协作图 327
11.6 调整后的SRS类图 328
11.7 小结 329
11.8 练习 329
第12章 对建模的总结 331
12.1 测试你的模型 331
12.2 重新检查需求 332
12.3 重用模型:设计模式一席谈 334
12.4 小结 336
12.5 练习 337
第13章 窥秘C# 339
13.1 术语列表 340
13.3 编译和运行C#程序 342
13.4 命名空间 353
13.5 作为对象的字符串 358
13.6 C#异常处理 364
13.7 Object类 374
13.8 C#的群集类 381
13.9 再论变量初始化 399
13.10 关于Main方法的进一步讨论 400
13.11 开发命令行驱动的程序 401
13.12 对象通过this关键字自我引用 406
13.13 再访构造器 408
13.14 更多关于C#和继承的知识 413
13.15 更多关于方法的知识 421
13.16 对象标识 425
13.17 对象删除和垃圾收集 430
3.19 小结 431
3.20 练习 432
第14章 将UML模型变成C#代码 433
14.1 如何充分利用本章和下一章 434
14.2 回顾SRS类图 434
14.3 调试技巧 477
14.4 小结 479
14.5 练习 480
第15章 第1部分:增加持久化特性 481
15.1 什么是持久化(persistence) 482
15.2 群集包装(封装群集;从ASCII文件中读数据) 491
15.4 Faculty类 501
15.5 修补ScheduleOfClasses类 503
15.6 修改Course类 505
15.7 Student类(动态获得数据;保存对象状态) 505
15.8 重访SRS类 511
15.9 小结 518
15.10 练习 519
第16章 添加图形化用户界面(GUI) 521
16.1 C# GUIs:初级读本 522
16.2 第一阶段:为SRS GUI准备操作概念文档 528
16.3 第2阶段:创建我们的GUI的外观 535
16.4 第三阶段:通过事件处理添加功能 560
16.6 练习 593
第17章 下一步 593
17.1 屡试不爽的C#学习方法 593
17.2 推荐阅读 595
17.3 请赐评论 596
附录A 如何使用本书做教材 481
A.1 推荐的教学手段 481
A.2 C#作为教学语言的适用性 482
A.3 最后一些建议 483
附录B 其他案例研究 481
B.1 案例1:处方跟踪系统 481
B.2 案例2:会议室预定系统 483
B.3 案例3:Blue Skies航班订座系统 485
附录C 安装配置基础的对象建模/C#开发环境 481
C.1 对象建模工具 481
C.2 .NET Framework Software Developer’s Kit 481
C.4 使用在线.NET Framework文档 486
C.5 最后的话 486
附录D 下载和编译SRS源代码 481
附录E C#关键字 481
Visual C#.NET编程精粹150例[03-18]
Visual C# 2005文件IO与数据存取..[03-18]
框架设计(第2版):CLR Via C#[03-18]
Visual C# 2005程序开发与界面设..[03-18]
在C#中建立复杂的、灵活的SQL查询..[03-17]
病毒及流氓软件自我复制的简单实..[03-16]
用C#和WMI获取逻辑驱动器详细信息[03-16]
用Visual C#开发简单的复合控件[03-16]
Visual C# 2.0匿名方法揭密[03-16]
深入理解C# 3.0的五项主要改进[03-16]
Visual C#.NET编程精粹150例[03-18]
Visual C# 2005文件IO与数据存取..[03-18]
框架设计(第2版):CLR Via C#[03-18]
最优化ASP.NET ——面向对象开发..[03-18]
Visual C# 2005程序开发与界面设..[03-18]
ASP.NET 2.0编程珠玑—— 来自MV..[03-18]
Visual Basic 2005高级编程(第4版..[03-18]
Microsoft .NET Framework 3.0 可..[03-18]
Microsoft SQL Server 2005 Serv..[03-18]
.NET Framework 2.0 版语言包 (x..[03-18]