编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(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都是可以来描述的。

转载于:https://www.cnblogs.com/Nicholas0707/p/9235292.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251472.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5 --- canvas绘制网格并画x、y轴

效果如下: // 代码如下: <body><canvas width"500" height"375" id"c"></canvas><script>(function draw_a() {var a_canvas document.getElementById("c");var context a_canvas.getContext("2d&qu…

系统调用软中断处理程序system_call分析

最近学习了系统调用的整个流程&#xff0c;这里总结并记录。同时作为学习孟宁老师的linux内核课程的作业。 唐建&#xff0c;《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1、概述 系统调用整个过程为&#xff1a;API——封装例程——system_c…

html5 --- 使用canvas画一个渐变矩形

我们希望得到如下效果: 首先准备画布 // HTML <canvas width"500" height"375" id "a"> </canvas>// JS // 获取画布的DOM元素 var a_canvas document.getElementById("1"); // 获取画布的上下文元素(之后,就可以使用…

vue --- 使用vue在html上显示当前时间

希望如下效果(时间按秒钟更新) 导入Vue依赖的CDN <script src"https://unpkg.com/vue/dist/vue.min.js"> </script>创建视图 <div id"app">{{date}}</div>Model <script>var app new Vue({el: "app",data: …

vue --- 购物车页面

下面我看开始自己写一个购物车的页面. 我们希望得到如下的效果: 说明: 购买数量最小为0购买数量变化时,对应的总价随之变化点击移除操作对应的商品会移除掉,总价随之改变每个商品作为一个list表的一个对象每个对象,包含id、name、price、count等属性 index.html (整体代码最…

vue --- 从模块从父元素获取数据

vue的精彩之处在于其组件的可复用性.下面谈谈组件(component)如何从父元素获取数据 模块引用 首先说说,如何引用模块 <div id"app"><my-component ></my-component> </div> <script src“unpkg.com/vue/dist/vue.min.js”> </…

前端知识总结(一)

1、用原生JS实现forEach if(!Array.prototype.forEach) {Array.prototype.forEach function(fn, context) {var context arguments[1];if(typeof fn ! "function") {throw new TypeError(fn "is not a function");}for(var i 0; i < this.length; …

vue --- 模块从子组件获取数据

先看个一般的例子: // 我们需要将信息从子组件传递给父组件,(有可能不止一条信息,因此)肯定需要一个标识,这个标识放在$emit里面(js),在dom中通过来关联父元素。如下:<div id "app"><transfer connect"sayConnect" build"sayBuild"&g…

mySql配置在nodejs中使用

mySql安装完成后&#xff0c;配置链接nodejs项目中的数据库。 1、测试是否安装成功。 2、use nodejs使用nodejs 3、设置数据源 5、exit 转载于:https://www.cnblogs.com/zhxzh/p/9244996.html

前端知识总结(二)

33、闭包 闭包的概念 上一节代码中的f2函数&#xff0c;就是闭包。 各种专业文献上的"闭包"&#xff08;closure&#xff09;定义非常抽象&#xff0c;很难看懂。我的理解是&#xff0c;闭包就是能够读取其他函数内部变量的函数。 由于在Javascript语言中&#x…

前端知识总结(三)

51、启动GNU加速 硬件加速的工作原理 浏览器接收到一个页面之后&#xff0c;将html解析成DOM树&#xff0c;浏览器解析渲染「html」的过程 按着一定的规则执行&#xff0c;DOM树和CSS树结合后构成浏览器形成页面的 渲染树 ; 渲染树中包含大量的渲染元素&#xff0c;每一个元素…

为阿里云服务器ECS实例安装Nodejs

为阿里云服务器ECS实例安装Nodejs部署Node.js项目&#xff08;CentOS&#xff09;准备工作操作步骤步骤1&#xff1a;部署Node.js环境&#xff08;使用二进制文件安装&#xff09;步骤2&#xff1a;部署测试项目部署Node.js项目&#xff08;CentOS&#xff09; 本文档介绍如何…

webstorm激活+汉化教程

1.安装教程激活 输入的激活网址&#xff1a; http://idea.imsxm.com/ 2.汉化教程 软件适用于&#xff1a;webstorm2017.2以及以上&#xff0c;如有需要可直接加本人QQ 1940694428。 转载于:https://www.cnblogs.com/cisum/p/7919712.html

如何从零开始,成为element-plus的contributor

序言 提到element-ui&#xff0c;我想很多前端er应该都不陌生&#xff0c;而element-ui也是我第二个使用的前端UI库&#xff0c;第一个是bootstrap&#xff08;笑&#xff09;。我是在去年初学vue的时候开始接触elemment-ui的&#xff0c;到现在也快一年了&#xff0c;中间经历…

将Vue+Nodejs项目部署到阿里云服务器

上传文件至云服务器 一、打包文件 在项目根目录下运行 npm run build等待命令运行结束后&#xff0c;会发现目录下多了 dist 文件夹&#xff0c;这个文件夹就是我们等下要放到服务器中的。 二、文件传输 打开 Xftp与实例建立连接云服务器Apache默认的根目录是/var/www/htm…

javascript --- 函数的优化(尾调用优化)

从一个熟悉的Fibonacci数列的实现开始: function Fibonacci (n) {if ( n < 1) { return 1};return Fibonacci(n -1) Fibonacci(n-2); }以上代码很简单… 但执行以下代码 console.log(Fibonacci(100));会发现编译工具,卡住不动. 原因在于:递归调用(函数调用自身),每次都会…

第5课 - 线性表的本质

第5课 - 线性表的本质 数据结构是为了解决生活中的实际问题而存在的&#xff0c;那生活中与线性表相对应的例子有什么呢&#xff1f; 幼儿园中就有一个例子&#xff0c;在老师安排小朋友活动时&#xff0c;会将小朋友组织成下面的站队形式&#xff0c;这个就是线性表。 1. 线性…

Django--网页管理实例解析

此篇为代码流程的注释以及自己写的小项目的思路&#xff1a; 首先是项目的路由配置&#xff1a; 1 urlpatterns [2 # url(r^admin/, admin.site.urls),3 url(r^yemian/,yemian),4 url(r^zuoye/,zuoye),5 url(r^class/,views.class_list),6 url(r^class_ad…

阿里云ecs实例中创建数据库

阿里云ecs实例中创建数据库安装mysql创建数据库1.登录2.新建数据库3.执行.sql文件4.查询表&#xff0c;验证是否创建成功4.退出数据库安装mysql 参考https://blog.csdn.net/qq_36350532/article/details/79496049 创建数据库 1.登录 mysql -u root -p&#xff08;这里写密码…

javascript --- 尾递归优化的实现

考虑一个正常的递归函数 function sum(x, y) {if (y > 0) {return sum (x 1, y - 1);} else {return x;} } sum(1, 100000000);超出调用栈的最大次数… 下面使用尾递归优化实现: function tco(f) {var value ;var active false;var accumulated [];return function acc…