在讲解这三个编程方式前,我们先思考一个问题,它们诞生的目的是什么?换句话说引导它们诞生的条件是什么?
举个例子,中学时期,大家都遇到过清理教室垃圾的事情吧,到了我们清理垃圾的那天,我们就需要去完成教室垃圾的清理。
假设该教室是个排列为10*10的教室,那完成教室的清理,以这三种编程思想来看会得到哪些不同的完成方式呢?
面向过程编程强调的是怎么去做,例如完成某件事情之前,先思考完成这件事情需要哪些步骤,然后逐一去实现,自身完成所有的底层实现。
清理教室垃圾这件事情,你可以思考先从第一排扫到第十排,还是从第一列扫到第十列。
只要这件事情最后的结果是我们所期望的的即可,以下是其代码实现:
public class OPP {
public static void main(String[] args) {
System.out.println("开始打扫"); for (int i = 1; i <= 10; i++) {
System.out.printf("正在打扫第%排\n", i); } System.out.println("打扫完成"); } }
可以从以上代码中看到,清理垃圾的每个操作命令都是自身独自完成的,所以此编程方式也叫命令式编程。
面向对象编程忽略了如何去做的概念,强调的是让谁去做,自身忽略这件事的底层实现,底层实现交给某个能够完成这件事的对象去完成。
清理教室垃圾这件事情,你并不想自己动手,所以让同桌帮忙进行清理,也就是将怎么去做交给了同桌去思考及实现。
以下是其代码实现:
public class OOP {
public static void main(String[] args) {
System.out.println("开始打扫"); Deskmate deskmate = new Deskmate(); deskmate.setName("小王"); deskmate.rubbishClear(); System.out.println("打扫完成"); } } interface RubbishClear{
void rubbishClear(); } class Deskmate implements RubbishClear{
private String name; public void setName(String name) {
this.name = name; } @Override public void rubbishClear() {
for (int i = 1; i <= 10; i++) {
System.out.printf("%s正在打扫第%d列\n", name, i); } } }
以上代码可以看到,这件清理垃圾的每个步骤并不是自己去完成,而是自身声明的对象去完成的,所以此编程也叫声明式编程
面向函数编程忽略了这件事的是由谁完成的,强调的是谁能完成的概念,底层实现依旧交给其他能够完成这件事的对象去完成,但这对象是谁,自身并不需要了解。
还是以清理教室垃圾这件事情为例,帮你完成这件事的可能是同桌小王,也可能是清洁工老大爷,还可能是其他人,但这并不重要,它到底是谁对我们来说没有任何意义,只要它能完成我们想完成的事情即可。
public class OFP {
public static void main(String[] args) {
rubbishClear(()->{
System.out.println("开始打扫"); for (int i = 1; i <= 10; i++) {
System.out.printf("正在打扫第%d列\n", i); } System.out.println("打扫完成"); }); } public static void rubbishClear(RubbishClear rubbishClear) {
rubbishClear.rubbishClear(); } } interface RubbishClear{
void rubbishClear(); }
俗话说有因必有果,反之亦然,每种编程方式的诞生必定是为了完成或者说更好的解决某件事情而诞生的,它们的区别仅在于完成的方式不同。