本文主要是介绍编程范式:命令式编程(Imperative)、声明式编程(Declarative),函数式编程(fp),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考比较好的博客:https://www.cnblogs.com/sirkevin/p/8283110.html
下面是我自己的总结
命令式编程
命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么
。对应英文即为How,如何实现(Imperative is How to do)
eg1. 命令式事务,使用者自行实现
@Component
public class Utils {@Autowiredprivate DataSourceTransactionManager dataSourceTransactionManager;// 开启事务public TransactionStatus openTx() {return dataSourceTransactionManager.getTransaction(new DefaultTransactionAttribute());}// 提交事务public void commitTx(TransactionStatus ts) {dataSourceTransactionManager.commit(ts);}// 回滚事务public void rollbackTx(TransactionStatus ts) {dataSourceTransactionManager.rollback(ts);}
}@Service
public class RegisterServiceImpl implements RegisterService {@Autowiredprivate Utils utils;@Overridepublic void programming(String name,String age,String studentId) {TransactionStatus ts = null;try {// 开启事务ts = utils.openTx();registerMapper.programming( name, age, studentId);int a=1/0;registerMapper.programming( name, age, studentId);if (ts != null) {// 提交事务utils.commitTx(ts);}} catch (Exception e) {if (ts != null) {// 回滚事务utils.rollbackTx(ts);}}}
}
eg2.The following example shows how to use Spring Retry in its imperative style ,此例子帮助理解(这里针对的实现重试功能)
RetryTemplate template = RetryTemplate.builder().maxAttempts(3).fixedBackoff(1000).retryOn(RemoteAccessException.class).build();template.execute(ctx -> {// ... do something
});
声明式编程
声明式编程是以数据结构的形式来表达程序执行的逻辑。它的主要思想是告诉计算机应该做什么,但不指定具体要怎么做
。对应英文即为What,要做什么东西(Declarative is What to do)
eg1. 在Spring框架中,声明式编程只能体现的即为注解式编程,如事务@Transactional
注解,即表示此方法具有什么功能,使用者不关心实现
@Transactional
public void executeSkill() {
...
}
eg2.The following example shows how to use Spring Retry in its declarative style,此例子帮助理解(这里针对的实现重试功能)
@Configuration
@EnableRetry
public class Application {@Beanpublic Service service() {return new Service();}}@Service
class Service {@Retryable(RemoteAccessException.class)public void service() {// ... do something}@Recoverpublic void recover(RemoteAccessException e) {// ... panic}
}
区别比较,,,引出函数式编程
备注:
面向对象编程(object oriented programming)(OOP)
函数式编程(functional programming)(FP)
面向对象编程对象之间是如何关联起来的呢?共用数据状态,即State,数据状态相关依赖(面向过程编程POP是代码相互依赖)
而函数式编程是不会出现数据状态相互依赖,每个函数功能都是独立的,那么也就是说不存在数据共享的问题,既然不存在数据共享,那么就衍生出了函数式编程
函数式编程
一大特点是不修改状态,那么它就天然的支持多线程编程,且此种编程方式绝对的,即函数式编程为并发编程的一种安全处理手段。
讨论到此即可
这篇关于编程范式:命令式编程(Imperative)、声明式编程(Declarative),函数式编程(fp)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!