面向对象的程序设计

面向对象的程序设计

一、基本概念

1.1 什么是对象

对象(Object)是问题域或实现域中某些事物的一个抽象,它反映此事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。

关于对象要从两方面理解:一方面指系统所要处理的现实世界中的对象;另一方面对象是计算机不直接处理的对象,而是处理相应的计算机表示,这种计算机表示也称为对象。

1.2 什么是面向对象的程序设计

建立一个对象模型,它能够近似的反映应用领域内的实体之间的关系,其本质是更接近于一种人类认知事物所采用的哲学观的计算模型。在OOP中,对象作为计算主体,拥有自己的名称,状态以及接受外界消息的接口。在对象模型中,产生新对象,旧对象销毁,接受消息,响应消息就构成OOP计算模型的根本。

1.3 基本特征

面向对象的三个基本特征是:封装、继承、多态。

²        封装

封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。

²        继承(扩展)

面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

继承概念的实现方式有三类:实现继承、接口继承和可视继承。

       实现继承是指使用基类的属性和方法而无需额外编码的能力;

       接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;

       可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。

在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person类。但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。

抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字 Interface 而不是 Class

OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。

²        多态

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

实现多态,有二种方式,覆盖,重载。

覆盖,是指子类重新定义父类的虚函数的做法。

重载,是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。

那么,多态的作用是什么呢?我们知道,封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类);它们的目的都是为了——代码重用。而多态则是为了实现另一个目的——接口重用!多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。

二、为什么要面向对象

世界上的万事万物都能看作是属于不同类别的个体,或称之为对象,这些对象之间彼此存在着直接或间接的关联。面向对象的设计思想恰好也是以类、类和类之间的关系作为分析问题的基础点,因此,使用面向对象的分析和设计能够非常自然地表示和系统相关的各个对象并表达这些对象之间的联系。通过面向对象的分析和设计,能够使得原本复杂的设计问题变得简单而有条理。面向对象语言作为面向对象分析和设计的最终描述性语言,使得面向对象分析和设计的结果能够非常方便地编译成计算机能识别的二进制代码或中间语言。由此可见,面向对象语言是一种具体形式,不同的语言有着相同的中心思想,然而却有着不同的表现形式。在学习面向对象语言的过程中,我们不应该把重点放在不同语言的各种表现形式上,而应该更多地了解面向对象语言是怎么支持面向对象的分析和设计的,进而将面向对象思想用于解决系统设计问题。

2.1面向对象的优点:

       符合人们习惯的思维方法:便于分解大型的复杂多变的问题。由于对象对应于现实世界中的实体,因而可以很自然地按照现实世界中处理实体的方法来处理对象,软件开发者可以很方便地与问题提出者进行沟通和交流。

       易于软件的维护和功能的增减:对象的封装性及对象之间的松散组合,都给软件的修改和维护带来了方便。

       可重用性好:重复使用一个类(类是对象的定义,对象是类的实例化),可以比较方便地构造出软件系统,加上继承的方式,极大地提高了软件开发的效率。

 

三、如何面向对象

对象的设计不限于写程序的时期,它出现在一系列阶段。不要期望设计立刻尽善尽美,循序渐进,对对象做什么和它应当像什么的理解是随着时间的的推移而产生的。这个观点也适用于不同类型程序的设计。特殊类型程序的模式是通过对问题的一次又一次地求解而形成的。

3.1对象设计的五个阶段

1.       对象发现:这个阶段出现在程序的最初分析期间。可以通过寻找外部因素与界线,系统中的元素副本和最小概念单元而发现对象。如果已经有了一组类库,某些对象是很明显的。类之间的共同性(暗示积累和继承类),可以立刻出现或在设计过程的后期出现。 

2.       对象组合 :我们在建立对象时会发现需要一些新成员,这些新成员在对象发现时期末出现过。对象的这种内部需要可能要用新类去支持它。 

3.       系统构造:对对象的更多要求可能出现在以后阶段。随着不断的学习,我们会改进我们的对象。与系统中其他对象通讯和互相连接的需要,可能改变已有的类或添加新类。 

4.       系统扩展:当我们向系统增添新的特性时,可能发现我们先前的设计不容易支持系统扩充。这时,我们可以重新构造部分系统,并很可能要增加新类。 

5.        对象重用:对于类来说这才是真正的重点,将某个将要被复用的类不断的放入全新的环境中进行使用从而可以发现该类的设计缺陷,进而可以使用重构的手段对该类进行持续性的改进。

3.2对象开发原则

1.       让特殊问题生成一个类,然后在解其他问题时让这个类生长和成熟。

2.       记住,发现所需要的类,是设计系统的主要内容。如果已经有了那些类,这个项目就不困难了。

3.       不要强迫自己在一开始就知道每一件事情,应当不断地学习。

4.       开始编程,让一部分能够运行,这样可以证明或反驳已做出的设计。不要害怕出现面向过程语言风格的细面条式的代码——类分割可以控制他们。坏的类不会破坏好的类。

5.       尽量保持简单。具有明显用途的不太清楚的对象比很复杂的接口好。我们总能够从小的和简单的类开始,当我们对它有了较好的理解再扩展这个类接口,但不可能简化已存在的类接口。

3.3对象设计流程

1.       行为分析:分析并列举完整的应用场景中出现的行为。

2.       行为抽象:不要对行为的分析仅仅局限于行为本身,而需要对行为进行抽象的总结识别行为的本质。对于相似的行为构建统一的行为模型。

3.       分析/建立行为宿主:行为宿主是一个或多个行为的集合(在JAVA中往往以Interface形式体现),对行为宿主的分析过程实际上是对已有的行为的分组过程。如果一个行为宿主中包含了过多的行为,请确认该宿主的设计是否存在缺陷。

4.       总结/建立行为宿主关系:以行为宿主为最小单元绘制行为宿主关系图(可能是虚拟的),图形往往是树状结构。

5.       行为的拆解:如果某个行为较为复杂,需要对此行为进行拆解,拆分为多个较小的行为并重新回到第一步进行迭代动作。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值