面向对象软件工程实现工作流文档格式.docx
《面向对象软件工程实现工作流文档格式.docx》由会员分享,可在线阅读,更多相关《面向对象软件工程实现工作流文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
对象(Object)
对象(Object)从不同的角度有不同的含义。
从所面对的问题论域而言,对象是指现实世界中的一个事物,是在建立系统模型中与目标有关的有待抽象的事物,它有自己的静态特征和动态特征。
从系统的建模和实现而言,对象描述客观事物的一个实体,是构成系统的基本单元,它由一组属性和一组服务(操作)组成。
系统的服务功能是通过新对象的建立和对象之间的消息(Message)通信来实现的。
1.5.2.
类(Class)
类(Class)是一组具有相同属性和相同操作的对象的集合。
类是对象的抽象,它给出了属于该类的全部对象的抽象定义,包括类的属性、服务和其他性质。
一个具体的对象只是类的一个实例(Instance)。
1.5.3.
封装(Encapsulation)
封装(Encapsulation)是面向对象方法的一个重要原则。
封装是指把对象的属性和操作结合在一起,构成一个独立的对象,它的内部信息对外界是隐蔽的,不允许外界直接存取对象的属性,而只能通过有限的接口与对象发生联系,对于对象的外界而言,只需要知道对象所表现的外部行为(接口),不必了解对象行为的内部实现细节。
封装体现了面向对象方法的“信息隐蔽与局部化”原则。
1.5.4.
继承(Inheritance)
继承(Inheritance)是指子类(特化类、派生类)可以自动拥有父类(基类、泛化类、超类)的全部属性和服务。
在面向对象方法中的继承机制,使得子类可以自动地拥有父类的全部属性和服务。
继承简化了对现实世界的认识和描述。
在定义子类时,不必重复定义那些已经在父类中定义的属性和服务,只要声明自己是某个父类的子类就可以了,把精力集中于定义本子类所特有的属性和服务上。
继承提高了软件的可复用性。
同时继承也可以被传递。
1.5.5.
消息(Message)
消息(Message)是指对象之间在交互中所传送的通信信息。
通常,一个对象向另一个对象发消息请求服务,接受消息的对象响应该消息,激发所要求的服务操作,并把操作的结果返回给请求服务的对象。
一个消息应当包含以下信息:
消息名、接受消息的对象的标识、服务标识、输入信息、回答信息。
面向对象技术中封装机制使得对象各自独立,各司其职。
对象之间通过消息相互联系、互发消息、响应消息、协同工作,实现系统的各种服务功能。
1.5.6.
结构和连接(StructureandConnection)
世界万物都不是孤立的、互不相关的,而是彼此联系的,表达客观事物的对象之间也存在着联系。
对象之间的联系常见的有:
分类关系(一般与特殊的关系)、组成关系(部分与整体的关系)、对象属性之间的静态的联系以及对象行为的动态联系。
在面向对象方法中通常采用以下的结构和连接表现这些联系:
(1)分类结构(ClassificationStructure):
它是对象抽象的基础。
分类结构表现的是事物的一般与特殊的关系,即“akindof”或“isa”关系。
在面向对象的术语中我们采用泛化(Generalization)和特化(Specialization)联系。
(2)组装结构(CompositionStructure):
它表示对象类之间的组成关系,即:
部分与整体的关系,部分对整体是“apartof”关系,整体对部分是“hasa”关系。
同时组装结构体现了面向对象方法的聚合(Aggregation)原则。
(3)实例连接(InstanceConnection):
它表现了对象之间的静态联系,它是通过对象的属性来表现的对象之间的依赖关系。
在面向对象的术语中常把对象之间的实例连接称为链接(Link),而把存在实例连接的对象类之间的联系称为关联(Association)。
实例连接是从一个实例集合到另一个实例集合的映射。
实例连接可以发生在两个对象之间,也可以发生在一个对象类的不同实例集合之间。
另外实例连接还有多种类型:
一对一的连接、一对多的连接、多对多的连接、0对一的连接、0对多的连接等。
(4)消息连接(MessageConnection):
它是对象之间的通信联系。
一个对象需要另一个对象的服务,便向它发送请求服务的消息,接受消息的对象响应消息,触发所要求的服务操作。
当然也可以不响应,然后触发不响应的操作服务。
这种对象之间的联系称为消息连接,表现了对象行为的动态联系。
所以两个对象之间要发生消息,就必须这两个对象之间存在交互。
1.5.7.
多态性(Polymorphism)
多态性(Polymorphism)是指在基类中定义的属性和服务被其子类继承后,可以具有不同的数据类型或表现不同的行为。
在体现一般与特殊关系的一个类层次结构中,不同层次的类可以共享一个方法或操作的名字,但是却有各自不同的实现过程。
当一个对象接收到一个消息请求进行某一个服务的时,将根据该对象的所属类,动态地选用该类中定义地操作。
这样可以给系统设计提供了灵活性,减少信息冗余,而且也提高了软件地可复用性和可扩充性。
2人事管理系统实现过程
2.1物理实现
PAMIS系统开发工具选用Delphi6.0,主要是因为Delphi在开发数据库及设计应用程序界面方面有着不同寻常的优势:
开发简单、设计方便、帮助系统完善。
并且提供了大量的控件,可用于设计界面和实现各种功能,更主要原因Delphi支持面向对象的主要概念。
在数据库方面开发工具选用SQLServer2000,因为它提供了强大的查询,存储等功能,且操作方便。
运行操作系统一般选用Windows2000及以上版本,并配有打印机,或网络共享打印机。
该数据库(PersonnelManagementSystem)共分3个表,各表的字段如下:
1)员工信息表(员工号、姓名、性别、民族、出生年月、学历、职务、部门、权限、工作时间、联系方式、备注)
2)员工工资表(员工编号、员工姓名、基本工资、加班费用、出差补助、个人奖金、迟到扣款、旷工扣款、处罚金额)
3)员工考勤表(员工编号、本月天数、公休假天数、应出勤天数、请假天数、请假日期、节假日加班、其他加班、加班天数)
2.2软件实现
2.2.1窗口设计
Delphi的窗口本身就是一个类,并且每一个窗体类创建了一个默认的全局对象,并且都封装在.pas的模块中。
根据对象模型和分析模型,一个窗口完成一个功能,并在窗口中放置一些文本框供用户自己输入信息,而组合框可以提供用户自己选择相应信息,以及一些按钮,来实现各种功能。
通过点击按钮,相当于实现面向对象中消息的传递,然后触发相应按钮的Click事件,完成该功能。
这样就使得整个操作,在消息的控制下有条不紊的完成。
某一事件得不到消息的时候,就不触发该事件,处于休眠状态。
图12就是登记人事档案信息的窗口设计。
另外通过采用分页形式登记各类信息。
关于数据库方面的窗口设计,也是通过采用文本框,显示相应的记录,并通过按钮『第一位』,『上一位』,『下一位』,『最后一位』来选择所需要人员信息,并且通过各种窗口中按钮,完成对记录的增加、删除、修改等操作。
此外由于PAMIS信息系统需要频繁的访问数据库中的记录,为此单独建立一个数据模块,在其他窗口需要访问数据库数据的时候只要引用该模块就可以了。
要使用或访问此数据库的所有应用程序的名称和版本号:
1)登录
2)浏览员工信息
3)浏览员工工资
4)浏览考勤信息
5)修改员工信息
6)修改员工工资
7)修改考勤信息
8)删除员工信息
9)删除员工工资
10)删除考勤信息
2.2.2数据库设计
对数据库的设计,主要还要根据人事档案信息这个对象来具体考虑的。
根据人事档案信息的各个属性,我们采用一人一表的方式登记和保存各种信息。
并且将数据库的冗余度降为最低,本文依照第三范式来设计数据库。
将复杂关系拆分成几个较简单的关系。
最后拆分成7张表格,基本信息表,工作经历表,联系方式表,受教育情况表,职务情况表,业绩情况表,合同情况表(详见4.3.2),尽可能减少数据的冗余,节省建库的工作量和磁盘的存储空间。
用户在使用PAMIS系统的数据结构形式,都可以通过两个或两个以上的数据库经过关联后得到。
这一方面可以通过设计SQL查询语句实现表之间的关联,获取所要查询的记录集。
另一方面也可以通过数据库管理系统,本文采用SQLServer2000系统,来实现数据的关联。
通过设计关系图,设计各表格之间的关系,可以选择“级联更新相关字段”和“级联删除相关字段”,以期达到数据库参考完整性。
2.2.3前后台操作关联设计
在窗口设计和数据库设计的同时,下面我们来考虑一下前后台操作的关联设计,也就是如何对数据库中数据的操作与窗口对数据的编辑联系起来。
首先,在PAMIS系统实现中,可以运行Delphi开发系统提供的数据库工具访问数据,主要是运用了BDE的Query和DataAccess的DataSource控件。
另外Delphi系统自己也带有数据库访问控件(DBNavigator)控件,可以直接对数据库中的记录进行添加、删除、修改等操作。
该方法容易实现,操作方便,但灵活性比较差,而且界面也不较难看,介于此,本系统不采用Delphi系统提供的控件。
自己编写代码实现访问数据库的记录的控件。
然后,可以使用公用数据变量方式来实现前后台操作的关联。
通过定义数组变量,首先依据给定的条件,访问数据库,建立数据记录,并将记录赋值给数组变量,然后再将数组的值赋给相应的窗体中的控件(文本框),设计向窗体界面及对应数据变量进行添加、修改、删除、查询浏览等操作,最后将数据转换成符合数据表结构的格式,存入数据表中。
在PAMIS系统实现过程,基本上使用定义公用变量来实现数据的转换,虽然灵活性较好,易于实现复杂的数据表格的设计,但其设计工作量比较大,数据结构也比较复杂。
在完成系统的设计之后,我也曾想过,能否使用一个公用的数据类模块的方式来实现。
这样可以提高代码的重用性。
类模块的设计依据的还是面向对象分析中所建立的模型。
其设计思想主要是:
依据对象模型,选择确定类模块中的属性,依据动态行为模型,设计类模块的服务即方法和事件。
在PAMIS系统中类模块的属性就是人事档案信息类的属性,此外还需要加入:
数据库的工作区(动态数组),建立SQL查询的字符串和返回查询后得到的记录数三个。
所加入的服务,因为主要是建立所需要的代码记录集,要将指针移到指定位置,实现数据间的转换,所以加入移动记录的指针所需要的MoveFirst、MoveLast、MoveNext、MovePrevious和MoveN,以及add、delete、update等方法。
这样可以使设计更加简化。
但系统要使用该类模块的时候,只要在相应的程序中说明它的一个实例名,便可以直接引用。
这很好的体现的面向对象的封装的思想,也就只要知道它所具有的属性和方法,而无需知道其具体实现过程。
若要增加属性或方法,也就只要对类模块进行适当的修改就可以,从而使得整个系统也便于维护。
2.3约定
该数据库(PersonnelManagementSystem)的表及各个字段的约定如下:
1)员工信息(员工号、姓名、性别、民族、出生年月、学历、职务、部门、权限、工作时间、联系方式、备注)
Users(user_iduser_nameuser_sexnationalbirthdayeducationpositiondepartmentspermissionsworktimecontactremarks)
2)工资信息(员工编号、员工姓名、基本工资、加班费用、出差补助、个人奖金、迟到扣款、旷工扣款、处罚金额)
Wage_information(user_iduser_namebasic_wageovertime_coststravel_grantsindividualbonuslate_chargeabsenteeism_chargepenalty_amount)
3)考勤信息(员工编号、员工姓名、本月天数、公休假天数、应出勤天数、请假天数、请假日期、节假日加班、其他加班、加班天数)
Attendance_information(user_iduser_namedaysnumrest_dayattendance_daysLeavedaysLeave_dateholidayoverworkother_overtimeovertime_days)
2.4专门指导
如果这些指导的内容篇幅很长,列出可参阅的文件资料的名称和章条。
使用SQL语言对数据库及表的操作如下:
1)创建数据库使用格式:
CREATEDATABASE数据库名
2)使用数据库使用格式:
USEDATABASESET数据库名
3)删除数据库使用格式:
DROPDATABASE数据库名
4)表的创建使用格式:
CREATETABLEtable_name
(column_name1data_type[Null/NOTNull]
[PRIMARY/UNIQUE]
Column_name2data_type[]
)
5)删除关联和表使用格式:
DROPTABLEtable_name
6)查询表中所有的列使用格式:
SELECT*FROM表名
3结构设计
3.1概念结构设计
每一个表所生成的SQL脚本如下:
1..
CREATETABLE`users`(
`user_id`int(10)defaultNULLCOMMENT'
员工号'
`user_name`varchar(50)defaultNULLCOMMENT'
姓名'
`user_sex`int(10)defaultNULLCOMMENT'
性别'
`national`varchar(50)defaultNULLCOMMENT'
民族'
`birthday`int(10)defaultNULLCOMMENT'
出生年月'
`education`varchar(50)defaultNULLCOMMENT'
学历'
`position`varchar(50)defaultNULLCOMMENT'
职务'
`departments`varchar(50)defaultNULLCOMMENT'
部门'
`permissions`int(10)defaultNULLCOMMENT'
权限'
`worktime`int(10)defaultNULLCOMMENT'
工作时间'
`contact`varchar(50)defaultNULLCOMMENT'
联系方式'
`remarks`tinytextCOMMENT'
备注'
)ENGINE=InnoDBDEFAULTCHARSET=gbk
2.
CREATETABLE`wage_information`(
员工编号'
员工姓名'
`basic_wage`floatdefaultNULLCOMMENT'
基本工资'
`overtime_costs`floatdefaultNULLCOMMENT'
加班费用'
`travel_grants`floatdefaultNULLCOMMENT'
出差补助'
`individualbonus`floatdefaultNULLCOMMENT'
个人奖金'
`late_charge`floatdefaultNULLCOMMENT'
迟到扣款'
`absenteeism_charge`floatdefaultNULLCOMMENT'
旷工扣款'
`penalty_amount`floatdefaultNULLCOMMENT'
处罚金额'
)ENGINE=InnoDBDEFAULTCHARSET=gbk
3.
CREATETABLE`attendance_information`(
`daysnum`int(10)defaultNULLCOMMENT'
本月天数'
`rest_day`int(10)defaultNULLCOMMENT'
公休假天数'
`attendance_days`int(10)defaultNULLCOMMENT'
应出勤天数'
`Leave_days`int(10)defaultNULLCOMMENT'
请假天数'
`Leave_date`int(10)defaultNULLCOMMENT'
请假日期'
`holidayoverwork`int(10)defaultNULLCOMMENT'
节假日加班'
`other_overtime`int(10)defaultNULLCOMMENT'
其他加班'
`overtime_days`int(10)defaultNULLCOMMENT'
加班天数'
3.2物理结构设计
●内存设计:
对于windows操作系统下的数据库,由于在正常情况下SQL对SGA的管理能力不超过1.7G。
所以总的物理内存在4G以下。
SGA的大小为物理内存的50%—75%。
对于64位的小型系统,SQL数据库对SGA的管理超过2G的限制,SGA设计在一个合适的范围内约物理内存的50%—70%。
交换区设计:
当物理内存在2G以下的情况下,交换分区swap为物理内存的3倍,当物理内存>
2G的情况下,swap大小为物理内存的1—2倍。
●数据库文件放在磁盘上,因此磁盘的良好使用和布局很重要。
数据文件大小和I/O不能超过磁盘的大小和I/O。
多个容量小的磁盘比用一个大的磁盘效果更好,因为可以进行更高级的并行I/O操作,使用RAID可以改善数据的可靠性,而I/O的性能又取决于RAID配置的方式。
综合考虑存储磁盘的最小字节、I/O的输出和响应时间。
SQL在运行期间向数据库高速缓存读写数据,高速缓存命中表示信息已在内存中,高速缓存失败意味着Oracle必需进行磁盘I/O。
保持高速缓存失败率最小的关键是确保高速缓存的大小。
3.3数据字典设计
数据字典提供一个可自定义的不依赖于应用程序的存储区域,在这个区域中,可以创建扩展的字段属性集和描述数据的内容和外观。
数据字典包括数据项、数据结构、数据流、数据存储和处理过程五个部分,包含每个字段的数据类型和在每个表内的主外键。
数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,
取值范围,取值含义,与其他数据项的逻辑关系}
数据结构描述={数据结构名,含义说明,组成:
{数据项或数据结构}}
数据流描述={数据流名,说明,数据流来源,数据流去向,
组成:
{数据结构},平均流量,高峰期流量}
数据存储描述={数据存储名,说明,编号,流入的数据流,流出的数据流,
{数据结构},数据量,存取方式}
处理过程描述={处理过程名,说明,输入:
{数据流},输出:
{数据流},
处理:
{简要说明}}
3.4安全保密设计
本系统的权限设计在数据库的users的permissions字段有体现,三种不同的权限用不同的数字id代表,分别为3,2,1
职员权限:
可以浏览公司概况、自己的人员信息、看自己的工资、考勤情况
经理权限:
可以浏览公司概况、自己部门(包括自己)人员信息和考勤情况
管理员权限:
可以浏览公司概况
浏览所有的人员信息
查看所有员工工资信息和考勤情况
添加新职员(添加时同时填写该员工信息)
添加员工工资(就是录入一个员工的工资)
添加员工考情情况(录入一个员工的考勤情况)
修改公司所有员工权限
修改公司所有员工信息
修改公司所有员工工资
修改公司所有员工考勤
删除公司所有员工权限
删除公司所有员工信息
删除公司所有员工工资
删除公司所有员工考勤
·
数据的备份
Mysql为一个开源型数据库,具有多种备份工具;
使用mysqldump备份和拷贝数据库
当你使用mysqldump程序产生数据库备份文件时,缺省地,文件内容包含创建正在倾倒的表的CREATE语句和包含表中行数据的INSERT语句。
换句话说,mysqldump产生的输出可在以后用作mysql的输入来重建数据库。
你可以将整个数据库倾倒进一个单独的文本文件中,如下:
%mysqldumpsamp_db>
/usr/archives/mysql/samp_db.1999-10-02
输出文件的开头看起来象这样:
#MySQLDump6.0##Host:
loca