一、软件开发的现状

  软件领域正在发生一个巨变,特别是近几年来,软件领域正在发生翻天覆地的变化。 这一变化主要以这个云 + 端大数据, 这些是随着目前最先进的一些技术的产生而产生的。 随着这些新的技术以及软件开发方法的不断的提升,当今的软件的开发与10 年前的软件开发, 不管从方式上还是从内涵上都发生了很大的、 深刻的变化。比如说一个非常简单的一个现象就是,我们现在开发一个小的一个应用程序,跟 10年前开发一个应用程序, 采用的编程的语言,编程的这个平台,软件开发平台以及借用的一些可复用的一些软件的一些资产都是完全不同的。

程序员和架构师的区别

  程序员的主要工作就是学习各种各样的一些编程语言。 然后用这些语言来进行编程,编完程序之后进行调试, 调试完了之后在测试人员的协助下可以这个修改 bug ,然后有些时候写一些技术文档, 或者写一些注释。

  而架构师的主要工作可以说与代码打交道的并不是很密切,主要是构建一些分析设计模型,研究各种各样的软件、 技术或者说一些业务逻辑的一些模型一些模式, 研究更加抽象的体系结构的架构模型,以及企业所适用的一些技术架构,它使用的语言是建模语言,目前比较统一建模语言是uml。 并且他要研究不同流派的软件开发、 软件开发方法学,在有些时候需要进行重构。

   可以说一个软件的架构师, 一个非常优秀的软件架构师是一个团队乃至一个企业的灵魂。 架构师可以领导一些的程序员避免在软件开发中的各种各样的困难,走向新的胜利,正像希腊神话奥德赛中的俄底修斯。如果没有这么一个灵魂人物,很可能这个团队就会被各种各样的困难所压倒。 因此这是在程序员和架构师的一个区别。

软件架构师的能力:

  • 建模语言

  • 模式

  • 方法学

  • 模型

  • 架构

  • 重构

  • 。。。

软件工程能够解决的问题:

(1)生命/安全攸关系统(safety-critical system):生命攸关系统是指一个系统的失效或误动作会产生以下后果:人员重伤或死亡,或者设备的严重毁损,或者环境的危害

  在这些领域开发软件, 大家以为好像在这些领域程序也是有一些程序员这个手工编写出来的,那就是 一个误区了,在这些领域开发这些攸关系统的软件,实际上需要大量的这个软件工程的一些理念和智慧, 因为尽可能的要把这个 bug 完全地避免,如果不能完全避免的话把它这个概率发生概率要降到最低,这时候就需要比较高层次软件工程,当然这些工程、 这些软件工程理念有很多的 方式,比如说自动生成代码,还有形式化技术等等。

(2)中小型创新企业

  创新型中小型公司中开发软件受到了很多的一些制约因素,比如说资金、时间又非常紧, 工作量又特别大,在这种情况下开发软件, 仍然不能采用人海战术,因为没有足够的实力找足够的有经验的程序员来开发。这时候需要借助高级软件工程的一些 理念、 方式方法,甚至有些情况下需要自动化的产生代码。 需要通过模型的方式来驱动代码的生成,这在一个中小型创业型些软件企业是非常有用的。

(3)大型IT企业

  大型的 IT 企业有悠久的历史,它的软件目前的这个版本,这个系统非常庞大,有几千万行代码。它的这些代码很可能是几十年前某一个程序员编写的。 如果要维护一个新的版本, 不可避免的要对这些老的这些代码进行修改调整。 但是往往凭借人工的方式来进行调整的话, 这个效率非常低。 因为现在的人看几十年前这个代码,在缺失各种文档的情况下 就显得力不从心了。 即使能够看明白, 它的这个体量也是非常大的,几千万行,无法通过手动的方式或者说人工的方式来看清。 看完之后可能要需要几年的时间,已经来不及了。 这时候就要借助于比较高级的软件工程自动化的重构技术,这个通过逆向工程的方式,将原有的代码转化为模型,便于人理解。 甚至是可以通过自动的方式来理解这个模型。 将这个模型重构成一个更加完备的一个模型,进而驱动从模型到产生新的代码, 这是一个整个的一套过程。

