编写s=1+2+3+...+n思路打破认知

简介: 最近在和领导讨论架构设计,其中涉及到如何通过代码来体现面向对象?通过一个例子来打破了原有的认知,以此总结记录自己的提升和成长

一、背景介绍


最近在和领导讨论架构设计,其中涉及到如何通过代码来体现面向对象?通过一个例子来打破了原有的认知,以此总结记录自己的提升和成长


二、思路&方案


  • 1.猛然想到的就是通过for循环,你是不是也想到了?(这种方式也称为迭代)


  • 2.面积公式(上底+下底)*高/2 (这种方式在编程里面是直接使用函数)


  • 3.通过F(x)=X + F(x-1) (这种方式也称为递归)


三、过程


1.for循环的代码简写如下


int s = 0;
for(int i=0;i<n;i++){
  s+=i;
}


1.1.面向过程的写法(注重如何做事情,最终把事情做完)

1.2.局部考虑问题(虽然把每个数变化的规律抽出来了,但是它是从头开始,依次累加的过程,至于要加到什么时候是不明确的;而从头这个事情也必须得是从1开始)


2.面积公式


ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
Object temp = jse.eval("(1+n)*n/2");


2.1.面向过程,通过函数的调用,直接将结果做了计算

2.2.全局考虑问题,将开始和结束做了整合,结合到了图形中(不过对于开始它还是一个死值)


3.递归方式


private int test(int s ,int n){
  //这里的判断可以抽取出去做成策略,以达到开始的动态
  if(n == 0){
    return n;
  }else{
    return test(s,n-1);
  }
  return s+n;
}


3.1.面向对象的写法(更考虑每一步由谁来提供,而不是怎么提供)

3.2.全局考虑问题,将开始和结尾都动态的考虑进去


四、总结


  • 1.面向过程是非常容易和直观的一种方式;如果你明确这段程序固定不变了(3-5年不会变化),那么这种方式将会让你的效率更高(例如:遥控器中的程序)


  • 2.面向对象是非常抽象的方式,需要极强的业务分析能力想象能力;这种方式相较于面向过程效率更低,但是扩展性更好、复用性更强


  • 3.全局观看待,不仅仅需要利用现有的资源,如果你还能创造出来资源那么你的胜算会更大,收获也会更丰富(一个东西的无用是因为放错了地方,一个资源的没看透是因为你还没找到更多的维度来看它)


  • 4.通过一个求和小例子,它背后体现的不仅仅是如何实现;更体现了思考与权衡的取舍


五、升华


  • 如果你的广度深度越强你将会拥有站到更远未来看现在的超级能力;


  • 不断突破自己的认知它会成就你做行业程序员级别提升;以及会帮助你持续做阶层跃迁。
相关文章
|
4月前
|
程序员
软件设计与架构复杂度问题之战略编程与战术编程的主要区别如何解决
软件设计与架构复杂度问题之战略编程与战术编程的主要区别如何解决
|
5月前
|
存储 算法 索引
深度挖掘:Python并查集背后的秘密,让你的代码逻辑清晰如水晶!
【7月更文挑战第17天】并查集,一种高效处理集合合并与查询的数据结构,常用于图论、社交网络分析等。Python中的实现利用数组存储元素的父节点,通过路径压缩和按秩合并优化查找和合并操作。简单代码示例展示了查找和合并方法,以及应用在检测无向图环路。并查集以其优雅的解决方案在算法世界中闪耀,提升代码的清晰度和效率。
55 5
|
算法
简单几行代码背后的重大意义
简单几行代码背后的重大意义
|
安全 数据可视化 测试技术
【设计思维框架】为现代企业重新设想的设计思维(下)
【设计思维框架】为现代企业重新设想的设计思维
|
架构师 UED
【设计思维框架】为现代企业重新设想的设计思维(上)
【设计思维框架】为现代企业重新设想的设计思维
|
架构师 UED
【设计思维框架】框架 :为现代企业重新设想的设计思维(上)
【设计思维框架】框架 :为现代企业重新设想的设计思维
|
安全 数据可视化 测试技术
【设计思维框架】框架 :为现代企业重新设想的设计思维(下)
【设计思维框架】框架 :为现代企业重新设想的设计思维
|
消息中间件 算法 JavaScript
对领域的认知比会写代码更重要
对领域的认知比会写代码更重要
|
测试技术
谈谈我理解的测试的核心价值
测试人员的核心价值      随着公司组织架构的调整,战略调整,产品的实现技术不断变化,现在的测试人员可以说是什么都可以干。       有些人做产品,有些人做平台,有些人做工具......     有些人有点象专职开发,有些人有点象专职运营......      Facebook,google的一些敏捷测试理念中,测试人员应该致力于提出测试解决方案,研究各种测试工具为主,具体的测试执行工作,由coding的开发同学去做。
1342 0