软件体系结构设计风格 软件体系结构的风格 - 电脑|办公 - 电脑办公-杀毒安全-网络-V3学习网
微商网
 
 
导航:首页 |电脑|办公|正文

软件体系结构设计风格 软件体系结构的风格

时间:2021-04-16 10:46:45
软件体系结构的设计是什么呢? 整个软件开发过程中关键的一步。对于当今世界上庞大而复杂的系统来说,没有一个合适的体系结构而要有一个成功的软件设计几乎是不可想象的。不同类型的系统需要不同的体系结构,甚至一
作者:

软件体系结构设计风格

软件体系结构的设计是什么呢?

整个软件开发过程中关键的一步。

对于当今世界上庞大而复杂的系统来说,没有一个合适的体系结构而要有一个成功的软件设计几乎是不可想象的。

不同类型的系统需要不同的体系结构,甚至一个系统的不同子系统也需要不同的体系结构。

体系结构的选择往往会成为一个系统设计成败的关键。

典型的软件体系结构风格有很多。

例如,设计图形用户界面(GUI)常用的事件驱动风格、设计操作系统常用的层次化设计风格、设计编译程序常用的管道与过滤器风格、设计分布式应用程序常用的客户机/服务器风格等。

一个实用的软件系统通常是几种典型体系结构风格的组合[1]。

近年来,我们致力于软件体系结构理论和实践应用研究,取得了一些初步成绩。

在第2节中,我们将给出

软件体系结构风格的C2风格的实现例子,说明其实现过程和方法~~~

C2风格 UDP 的局域网聊天程序C++版首先要说明的是:这个程序分Server和Client两部分,但是和网上流行的Server与Client聊天不同,它是实现的Client与Client 聊天,Server 仅仅提供消息转发功能,因此执行程序时,首先必须有两台以上的电脑来执行,必须保证两个Client(Client程序是相同的,因此只要复制两个Client就行)在不同的局域网上的电脑,局域网中只要有一个Server就行,通过输入IP以及确认码(其实就是端口号,要保证两个Client的端口号相同,且两个Client的IP地址不同,即不在同一电脑上),就能实现一个Client和另一个Client聊天(当然Server必须运行,且必须按提示输入信息),本程序基于UDP协议,并且利用多线程编程实现了程序的背景音乐(系统的Beep声音必须打开才能听见)以及正常退出功能(点右上角的“差”是非正常退出!),当初设计的时候使得两个Client端口号必须相同,今后会设计出两个Client端口号不同,这样就能在一台机子上执行程序了

编译器采用什么软件体系结构风格

软件架构:整个软件系统的各个模块之间的结构设计,是软件工程范畴的概念,就象设计一栋房子由几个什么样的板块组成一样。

软件体系结构:是软件编程风格范畴的一个通俗概念,比如说用C++、PoworBuild、Delphi等来进行软件设计是面向对象的编程语言体系结构,而Basic、C、Foxbase的软件体系结构特点是面向任务流程的(不是面向对象的编程语言)。

什么是软件系统架构设计

软件架构(software architecture)是一系列相关的抽象模式,用于指导大型软件系统各个方面的设计。

软件架构是一个系统的草图。

软件架构描述的对象是直接构成系 统的抽象组件。

各个组件之间的连接则明确和相对细致地描述组件之间的通讯。

在实现阶段,这些抽象组件被细化为实际的组件,比如具体某个类或者对象。

在面向 对象领域中,组件之间的连接通常用接口_(计算机科学)来实现。

软件体系结构是构建计算机软件实践的基础。

与建筑师设定建筑项目的设计原则和目标,作为绘图员画图的基础一样,一个软件架构师或者系统架构师陈述软件构架以作为满足不同客户需求的实际系统设计方案的基础。

软件构架是一个容易理解的概念,多数工程师(尤其是经验不多的工程师)会从直觉上来认识它,但要给出精确的定义很困难。

特别是,很难明确地区分设计和构架:构架属于设计的一方面,它集中于某些具体的特征。

在“软件构架简介”中,David Garlan 和 Mary Shaw 认为软件构架是有关如下问题的设计层次:“在计算的算法和数据结构之外,设计并确定系统整体结构成为了新的问题。

结构问题包括总体组织结构和全局控制结构;通信、同步和数据访问的协议;设计元素的功能分配;物理分布;设计元素的组成;定标与性能;备选设计的选择。

但构架不仅是结构;IEEE Working Group on Architecture 把其定义为“系统在其环境中的最高层概念”。

构架还包括“符合”系统完整性、经济约束条件、审美需求和样式。

它并不仅注重对内部的考虑,而且还在系统的用户环境和开发环境中对系统进行整体考虑,即同时注重对外部的考虑。

在Rational Unified Process 中,软件系统的构架(在某一给定点)是指系统重要构件的组织或结构,这些重要构件通过接口与不断减小的构件与接口所组成的构件进行交互。

从和目的、主题、材料和结构的联系上来说,软件架构可以和建筑物的架构相比拟。

一个软件架构师需要有广泛的软件理论知识和相应的经验来事实和管 理软件产品的高级设计。

软件架构师定义和设计软件的模块化,模块之间的交互,用户界面风格,对外接口方法,创新的设计特性,以及高层事物的对象操作、逻辑和流程。

一般而言,软件系统的架构(Architecture)有两个要素: 它是一个软件系统从整体到部分的最高层次的划分。

一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。

详细地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(Task-flow)。

所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。

建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。

建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行详细设计甚至建造,这些决定就很难更改甚至无法更改。

