当前位置: 首页 > 编程日记 > 正文

初识软件体系结构(1-4课时)

前四个课时的内容是“软件体系结构概述”。
LW老师的讲课带劲,逻辑性强,也接地气,节奏不快不慢,很nice~

  1. 软件架构师
    这门课最对口的职业是软件架构师,软件架构师是工作在项目经理和程序员之间,既要懂需求,又要懂技术。一边领着高收入,一边也要承担高风险。一个建筑工程失败,首先被问责的一定是包工头和建筑设计师,不会是某个建筑工人。同样,一个软件项目失败,最先被找的一定是项目经理和架构师。与建筑领域不同的是,一个建筑工人不会因为搬砖又快又好就成为建筑设计师,而一个软件架构师必须成长于一线程序员,起码有几年的项目经验。
    有句话说,架构师要做的就是让编程从问答题变成选择题。

  2. 软件体系结构的意义
    要想真正明白一个东西的好,得失去了才行。如果没有体系结构,软件工程会是什么样子?有句话说,软件项目越大,编程开始得越早,死得越快。可想而知,当一件事已经大到称为工程,不做设计就开始施工,必然是一种冒险。体系结构真是为填补从需求到实现之间的鸿沟应运而生。

  3. 本门课程涉及的内容
    软件体系结构+UML统一建模语言+软件设计模式
    其中软体对应SDLC中的概要设计和部分详细设计(例如算法就不包括在其中)
    UML是手段,软件架构师需要以一种规范的方式将架构传达给别人。
    设计模式是经过前人总结的精华,但是滥用还不如不用,真正实用设计模式的高手可以达到这样的境界:也不知道用了什么设计模式,只知道现在方案是最好的。一翻书发现用了很多设计模式。

  4. 软件体系结构的定义
    其实业界还没有统一的定义,下面提一些认可度高的。
    软体的创始人给出的定义:
    Mary Shaw和David Garlan认为软件体系结构包括构成系统的设计元素的描述,设计元素的交互,设计元素组合的模式,以及在这些模式中的约束。

  5. 软件体系结构三要素
    三要素:构件,连接件,约束。
    即3C:component,connector,constraint。
    5.1 构件
    可预制(提前设计好)和可重用(重要目的)的软件部件,指计算单元和数据存储单元,可以是一个处理过程或数据元素。
    计算单元可以是数据库里的一张表,也可以是整个数据库。
    构建可以小到一个类,大到一个子系统。
    特点:可大可小可复用。
    5.2 连接件
    用来建模:构件与构件之间的相互作用,控制这些相互作用的规则。
    最简单的连接件是类与类之间的互相调用。
    简单相互作用:
    过程的调用
    访问共享变量
    复杂和语义相关的相互作用:
    客户端-服务器协议
    数据库访问协议
    异步事件的多点传送
    管道数据流
    5.3 约束
    描述了体系结构的配置和拓扑要求,配置或拓扑是指构件和连接件组成的一个连接图。该连接图用于描述软件体系结构的构成,确定构件和连接件之间的连接关系:
    正确的连接性
    并发和分布性
    符合设计的启发式和风格规则

  6. 软件体系结构的优势
    6.1. 容易理解
    所谓一图抵千言
    ①它从一个高层设计的抽象层次来表征一个系统
    简化了我们理解庞大系统的能力
    6.2.重用
    ①重用大的构件
    ②重用一些集成构件的框架
    ③特定领域的软件体系结构
    (像银行系统侧重安全性,医疗系统侧重可靠性和稳定性)
    ④设计模式(设计模式诞生之初就是为了重用)
    6.3.控制成本
    容易想到,理解越深入,控制越精准
    系统维护者可以更好的理解变更带来的影响,因而可以更加精确的估算变更所需的成本。
    6.4.可分析性
    ①对系统的一致性检查提供高层次的视图
    ②研究系统是否与某种体系结构风格相符合
    ③对符合特定风格的特定领域系统的体系结构分析
    ④分析依赖于其中的构件

相关文章:

window.open和window.location.href的几种用法

windows.open("URL","窗口名称","窗口外观设定");<A href"javascript:window.open(webpage.asp,_self)"> 点击这里 </A><a οnclick"window.open(webpage.asp,_self);void 0" href"#"> 点击这里…

React.js绑定this的5种方法

