1、什么是面向对象编程

  • 面向对象程序设计OOP是一种计算机编程架构。OOP的一条基本原理是计算机程序由单个能够起到子程序作用的单元或者对象组合而成。
  • 面向对象程序设计方法是尽可能模拟人类的思维方式,使得软件的开发方法与过程尽可能接近人类世界、解决现实问题的方法和过程,也即使得描述问题的问题空间内与问题的解决方案空间在结构上尽可能一致,把客观世界中的实体抽象为问题域中的对象。
  • 面向对象程序设计以对象为核心,该方法认为程序由一系列对象组成。类是对现实世界的抽象,包括表示静态属性的数据和对对象的操作,对象是类的实例化。对象间通过消息传递相互通信,来模拟现实世界中不同实体间的联系。在面向对象的程序设计中,对象是组成程序的基本模块。

2、面向对象编程的特点

1)封装

  • 封装是指将一个计算机系统中的数据以及与这个数据相关的一切操作语言(即描述每一个对象的属性以及其行为的程序代码)组装到一起,一起封装在一个有机的实体中,把他们封装在一个“模块”中,也就是一个类中,为软件结构的相关部件所具有的模块提供良好的基础。
  • 在面向对象技术的相关原理以及程序语言中,封装的最基本单位是对象,而使得软件结构的相关部件的实现“高内聚,低耦合”的最佳状态便是 面向对象技术的封装性所需要的最基本的目标。
  • 对于用户来说,对象是如何对各种行为进行操作、运行、实现等细节是不需要刨根问底清楚了解的,用户只需要通过封装外的通道对计算机进行相关方便的操作即可。大大简化了操作的步骤,使用户使用起计算机来更加高效、更加得心应手。

2)继承

  • 继承性是面向对象技术中的另外一个中药特点,其主要指的是两种或者两种以上的类之间的联系与区别。
  • 继承,顾名思义,是后者延续前者的某些方面的特点,而在面向对象技术则是指一个对象针对于另一个对象的某些独有的特点、能力进行复制或者延续。
  • 如果按照继承源进行划分,则可以分为单继承与多继承。
    • 单继承:一个对象仅仅从另外一个对象中继承其相应的特点。
    • 多继承:一个对象可以同时从另外两个或者两个以上的对象中继承所需要的特点与能力,并且不会发生冲突等现象。
  • 如果从继承中包含的内容进行划分,则继承可以分为四类,分别为取代继承、包含继承、受限继承和特化继承。
    • 取代继承:一个对象在继承另外一个对象的能力与特点之后将副对象进行取代。
    • 包含继承:一个对象在将另一个对象的能力与特点进行完全的继承之后,又继承了其他对象所包含的相应内容,结果导致这个对象所具有的能力与特点大于父对象,实现了对于父对象的包含

3)多态

  • 从宏观的角度来讲,多态性是指在面向对象技术中,当不同的多个对象同时收到同一个完全相同的消息之后所表现出来的动作是各不相同的,具有多态性。
  • 从微观的角度来讲,多态性是指在一组对象的一个类中,面向对象技术可以使用相同的调用方式来对相同的函数名进行调用,几十这若干个具有相同函数名的函数所表示的函数是不同的。

3、举个栗子

通过Java代码,看一下封装:

public class Test{// 向前一步走拆分:
//  1、抬起左脚
//  2、向前迈出一步
//  3、落脚
//  4、右脚向前一步// 把向前走一步的动作封装成一个方法,调用者不用考虑方法内部实现细节public static void zou() {System.out.println("抬起左脚");System.out.println("向前迈出一步");System.out.println("落脚");System.out.println("右脚向前一步");}public static void main(String[] args)   {// 模拟面向过程System.out.println("抬起左脚");System.out.println("向前迈出一步");System.out.println("落脚");System.out.println("右脚向前一步");// 直接通过名字调用zou();}
}

继承

class father {public void say() {System.out.println("我是父类的say方法");}
}public class son extends father{public static void main(String[] args) {son s = new son();s.say();}
}//输出:我是父类的say方法

多态

public class 多态 {private static void say() {System.out.println("我说了null");}private static void say(String str) {System.out.println("我说了" + str);        }public static void main(String[] args) {say();say("你好呀"); // 会根据相应的方法参数去寻找相应的参数}
}// 我说了null
// 我说了你好呀

参考原文

面向对象程序设计的特点相关推荐

  1. php面向对象程序设计,PHP面向对象程序设计类的定义与用法简单示例

