编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(3)软件开发的现状、UML扩展
一、软件开发的现状
软件领域正在发生一个巨变,特别是近几年来,软件领域正在发生翻天覆地的变化。 这一变化主要以这个云 + 端大数据, 这些是随着目前最先进的一些技术的产生而产生的。 随着这些新的技术以及软件开发方法的不断的提升,当今的软件的开发与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扩展的更多相关文章
- 编程学习笔记(第四篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(4)meta、元与元模型、软件方法的未来发展
一.meta.元与元模型 1.元. "元" 英语是 Meta,meta在不同的行业领域有不同的翻译,在 IT 领域一般来说 Meta 是翻译成元,主要因为在 IT 中Meta ...
- ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用
前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...
- JavaScript高级编程学习笔记(第三章之一)
继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...
- Java并发编程学习笔记(三)——对象的组合
重要概念: 1.在设计线程安全类的过程中,需要包含以下三个基本要素: (1)找出构成对象状态的所有变量. (2)找出约束状态变量的不变性条件. (3)建立对象状态的并发访问管理策略. 2.
- R学习笔记 第三篇:数据框
数据框(data.frame)用于存储二维表(即关系表)的数据,每一列存储的数据类型必须相同,不同的数据列的数据类型可以相同,也可以不同,但是,每列的长度必须相同.数据框的每列可以有唯一的命名,在已创 ...
- Asp.net core Identity + identity server + angular 学习笔记 (第三篇)
register -> login 讲了 我们来讲讲 forgot password -> reset password 和 change password 吧 先来 forgot pa ...
- Django学习笔记第三篇--关于响应返回
一.返回简单类型: #1.返回简单字符串 #from django.http import HttpResponse return HttpResponse("return string&q ...
- java网络编程学习笔记(三):ServerSocket详解
1.ServerSocket的构造方法 ServerSocket(); ServerSocket(int port); ServerSocket(int port,int backlog); Serv ...
- 网络编程学习笔记(三)UDP
1.不可靠的.效率高.数据报(数据打成一个小包一个小包地往外发).非连接. 2.UDP是非连接的,因此严格来说并不区分服务器端和客户端. 3.UDP通信过程:UDP都是通过字节数组进行对话的. ...
随机推荐
- 1.3.5、CDH 搭建Hadoop在安装之前(端口---Cloudera Search使用的端口)
Cloudera Search使用的端口 在下表中,每个端口的“ 访问要求”列通常是“内部”或“外部”.在此上下文中,“内部”表示端口仅用于组件之间的通信; “外部”表示该端口可用于内部或外部通信. ...
- 使用Java实现对一个数组的增删改查以及初始化
import java.util.*; import java.lang.*; public class Array { private int[] data;// 数组 private int si ...
- Python十分适合用来开发网页爬虫
Python十分适合用来开发网页爬虫,理由如下:1.抓取网页自身的接口比较与其他静态编程语言,如java,c#,c++,python抓取网页文档的接口更简练:比较其他动态脚本语言,如perl,shel ...
- js获取当前网页header头部信息
思路,通过ajax重新请求当前页面,用getAllResponseHeaders方法获取: var req = new XMLHttpRequest();req.open('GET', documen ...
- Win7 访问win2008 远程桌面提示:您的凭证不工作
背景: win7 远程桌面连接 服务器 windows 2008 报错,“您的凭证不工作”,但是 xp 系统却可以正常连接. 解决方法: 1.在“运行” 中执行 secpol.msc-->进入本 ...
- Devexpress Gridview 自定义汇总CustomSummaryCalculate(加权平均)
Devexpress Gridview 提供了简单的求和,平均等方法,复杂的汇总方法则需要自定义,使用gridview 的CustomSummaryCalculate 事件,根据官网的文档及各论坛案例 ...
- Karma - MVC Framework for Unity3D
Karma is an MVC framework for Unity3D. Because of how Unity is structured, it actually turns out to ...
- Json、JavaBean、String等互转
Json.JavaBean.String等互转 本文介绍简单的Json.JavaBean.String互换(下文JavaBean简称Object对象,这里不是很严谨) 转换关系如下: 其中String ...
- 【Linux 线程】常用线程函数复习《三》
1.关于函数pthraed_join与函数pthraed_detach 在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源 ...
- 在IDEA中使用gradle配置打可执行jar包[可执行jar与其所依赖的jar分离]
下面是我的项目的build.gradle文件的所有内容,注意高亮部分是关键: group 'com.xbs' version '1.0-SNAPSHOT' apply plugin: 'java' a ...