当前位置:文档之家› 第六章 经典软件体系结构

第六章 经典软件体系结构

第六章   经典软件体系结构
第六章   经典软件体系结构

第六章经典软件体系结构

本章介绍经典的软件体系结构,主要包括Mary Shaw等人所总结的一些软件体系结构分格。众所周知,计算机学科历史较短,因此,软件架构的研究历史更短。本章所谓的经典软件体系结构也仅仅是指在20世纪80年代至21世纪初期间提出的成功的软件体系结构。本章将介绍调用-返回分格软件体系结构、数据流风格软件体系结构、基于事件的软件体系结构、层次软件体系架构与MVC软件体系结构。

6.1 调用-返回风格软件体系结构

相对于一些基础学科,计算机学科的发展历史较短。20世纪50年代才出现了适合商业应用的软件开发语言。软件设计与开发也经历了从初级到高级的历程。回顾历史,从20世纪50年代到60年代末,属于非结构化简单程序开发阶段,软件设计方面采用简单程序模型,典型的开发语言Algol(1958)、COBOL(1959)和Basic(1964);从20世纪70年代初到80年代初,属于结构化设计编程阶段,典型的开发语言有Pascal(1968)、C(1972)、FORTRAN和Perl。虽然从20世纪60年代开始就有了面向对象概念的讨论,但是直到20世纪80年代初正式开始才面向对象设计编程阶段,就有了代表性的面向对象软件开发语言包括SmallTalk、Ada、C++(1983)和Java(1995)。

本节首先简要回顾非结构化编程,然后介绍对软件设计有重要的影响的调用-返回风格软件体系结构,重点介绍其中的主程序-子程序软件体系结构与面向对象软件体系结构,并对它们进行讨论。

6.1.1 非结构化编程简介

非结构化编程技术是历史上最早的编程范型。紧随其后的是结构化设计/编程技术与面向对象设计/编程技术。一个由非结构化语言编写的程序通常包含一系列有序的命令,或者称为语句,通常是每个语句占一行,每行都有标记一个行号或者可能是标签。这样做的目的事允许程序执行流可以依据行号从一行跳到程序的其他指定的行。支持非结构化编程的语言包括早期的BASIC与COBOL。

非结构化编程引入基本的循环、分支与跳跃等控制流的概念。在非结构化编程中,虽然出现了较为原始的子程序的概念,但其与结构化编程中过程(Procedure)的概念有本质的区别。非结构化编程中的子程序允许有多个入口和多个出口,理论上允许程序在任何地方转入子程序或退出子程序,而在这结构化编程中是不允许的。

虽然非结构化编程所编写的程序很难理解,并且经常遭到批评,但是早期的银行与金融机构软件代码都是由非结构化编程语言(例如COBOL)写的。

目前,非结构化编程已成为历史,现在很少使用(除了有些银行与金融业企业仍然使用COBOL进行开发,但和早期的版本相比有了很多改善,例如COBOL 97包括常规改善并且具备了面向对象的特征),因此本节将不把注意力放在非结构化编程方面,而主要介绍采用结构化设计方法的主程序-子程序软件体系结构与采用面向对象设计方法的面向对象软件体系结构。

在介绍这两种软件体系结构以前,首先介绍调用-返回风格的体系结构的概念。

6.1.2 调用-返回风格软件体系结构的概念

调用-返回风格体系结构(Call and Return Architecture)是在过去的30年内具有深远影响的软件体系结构。本节要介绍的共享数据的主程序-子程序体系结构与面向对象体系

结构可以被认为是调用-返回风格体系结构的子类型。因此,熟悉调用-返回风格架构对于理解这两个体系结构有重大意义。

利用调用-返回风格软件体系结构设计的软件系统使用的是分而治之策略,其主要的思想是将一个复杂的大系统分解为一些子系统,以便降低复杂度,并且增加可修改性。这种系统的程序执行顺序通常只由一个单线程控制。例如,一个软件架构C,只有从另外一个调用者软件构件B得到控制以后,才能执行该构件C的程序;当运行结束以后,将控制返回给软件构件B。该程序的运行控制流如图6.1所示。

图中的长箭头可以理解为是一个程序构件对另外一个构件的调用,而短箭头为程序运行控制流的走向,这也就是名称“调用-返回”的由来。

图6.1调用-返回风格软件体系结构大的程序运行控制流示意图

每个软件构件都设计为有一个唯一的程序执行起点和唯一的程序执行终点,或者称为程序执行入口和程序执行出口。程序从其执行入口开始执行该构件的代码,运行至该构件的程序执行的出口,然后程序执行结束,而将控制返回给程序调用构件。上述程序构件通常叫做子程序(Subroutine),从一个构件到另外一个构件的控制传递叫做子程序调用(Call)。子程序调用程序都有参数传递。拥有整个软件入口的构件叫做主程序(Main Program),它控制子程序的执行顺序。在这种风格的系统中,也可能有一些被动的数据构件,其中存储供子程序的访问的共享数据。可以被所有软件构件访问的共享数据被称为全局变量。

这种调用-返回风格体系结构的组织与执行的动态控制可以由高级程序语言的过程(Procedure)、函数(Function)或者方法(Method)来实现。

调用-返回风格架构可以被组织成任何形式,例如,可以将程序设计为如图6.2所示的

结构图。在该图中,箭头代表调用,方块内有“S ub”字样的是子程序,有“Global Date”字样的为数据构件。图6.2设计的逻辑关系比较复杂,因此,通常人们往往喜欢将其组织成如图6.3所示的层次结构。这样组织成层次结构的调用-返回风格架构设计叫做共享数据的主程序-子程序软件体系架构,其原因是在调用-返回体系结构中包括一个控制其他组件的主程序,该程序选择调用在其下层的软件组件(模块、函数),而该软件组件又往往调用其下层的软件组件。每次调用都执行一个子任务,并且返回一个值。主程序-子程序体系结构是较早出现的软件体系结构。

以上介绍的调用-返回风格软件体系结构对于理解当今流行软件体系结构有着重要的意义。下面将分别介绍该软件体系结构下的主程序-子程序软件体系结构与面向对象软件体系结构。

6.1.3 主程序-子程序软件体系结构

主程序-子程序软件体系结构在设计上使用层次化的划分方法,该体系结构中使用由编程语言直接支持的单一的控制线程。子程序的结构是明确的,子程序通常组成程序模块。子程序的调用呈现层次状,其正确与否往往取决于其调用的子程序的正确与否。主程序-子程序软件体系结构图如吐6.3所示。

图6.3共享数据的在主程序-子程序软件体系结构

和非结构编程比较,主程序-子程序软件体系结构能够较好地支持系统的可改变性及可伸缩性等性能。由于该体系结构采用了分而治之策略,将一个复杂问题分解为多个独立的子问题,从而实现了对系统分复杂度的有效控制。C 语言开发程度即属于典型的主程序-子程序风格的软件体系结构。C 语言开发的程序通常包括一个main 函数(即主程序)和一些自定义的函数(即子程序)。

主程序-子程序体系结构中典型地存在一个控制线程,每个阶层的组件从其父组件得到该控制并且通过它传给它的子组件。

使用主程序-子程序软件体系结构的设计通常采用如图6.4所示的自顶向下的功能化设计方法。

图6.4自顶向下的的功能化设计方法

自顶向下功能化设计方法的设计思想是,系统从功能的角度进行设计,从高层开始,逐步细化为详细的设计。该设计从系统要完成的功能需求出发,首先将一个整体问题(功能)分为几个子问题(子功能),然后再考虑将每个子问题(子功能)再次划分为几个更小的子问题(子功能),依次下去,直到不可再分为止。通过这样的设计,得到一颗如图6.4所示的根朝上的树形结构,其中,每个节点都是一个子程序。可以理解为系统的功能可以由多个子程序完成。高层子程序调用低层子程序,而低层主程序又调用比它更低的子程序,等等。