this在javascript中已经相当灵活&#xff0c;把它放到React中给我们的选择就更加困惑了。下面一起来看看React this的5种绑定方法。 1.使用React.createClass 如果你使用的是React 15及以下的版本&#xff0c;你可能使用过React.createClass函数来创建一个组件。你在里面创建的…

四月青少年编程组队学习(图形化四级)Task03

电子学会 软件编程&#xff08;图形化&#xff09;四级 组队学习 试题来源&#xff1a; 青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&#xff09;【2019.12】青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&am…

对于正交频分复用的异构网络的理解

正交 来看百度百科的定义—— 物理中&#xff1a;运动的独立性&#xff0c;也可以用正交来解释。正交频分复用 来看百度百科的定义—— 将信道分成若干正交子信道&#xff0c;将高速数据信号转换成并行的低速子数据流&#xff0c;调制到在每个子信道上进行传输。正交信号可以通…

java网页抓取

网页抓取就是&#xff0c;我们想要从别人的网站上得到我们想要的&#xff0c;也算是窃取了&#xff0c;有的网站就对这个网页抓取就做了限制&#xff0c;比如百度 直接进入正题 1 //要抓取的网页地址2 String urlStr "http://**************/center";3 URL url new…

四月青少年编程组队学习(图形化四级)Task05

电子学会 软件编程&#xff08;图形化&#xff09;四级 组队学习 试题来源&#xff1a; 青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&#xff09;【2019.12】青少年软件编程&#xff08;Scratch&#xff09;等级考试试卷&#xff08;四级&am…

Python列表split方法

转载自&#xff1a;https://www.cnblogs.com/douzi2/p/5579651.html 1、split翻译为分裂。 split()就是将一个字符串分裂成多个字符串组成的列表。 2、split()当不带参数时以空格进行分割&#xff0c;当带参数时&#xff0c;以该参数进行分割。 a、当不带参数时 st0 song …

顶级数据库管理系统的性能比较研究(论文翻译)

本文译自 《A Comparative Study on the Performance of the Top DBMS Systems 》Youssef Bassil LACSC – Lebanese Association for Computational Sciences Registered under No. 957, 2011, Beirut, Lebanon 摘要 数据库管理系统是当今将数据组织成可以搜索和更新的集合地…

debugger 调试的一些经验

1. 如果没有firebug &#xff0c; 可以用firebug-lite.js 内嵌的调试方式。 2. console.log 不是所有浏览器都支持console.log 在IE或者没有调试窗口的浏览器中&#xff0c;console.log会undefined var db {switch:true} db.log function(){if(!this.switch) return ;if( typ…

spring boot 2.0 源码分析(二)

在上一章学习了spring boot 2.0启动的大概流程以后&#xff0c;今天我们来深挖一下SpringApplication实例变量的run函数。 先把这段run函数的代码贴出来&#xff1a; /*** Run the Spring application, creating and refreshing a new* {link ApplicationContext}.* param args…

四月青少年编程组队学习(Python一级)Task01

电子学会 软件编程&#xff08;Python&#xff09;一级 组队学习 试题来源 青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;【2020.06】青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;【202…

hung-yi lee_p1_机器学习是什么

文章目录1.你想找什么样的函式2.怎么告诉机器你想找什么样的函式3.机器怎么找出你想要的函式机器学习就是自动找函式1.你想找什么样的函式 Regression(回归)——想找的函式输出是一个数值 Binary Classification——想找的函式输出是Yes or No(Pos or Neg) Multi-class Classi…

excel导入SQL脚本

exec sp_configure show advanced options,1 reconfigure exec sp_configure Ad Hoc Distributed Queries,1 reconfigure SELECT * INTO tmp_asset FROM OPENROWSET(Microsoft.Jet.OLEDB.4.0, Excel 8.0;Databased:\Excel数据源\资产印章.xls, SELECT * FROM [Sheet1$]) ; 转…

Hadoop hdfs完全分布式搭建教程

本文转载自&#xff1a;https://www.cnblogs.com/ysocean/p/6965197.html 1、安装环境 ①、四台Linux CentOS6.7 系统 hostname ipaddress subnet mask geteway 1、 master 192.168.146.200 255.255…

四月青少年编程组队学习(Python一级)Task02

电子学会 软件编程&#xff08;Python&#xff09;一级 组队学习 试题来源 青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;【2020.06】青少年软件编程&#xff08;Python&#xff09;等级考试试卷&#xff08;一级&#xff09;【202…

软件测试知识概述

