编程学习笔记(第三篇)面向对象技术高级课程:绪论-软件开发方法的演化与最新趋势(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,一经查实,立即删除!

相关文章

百度地图得到两地点(通过经纬度)的距离、 通过经纬度获取详细地址

1 /**2 * 计算两点间的距离3 * pt1 {lng:"12.34",lat:"3423"}第一个点的经纬度4 * pt2 {lng:"12.34",lat:"3423"}第二个点的经纬度5 * */6 getDistance:function(pt1,pt2){7 var map new BMap.Map(&…

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…

Poj3261 Milk Patterns

题目传送门 题意&#xff1a;对一个字符串求一个最长的子串使得它至少出现k次 额&#xff0c;因为这个题目呢&#xff0c;他的字符集非常大(100W) 所以直接用SAM是不行了&#xff0c;我们考虑用离散化SA&#xff0c;让后就可以分块rmq了 当然这样很麻烦&#xff0c;我们还是用S…

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

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

PHP优化与提升

一。十个不错的建议1.使用 ip2long() 和 long2ip() 函数来把 IP 地址转化成整型存储到数据库里。这种方法把存储空间降到了接近四分之一&#xff08;char(15) 的 15 个字节对整形的 4 个字节&#xff09;&#xff0c;计算一个特定的地址是不是在一个区段内页更简单了&#xff0…

Servlet详解之两个init方法的作用

在Servlet中 javax.servlet.GenericServlet类 继承自java.lang.Object 实现了Serializable,&#xff0c;servlet &#xff0c;ServletConfig 三个接口 被继承对象javax.servlet.http.HttpServlet &#xff08;这是我们常用的一个类&#xff09; 但仔细看GenericServlet的API&am…

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: …

namespace 或The content of element type mapper must match EMPTY

必须为元素类型 "mapper" 声明属性 "namespace" 或The content of element type "mapper" must match "EMPTY" <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org/…

EAS WebService部署

1、创建 facade ,设置好接口及参数、返回信息; 2、代码&#xff1a;元数据打包部署到服务器; 3、然后修改配置文件&#xff1a; 将本地开发环境生成的.wsdd文件拷贝到eas\server\deploy\eas.ear的web.war下的WEB-INF目录下&#xff0c;再将.wsdd文件中的<service></se…

vue --- 购物车页面

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

Javascript阻止表单提交

Javascript阻止表单提交 Html 1.<form name"loginForm" action"login.aspx" method"post"> 2. <button type"submit" value"Submit" id"submit">Submit</button> 3.</form> Js …

XML CDATA的作用

操作XML文件时&#xff0c;如果允许用户输入内容&#xff0c;例如∶"< "、">"、"/"、""等&#xff0c;当生成XML时&#xff0c;会破坏了XML结构&#xff0c;使数据中断。 这就要用XML CDATA 在XML文档中的所有文本都会被解析器解…

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; …

广播风暴

能够抑制网络风暴的是&#xff1f;A中断器 B集线器 C网桥 D路由器 答案D解析&#xff1a;&#xff08;1&#xff09;广播风暴&#xff1f;一个数据帧或包被传输到本地网段上的每个节点就是广播&#xff1b;由于网络拓扑的设计和连接问题&#xff0c;或其他原因导致广播在网段内…

java getClass()

Java反射学习 所谓反射&#xff0c;可以理解为在运行时期获取对象类型信息的操作。传统的编程方法要求程序员在编译阶段决定使用的类型&#xff0c;但是在反射的帮助下&#xff0c;编程人员可以动态获取这些信息&#xff0c;从而编写更加具有可移植性的代码。严格地说&#xff…

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

转,jquery中attr和prop的区别

https://www.cnblogs.com/Showshare/p/different-between-attr-and-prop.html 像checkbox&#xff0c;radio和select这样的元素&#xff0c;选中属性对应“checked”和“selected”&#xff0c;这些也属于固有属性&#xff0c;因此需要使用prop方法去操作才能获得正确的结果。 …