结构化程序设计得到了广泛的应用,例如阿波罗11号的地面控制系统的子系统Apollo Reentry Runge –Kutta 数值集成器软件采用结构化程序设计,利用FORTRAN 语言开发,在当时最快的计算机IBM 360 -75上运行。

结构化设计从数据流图开始,然后将数据流图转换为程序结构图(Structured Chart)。设计数据流图从数据输入开始,对数据的各个处理过程以及最后的输出进行描述;将提供给用户的业务流程图(”物理模型”)进行功能建模,转化成开发人员更易理解的一系列”逻辑模型”图,以图形化的方法描绘数据在系统中的流动和处理过程。这些图需要用规范的DFD描述,达到系统在建立前有关信息就能被充分理解的目的。在设计时要求严格划分开发阶段,用规范的方法与图表工具精确的描述各阶段的工作,每个阶段都以规范是哪个的文档资料作为其成果,最终得到满足用户需要的系统。

相对于非结构化的设计,结构化设计有以下优点。

(1)逻辑设计与物理设计分开。

(2)开发过程中形成一套规范的文档,以便后期修改和维护。

结构化设计的缺点为开发周期长,系统难以适应环境的变化以及开发过程复杂繁琐。

结构化设计适用于组织相对稳定、业务处理过程规范、需求明确且在一定时期内不坏发生大的变化的大型复杂系统的开发,经验表明,当程序小于10万行时,结构化的程序设计比较成功。当程序大于10万行时,结构化程序表现不加,原因是当程序规模非常大时,程序代码编写耗时长,软件测试变得越来越困难,难以保证软件的可靠性。

自顶向下的程序设计方法存在如下问题。

(1)功能烟花困难。自上而下的方法穿件了符合最初的需求的较好的软件系统模型。

但是当系统改变或者增加新的需求是,功能结构变得越来越笨拙。由于软件被

设计为树形结构,修改与更新,通常要求广泛的“剪枝”与“嫁叶”,使系统维

护变得越来越困难。

(2)现实中的系统功能不容易描述。大型加护系统很难从功能方面进行刻画。很多大型系统没有“顶部”,例如,一个涉及数据查询、数据改变与保持数据一致性

的软件系统,如果按照功能化自向下的设计,则该系统可能被设计为一个基于

一个唯一的“虚拟”顶点并且会产生非常复杂的结构。

(3)功能化设计丢掉了数据与数据结构。自顶向下设计中捕捉不到所设计软件涉及的数据,通常,同样的数据被多个函数共享(如更新、删除、插入和询问数据

库表)。因为系统分解只突出问题的功能方面,数据结构对问题的影响被丢失了。

(4)由于功能设计得到的软件产品产生的可复用代码较少。自顶向下的设计连续不断的将系统分为越来越简单的程序模块。每个程序块被单独地分析确认,没有

太多地考虑系统的其他部分。但是每个程序单元的设计都仅仅考虑极为有限的

需求,因为这些特定的需求不太可能出现于下个问题,所以产生的设计与代码

没有普遍性与通用性,从而通常不可复用。

6.1.4 面向对象的软件体系结构

在结构化设计以及编程中,简单的程序可以由一个主程序中的一系列语句组成的一个较长的文件代表,而在负载的程序中,通过子程序或者函数执行一些特定的任务。通常情况下,程序中的数据可以被程序的任何语句或者函数访问,当程序很大时,这种做法意味着一个程序缺陷(bug)可能被传导到很远,导致程序难以调试和维护,另外,如果想在程序中添加一些新的功能也比较困难,因为用户必须清楚哪些函数对哪些数据进行了访问与修改。

相反,面对对象设计与编程方法可以使程序员将数据封装起来,使数据访问受到限制,也就是说数据不能被程序的其余部分不加限制的直接访问。任何一个函数都必须通过一个特殊的方法才能访问这些数据,该方法与数据一起被封装在一个结构体中。这种将数据与一系列访问与管理这些这些数据的方法结合在一起的结构体实际上就是本接种要介绍的对象

(Object).

可以认为,一个对象是将数据与那些为了访问和维护这些数据的操作(即函数方法)捆绑在议案七的一个实体,对象提供了一些简单易使用的、规范化的方法对其数据进行某种操作,而隐瞒了其具体的执行任务的繁琐细节,这样做的好处是,可以改变对象的内部结构或方法,而不需要修改程序的其余部分。

在面向对象设计中,系统看做由一些对象的集合组成(而不是由函数或者方法组成),消息从一个对象发送到另外一个对象,每一个对象都有其相关功能。面向对象体系结构图如图6.9所示。

图6.9 面向对象的体系结构图

1.对象与类的定义

面向对象的设计是在1972年由Parnas提出的,对象和类是面向对象设计的基本要素。软件系统的开发者创建类来代表系统的每个构建。这些通用的类被用来创建程序中所需要的每个对象的特定实例。对象可以通过使用方法互相进行交互。在类的实例没被创建以前,对象是不存在的,类仅仅是定义。当一个对象被具体的创建以后,随机存储器将会为该对象分配内存空间。一个类可以产生多个对象。

在C语言中哟若干原始数据类型,如float、int、char等,代表一些特定的数据类型。面向对象设计与面向对象编程(OOD/OOP)将原始的数据类型扩展到更高层次的对象。一个对象可以封装包括原始数据类型在内的各种数据类型。

在面向对象的设计与编程的书籍中,有很多对象与类的定义。下面给出常用的对象与类的定义。

一个对象是一个具有的状态(State,即包含数据)与行为(Behavior,如C++中的函数、Java中的方法)的实体。一个对象存储它的状态在域(例如通过Java类中的变量)中,并且通过方法(例如C++函数或者Java方法)暴露它的行为。方法对其所在对象的内部状态进行操作,并且是对象之间交流的主要机制。面向对象设计隐藏对象的内部状态。并且要求所有对象之间的交互都通过该对象方法,这叫做数据封装,是面向对象编程的基本原则。

在面向对象设计与编程中,一个类是一个结构体,使用该结构体可以产生该类的对象。一个类描述了使用该类创建的对象的共有状态与行为。一个类的对象也可以被称为该类的实例。

2.面向对象设计的特点

面相对象设计具有以下特点。

(1)封装性(Encapsulation):限制对特定信息的访问,例如,在Java中的私有属性。这些数据被封装在对象里面,只有通过该对象的特定方法才能访问这些数

据。

(2)继承性(Inheritance):共享同一个功能定义,例如通过Java类的继承获得超类的功能。继承性是一个对已经存在的类的复用的重要手段。

(3)动态绑定性(Dynamic Binding):通常在使用一个人层次类的时候,声明一个超类类型的变量,在程序运行以前,不知道创建哪个类的对象,而只是在运动

时才动态决定要生成的子类的对象和调用那个操作(方法或函数)。动态绑定是

面向对象程序设计的重要特点之一。

(4)复用与可维护性(Reuse and Maintenance):这是因为采用了封装与局部化。

(5)对象是对现实世界的抽象并且可以自己管理自己。对象中包含了数据与管理这些数据的方法。

(6)系统功能通过对象服务表示:对象的借口提供了一系列的方法,包括方法名、参数类型。在整个软件系统中有很多对象,每个对象所提供的方法提供了一些

服务。整各系统的功能通过所有的类提供的方法完成。

(7)共享数据区域被取消:在数据共享的主程序-子程序体系结构中,共享数据通常是全局变量。而在面向对象设计中,所有的数据都被封装在各个类之中,因此

不存在全局变量。也就是说,没有共享数据存在。

(8)对象可以是分布的:分布的对象通常指的是设计在一起工作的软件模板,但是位于被网络连接在一起的的多台计算机中或者在同一台计算机的不同过程中。

一个对象发送消息给一个远程计算机中的另一个对象或者过程,执行某一任务。

执行结果可以被传回到调用的对象。

对象通过函数或者方法调用互相交互,如图6.12即为两个类交互的示例。

图6.12 两个类交互的示例

