`
lgd_java2eye
  • 浏览: 189628 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

面向对象的程序设计

阅读更多

面向对象的程序设计

一、基本概念

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

 

0
0
分享到:
评论

相关推荐

    面向对象程序设计—C++语言描述PDF

    《面向对象程序设计:C++语言描述(原书第2版)》内容丰富,结构合理,写作风格严谨,深刻地论述了c++语言的面向对象编程的各种技术,主要内容包括:面向对象编程方法、c++语言的各种特性、stl、c++输入/输出流、mfc等。...

    《C#面向对象程序设计》源代码(CS)

    《C#面向对象程序设计》源代码。本书以面向对象的软件工程思想为主线,细致深入地讲解了C#语言面向对象程序设计的方法和技巧,内容涵盖面向对象的基本概念、基于接口的设计、泛型程序设计方法、Windows和Web应用开发...

    面向对象程序设计—图书管理系统设计.pdf

    "面向对象程序设计—图书管理系统设计" 面向对象程序设计是当前软件开发的主流技术之一,其应用范围非常广泛,涵盖了各个行业和领域。图书管理系统是图书馆中的一种重要管理系统,它负责管理图书的存储、借阅、归还...

    C++面向对象程序设计课后答案

    面向对象程序设计将数据和操作封装在一起,程序是由一个个对象组成的,对象之间通过接口进行通信,能够较好地支持程序代码的复用。 2.面向对象程序设计语言有四个特征: ⑴ 抽象性 ---- 许多实体的共性产生类。 ⑵ ...

    上海交大C面向对象程序设计(全25集)

    资源名称:上海交大C 面向对象程序设计(全25集)资源目录:【】上海交大C 面向对象程序设计(01-05集)【】上海交大C 面向对象程序设计(06-10集)【】上海交大C 面向对象程序设计(11-15集)【】上海交大C 面向对象程序...

    C++面向对象程序设计 经典例题 附练习题

    本资料包“C++面向对象程序设计 经典例题 附练习题”显然是为了帮助学生深入理解C++的面向对象特性,并通过实例和练习来巩固学习成果。 在C++中,面向对象的主要概念包括: 1. **类**:类是创建对象的模板或蓝图,...

    Java面向对象程序设计

    Java面向对象程序设计是计算机编程领域中的核心主题,它基于面向对象编程(OOP)理念,使得代码更具有模块化、可复用性和易于维护的特点。以下是对标题和描述中涉及的知识点的详细阐述: 1. **第1章:Java入门** -...

    c++面向对象程序设计第三版谭浩强教学大纲.pdf

    "C++面向对象程序设计第三版谭浩强教学大纲.pdf" 本资源摘要信息涵盖了C++面向对象程序设计的基本概念、数据存储、程序设计初步、函数、数组、指针、用户自定义数据类型、类和对象的程序设计等方面的知识点。 第一...

    C++面向对象程序设计教程——课件PPT

    在“C++面向对象程序设计教程——课件PPT”中,我们可以深入学习这一主题,由陈维兴和林小茶编著,清华大学出版社出版。这套教程通过一系列的PPT章节,详细讲解了C++面向对象编程的关键概念。 首先,第1章“面向...

    《面向对象程序设计JAVA语言程序设计》

    《面向对象程序设计JAVA语言程序设计》 以下是从给定的文件信息中生成的相关知识点: 1. Java 语言程序设计的基础知识点: * 面向对象程序设计的概念和特点 * Java 语言的特点和优势 * Java 语言的基本结构和组成...

    李爱华、程磊-面向对象程序设计课后答案(完整版.docx

    李爱华、程磊-面向对象程序设计课后答案(完整版) 本资源是面向对象程序设计的课后答案,涵盖了面向对象程序设计的各种知识点,包括C++语言基础、函数、数组、指针、异常处理、类和对象、构造函数、析构函数、...

    c++面向对象程序设计语言重点难点复习题及答案-整理.pdf

    面向对象程序设计语言C++重点难点复习题及答案总结 面向对象程序设计语言C++是一种功能强大且广泛应用的程序设计语言,作为一名程序员,掌握C++语言的重点难点是非常重要的。本文将对C++面向对象程序设计语言的重点...

    C++面向对象程序设计课程设计报告.pdf

    C++面向对象程序设计课程设计报告.pdf 本课程设计报告主要介绍了C++面向对象程序设计的相关知识点,并对公司人员管理系统进行了设计和实现。本报告共分为五个部分:引言、课程设计报告、系统测试、心得体会和参考...

    Java面向对象程序设计+源代码+课后习题答案)

    Java面向对象程序设计是计算机科学中的一个重要领域,它基于面向对象编程(OOP)的概念,是一种强大的编程范式。在Java中,OOP的核心概念包括类、对象、封装、继承、多态等。这本书"Java面向对象程序设计"由耿祥义和...

Global site tag (gtag.js) - Google Analytics