(4)外包领域

  甲方提需求, 或者提出自己的一些业务模型,然后交给乙方来进行完成。 在这个过程中,如果是甲乙双方是两个公司、 两个实体,它们的办公地点是不同的,它们之间如果说完全通过自然语言来进行沟通这些需求、 沟通这些业务逻辑的话, 那就显得效率非常低,并且会产生很多的一些误解,很多的一些误会,这样的话不利于双方协作开发。 比较好的方式往往是通过模型为主,然后以这个自然语言为辅的这种方式, 来实现沟通。 这个过程中甲方向乙方传递的往往都是一些模型,借助于模型这种有效的沟通手段, 可以使得甲乙双方这个沟通成本降到最少。 软件开发的效率提高很大。 这在当前的一些金融领域的一些软件公司中是非常流行的。

二、UML扩展

1、必要性

  • 为了适应不同方法:Petri网、数据库模型、工作流等

  • 为了适应不同的领域:实时建模领域、逆向工程领域、软件过程管理领域等

  • 为了适应不同的平台:COBRA、EJB、COM+等

  • 为了适应新的方法与技术:面向方面、语义网络、Agent等

2、扩展要点

  • UML并不能将任何领域描述清楚

  • 不同领域需要不同的规约

  • 但是,如果UML可以随便扩展,标准就失去意义

3、UML扩展的作用

扩展IML的语法和语义,适合不同领域不同层次的建模

保证扩展方案仍遵守一定的规范。仍然可以共享和交流

  UML是一种语言,与自然语言所不同的是UML是在特定领域软件工程领域使用的一种工程语言, 那么UML也有语法和语义,也就是说UML表面上看有十几种图,二维这种建模元素, 它们背后描述每一种图的都有语法和语义规则。描述一个扩展的UML,需要符合UML的造字法、语法。

  UML是一种自定义的一种语言方式,它使用了UML语法规则的一部分语法和语义来描述全部UML模型的语法结构,实际上这些部分语法规则就是类图的一部分,最核心的类图的一部分。 通过这个类图,它具有与bacs范式相同的语义,所以它能够描述一种 一个大的结构是由哪些小结构组成的,这些小结构又是由哪些更小的小结构,组成的,甚至是递归的。

4、UML扩展方式

(1)Profile

Profile :外扩投影

  Profiles将stereotypes(版型)、tagged values(标记值)和constraints(约束)应用于具体的模型元素比如类、属性、操作和活动。一个Profile对象就是一系列为特定领域(比如,航空航天、保健、金融)或平台(J2EE、.NET)自定义的UML集合。

profile 作用

帮助你分析并发现程序运行的瓶颈,找到耗时所在,同时也能帮助你发现不会被执行的代码。从而最终实现程序的优化。

(2)sysml

  对象管理组织OMG决定在对UML2.0 的子集进行重用和扩展的基础上,提出一种新的系统建模语言——SysML(Systems Modeling Language),作为系统工程的标准建模语言。和UML 用来统一软件工程中使用的建模语言一样,SysML 的目的是统一系统工程中使用的建模语言。

  它实际上是在UML基础上进行的一个扩展,这个也是被OMG组织所标准化的一个规范,这个SysML不是像UML只建立软件的一个系统, 用SysML可以建立硬件系统, 也可以建立一些由人组成的系统, 或者说是由人、 软件、 硬件组成的一个复合的一个系统。 SysML中包含了UML的一部分的语法和语义,此外为了适应不同领域的建模,它应用UML的语法规则,描述语法,UML语法规则的语言,也就是那个类图的精简版,然后自己扩充了一部分,用来表示UML所不能描述的人组成的系统,硬件系统,或者说是一种软硬系统还有人一起结合起来的一种系统,用SysML都是可以来描述的。