显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。

请问软件架构与软件体系结构有什么关系?

一个系统通常是由元件组成的,而这些元件如何形成、相互之间如何发生作用,则是关于这个系统本身结构的重要信息。

具体地说,就是要包括架构元件(Architecture Component)、联结器(Connector)、任务流(Task-flow)。

所谓架构元素,也就是组成系统的核心"砖瓦",而联结器则描述这些元件之间通讯的路径、通讯的机制、通讯的预期结果,任务流则描述系统如何使用这些元件和联结器完成某一项需求。

·建造一个系统所作出的最高层次的、以后难以更改的,商业的和技术的决定。

在建造一个系统之前会有很多的重要决定需要事先作出,而一旦系统开始进行具体设计甚至建造,这些决定就很难更改甚至无法更改。

显然,这样的决定必定是有关系统设计成败的最重要决定,必须经过非常慎重的研究和考察。

计算机软件的历史开始于五十年代,历史非常短暂,而相比之下建筑工程则从石器时代就开始了,人类在几千年的建筑设计实践中积累了大量的经验和教训。

建筑设计基本上包含两点,一是建筑风格,二是建筑模式。

独特的建筑风格和恰当选择的建筑模式,可以使一个独一无二。

下面的照片显示了中美洲古代玛雅建筑,Chichen-Itza大金字塔,九个巨大的石级堆垒而上,九十一级台阶(象征着四季的天数)夺路而出,塔顶的神殿耸入云天。

所有的数字都如日历般严谨,风格雄浑。

难以想象这是石器时代的建筑物。

图1、位于墨西哥Chichen-Itza(在玛雅语中chi意为嘴chen意为井)的古玛雅建筑。

(摄影:作者)软件与人类的关系是架构师必须面对的核心问题,也是自从软件进入历史舞台之后就出现的问题。

与此类似地,自从有了建筑以来,建筑与人类的关系就一直是建筑设计师必须面对的核心问题。

英国首相丘吉尔说,我们构造建筑物,然后建筑物构造我们(We shape our buildings, and afterwards our buildings shape us)。

英国下议院的会议厅较狭窄,无法使所有的下议院议员面向同一个方向入座,而必须分成两侧入座。

丘吉尔认为,议员们入座的时候自然会选择与自己政见相同的人同时入座,而这就是英国政党制的起源。

Party这个词的原意就是"方"、"面"。

政党起源的要害就是建筑物对人的影响。

在软件设计界曾经有很多人认为功能是最为重要的,形式必须服从功能。

与此类似地,在建筑学界,现代主义建筑流派的开创人之一Louis Sullivan也认为形式应当服从于功能(Forms follows function)。

几乎所有的软件设计理念都可以在浩如烟海的建筑学历史中找到更为遥远的历史回响。

最为闻名的,当然就是模式理论和XP理论。

架构的目标是什么正如同软件本身有其要达到的目标一样,架构设计要达到的目标是什么呢?一般而言,软件架构设计要达到如下的目标:·可靠性(Reliable)。

软件系统对于用户的商业经营和治理来说极为重要,因此软件系统必须非常可靠。

·安全行(Secure)。

软件系统所承担的交易的商业价值极高,系统的安全性非常重要。

·可扩展性(Scalable)。

软件必须能够在用户的使用率、用户的数目增加很快的情况下,保持合理的性能。

只有这样,才能适应用户的市场扩展得可能性。

·可定制化(Customizable)。

同样的一套软件,可以根据客户群的不同和市场需求的变化进行调整。

·可扩展性(Extensible)。

在新技术出现的时候,一个软件系统应当答应导入新技术,从而对现有系统进行功能和性能的扩展·可维护性(Maintainable)。

软件系统的维护包括两方面,一是排除现有的错误,二是将新的软件需求反映到现有系统中去。

一个易于维护的系统可以有效地降低技术支持的花费·客户体验(Customer Experience)。

软件系统必须易于使用。

·市场时机(Time to Market)。

软件用户要面临同业竞争,软件提供商也要面临同业竞争。

以最快的速度争夺市场先机非常重要。

架构的种类根据我们关注的角度不同,可以将架构分成三种:·逻辑架构、软件系统中元件之间的关系,比如用户界面,数据库,外部系统接口,商业逻辑元件,等等。

比如下面就是笔者亲身经历过的一个软件系统的逻辑架构图 图2、一个逻辑架构的例子从上面这张图中可以看出,此系统被划分成三个逻辑层次,即表象层次,商业层次和数据持久层次。

每一个层次都含有多个逻辑元件。

比如WEB服务器层次中有Html服务元件、session服务元件、安全服务元件、系统治理元件等。

·物理架构、软件元件是怎样放到硬件上的。

比如下面这张物理架构图描述了一个分布于北京和上海的分布式系统的物理架构,图中所有的元件都是物理设备,包括网络分流器、代理服务器、WEB服务器、应用服务器、报表服务器、整合服务器、存储服务器、主机等等。

图3、一个物理架构的例子·系统架构、系统的非功能性特征,如可扩展性、可靠性、强壮性、灵活性、性能等。

系统架构的设计要求架构师具备软件和硬件的功能和性能的过硬知识,这一工作无疑是架构设计工作中最为困难的工作。

此外,从每一个角度上看,都可以看到架构的两要素:元件划分和设计决定。

首先,一个软件系统中的元件首先是逻辑元件。

这些逻辑元件如何放到硬件上,以及这些元件如何为整...

大家还关注
    
阅读排行
推荐阅读