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

  • 相关阅读:
    实用机器学习 跟李沐学AI
    Explicitly drop temp table or let SQL Server handle it
    dotnettransformxdt and FatAntelope
    QQ拼音输入法 禁用模糊音
    (技术八卦)Java VS RoR
    Ruby on rails开发从头来(windows)(七)创建在线购物页面
    Ruby on rails开发从头来(windows)(十三)订单(Order)
    Ruby on rails开发从头来(windows)(十一)订单(Order)
    新员工自缢身亡,华为又站到了风口浪尖
    死亡汽油弹(Napalm Death)乐队的视频和来中国演出的消息
  • 原文地址:https://www.cnblogs.com/Nicholas0707/p/9235292.html
Copyright © 2011-2022 走看看