理解POP、OOP、AOP编程
一、面向过程编程:(POP:Procedure Oriented Programming)
面向过程编程是以功能为中心来进行思考和组织的一种编程方法,它强调的是功能(即系统的数据被加工和处理的过程),在程序设计中主要以函数或者过程为程序的基本组织方式,系统功能是由一组相关的过程和函数序列构成。
从思维上来讲,面向过程更强调细节,忽视了整体性和边界性。
典型代表是 C/C++的结构体
理解:
分析解决问题所需要的步骤,然后用函数把这些步一一实现,使用的时候按顺序依次调用就可以了
代码线性,严格按着顺序,侧重解决步骤,着眼局部或者具体。
优点
- 流程化编程任务明确,在开发之前基本考虑了实现方式和最终结果;
- 开发效率高,代码的短小精悍,善于结合数据结构来开发高效率的程序;
- 流程明确,具体步骤清楚,便于节点分析。
缺点
- 需要深入的思考,耗费精力;
- 代码重用性低,不易扩展,维护起来难度大;
- 对复杂业务,面向过程的模块化难度较高,耦合度比较高。
二、面向对象编程:(OOP:Object Oriented Programming)
面向对象编程以对象为中心,面向对象作为一种新型的程序设计方法,其是以对象模型为基础进行的抽象过程,并在应用过程中形成了描述自己的抽象概念定义,包括对象、类、封装、继承以及多态等。
面向对象是一种编程范式,满足面向对象编程的语言,一般会提供类、封装、继承等语法和概念来辅助我们进行面向对象编程。
理解:
万物皆对象,可以搭建大型的复杂系统
首先,它必须将数据抽象为模块结构;
其次,必须存在某种方式来实现代码的多态执行;
最后,它至少能部分压缩代码和函数。
优点
- 结构清晰,注重 对象和职责,不同的对象承担不同的职责;
- 封装性,将事务高度抽象,便于流程中的行为分析、操作;
- 容易扩展,代码重用率高,可继承,可覆盖;
- 实现简单,可有效地减少程序的维护工作量。
缺点
- 面向对象在面向过程的基础上高度抽象,从而和代码底层的直接交互非常少,从而不适合底层开发和游戏开发,甚至是多媒体开发;
- 复杂性,对于事务开发而言,事务本身是面向过程的,过度的封装导致事务本身的复杂性提高。
三、面向切面编程:(AOP:Aspect Oriented Programming)
面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
理解:
可以让类动态化,动态粒度更小,可以修改类中的成员
专注实现自身业务功能,周边业务功能可动态加进来(用户验证/日志处理/...)
优点
- 简单,易用;
- 降低模块的耦合度;
- 使系统容易扩展;
- 设计决定的迟绑定:设计师可以推迟为将来的需求作决定;
- 更好的代码复用性。
缺点
- 增加额外重复代码,且紧耦合;
- 每个业务逻辑需要一个装饰器实现或代理;
- 使用麻烦,须增加容器。
总结
POP编程是以功能为中心来思考和组织程序,注重功能的实现,达到效果就可以了;
OOP则注重封装,以对象为中心,强调整体性,代码整体变得更规范;但是OOP的耦合性还是很高,一旦代码需要修改,会对很多类造成影响,代码冗余问题严重,而且核心业务中总夹杂着一些它并不关心的通用业务,比如日志记录、性能统计、安全控制、事务处理、异常处理等;
AOP正好解决了OOP周边通用业务的解耦问题。
三者之间是一个相互补充和完善的关系。
理解POP、OOP、AOP编程的更多相关文章
- 使用spring方式来实现aop编程
1:什么是aop? Aspect Oriented Programming 面向切面编程 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译 ...
- 简述AOP编程
aop是面向切面编程的简称,对业务逻辑中的各个部分切割隔离,使耦合度降到最低,不仅增加了开发效率,还增强了系统的重用性和可维护性. 个人理解是把面向对象编程和面向函数编程结合在了一起. 说了这多的好处 ...
- 【原】iOS动态性(三) Method Swizzling以及AOP编程:在运行时进行代码注入
概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为“移花接木 ...
- 聊Javascript中的AOP编程
Duck punch 我们先不谈AOP编程,先从duck punch编程谈起. 如果你去wikipedia中查找duck punch,你查阅到的应该是monkey patch这个词条.根据解释,Mon ...
- struts2.1笔记03:AOP编程和拦截器概念的简介
1.AOP编程 AOP编程,也叫面向切面编程(也叫面向方面):Aspect Oriented Programming(AOP),是目前软件开发中的一个热点,也是Spring框架中的一个重要内容.利用A ...
- Method Swizzling以及AOP编程:在运行时进行代码注入-备用
概述 今天我们主要讨论iOS runtime中的一种黑色技术,称为Method Swizzling.字面上理解Method Swizzling可能比较晦涩难懂,毕竟不是中文,不过你可以理解为“移花接木 ...
- AOP编程,spring实现及JDK,CGLIB实现
什么是AOP? AOP(Aspect-OrientedProgramming,面向方面编程)和OOP(Object-Oriented Programing,面向对象编程)思想不同,两者并非对立关系,前 ...
- AOP编程和ASP.NET MVC
AOP编程和ASP.NET MVC AOP(Aspect oriented programming)面向切面编程.说成切面不容易理解,代码哪里有切面?又不是三维物体.概念不管,我们从其思想来理解这个名 ...
- 在.NET Core中三种实现“可插拔”AOP编程方式(附源码)
一看标题肯定会联想到使用动态编织的方式实现AOP编程,不过这不是作者本文讨论的重点. 本文讨论另外三种在netcore中可实现的方式,Filter(过滤器,严格意义上它算是AOP方式),Dynamic ...
- Java基础-SSM之Spring的AOP编程
Java基础-SSM之Spring的AOP编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Spring的本质说白了就是动态代理,接下来我们会体验AOP的用法.它是对OOP的 ...
随机推荐
- Sublime Text 3 配置java程序运行环境
最近在使用Java时,发现eclipse太耗电了,就想着用sublime text 3,要使用就要先配置,这是这个软件的特性,于是纠缠了一下午,网上流传很多配置运行java的文章,都没找到合适的(主要 ...
- 小小知识点(十四)——Adobe photoshop cc 2018中简单抠图的一些基本操作
一 如何抠图 1. 右键弹出选择工具,随后鼠标左键选择快速选择工具 2.通过点击鼠标,选择想要的区域: Alt+鼠标右键 左右拖动鼠标可调整画笔大小 Alt+鼠标滑轮,可放大或缩小画布大小 ctrl ...
- 线程池:ThreadPoolExecutor的使用
ThreadPoolExecutor配置 一.ThreadPoolExcutor为一些Executor提供了基本的实现,这些Executor是由Executors中的工厂 newCahceThread ...
- 【转】ArcGIS 10.1 for Server 架构
前一段时间在博客中公布了我们的计划,我们采用博客的形式将对ArcGIS10.1 for Server进行全面介绍.但这种形式有一定的遗憾:缺少互动的空间,所以我们希望广大爱好者能将自己感兴趣的话题在博 ...
- 常用Java静态代码分析工具的分析与比较
给国产静态代码检测工具Pinpoint打Call! 简介 本文首先介绍了静态代码分析的基本概念及主要技术,随后分别介绍了4种现有的主流Java静态代码分析工具 (Checkstyle,FindBugs ...
- GoCenter助力Golang全速前进
一.背景 Go语言是Google开发的一种静态强类型.编译型.并发型,并具有垃圾回收功能的编程语言.为了方便搜索和识别,有时会将其称为Golang.自2009年11月Google正式宣布推出,成为开放 ...
- 双重 hash
#include<stdio.h> #include<map> #include<queue> #include<algorithm> using na ...
- Http协议 Content-Type
详情:https://www.cnblogs.com/ranyonsue/p/5984001.html *****Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面. ** ...
- Java框架之SpringMVC 04-视图解析-Spring表单-JSON-上传下载
SpringMVC 视图解析 请求处理方法(controller方法)执行完成后,最终返回一个 ModelAndView 对象,即使出现异常也会返回一个 ModelAndView 对象.对于那些返回 ...
- Java服务端两个常见的并发错误
理想情况来讲,开发在开始编写代码之前就应该讲并发情况考虑进去,但是大多数实际情况确是,开发压根不会考虑高并发情况下的业务问题.主要原因还是因为业务极难遇到高并发的情况. 下面列举两个比较常见的后端编码 ...