[音乐] [音乐]
这个软件方法学的现状,这个现状呢实际上是 伴随着面向对象产生之后
就是面向对象产生的时候以及面向对象方法学产生之后一些新发展的一些 软件方法学。
首先呢就是面向对象方法学 面向对象方法学相对于前面讲的那些方法学它
有一些优势,第一个优势呢就是它非常贴近于自然的这种思维方式
从认识论,或者说从方法学的角度 它与我们人日常生活的这种
在日常生活中看到这个现实世界,这个方式是完全一样的,也就是它是以这个对象
以客体这种方式来认识世界,而不像 在面向对象产生之前,人们认识
这个开发软件方法是非常片面的,要么就是 完全按照数据,要么是完全按照过程,要么是
状态,要么就是规则,这些呢
总体而言,都是比较片面,也违背了人自然的这种 思维方式。
而面向对象呢它认识世界或者开发软件的 时候呢,基本上是以自然这种思维方式
我这个现实世界中是有一些对象组成的 对象和对象之间有关系,我在构造模型的时候呢
仍然把这个构造的这个模型呢也是由一些对象组成的,然后对象和对象之间
也是有联系的,因此呢,从认识论角度来看,它基本上是
与这个我们日常这种思维方式是息息相通的
这个就避免了在软件方法学早期割裂的这种
完全非常不自然的,非常片面的,非常这个 这个
而面向对象方法学这个
开发,一句话来描述面向对象就是
从这个现实世界中的这个存在的这个事物出发 来构造软件系统,那么对象本身呢
是一个最重要的一个概念就是封装,它是将数据 和操作封装在一块,形成了一个对象
对象本身呢,既然数据和操作封装在一块,就有点像一个泛代数结构,因此呢
这个比较符合人
心理上的这个,因为人这个心理认识上实际上也是一种结构,比较符合人心理上的
这种这个思维方式
而面向对象方法学的这个
这个视角具体有封装的原则
消息传递的原则,委托的原则,动态链接的原则,实例化的 原则,泛化和多态,以及关系。
基本上呢, 如果说是深入讲解的话呢,这些
视角和这些原则基本上跟人日常的这个 这个思维是完全一致的,好,我们
下一讲,我们将在下一周再深入探讨这几个原则
因此呢,这个面向对象方法学呢是一种
除了在这个,从方法学这个角度来看呢是
非常贴近人的自然的这种思维方式,另外呢,从这个
这个复用性,还是
来看看它能够提供一种更大力度的
复用机制,它可以这个 从类这个,从对象这个角度就
复用不仅再是复用一些数据,也不只单是复用一些
操作,而是这个复用对象,复用类,这样的话呢
就使得这个代码的这个复用程度有很大的这个提高,另外呢,
它可以这个实现一个封装,这样的话呢就可以
这个在很大程度上呢
便于维护和复用,至于如何
便于维护和复用,我们将在下一集部分
下一集这个后面的内容中呢详细讲解 另外一个
这个开发方法学是基于构件软件开发 那它实际上是基于对象,在面向对象基础上又做了
进一步的认识,进一步的这个深化,也就是对象 很多的一些对象呢可以
成为一个构件,这个构件呢是一组 业务功能的描述。
然后呢开发软件呢完全可以通过
一系列的构件的组合,组装来实现,这样就
可以在很大程度上呢避免了开发软件的时候呢编写源代码,很多情况下呢
就是通过这个查询构件,然后组合构件,这样就形成
一个可执行的一个程序,当然这个思想是非常
前沿的,也是非常这个有开创性的 这个
在构件技术中呢,这些构件呢 实际上呢都是用面向对象技术
来这个开发这个构件,然后再通过一系列的这个构件的组装这种方式 来实现的。
但是呢,基于构件和开发呢,并不能
这个完全地这个解决这个开发软件时候的
开发代码的问题,因为构件即使再多,也不能完全满足这个
人的不断变化这个需要,光靠这个组合一些现有的构件
这种方式不可能最终解决这个代码生成的问题 这个解决这个问题还需要
更加先进的方法学的支撑 另外呢,这个还有一种方法
学呢是前几年称之为 流行起来的这个称之为面向服务,面向服务实际上后面构件非常相似
这种面向服务是借助于 Internet
或者是这种互联的 一种构件,然后呢构件并不在
并不在这个一个本地进行组装,往往呢可以通过网络
环境,我这个如果需要某一个
构件的时候,我向远在几千里的一个服务器,想通过一种规范的,向它发送
服务请求,然后它再给我们回来这个
最后的一些结果,然后我通过这种远程访问的方式来
这个实现服务的组装,这样的话呢,可以
在很大程度上呢避免自己开发,然后复用
这个很多的一些软件的一些资源 这是称之为这个服务。
但是服务同样,像构件 实际上呢原理是一样的,只不过呢它们的存在的位置发生了变化
这个同样面向服务呢
也不能,尽管能够解决,在一定程度上 解决这个软件开发效率问题,软件
大量的这个复用的问题,快速适应变化的问题,但是同样也不能在根本上解决
这个问题,因为服务本身呢 不可能保证每一个用户的需求都有一些服务与他对应,如果
每一个,每个用户的这个各种各样的服务都
能对应起来,那么这个服务库那就是一个非常爆炸的数量级了
所以这些问题呢,尽管呢是在面向对象之后
逐渐发展起来的,并且在目前来看呢也有很大的
应用基础,但是呢最终解决这个
这个不开发,不编写程序就能够开发软件
这个终极目标还差得很远。
这个 还有一种这个方法学是面向对象之后产生的
以及面向方面这种方法学,它的主要的一个
侧重点是为解决面向对象中的一个问题,这个面向对象 尽管有很多的优势,但是呢
有一个问题就是说它不能 自动地产生代码啊,并且呢在
面向对象这个开发软件的时候呢, 需要同时兼顾很多的方面。
我写往往是,尽管我写面向对象的 编程语句,往往第一句写的是一个业务逻辑,
紧接着下一句来一句安全的处理,再来一句什么
这个写日志的一个关系,再来一句 这个加上数据管理等等。
这样的话呢就可以使得这个 开发人员在写开发程序
的时候呢往往分散注意力,不能很好地把注意力集中到业务逻辑上。
为解决这个问题呢,就是采取了面向方面的一种
这个方法啊,所以面向方面呢就是 把这些程序分为很多的一些方面,
其中这个最重要的方面呢就是
业务逻辑,除了业务逻辑还有一些,一些这个 前置条件后置条件啊,一些处理例外,
处理这个同步,或者是说写日志,处理安全等等,这都称之为一些 这个方面。
我为了让这个程序员在写程序的时候专注于业务逻辑,
那么我可以呢,这个只让这个程序员写一些业务逻辑的
方面,而其他的方面呢完全可以 这个自动地生成代码,在需要时候给它编织进去。
这个或者说呢,有其他程序员在其它的位置这个编写, 然后最后它们合并到一块儿。
这就是面向方面的一个思想。
这个 [空白音频]
那个产生面向方面啊,由于要 承载这套思想啊,就是这个
先开始将方面分离,之后再将方面编制需要很多的一些
增加很多的一些概念,这些概念包括方面连接点、 通知、
切入点、 这个目标对象、 引入、 织入等等一些概念。
所以呢这就使得面向方面的这个 概念呢,相对于面向对象来说呢又变得不是
一种非常自然,非常贴近人自然的一种思维方式那种方式。
而是这个 非常的这个抽象啊。
在对于初学者来说,你有些概念 可能要下很多的一些功夫。
这是面向方面的一个问题。
另外呢这个面向方面本身呢,
也不能解决,最终解决这个代码生成的问题,
以及这个因为你把这个
代码分为若干个方面啊,这些方面彼此之间必须是什么呢?
有个前置条件,必须它们是这个耦合性是非常 小的啊,但是一旦在一句态化里边,有些情况下耦合性太大
一句代码里边可能有多个方面,这时候就面向方面的这种 编程逻辑就很难把它们拆成多个方面。
因此呢,面向方面这种 这个方法学呢只能适合于
这种比较方面和方面耦合性比较大,比较 比较这个小的一种情况。
另外就是说拆分成方面之后, 效率会受到一定的损失,只能适合于
对于这个程序运行效率不是非常高的一种 应用,这种面向方面还可以。
如果说是用,是一个非常高的这种情况用面向方面 也是不行的啊。
所以 由此几个原因,面向方面本身不能最终解决面向对象
这个中最主要的一个代码生成的问题
以及这个效率的问题,它只能在一些特定的场合 发挥作用。
比如说外围呢用,这个用面向方面 这个是一个非常好的一个典范,但是放到其它的一些
领域往往,比如说控制领域往往是不适合的。
就是因为这个面向方面本身呢, 还是这个对效率方面啊受到一定的损失。
另外呢这个它同构建一样,这些方面之间也是很耦合的啊,
不可能保证这个任何一个需求都由这个目前的一些方面来解决。
最后呢是Agent,智能Agent方法。
这个方法呢实际上是一种人工智能领域 这个存在的一种方法。
它是对于面向对象方法的一种 进一步地一个扩展改进,在人工智能领域的一种扩展和改进。
好,因为它主要相对于一般的传统的面向对象来说呢,
这个智能Agent这种技术呢,更加强调这个对象的智能性、 自治性、 社会性、 反应性和能动性。
比如说在这个社会性领域呢,
它强调对象和对象之间是可以发送消息的,但是消息非常死的一些 既定的一种消息格式,但是社会性就要求这个对象和对象之间,
智能对象和智能对象之间发送的消息往往是 这个按照一种这个特定的语言进行
这个非常自主的一种交流,就像人和人之间这个对话一样,这么一种这个非常
就这个非常灵活,具有丰富语义、 自主性的一种交流。
这个自治性呢就是指的这个任何的智能对象可以在
没有人干预下呢,可以这个 自主地控制自己的行为和内部的这种状态,这也是对象所不具有的。
反应性呢指的是这个智能Agent这个对象
可以理解周围的环境,并且根据环境变化作出响应啊。
这个能动性呢指的是Agent不仅能够
对话,关键作出响应,而且呢能够这个 表现出有目标的一些行为。
因为对象本身呢可以 来一个消息,它可以做出一个反应就是很机械,但是能动性呢就是说它
这个来了一个消息根据当前的一个上下文场景,它可以做出不同的一些各种
变化多端的一些行为,更加贴近于这个 人类社会的一种这个反应方式。
再有是 关系它可以, 对象和对象之间有关系,但是关系是死的,这个
Agent的这个世界里面呢,这个智能对象之间 这个关系可以是活的,它可以根据它的需要建立
动态的一些伙伴关系,就是纵向人在这个社会交往中
可以根据自己的意愿,动态地建立各种各样的一些 这个社会交往网络一样。
所以呢,一句话 这个概括智能式Agent就是一种这种模拟
人的,或者是人的社会的这种更加智能的一种 方法学。
这个呢 产生,也是在面向对象产生之后就已经有一些这个提法啊。
这个但是呢有在发展过程中呢也受到了一些
争议啊,因为它只是,不一定是把这个Agent放在
一个普适性的一个范围内来 这个研究。
它只适合在一个特定,比如说这个智能 人工智能内领域它作为Agent可以的。
近几年来呢由于 这个机器人工业的这个发展,这个智能Agent这个
这种方法学呢应该是还有得到了长足的发展。
[空白音频]