结构化编程
结构化编程对程序控制权的直接转移进行了限制和规范。
对结构化编程的结构举个例子,大家就明白了:顺序结构、分支结构和循环结构。现在大多数编程语言都禁止使用goto这样的无限制跳转语句,因为它将会损害程序的整体结构。
工作十几年,自己从未写过goto语句。但是见过一些源码有goto语句的,那时候才见识了goto的厉害:用它可以跳转到任何代码位置,不受限制。它破坏了程序的封装,修改一个类的内部结构变的很危险,增加了耦合性。
不过我们不必担心自己没有遵循结构化编程的范式,只要是按照编程语言推荐的语法都是遵循这一范式的。
面向对象编程
面向对象编程对程序控制权的间接转移进行了限制和规范。
面向过程和面向对象最大的不同在于,面向对象有更好的可读性和重用性。
记得头几年评价别人代码写的不怎么样会这样说:这个同学用面向对象的语言写出了面向过程的程序。
函数式编程
函数式编程对程序中的赋值进行了限制和规范。
面向对象编程是对数据进行抽象,函数式编程是对行为的抽象。我们来理解一下什么是对行为的抽象。
下面代码可以被编译通过:
new ArrayList().stream().forEach(x-> System.out.println(x=x+1));
下面代码不可以被编译通过:
int i =0;
new ArrayList().stream().forEach(x-> System.out.println(i+=x));
提示说i应该是final或者effectively(实际上) final。
为什么函数式编程要求用到的变量i为不可变的?但是没有要求x是不可变呢?
区别是x是函数的参数也就是输入,i是函数外变量。而函数式编程是对行为抽象,就是说对输入进行了一系列的处理行为,得到一个输出;不能对其他数据进行操作,对其他数据操作是面向编程做的事情。
举个生活中的例子:
记得高中的时候特别喜欢陆游那首<卜算子.咏梅>
驿外断桥边,寂寞开无主。
已是黄昏独自愁,更着风和雨。
无意苦争春,一任群芳妒。
零落成泥碾作尘,只有香如故。
这首古文描述了对梅花的加工行为。这个行为抽象为函数是这个样子的:
function 梅花变香泥(一枝梅) {
第一步:孤立它
第二步:让它经历黑暗
第三步:让它经历风雨
第四步:让其他花儿妒忌它
第五步:让它凋落到泥里化为尘土只保留香气
}
这里“梅花变香泥”行为被抽象,对调用者来说只要调用了这个函数,就是调用了那5步骤的行为。这里仅能对一枝梅处理,一枝红杏出墙来到这里,她只能对这枝梅产生改变,她可以嫉妒这枝梅冬天开放。“梅花已谢杏花新”,让梅花零落成泥后让杏花开放,这就不是这个函数该做的事了。
面向对象编程可以做这件事情,它是对数据的抽象:
暖气潜催次第春,梅花已谢杏花新。
暖气对象 暖气;
春对象 春;
梅花对象 梅花;
杏花对象 杏花;
public 春对象 描述春天() {
梅花.状态=谢了;
杏花.状态=开了;
春.空气状态=暖气;
春.梅花状态=谢了;
春.杏花状态=开了;
return 春;
}
我有对结构化编程没有什么疑问,毕竟50年前有人就用数学方法证明了顺序结构、分支结构和循环结构的正确性。
但是作为一直以java语言作为主要开发语言的我,java是面向对象的这句话一直在脑子里和引入函数式做斗争。
函数式编程确实有很多优势:因为函数式编程的引入变量都是不可变的,虚拟机实现时可以去掉很多多余的锁,并发处理更快;代码简洁;内聚性更好……
我仔细想了一下,对诸如java这种面向对象的编程语言来说,函数式编程和面向接口编程一样,是局部实现的技巧,整体结构还是面向对象的。
希望能帮助到你!
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)
Java面试精选题、架构实战文档
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
736569599)]
Java面试精选题、架构实战文档
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!