C#和面向对象编程语言.pdf
文本预览下载声明
2 章 C#与面向对象编程语言
阅读目标
树立面向对象设计思想
理解封装、继承、抽象、多态的概念
学会如何识别系统中的对象
2.1 面向对象思想
面向对象思想为软件设计与开发赋予了哲学的意义。在哲学的世界里,小至沙粒微尘,
大至日月星辰乃至宇宙,均可视为单独的个体对象而存在。如果以哲学的目光凝视程序的
世界,又何尝不是如此?一个用户,一种销售策略,一条消 ,一张订单,一个Web 网页……,
运用面向对象思想,则它们都可以视为一种对象。每一种对象,都有独立的生命周期。谁
来创建它,谁来销毁它,它的内在属性,表现行为,以及它与外界之间的关系和集合,无
不具有某种哲学的意味。我们在定义对象时,就好比是在描述一个现实世界的事物,需要
2 章 C#与面向对象编程语言
定义该对象的自然属性和社会属性,限定它的内涵与外延,勾勒出该对象的社会关系。
面向对象思想的精要,在于“一切皆为对象”的本质。那么,什么是对象呢?一般认
为,对象是一个真实的或抽象的元素,它包含了描述信 的属性以及处理对象信 的行为。
行为在对象的定义时,又表现为方法。以现实世界为例,“人”作为一种特殊的动物,可以
看作是一种对象。这个对象具有许多属性,例如姓名、身高、体重、民族、国籍、出生年
月等等,而行为则包括行走、吃饭、跑步、乃至于玩游戏、踢足球。从词义学的角度来看,
属性偏向于名词的范畴,行为则具有动词的词性。
虽然说对象是由属性和行为组成,但并不代表它们必须被对象同时拥有,仅仅拥有属
性或者行为的对象在系统设计中比比皆是。之所以如此定义,或者是由对象的自身特质所
决定,也可能根据设计的要求而定。例如,商品信 对象就只包含了商品名、商品类别、
价格、库存量等属性,如果不考虑数据操作,对象自身是不具有任何行为的。在软件体系
架构设计中,领域层的实体对象往往就是类似于商品信 对象这样仅具有属性的对象。而
当我们在分辨鸟类动物时,有时候却需要将鸟类飞行的能力视为一种对象。此时,该对象
仅具有飞行这样一种行为。或许它与我们有关对象的理解大相径庭,然而基于“一切皆为
对象”的本质,为什么我们不能对其一视同仁呢?
对象的属性与行为并非一成不变,根据实际情况,同一种对象具有的属性和行为可能
会发生变化。例如同样是对象“人”,在户籍管理系统中,我们就不必关心有关行走、吃饭、
跑步等行为 但如果是开发一个足球游戏,那么作为对象的 “人”,就需要定义各种踢足球
的行为。同样,在户籍管理系统中,不必考虑对象 “人”的身高、体重、容貌等属性,但
如果是征婚信 管理系统中,这些属性恰恰是系统最为关注的焦点。
在进行面向对象设计时,开发者就是造物主,是抟土造人的女娲,对象的一切要素均
掌握在开发者手中。然而,一个好的开发者却不能随心所欲的 “创造”对象,他们应该是
系统需求的忠实执行者,对象的属性与行为,特别是对象的细粒度都必须由系统需求决定。
以“汽车”对象为例,对于车辆管理系统而言,汽车被看作是一个整体,我们不需要对汽
车的零部件进行细化。如果是汽车的生产控制系统,“汽车”对象则是一整套零部件的集合。
我们在定义对象时,必须细化到引擎、轮胎乃至于更小的一级。
对象的定义必须符合系统的需求,这是面向对象设计中最基本的原则。面向对象思想
还包括三个核心要素,即封装(Encapsulation )、继承(Inheritance )与多态(Polymorphism),
21
C#编程极限
它将面向对象技术推到了思想的境界。只有真正理解了这三个要素,才算得上掌握了面向
对象思想的精髓。
所谓对象的 “封装”,就是将对象的相关数据隐藏到接口方法中。之所以要采用封装,
是因为对象会引人而异,暴露出不同的数据信 。反过来说,对象的封装则有利于相关信
的隐藏,它适当地保护了对象的“隐私”。正如一间房屋一般,室内的装饰与摆设只能被
室内的居住者欣赏与使用,如果没有四面墙的遮挡,室内的所有活动在外人面前一览无遗,
结果就太糟糕了。然而,封装是有限度的,一个包裹得严严实实的黑箱子,即使它的空间
再宽阔,也没有实用价值。正如房屋的门与窗,就是封装对象暴露在外的接口方法,专门
供人出入与流通空气、为房间带来一缕阳光。
“封装”的意义在于除了设
显示全部