前言
我是一名java语言初学者,在这篇文章里我想向大家分享一下关于理解面向对象编程思想的心得体会,如果有错误或者不恰当的地方,请大家包容并指正。
1.1程序设计思路
面向对象,是软件开发中的一类编程风格、开发范式。除了面向对象,还有面向过程、指令式编程和函数式编程。在所有的编程范式中,我么们接触最多的还是面向过程和面向对象两种。
类比:史书类型
纪传体:以人物传记为中心,“本纪”叙述帝王,“世家”记叙王侯封国和特殊人物,“列传”记叙民间人物。
编年体:按年、月、日顺序编写。
国别体:是一部分国记事的历史散文,分载多国历史。
早期先有面向过程思想,随着软件规模的扩大,问题复杂性的提高,面向过程的弊端越来越明显,出现了面向对象并成为目前的主流方式。
1.面向过程的程序设计思想(Process-Oriented Programming),简称POP
关注的焦点是过程:过程就是操作数据的步骤。若果某个过程的实现代码重复出现,那么就可以把这个过程抽取成一个函数。这样就可以大大简化冗余代码,便于维护。
典型的语言:C语言
代码结构:以函数为组织单位
是一种“执行者思维”,适合解决简单问题。扩展能力差、后期维护难度较大。
2.面向对象的程序设计思想(Object Oriented Programming),简称OOP
关注的焦点是类:在计算机程序设计过程中,参照现实中事物,将实物的属性特征、行为特征抽象出来,用类来表示。
典型的语言:Java
代码结构:以类为组织单位。每种事物都具有自己的属性和行为。
是一种“设计者思维”,适合解决复杂问题。代码扩展性强、可维护性高。
1.2从实际问题中体会面向对象编程思想
类比举例:人把大象装进冰箱
面向过程:
1.打开冰箱
2.把大象装进冰箱
3.把冰箱门关上
#include <stdio.h>
// 打开冰箱的函数
void openFridge() {
printf("打开冰箱\n");
}
// 把大象装进冰箱的函数
void putElephantIn() {
printf("把大象装进冰箱\n");
}
// 关闭冰箱门的函数
void closeFridge() {
printf("把冰箱门关住\n");
}
int main() {
openFridge();
putElephantIn();
closeFridge();
return 0;
}
面向对象:
人{
打开(冰箱){
冰箱.开门();
}
操作(大象){
大象.进入(冰箱);
}
关闭(冰箱){
冰箱.关门();
}
}
冰箱{
开门(){ }
关门(){ }
}
大象{
进入(冰箱){ }
}
// 定义人类
class Person {
// 打开冰箱
void openFridge(Fridge fridge) { fridge.openDoor(); }
// 把大象放入冰箱
void operateElephant(Elephant elephant, Fridge fridge) { elephant.enterFridge(fridge); }
// 关闭冰箱
void closeFridge(Fridge fridge) { fridge.closeDoor(); }
}
// 冰箱类
class Fridge {
// 打开冰箱门
void openDoor() { System.out.println("冰箱门打开"); }
// 关闭冰箱门
void closeDoor() { System.out.println("冰箱门关闭"); }
}
// 大象类
class Elephant {
// 大象进入冰箱
void enterFridge(Fridge fridge) { System.out.println("大象进入冰箱"); }
}
public class Main {
public static void main(String[] args) {
// 创建人、冰箱、大象对象实例
Person person = new Person();
Fridge fridge = new Fridge();
Elephant elephant = new Elephant();
// 人打开冰箱、放大象进去、再关闭冰箱
person.openFridge(fridge);
person.operateElephant(elephant, fridge);
person.closeFridge(fridge);
}
}
在学习面向对象语言的过程中,一个简单的理念就是:在需要完成某个任务时,首先要确定谁去完成任务,即哪个对象去完成任务;提到数据,首先要想想到这个数据是哪个对象的。 在这个例子把大象装进冰箱的场景中,任务是打开冰箱、把大象放进去再关闭冰箱,这里执行这些任务的对象是 “人”。
1.3总结
当需求单一,或者简单时,我们一步步去操作没问题,并且效率也挺高。
可随着需求的更改,功能的增多,发现需要面对每一个步骤很麻烦了,这时就开始思索,能不能把这些步骤和功能进行封装,封装时根据不同的功能,进行不同的封装,功能类似的封装在一起。这样结构就清晰了很多。用的时候,找到对应的类就可以了。这就是面向对象的思想。
注意:我们千万不要把面向过程和面向对象对立起来,他们是相辅相成的,面向对象离不开面向过程!(面向对象细节到一个函数上还是面向过程)