17xie > Java语言实用教程 > 1.2 程序设计方法
背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-2602.html    注册17xie 一起来写书 实现您的出书梦想!

1.2  程序设计方法

20世纪60年代,由于程序代码不存在基本的组成结构,无条件地跳转命令使程序流程异常混乱,导致大型软件开发进度被严重拖延,开发成本大大超出预算,且最终产品不可靠,维护起来异常困难。种种因素使人们意识到软件开发是一项非常复杂的工程,需要采取规范化的程序设计方法或者说是程序设计规范(Paradigm)来进行代码的编写。

目前程序设计的方法主要有两类:采用结构化的程序设计思想和面向对象的程序设计思想。

1.2.1  结构化的程序设计

按照结构化方法编写程序,比用非结构化编程方法编写的程序结构更清楚,更容易调试和测试及修改。它将程序划分为3种基本结构,即顺序结构、选择结构和循环结构。每种结构支持的程序流程不同。

1.顺序结构

当需要按照语句的先后次序从上到下一次执行每条语句时,采用顺序结构。

顺序程序结构是最简单的一种结构,在流程图中表示为任务框一个个地串行连接。在计算机执行程序时表现为从头至尾严格按照次序逐条语句地执行,并且每一条语句均被执行一遍。顺序程序流程图,如图1-2所示。图中的ABC分别代表的可以是一条语句,也可以是一段程序。

1-2  顺序结构流程图

2.选择结构

当需要根据某个条件执行程序的不同部分时,采用选择结构。

选择结构程序流程图都包含一个判断框,这个判断框具有一个入口和两个出口,从而形成程序的两个分支,如图1-3所示。在程序运行时究竟是执行B还是C,要由判断框内的条件判为“是”或“否”来决定。语句A执行完之后通常产生一个条件码cc,当条件cc判断为“是”(YesY)时进入B分支;当条件cc判断为“否”(NoN)时进入C分支。由此可见,只有一个分支中的程序被执行了一遍,而另一分支中的程序没有得到执行。在实际编程时,不仅会用到上述的二分支程序结构,还会用到分支数多于两个的多分支程序结构。不过,多分支结构可以看作由二分支结构嵌套而成,即分支中又包含分支。

1-3  选择结构流程图

3.循环结构

当需要根据某个条件是否成立决定是否反复执行某段程序时,采用循环结构。

一个循环程序结构包含循环初态设置、循环体和循环控制三部分。循环初态设置就是在循环开始时,指定或定义一个循环变量cc(可以是循环次数计数器、地址指针等),并且给它设置一个初始值。循环体就是需要重复执行的程序段。循环控制就是根据循环结束条件,判断是否结束循环。在循环程序中必须给出循环结束条件,否则就成为“死循环”。

1-4所示为循环程序流程图。该图有两种画法。在图1-4a)中循环体至少执行一次,这是因为先执行循环体,后判断循环结束条件。而在图1-4b)中,先判断结束条件,再执行循环体,如果一开始就满足结束条件,则循环体将一次也不被执行。在实际编程时,不仅会用到上述的单一循环程序结构,还会用到多重循环程序结构。多重循环结构可以看作是由单一循环结构嵌套而成,即循环体中又包含有一个或多个循环。

1-4  循环结构流程图

1.2.2  面向对象的概念

面向结构化的编程方法,其编程的主要思路专注于算法的实现。明显的特点就是数据与程序的分开,数据是静止的东西,不会自行变化,必须通过过程操作来改变数据,因此函数调用在面向过程编程中被大量使用。

然而随着计算机软件的发展,程序越做越大,后期维护的工作就越发艰难,经常出现因大型软件的程序结构不清楚而无法对软件进行修改的情况。结构化方法已经无法承担快速高效开发复杂软件系统的重任,于20世纪80年代逐渐成熟的面向对象的设计方法,使软件开发者对软件的分析、设计和编程等方面都有了一种全新的认识。由于“对象”概念的引入,更大程度上让计算机语言结构与人类的思维方式保持一致,简单而清晰。目前,面向对象的程序设计方法已成为软件开发者的第一选择。

面向对象其基本思想是使用对象、类、继承、封装、消息等基本概念来进行程序设计。从现实世界中客观存在的事物(即对象)出发来构造软件系统,并且在系统构造中尽可能运用人类的自然思维方式。开发一个软件是为了解决某些问题,这些问题所涉及的业务范围称作该软件的问题域。面向对象的应用领域不仅仅是软件,还有计算机体系结构和人工智能等方面。

1.类的基本概念

把众多的事物归纳、划分成一些类是人类在认识客观世界时经常采用的思维方法。分类的原则是抽象。类(Class)是具有相同属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描述。类可以有多个抽象层次,较高抽象层次的类称为“一般类(父类或基类)”,较低抽象层次的类称为“特殊类(或称子类或派生类)”。在Java语言中,通常称一般类为父类(Super Class),特殊类为子类(Sub Class)。例如“汽车”可以抽象成一个父类,在其中又可以划分出“轿车”、“卡车”、“客车”等子类。

在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类。

2.对象的基本概念

对象(Object)是系统中用来描述客观事物的一个实体,是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用。是一组属性和有权对这些属性进行操作的一组服务的封装体。客观世界便是由对象和对象之间的联系组成的。

对象三要素:对象标识、属性和服务

对象标识(Object identifier)是对象的名字,供系统内部唯一地表示对象。定义或使用对象时均应指定其标示。

对象属性(Object attribute)也有也称为状态或数据,用来描述对象的静态特征。

对象服务(Object service)也有称为操作、行为或方法,用来描述对象的动态特征。

3.消息

消息(Message)是向对象发出的服务请求,它应该包含下述信息:提供服务的对象标识、服务标识、输入信息和回答信息。对象与传统的数据有本质的区别,它不是被动地等待外界对其施加的操作,相反是进行处理的主体,必须发送消息请求对象执行它的某个操作或处理它的某个私有数据,而不能从外界直接对对象的私有数据进行操作。

1.2.3  面向对象的特征

1.封装性

面向对象的第一个原则是把数据和对该数据的操作都封装在一个类中。就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义:

l         把对象的全部属性和全部服务结合在一起,形成一个不可分割的整体。

l         信息隐蔽,即尽可能隐蔽对象的内部细节,对外形成一个边界(或者说形成一道屏障),只保留有限的对外接口使之与外部发生联系。

封装的原则在软件上的反映是:要求使对象以外的部分不能随意存取对象的内部属性,从而有效的避免了外部错误对它的“交叉感染”,使软件错误能够局部化,大大减少查错和排错的难度。

2.继承性

子类的对象拥有其父类的全部属性与服务,称作特殊类对一般类的继承。例如,轮船、客轮;人、大人。一个类可以是多个父类的子类,它从多个父类中继承了属性与服务,这称为多继承。例如,客轮是轮船和客运工具的子类。在面向对象的设计方法中,继承是提高软件开发效率的重要原因之一。

3.多态性

对象的多态性是指在父类中定义的属性或服务被子类继承之后,可以具有不同的数据类型或表现出不同的行为。这使得同一个属性或服务在父类及其各个子类中具有不同的语义。例如:“几何图形”的“绘图”方法,“椭圆”和“多边形”都是“几何图”的子类,但是其“绘图”方法功能不同。多态性不仅提高了软件开发的灵活性,进一步减少了信息冗余,而且显著提高了软件的可重用性和可扩充性。

 


字数:3373    最后更新:1年以前 [10-11 17:30]屈辰晨 修改
本页编辑者:屈辰晨  
[前一页]:1.1 程序与算法  [后一页]:1.3 Java语言概述
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号