基于面向对象的编程思想与年鉴框架设计的初步对比

Original URL: http://lib.sdsqw.cn/bin/mse.exe?seachword=&K=fa01&A=11&rec=67&run=13

李瑞祥
提 要 近年来, 随着计算机技术的迅速发展,计算机技术在各行各业得到了广泛的应用。
各级各地情网以及史志资料库的相继建立和不断充实,使得史志的编纂和查询工作实现了前
所未有的便捷。 自1972年Smalltalk语言诞生以来,一种面向对象的编程方式以其良好的封
装性、继承性和多态性在计算机程序设计领域得到了广泛的应用并产生了深远影响。本文通
过对面向对象的编程思想与年鉴框架设计进行初步对比,试图发现两者之间存在的共同之处,
为以后更广范围、更深层次的对比和应用提供参考。
关键词:面向对象 年鉴框架 初步对比
1.前言
面向对象(Object Oriented, OO)是当前计算机界关心的重点,它是90年代软件开发方法
的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据
库系统、 交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工
智能等领域。
面向对象的程序的最根本的目的就是使程序员能最好地理解和管理庞大而复杂的程序,
它能在结构化程序设计的基础上完成进一步的抽象。它是在充分吸收结构化程序设计优点的
基础上,引进了一些新的、强有力的概念,从而开创了程序设计的新天地。
年鉴是以全面、 系统、准确地记述上年度事物运动、发展状况为主要内容的资料性工具
书。汇辑一年内的重要时事、文献和统计资料,按年度连续出版的工具书。它博采众长,集
辞典、手册、年表、图录、书目、索引、文摘、表谱、统计资料、指南、便览于一身,具有
资料权威、反应及时、连续出版、功能齐全的特点,属信息密集型工具书。
年鉴框架指的是它本身的基本结构, 即承载年鉴内容的特定的存在形式。任何年鉴,都
必须精心研究和制定一个好的框架结构,因为它对丰富年鉴的信息量,发挥年鉴的功能和作
用将直接产生至关重要的影响。年鉴框架的作用有三点:一是框定全书的内容记述范围和选
题选材方向;二是确定资料的归属和记述层次;三是勾画全书的总体面貌,以便编纂者据此
进行工作分工和对全书实行目标管理。框架是年鉴编纂工作的蓝图和工艺规范。
下面就面向对象的编程方式的发展情况、 年鉴框架的规范有关现状以及两者之间的可比
性进行阐述。
2.面向对象的编程思想
2.1面向过程的编程思想
传统的结构化程序设计方法是荷兰学者Dijkstra在20世纪70年代提出的, 他把面向机器
代码的程序抽象为三种基本程序结构:顺序结构、选择结构和重复结构,并提出了一系列的
设计原则,如自下而上、逐步求精、板块化编程等。根据这些原则,按照程序所需实现的功
能,自上而下层层展开。
2.2面向对象的程序设计
面向对象程序设计的雏形, 早在1960年的Simula语言中即可发现,当时的程序设计领域
正面临着一种危机:在软硬件环境逐渐复杂的情况下,软件如何得到良好的维护?面向对象
程序设计在某种程度上通过强调可重复性解决了这一问题。 20世纪70年代的Smalltalk语言
在面向对象方面堪称经典——以至于30年后的今天依然将这一语言视为面向对象语言的基础。
面向对象程序设计可以被视作一种在程序中包含各种独立而又互相调用的单位和对象的
思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者
直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、
处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,或者说是
负有责任的角色。目前已经被证实的是,面向对象程序设计推广了程序的灵活性和可维护性,
并且在大型项目设计中广为应用。
2.3概念
2.3.1对象
对象是人们要进行研究的任何事物, 从最简单的整数到复杂的飞机等均可看作对象,它
不仅能表示具体的事物,还能表示抽象的规则、计划或事件。
2.3.2对象的状态和行为
对象具有状态,一个对象用数据值来描述它的状态。
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中
2.3.3 类
具有相同特性(数据元素) 和行为(功能)的对象的抽象就是类。因此,对象的抽象是
类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型。
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。
2.3.4类的结构
在客观世界中有若干类, 这些类之间有一定的结构关系。通常有两种主要的结构关系,
即一般--具体结构关系,整体--部分结构关系。
①一般--具体结构称为分类结构,也可以说是“或”关系,或者是“is a”关系。
②整体--部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是“has a”
关系。
2.3.5消息和方法
对象之间进行通信的结构叫做消息。 在对象的操作中,当一个消息发送给某个对象时,
消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括说明接受消息的对象名、
发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识
该消息的对象所知道的变量名,或者是所有对象都知道的全局变量名。
类中操作的实现过程叫做方法,一个方法有方法名、返回值、参数、方法体。
2.4 特性
2.4.1 封装性
按照面向对象编程的原定义, 所谓的封装性是指隐藏类为支持和实施抽象所做的内部工
作的过程。简单地说,对于使用这些类的编程者来说,只需要知道类所能完成的功能,而不
需要知道这些功能是如何实现的。
2.4.2继承性
类支持层次机制,因此我们可以借用可重用性部件很容易地从一个或多个已有的类出发,
来生产各种更符合我们要求的新类。继承机制所带来的最大优势在于使软件非常容易于扩充,
这既降低了开发费用又减少了编程过程中错误的出现机会,进而提高了编程效率。
2.4.3多态性
多态是指两个或多个属于不同类的对象, 对于同一个消息(方法调用)作出不同响应的
方式。
多态性原意是指一种具有多种形态的事物, 这里是指同一消息为不同的对象所接受时,
可导致不同的行为。多态性支持“同一接口,多种方法”,使高层代码(算法)只写一次而
在低层可多次复用,面向对象的多种多态性方法的使用,如动态绑定(dynamic binding)、
重载(overload)等,提高了程序设计的灵活性和效率。
3. 年鉴框架设计
3.1框架的基本内容
纵观目前出版的地方综合性年鉴,框架设计一般包含以下几个基本内容:
3.1.1特载、专文
主要刊登中央负责同志视察本地区的活动报道和重要讲话, 本地党政负责同志有关全
局的指导性的报告、讲话和文章,以及专家、企业家的重要论文等。
3.1.2概况(或称概貌、综述)
一般而言, 它包括这样一些主要内容:地方的自然地理、经济地理、人口、民族、行
政区划沿革,本地区的战略地位和一年来经济、社会发展的概述,以及某些独特的建设事业
等。
3.1.3大事记
它简要记载本地区一年来政治、 经济、文化、社会等各个领域发生的重大事件及自然
方面所发生的某些特异现象。
3.1.4百科叙述
一般宜按行业、 事业进行科学分类,即将政治、经济、文化、社会诸方面分成若干类
目(部类)来进行记述。
3.1.5地、州、市、县概况
在省级综合性年鉴中, 大都设有这个栏目,主要记载省辖地、州、市、县一年来在政
治、经济、文化、社会诸方面发展的基本情况和重大事件。
3.1.6统计资料
有的年鉴将其分别辑人有关内容, 有的年鉴则为此开辟专栏,这两种方法各有所长,在
设计框架时可视情而定。
3.1.7人物
人物可分为本年内新闻人物、逝世人物、著名人物等。
3.1.8企事业单位名录
企事业单位名录在地方综合性年鉴中有两种做法: 一种是将本地区所有重要企事业单位
列成一览表,这样具有一定的检索查阅价值;一种是将收费的企事业单位写成简介,除具有
广告宣传性质外,且有一定的存史价值。
3.1.9法规、政策选编
大部分地方综合性年鉴设置了这一栏目, 主要收录本年度内地方政府、人大常委会所颁
布的涉及各行各业的一些重要法规及带有全局性的重大政策等。
3.1.10附录
有的地方综合性年鉴还设有附录, 选辑一些与本年鉴的性质有密切关系,且能反映本
年鉴特色的有关资料,对扩大信息量,增强年鉴的资料价值很有益处。
3.2设计原则
3.2.1稳定性原则
年鉴是逐年陆续出版的,具有很强的承继性,因此框架一经确定,便应保持其基本稳定,
不能随意变动。
3.2.2全面性原则
框架设计之所以要遵循“全面” 的原则,主要是由年鉴的综合性决定时,同时也是读者
对工具书的要求。
3.2.3系统性原则
客观事物都是相互联系, 相互影响的。年鉴的框架设计必须立足整体,在注重各部分内
容之间有机联系的前提下突出重点和特点。
3.3框架设计要求
3.3.1份量平衡
年鉴各个部类的内容、 份量要保持基本平衡,但又不能平均。其所涉及的各个方面和
层次,各占多少比重,在框架设计上都必须安排得当。
3.3.2.归属准确
在框架设计时, 要根据事物的性质确定各自的归属,尽量使部类、分目、条目的归属
恰当、准确。
3.3.3.层次清楚
年鉴的分类要求做到层次清楚,尽量使体例保持一致。
3.4方法和步骤
3.4.1明确记述范围
作为年鉴框架的设计者, 首先应该明确本年鉴属哪种类型,是综合性年鉴还是专业性年
鉴?综合性年鉴又有国际、全国、地方之分;专业性年鉴又有专科、行业、部门等不同类型。
只有明确自身的归属,才能确认自身所应载内容的范围,合理地进行编排,形成自己应有的
特点。如果是地方综合性年鉴,就要抓住它的“地方”,“综合”属性,记叙百科,突出其
地方特点;如果是专业性年鉴,那么就要抓住它的“专业”性,记叙它的各个方面,突出其
专业特点。
3.4.2确定编排方法
目前我国出版的年鉴绝大多数采用分类编排的方法, 也有少数采用主题编排方法和分类
主题一体化编排方法的。根据国内大多数年鉴读者习惯来看,我认为目前仍然采用分类法较
为适宜。所谓“分类法”,就是将条目、文献等信息资料依据知识范畴、研究对象、学科属
性或部门分工等为基础,按其内在属性或统一逻辑规律分类归集,加以编排。分类法能突出
体现信息资料的从属性,便于按类别查考,且能比较直接、全面地了解同类资料。确定这种
编排方法后,在进行设计构想时,必须注意不能违背它的基本要素,前面已有详述,此处不
再重复。
3.4.3设立分类体系
设立分类体系, 就是将记述对象逐层分解,最后形成一个有机的年鉴载体结构。所以有
人说:“设立分类体系实际上就是建立框架本身”,这是精当之言。
1.区分大类。所谓“区分大类”,是指根据分类法的原则按内容的基本属性进行区分,
确定年鉴主体的构成,相当于整个框架的“立柱”。这里须注意几个问题:
(1)是确定好基本大类。就综合性年鉴而言,即指主体部分——“百科叙述”小的大类区
分,一般将其分为政治、军事,法制、农业、工业等类目。而专业性年鉴则不同,根据本专
业的内涵分成几个大的事项。但是它们有一点是共同的,就是基本大类必须能够全面包容年
鉴特定范围内的全部信息资料。
(2)是排列好类目(部类)的顺序。类目的排列,应遵循从全面到具体,从综合到专项,从
重点到一般的原则,具有地方特点的行业应放在适当的显著位置。
(3)是对其中某些级别较低而又有必要突出反映的事物,可适当提级升格。但此种方法必
须掌握得当,谨慎用之,否则便会造成体例混乱。
(4)是类目的标题必须做到准确、科学,既能揭示本类目下各事物共有的本质属性,又要
文字简短精炼。
2.细分小类。基本大类确定后,还要根据资料的来源、具体内容、年鉴自身的特点及需
要,进一步逐层分解,从析出分目直至落实年鉴框架结构的基本单元——条目。在细分小类
的过程中,必须注意处理好同级类、同位类之间的关系。各级层次之间的从属关系必须明确,
不可混淆。层次的划分不宜过多过细,一般分为三级,最多不超过四级,否则,人为地将事
物分割太细,有损事物的整体性,也给读者查询资料带来不便。
3.建立分类体系。分类完毕后,为了使框架结构体系的形态更为直观,可以采用分类体
系表的形式,揭示类与类之间、级与级之间的各种关系。同时,要协调安排好各部类(类目)
的内容及比例。年鉴框架结构的形态应反映出各组成部分之间的均衡关系,即比例适当,重
点突出。相对而言,年鉴中的主体部分是“百科叙述”,在记述内容和比重上应加以突出。
其他部类的内容和比例安排也要适当,避免畸重畸轻的现象。
4. 面向对象的编程思想与年鉴框架设计的初步对比
4.1原则对比
设计年鉴框架, 在内容的安排上要坚持三条原则:稳定性原则,全面性原则,系统性原
则;
面向对象的编程体现出三个特性:封装性,继承性,多态性。
4.1.1.稳定性原则
年鉴是逐年陆续出版的, 具有很强的承继性,因此框架一经确定,便应保持其基本稳
定,不能随意变动。年鉴的框架基本稳定了以后,就可以作为一个固定模板,进而封装起来,
直接调用就可以了,它如面向对象编程中的封装性有着相似性。
4.1.2全面性原则
年鉴的综合性决定框架设计要遵循“全面” 的原则。一旦框架形成,形成较为固定的
模板后,其全面性可以通过继承派生等问题进行补充,已实现全面性的原则。
4.1.3.系统性原则
年鉴的框架设计必须立足整体, 在注重各部分内容之间有机联系的前提下突出重点和特
点。在面向对象编程思想中的多态性,以其对于同一个消息作出不同响应的方式,既能实现
各部分之间的联系,又能有效地突出各部分的特点。
4.2 分类体系对比
4.2.1区分大类
所谓“区分大类” ,是指根据分类法的原则按内容的基本属性进行区分,确定年鉴主体
的构成,相当于整个框架的“立柱”。在面向对象编程中,具有相同特性(数据元素)和行
为(功能)的对象的抽象就是类。我们完全抽象出特载、专文类,概况(概貌、综述)类,大
事记类,百科叙述类,地、州、市、县概况类,统计资料类,人物类,企事业单位名录类,
法规、政策选编类,附录类等。
4.2.2.细分小类
基本大类确定后, 还要根据资料的来源、具体内容、年鉴自身的特点及需要,进一步逐
层分解,从析出分目直至落实年鉴框架结构的基本单元——条目。在抽象并定义大类的基础
上,可以根据具体需要,初步派生继承出新类,直至基本单元。
4.2.3.建立分类体系
分类完毕后, 为了使框架结构体系的形态更为直观,可以采用分类体系表的形式,揭示
类与类之间、级与级之间的各种关系。抽象定义的类中的封装性可以实现形态的直观,而类
的多态性可以揭示类与类、派生类与派生类之间的各种关系。
5.实例对比
这里以山东年鉴2011为例,将面向对象编程思想作一简单对比。
年鉴里面的市县概括。
这里抽象建立一个市县类SX。
Class SX
{A1(党政领导);
A2(政区人口);
A3(经济概括);
A4(农业);
A5(工业建筑业);
A6(建设环保);

An(社会生活);
};
5.1济南市
对于济南市可以生成济南市县类JN
CLASS JN:SX
{
B1(为民办12件实事);
B2(完成援建帮扶任务);

Bn(国家创新药物孵化基地落户济南);
};
这样生成的JN就可以理解为:
{ SX;
B1(为民办12件实事);
B2(完成援建帮扶任务);

Bn(国家创新药物孵化基地落户济南);
};

