代码编程教学入门 代码怎么编写( 六 )


代码编程教学入门 代码怎么编写


后来大家总结出了一套流程结构化的定律:任何程序都可以用顺序、选择、循环三种基本控制结构来表示 。
  • 顺序:代码是至上往下顺序执行的 。
  • 选择:if-else/switch选择执行 。
  • 循环:for/while控制循环执行 。
因此,结构化编程的本质,是对程序控制权的直接转移进行了规范和限制 。
b. 面向对象编程
结构化编程思维,比较靠近机器运行的思维,当程序越来越复杂的时候,大家发现简单靠结构化思维编程,很难构建起一个庞大的应用 。而在编码过程中,大家不知不觉的把一些数据和逻辑封装了起来,形成一个个可复用的组件 。慢慢大家总结出了一套符合人类理解客观世界的编程范式:利用事物的信息建模概念,如实体、关系、属性等,同时运用封装、继承、多态等机制来构造模拟现实系统的方法 。
  • 封装:核心是对实体建模,把客观世界的属性和行为,封装成类的数据和方法,同时通过控制访问权限(private/protect/public),对外隐藏细节 。
  • 继承:在封装的基础上,可以定义子类,从而使子类获得父类的属性和行为,这也符合人类从抽象到具象的认知思维 。
  • 多态:继承使得子类获得父类的行为,总有儿子不听爸爸话的时候,当子类重写了父类行为时,多态使得父类引用执行方法时,实际执行的是子类的行为 。
封装、继承、多态是面向对象的三大特征,三者的关系是层层递进的,而多态实际是规范了程序控制权的间接转移,在面向对象编程之前,大家是通过函数指针来解耦不同组件的函数实现,这种方式需要工程师严格遵守约定初始化函数指针,是非常脆弱的 。
因此,面向对象编程的本质,是规范了数据和行为的封装,同时限制了程序控制权的间接转移 。
c. 函数式编程
函数式思维,是一种数学思维,把一个问题分解为一系列函数 。函数式编程有多种定义,但是从根本上来看,它的核心是“纯函数”和“引用透明”:
  • 纯函数:无副作用,同样的输入永远得到同样的输出 。
  • 引用透明:任意函数直接用它的计算结果替代,而不影响任何调用它的程序 。
若要做到以上两点,就需要对赋值进行限制,即变量一旦初始化就不可以再修改 。
因此,函数式编程的本质,是规范了函数(一等公民/高阶函数/声明式/闭包等),同时限制了赋值行为 。
d. 编程范式总结
编程范式的本质,更多是告诉我们不能做什么,并且通过规范来约束我们的行为 。
  • 结构化编程:限制对程序的控制权做直接转移,请按照控制结构规范来 。
  • 面向对象编程:限制对程序控制权的间接转移,请按照封装、继承、多态的规范来 。
  • 函数式编程:限制了赋值行为,请按照函数的规范来 。
灵魂拷问一下:
  • 为什么面向对象编程大受推崇?
  • 为什么多数人在用面向对象语言写面向过程代码?
  • 为什么函数式编程束之高阁,很难产业化大规模使用?
我当前表浅的理解是:
  • 面向过程符合人类的直线直觉思维,不需要太多深度思考,可以快语直言 。
  • 面向对象需要充分了解客观主体信息,才能从中思考和提炼出要素(实体)、关系(方法)和目标(职责),要求有系统性的抽象思维 。
  • 函数式编程基于数学,缺少合适的抽象机制,纯函数式编程很难满足企业级应用要求的严格和复杂的业务需求 。
三种编程范式没有好坏之分,核心是思维方式的区别,针对不同的问题和场景,如何选择适当的方式来思考和解决问题,才是我们理解它们的关键 。

推荐阅读