为了实现两个类之间的交互,在应用程序中可以按照如下的代码顺序创建锁对象和钥匙对象,并且钥匙对象调用自己的open方法进行开锁。

3.面向对象编程的继承机制

在面向对象的编程技术中,继承是使用已经被定义了的类似以便形成新的类的一种法。

例如,图6.13为一个类的继承的实例。

图6.13 一个类的继承的实例

新的类(又叫派生类或者子类)继承其超类的已经存在的类的属性和行为。继承的主要目的是复用现有的代码。子类可以从其超类继承到属性与操作。除此之外,子类号可以拥有属于自己的属性与操作。

注意,在Java语言中,子类不可以直接访问其超类的private变量,但是可以直接访问超类的protected和public类型的变量。

继承:提供了一个统一的借口,使得多态与动态绑定很容易实现。但是,继承可能会增加复杂度。

4.面向对象设计的优缺点

面向对象设计具有如下优点。

(1)容易维护:因为一个对象将其内部表示对客户程序隐藏起来,所以可以改变其内部实现而不影响那些客户程序。

(2)可复用性好:对象为适合复用的构建。

(3)映射现实世界:对于许多软件系统都存在明显的现实世界的实体到系统的对象。

例如,在一个赛马管理软件系统中出现的Horse类,封装了赛马的名字、颜色、

年龄、性别等,就是对赛马现实世界的模拟。

(4)容易对一个系统进行剖分:面向对象设计将数据与数据访问、操纵方法绑定在一起形成类,由类产生对象。使得软件设计者将整个问题剖分为一系列的互相

交互的对象集合。例如,在游戏软件中,每个角色都可以使用一个对象来代表,

所以整个系统可以较为容易地剖分成例如Hero类与Monster类。

面向对象设计具有如下缺点。

(1)面向对象程序占用内存较大。这是因为在程序运行中,每个新被创建的对象都必须占用一块内存,而在面向对象程序中,往往有大量的对象被创建。因此和

结构化设计产生的程序相比较,面向对象程序占用内存更多。

(2)一个对象要和另外一个对象交互,该对象都必须知道另外一个对象的身份,包括对象名、方法名和参数类型等。

6.2 数据流风格软件体系结构

使用主程序-子程序与面向对象架构设计的程序由多个组件构成,组件之间通过相互调用实现系统的整体功能。与上述架构不同,本节要介绍的数据流风格体系结构中的组件通常是互相独立的,不存在一个组件调用另外一个组件的现象。程序的运行有数据流控制,这种体系结构被广泛地应用在数据处理软件领域。

本节首先介绍数据流系统(Dataflow System)的定义及基本特点,然后介绍两种典型的数据流风格体系结构,即顺序批处理体系结构(Batch Sequential Architecture)和管道-过滤器体系结构(Pipes-and-Filters Architecture)。

6.2.1 数据流系统与数据流风格软件体系结构概述

数据流系统是一个软件系统,在该系统中,数据的可用性控制计算(数据处理过程),过程间的数据有序流动决定了系统的结构。数据的流动方式是明确的。

在数据流系统中,一般情况下,数据可以任意方式流动,这样的数据流系统通常比较复杂。人们感兴趣的往往是相对简单的数据流动方式,,如近似线性的数据流动方式

(如图6.16所示)以及带有环形的流动方式(如图6.17所示)。

图6.16 数据流系统中的近似线性的数据流动方式

图6.17 数据库系统中的带有环形的数据流动方式

数据流系统的各软件组件在无数据到达时处于休眠状态,当有数据到达时,该软件组件被激活,开始对数据进行处理。软件工程师关心的是程序中控制流的轨迹。数据可以伴随着控制,但是数据不处于控制地位,重要的是程序的执行顺序。在系统设计中,人们关注数据是怎样流动的,关心数据的可用性、变幻与延迟。

数据流风格软件体系结构将整个软件系统看做由一系列作用在连续数据集合上的“变幻”组成。数据和作用于其上的操作是互相独立的。软件系统被分解为一些数据处理单位或称为组件,数据流控制数据处理顺序。在纯数据流系统中,过程间无其他的互动。数据流系统架构中的组件将其输入数据“变换”为对应的输出数据。可以使用I/O 流、I/O文件、缓冲(Buffer)、管道流,或者其他连接类型来实现子系统组件之间的连接。

数据流风格软件体系结构应用于定义明确的一系列带有有序输入与输出的独立数据变换,数据传输可以是整块的数据传输或者以数据流的形式进行。这些处理都不需要用户/系统交互。典型的实例是商业数据处理和编译器。

在数据流风格体系结构中,组件是高度独立的,不存在全局控制组件的行为。处理单元可以并发工作,甚至是在不同的计算机上并发工作,这个特点使其可以处理连续的流数据。数据流风格体系结构中的组件是可以被重复使用的,且在保证输入与输出接口都不变的情况下,可以独立修改一个组件,而不影响其他组件。

在实现数据流风格软件体系结构的软件时,需要特别注意组件之间的同步(Syncronization)问题。

6.2.2 顺序批处理软件体系结构

顺序批处理数据流系统(Batch Sequential Dataflow System)是数据流风格体系结构的一个类型。在该系统中,组件为独立的程序,并且这些组件按照先后顺序处理,即只有当一个组件的运行彻底结束以后,下一个组件才能开始执行。可以认为,数据在处理步骤之间的传输是成批(块)的,而不是以数据流的方式进行的。这也是“顺序批处理”名称的由来。

历史上,曾采用传统顺序批处理数据流系统进行数据处理。例如,在大型机年代,某些企业的商业数据处理可能采取顺序批处理的方式。原始数据被录制在数据卡片上,数据处理的步骤如图6.18所示。

传统的顺序批处理数据处理系统原理如图6.19所示。其主要特点是整个系统被分为多个处理过程(图中P1、P2、P3),各处理过程为独立的程序模块,每个处理过程都通过磁带或者磁盘进行输入与输出。

批处理系统具有如下特点。

(1) 每个处理程序模块都是互为独立的程序。

(2) 只有上一步程序彻底执行完成了,下一步程序才能开始。

(3) 数据作为一个整体进行传输。

(4) 因为以上的特点,所以不必对其组件进行同步处理。

(5) 因为几个组件只能按照顺序执行,而不能同步执行,所以性能可能比那些

能按照几个组件同时运行的程序要差一些。

(6) 使用顺序批处理架构设计的软件不适用于要求对数据进行实时处理的系统。 用读卡机读卡,产生数对数据盘进将数据处理

【精品实验报告】软件体系结构设计模式实验报告

【精品实验报告】软件体系结构设计模式实验报告软件体系结构 设计模式实验报告 学生姓名: 所在学院: 学生学号: 学生班级: 指导老师: 完成日期: 一、实验目的 熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括组合模式、外观模式、代理模式、观察者模式和策略模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。 二、实验内容 使用PowerDesigner和任意一种面向对象编程语言实现组合模式、外观模式、代理模式、观察者模式和策略模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。 (1) 组合模式 使用组合模式设计一个杀毒软件(AntiVirus)的框架,该软件既可以对某个文件夹(Folder)杀毒,也可以对某个指定的文件(File)进行杀毒,文件种类包括文本文件TextFile、图片文件ImageFile、视频文件VideoFile。绘制类图并编程模拟实现。 (2) 组合模式 某教育机构组织结构如下图所示: 北京总部 教务办公室湖南分校行政办公室 教务办公室长沙教学点湘潭教学点行政办公室

