购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 程序设计逻辑的简介

每位程序设计人员就像一位艺术家一样,会有不同的设计逻辑,不过由于计算机是很严谨的高科技工具,不能像人脑一样天马行空,对于一个好的程序设计人员而言,还是必须遵循某些规范,符合程序设计的逻辑概念,这样才能让程序代码具备可读性与日后的可维护性。就像早期的结构化设计,时至今日已将传统程序设计的逻辑转化成面向对象的设计逻辑,这都是程序设计人员在编写程序时要遵循的大方向。

1.3.1 结构化程序设计

在传统程序设计的方法中,主要有“自上而下法”与“自下而上法”两种。所谓“自下而上法”,是指程序设计人员先编写整个程序需求中最容易的部分,再逐步展开来完成整个程序。“自上而下法”则是将整个程序需求从上到下、从大到小逐步分解成较小的单元(或称为模块(Module)),这样使得程序设计人员可针对各个模块分别开发,不但减轻了设计人员的负担,而且程序的可读性更高,对于日后维护也容易许多。

结构化程序设计的核心思想是“自上而下的设计”与“模块化的设计”。例如,在PASCAL语言中,这些模块被称为过程(Procedure),在C语言中被称为函数(Function)。通常“结构化程序设计”具备三种控制流程,而对于一个结构化程序,无论其结构如何复杂,都可使用这三种基本的控制流程来编写,如表1-3所示。

表1-3

1.3.2 面向对象程序设计

面向对象程序设计(Object-Oriented Programming,OOP)的主要设计思想是将存在于日常生活中随处可见的对象(Object)概念应用在软件开发模式(Software Development Model)中。面向对象程序设计让我们在程序设计中能以一种更生活化、可读性更高的设计思路来进行程序的开发和设计,并且所开发出来的程序更容易扩充、修改和维护。

在现实生活中充满了形形色色的物体,每个物体都可视为一种对象。我们可以通过对象的外部行为(Behavior)和内部状态(State)来进行详细的描述。外部行为代表此对象对外所显示出来的运行方式,内部状态则代表对象内部各种特征的当前状况,如图1-13所示。

图1-13

例如,我们今天想要自己组装一台计算机,而目前我们人在外地,因为配件不足,找遍了当地所有的计算机配件公司仍找不到所需要的配件,假如我们必须到北京的中关村来寻找所需要的配件。也就是说,一切的工作必须一步一步按照自己的计划分别到不同的公司寻找我们所需的配件。试想,即使节省了不少购买配件的成本,但是时间成本的代价却相当大。

如果换一个角度,假使我们不必理会配件货源如何获得,完全交给计算机公司全权负责,那么事情便会简单许多。我们只需填好一份配置的清单,该计算机公司便会收集好所有的配件,然后寄往我们所指定的地方,至于该计算机公司如何找到货源,便不是我们所要关心的事了。我们要强调的概念便在于此,只要确立每一个配件公司是一个独立的个体,该独立个体有其特定的功能,而各项工作的完成仅需在各个独立的个体之间进行消息(Message)交换即可。

面向对象程序设计的概念就是认定每一个对象是一个独立的个体,而每个独立的个体有其特定的功能,对我们而言,无须理解这些特定功能如何实现这个目标的具体过程,只需要将需求告诉这个独立个体,如果该个体能独立完成,便直接将此任务交给它即可。面向对象程序设计的重点是强调程序的可读性(Readability)、可重复使用性(Reusability)与扩展性(Extension)。

面向对象语言本身还具备三种特性(如图1-14所示),下面逐一介绍。

图1-14

·封装

封装(Encapsulation)就是利用“类”来实现“抽象数据类型”(ADT)。类是一种用来具体描述对象状态与行为的数据类型,也可以看成一个模型或蓝图,按照这个模型或蓝图所产生或创建的实例(Instance)就称为对象。类和对象的关系如图1-15所示。

图1-15

所谓“抽象”,就是将代表事物特征的数据隐藏起来,并定义一些方法(Method)来作为操作这些数据的接口,让用户只能接触到这些方法,而无法直接使用数据,也符合信息隐藏(Information Hiding)的要求,而这种自定义的数据类型就称为“抽象数据类型”。而传统程序设计的概念则必须掌握所有的来龙去脉,就程序开发的时效性而言,传统程序设计便要大打折扣。

·继承

继承(Inheritance)是面向对象程序设计语言中最强大的功能之一,因为它允许程序代码的重复使用(Code Reusability),同时可以表达树结构中父代与子代的遗传现象。继承类似于现实生活中的遗传,允许我们定义一个新的类来继承现有的类(Class),进而使用或修改继承而来的方法(Method),并可在子类(SubClass)中加入新的成员数据与成员方法。在继承关系中,可以把它单纯视为一种复制(Copy)的操作。换句话说,当程序开发人员以继承机制声明新增的类时,它会先将所引用的父类中的所有成员完整地写入新增的类中。类继承关系的示意图如图1-16所示。

图1-16

·多态

多态(Polymorphism)是面向对象程序设计的重要特性,也被称为“同名异式”。多态的功能可让软件在开发和维护时实现充分的扩展性。多态,按照英文单词字面的解释就是一样东西同时具有多种不同的形态。在面向对象程序设计语言中,多态的定义简单来说是利用类的继承关系先创建一个基类对象。用户通过对象的继承声明将此对象向下继承为派生类对象,进而控制所有派生类的“同名异式”成员方法。

简单地说,多态最直接的定义就是让具有继承关系的不同对象可以调用相同名称的成员方法,并产生不同的运行或计算结果。

1.3.3 在面向对象程序设计中的其他关键术语

·对象

对象(Object)可以是抽象的概念或一个具体的东西,包括数据(Data)及其相应的操作或运算(Operation),或称为方法(Method)。对象具有状态(State)、行为(Behavior)与标识(Identity)。

每一个对象均有其相应的属性(Attribute)及属性值(Attribute Value)。例如,有一个对象称为学生,“开学”是一条消息,可传送给这个对象。而学生有学号、姓名、出生年月日、住址、电话等属性,当前的属性值便是其状态。学生对象的操作或运算行为则有注册、选修、转系、毕业等,学号则是学生对象的唯一识别编号(对象标识,OID)。

·类

类(Class)是具有相同结构和行为的对象集合,是许多对象共同特征的描述或对象的抽象化。例如,小明与小华都属于人这个类,他们都有出生年月日、血型、身高、体重等类的属性。类中的一个对象有时就称为该类的一个实例(Instance)。

·属性

属性(Attribute)用来描述对象的基本特征及其所属的性质,例如一个人的属性可能会包括姓名、住址、年龄、出生年月日等。

·方法

方法(Method)是对象的动作与行为,我们在此以人为例,不同的职业,其工作内容就会有所不同,例如学生的主要工作为学习,而老师的主要工作则为教书。 1abcj2dhdsGf7rnZsQfFovcHZK5ln9VAM/c/sUeY25x4/lneu1NOiap3Ehiug0je

点击中间区域
呼出菜单
上一章
目录
下一章
×