编程范式:命令式编程(Imperative)、声明式编程(Declarative),函数式编程(fp)

参考比较好的博客:https://www.cnblogs.com/sirkevin/p/8283110.html

下面是我自己的总结

命令式编程

命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。对应英文即为How,如何实现(Imperative is How to do)

eg1. 命令式事务,使用者自行实现

@Component
public class Utils {
	@Autowired
	private 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 {
	@Autowired
	private Utils utils;
	@Override
	public 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 {

    @Bean
    public Service service() {
        return new Service();
    }

}

@Service
class Service {
    @Retryable(RemoteAccessException.class)
    public void service() {
        // ... do something
    }
    @Recover
    public void recover(RemoteAccessException e) {
       // ... panic
    }
}

区别比较,,,引出函数式编程

在这里插入图片描述
备注:
面向对象编程(object oriented programming)(OOP)
函数式编程(functional programming)(FP)


面向对象编程对象之间是如何关联起来的呢?共用数据状态,即State,数据状态相关依赖(面向过程编程POP是代码相互依赖)

而函数式编程是不会出现数据状态相互依赖,每个函数功能都是独立的,那么也就是说不存在数据共享的问题,既然不存在数据共享,那么就衍生出了函数式编程

函数式编程

一大特点是不修改状态,那么它就天然的支持多线程编程,且此种编程方式绝对的,即函数式编程为并发编程的一种安全处理手段。

讨论到此即可

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值