面向方面编程
㈠ 什么是面向对象编程
面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。
对于面向对象的理解。面向对象编程就是把自然界中的事物抽象成一个类,这个类可能会有一些属性。比如说把“人”抽象成一个类,那么人有身高、体重、三围等等属性。同时这个类可能会有一些方法,比如“人”可以吃喝(对自己的影响是增加体力)、可以走路和跑跳(~使自己产生位移)。
用伪代码定义一下人这个类
人
{
//属性有
姓名,
身高,
体重,
……
//方法有
吃(东西), //参数可以是不同的东西,获得的能量也不同。
走(方向),
……
}
类的实例叫做对象,在程序中可以通过实例化这个类来描述一个人的属性,比如这个人叫张三,身高180cm,80kg,三围是xx、xx、xx等等。
比如我们做了一个游戏,那么在新玩家创建角色的时候,就可以让玩家选择他角色的名字、外形等等参数,然后,用“人”这个类,实例化一个对象,然后在游戏中可以通过键盘或者鼠标触发走的动作。
㈡ 什么是面向对象编程
它通过给程序中加入扩展语句,把函数“封装”进编程所必需的“对象”中。面向对象的编程语言使得复杂的工作条理清晰、编写容易。说它是一场革命,不是对对象本身而言,而是对它们处理工作的能力而言。对象并不与传统程序设计和编程方法兼容,只是部分面向对象反而会使情形更糟。除非整个开发环境都是面向对象的,否则对象产生的好处还没有带来的麻烦多。有人可能会说PHP不是一个真正的面向对象编程的语言, PHP 是一个混合型 语言,你可以使用面向对象编程,也可以使用传统的过程化编程。然而,对于大型项目的开发,你可能想需要在PHP中使用纯的面向对象编程去声明类,而且在你的项目开发只用对象和类。随着项目越来越大,使用面向对象编程可能会有帮助,面向对象编程代码很容易维护,容易理解和重复使用,这些就是软件工程的基础。在基于Web的项目中应用这些概念就成为将来网站成功的关键。 对象(Object)是问题域或实现域中某些事物的一个抽象,它反映此事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组服务的封装体。 关于对象要从两方面理解:一方面指系统所要处理的现实世界中的对象;另一方面对象是计算机不直接处理的对象,而是处理相应的计算机表示,这种计算机表示也称为对象。简单的来说,一个人就是一个对象,一个尺子也可以说是个对象。
㈢ 面向对象编程是什么意思
它是一种编程风格,就是把一切东西看成一个个对象,比如人,车,面包,等等,然后把这些对象拥有的属性变量,比如年龄,民族,工作地点,变质期,寿命,还有操作这些属性变量的函数打包成一个类来表示,这个类的一个抽象就是一个对象,比如人这个类包含一些属性,比如年龄,名字,住址等,他还有一些对别人告诉这些属性的功能,比如:说,看,走等!!这就是的面向对象的特点!!!
㈣ 面向方面编程的特点
每个框架应用切点、通知或方面的方法都是独特的,但是其目的和概念是相同的。在本文示例中,Encaser 包装一个对象时真正进行的操作是,通过 System.Reflection.Emit 命名空间中的类产生 MSIL 代码,从而随时创建新的 Contact 类型。新 Contact 类型派生于 Contact 类,它仍然共享类型,但是新包装的对象还持有对 ContactSave 对象的引用,后者是我们混入的。ISavable.Save 方法在新的 Contact对象上实现,因此在调用 Save 时,它实际上将调用委托给混入的 ContactSave 对象。这样做的优点是能够将新的 Contact对象转换为在任何混入对象上实现的任何接口。
图 2. 包装对象的 UML 图表。
您或许在想,通过 .NET Framework 2.0 的部分类语言功能,可以在另一个 partial 类中添加 Save 行为。这是可能实现的,但是本文没有采用这种方法,这是为了使代码与 .NET Framework 1.x 的其他版本向后兼容。既然有部分语言功能,那么在正常情况下,前面的示例也就不需要使用混入 了。但是混入 仍然很有价值,因为通过它,开发人员可以混入可重用的对象行为,这些对象可以源自其他不相关的对象层次结构,它实现的功能比 partial 类更多。在使用 partial 关键字时,是在同一个类或类型中添加代码,只不过物理位置不同。下一个混入示例说明的添加行为不只特定于 Contact 类,而是一个名为 FieldUndoer 的可重用类。FieldUndoer 实现了 IUndoable 接口,允许已修改的对象恢复为原来的状态。
Public Interface IUndoable
ReadOnly Property HasChanges() As Boolean
Sub Undo()
Sub AcceptChanges()
End Interface
HasChanges 属性表示,如果发生了更改,Undo 将对象恢复为原来的状态,AcceptChanges 接收对象的当前更改,因此任何时候再调用 Undo 时都会恢复为上一次接收更改的状态。如果该接口是在一个部分类中实现的,那么在每个希望包含该行为的类中,都必须不厌其烦地重复实现这三个方法。作为一个实用主义编程人员,我尝试坚持“一次且仅一次代码”原则,所以我永远不想重复任何代码,复制和粘贴越少越好。通过使用混入,我能够重用实现 IUndoable 的 FieldUndoer对象。在 ServiceManager 中我又混入了这个新功能。所有客户端代码仍然不知道新的混入,而且也不需要更改,除非需要使用 IUndoable 接口。更改 MainForm 中的 Contact对象,然后单击“撤消”,测试这个行为。
Public Shared Function GetAllContacts() As ContactService.Contact()
Dim service As ContactService.Service = New ContactService.Service
Dim contacts() As ContactService.Contact = service.GetAllContacts
'//Wrap each contact object
For i As Integer = 0 To contacts.Length-1
'//Create a new instance of the encaser
'//responsible for wrapping our object
Dim encaser As encaser = New encaser
'//Add mixin instance of ContactSave
Dim saver As ContactSave = New ContactSave
encaser.AddMixin(saver)
'//Add mixin instance of FieldUndoer
Dim undoer As FieldUndoer = New FieldUndoer
encaser.AddMixin(undoer)
'//Creates a new object with Contact
'//and ContactSave implementations
Dim wrappedObject As Object = encaser.Wrap(contacts(i))
'//Assign our new wrapped contact object
'//to the previous contact object
contacts(i) = DirectCast(wrappedObject, _
ContactService.Contact)
'//Notice the wrapped object is still the same type
'//Assign the new wrapped Contact object to target fields
saver.Target = contacts(i)
undoer.Target = contacts(i)
Next
Return contacts
End Function
组合行为
混入还只是冰山一角。真正让 AOP 声名鹊起的功能是组合混入行为。以使用新 Contact对象为例,在调用 ISavable.Save 方法时,客户端代码还需要调用 IUndoable.AcceptChanges 方法,以便在下一次调用 IUndoable.Undo 时恢复到所保存的上一次更改。在这个小的 MainForm 中浏览和添加该对象很容易,但是在任何比用户界面大得多的系统中对该规则编码将是一项繁重的任务。您需要查找所有调用 Save 方法的情况,然后添加另一个对 AcceptChanges 的调用。而且在创建新代码的过程中,开发人员也需要牢记,在每次调用 Save 时都添加这个新功能。这很快就会产生级联效应,很容易会破坏系统稳定姓,引入一些难于跟踪的 bug。而使用面向方面的编程则能够组合这些方法。指定一个切点和通知,在调用 Save 方法时,Contact对象将自动调用后台的 AcceptChanges。
为了在应用程序中实现组合,需要在 ServiceManager 中再添加一行代码。我们在加入 FieldUndoer 混入后添加这行代码。
'//Specify join point save, execute the AcceptChanges method
encaser.AddPointcut(Save, AcceptChanges)
AddPointcut 方法通过几个不同的签名进行重载,这为指定切点提供了更大的灵活性。我们调用的 AddPointcut 接收了一个字符串类型的接合点名,它表示为 Save 方法,然后又接收了一个名为 AcceptChanges 的方法作为执行的通知。要查看这是否起作用,可以分别在 FieldUndoer.AcceptChanges 方法和 ContactSave.Save 方法前设置一个断点。单击 MainForm 上的 Save 按钮将截获接合点,您首先将中断至通知 — 即 AcceptChanges 方法。通知执行后将执行 Save 方法。
这个简单的示例说明如何添加贯穿整个应用程序的新行为,其功能强大无比。尽管有此功能,但它不仅仅是添加功能的一种很好的新方法。在众多优点中,只有几个涉及代码重用,以及通过简化新需求带来的系统进化来改进系统的可维护性。与此同时,误用 AOP 会对系统的可维护性造成显着的负面效应,因此了解使用 AOP 的时机和方法很重要。
AOP 走了多远?
将 AOP 用于多数大型系统或关键的生产系统还不完全成熟,但是随着语言支持的提高,AOP 的应用将更容易。另外,提高支持也是新的软件开发范例,例如利用面向方面的编程的软件工厂。在 .NET 领域中有几种可用的 AOP 框架,每个框架都有其自己的方法、正面属性和负面属性。
Encase — 本代码示例中的 Encase 框架只是一个工具,帮助您快速了解并运行 AOP,以及理解 AOP 背后的概念。Encase 在运行时期间应用能够单独添加到对象的方面。
Aspect# — 一个针对 CLI 的 AOP 联合兼容框架,提供声明和配置方面的内置语言。
RAIL — RAIL 框架在虚拟机JIT 类时应用方面。
Spring.。。。 — 流行的 Java Spring 框架的一个 .NET 版本。在下一个版本中将实现 AOP。
Eos — 用于 C# 的一个面向方面的扩展。
㈤ 什么是面向对象编程思想
面相对象不是某一种语言的特性,而是一种编程思想。面向对象的编程的主要思想是把构成问题的各个事物分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述一个事物在解决问题的过程中经历的步骤和行为。
面向对象的三大特征分别是:封装、继承、多态,这三者是面向对象编程的基本要素
面向对象编程(Object-oriented Programming,缩写:OOP)
是软件工程中一种具有对象概念的编程范式(Programming Paradigm),同时也是一种程序开发的抽象方针,与之对应的编程范式还有:函数式编程(Functional Programming)、过程式编程(Proceral Programming)、响应式编程(Reactive Programming)等。
㈥ Spring 依赖注入怎么回事,还有面向方面编程是怎么回事
依赖注入,也称反转控制,IoC,
DI,这些都是一回事,简单说起来就是Spring提供了一个Java
Bean的处理器,通过读取xml配置文件或注解(Annotation)来自动为你需要的的接口类型,实例化(也就是新建)对象,这样你的代码就不需要针对具体对象编程,而是抽象成接口来编写,实现部分可以与抽象部分分开,便于分层,并随时替换实现方式,这也叫做注入。
面向方面编程,实际应该叫AOP,面向切面编程,这是Spring容器的另一大功能,它可以通过反射技术为你已经写好的代码自动加上一些通用功能,也是通过通过读取xml配置文件或注解(Annotation)为依据来进行反射实现的,用到了JDK的反射或CGLib的反射,能够对方法的不同部分(如前置,后置,抛出异常,环绕等)加入代码,一般用于数据库的事务处理(数据库更新类事务前后一般要加beginTransaction,
endTransaction之类的代码)或日志处理等等。
㈦ 面向对象、面向接口、面向方法编程的区别
其实不论是面向接口还是面向对象还是面向方面编程,只是设计模式的一种体现,用最简单的话来解释就是:
----------------------------------------------------------------------------
面向对象编程就是一堆对象,通过封装、继承、多态等更加有效的组织程序。
面向接口编程就是一堆接口,通过接口规约对象的属性和方法,是面向对象一部分。
来源:(http://blog.sina.com.cn/s/blog_5396eb530100fkla.html) - 关于面向接口、面向对象、面向方面编程的比较区别_simoniu_新浪博客
面向方面编程把业务的主逻辑和次逻辑分开的一种思想。
面向对象不好解释,可以理解为以一切元素都是对象,在设计时以对象为单位,考虑它的属性及方法。设计中采用了封装、继承、抽象的手法
面向接口本身就是面向对象的,无所谓区别,只不过面向接口的好处是耦合性低
面向方面Aspect-Oriented Programming (AOP)就是大名鼎鼎的AOP。其实有点象struts里的拦截器。
举例:假设有在一个应用系统中,有一个共享的数据必须被并发同时访问,首先,将这个数据封装在数据对象中,称为Data Class,同时,将有多个访问类,专门用于在同一时刻访问这同一个数据对象。
为了完成上述并发访问同一资源的功能,需要引入锁Lock的概念,也就是说,某个时刻,当有一个访问类访问这个数据对象时,这个数据对象必须上锁Locked,用完后就立即解锁unLocked,再供其它访问类访问。 这种加锁与解锁的操作可以使用拦截器来实现。而拦截器本身就是面向方面编程的一个具体应用。
㈧ .NET中如何使用面向方面编程
你是指面向对象吗?面向对象是一种编程的思想,是程序设计的一种方法。给你找一些相关资料吧。
面向对象是一种的程序设计方法,或者说它是一种程序设计范型,其基本思想是使用对象,类,继承,封装,消息等基本概念来进行程序设计。
它是从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统)。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。
它可以有不同层次的理解:
从世界观的角度可以认为:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。
从方法学的角度可以认为:面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统。
从程序设计的角度来看,面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。
例说 面向过程 和 面向对象 在程序设计时的区别
面向过程 是一种以 事件 为中心的编程思想。
面向对象(Object Oriented,简称OO) 是一种以 事物 为中心的编程思想
下面以公共汽车为例,分别讲述 面向过程 和 面向对象 在程序设计时的区别。
面向过程 就是汽车启动是一个事件,汽车到站是另一个事件。在编程序的时候我们更关心的是某一个事件。而不是汽车本身。我们分别对启动和到站编写程序。类似的还有修理等等。
编写程序就是:
public class 运营
{
void 汽车启动
{
}
void 汽车到站
{
}
}
public class 运营
{
void 汽车启动
{
}
void 汽车到站
{
}
}
面向对象 需要建立一个汽车的实体,由实体引发事件。我们更关心的是一个汽车实体而不是汽车的每个事件。
编写程序就是:
public class 汽车
{
void 到站()
{
}
void 启动()
{
}
}
希望对你有帮助。
㈨ [转载]什么是面向切面编程(AOP)
面向对象的编程主要注重核心业务,而面向切面编程主要关注一些不是核心的业务,但又是必须的辅助功能,比如一个完整的系统中,记录平时系统运行时抛出的异常,需要我们去记录,以便我们对系统尽快的修复。这就是我们常用的日志。如果对一些要求比较重要的数据操作,事务是不可少的,如金融系统,这样的数据很重要,每步操作都很重要,我们就应该用到事务处理。这就是我们常用的事务处理。可根据你的系统数据的重要性,有选择的应用。还用一个常用的就是安全验证了,它也是常用的,对于不同的页面,访问的身份也不一样。这就是我们常用的身份验证。以上这些不是针对特定那个业务模块的,可能针对所有的模块。它们只是一些附加的功能,相对模块的主功能而言。如果在每个模块中都夹杂着这些不是核心业务的代码,看起来与核心业务有点关系,但这样处理,会对以后的维护比较头疼。同时也违背了面向对象的一条原则,
自己对自己负责
面向方面的编程主要是辅助核心业务的,它并不是核心业务,但它又是不可缺少的。我们可以这样理解它与面向对象思想的联合使用。其实面向方面编程就是把那些夹杂在核心业务方法里面的代码抽取出来并模块化,把它们单独看成一个模块功能.来与核心业务共同完成比较完善的功能.
面向方面编程(
Aspect-Oriented
就是把那些不是核心业务应该处理的代码提取出来,进行封装成模块化.来处理那些附加的功能代码
.(如日志,事务,安全验证)我们把这个模块的作用理解为一个切面,告诉我们它是一个功能模块.我们可以把它看成一个切面.说白了就是我们写一个类,在这个类中写一些处理在核心业务中起到同样效果的方法.这样大家应该明白了吧.专业的概念就是那么难理解.
第二个:连接点(Joinpoint),简单的理解就是在切面模块中定义的方法.就是上面定义类中的方法.
第三个:切入点(Pointcut).就是连接点的集合,就是一组方法的集合了.以下几个就比较理解了,目标对象就是要处理的核心业务了.代理就更容易理解了,让一个代理去完成这个任务.