{ A1(党政领导);
A2(政区人口);
A3(经济概括);
A4(农业);
A5(工业建筑业);
A6(建设环保);

An(社会生活);
B1(为民办12件实事);
B2(完成援建帮扶任务);

Bn(国家创新药物孵化基地落户济南);
}
对于济南市2011年的概括就可以用对象JN2011

JN JN2011;输入JN2011中的A1,A2…,An,B1,B2…Bn即可;
对于济南市的历下区可以用对象LX2011
即JN LX2011;输入JN2011中的A1,A2…,An,B1,B2…Bn即可;
这里的输入JN2011中的B1,B2…Bn-1是空,Bn可以赋值。
5.2青岛市
对于青岛市可以生成青岛市县类QD
CLASS QD:SX
{
C1(“文化青岛”建设启动);
C2(帆船运动蓬勃发展);

Cn(实施国家基本药物制度全覆盖);
};
这样生成的JN就可以理解为:
{ SX;
C1(“文化青岛”建设启动);
C2(帆船运动蓬勃发展);

Cn(实施国家基本药物制度全覆盖);
};

{ A1(党政领导);
A2(政区人口);
A3(经济概括);
A4(农业);
A5(工业建筑业);
A6(建设环保);

An(社会生活);
C1(“文化青岛”建设启动);
C2(帆船运动蓬勃发展);

Cn(实施国家基本药物制度全覆盖);

}
对于青岛市2011年的概括就可以用对象QD2011

