对编程范式的一些理解

面试官问我:XX编程是什么?你对XX编程的理解?

面向过程编程(POP)

全称 procedure oriented Programming。根据事情发展的步骤,按进行的过程划分,每一步都写成函数,也就是一系列函数的调用。比如做饭:买菜-洗菜-做饭-吃饭。

面向对象编程(OOP)

2分钟让你明白什么是面向对象编程

全称 Object Oriented Programming。将事情分成多个对象,不同的对象有着自己的行为和属性。比如做饭:构建一个人的类,人有名字、性别、身高、体重等属性,人.买菜- 人.洗菜-人.做饭-人.吃饭 等方法。

面向对象的特性:封装、继承、多态。

封装:将事物中抽出来的对象封装成类,对象的行为就是方法(函数),对象的特征就是属性。

继承:子类具有父类的某些行为,通过继承来实现。

多态:子类和父类都有xx方法,因此只有在最后执行代码的时候才知道是用的子类的xx方法还是父类的xx方法。

面向切面编程(AOP)

全称 Aspect Oriented Programming

AOP技术利用一种称为“横切”的技术,剖解开封装对象的内部,将影响多个类的公共行为封装到一个可重用的模块中,并将其命名为Aspect切面。所谓的切面,简单来说就是与业务无关,却为业务模块所共同调用的逻辑,将其封装起来便于减少系统的重复代码,降低模块的耦合度,有利用未来的可操作性和可维护性。

该博客作者以日志系统为例,我认为讲得很好,搬过来。

日志功能,日志代码往往横向散布在所有对象层次中,而与之对应的对象的核心功能毫无关系。对于其他类型的代码,如安全性、异常处理、透明的持续性等也都是如此,这种散布在各处而且无关的代码被称为横切(cross-cutting)。在OOP设计中,它们会导致大量重复的代码,不利用模块的重用。

AOP将软件系统划分为两个部分:核心关注点横切关注点,业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的特点是经常发生在核心关注点的多个位置,而且它们功能基本相似。AOP的作用在于分离系统中的各个关注点,将核心关注点和横切关注点分离开来

在这里插入图片描述
我觉得就是在这些切面位置编写对应的类,来做对应的操作,在核心关注点中使用即可。

结构化编程

全称 Structured programming。也就是将程序分成多个模块来开发。

自顶向下、逐步求精;其程序结构是按功能划分为若干个基本模块;各模块之间的关系尽可能简单,在功能上相对独立;每一模块内部均是由顺序、选择和循环三种基本结构组成;其模块化实现的具体方法是使用子程序。结构化程序设计由于采用了模块分解与功能抽象,自顶向下、分而治之的方法,从而有效地将一个较复杂的程序系统设计任务分解成许多易于控制和处理的子任务,便于开发和维护。
主要内容:
结构化程序设计方法具有很多的优点,但它是一种面向过程的程序设计方法,它把数据和处理数据的过程分离为相互独立的实体。当数据结构改变时,所有相关的处理过程都要进行相应的修改,每一种相对于老问题的新方法都要带来额外的开销,程序的可重用性差。
发表于 2018-08-23 11:55:01

在各个模块的开发中,使用三种结构来实现:分支结构 + 条件分支 + 循环结构 ,不要使用 GoTo 语句,了解过汇编语言的同学一定知道在汇编语言中就有 GoTo 语句,直接跳转到某条语句,这样做的后果就是导致程序的结构十分混乱,这就是 Goto危害论 ,所以后来的许多语言都没有了 GoTo 语句。

图片来自知乎
在这里插入图片描述
现在大多数使用的语言都是结构化编程的了,抛弃了GoTo语句。

函数式编程

建议大家看看阮一峰老师的博客 阮一峰的网络日志—函数式编程初探,我都能看懂你也可以的。

简单说,“函数式编程"是一种"编程范式”(programming paradigm),也就是如何编写程序的方法论。

他举的这个例子我觉得特别好。
在这里插入图片描述
Python 有所了解的同学会知道,在 Python 中的函数式编程就是内建的 map(), zip() , reduce()

参考文献

[1] 阮一峰的网络日志—函数式编程初探

[2] AOP 面向切面编程

猜你喜欢

转载自blog.csdn.net/besmarterbestronger/article/details/106728814
今日推荐