2.2.4 面向对象设计法
随着面向对象(OO,Object_Oriented)思想和对象模型的推广应用,面向对象的系统开发方法得到了飞速发展,成为目前重要的设计方法之一。统一建模语言(UML,Unified Modeling Language)是面向对象开发方法的有力工具。
现实世界是由无数个相互关联的事物(实体)构成的。人们在认识世界时总是首先识别每个独立的事物,然后分析事物之间的联系,从而认识事物变化的规律和过程。面向对象的方法正是遵循认识客观世界的基本方法。
面向对象方法的核心是对象。对象用于模拟客观世界中的实体。对象的概念包括对象、对象类以及类的继承等,被称为面向对象方法的三大要素。
① 对象。对象是由描述事物当前状态的静态特征和描述事物行为的动态特征组成的综合体。对象的静态特征用“属性”加以描述;动态特征由“操作”描述。
属性的取值反映了事物当前的状态,取值的改变意味着状态的变化。操作又称为方法或服务,它描述了对象执行的功能,通过完成这一功能的过程代码实现。另外,通过消息传递,操作还可以为其他对象使用。
② 类。类是一组具有相同数据结构和相同操作的对象的集合,其包括一组数据属性和在数据上的一组合法操作。类定义可以视为一个具有类似特性与共同行为的对象的模板,可用来产生对象。每个对象都是类的一个实例。
③ 继承。继承是在已存在类的基础建立新类的技术,使得新的类既能够增加新的特性,又通过继承自动获得所依赖的类的原有特性。
④ 通信和消息。对象联接通过消息驱动实现,从而构建对象之间的联系。系统分析的关键之一在于找到和描述对象及其联系。系统的运行通过对象之间的通信来驱动。如果没有对象之间的通信则无法构成系统。消息是一个对象与另一个对象的通信单元。
在信息系统分析设计中,面向对象方法就是基于构造问题域的对象模型,以对象为中心构造信息系统的方法。图2.3描述了“面向对象”方法中问题域(现实世界的业务过程)和求解域(计算机世界的信息系统)之间的映射关系,表达了“面向对象”系统开发方法的基本概念。
图2.3 面向对象方法设计模型
不同企业和组织的业务流程多种多样,但就其本质,在对象和对象的类型上有很多相似之处。因此对象就可以作为组装系统的可重用的部件。而且对象固有的封装性和信息隐藏性等机理使得对象内部的实现与外界隔离,具有较强的独立性。
30 30
2.3 数据库设计方法
用户建立自己的数据库,是为了满足自身的需求。当现有的数据处理手段和方法不能满足企业或用户的业务、管理的实际需要时,用户就需要开发新的数据处理系统。如果采用数据库作为数据管理技术,则开发的数据处理系统就是数据库系统。
2.3.1 数据库设计的定义
数据库在数据库系统中居于核心的位置。设计符合用户需要、性能优异的数据库,成为开发数据库系统的重要组成部分。
数据库设计是指:对于给定的应用环境,设计构造最优数据库结构,建立数据库及其应用系统,使之能有效存储数据,对数据进行操作和管理,以满足用户各种需求的过程。
2.3.2 数据库设计步骤
按照结构化设计方法,将开发过程看成一个生命周期,因此也称为生命周期法。其核心思想是将开发设计过程分成若干个步骤,主要包括:系统需求调查与分析、概念设计、逻辑设计、物理设计、实施与测试、运行维护等几个阶段。
(1)系统需求的调查与分析。在这一阶段,设计人员要调查现有系统的情况,了解用户对新系统的信息需求和功能需求,对系统要处理的数据收集完整,并进行分析整理和分类组织,写出需求分析报告。
(2)概念设计。在系统需求分析的基础上设计出全系统的面向用户的概念数据模型,作为用户和设计人员之间的桥梁。这个模型既能够清晰的反映系统内数据及其联系,又能够方便的向计算机支持的数据模型转化。
(3)逻辑设计。将概念模型转化为DBMS支持的数据模型,但该模型并不依赖于特定的DBMS。目前一般都使用关系模型。
(4)物理设计。将逻辑设计的数据模型与选定的DBMS结合,设计出能在计算机上实现的数据库模式。
(5)实施与测试。应用DBMS,在计算机上建立物理数据库,通过测试之后投入实际运行。
(6)运行维护。对数据库日常运行进行管理维护,保障数据库系统的的正常运转。 数据库设计的基本目标是建立信息系统的数据库。而在计算机上建立数据库必须由DBMS来完成,目前几乎每个DBMS都是基于关系模型的。因此,在数据库设计过程中,最重要的是正确掌握用户需求,然后在此基础上设计出关系模型。
然而,关系模型面向DBMS,它与实际应用领域所使用的概念和方法有较大距离。用户对关系模型不一定了解,而数据库设计人员也不一定熟悉用户业务领域,因此,这两类人员之间存在沟通问题。而且应用领域很复杂,往往要经过多次反复的调查、分析,才能
31
31
弄清用户需求。因此根据用户要求一步到位的建立数据系统的关系模型较为困难。 由于用户是开发数据处理系统的提出者和最终使用者,为保证设计正确和满足用户要求,用户必须参与系统的开发设计。因此,在建立关系模型前,先应建立一个概念模型。
概念模型使用用户易于理解的概念、符号、表达方式来描述事物及其联系,它与任何实际的DBMS都没有关联,是面向用户的;同时,概念模型又易于向DBMS支持的数据模型转化。概念模型也是对客观事物及其联系的抽象,也是一种数据模型。概念模型是现实世界向面向计算机的数据世界转变的过渡。目前常用的有实体联系模型。因此,概念设计就成为数据库设计过程中非常重要的环节。
可以用三个世界来描述数据库设计的过程。用户所在的实际领域称为现实世界;概念模型以概念和符号为表达方式,所在的层次为信息世界;关系模型位于数据世界。
通过对现实世界的调查分析,然后建立起信息系统的概念模型,就从现实世界进入信息世界;通过将概念模型转化为关系模型进入数据世界,然后由DBMS建立起最终的物理数据库。数据库设计的整个变化过程如图2.4所示。
图2.4 数据库设计过程示意
2.4 实体联系模型及转化
实体联系(ER,Entity Relationship)模型是目前常用的概念模型工具,它有一套基本的概念、符号和表示方法,面向用户;同时,也很方便向其他数据模型转化。
2.4.1 ER模型基本概念
在ER模型中,主要包括实体、属性、域、实体集、实体码以及实体联系等概念。
1.实体与属性
实体(Entity)指现实世界中任何可相互区别的事物。人们通过描述实体的特征即属性来描述实体。在建立信息系统概念模型时,实体就是系统关注的对象。
属性(Attribute)指实体某一方面的特性。一个实体由若干个属性来刻画。通过给属性取值,可以确定具体的实体。例如,对于员工实体,需要描述工号、姓名、性别、生日、职务、薪金等属性。给定{“0301”,“李建设”,“男”,“1978-10-15”,“经理”,¥6650}一组值,就确定了一个实体。所以,实体靠属性来描述。为表述方便,每个属性都有一个名称,称为属性名,如“工号”、“姓名”等。
2.域
每个属性都有一个取值范围的限定,属性的取值范围称为域(Domain)。例如,性别的取值范围是{“男”,“女”},职务取值范围是{“总经理”,“经理”,“主任”,“组长”,
32 32
“业务员”,“见习员”},薪金范围为{1000~10000},??等等。域是值的集合。
3.实体型与实体集
信息系统要处理众多同类实体。例如在销售管理系统中,每个员工都是一个实体,而所有员工实体的属性构成都相同。因此将同类实体的属性构成加以抽象,就得到实体型的概念。用实体名及其属性名集合来描述同类实体,称为实体型(Entity Type)。例如员工(工号,姓名,性别,生日,职务,薪金)定义了员工实体型。
每个实体的具体取值就是实体值。如上面员工“李建设”的相关取值就是一个实体值,可见,型刻画同类个体的共性,值是每个个体的具体内容。
对于同一个对象,使用不同的实体型,表明我们所关注的内容不同。同样是员工,当用(工号,姓名,性别,年龄,身高,体重,视力,?)等属性来表示时,这是表示员工的健康信息。
同型实体的集合称为实体集(Entity Set)。例如,所有员工实体的集合构成员工实体集。在以后的应用中,无须强调时一般不区分实体型或实体集,都简称为实体。
4.实体码
实体集中每个实体都可相互区分,即每个实体的取值不完全相同。用来唯一确定或区分实体集中每一个实体的属性或属性组合称为实体码(Entity Key),或称为实体标识符。例如,员工实体集中,指定一个工号值,就可以确定唯一一个员工。所以,工号可作为员工实体集的码。
实体码对于数据处理非常重要,如果实体集中不存在这样的属性,设计人员往往会增加一个这样的标识属性。
5.实体集之间的联系
现实世界中事物不是孤立存在而是相互关联的,事物的这种关联性在信息世界的体现就是实体联系。实体间的联系方式可以分为如下三类。
(1)一对一联系。两个实体集A、B,若A中任意一个实体至多与B中一个实体发生联系;反之B中任意一个实体至多与A中一个实体发生联系,则称实体集A与实体集B有一对一联系,记为1:1。例如,乘客实体集与火车票实体集的持有联系,院长实体集与学院实体集的领导联系等。
(2)一对多联系。两个实体集A、B,若A中至少有一个实体与B中一个以上实体发生联系;反之B中任意一个实体至多与A中一个实体发生联系,则称实体集A与实体集B有一对多联系,记为1:n。例如,学院与专业的设置联系,部门与员工的聘用联系等。 (3)多对多联系。两个实体集A、B,若A中至少有一个实体与B中一个以上实体发生联系;反之B中至少有一个实体与A中一个以上实体发生联系,则称实体集A与实体集B有多对多联系,记为m:n。例如,学生与课程的选修联系、销售员与商品的销售联系等。
当一个联系发生时,可能会产生一些新的属性,这些属性属于联系而不是某个实体。例如,学生选修课程会产生成绩属性,销售联系会产生数量和金额属性。
33
33