教务办公室行政办公室教务办公室行政办公室 在该教育机构的OA系统中可以给各级办公室下发公文,现采用 组合模式设计该机构的组织结构,绘制相应的类图并编程模拟实现,在客户端代码中模拟下发公文。(注:可以定义一个办公室类为抽象叶子构件类,再将教务办公室和行政办公室作为其子类;可以定义一个教学机构类为抽象容器构件类,将总部、分校和教学点作为其子类。) (3) 外观模式 某系统需要提供一个文件加密模块,加密流程包括三个操作,分别是读取源文件、加密、保存加密之后的文件。读取文件和保存文件使用流来实现,这三个操作相对独立,其业务代码封装在三个不同的类中。现在需要提供一个统一的加密外观类,用户可以直接使用该加密外观类完成文件的读取、加密和保存三个操作,而不需要与每一个类进行交互,使用外观模式设计该加密模块,要求编程模拟实现。参考类图如下: reader = new FileReader();EncryptFacadecipher = new CipherMachine();writer = new FileWriter();-reader: FileReader-cipher: CipherMachine-writer: FileWriter +EncryptFacade () +fileEncrypt (String fileNameSrc,: voidString plainStr=reader.read(fileNameSrc); String fileNameDes)String

软件体系结构总结

第一章:1、软件体系结构的定义 国内普遍看法: 体系结构=构件+连接件+约束 2、软件体系结构涉及哪几种结构: 1、模块结构(Module) 系统如何被构造为一组代码或数据单元的决策 2、构件和连接件结构(Component-And-Connector,C&C) 系统如何被设计为一组具有运行时行为(构件)和交互(连接件)的元素 3、分配结构(Allocation) 展示如何将来自于模块结构或C&C结构的单元映射到非软件结构(硬件、开发组和文件系统) 3、视图视点模型 视点(View point) ISO/IEC 42010:2007 (IEEE-Std-1471-2000)中规定:视点是一个有关单个视图的规格说明。 视图是基于某一视点对整个系统的一种表达。一个视图可由一个或多个架构模型组成 架构模型 架构意义上的图及其文字描述(如软件架构结构图) 视图模型 一个视图是关于整个系统某一方面的表达,一个视图模型则是指一组用来构建 4、软件体系结构核心原模型 1、构件是具有某种功能的可复用的软件结构单元,表示了系统中主要的计算元素和数据存储。 2.连接件(Connector):表示构件之间的交互并实现构件

之间的连接 特性:1)方向性2)角色3)激发性4)响应特征 第二章 1、软件功能需求、质量属性需求、约束分别对软件架构产生的影响 功能性需求:系统必须实现的功能,以及系统在运行时接收外部激励时所做出的行为或响应。 质量属性需求:这些需求对功能或整个产品的质量描述。 约束:一种零度自由的设计决策,如使用特定的编程语言。 质量原意是指好的程度,与目标吻合的程度,在软件工程领域,目标自然就是需求。 对任何系统而言,能按照功能需求正确执行应是对其最基本的要求。 正确性是指软件按照需求正确执行任务的能力,这无疑是第一重要的软件质量属性。质量属性的优劣程度反映了设计是否成功以及软件系统的整体质量。 系统或软件架构的相关视图的集合,这样一组从不同视角表达系统的视图组合在一起构成对系统比较完整的表达

软件体系结构课程报告

《软件体系结构》 一、课程性质与目的 通过本课程学习,旨在达到以下目标: 1帮助学生掌握需求分析的流程、方法以及技巧; 2帮助学生了解软件体系结构的基本概念,初步掌握中大型软件系统构架的分析与设计方法; 3使学生了解构建系统的目的是为了满足组织的需求,认识软件行业和开发组织在系统设计及其最终成败所起的作用,提高软件设计的基本素养; 4使学生了解常用软件设计模式的使用场景,解决方案; 5引导学生认识系统的性能、可用性、安全性等质量属性都是受软件构架制约的,或者说这些属性的实现影响着设计师的设计选择; 二、设计内容 下面题目将作为实习题贯穿需求分析和软件体系结构设计部分,以1人为一组,任选其中一个问题。采用适当的需求分析方法获取初步需求,题目选择如下: 问题A. 图书馆管理(R.A.Kemmerer) 一个小型图书馆管理系统,需完成以下工作: 1.借书,还书; 2.在图书馆中增加/删除一本书; 3.按照作者名或专业领域检索一批书; 4.找出被某位读者借出的一批书; 5.找出最近借走某本图书的读者. 该系统有两类用户:图书管理员与普通读者.功能4可供普通读者查找他们自己借出的书目.功能1,2,5只供图书管理员使用. 该系统必须满足以下限制: 1.馆中所有未借出的书籍能够供读者随时借阅. 2.在同一时刻,一本书不能既被借出,又可供借阅.

3.一个读者一次借出的书籍数目不能超过预定值. 问题B. 保温系统(S.White) 如果主开关置于”加热”状态,保温系统的控制器负责开关锅炉,监视锅炉系统的燃油流量和燃烧状态,进而调节进入房间的热量流.当室内温度降至(T r-2)0C以下,控制器启动锅炉.这里,T r是用户设置的理想室温. 锅炉启动过程如下: 1.控制器向锅炉的马达发信号. 2.控制器监视马达速度.马达达到正常操作速度时,启动点火并打开油阀. 3.控制器监视水温,一旦水温达到预定值,发信号打开水流循环阀.热水开始在室内循 环. 4.如果发生异常情况,燃油流量指示器和光感器向控制器发信号.此时控制器发信号关 闭系统. 5.一旦室内温度达到(T r +2)0C,控制器首先关闭油阀,延迟5s后关闭锅炉马达. 系统必须满足以下限制: 1.锅炉停机后重启必须延迟5min. 2.在主开关关闭或油阀关闭5s内应指示锅炉停机. 问题C. 字符串格式化(https://www.doczj.com/doc/1614209920.html,i) 给定非负整数MAXPOS和包含空格与换行作为分隔符的字符集.对字符串S,称两分隔符之间或分隔符到S的结尾处的非空字符串为字. 程序以有穷字符串为输入,输出满足以下条件的字符串: 1.如果输入串包含长度为MAXPOS+1的字,则输出串为一空格. 2.如果输入串的任何MAXPOS+1个相邻字符至少含有一个分隔符,则: 2-1 输入串的所有字以相同的次序出现在输出串中;并且,输出串不含有未在输入串中出现的字; 2-2 此外,输出串满足以下限制: 2-2-1 输出串中不出现前导和后导分隔符,也不出现相邻的分隔符. 2-2-2 任何MAXPOS+1个相邻字符中含有一个换行符; 2-2-3 对于输出串中的任意子串S,如果: (1) S的长度不超过MAXPOS;

体系结构实验报告

中南大学软件学院 软件体系结构 设计模式实验报告 学生姓名:宋昂 所在学院:软件学院 学生学号: 3901080115 学生班级:软件0801 指导老师:刘伟 完成日期: 2010-12-7

一、实验目的 熟练使用PowerDesigner和任意一种面向对象编程语言实现几种常见的设计模式,包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,理解每一种设计模式的模式动机,掌握模式结构,学习如何使用代码实现这些模式,并学会分析这些模式的使用效果。 二、实验内容 使用PowerDesigner和任意一种面向对象编程语言实现简单工厂模式、工厂方法模式、抽象工厂模式、单例模式和适配器模式,包括根据实例绘制模式结构图、编写模式实例实现代码,运行并测试模式实例代码。 (1) 简单工厂模式 使用简单工厂模式设计一个可以创建不同几何形状(Shape)的绘图工具类,如可创建圆形(Circle)、方形(Rectangle)和三角形(Triangle) 对象,每个几何图形都要有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个UnsupportedShapeException,绘制类图并编程实现。 (2) 简单工厂模式 使用简单工厂模式模拟女娲(Nvwa)造人(Person),如果传入参数“M”,则返回一个Man 对象,如果传入参数“W”,则返回一个Woman对象,使用任意一种面向对象编程语言实现该场景。现需要增加一个新的Robot类,如果传入参数“R”,则返回一个Robot对象,对代码进行修改并注意女娲的变化。 (3) 工厂方法模式 某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式,现使用工厂方法模式设计该系统。用代码实现日志记录器实例,如果在系统中增加一个中的日志记录方式——控制台日志记录(ConsoleLog),绘制类图并修改代码,注意增加新日志记录方式过程中原有代码的变化。

软件体系结构最新总结

1.软件危机:指在计算机软件的开发和维护过程中所遇到的一系列严重问题。 2.软件危机的表现:(重点) 1软件的成本日益增长 2开发进度难以控制 3软件质量差,4软件维护困难 3.软件危机的成因: 1用户需求不明确 2缺乏正确的理论指导 3软件规模越来越大 4软件复杂度越来越高 4.软件工程三个要素:方法、工具和过程 ---(重点) 5.软件重用是指在两次或多次不同的软件开发过程中重复使用相同或相近软件元素的过程。 6.软件元素包括程序代码、测试用例、设计文档、设计过程、需求分析文档甚至领域知识 7.构件:指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨 识的系统。即是具有一定功能,能够独立工作或能同其他构件装配起来协调工作的程序体。 8.构件分类方法归纳为三大类:关键字分类法,刻面分类法和超文本组织方法 ---(重点) 9.构件库系统是一个开放的公共构件共享机制,任何使用者都可以通过网络访问构件库。--- 判断 10.软件体系结构(software architecture --SA)记住英语单词及缩写----(重点) 定义:软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述、这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。11.软件体系结构的意义:---(简答) 1)体系结构是风险承担者进行交流的手段; 2)体系结构是早期设计决策的体现; 3)体系结构是可传递和可重用的模型 12.为什么体系结构是早期设计决策的体现---(简答) 1)软件体系结构明确了对系统实现的约束条件; 2)软件体系结构决定了开发和维护组织的组织结构; 3)软件体系结构制约着系统的质量属性; 4)软件体系结构通过研究软件体系结构可能预测软件的质量; 5)软件体系结构使推理和控制更改更加简单; 6)软件体系结构有助于循序渐进的原型设计; 7)软件体系结构可以作为培训的基础 13.软件体系结构技术的发展过程经历四个阶段:--选择,判断 (1)“无体系结构”设计阶段----以汇编语言进行小规模应用程序开发为特征。 (2)萌芽阶段-----以控制流图和数据流图构成软件结构为特征 (3)初期阶段-----出现了从不同侧面描述系统的结构模型,以UML为典型代表 (4)高级阶段-----描述系统的高层抽象结构,以提出的“4+1”模型为标志 14.软件体系结构模型5种:结构模型、框架模型、动态模型、过程模型和功能模型。---- 填空 15.“4+1”视图模型从五个不同的视角,包括逻辑试图,进程试图,物理视图,开发视图和 场景视图来描述软件体系结构。 -----记住名称及相应的功能 逻辑视图主要支持系统的功能需求,是系统提供给最终用户的服务。通过抽象,封装和继承,可以用对象模型来代表逻辑视图,用类图来描述逻辑视图; 开发视图也称模块视图,主要侧重于软件模块的组织和管理,主要考虑软件内部的需求,如软件开发的容易性、软件的重用等,通过系统输入输出关系的模型图和子系统图来描述,提供给编程人员的; 进程视图侧重于系统的运行特性,主要关注非功能性的需求,如系统的性能和可用性。进程视图强调并发性、分布性、系统集成性和容错能力管道和过滤器风格、客户/服务器风格等适合进程视图,提供给系统集成人员的; 物理视图主要考虑如何把软件映射到硬件上,它通常考虑系统性能、规模、可靠性等,解决

