面向对象,面向对象的优点

什么是面向对象呢,百度百科的词条解释是这样的

面向对象(Object Oriented)是软件开发方法,一种编程范式。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。
面向对象是相对于面向过程来讲的,面向对象方法,把相关的数据和方法组织为一个整体来看待,从更高的层次来进行系统建模,更贴近事物的自然运行模式。 [1]

那可能听起来不是很明白,我们可以用更通俗的语言去理解

当我们要去用微波炉来加热食物的时候,用面向过程的思想,或者说用我们自己的思路来讲,是这样的
1.走到微波炉前
2.打开微波炉门
3.放置食物
4.关闭微波炉门
5.设置加热参数
6.开始加热并等待加热结束
7.打开微波炉门
8.取出食物

那当然,我们可能实际上遇到的实例可能会更加复杂,我们仅作例子探讨
那面向对象可能就不关注具体的每一步了,把每一个独立的个体,当作一个对象来思考,然后将这些对象的各自的属性,方法进行使用和调用
面向对象的思路可能就会是下面这样的

  • 移动
  • 开关门
  • 放置/取出食物

微波炉

  • 开关门
  • 加热(可以设置加热参数)

随后只需要将对应的,所需要的,进行于组合就可以了,具体实现的方法过程可能还会是如面向过程一样,但是可复用性强,易于维护
比如说我们现在不只需要加热食物,我们还需要其会从冰箱里拿取饮料,那面向过程就会有两种情况,一种是拿饮料在加热食物之前,执行完拿饮料才加热食物,一种是在加热食物之后,执行完加热食物才拿饮料
而面向对象只需要变成如下就行
人 
    移动
    开关门
    放置/取出食物
    放置/取出饮料(这一点甚至可以与上一点复用)
微波炉
    开关门
    加热(可以设置加热参数)
冰箱
    开关门
    制冷
因此我们可以自由设定是在之前还是之后,取决于调用的时机不同,不需要重复删减,更新代码,同时当我们有其他的需要之后,只需要扩展方法即可

具体的示例代码如下

public class Human{String name = "anonymity";int age = 0;public Human(String name,int age){this.name = name;this.age = age;}public Human(){}
}

首先创建了一个人类类,或者说叫人类模板,他会带有名字和年龄,如果创建的时候指定了名字和年龄,那么他就有名字和年龄,否则就是无名氏并且年龄为零
那么在人类之下,又会有类似于士兵,这是会保护其他人的人类,同时也会对其他人带有攻击性的人类,还有的就是农民,这是会带来食物的人类。
那么这两个人类肯定不会是同样的人类,但他们都会带有人类模板的共同属性,也就是名字和年龄,代码如下

我们代码编写完了可以创建一个测试类进行测试一下

运行结果如下

那可以看得出来面向对象可以重复的调用,并且易于修改,假如说士兵需要更换装备,农民需要更换农具,这些都需要修改,如果用我们的这个思想,就会非常的简单。

那这里,我们也就发现了面向对象的一些特性

1.继承

2.多态

3.封装

可能2 和 3都不是很明显,但是1肯定是能看出来的,不管是士兵还是农民,都继承自人类类,在各自的类中,没有定义名字和年龄,但是却自带有名字和年龄(还有构造方法)

多态主要体现在子类可以扩展父类的方法,增加方法,变得更加的多样

比如说普通的人类的移动可能会叫,走路,跑步,但是在士兵身上,就叫做行军

或者是动物类会叫,但是各种动物的叫都不一样,比如说狗的吠,鸟的啼

封装就是,作为用户(也包括开发人员),不在意内部的实现细节,只关注能否实现,并且将内部的细节隐藏起来,保护起来不被破坏

比如说微波炉,作为用户,我们并不关心发热管是怎么发热的,是用电磁发热还是超声波发热,甚至是核加热我们也不关心,我们只关心加热的效率以及是否有害等

在刚刚的代码例子中,我们并没有很好的实现封装特性,或者说是保护特性,在Java中可以用private关键字可以保护起来

这里举出一个例子

这样子也可以达到一样的效果,但是会很好的保护到内部的数据,可能这个例子并不能很好的体现出来,在我们后面的学习中,会遇到很好的用到的地方

