什么是面向对象,如何用面向对象的思想写代码

简介: 什么是面向对象,如何用面向对象的思想写代码

首先给大家提三个问题

1、面向对象的三大特征是什么?面向对象的基础是什么?

三大特征:封装,继承,多态

基础:抽象

2、为什么说面向对象的基础是抽象?对抽象做详细解释。

只有基于抽象的概念才有封装的动作,有了封装才可能会有依据封装而产生的继承,在继承的过程中又产生了多态。

抽象:

提取不同事物中的共同的特征:

物以类聚,人以群分,寻找从最基础的类型方面是否有共同的特征、共同的属性、相似的行为

3、如何理解下面这句话?

1)我们要注重多少人来干事,而不是干多少事。

2)我们要注重谁来干事,而不是怎么干事。 这与面向对象的抽象有什么关系?

注重多少人来干事:一共有那些对象。不是干多少事:对象干多少事不考虑。 注意谁来干事:具体的对象是那个。不是怎么干事:不关注具体过程和实现,

和抽象关系:1:抽象的是找出来的对象。2:抽象后具体使用的实现的是那个对象。

由这两个问题,有同事提出《从去打水这件事抽象成,小明这个对象去实施去打水这个方法》,如果从面相对象的思想来看,这句话应该如何去描述?或者也可以从反面来说明。这句话没有面向对象的几个特点?

我认为《》中的话还是面向过程的。落脚点在方法,而不是对象。我们进行抽象的是具有共同特征的名词,而不是动词。落脚点应该是打水人,而不是落脚点是动词打水。

以打水举例子。打水作为一件事,应该有谁去打水。和去哪里打水。用什么打水。打水人,打水地点,打水工具三个类。这样可以是不同的人使用不同的工具去不同的地方打水。

抽象过程中,注重对象,而不是过程,注重对象

场地,打水人,打水工具,受水人,水。

然后我们可以更加抽象

打水人和受水人可以再抽象出来参与者。

参与者

工具

场所(UI)

参数,材料

问:没有对象,能写代码吗?

不能

问:你们封装的是一个个小的方法,还是封装的一堆方法的实现?

正确的是封装的应该是一个个小的方法,把这些小的方法放到对象里边去。

问:封装的是把一个事干完,还是把一个事分成很多步骤?

我认为封装是封装一件小事情。小事情放在小对象中。而不是把所有步骤都放在一个对象中。

我们要抛弃家庭主妇的思维观念,什么意思呢?

比如做饭,有很多步骤买菜、洗菜、切菜、炒菜、放盘子。

正确的做法是:我注重的是买菜,交给买菜人,洗菜交给洗菜人,切菜,交给切菜人,炒菜交给炒菜人,端菜加端给服务员。

我不在乎他们这次是不是能干完,是不是干好了,我不在,我在乎的是这些人能不能重复的干事能不能被复用

比如说洗菜的人能不能重复的洗菜,买菜的人能不能重复的买。

分析业务的时候其实就是我们要做的就是把谓语先去掉,就是封装,就是把谓语去掉,就是抽象,然后把谓语分成很多个小的谓语。每一个小的谓语,就是每一个对象的方法。另外要把大的谓语,一般我们干事儿一个谓语实际上是很大的,要把它拆成小的,放到各自的对象里去。

我们真正的编程一样是根据不同的业务,充分反复利用这些对象。

然后又一个新的谓语出现的时候,还是这些对象重新组合,把这事干了。再来一个事,就是再来一个事儿的时候,还是这些对象为主体,又把事干了,换句话说,增加不了几个对象,就能干很多新的事情。

什么叫透明化

就拿那个举例子比如说人去打水,然后咱们需要具体到哪个人去打水,我们想的那个类就是人类,就没有想到打水人那个类,我们脑袋里想的都是人类。也没有谁喝水,把水打给谁。比如说我水去浇花,还是交给一个牲口去喝水,还是交给对方一杯茶,我们都没有。这是不对的,没有面向对象的思想在里面。

把家庭主妇,我们眼里全是家庭主妇,没有工业自动化。

我们写代码总是小作坊的写法:手工打造汽车,从炼铁、从挖矿开始炼铁,然后自己去锻造,然后自己去当焊接工,然后当维修工,当电工。

其实在工业自动化的时代,这都可以交给不同的人做,效率也会大大提高。想让你们关注的是他有多少个一万多个、两万多个、十万多个对象。实际上它就三五个对象。然后通过不断的组合,通过继承组合聚合,又造出来了十万多个对象。然后在他的基础上,再去抽象,然后最后得到了几个基本的,我们没有一层一层的这种实现的过程,我们也没有一层一层的抽象过程。

相关文章
|
7月前
|
程序员
如何理解面向过程和面向对象?
有人说:“如果上帝是程序员,他怎么创造世界上的所有动物。”,理解这个问题就理解了面向对像。
|
1月前
|
Java 物联网 测试技术
Java面向对象程序设计3面向对象基础
Java面向对象程序设计3面向对象基础
169 0
|
5月前
|
C++
20 C++ - 面向对象程序设计案例
20 C++ - 面向对象程序设计案例
53 0
|
2月前
|
存储 人工智能 运维
面向对象基础
面向对象基础
39 0
面向对象基础
|
3月前
|
Serverless 对象存储 C++
第十三章:C++面向对象编程思想详解
第十三章:C++面向对象编程思想详解
39 0
|
4月前
|
Java 开发者
Java面向对象编程的4个主要概念
Java面向对象编程的4个主要概念
43 3
|
7月前
|
存储 Java 编译器
面向对象的思想(2)
面向对象的思想(2)
48 0
|
7月前
|
Java 程序员
面向对象的思想(1)之概述
面向对象的思想(1)之概述
30 0
|
9月前
|
搜索推荐
|
9月前
|
Linux C语言 C++
面向对象与面向过程最本质的区别
面向对象与面向过程最本质的区别
52 0