软件设计模式与软件体系结构实验报告

《软件体系结构》大作业(1) 学院:软件学院 课程名称:软件体系结构 专业班级: 学生姓名:学号: 学生姓名:学号: 指导教师: 完成时间:年月日 评分表 1、叙述各小组成员完成本题目的分工协作情况。 小组中的每个成员都先理解题目要求及涉及的设计模式,并一起完成代码编写。另外,组长负责文档制作。 2、评分表 序号姓名评分是否组长 1 2 作业正文需要包括以下内容: 1、作业题目内容的详细描述。 2、完成本题目所采用的软件设计模式名称及画出相应的类图,或者是所采用的 软件体系结构名称及画出相应的体系结构图。

3、画出完成本题目所设计程序的设计类图;如还有其他图,也一并画出。 4、完成本题目所设计的程序代码。 5、程序运行的典型界面截图

1、作业题目内容的详细描述。 【作业2.1-1】例2.3为使用工厂方法模式设计的汽车保险管理应用程序实例。现在需要 扩展例2.3的设计图,添加一个名为LuxuryCarInsurance的类,并且需要编写此类和其他需要添加的类的代码,详细要求参见光盘的相应作业部分。 【作业2.1-1】在例2.4中,设计并且实现了豪华(Super)和中等(Medium)别墅(House)与公寓(Condo)的查询。要求在该设计的基础上,增加一个新的类SemiDetacher(半独立式楼宇),并且编写代码,实现相应的查询功能,详细要求参见光盘的相应作业部分。 2、完成本题目所采用的软件设计模式名称及画出相应的类图,或者是所采用的软件体系结构名称及画出相应的体系结构图。 【作业2.1-1】采用的是工厂方法模式 【作业2.1-2】采用的是抽象方法模式

软件体系结构作业 完整版

第一章: 1.根据自己的经验,谈谈对软件危机的看法。 软件危机是指软件生产方式无法满足迅速增长的计算机需求,开发和维护过程出现的一系列问题。 以下几个原因导致:(1)软件自身特点 (2)开发人员的弱点 (3)用户需求不明 (4)缺乏正确理论指导 (5)开发规模越来越大 (6)开发复杂度越来越高 可以通过软件生命周期的模型和软件工具的使用来缓解危机,通过程序自动化和软件工业化生产的方法实现软件标准化的目标,进一步缓解软件危机带来的影响。 软件危机有利有弊,除了带来许多麻烦,也给我们带来许多挑战,克服危机的过程,我们在技术上和创新上都有了一个提升,也算是间接为软件产业的发展做了贡献。 2.什么是软件重用,软件重用的层次可以分为哪几个级别? 软件重用:是指在两次或多次不同的软件开发过程中重复使用相同或相似软件元素的过程。可以分为三个层次: (1)代码重用(2)设计结果重用(3)分析结果重用 3.什么是可重用构件?相对于普通的软件产品,对可重用构件有何特殊要求? 可充用构件表示软件重用过程中,可重用的软件构件元素。 可重用构件的特殊要求: (1)可重用构件应该具有功能上的独立性与完整性; (2)可重用构件应该具有较高的通用性; (3)可重用构件应该具有较高的灵活; (4)可重用构件应该具有严格的质量保证; (5)可重用构件应该具有较高的标准化程。 4.基于构件的软件开发的优势是什么?基于构件的软件开发面临哪些挑战和困难? 优势:基于构件的软件将软件开发的重点从程序编写转移到了基于已有构件的组装,更快地构造系统,减轻用来支持和升级大型系统所需要的维护负担,从而降低了软件开发的费 用 困难和挑战:没有可依据的参考,可用资源和环境缺乏,开发难度高,而各方面需求增长速度与日剧增,更新和升级的跟进是一个不小的挑战.此外,在同一系统采用多个开 发商提供的构件,它们之间的兼容性可能是开发过程中所要面对的一个严峻的问题挑战和困难:

《软件体系结构》课程报告

武汉工商学院 学生姓名:刘伟 学号:14404036 班级:14数据处理实验班指导教师:喻晓 2017年 4月 27日

目录 1. 软件体系结构设计与应用概述 (1) 1.1软件体系结构设计与应用现状 (1) 1.2本系统使用的技术概述 (1) 2. 软件体系结构分析 (3) 2.1软件体系结构风格 (3) 2.2“4+1”视图角度分析系统 (3) 2.3用例图 (5) 2.4类图 (6) 2.5构件图 (9) 2.6从技术角度分析实现的功能 (10) 2.7从系统角度分析实现的功能 (10) 3. 系统测试 (13) 3.1登录注册测试 (13) 3.2后台管理测试 (14) 3.3前台用户操作测试 (16) 总结 (18) 参考文献 (19)