编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(3)软件开发的现状、UML扩展的更多相关文章

  1. 编程学习笔记(第四篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(4)meta、元与元模型、软件方法的未来发展

    一.meta.元与元模型 1.元. ​ "元" 英语是 Meta,meta在不同的行业领域有不同的翻译,在 IT 领域一般来说 Meta 是翻译成元,主要因为在 IT 中Meta ...

  2. ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用

    前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...

  3. JavaScript高级编程学习笔记(第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

  4. Java并发编程学习笔记(三)——对象的组合

    重要概念: 1.在设计线程安全类的过程中,需要包含以下三个基本要素: (1)找出构成对象状态的所有变量. (2)找出约束状态变量的不变性条件. (3)建立对象状态的并发访问管理策略. 2.

  5. R学习笔记 第三篇:数据框

    数据框(data.frame)用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同的数据列的数据类型可以相同,也可以不同,但是,每列的长度必须相同.数据框的每列可以有唯一的命名,在已创 ...

  6. Asp.net core Identity + identity server + angular 学习笔记 (第三篇)

    register -> login 讲了 我们来讲讲 forgot password -> reset password  和 change password 吧 先来 forgot pa ...

  7. Django学习笔记第三篇--关于响应返回

    一.返回简单类型: #1.返回简单字符串 #from django.http import HttpResponse return HttpResponse("return string&q ...

  8. java网络编程学习笔记(三):ServerSocket详解

    1.ServerSocket的构造方法 ServerSocket(); ServerSocket(int port); ServerSocket(int port,int backlog); Serv ...

  9. 网络编程学习笔记(三)UDP

    1.不可靠的.效率高.数据报(数据打成一个小包一个小包地往外发).非连接. 2.UDP是非连接的,因此严格来说并不区分服务器端和客户端. 3.UDP通信过程:UDP都是通过字节数组进行对话的.     ...

随机推荐

  1. 第三章,DNA序列的进化演变

    31.前言 3.1.两个序列间的核苷酸差异 来自同一祖先序列的两条后裔序列,之间的核苷酸的差异随着时间的增加而变大.简单的计量方法,p距离 3.2.核苷酸代替数的估计 3.3.Jukes和Cantor ...

  2. maven(一)入门

    1.maven 简介:不用手动拷贝jar包,只需要配置坐标,自动从中央仓库下载(其他介绍请百度,这里只讲干货) 2.安装maven 1.解压与配置环境变量 2.验证是否安装成功 3.maven介绍 1 ...

  3. Python基础之字典操作

    字典 字典的优点: dict key 必须是不可变数据类型,可哈希, value:任意数据类型. dict 优点:二分查找去查询 存储大量的关系型数据 特点:无序的(指的是不可人为的去改变顺序) 数据 ...

  4. Android笔记:OptionsMenu

    使用菜单选项OptionsMenu,需要进行以下操作:(1)重写onCreateOptionsMenu方法: public boolean onCreateOptionsMenu(Menu menu) ...

  5. JS 7路线图

    JS 7路线图 今天,我很高兴宣布路线图到视频.JS 7!虽然这是一个主要版本更新,但很少有真正打破.两个主要变化是添加了videojs-http-streaming,简称为VHS,以及删除了对较老版 ...

  6. LightOJ - 1027 Dangerous Maze 期望

    你在迷宫中;开始时在你面前看到n扇门.你可以选择你喜欢的任何门.所有门的选择门的概率是相等的. 如果您选择第i个门,它可以让您回到您在xi(xi小于0)分钟内开始的相同位置,也可以在xi(xi大于0) ...

  7. Serializers序列化组件

    Django的序列化方法 .values 序列化结果 class BooksView(View): def get(self, request): book_list = Book.objects.v ...

  8. RockerMQ介绍 及搭建双master模式

    一.RocketMQ介绍 1.1 简介 RocketMQ 是一款分布式.队列模型的消息中间件,具有以下特点: 能够保证严格的消息顺序 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机 ...

  9. UVa 10054 The Necklace(无向图欧拉回路)

    My little sister had a beautiful necklace made of colorful beads. Two successive beads in the neckla ...

  10. Java_9 面向对象

    1.面向对象思想 面向过程的思想:自己做什么 面向对象的思想:自己找谁做,即不断地创造对象.使用对象.指挥对象做事情.万物皆对象. 面对对象的特征:封装.继承.多态. 2.java中基本单元类 成员变 ...