软件工程2.docx
- 文档编号:26623192
- 上传时间:2023-06-20
- 格式:DOCX
- 页数:22
- 大小:430.47KB
软件工程2.docx
《软件工程2.docx》由会员分享,可在线阅读,更多相关《软件工程2.docx(22页珍藏版)》请在冰豆网上搜索。
软件工程2
Gantt(甘特)图是历史悠久、应用广泛的制定进度计划的工具,下面通过一个非常简单的例子介绍这种工具
⏹假设有一座陈旧的矩形木板房需要重新油漆。
这项工作必须分3步完成:
首先刮掉旧漆,然后刷上新漆,最后清除溅在窗户上的油漆。
⏹假设一共分配了15名工人去完成这项工作,然而工具却很有限:
只有5把刮旧漆用的刮板,5把刷漆用的刷子,5把清除溅在窗户上的油漆用的小刮刀。
怎样安排才能使工作进行得更有效呢?
各道工序估计需用时间(小时)
⏹假设木板房的第2、4两面墙的长度比第1、3两面墙的长度长一倍,此外,不同工作需要用的时间长短也不同,刷新漆最费时间,其次是刮旧漆,清理(即清除溅在窗户上的油漆)需要的时间最少。
墙壁
刮旧漆
刷新漆
清理
1或3
2
3
1
2或4
4
6
2
⏹一种做法是首先刮掉四面墙壁上的旧漆,然后给每面墙壁都刷上新漆,最后清除溅在每个窗户上的油漆。
⏹显然这是效率最低的做法,因为总共有15名工人,然而每种工具却只有5件,这样安排工作在任何时候都有10名工人闲着没活干。
计算这种方法所用时间36
流水作业法
⏹首先由5名工人用刮板刮掉第1面墙上的旧漆(这时其余10名工人休息),当第1面墙刮净后,另外5名工人立即用刷子给这面墙刷新漆(与此同时拿刮板的5名工人转去刮第2面墙上的旧漆),一旦刮旧漆的工人转到第3面墙而且刷新漆的工人转到第2面墙以后,余下的5名工人立即拿起刮刀去清除溅在第1面墙窗户上的油漆,……。
⏹这样安排每个工人都有活干,因此能够在较短的时间内完成任务。
Gantt图描绘上述流水作业过程
在时间为零时开始刮第1面墙上的旧漆,两小时后刮旧漆的工人转去刮第2面墙,同时另5名工人开始给第1面墙刷新漆,每当给一面墙刷完新漆之后,第3组的5名工人立即清除溅在这面墙窗户上的漆。
旧木板房刷漆工程的Gantt图
计算这种方法所用时间
⏹从图可以看出12小时后刮完所有旧漆,20小时后完成所有墙壁的刷漆工作,再过2小时后清理工作结束。
因此全部工程在22小时后结束。
Gantt图的缺点
⏹Gantt图能很形象地描绘任务分解情况,以及每个子任务(作业)的开始时间和结束时间,因此是进度计划和进度管理的有力工具。
它具有直观简明和容易掌握、容易绘制的优点,但是Gantt图也有3个主要缺点:
1.不能显式地描绘各项作业彼此间的依赖关系;
2.进度计划的关键部分不明确,难于判定哪些部分应当是主攻和主控的对象;
3.计划中有潜力的部分及潜力的大小不明确,往往造成潜力的浪费。
工程网络
⏹当把一个工程项目分解成许多子任务,并且它们彼此间的依赖关系又比较复杂时,仅仅用Gantt图作为安排进度的工具是不够的,不仅难于做出既节省资源又保证进度的计划,而且还容易发生差错。
⏹工程网络是制定进度计划时另一种常用的图形工具,它同样能描绘任务分解情况以及每项作业的开始时间和结束时间,此外,它还显式地描绘各个作业彼此间的依赖关系。
因此,工程网络是系统分析和系统设计的强有力的工具。
工程网络
⏹在工程网络中用箭头表示作业(例如,刮旧漆,刷新漆,清理等),用圆圈表示事件(一项作业开始或结束)。
⏹注意,事件仅仅是可以明确定义的时间点,它并不消耗时间和资源。
作业通常既消耗资源又需要持续一定时间。
旧木板房刷漆工程的工程网络
假设有一座陈旧的矩形木板房需要重新油漆。
这项工作必须分3步完成:
首先刮掉旧漆,然后刷上新漆,最后清除溅在窗户上的油漆
依赖关系
⏹在工程网络中的一个事件,如果既有箭头进入又有箭头离开,则它既是某些作业的结束又是另一些作业的开始。
⏹例如,图中事件2既是作业1—2(刮第1面墙上的旧漆)的结束,又是作业2—3(刮第2面墙上旧漆)和作业2—4(给第1面墙刷新漆)的开始。
也就是说,只有第1面墙上的旧漆刮完之后,才能开始刮第2面墙上旧漆和给第1面墙刷新漆这两个作业。
因此,工程网络显式地表示了作业之间的依赖关系。
⏹虚拟作业
⏹在图中还有一些虚线箭头,它们表示虚拟作业,也就是事实上并不存在的作业。
引入虚拟作业是为了显式地表示作业之间的依赖关系。
⏹例如,事件4既是给第1面墙刷新漆结束,又是给第2面墙刷新漆开始(作业4—6)。
但是,在开始给第2面墙刷新漆之前,不仅必须已经给第1面墙刷完了新漆,而且第2面墙上的旧漆也必须已经刮净(事件3)。
也就是说,在事件3和事件4之间有依赖关系,或者说在作业2—3(刮第2面墙上旧漆)和作业4—6(给第2面墙刷新漆)之间有依赖关系,虚拟作业3—4明确地表示了这种依赖关系。
⏹注意,虚拟作业既不消耗资源也不需要时间。
估算工程进度
画出工程网络图之后,系统分析员就可以借助它的帮助估算工程进度了。
为此需要在工程网络上增加一些必要的信息。
首先,把每个作业估计需要使用的时间写在表示该项作业的箭头上方。
注意,箭头长度和它代表的作业持续时间没有关系,箭头仅表示依赖关系,它上方的数字才表示作业的持续时间。
⏹
墙壁
刮旧漆
刷新漆
清理
1或3
2
3
1
2或4
4
6
2
估算工程进度
最早时刻EET和最迟时刻LET
⏹其次,为每个事件计算下述两个统计数字:
最早时刻EET和最迟时刻LET。
这两个数字将分别写在表示事件的圆圈的右上角和右下角,如图所示。
⏹事件的最早时刻是该事件可以发生的最早时间。
通常工程网络中第一个事件的最早时刻定义为零,其他事件的最早时刻在工程网络上从左至右按事件发生顺序计算。
最早时刻EET
⏹计算最早时刻EET使用下述3条简单规则:
1.考虑进入该事件的所有作业;
2.对于每个作业都计算它的持续时间与起始事件的EET之和;
3.选取上述和数中的最大值作为该事件的最早时刻EET。
⏹按照这种方法,不难沿着工程网络从左至右顺序算出每个事件的最早时刻,计算结果标在工程网络图中(每个圆圈内右上角的数字)。
最早时刻EET
事件的最迟时刻
事件的最迟时刻是在不影响工程竣工时间的前提下,该事件最晚可以发生的时刻。
按惯例,最后一个事件(工程结束)的最迟时刻就是它的最早时刻。
其他事件的最迟时刻在工程网络上从右至左按逆作业流的方向计算。
计算最迟时刻LET使用下述3条规则:
考虑离开该事件的所有作业;
从每个作业的结束事件的最迟时刻中减去该作业的持续时间;
选取上述差数中的最小值作为该事件的最迟时刻LET
最迟时刻
关键路径
关键路径
关键路径上的事件(关键事件)必须准时发生,组成关键路径的作业(关键作业)的实际持续时间不能超过估计的持续时间,否则工程就不能准时结束。
工程项目的管理人员应该密切注视关键作业的进展情况,如果关键事件出现的时间比预计的时间晚,则会使最终完成项目的时间拖后;如果希望缩短工期,只有往关键作业中增加资源才会有效果。
机动时间
不在关键路径上的作业有一定程度的机动余地——实际开始时间可以比预定时间晚一些,或者实际持续时间可以比预定的持续时间长一些,而并不影响工程的结束时间。
一个作业可以有的全部机动时间等于它的结束事件的最迟时刻减去它的开始事件的最早时刻,再减去这个作业的持续时间:
机动时间=(LET)结束-(EET)开始-持续时间
旧木板房刷漆工程的完整的工程网络图
比较帅的进度表
总结
⏹这个简单例子明显说明了工程网络比Gantt图优越的地方:
它显式地定义事件及作业之间的依赖关系,Gantt图只能隐含地表示这种关系。
但是Gantt图的形式比工程网络更简单更直观,为更多的人所熟悉,因此,应该同时使用这两种工具制订和管理进度计划,使它们互相补充取长补短。
⏹以上通过旧木板房刷新漆工程的简单例子,介绍了制订进度计划的两个重要工具和方法。
软件工程项目虽然比这个简单例子复杂得多,但是计划和管理的基本方法仍然是自顶向下分解,也就是把项目分解为若干个阶段,每个阶段再分解成许多更小的任务,每个任务又可进一步分解为若干个步骤等等。
这些阶段、任务和步骤之间有复杂的依赖关系,因此,工程网络和Gantt图同样是安排进度和管理工程进展情况的强有力的工具。
数据流图
✓数据流图(DFD)是一种图形化技术,它描绘信息流和数据从输入移动到输出的过程中所经受的变换。
✓在数据流图中没有任何具体的物理部件,它只是描绘数据在软件中流动和被处理的逻辑过程。
数据流图是系统逻辑功能的图形表示,即使不是专业的计算机技术人员也容易理解它,因此是分析员与用户之间极好的通信工具。
✓此外,设计数据流图时只需考虑系统必须完成的基本逻辑功能,完全不需要考虑怎样具体地实现这些功能,所以它也是今后进行软件设计的很好的出发点。
1符号
✓数据流图有四种基本符号:
正方形(或立方体)表示数据的源点或终点;圆角矩形(或圆形)代表变换数据的处理;开口矩形(或两条平行横线)代表数据存储;箭头表示数据流,即特定数据的流动方向。
✓注意,数据流与程序流程图中用箭头表示的控制流有本质不同,千万不要混淆。
在数据流图中应该描绘所有可能的数据流向,而不应该描绘出现某个数据流的条件。
注意
✓处理并不一定是一个程序。
一个处理框可以代表一系列程序、单个程序或者程序的一个模块;它甚至可以代表用穿孔机穿孔或目视检查数据正确性等人工处理过程。
✓一个数据存储也并不等同于一个文件,它可以表示一个文件、文件的一部分、数据库的元素或记录的一部分等;数据可以存储在磁盘、磁带、磁鼓、主存、微缩胶片、穿孔卡片及其他任何介质上(包括人脑)。
✓数据存储和数据流都是数据,仅仅所处的状态不同。
数据存储是处于静止状态的数据,数据流是处于运动中的数据。
✓通常在数据流图中忽略出错处理,也不包括诸如打开或关闭文件之类的内务处理。
数据流图的基本要点是描绘“做什么”而不考虑“怎样做”。
✓有时数据的源点和终点相同,如果只用一个符号代表数据的源点和终点,则至少将有两个箭头和这个符号相连(一个进一个出),可能其中一条箭头线相当长,这将降低数据流图的清晰度。
✓另一种表示方法是再重复画一个同样的符号(正方形或立方体)表示数据的终点。
有时数据存储也需要重复,以增加数据流图的清晰程度。
为了避免可能引起的误解,如果代表同一个事物的同样符号在图中出现在n个地方,则在这个符号的一个角上画(n-1)条短斜线做标记。
2例子
假设一家工厂的采购部每天需要一张定货报表,报表按零件编号排序,表中列出所有需要再次定货的零件。
对于每个需要再次定货的零件应该列出下述数据:
零件编号,零件名称,定货数量,目前价格,主要供应者,次要供应者。
零件入库或出库称为事务,通过放在仓库中的CRT终端把事务报告给定货系统。
当某种零件的库存数量少于库存量临界值时就应该再次定货。
分析:
数据流图有4种成分:
源点或终点,处理,数据存储和数据流。
因此,第一步可以从问题描述中提取数据流图的4种成分:
首先考虑数据的源点和终点,从上面对系统的描述可以知道“采购部每天需要一张定货报表”,“通过放在仓库中的CRT终端把事务报告给定货系统”,所以采购员是数据终点,而仓库管理员是数据源点。
✓接下来考虑处理,再一次阅读问题描述,“采购部需要报表”,显然他们还没有这种报表,因此必须有一个用于产生报表的处理。
✓事务的后果是改变零件库存量,然而任何改变数据的操作都是处理,因此对事务进行的加工是另一个处理。
✓注意,在问题描述中并没有明显地提到需要对事务进行处理,但是通过分析可以看出这种需要。
✓最后,考虑数据流和数据存储:
系统把定货报表送给采购部,因此定货报表是一个数据流;事务需要从仓库送到系统中,显然事务是另一个数据流。
产生报表和处理事务这两个处理在时间上明显不匹配——每当有一个事务发生时立即处理它,然而每天只产生一次定货报表。
因此,用来产生定货报表的数据必须存放一段时间,也就是应该有一个数据存储。
✓注意,并不是所有数据存储和数据流都能直接从问题描述中提取出来。
定货系统基本系统模型
✓数据流图是系统的逻辑模型,然而任何计算机系统实质上都是信息处理系统,也就是说计算机系统本质上都是把输入数据变换成输出数据。
因此,任何系统的基本模型都由若干个数据源点/终点以及一个处理组成,这个处理就代表了系统对数据加工变换的基本功能。
对于上述的定货系统可以画出这样的基本系统模型。
基本系统模型细化
✓从基本系统模型这样非常高的层次开始画数据流图是一个好办法。
在这个高层次的数据流图上是否列出了所有给定的数据源点/终点是一目了然的,因此它是很有价值的通信工具。
✓然而,上图毕竟太抽象了,从这张图上对定货系统所能了解到的信息非常有限。
下一步应该把基本系统模型细化,描绘系统的主要功能。
从分析可知,“产生报表”和“处理事务”是系统必须完成的两个主要功能,它们将代替图中的“定货系统”(图2.6)。
✓此外,细化后的数据流图中还增加了两个数据存储:
处理事务需要“库存清单”数据;产生报表和处理事务在不同时间,因此需要存储“定货信息”。
✓除了上面分析中列出的两个数据流之外还有另外两个数据流,它们与数据存储相同。
这是因为从一个数据存储中取出来的或放进去的数据通常和原来存储的数据相同,也就是说,数据存储和数据流只不过是同样数据的两种不同形式。
✓在图2.6中给处理和数据存储都加了编号,这样做的目的是便于引用和追踪。
图2.6定货系统的功能级数据流图
系统主要功能进一步细化
✓考虑通过系统的逻辑数据流:
当发生一个事务时必须首先接收它;随后按照事务的内容修改库存清单;最后如果更新后的库存量少于库存量临界值时,则应该再次定货,也就是需要处理定货信息。
因此,把“处理事务”这个功能分解为下述3个步骤,这在逻辑上是合理的:
“接收事务”、“更新库存清单”和“处理定货”(图2.7)。
✓当对数据流图分层细化时必须保持信息连续性,也就是说,当把一个处理分解为一系列处理时,分解前和分解后的输入输出数据流必须相同。
图2.7把处理事务的功能进一步分解后的数据流图
3命名
✓数据流图中每个成分的命名是否恰当,直接影响数据流图的可理解性。
因此,给这些成分起名字时应该仔细推敲。
下面讲述在命名时应注意的问题:
1.为数据流(或数据存储)命名
(1)名字应代表整个数据流(或数据存储)的内容,而不是仅仅反映它的某些成分。
(2)不要使用空洞的、缺乏具体含义的名字(如“数据”、“信息”、“输入”之类)。
(3)如果在为某个数据流(或数据存储)起名字时遇到了困难,则很可能是因为对数据流图分解不恰当造成的,应该试试重新分解,看是否能克服这个困难。
2.为处理命名
(1)通常先为数据流命名,然后再为与之相关联的处理命名。
这样命名比较容易,而且体现了人类习惯的“由表及里”的思考过程。
(2)名字应该反映整个处理的功能,而不是它的一部分功能。
(3)名字最好由一个具体的及物动词加上一个具体的宾语组成。
应该尽量避免使用“加工”、“处理”等空洞笼统的动词作名字。
(4)通常名字中仅包括一个动词,如果必须用两个动词才能描述整个处理的功能,则把这个处理再分解成两个处理可能更恰当些。
(5)如果在为某个处理命名时遇到困难,则很可能是发现了分解不当的迹象,应考虑重新分解。
3.为数据源点/终点命名
✓数据源点/终点并不需要在开发目标系统的过程中设计和实现,它并不属于数据流图的核心内容,只不过是目标系统的外围环境部分(可能是人员、计算机外部设备或传感器装置)。
✓通常,为数据源点/终点命名时采用它们在问题域中习惯使用的名字(如“采购员”、“仓库管理员”等)。
4用途
✓画数据流图的基本目的是利用它作为交流信息的工具。
分析员把他对现有系统的认识或对目标系统的设想用数据流图描绘出来,供有关人员审查确认。
由于在数据流图中通常仅仅使用4种基本符号,而且不包含任何有关物理实现的细节,因此,绝大多数用户都可以理解和评价它。
✓数据流图应该分层,并且在把功能级数据流图细化后得到的处理超过9个时,应该采用画分图的办法,也就是把每个主要功能都细化为一张数据流分图,而原有的功能级数据流图用来描绘系统的整体逻辑概貌。
数据流图的主要用途
数据流图的另一个主要用途是作为分析和设计的工具。
分析员在研究现有的系统时常用系统流程图表达他对这个系统的认识,这种描绘方法形象具体,比较容易验证它的正确性;但是,开发工程的目标往往不是完全复制现有的系统,而是创造一个能够完成相同的或类似的功能的新系统。
用系统流程图描绘一个系统时,系统的功能和实现每个功能的具体方案是混在一起的。
因此,分析员希望以另一种方式进一步总结现有的系统,这种方式应该着重描绘系统所完成的功能而不是系统的物理实现方案。
数据流图是实现这个目标的极好手段。
当用数据流图辅助物理系统的设计时,以图中不同处理的定时要求为指南,能够在数据流图上画出许多组自动化边界,每组自动化边界可能意味着一个不同的物理系统,因此可以根据系统的逻辑模型考虑系统的物理实现
考虑图2.7,事务随时可能发生,因此处理1.1(“接收事务”)必须是联机的;采购员每天需要一次定货报表,因此处理2(“产生报表”)应该以批量方式进行。
问题描述并没有对其他处理施加限制,例如,可以联机地接收事务并放入队列中,然而更新库存清单、处理定货和产生报表以批量方式进行(图2.8)。
当然,这种方案需要增加一个数据存储以存放事务数据
图2.8这种划分自动化边界的方法暗示以批量方式更新库存清单
数据流图的主要用途
✓改变自动化边界,把处理1.1,1.2和1.3放在同一个边界内(图2.9),这个系统将联机地接收事务、更新库存清单和处理定货及输出定货信息;然而处理2将以批量方式产生定货报表。
图2.9另一种划分自动化边界的方法建议以联机方式更新库存清单
✓还能设想出建立自动化边界的其他方案吗?
如果把处理1.1和处理1.2放在一个自动化边界内,把处理1.3和处理2放在另一个边界内,意味着什么样的物理系统呢?
✓数据流图对更详细的设计步骤也有帮助,从数据流图出发映射出软件结构的方法——面向数据流的设计方法。
数据字典
✓数据字典是关于数据的信息的集合,也就是对数据流图中包含的所有元素的定义的集合。
✓任何字典最主要的用途都是供人查阅对不了解的条目的解释,数据字典的作用也正是在软件分析和设计的过程中给人提供关于数据的描述信息。
✓数据流图和数据字典共同构成系统的逻辑模型,没有数据字典数据流图就不严格,然而没有数据流图数据字典也难于发挥作用。
只有数据流图和对数据流图中每个元素的精确定义放在一起,才能共同构成系统的规格说明。
1数据字典的内容
✓一般说来,数据字典应该由对下列4类元素的定义组成:
(1)数据流
(2)数据流分量(即数据元素)(3)数据存储(4)处理
但是,对数据处理的定义用其他工具(如IPO图或PDL)描述更方便,因此本书中数据字典将主要由对数据的定义组成,这样做可以使数据字典的内容更单纯,形式更统一。
除了数据定义之外,数据字典中还应该包含关于数据的一些其他信息。
典型的情况是,在数据字典中记录数据元素的下列信息:
1.一般信息(名字,别名,描述等等),
2.定义(数据类型,长度,结构等等),
3.使用特点(值的范围,使用频率,使用方式——输入、输出、本地,条件值等等),
4.控制信息(来源,用户,使用它的程序,改变权,使用权等等)
5.分组信息(父结构,从属结构,物理位置——记录、文件和数据库等等)。
数据元素的别名就是该元素的其他等价的名字,出现别名主要有下述3个原因:
(1)对于同样的数据,不同的用户使用了不同的名字;
(2)一个分析员在不同时期对同一个数据使用了不同的名字;
(3)两个分析员分别分析同一个数据流时,使用了不同的名字。
虽然应该尽量减少出现别名,但是不可能完全消除别名。
2定义数据的方法
定义绝大多数复杂事物的方法,都是用被定义的事物的成分的某种组合表示这个事物,这些组成成分又由更低层的成分的组合来定义。
从这个意义上说,定义就是自顶向下的分解,所以数据字典中的定义就是对数据自顶向下的分解。
那么,应该把数据分解到什么程度呢?
一般说来,当分解到不需要进一步定义,每个和工程有关的人也都清楚其含义的元素时,这种分解过程就完成了。
组成数据的方式
✓由数据元素组成数据的方式只有下述三种基本类型:
(1)顺序即以确定次序连接两个或多个分量;
(2)选择即从两个或多个可能的元素中选取一个;
(3)重复即把指定的分量重复零次或多次。
✓因此,可以使用上述3种关系算符定义数据字典中的任何条目。
✓为了说明重复次数,重复算符通常和重复次数的上下限同时使用(当上下限相同时表示重复次数固定)。
当重复的上下限分别为1和0时,可以用重复算符表示某个分量是可选的。
但是,“可选”是由数据元素组成数据时一种常见的方式,把它单独列为一种算符可以使数据字典更清晰一些。
因此,增加了下述的第4种关系算符:
(4)可选即一个分量是可有可无的(重复零次或一次)
符号
✓虽然可以使用自然语言描述由数据元素组成数据的关系,但是为了更加清晰简洁,建议采用下列符号:
✓=意思是等价于(或定义为);
✓+意思是和(即,连接两个分量);
✓[]意思是或(即,从方括弧内列出的若干个分量中选择一个),通常用“|”号隔开供选择的分量;
✓{}意思是重复(即,重复花括弧内的分量);
✓()意思是可选(即,圆括弧里的分量可有可无)。
✓常常使用上限和下限进一步注释表示重复的花括弧。
一种注释方法是在开括弧的左边用上角标和下角标分别表明重复的上限和下限;另一种注释方法是在开括弧左侧标明重复的下限,在闭括弧的右侧标明重复的上限。
举例
下面举例说明上述定义数据的符号的使用方法:
某程序设计语言规定,用户说明的标识符是长度不超过8个字符的字符串,其中第一个字符必须是字母字符,随后的字符既可以是字母字符也可以是数字字符。
使用上面讲过的符号,我们可以像下面那样定义标识符:
✓标识符=字母字符+字母数字串
✓字母数字串=0{字母或数字}7
✓字母或数字=[字母字符|数字字符]
✓由于和项目有关的人都知道字母字符和数字字符的含义,因此,关于标识符的定义分解到这种程度就可以结束了。
3数据字典的用途
数据字典最重要的用途是作为分析阶段的工具。
在数据字典中建立的一组严密一致的定义很有助于改进分析员和用户之间的通信,因此将消除许多可能的误解。
对数据的这一系列严密一致的定义也有助于改进在不同的开发人员或不同的开发小组之间的通信。
如果要求所有开发人员都根据公共的数据字典描述数据和设计模块,则能避免许多麻烦的接口问题。
✓数据字典中包含的每个数据元素的控制信息是很有价值的。
因为列出了使用一个给定的数据元素的所有程序(或模块),所以很容易估计改变一个数据将产生的影响,并且能对所有受影响的程序或模块作出相应的改变。
✓最后,数据字典是开发数据库的第一步,而且是很有价值的一步。
4数据字典的实现
目前,数据字典几乎总是作为CASE“结构化分析与设计工具”的一部分实现的。
在开发大型软件系统的过程中,数据字典的规模和复杂程度迅速增加,人工维护数据字典几乎是不可能的。
如果在开发小型软件系统时暂时没有数据字典处理程序,建议采用卡片形式书写数据字典,每张卡片上保存描述一个数据的信息。
这样做更新和修改起来比较方便,而且能单独处理描述每个数据的信息。
每张卡片上主要应该包含下述这样一些信息:
名字、别名、描述、定义、位置。
作业:
✓目前住院病人主要由护士护理,这样做不仅需要大量护士,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程