1.软件体系结构设计与应用概述 1.1软件体系结构设计与应用现状 体系结构是以构件、构件之间的关系、构件与环境之间的关系为内容的某一系统的基本组织结构,以及指导上述内容设计与演化的原理。比较上述各种体系结构的定义,可以发现,尽管各种定义都从不同的角度关注软件体系结构,研究对象各有侧重,但其核心内容都是软件系统的结构。并且都涵盖了一些实体:构件、构件之间的交互关系、构件和连接件构成的拓扑结构、设计原理与指导方针。同时,这些实体应该满足一定的限制,遵循一定的设计规则,能够在一定的环境下进行演化。以这些实体为基础,软件休系结构能够从一个较高的层次上反映组成系统的构件、构件之间的交互,以及构件与构件交互所形成的拓扑结构。而且,软件体系结构应能为体系系统开发中的重要设计决策,提供不同角度的视图,便于不同角色人员之间的交流。 软件在进化过程中,对系统的需求会不断发生变化,对于常用的软件体系结构,往往需同步对系统构架进行修改;而正交软件体系结构中,由于线索的正交性,每一个需求变动仅影响某一条线索,而不会涉及到其他线索。这样,就把软件需求的变动局部化了,产生的影响也被限制在一定范围内,因此具有易于构建、便于开发与维护等优势。主要体现在: (l) 结构清晰、易于理解。正交软件体系结构的形式有利于理解。线索功能相互独立,不进行互相调用,结构简单、清晰。构件在结构图中的位置显示了它所实现的抽象级别和功能。 (2) 易修改、可维护性强。线索之间的相互独立性使得对一个线索的修改不会影响到其他线索。因此,当软件需求发生变化时,可以将新需求分解为独立的自需求,然后以线索和其中的构件为主要对象分别对各自需求进行处理,便于软件维护。 (3) 可移植性强,正交结构可以为一个领域内的所有应用程序所共享,这些软件有着相同或类似的层次和线索,可以实现体系结构级的重用。 (4) 结构容易调整。系统功能的增加或减少,只需相应的增删线索组件族,而不影响整个正交体系结构,因此能方便的实现结构调整软件技术概述。 1.2本系统使用的技术概述 (1)MySQL

软件设计与体系结构实验报告

福建农林大学计算机与信息学院 实验报告 课程名称:软件设计与体系结构 姓名:陈宇翔 系:软件工程系 专业:软件工程 年级:2007 学号:070481024 指导教师:王李进 职称:讲师 2009年12月16日

实验项目列表

福建农林大学计算机与信息学院实验报告 学院:计算机与信息学院专业:软件工程系年级:2007 姓名:陈宇翔 学号:070481024 课程名称:软件设计与体系结构实验时间:2009-10-28 实验室田实验室312、313计算机号024 指导教师签字:成绩: 实验1:ACME软件体系结构描述语言应用 一、实验目的 1)掌握软件体系结构描述的概念 2)掌握应用ACMESTUDIO工具描述软件体系结构的基本操作 二、实验学时 2学时。 三、实验方法 由老师提供软件体系结构图形样板供学生参考,学生在样板的指导下修改图形,在老师的指导下进行软件体系结构描述。 四、实验环境 计算机及ACMESTUDIO。 五、实验内容 利用ACME语言定义软件体系结构风格,修改ACME代码,并进行风格测试。 六、实验操作步骤 一、导入Zip文档 建立的一个Acme Project,并且命名为AcmeLab2。如下图:

接着导入ZIP文档,导入完ZIP文档后显示的如下图: 二、修改风格 在AcmeLab2项目中,打开families下的TieredFam.acme.如下图: 修改组件外观 1. 在组件类型中,双击DataNodeT; 在其右边的编辑器中,将产生预览;选择Modify 按钮,将打开外观编辑器对话框。 2. 首先改变图形:找到Basic shape section,在Stock image dropdown menu中选 择Repository类型. 3. 在Color/Line Properties section修改填充颜色为深蓝色。 4. 在颜色对话框中选择深蓝色,并单击 [OK]. 5. 修改图形的边框颜色为绿色 7. 单击Label tab,在Font Settings section, 设置字体颜色为白色,单击[OK] 产生的图形如下图:

软件体系结构综述

软件体系结构研究综述 班级:软件092 学号:17 姓名:陈世华摘要: 近年来,软件体系结构逐渐成为软件工程领域的研究热点以及大型软件系统与软件产品线开发中的关键技术之一.归纳了软件体系结构技术发展过程及其主要研究方向.在分析了典型的软件体系结构概念之后,给出了软件体系结构的定义.通过总结软件体系结构领域的若干研究活动,提出了软件体系结构研究的两大思路,并从7个方面介绍了软件体系结构研究进展.探讨了软件体系结构研究中的不足之处,并分析其原因.作为总结,给出了软件体系结构领域最有前途的发展趋势. 关键词: 软件体系结构;基于体系结构的软件开发;软件体系结构描述语言;软件体系结构描述方法;软件体系结构演化;软件体系结构发现;软件体系结构分析;软件体系结构验证;特定域软件体系结构(DSSA) Abstract: Software architecture (SA) is emerging as one of the primary research areas in software engineering recently and one of the key technologies to the development of large-scale software-intensive system and software product line system. The history and the major direction of SA are summarized, and the concept of SA is brought up based on analyzing and comparing the several classical definitions about SA. Based on summing up the activities about SA, two categories of study about SA are extracted out, and the advancements of researches on SA are subsequently introduced from seven aspects. Additionally, some disadvantages of study on SA are discussed, and the causes are explained at the same time. Finally, it is concluded with some significantly promising tendency about research on SA. Key words: software architecture; architecture-based development; architecture description language; architectural representation and description; architectural evolution and reuse; architectural discovery; architectural analysis; architectural verification and evaluation; domain-specific software architecture (DSSA)

软件体系结构实验报告

实验指导书 实验一 1、实验项目:软件体系结构设计(一) 某系统C/S风格客户端软件体系结构设计 2、实验目的:熟悉C/S风格的工作机制 3、实验内容:针对某个应用系统,选用C/S风格作为这个系统的软件体系结构 风格。熟悉C/S风格的工作机制,对所考察的系统进行C/S风格客户端软件体系结构设计。(针对不同的特定应用系统具体表述) 实验二 1、实验项目:软件体系结构设计(二) 某系统C/S风格服务器软件体系结构设计 2、实验目的:熟悉C/S风格的工作机制 3、实验内容:针对某个应用系统,选用C/S风格作为这个系统的软件体系结构 风格。熟悉C/S风格的工作机制,对所考察的系统进行C/S风格服务器软件体系结构设计。(针对不同的特定应用系统具体表述) 实验三 1、实验项目:UML建模 某系统UML建模 2、实验目的:深入理解UML建模的思想,熟悉UML建模方法 3、实验内容:作为实际应用前的一种演练,深入理解UML建模的思想,熟悉 UML建模方法,锻炼和培养分析问题、解决问题的能力。针对某个选定的应用系统,对其进行用例建模、对象类建模和状态图建模。 实验四 1、实验项目:某系统详细设计 2、实验目的:细化前期设计的有关结果,做出软件的详细规格说明 3、实验内容:详细设计(也叫过程设计)是软件设计的具体模块设计阶段,是 在作为软件开发前期设计的体系结构设计和总体设计的基础上进行的。目的是要细化前期设计的有关结果,做出软件的详细规格说明。要求具体地设计目标系统给个模块的实现过程。 实验五 1、实验项目:系统集成 2、实验目的:系统集成与总结 3、实验内容:综合考察前八次实验的内容,通盘考虑软件设计的整个过程,深 入理解软件体系结构的构建过程

软件架构总结

