1,软件编程技术的发展

软件编程技术与程序设计语言是分不开的。过去的几十年中,程序设计语言对抽象机制的支持程度不断提高:从机器语言到汇编语言,到高级语言,再到面向对象语言。每一种新的程序设计语言的出现都带来软件编程方法的飞跃。汇编语言出现后,开发者避免了直接使用0-l编码,而是利用符号来表示机器指令,从而更方便地编敲代码。当程序规模继续增大的时候,出现了以Fortran、C、Pascal等为代表的高级语言,这些高级语言使得编写复杂的程序变得easy,开发者能够更好地应付日益复杂的代码,这一阶段的软件开发方法被称为“面向过程的”。可是,随着软件产业的迸一步发展,更大、更复杂的软件系统在需求中被提出,即使开发者应用结构化程序设计的方法,仍然非常难把握软件开发的总体局势。在这样的情况下,作为减少开发复杂性的工具,诸如C++、Java等面向对象的语言产生了,面向对象程序设计也随之发展起来,软件编程方法学也由“面向过程”过渡到“面向对象(OOP)”时代。不难发现,编程技术与编程语言定义了人与机器之间的通信方式[1]。每一种新的技术都提供了一些新的方法来解决之前所未能非常好解决的问题。比如,通过独立于机器的代码将晦涩难懂的0-1指令抽象出来:通过面向过程的编程语言使人们能够採用结构化的设计方式来构造较为复杂的系统;通过面向对象编程语言中的类来封装具体数据和方法的实现细节使人们将复杂的系统进行具体的划分等。每一种新的技术都提供了一种更为自然的方式来将系统需求映射为编程结构。编程技术的不断发展能够使人们创建复杂度更高的系统,反之亦然,人们同意复杂度越来越高的系统存在,由于新的技术能够用来处理这样的复杂性。

2, OOP概念

OOP:Object-Orientedprogramming(面向对象程序设计)是一种程序设计范型,同一时候也是一种程序开发的技术。它将对象作为程序的基本单元,将程序和数据封装当中,以提高软件的重用性、灵活性和可扩展性。

OOP是一种运用对象,类,继承,聚合,消息传递,多态性来构造软件开发的方法,在系统构造中尽可能运用人类的自然思维方式。其基本的概念[2]例如以下:

(1)      对象(object):是系统中用来描写叙述客观事物的一个实体,它是构成系统的一个基本单位,一个对象由一组属性和对这组属性进行操作的一组服务构成。

(2)      类(class):具有同样属性和服务的一组对象的集合,它为属于该类的所有对象提供了统一的抽象描写叙述,其内部包含属性和服务两个部分。

(3)      封装(encapsulation):把对象的属性和服务结合成一个独立的系统单位,并尽可能隐蔽对象的内部细节。

(4)      继承(inheritance):特殊类的对象拥有其一般类的所有属性和服务,称作特殊类对一般类的继承。

(5)      多态(polymorphism):指一般类中定义的属性或服务被特殊类继承之后,能够详细不同的数据类型或表现出不同的行为。

OOP能够看作一种在程序中包括各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每个对象都应该能够接受数据、处理数据并将数据传达给其他对象,因此它们都能够被看作一个小型的“机器”,即对象。

3,OOP的长处

OOP技术出现曾经,结构化设计是程序设计的主流。结构化程序设计又称为面向过程的编程方式。在面向过程的编程方式中,需求被看作一系列须要完毕的任务,函数用于完毕这些任务,解决这个问题的焦点集中于函数。当中函数是面向过程的,即它关注怎样依据规定的条件完毕指定的任务。

在多函数程序中,很多重要的数据被放置在全局数据区,这样它们能够被全部的函数訪问,同一时候每一个函数都能够具有自己的局部数据。图1.1显示了面向过程编程中函数与数据之间的关系。

