Beginning C# Objects: From Concepts to Code (Note)
Posted on 2008-06-07 15:20 JieNet 阅读(317) 评论(0) 编辑 收藏 举报Beginning C# Objects: From Concepts to Code (Note)
目录
Beginning C# Objects: From Concepts to Code (Note)
第2章 抽象与建模
1)定义分类规则,就是定义合适的规则集——不过于普通,也不过于严格,而且没有冗余。
2)进行特性对比、找到可供重用的近似抽象的过程,称作模式的匹配和重用。
3)抽象是信息处理的方式,但在软件工程中为软件系统开发合适的模型受以下几点影响而变得颇为不易:
l 存在无穷多可能。
l 对于将来的复杂状况,永远不会有“最好”或“正确”的模型,对于要解决的问题只存在“较好”或“较差”的模型。
l 错误地表述真实世界的模型。(例如:对人建模包括两种血型)
l 实时的与下列人员沟通以保证项目不偏离需求轨道:
n 程序的用户:让他们在代码编写开始之前就明察我们对要解决问题的理解程度。
n 软件工程师:让组员对需要协同的工作保持思路一致。
4)以不同人员的角度(指换位思考)并依据面向对象思想来考虑建模。
第3章 对象和类
1)所谓(软件)对象,是一种将状态(数据)和行为(操作)合成到一起的软件构造,用来描述真实世界的一个(物理或概念性的对象)。
2)真正的面向对象编程语言支持三种关键机制:类,继承,多态。
第4章 对象互操作
1)最简化的面向对象软件开发过程包括:
l 恰当地确定应用程序的功能性需求和总体任务
l 设计合适的类,满足这些需求和任务
l 实体化类,创建对象
l 通过外部触发的事件,驱动对象操作
2)Pascal命名法 and Camel命名法:
l Pascal:每个单词的首字母大写。用于类名、方法名和属性名。
l Camel:第一个单词小写,其余单词的首字母大写。用于命名变量。
3)访问非公有属性的两种实现方法:
l OO编程语言普通的实现方法:提供取值(get)和赋值(set)方法。
l C#的首选实现方法:提供属性(property)。
第5章 对象间关系
1)关联(Association)与链接(Link)
类与类之间的结构关系成为关联。链接则是指两个实体对象之间的结构关系。
从另一方面考虑关联与链接的不同:
l 关联是某个类(类型)的对象间可能存在的关系。
l 链接是这些特定类型的对象间实际存在的关系。
2)聚合(Aggregation)是一种特殊形式的关联,它指明“包括”、“由……构成”或“有……”的关系。和关联一样,聚合用于描述类A和类B之间的关系,不同的是,我们可以用聚合表述更多种关系,如某对象属于类A,类A就是聚合类,类A包括一些类型为B的组件对象,或由一些类型为B的组件对象聚合而成。
3)在增加派生类时,以下几点应禁止:
l 不应该去改变特征的语义:即蕴含的目的、表达的意义。
l 不应该移除特征:既不应该物理地移除特征,也不可简单略过,否则将破坏“is a”层次结构的意旨。
l 不应该修改Property类型:派生类可以覆盖基类的Property,但必须保持基类Property的类型不变。
l 不应该修改方法签名。
第6章 对象群集
1)群集是一种特别的对象类型,用来收集和管理其他对象的引用。
2)数组是简单群集,受到一些限制,OO语言还提供了一些更为强大的群集类型:
l 有序列表:有序列表和数组类似,但其中存储的项是以某种特定顺序放置的,在获取项值的时候,也按照这种顺序取得。对象也能根据它在列表中的位置被获取,如:取第二项。有序列表优于数组的一点是,无需在首次创建时指定其大小,当新项被插入时,有序列表能自动增加长度。实现类有:ArrayList、SortedList。
l 集合:集合是一种未排序的群集。也就是说,在将新项插入到集合中后,无法通过位置索引访问它。集合中不允许存在重复的对象引用(这点并非绝对哦)。
l 字典:字典提供一种手段,让对象引用被存储时,同时存储一个唯一的查询键,这样,稍后就能用这个查询键来找到对象。实现类:Hashtable。
第7章 对象概念末论
1)多态是指两个或多个属于不同类的对象,对同一个消息(方法调用)做出不同响应的能力。
2)抽象类的一个限制:不能实例化。
3)抽象类和接口的区别:
l 接口指定抽象行为,而抽象类经常会指定“具体的”数据结构,以及一些抽象行为和具体行为的混合体。所以,从程度上看,接口要比抽象类更为抽象,因为接口留下了更多的想象空间。
l 当从一个抽象类派生出一个非抽象类时,派生类通过覆载的手段,提供抽象方法的具体实现,所以派生类的方法头一定会包括override关键字。
l 当一个类实现一个接口时,该实现类也要提供接口中声明的所有方法的具体实现。然而,实现类并不覆载他们。反之,我们是在初次描绘方法轮廓,所以,在实现类的方法头中不包括关键字override。
l 从抽象类派生的类不一定要覆载所有的抽象方法,如果一个或多个抽象方法没有被覆载,则该派生类也是一个抽象类。
l 实现一个接口的类必须提供接口所需的所有抽象方法的具体版本;实现一个接口,是一种“要么全要,要么不要”的事情。
l 两者之间的另一重要区别在于,一个类只能从一个基类派生,而一个类却可以实现多个接口。因为这是一个强有力的语言特征。
4)接口不能被实例化,因为它没有构造器。
第8章 对象建模过程简述
1)建模方法 = 过程 + 符号体系 + 工具
完整的建模方法,无论是OO或非OO,包括以下三部分:
l 一个过程:一个“怎么做”的步骤,收集需求,决定要建模的抽象。(注:有效的过程自然是最紧要的。)
l 一类符号:一种用于与模型沟通的图形化“语言”。(有时可以用叙述行文本来描述抽象模型,而不使用正式的图形化符号绘制出来。)
l 一种工具:绘制符号的自动化途径,往往采用“拖放”形式。(在选择使用图形化符号正式地绘制抽象模型时,并非一定要选择特性的工具。)
第10章 对系统的静态/数据方面建模
1) 一个面向对象模型必须说明如下内容:
l 需要创建和实体化何种对象类型,使之能表现合适的抽象模型:特别是对象的属性和方法,以及这些要素之间的结构性关系。一个面向对象系统的元素一旦确立,会是相当固定的,同样,一座房屋一旦建好,就有特定的户型、一定的房间数目、一个特制的屋顶,等等。通常把这个过程称为准备静态模型(static model)。当然某些情况下需求有所改变,当新的需求产生时,可以通过派生新子类或者为已存在的类添加新的方法等手段,改变一个面向对象软件系统的静态结构。然而,相对于一个好的系统软件来说,在其整个生命周期中,这样的修改会相当少,而且改动起来不会很困难。
l 这些对象如何协作才能满足需求(或者说完成系统任务):在不同的环境下,对象的交互方式可能会有所改变。通常将这种细节的对象协作过程称为动态模型(dynamic model)。
第11章 对系统的动态/行为方面建模
1)时序图是UML两种互操作图中的一种,时序图是一种描述在给定场景中消息如何在对象间传递的图形化方法。
2)使用时序图来决定方法:
l 实线箭头代表由一个对象发起的新的请求,指明了消息接收对象要执行的方法。
l 虚线箭头代表其他对象在操作后的响应,不需要编写方法。
l 循环也代表了方法调用,表示一个对象对自己的操作;这可能是私有的“清理”方法,或者其他客户对象可利用的公共方法。