总结 本学期课程已上一半,在这半个学期内对所学前五章的知识进行系统的分析和归纳,总结如下。 第1章:软件体系结构概论 1.什么是软件危机,软件危机的具体表现有哪些? (1)软件危机:落后的软件生产方式无法满足迅速增长的计算机软件需求,从而导致软件开发与维护过程中出现一系列严重问题的现象。 (2)软件危机的表现:软件成本日益增长,开发进度难以控制,软件质量差,软件维护困难。 2.产生软件危机的原因,如何克服软件危机? (1)产生软件危机的原因有:用户需求不明确,缺乏正确的理论指导,软件规模越来越大,软件复杂度越来越高。 (2)如何克服软件危机:人们面临的不光是技术问题,更重要的是管理问题。要提高软件开发效率,提高软件产品质量,必须采用工程化的开发方法与生产技术。在技术上,应该采用基于重用的软件生产技术;在管理上,应该采用多维的工程管理模式。 3.构件:(components,也译为组件,部件): 是指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统;结构上,它是语义描述、通讯接口和实现代码的复合体。是具有某种功能的可重用的软件模板单元,表示了系统中主要的计算元素和数据存储。 4.软件体系结构的定义: 软件体系结构为软件系统提供了一个结构、行为和属性的高级抽象,由构成系统的元素的描述,这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。软件架构不仅指定了系统的组织结构和拓扑结构,并且显示了系统需求和构成系统的元素之间的对应关系,提供了一些设计决策的基本原理。 5.软件体系结构的意义 体系结构是风险承担者进行交流的手段,体系结构是早期设计决策的体现,它明确了对系统实现的约束条件,决定了开发和维护组织的组织结构,制约着系统的质量属性,可以预测软件的质量,是推理和控制更改更简单,有助于循序渐进的原型设计。同时,软件体系结构是可传递和可重用的模型。 6.软件体系结构的应用现状 1. 目前,软件体系结构领域研究非常活跃,归纳现有体系结构的研究活动,主要包括以下几个方面: (1)软件体系结构描述语言(2)体系结构构造与表示(3)体系结构分析、设计与验证(4)体系结构发现、演化与重用(5)基于体系结构的软件开发方法(6)特定领域的体系结构框架(7)软件体系结构支持工具(8)软件产品线体系结构(9)建立评价软件体系结构的方法。 2.架构分析、设计与验证,发现、演化与重用 架构分析的内容可分为结构分析、功能分析和非功能分析。生成一个满足软件需求的架构的过程即为架构设计。架构设计过程的本质在于将系统分解成相应的组成成分,并将这些成分重新组装成一个系统。架构设计有两大类方法:过程驱动方法和问题列表驱动方法。架构测试着重于仿真系统模型,解决架构层的主要问题。由于测试的抽象层次不同,架构测试策略可以分为单元/子系统/集成/验收测试等阶段的测试策略。架构发现从既存系统中提取软件的架构,属逆向工程。 架构重用属于设计重用,比代码重用更抽象。由于软件架构是系统的高层抽象,反映了系统的主要组成元素及其交互关系,因而较算法更稳定,更适合于重用。 软件架构演化是指由于系统需求、技术、环境、分布等因素的变化而导致软件架构的变动。软件系统在运行时的架构变化称为架构的动态性,而将架构的静态修改称为架构扩展。两者都是架构适应性和演化性的研究范畴。 第2章软件体系结构建模。 1.软件体系结构建模的种类

中南大学软件体系结构实验报告-实验1

实验1 UML实验 实验学时: 4 每组人数:1 实验类型:3 (1:基础性2:综合性3:设计性4:研究性) 实验要求:1 (1:必修2:选修3:其它) 实验类别:3 (1:基础2:专业基础3:专业4:其它) 一、实验目的 1.学会安装和使用建模工具PowerDesigner,熟练使用PowerDesigner绘制常用的UML 图形,熟悉常用的UML建模符号; 2.构建用例模型来描述软件需求,包括绘制用例图,撰写用例文档并制作用例检查矩阵; 3. 学习使用状态图描述对象的状态及转换; 4.学习使用活动图为业务流程建模; 5. 学习使用顺序图描述对象之间的交互; 6. 学习类图的绘制; 7. 学习从系统需求中识别类,并构建相应的面向对象模型; 8. 学习使用PowerDesigner实现正向工程和逆向工程; 9. 学习使用组件图描述每个功能所在的组件位置以及它们之间的关系; 10. 学习使用部署图描述软件中各个组件驻留的硬件位置以及这些硬件之间的交互关系。 二、实验内容 1. 某酒店订房系统描述如下: (1) 顾客可以选择在线预订,也可以直接去酒店通过前台服务员预订; (2) 前台服务员可以利用系统直接在前台预订房间; (3) 不管采用哪种预订方式,都需要在预订时支付相应订金; (4) 前台预订可以通过现金或信用卡的形式进行订金支付,但是网上预订只能通过信用卡进行支付; (5) 利用信用卡进行支付时需要和信用卡系统进行通信; (6) 客房部经理可以随时查看客房预订情况和每日收款情况。 绘制该酒店订房系统的用例图。 2. 根据以下场景绘制用例图: 某企业为了方便员工用餐,为企业餐厅开发了一个订餐系统(COS:Cafeteria Ordering System),企业员工可通过企业内联网使用该系统。该系统功能描述如下: (1) 企业的任何员工都可以查看菜单和今日特价;

软件体系结构总结

●什么是“软件体系结构”: 架构是以组件、组件之间的关系、组件与环境之间的关系为内容的某一系统的基本组织结构,以及指导上述内容设计与演化的原理。 ●SA概念两大流派: 决策派是在一些重要方面所作出的决策集合 组合派将系统描述为组件及组件之间的交互 ●软件体系结构核心模型: ●构件的定义: 构件是指语义完整、语法正确和有可重用价值的单位软件,是软件重用过程中可以明确辨识的系统;结构上,它是语义描述、通讯接口和实现代码的复合体。 ●RUP 4+1视图: 逻辑视图(Logical View):逻辑试图主要是用来描述系统的功能需求,即系统提供给最终用户的服务. 在逻辑视图中,系统分解成一系列的功能抽象、功能分解与功能分析,这些主要来自问题领域(Problem Definition)。在面向对象技术中,通过抽象、封装、继承,可以用对象模型来代表逻辑视图,可以用类图(Class Diagram)来描述逻辑视图。 过程视图(Process View):进程试图侧重系统的运行特性,关注非功能性的需求(性能,可用性)。服务于系统集成人员,方便后续性能测试。强调并发性、分布性、集成性、鲁棒性(容错)、可扩充性、吞吐量等。定义逻辑视图中的各个类的具体操作是在哪一个线程(Thread)中被执行。 物理视图(Physical View):物理试图主要描述硬件配置。服务于系统工程人员,解决系统的拓扑结构、系统安装、通信等问题。主要考虑如何把软件映射到硬件上,也要考虑系统性能、规模、可靠性等。可以与进程视图一起映射。 开发视图(Development View):开发视图主要用来描述软件模块的组织与管理(通过程序库或子系统)。服务于软件编程人员,方便后续的设计与实现。它通过系统输入输出关系的模型图和子系统图来描述。要考虑软件的内部需求:开发的难易程度、重用的可能性,通用性,局限性等等。开发视图的风格通常是层次结构,层次越低,通用性越好(底层库:Java SDK,图像处理软件包)。场景(Scenarios):场景用于刻画构件之间的相互关系,将四个视图有机地联系起来。可以描述一个特定的视图内的构件关系,也可以描述不同视图间的构件关系。文本、图形表示皆可。(小结:逻辑视图、开发视图,都主要是用来描述系统的静态结构。进程视图、物理视图,主要是用来描述系统的动态结构。并非每个系统都必须把5个视图都画出来,而是各有侧重。例如MIS系统侧重于逻辑视图、开发视图,而实时控制系统则侧重于进程视图、物理视图。) ●体系结构描述语言: 专门的语言,用于支持严格的体系结构描述,形式的、(半)自动的分析和代码生成。例如ACME(Component, Connector, Port, Role, System) ●软件体系结构风格:是描述某一特定应用领域中系统组织方式的惯用模式。 ●软件体系结构风格分类: 数据流系统(批处理系统,管道/过滤器系统) 调用/返回系统(主程序/子程序系统,面向对象系统,层次风格)独立构件(进程通信,事件系统) 虚拟机(解释器,基于规则的系统) 数据为中心的系统(数据库,超文本系统,黑板系统) ●客户/服务器风格: 优点:(1)C/S 体系结构具有强大的数据操作和事务处理能力,模型思想简单,易于人们理解和接受。(2)系统的客户应用程序和服务器构件分别运行在不同的计算机上,系统中每台服务器都可以适合各构件的要求,这对于硬件和软件的变化显示出极大的适应性和灵活性,而且易于对系统进行扩充和缩小。(3)在C/S 体系结构中,系统中的功能构件充分隔离,客户应用程序的开发集中于数据的显示和分析,而数据库服务器的开发则集中于数据的管理,不必在每一个新的应用程序中都要对一个DBMS进行编码。将大的应用处理任务分布到许多通过网络连接的低成本计算机上,以节约大量费用。 缺点:(1)开发成本较高(2)客户端程序设计复杂(3)信息内容和形式单一(4)用户界面风格不一,使用繁杂,不利于推广使用(5)软件移植困难(6)软件维护和升级困难(7)新技术不能轻易应用。 ●三层客户/服务器风格: 表示层:应用的用户接口部分,担负着用户与应用间的对话功能功能层:应用的本体,将具体的业务逻辑编入程序 数据层:负责管理对数据库数据的读写 优点:(1)允许合理地划分三层结构的功能,使之在逻辑上保持相对独立性,能提高系统和软件的可维护性和可扩展性。(2)允许更灵活有效地选用相应的平台和硬件系统,使之在处理负荷能力上与处理特性上分别适应于结构清晰的三层;并且这些平台和各个组成部分可以具有良好的可升级性和开放性。(3)应用的各层可以并行开发,可以选择各自最适合的开发语言。(4)利用功能层有效地隔离开表示层与数据层,未授权的用户难以绕过功能层而利用数据库工具或黑客手段去非法地访问数据层,为严格的安全管理奠定了坚实的基础。 注意点:(1)三层C/S结构各层间的通信效率若不高,即使分配给各层的硬件能力很强,其作为整体来说也达不到所要求的性能。(2)设计时必须慎重考虑三层间的通信方法、通信频度及数据量。这和提高各层的独立性一样是三层C/S结构的关键问题。