    本文实例讲述了PHP面向对象程序设计类的定义与用法.分享给大家供大家参考,具体如下: class Person { private $name; private $sex; private $age; ...

  2. 常惠琢 201771010102《面向对象程序设计(java)》第七周学习总结

    实验七 继承附加实验 实验时间 2018-10-11 1.实验目的与要求 (1)进一步理解4个成员访问权限修饰符的用途: (2)掌握Object类的常用API用法: (3)掌握ArrayList类用法 ...

  3. 2017《面向对象程序设计》寒假作业一

    1.你有什么技能比大多人(超过70%以上)更好? 我看电影比一般人多一点点:我听英文歌比一般人多一点点:我有一把尤克里里和一个滑板.我有很多爱好,但都没能发展成我的特长,它们给我的生活增添了情趣,又不 ...

  4. java面向对象电子科大版答案_电子科大17秋《面向对象程序设计》在线作业1

    电子科大17秋<面向对象程序设计>在线作业1 ----------------------------------------------------------------------- ...

  5. 20155328 《Java程序设计》 实验二(Java面向对象程序设计) 实验报告

    20155328 <Java程序设计> 实验二(Java面向对象程序设计) 实验报告 单元测试 一.单元测试和TDD 编程时需理清思路,将编程需求等想好,再开始编.此部分可用伪代码实现. ...

  6. JavaScript中的面向对象程序设计

    本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...

  7. [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(三) 利用多线程提高程序性能(下)...

    [.net 面向对象程序设计进阶] (18) 多线程(Multithreading)(二) 利用多线程提高程序性能(下) 本节导读: 上节说了线程同步中使用线程锁和线程通知的方式来处理资源共享问题,这 ...

  8. 面向对象程序设计上机练习一(函数重载)

    面向对象程序设计上机练习一(函数重载) Time Limit: 1000MS Memory Limit: 65536KB Problem Description 利用数组和函数重载求5个数最大值(分别 ...

  9. 面向对象程序设计作业 6.1~6.4

    面向对象程序设计作业 6.1-6.4 面对对象基础题三道.继承多态一道. #include <iostream> #include <string> #include < ...

  10. java面向对象程序设计第三版耿祥义pdf_java基础知识干货——封装

    很多java初学者,在学到Java面向对象方面的知识点的时候,会觉得这块的知识点真的蛮绕的,一个知识点一个知识点的往外冒,对于初学者来说区分构造器和方法就花费了一整天的时间.现在小编带大家重新过一遍知 ...

最新文章

  1. Java 中一个中文所占字节
  2. 4.3 IDEA 常用快捷键
  3. boost::range::for_each相关的测试程序
  4. 【[网络流二十四题]最长不下降子序列问题】
  5. 如何设置XMind思维导图线条
  6. 文本框输入怎么样让键盘消失
  7. java编写sql语句,java实现简单的给sql语句赋值的示例
  8. Python minidom模块(DOM写入和解析XML)
  9. 中国教育电脑市场趋势报告、技术动态创新及市场预测
  10. Redis的两种持久化介绍与对比
  11. aws ssh 证书配置_在AWS Lambda中运行netflix bless ssh证书颁发机构
  12. VB.NET自制动态桌面
  13. 微信开发解决方案:(一)概述
  14. CRM系统主要包含什么内容
  15. 欧氏空间距离和内积_线性空间,度量空间,赋范空间,线性赋范空间,内积空间,巴拿赫空间以及希尔伯特空间、拓扑空间...
  16. 游戏行业从业者过了30岁后都是如何发展的?游戏美术设计呢?
  17. 联通下调国际漫游数据流量资费
  18. Office2010 下载
  19. C语言动态内存使用多文件实现通讯录,并可以保存在文件中
  20. OpenHarmony开源社区快速入门(一)

热门文章

  1. 点击a标签不跳转链接
  2. k210 C语言开发-4 从sd卡读取播放烟花视频
  3. 木偶然-2010.7.20
  4. 大白话带你认识 Kafka,背后原理如此简单
  5. Xshell免费版的安装使用(个人/家庭)
  6. 密信国密浏览器:推动SM2国密算法和国密SSL证书应用
  7. Linux | 编译器gcc/g++的使用【动静态库的认识】
  8. xcode 可以打开xmind_思维导图格式转换:Xmind → FreeMind
  9. lol网一服务器的位置,LOL各大区服务器的地点
  10. 【花雕学AI】深度挖掘ChatGPT角色扮演的一个案例—CHARACTER play : 莎士比亚