一文让你彻底理解面向对象编程思想
背景
可能还未上计算机课,有同学就听过面向对象这个词。然而老师课堂上讲过之后,貌似当时听明白了,但真做系统开发时大脑一片空白。甚至很多已经工作几年的程序员依然对面向对象这个事糊里糊涂。面向对象思想非常基础,甚至可以说如果不理解面向对象,那你就没有掌握编程密码。我想通过以下几个方面,让你理解面向对象。
面向对象分析
- 面向过程到面向对象
- 面向对象思想模型
- 模拟对象
面向过程到面向对象
说来话长,面向对象其实是从面向过程发展而来的。为什么这么说呢?大家都知道,是先有的C语言,然后C++语言,最后才是Java语言。没错,这三个语言真就是按照这个顺序发展的,而且后面的语言是站在前面语言的基础上进行调优发展变得更高级。C语言本身就设定了一些数据类型,比如基本数据类型,就是咱常说的int、char、数组等,又有自定义数据类型,顾名思义结构自己定义,看一段C语言例子。
上面定义了学生这么个结构,你看这个时候C里面还管这个叫结构,有两个属性,number和score。假设你现在想对student进行一下操作,比如你想把1学号的学生成绩录入系统,C里面的怎么做?需要先弄一个函数出来,还的先声明,再写函数实现,类似这样。
接着在main函数里面,按照你想的顺进行执行,类似这样。
这就把学生的信息保持起来了,后面你可能还想打印学生信息等等,这就得声明一个打印函数,然后再实现这个函数。这会你发现没有,C语言是怎样干活的?结构是结构、函数是函数,分开的,然后main里面根据你想的顺序一步一步干活的。这个时候C++现身了,C++说你的自定义结构、函数是分开的,看着多乱?于是乎C++说,我把他们合起来,都放一块,起个名字叫类,像这样。
|
|
管理学生类
|
|
然后在main中对stuent进行操作。
|
|
到这,你发现有点不一样了,C++把属性和函数都放到类里面了,方法不再杂乱无章了,用的时候通过实例去调用了。就这么整合一下就牛逼了,没发现啥好处啊?不然不然,这个所谓的整合就是封装,同时还为继承、多态打下基础。C的时候都不在一块你咋继承,现在不一样了,只要你再定义一个类继承前面那个整合,就能把前面整合的内容继承下来,你现在的类就不用再写整合里面的东西了,因为继承后已经有了,省事不?还有多态,咋回事呢?比如小鸟会叫,鸭子也会叫,都是叫,但声音不同,对吧,C的时候,谁叫你就调用谁的方法,main里面你的写两处,但有类之后,就能完成统一,在main里面统一使用接口类型,叫 接收叫 = (传入鸟叫或传入鸭子叫)
,你传入哪个叫,就能表现出那个叫,这就是多态。而Java又是借鉴了C++,优化了内存自动释放等,但核心思想基本与C++相同。
面向对象思想模型
你可能也听到这句话:”一切皆对象“,没错,在面向对象的世界中,一切皆对象。面向对象的世界,其实就是现实世界,不信你看你周围的一切,你眼睛所见到的每个物体都为对象。现在我们把现实世界与面向对象世界联系起来。假如你叫张三,是一名程序员,自然你周围的同事也是程序员,还有项目经理,领导,以及大家手里开发的系统等。那么我们就以为张三为中心,进行系统设计。首先张三与同事、领导、项目经理之间需要交流,自然就要赋予张三交流的能力,张三是程序员自然有写代码的能力,同时也要进行需求分析,自然也有需求分析的能力。到这里,我们就可以简单来设计张三这个类。
classDiagram
公司 ..< 制度
公司 ..< 架构
公司 ..< 人
人 <|-- 张三
人 <|-- 领导
人 <|-- 项目经理
人 "1"*-->"2" 胳膊
项目组"1"o-->"n"项目经理
项目经理..|>项目计划
领导"1"-->"1"行政
公司: + 公司名称
公司: + 地址
公司: +业务(String 科技,String 金融)
公司: +现金流(String 存款)
公司: +投资(String 现金流)
项目计划: +项目计划书()
class 人{
+生日
+进食()
+劳动()
}
class 张三{
-学历
-交流()
-需求分析()
-写代码()
}
class 领导{
+领导气质
+开会()
+分批任务()
}
class 项目经理{
+级别
+立项()
+项目调研()
}
上面就可以理解为一个系统,里面有各种人,都是通过人这个类
产生出来的,多么像现实社会,所以系统里面跑的都是人的实例,人与人之间产生各种联系,就形成了逻辑。如果把类理解为模版,当你放入张三就产生张三,放入李四就产生李四,这就是面向对象思想的本质。
模拟对象
以一本书来举例子,通过上面的学习,是不是就明白这句话的含义了。书,是不是就是类?没错,是的。只不过,书有很多种,比如科技书籍、文学书籍、小说等等,但都逃不过书这个类。同时他们又有一些共性,比如书名、出版商、价格等,还是通过UML来模拟一下。
classDiagram
书: + 名称
书: + 出版商
书 <|-- 科技书籍
书 <|-- 文学书籍
书 <|-- 小说书籍
class 科技书籍 {
+ 科技领域
+科技知识()
}
class 文学书籍 {
+ 文学体裁
+文学知识()
}
class 小说书籍 {
+ 小说体裁
+小说知识()
}
书就是类,不同类别书籍继承了书这个类,又得到了新类,如果落实到具体哪本书,就是实例,是通过类new出来的。
总结
面向对象思想,将以前过程中用到的自定义结构体、函数等整合在一起,定义为类,再通过类这个模版就能产生无数个实例,不同类实例与实例之间、同类实例与实例之间进行交织,就产生了逻辑联系,如果再赋予业务逻辑,那么自然一个业务系统就通过面向对象思维方式设计出来了。当然一个庞大的系统还有其他框架等等,但单纯从面向对象角度,理解面向对象思维就是你能否设计出系统的关键因素。文章阐述了从过程到面向对象的由来,及具体分析了面向对象思想模型,希望对你有所帮助。