面向对象与面向过程编程
从语言角度来讲:
C是面向过程编程;
C++一半是面向过程编程,一半是面向对象编程;
Java是面向对象编程。
一、什么是面向对象编程与面向过程编程?
面向过程(Procedure Oriented 简称 PO):是一种以过程为中心的编程思想,分析出解决问题的步骤,然后用函数把这些步骤一步一步实现。面向过程编程,数据和对数据的操作是分离的。
面向对象(Object Oriented 简称 OO):面向对象会把事物抽象成对象的概念,先抽象出对象,然后给对象赋一些属性和方法,然后让每个对象去执行自己的方法。面向对象编程,数据和对数据的操作是绑定在一起的。
举例说明:
1. 洗衣服
面向过程:
放衣服(方法)-->加洗衣粉(方法)--> 加水(方法)--> 漂洗(方法)--> 清洗(方法)--> 甩干(方法)
面向对象:
new 出两个对象 ”人“ 和 ”洗衣机“
”人“ 加入属性和方法:放衣服(方法)、加洗衣粉(方法)、加水(方法)
”洗衣机“ 加入属性和方法:漂洗(方法)、清洗(方法)、甩干(方法)
然后执行:
人.放衣服(方法)-> 人.加洗衣粉(方法)-> 人.加水(方法)-> 洗衣机.漂洗(方法)-> 洗衣机.清洗(方法)-> 洗衣机.甩干(方法
2. 求一个长方形的周长和面积
面向过程的程序设计方式:
1、确定长方形周长和面积的算法。
2、编写两个方法(函数)分别计算长方形的周长和面积。
3、求周长的方法(函数)和求面积的方法(函数)需要两个参数,分别是长方形的长和宽。面向对象的程序设计方式:
1、一个长方形可以看成一个长方形对象。
2、一个长方形对象有两个状态(长和宽)和两个行为(求周长和求面积)。
3、将所有长方形的共性抽取出来,设计一个长方形类。
4、通过长方形对象的行为,就可以求出某个具体的长方形对象的周长和面积。
二、面向过程与面向对象的优缺点
面向过程:
优点:效率高,因为不需要实例化对象。
缺点:耦合度高,扩展性差,不易维护(例如:每个步骤都要有,不然就不行)
面向对象:
优点:耦合低(易复用),扩展性强,易维护,由于面向对象有封装、继承、多态性的特点,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
缺点:效率比面向过程低。
三、面向对象编程:类与对象的关系
对象
对象是由数据(描述事物的属性)和作用于数据的操作(体现事物的行为)组成的封装体,描述客观事物的一个实体,是构成系统的基本单元。
类
类可以看作是C语言里面结构体(struct
)的升级版,在C语言结构体中只能定义变量,在C++中,类不仅可以定义变量,也可以定义函数。
类是对一组有相同数据和相同操作的对象的定义,是对象的模板,其包含的方法和数据描述一组对象的共同行为和属性。类是在对象之上的抽象,对象则是类的具体化,是类的实例。类可有其子类,也可有其他类,形成类层次结构。
类与对象的区别:
1)类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。
2)类是一组具有相同属性和行为的对象的抽象。我们可以将类看做是创建对象蓝图,对象根据这个蓝图去具体实现某个东西。
举例说明:
晴雨伞和剑伞具有一些共同的属性:遮阳、遮雨等。伞是对晴雨伞和剑伞的一种抽象,晴雨伞和剑伞是伞这个类的两种具体实现。
所以,类的实例化结果就是对象,而对一类对象的抽象就是类,类描述了一组有相同属性和相同方法的对象。
三、面向对象编程的特性
面向对象编程的三大特性为:封装、继承、多态。
其中,封装和继承是为了代码重用,多态是为了接口重用。
封装(encapsulation)
将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来 和对象进行交互。封装本质上是一种管理,让用户更方便使用类。
举例:
对于电脑这样一个复杂的设备,提供给用户的就只有开关机键、通过键盘输入,显示器,USB插孔等,让用户和计算机进行交互,完成日常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。对于计算机使用者而言,不用关心内部核心部件,比如主板上线路是如何布局的,CPU内部是如何设计的等,用户只需要知道,怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此计算机厂商在出厂时,在外部套上壳子,将内部实现细节隐藏起来,仅仅对外提供开关机、鼠标以及键盘插孔等,让用户可以与计算机进行交互即可
C++实现封装的方式:用类将对象的属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用。
类的封装性为类的成员提供公有(public)、缺省(默认default)、保护(protected)和私有(private)等访问权限,目的是隐藏类中的私有变量和类中方法的实现细节。
- public : 对所有类可见。使用对象:类、接口、变量、方法
- protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。
- default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。
- private : 在同一类里可见。使用对象:变量、方法。 注意:不能修饰类(外部类)
class
的默认访问权限为private
,struct
为public
(因为struct
要兼容C语言)
通过以下表来说明访问权限:
具体实现:
–属性使用private权限
–方法使用public权限
继承
允许通过继承原有类的某些特性或全部特性而产生全新的类,原有的类称为父类,产生的新类称为子类。子类不仅可以直接继承父类的共性,而且也可以创建它特有的个性。
多态性
概念:同一种事物,在不同时刻表现不同的状态。是指在基类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同行为,多态性有两种表现形式:重载和覆盖,多态最大的特征就是向上造型。
多态存在的三个必要条件
- 要有继承(包括接口的实现)(前提条件)
- 要有重写(前提条件)
- 父类引用指向子类对象
面向对象与面向过程编程相关推荐
- 面向对象,面向过程编程
很多时候,我们都是用面向对象语言进行面向过程编码. 1. 滥用 getter.setter 方法. 滥用getter,setter方法很容易造成违反封装特性.数据没有访问权限控制,任何代码都可 ...
- 面向对象和面向过程~~编程思想
对于编程思想来说,大意上可分为俩种,一种为面向对象,一种为面向过程. 面向过程,只追求运算逻辑.耦合度高(耦合度是指事物关联程度的紧密度).扩展力差 而面向对象是追求的是模块之间的互相协作,耦合度低, ...
- 通俗理解面向对象和面向过程+编程思想
上午单位的C++大佬给我们分享了一些编程思想,开始介绍了面向对象和面向过程 面向过程是什么,就是对事件的过程进行编程,我们已知事件的发展过程,我们根据过程发展的节点去编程.整个编程是过程驱动,开始,然 ...
- 面向对象编程(一)——面向对象和面向过程
面向对象(Object Oriented),通过对象来封装我们的数据.(组织代码,封装数据) 面向对象和面向过程: 面向过程:procedure oriented programming,POP 面向 ...
- 编程思想:面向对象和面向过程
何谓面向对象?何谓面向过程?对于这编程界的两大思想,一直贯穿在我们学习和工作当中.我们知道面向过程和面向对象,但要让我们讲出来个所以然,又感觉是不知从何说起,最后可能也只会说出一句就是那样啦,你知道啦 ...
- 【Java开发语言 03】第三章 面向对象编程(面向对象与面向过程+类和对象+类成员一:属性+类成员二:方法+对象的创建和使用+封装和隐藏+构造器+关键字this,package,import)
面向对象编程 1 面向对象与面向过程 1.1 java类及类的成员 2 java语言的基本元素:类和对象 2.1 类的语法格式 2.2 创建Java自定义类 2.3 对象的创建及使用 3 类的成员之一 ...
- 什么是面向对象编程?面向对象和面向过程有什么区别?
面向对象 面向对象的程序设计(Object-Oriented Programming,简记为OOP),是当下最流行的程序设计方式之一.在面向对象的设计思想中,将程序视为多个对象共同协作的结果.程序被划 ...
- 编程思想:面向对象和面向过程的区别与联系
前言 何谓面向对象?何谓面向过程?对于这编程界的两大思想,一直贯穿在我们学习和工作当中.我们知道面向过程和面向对象,但要让我们讲出来个所以然,又感觉是不知从何说起.而这种茫然,其实就是对这两大编程思想 ...
- 面向对象编程与面向过程编程
文章目录 一.什么是面向对象编程? 二.面向对象的特点是什么? 1.在上面的例子中,面向对象的特性是怎么表现出来的呢? 2.什么时候适合使用面向对象 三.Js 中的面向对象 1.对象包含什么 2.一些 ...
最新文章
- java urlstreamhandler_获取对Java的默认http(s)URLStreamHandler的引用
- 海康大华RTSP格式
- 2020,难过的一年
- 在.net中读写config文件的各种方法(转)
- 在石家庄扣完五险一金到手5000,算什么水平?
- 微信小程序-滚动消息通知
- box-shadow(text-shadow)参数详解
- 一组这几年,美国人均寿命变化的数据
- APP消息推送后端java实现
- 制作STM32F429的外部SPI-FLASH下载算法
- 通过精读一本英文技术书籍搞定英语
- 阿里服务器配置随笔记 centos 服务器 Linux 部分命令合集
- 柜台收取西联汇款经验(网友分享)
- 谷歌浏览器 Google Chrome v74.0.3729.131 正式版
- 中兴手机数据通道打不开_中兴td-lte无线数据终端闪着绿灯 但是上不了网是怎么回事...
- Particle for alexa smart home skill (3)
- 深度学习项目实战(一):猫狗识别
- mcinabox运行库下载_MCinaBox运行库下载-MCinaBox启动器官网版下载v0.1.3- 游侠下载站...
- 百度地图添加标注及图标拖拽及给标注添加右键
- 下拉推广系统立择火星推荐_专业下拉词立择火 星 专业下拉词首选1火星出词....
热门文章
- 【NOIP2010普及组】三国游戏题解
- Redis---客户端和服务端
- 110配线架打法图解_【布线经验】110语音配线架详细安装教程(图文)
- matlab 矩阵命令,matlab中的矩阵的基本运算命令
- 文件路径名太长导致IAR编译报错:Fatal Error[Pe1696]: cannot open source file
- python中utf-8编码_Python 使用 UTF-8 编码(转)
- 【唐诗学习】五、山水田园诗派代表
- echart vue
- 微信群管理助手哪里弄的?
- 500以内什么耳机好?盘点500元蓝牙耳机性价比之王