结构化编程
如何理解结构化编程。
原始的编程
使用汇编语言编程,汇编语言中实现条件判断时通过go to语句进行跳转,go to语句对跳转的范围没有限制。
int a = 1;
if a = 3 go to xxx
结构化编程的改动
将原始编程的go to的方式做了一定的限制,将实现逻辑进行了封装,封装为小的模块。
void test() {
int a = 1;
if(a = 1) {
this.test2();
} else {
this.test3();
}
}
void test2() {
}
void test3() {
}
结构化编程的最佳实践为功能性拆分,将一个大的业务逻辑按照功能拆分为小的模块,并且使用逻辑判断组合为整个业务逻辑。
结构化编程的好处
对程序控制权的直接转移进行了限制和规范(老编程模式使用go to语句无限跳转,使用结构化编程if/then/else可以将跳转语句限制在一定范围内)
面向对象编程
这里不讨论面向对象的三个概念:“封装、继承、多态。
为什么要有面向对象编程?
面向对象编程之前
开发者通过函数指针调用函数中的变量,函数指针对于开发这么没有限制都可以随意调用。
这个主要体现在使用C语言上。
面向对象编程
将函数通过创建一个对象承接,函数成为一个类,变量成为类的成员变量。
public class Student {
private String name;
private Integer age;
public Student(String name,String age) {
this.name = name;
this.age = age;
}
}
void test1() {
Student stu = new Student("TEST",12);
test2(stu);
}
void test2(Student stu) {
//通过对象访问变量name
String name = stu.getName();
}
面向对象的好处
-
对程序控制权的间接转移进行了限制和规范
-
将函数通过创建一个对象承接,函数成为一个类,变量成为类的成员变量,使用多态限制用于对函数指针的使用。开发者只能使用对象的构造函数创建对象使用,而不是随意调用函数指针就可以使用
面向对象的特性
封装
把相关联的数据和函数封装为类对象,使外面的代码只能看见部分函数,数据则完全不可见
继承
对外部定义的某一组变量与函数进行覆盖
多态
- 本质是函数指针的一种应用,通过多态访问实现类不同的函数指针。
- 通过多态的手段对源代码中的以来关系进行控制,让架构师可以构建出某种插件式架构,高层策略组件与底层实现组件分离,底层实现组件可以被编译成插件
总结
这里讨论一个点:结构化编程是对程序控制权的直接转移做了限定,而面向对象编程是对程序控制权的间接转移做了限定。那么如何理解直接和间接?
这里我的理解是:
- 程序控制权的直接转移体现在程序的执行需要依赖条件(if else)
- 程序控制权的间接转移体现在程序的执行需要依赖变量(对象内的元素)
函数式编程
没有函数式编程
数据的赋值都是通过new对象的方式,并且new出来的对象做数据赋值都是可以随意赋值。
函数式编程
函数式编程在赋值式存在一定限制,避免在使用过程中随意更改某个变量的值
函数式编程的好处
对程序的赋值进行了限制和规范
总结
多态:跨越架构边界的手段
重点体现在功能性
函数式:规范和限制数据的存放位置和访问权限
重点体现在数据管理
结构化编程:各模块的算法实现基础
重点体现在组件独立性