面向对象,面向对象的优点相关推荐

  1. 面向对象的主要优点有哪些?

    面向对象的主要优点有哪些? 笔试见到的一个题,还真有这么考的... 面向对象方法与传统的结构化方法有着显著区别.该思想提倡运用人类的思维方式,从现实世界中存在的事物出发来构造软件系统,它建立在&quo ...

  2. C++面试题-面向对象-面向对象概念

    C++面试题-面向对象-面向对象概念 问:说说C++和C的主要区别? 答: C语言属于面向过程语言,通过函数来实现程序功能.而C++是面向对象语言,主要通过类的形式来实现程序功能. 使用C++编写的面 ...

  3. Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数)...

    Python Day 21 面向对象 (面向对象的三大特性(二)继承,多态,封装,几个装饰器函数) https://mubu.com/doc/1AqL_M0IbW 继承之钻石继承 多态 封装 几个装饰 ...

  4. Java面向对象---面向对象

    Java面向对象---面向对象 程序的发展历程:面向过程-->面向对象 面向过程:不去想怎么做,边做边看 面向对象:先想好怎么做,然后再做 修饰符(访问权限) 访问级别 访问控制修饰符 同类 同 ...

  5. python面向对象编程的优点-Python 基础知识----面向对象编程

    一.面向对象编程介绍 面向过程编程: 核心是过程二字,过程指的是解决问题的步骤,即先做什么再干什么然后干什么. 基于该思想编写程序好比在设计一条流水线,是一种机械式的思维方式. 优点:复杂的问题流程化 ...

  6. python面向对象编程的优点-Python面向对象编程

    面向过程编程,重点在于过程(可以理解成how),即以过程为核心,计算机/写代码的人会把精力聚焦在具体的实现过程上,这个过程第一步干什么,第二步干什么,直到最后完成了你的目标. 面向对象编程,重点在于对 ...

  7. python面向对象编程的优点-Python语言有哪些优点?

    2018年主流的十大编程语言中,Python排名第一,被广大使用者誉为"更美好"编程语言.Python语言自身的语言特点,使得他深受开发者的喜爱,那么Python语言到底有哪些优点 ...

  8. python面向对象编程的优点-Python面向对象编程——总结面向对象的优点

    Python面向对象编程--总结面向对象的优点 一.从代码级别看面向对象 1.在没有学习类这个概念时,数据与功能是分离的 def exc1(host,port,db,charset): conn=co ...

  9. python面向对象编程的优点-Python入门之面向对象编程(一)面向对象概念及优点

    概念 谈到面向对象,很多程序员会抛出三个词:封装.继承和多态:或者说抽象.一切都是对象之类的话,然而这会让初学者更加疑惑.下面我想通过一个小例子来说明一下 面向对象一般是和面向过程做对比的,下面是一个 ...

  10. python面向对象编程的优点-Python面向对象编程 一

    一.类 面向对象是对函数进行分类和封装,其主要目的是提高程序的重复实用性,让开发更方便快捷. 在我们的认知中,我们会根据属性相近的东西归为一类.例如:鱼类,鱼类的共同属性是呼吸,卵生.任何一个鱼都在此 ...

最新文章

  1. python3 RSA 用私钥对随机密钥进行解密
  2. Facade模式——设计模式学习笔记
  3. 大剑无锋之Spark中的Driver是什么?【面试推荐】
  4. 【最新合集】编译原理习题(含答案)_20代码生成_MOOC慕课 哈工大 陈鄞
  5. java单例模式_在Java中实现单例模式
  6. 程序员最担心,在乎的几个问题!论12年的职业生涯,能给我带来什么!
  7. 2018深大计算机考研,深圳大学2018年硕士生招生复试分数线及调剂需求
  8. 设计模式笔记(24)---访问者模式(行为型)
  9. CentOS 7 搭建CA认证中心实现https取证
  10. java中import两种导入类型比较
  11. C++ 11中几个我比较喜欢的语法
  12. javascript中的isNaN()
  13. python 全栈开发,Day126(创业故事,软件部需求,内容采集,显示内容图文列表,MongoDB数据导入导出JSON)...
  14. UVA 11137 Ingenuous Cubrency(dp)
  15. JVM新生代Eden和survivor区别
  16. [zz][ZOJ Monthly]October 2008解题报告
  17. 35.给定的字符串中字母顺序前移,其他字符顺序后移。
  18. OI回忆录第一章 逐梦之始
  19. 【SSL】2325最小转弯问题
  20. 组态王怎么做超级曲线_组态王如何将历史曲线导出到电子表格中去?:

热门文章

  1. csdn博客贴代码方式
  2. Linux系统编程.NO7——目录操作函数
  3. php 下载的文件损坏,PHP readfile()导致文件下载损坏
  4. SolidWorks2016软件,SW2010-2016.Activator.GUI.SSQ激活闪退解决办法:
  5. 计算机毕业设计(论文+代码+数据库+查重)
  6. Js之 push、pop、shift、unshift的区别
  7. 网页制作篇(智慧树网站马红老师)-基础知识总结1(标记篇)
  8. jquery怎么根据id获取元素值
  9. 窥探无线路由传输速率的秘密
  10. Dcloud IOS离线打包