本篇内容关于【1】缺陷(bug)的类型【2】软件测试与SQA的关系【3】软件测试的七项基本原则【4】将软件测试按照不同标准进行分类【5】软件测试过程模型 缺陷(bug)类型 缺陷可能存在于程序文档(软件) 衡量缺陷的唯一标准是是否符合用户需求 ①功能未实现 ②功能实现了但性能有差异…

Hadoop基础-网络拓扑机架感知及其实现

Hadoop基础-网络拓扑机架感知及其实现 作者&#xff1a;尹正杰 版权声明&#xff1a;原创作品&#xff0c;谢绝转载&#xff01;否则将追究法律责任。 一.网络拓扑结构 在本地网络中&#xff0c;两个节点被称为“彼此近邻”是什么意思&#xff1f;在海量数据处理中&#xff0c;…

批量修改图片以及加水印

好久木有来写点什么了.. 前段时间挺忙的. 今天上来分享一个,这几天我给商城图片加水印的代码吧.因为产品编辑那边是先把图片都上传完成了,所以只能做批量修改图片来完成给所有图片加水印的效果. 类似DX、京东效果. 现在正在开发的B2C项目商城: www.oxozoom.com 也希望更多能…

计算机书集下载链接

http://nic.biti.edu.cn/china-pub/ 我在那下了一本&#xff1a;XML高级编程转载于:https://www.cnblogs.com/dyuan/archive/2004/03/12/2966.html

Microsoft PlayReady DRM

支持在 Web 浏览器中使用加密媒体扩展和 Microsoft PlayReady DRM 本文内容 简介实现方法万维网联合会 (W3C) HTML5 加密媒体扩展 (EME) 为网站引入了一项功能&#xff0c;可在不使用插件的情况下播放受数字版权管理 (DRM) 保护的内容。Windows 8.1 上的 Internet Explorer 11 …

Android Binder概述

背景知识为了更好的理解binder&#xff0c;我们要先澄清一下概念&#xff0c;因为Android 基于Linux内核&#xff0c;我们有必要了解相关知识。进程隔离进程隔离是为了保护操作系统进程之间互不干扰而设计的&#xff0c;这个技术是为了避免进程A写入进程B准备的&#xff0c;进程…

如何用Asp判断你的网站的虚拟物理路径

appath方法 < p align"center" > < font size"4" face"Arial" > < b > The Physical path to this virtual website is: < /b > < /font > < font color"#FF0000" size"6" face"Aria…

总结:SQL的优缺点及与NoSQL对比

SQL在这里指的是关系型数据库&#xff0c;NoSQL指元组存储&#xff1f;

关于成功的因素-----谨记

引导语&#xff1a;一个人生活的环境&#xff0c;对他树立理想和取得成就有着重要的影响。坚忍&#xff0c;是成大事者的共同特征。没有足够的知识储备&#xff0c;一个人难以在工作和事业中取得突破性进展&#xff0c;难以向更高地位发展。 【意志力】 意志力是一种…

最常用的Linux命令

基础命令&#xff1a; &#xff08;一&#xff09;cd&#xff1a;进入文件目录 cd / #进入Linux根目录 cd ~ #进入当前用户Home目录&#xff0c;例如root用户 cd .. #进入上一层目录(根目录下没有上一层)&#xff0c;…

Delphi数据库开发之TTable篇1

既然是说Delphi中的SQL使用&#xff0c;肯定离不开TDataSet派生出来的DataSet控件&#xff08;应该说类比较确切些&#xff09;&#xff0c;这里我说的DataSet只是一个大类的称呼&#xff0c;并不是特指实际的TDataSet。在众多控件中其实可以根据如何操作数据分为两类。 其中一…

大型数据库入门

本文介绍大型数据库的概念及其性能决定因素&#xff0c;以及如何优化性能。 什么是大型数据库 -没有一个标准定义 -包含非常多元组(数据库行)的数据库&#xff0c;或者占用非常大的物理文件系统存储空间的数据库。 -占据TB量级的磁盘存储&#xff0c;包含数十亿表行。为什么需…

php安装pear和phpunit

php安装pear和phpunit http://hi.baidu.com/zjutxujie/item/7b08761f922df7476926bb2c 安装pear 下载go-pear.phar&#xff0c;放到phproot/pear目录下&#xff0c;地址http://pear.php.net/go-pear.phar。 管理员身份运行cmd&#xff0c;打开phproot&#xff0c;运行php -d p…

ResNets和Inception的理解

ResNets和Inception的理解 ResNet解析