0308软件体系结构实验报告

河南工业大学实验报告 (2015~2016学年-第2学期) 课程名称:软件体系结构课程编号:51610192地点:6313/6316/6308/6320 一、实验目的: 验证C/S风格的工作机制。 二、实验内容: 针对某个应用系统,选用C/S风格作为这个系统的软件体系结构风格。熟悉C/S风格的工作机制,对所考察的系统进行C/S风格客户端软件体系结构设计的验证。(针对不同的特定应用系统具体表述)。 三.编程环境 Windows 7 Visual Studio | Dev-C++ Eclipse 四.实验代码 1.画棋盘 // 画横线 for (int i = 0; i <= ROWS; i++) { g.drawLine(MARGIN, MARGIN+ i * GRID_SPAN, MARGIN+ COLS* GRID_SPAN, MARGIN + i * GRID_SPAN); } for (int i = 0; i <= COLS; i++) {// 画竖线 g.drawLine(MARGIN + i * GRID_SPAN, MARGIN, MARGIN + i * GRID_SPAN, MARGIN + ROWS * GRID_SPAN); } 2.将鼠标点击转为网格索引 publicvoid mouseMoved(MouseEvent e) {

int x1 = (e.getX() - MARGIN + GRID_SPAN / 2) / GRID_SPAN; // 将鼠标点击的坐标位置转成网格索引 int y1 = (e.getY() - MARGIN + GRID_SPAN / 2) / GRID_SPAN; if (x1 < 0 || x1 >ROWS || y1 < 0 || y1 >COLS || gameOver || findChess(x1, y1)) setCursor(new Cursor(Cursor.DEFAULT_CURSOR)); // 设置成默认状态 else setCursor(new Cursor(Cursor.HAND_CURSOR)); } 3.增加棋子 // ********************** 增加黑色棋子 public Point[] BlackAddChess(int x, int y) { if (!isBlack) { String msg = String.format("黑子已经落子,轮到白子"); JOptionPane.showMessageDialog(this, msg); returnnull; } else return addChess(x, y); } // ********************** 增加白色棋子 public Point[] WhiteAddChess(int x, int y) { if (isBlack) { String msg = String.format("白子已经落子,轮到黑子"); JOptionPane.showMessageDialog(this, msg); returnnull; } else return addChess(x, y); } 4.悔棋 publicvoid goback() { if (chessCount == 0) return; chessList[chessCount - 1] = null; chessCount--; if (chessCount> 0) { xIndex = chessList[chessCount - 1].getX(); yIndex = chessList[chessCount - 1].getY(); } isBlack = !isBlack;

软件体系结构课后作业及答案

1、就项目管理方面而言,软件重用项目与非重用项目有哪些不同之处。 答:使用软件重用技术可减少重复工作,提高软件生产率, 缩短开发周期。同时,由于软构建大多经过严格的质量认证,因此有助于改善软件质量,大量使用构建,软件的灵活性和标准化程度可得到提高。 2、实际参与/组织一个软件重用项目的开发,然后总结你是如何组织该项目的开发的 答:参加了一个网页管理系统的开发,该项目重复使用已有的软件产品用于开发新的软件系统,以达到提高软件系统的开发质量与效率,降低开发成本的目的。在过程中使用了代码的复用、设计结果的复用、分析结果的复用、测试信息的复用等。 3、为什么要研究软件体系结构? 答:1.软件体系结构是系统开发中不同参与者进行交流和信息传播的媒介。 2.软件体系结构代表了早期的设计决策成果。 3.软件体系结构可以作为一种可变换的模型。 4、根据软件体系结构的定义,你认为软件体系结构的模型应该由哪些部分组成? 答:构件(component)可以是一组代码,如程序的模块;也可以是一个独立的程序(如数据库的SQL服务器); 连接件(connector)是关系的抽象,用以表示构件之间的相互作用。如过程调用、管道、远程过程调用等; 限制(constrain):用于对构件和连接件的语义说明。 5、在软件体系结构的研究和应用中,你认为还有哪些不足之处? 答:(1)缺乏同意的软件体系结构的概念,导致体系结构的研究范畴模糊。 (2)ADL繁多,缺乏同意的ADL的支持。 (3)软件体系结构研究缺乏统一的理论模型支持。 (4)在体系结构描述方便,尽管出现了多种标准规范或建议标准,但仍很难操作。 (5)有关软件体系结构性质的研究尚不充分,不能明确给出一个良体系结构的属性或判定标准,没有给出良体系结构的设计指导原则,因而对于软件开发实践缺乏有力的促进作用。 (6)缺乏有效的支持环境软件体系结构理论研究与环境支持不同步,缺乏有效的体系结构分析、设计、方针和验证工具支持,导致体系结构应用上的困难。 (7)缺乏有效的体系结构复用方案。 (8)体系结构发现方法研究相对欠缺。 1、选择一个规模合适的系统,为其建立“4+1”模型。 逻辑视图(Logical View),设计的对象模型(使用面向对象的设计方法时)。 过程视图(Process View),捕捉设计的并发和同步特征。 物理视图(Physical View),描述了软件到硬件的映射,反映了分布式特性。 开发视图(Development View),描述了在开发环境中软件的静态组织结构。 架构的描述,即所做的各种决定,可以围绕着这四个视图来组织,然后由一些用例(use cases)或场景(scenarios)来说明,从而形成了第五个视图。

相关主题
文本预览
相关文档 最新文档