面向方面 面向接口

网上的内容 整理收集下增强自己的理解

 

 

什么是面向对象编程(Object-Oriented Programming)?
什么是面向组件编程(Component-Oriented Programming)?
什么是面向方面编程(Aspect-Oriented Programming)?
什么是面向服务编程(Service-Oriented Programming)?

 

 

1、什么是面向对象编程(Object-Oriented Programming)?
面向对象编程(Object-Oriented Programming)简称OOP技术,是开发计算机应用程序的一种新方法、新思想。过去的面向过程编程常常会导致所有的代码都包含在几个模块中,使程序难以阅读和维护。在做一些修改时常常牵一动百,使以后的开发和维护难以为继。而使用OOP技术,常常要使用许多代码模块,每个模块都只提供特定的功能,它们是彼此独立的,这样就增大了代码重用的几率,更加有利于软件的开发、维护和升级。
在面向对象中,算法与数据结构被看做是一个整体,称作对象,现实世界中任何类的对象都具有一定的属性和操作,也总能用数据结构与算法两者合一地来描述,所以可以用下面的等式来定义对象和程序:
对象=(算法+数据结构),程序=(对象+对象+……)。
从上面的等式可以看出,程序就是许多对象在计算机中相继表现自己,而对象则是一个个程序实体。

2、什么是面向组件编程(Component-Oriented Programming)?
组件不是一个新的概念,Java中的javaBean规范和EJB规范都是典型的组件。组件的特点在于他定义了一种通用的处理方式。例如,JavaBean 拥有内视的特性,这样就可以通过工具来实现JavaBean的可视化。而EJB规范定义了企业服务中的一些特性,使得EJB容器能够为符合EJB规范的代码增添企业计算所需要的能力,例如事务、持久化、池等。
所以,组件比起对象来的进步就在于通用的规范的引入。通用规范往往能够为组件添加新的能力(就像上面所讨论的),但也给组件添加了限制,例如你需要实现EJB的一些接口
COP比OOP更进一步。通常OOP将数据对象组织到实体中。这种方法具有很多优点。但是,OOP有一个大的限制:对象之间的相互依赖关系。去掉这个限制的一个好的想法就是组件。组件和一般对象之间的关键区别是组件是可以替代的。
3、什么是面向方面编程(Aspect-Oriented Programming)?
将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。
AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中。
4、什么是面向服务编程(Service-Oriented Programming)?
SOA是一种体系结构,目标是在软件代理交互中获得松散耦合。一个服务是一个服务提供者为一个服务消费者获得其想要的最终结果的一个工作单元。服务者与消费者都以软件代理代表他们自己的角色。
    这听起来有些太抽象,但是SOA确实无处不在。让我们在你的住房中找到一个SOA的例子。例如播放一个CD,你可以将要播放的CD放入CD机中,CD机将为你播放这张CD,CD机提供了一个CD播放服务。这里的好处就是你可以用不同的CD机去播放同一张CD。他们能提供同样的CD播放服务,但是服务质量是不同的。
    SOA的思想明显不同于面向对象的编程,面向对象编程强烈的建议你应该将数据与其操作绑定。因此在面向对象编程风格中,每张CD 有它自己的CD播放机,他们之间不能被拆开。这听起来很奇怪,但是这就是我们建立许多已存软件系统的方式。

 

 

 

面向接口编程

 

  1. package com.interfacetest;
  2. /*
  3.  * 
  4.  * 
  5.  去掉注释和不去掉注释到底区别在哪?请按此代码进行解释,谢谢。 
  6.  在本例中,我怎么就看不到优点呢?
  7.  * 
  8.  * */
  9. public class Test {
  10.     /**
  11.      * @param args
  12.      */
  13.     public static void main(String[] args) {
  14.         
  15.         Animal animal = new Dog(); animal.makeSound();
  16.         /*
  17.          * 
  18.          */
  19.         //Dog dog = new Dog(); dog.makeSound();
  20.         /*
  21.          * 
  22.          */
  23.         
  24.         /*
  25.          *面向组件编程的要义是在服务器与客户端之间定义契约,如你的例子中的Animal接口的makeSound()方法, 
  26. 只要这个契约不变,服务器根据不同的类(如你的dog和cat)可有不同的实现,甚至同一个类可以发布不同 
  27. 的版本,而客户端代码可不做改变。应该说面向组件编程与传统的面向对象编程是一大进步,但是它最大的缺 
  28. 点是不能实现不同平台的互操作,所以又出现了面向服务编程。 
  29.          * */
  30.     }
  31. }

 

  1. package com.interfacetest;
  2. public interface Animal {
  3.     void makeSound();
  4. }
  1. package com.interfacetest;
  2. public class Dog implements Animal {
  3.     public void makeSound() {
  4.         brak();
  5.     }
  6.     void brak() {
  7.         System.out.println("this is dog sound.");
  8.     }
  9. }

 

  1. package com.interfacetest;
  2. public class Cat implements Animal {
  3.     public void makeSound() {
  4.         meow();
  5.     }
  6.     void meow() {
  7.         System.out.println("this is cat.");
  8.     }
  9. }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值