这样的结构非常easy造成全局数据无意中被其它函数修改,因此程序的正确性不易保证。面向对象编程的出发点之中的一个就是弥补面向过程编程的这一缺点。在面向对象编程中,对象是程序的基本元素,它将数据和操作紧密地连结在一起,并保护数据不会被外界的函数意外地改变。图1.2显示了面向对象程序设计中对象、数据和方法之间的关系。

比較OOP和面向过程编程,还能够得到面向对象编程的其它长处[4]

(1)      数据抽象的概念能够在保持外部接口不变的情况下改变内部实现,从而降低甚至避免对外界的干扰。

(2)      通过继承机制不仅可大幅降低冗余的代码,并且还能够方便地扩展现有代码,从而提高了编码效率,降低了编码出错概率,降低软件维护的难度。

(3)      结合面向对象的分析、设计,同意将问题域中的对象直接映射到程序中,降低软件开发过程中中间环节的转换过程。

(4)      通过对对象的辨别、划分,能够将软件系统切割为若干相对独立的部分,在一定程度上便于控制软件复杂度。

(5)      以对象为中心的设计能够帮助开发者从静态属性和动态方法两个方面把握问题,从而更好地实现系统。

通过对象的聚合、联合,能够在保证封装与抽象的原则下实现对象内在结构和外在功能上的扩充,从而实现对象功能由低级到高级的转变。

4,OOP的缺点

面向对象的编程方法在软件开发领域引起了重大变革,极大地提高了软件开发的生产率,为解决软件危机带来了光明。可是,和其它编程方法一样,面向对象编程也并非完美无缺。比如,採用面向对象的编程方式可以非常好地解决软件系统中角色划分的问题,将软件开发中的很多关注点都模块化,并可以把这些关注点的详细实现细节封装在类中。可是,在系统中还存在还有一类关注点,它们并非某一个模块或者类所特有的,它们可能横跨多个模块或类,比如日志功能就行被系统中的很多模块引用。面向对象编程在处理此类关注点时所採用的办法就不够理想,从而造成了代码的混乱和分散[5~7]。可以通过一个简单的样例来说明採用向向对象编程实现横切关注点所带来的问题,这里给出一个封装了业务逻辑的类的实现框架:

public class BusinessClass extends BaseBusinessClass {
//核心数据成员
//其它数据成员:日志流,保证数据完整性的标志位等
//重载基类的方法
public void performSomeOperation(OperationInformation info) {
//安全性验证
<span style="white-space:pre"> </span>//检查传入数据是否满足协议
<span style="white-space:pre"> </span>//锁定对象以保证当其它线程訪问时的数据完整性
<span style="white-space:pre"> </span>//检查缓存中是否为最新信息
<span style="white-space:pre"> </span>//记录操作開始运行时间
<span style="white-space:pre"> </span>//运行核心操作
<span style="white-space:pre"> </span>//己录操作完毕时间
}
// 一些相似操作
public void save(PersitanceStorage ps) {}
}

在上面的代码中,存在两个问题:第一,其他数据成员不是这个类的核心关注点;第二,performSomeOperation()方法的实现做了很多核心操作之外的事,它要处理同志、验证、线程安全、协议验证和缓存管理等一些外围操作,并且这些外围操作相同也会应用于其他类。上述两个问题,归根究竟是因为OOP未能将系统中被多个模块所共同享用的需求非常好的模块化而引起的。为了解决横切关注点的模块化实现,一种新的编程技术—AOP面向方面编程(Aspect-OrientedProgramming)应运而生。

AOP技术应用和研究系列博客AOP技术应用和研究

