面向过程/对象/接口/方面编程的总结

**核心本质是:如何组织代码的问题?**
面向切面的编程是一种理念,并不是什么新的语法,核心思想是:
“一夫当关,万福抹开”,把公共执行的代码写在一个地方,
省的每个地方都写自己的代码。

异常处理
asp》mvc的GLOBAL 的
Application_Error
Filter四种过滤器

面向过程/对象/接口/方面编程的总结

对于这些概念的解释,网络上是有许多文章。但本文是纯手打的成果,完全用自己的语言来描述、综合、概括,绝非采集和转载。
关于这些「面向」,网络上的介绍已经非常丰富。不过为了达到「一站式」的效果,这篇文章尝试用作者自己的语言概括,让读者能够快速了解它们。
它们都是编程范式,或者说一种模式,习惯,而不是技术。

面向过程和对象是一组关系,强调完成任务过程中不同的关注点(Concern)。
面向接口和切面基于面向对象,目的是方便日后移植、扩展和代码复用(Reuse)。
关键词:编程 面向 过程 对象 接口 方面 切面 对比
  1. 过程和面向对象编程

以打印机打印为例。
过程编程

过程编程(Procedural programming)类似流水线。每个步骤——读取、分析、检查设备和墨水、打印、打印后……串联起来,依次执行。

面向对象编程

面向对象编程(Object oriented programming)类似职能部门。把任务分解为一系列变量、数据结构、子方法等,按需调用。

告诉电脑有「打印机」这么一个东西(对象),它有墨水、纸等配件(属性),墨水又有剩余量的子属性。并且打印机还有一个打印东西的功能(方法),其中又有检查墨水、打印等步骤(子方法)。
上司知道自己公司有打印的能力,对打印部下达命令,打印部按照公司规章流程,先去命令后勤部检查墨水等材料的库存,然后命令生产部开始生产。
对比
很显然它们其实都可以达到同样的目的,只不过达到目的的方式略有不同。一个比较直接(要做什么就直接做了),一个比较直观、方便管理(通过封装成一个对象,或者说一个职能部门,要你做什么就做什么)。
所以写驱动程序的时候一般用 C/C++,因为通常,打印机就是打印机,它不要求播放音乐和拍照。但是如果写一套复杂的程序,比如 Word,它的功能不只是打印,还有编辑排版、审阅、统计字数、加密、发送等一系列要求,这时对象就比较高效。
需要注意的是,语言和面向没有直接关系。不是说 C语言 = 面向过程,C# = 面向对象。
面向接口和面向切面(方面)
面向接口

面向接口编程(Interface-Oriented Programming)是基于面向对象的,因为接口是对对象的抽象,目的是方便移植和扩展。
除此之外,你也可以把接口理解为协议、功能描述、标准、要求、共同之处等。

它通常和模块化(Modularity)联系在一起,如同机器的一个个部件,可以拆开单独开发(团队开发)和单独测试(单元测试,Unit testing)。如果两个部件需要联系,比如 USB 设备和电脑需要通信,则它们需要一个接口,即 USB 端口。
USB 端口就是一个现实的物理的接口,只要是带 USB 功能的设备,不管是可移动磁盘、鼠标、键盘还是什么东西都能用(可移植)。而且一开始电脑可能什么功能都没有,而你通过接入其它硬件接入这个接口就能拓展电脑的功能(可扩展)。
打印机接口可以视为打印机和电脑的协议——你给我文档我帮你打印,可以视为打印机的功能描述,一个能打印的东西才能叫做打印机(标准),打印机都要求有打印功能(要求),所有的打印机都能打印(共同之处)。
为什么能方便移植?面向接口编程时,调用的是接口而不是实现类。通俗地说,有奶就是娘。
为什么能方便扩展?扩展的部分是实现类,接口还是那个接口,即所谓开闭原则(Open Closed Principle)。程序原有部分(调用接口的部分,比如要求打印功能的打印按钮)通常不改动,改动的是打印的实现部分(比如增加新的打印机支持等),这样可以减少改来改去的时间,轻松实现功能更新。
面向切面(方面)

面向方面编程(Aspect Oriented Programming)是把频繁使用的方法提取出来。
比如每一步操作都需要记录日志,就把日志记录功能提取出来形成模块(Module),
这样就不必在每一步操作中一次又一次添加写日志的代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是刘彦宏吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值