QD QD2011;输入QD 2011中的A1,A2…,An,C1,C2…Cn即可;
对于青岛市的四方区可以用对象SF2011
即QD SF2011;输入SF2011中的A1,A2…,An,B1,B2…Bn即可;
这里的输入SF2011中的C1,C2…Cn是空。
5.3原则对比
从上例中可以看出, 类SX是一个基本的市县的框架,这个框架被我们抽象并定义。封装
为一个具体类,可以直接调用。也就是框架设计时的框架基本稳定性得到满足。
从上例中可以看出, 由类SX派生出来的类JN,类QD分别可以满足济南市和青岛市的概括
要求,也就是说框架设计时的全面性原则得到满足。根据派生可以满足不同市县的概括要求。
从上例中可以看出, 由类SX派生出来的类JN,类QD,它们的共同部分都是类SX,即函数
命名方式相同,从而可以形成一个相对稳定的系统,也就是框架设计的系统性能够得到满足。
5.4 分类对比
分类体系对比中的区分大类,细分小类,建立分类体系。
类SX作为市县概括的大类, 将各个市县的共同情况进行抽象,能够满足各市县的基本情
况,同时又能和人物类、大事记类有效地分开,做到了区分大类的目的。
类JN, 类QD作为济南市和青岛市的类,它们既继承了市县类的共同性的一面,又突出了
自己市县的独特性的一面,可以说是细分的类。
鉴于类JN, 类QD以及生成的对象JN2011,对象LX2011,对象QD2011和对象SF2011中,他
们共同继承类SX的函数A1…An部分都是一致的,这就很好地维护了系统的稳定性,形成了比
较健全的分类体系。
5.5综合使用
5.5.1横向对比
以济南市为例, 按照上述方式方法,我们可以利用类JN派生出济南市以及济南所属县市
区2011年的对象。对于济南市、历下区、市中区、槐荫区、天桥区…商河县等地,可以派生
出对象JN2011,LX2011、JNSZ2011、HY2011、TQ2011…SH2011。
对于各个地方的相对项可以进行相互对比。
如济南市、历下区的经济概括来说,JN2011.A2>LX2011.A2。
还可以利用各组的数据进行统计。
即JN2011.A2=LX2011.A2+ JNSZ2011.A2+ HY2011.A2+ TQ2011+…SH2011.A2。
5.5.2纵向对比
仍以济南市为例, 按照上述方式方法,我们可以利用类JN派生出济南市2009年、2010年
和2011年的对象。即JN2009、JN2010、JN2011。
对于济南市的各项指标可以进行对比。
JN2009.A2