AOP技术应用和研究--OOP的更多相关文章

  1. AOP技术应用和研究--AOP简单应用

    为了更好的理解AOP实践和体现AOP的优势.我们始终将OOP和AOP的比較贯穿到下文中.并在终于总结出AOP与OOP相比所拥有的长处,AOP的缺点以及AOP一般的使用场景. 1.1 问题空间到解空间的 ...

  2. AOP技术介绍--(.Net平台AOP技术研究)

    4.1.Net平台AOP技术概览 .Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级 ...

  3. JAVA平台AOP技术研究

    3.1 Java平台AOP技术概览 3.1.1 AOP技术在Java平台中的应用 AOP在实验室应用和商业应用上,Java平台始终走在前面.从最初也是目前最成熟的AOP工具--AspectJ,到目前已 ...

  4. AOP技术基础

    1.引言 2.AOP技术基础 3.Java平台AOP技术研究 4..Net平台AOP技术研究 2.1 AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto ...

  5. AOP技术基础(转)

    1.引言 2.AOP技术基础 3.Java平台AOP技术研究 4..Net平台AOP技术研究 2.1 AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto ...

  6. AOP技术介绍--(AOP技术基础)

    2.1 AOP技术起源        AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分 ...

  7. AOP技术介绍--(引言)

    软件设计因为引入面向对象思想而逐渐变得丰富起来.“一切皆为对象”的精义,使得程序世界所要处理的逻辑简化,开发者可以用一组对象以及这些对象之间的关系将软件系统形象地表示出来.而从对象的定义,进而到模块, ...

  8. 面向侧面的程序设计AOP-------《三》.Net平台AOP技术概览

    本文转载自张逸:晴窗笔记 .Net平台与Java平台相比,由于它至今在服务端仍不具备与unix系统的兼容性,也不具备类似于Java平台下J2EE这样的企业级容器,使得.Net平台在大型的企业级应用上, ...

  9. aop技术理解使用

    一.什么是AOP?   aop技术是面向切面编程思想,作为OOP的延续思想添加到企业开发中,用于弥补OOP开发过程中的缺陷而提出的编程思想.AOP底层也是面向对象:只不过面向的不是普通的Object对 ...

随机推荐

  1. golang-nw

    http://godoc.org/github.com/lonnc/golang-nw golang webkit golang walk

  2. linux 查找文件和文件夹与下载命令

    查找命令: 查找根目录下查找文件夹名称叫dir的目录地址 find / -name dir  -d 查找/var/www/目录下叫index.jsp的文件 find /var/www/ -name i ...

  3. [leetcode] Palindrome Number(不使用额外空间)

    本来推断回文串是一件非常easy的事情,仅仅须要反转字符串后在与原字符串相比較就可以.这道题目明白说明不能使用额外的空间.那么使用将其分解连接成字符串的方法便不是可行的.仅仅好採用数学的方式: 每次取 ...

  4. 74LS153 选择器 【数字电路】

    74LS153 我用了八个不同频率的方波信号,用153当作信号选择器,控制环节的开关是4通道的选择器,00 01 10 11分别选择通道 0 1 2 3 以下是八选一的demo

  5. Android自己定义圆角ImageView 支持网络图片

    先看下效果图 我们再来看一张CSDN的圆角图片 从布局能够看出csdn app 的头像也是圆角的Image,但能够看到.有明显的毛刺感.不知道是csdn 程序猿的疏忽还是 我手机的问题,本人手机(小米 ...

  6. [LuoguU41039]PION后缀自动机 树链剖分+动态开点线段树

    链接 刚开始看出题人题解都吓蒙掉了,还以为是什么难题,结果就一板子题 思路:对每一个文件名开一棵线段树,然后树剖即可 #include<bits/stdc++.h> #define REP ...

  7. jqXHR对象

    //$.ajax()返回的对象就是jqXHR对象 var jqXHR = $.ajax({ type:'post', url:'test.php', data:$('form').serialize( ...

  8. python路径找类并获取静态字段

    Python通过路径找类并获取其中大写的静态字段 settings.py class Foo: DEBUG = True TEST = True xx.py import importlib path ...

  9. 微信小程序简单常见首页demo

    wxml <view class='index-contier'> <view class="index-left"> <view>电池剩余&l ...

  10. MFC窗口显隐

    使用SetLayeredWindowAttributes可以方便的制作透明窗体,此函数在w2k以上才支持,而且如果希望直接使用的话,可能需要下载最新的SDK.不过此函数在w2k的user32.dll里 ...