面向对象和面向过程~~编程思想
对于编程思想来说,大意上可分为俩种,一种为面向对象,一种为面向过程。
面向过程,只追求运算逻辑、耦合度高(耦合度是指事物关联程度的紧密度)、扩展力差
而面向对象是追求的是模块之间的互相协作,耦合度低,扩展力强。
对于面向过程和面向对象的理解和差别是这么理解的(爬山):
——面向过程就像走山路爬山一样,必须一步一步走上去,途中没有其他方式上山。这种一条路走到黑的方式就是面向过程,他的逻辑性很强,一般的程序逻辑是没有问题的,但是假如出现问题,他的逻辑性就是被破坏,前段代码逻辑和后段代码逻辑会没有连接,导致整段程序会失效,最主要的是面向过程的编程思想,他的扩展力极差,没有办法将相对应有问题的代码及时更换。按照爬山的说法来说,就是上山的路坏了,他没有办法爬山了,而上山的路修补需要很长时间或者舍弃这条路也是有可能的。(比较原始)
——而面向对象对于爬山可以说是很丰富(多样)的,就比如同样是上山我们可以选择交通工具,坐汽车,坐缆车,骑自行车等都是可以的,他的选择方面是较多的,并且对于面向对象来说万物皆可为对象,我们可以定义人的属性,车的速度、颜色、类型等,这就是面向对象的好处,他的扩展力是很强的,他不会因为某一段代码出现了问题而造成整段代码会崩溃,因为基于面向对象的高扩展性,随时随地可以跟换错误的代码,那怕再复杂的代码逻辑相对于面向过程来说处理起来也相对容易
相对于例子爬山来讲,路坏了,我们可以坐缆车来达到爬山的目的。他的方法有很多种措施,而对于面向过程来说逻辑属性从建项目的那一刻就固定了,后面要做更改相对于面向对象的话会很难,毕竟面向过程的局限性就在那里。
面向对象和面向过程的优缺点:
面向过程的优点:
虽然面向过程他的局限较强,但是在一般并不复杂的业务逻辑时,他的前期工作是轻松的,只要有逻辑就能很快的做出项目来。
面向对象的缺点:
同样虽然面向对象他的扩展力极高,但是在前期的准备工作是非常复杂和缓慢的,在开发一个项目时,一个一个定义模块是非常消费时间的,前期投入较大,工程量大。
面向对象和面向过程的联系(自我认为):
虽然面向对象和面向过程有很大的区别,但是我认为面向过程是包含面向对象的。虽然面向对象是定义一个一个模块进行互相协作,但是我认为在互相协作的同时也是面向过程的同时,因为它具有逻辑性。所以面向对象走到最后也是面向过程,只不过这个面向过程具有面向对象的高扩展性。
当然,面向对象和面向过程只是一种编程的思维方式,我们不需要计较这两种编程思想哪个特殊。我们只要能理解了就好。
由于博主目前只会些jJAVA编程,所以下面用JAVA来表示一下面向对象和面向过程(也以爬山为例):
定义的类有:
ObjectOriented 面向对象类
ProcessOriented 面向过程类
People 人“类”
Car 车类
定义的属性有:
People 人“类”:String name; 名字
Car 车类:String brand;品牌int speed;速度String color;颜色People people;人名
———首先是面向对象类:
// 面向对象类public class ObjectOriented {public static void main(String[] args) {//创建对象people 引用 People类People people = new People();people.name = "李四";// 调用walk方法(走路的方法)people.walk();// 假如 walk方法失效 我们可以引用Car类的方法来上山 来取缔掉walk的方法 继续执行程序
// 若想使方法失效 注释27行 people.walk();就行// 创建对象 car 引用Car类Car car = new Car();// 定义Car类的中的属性car.brand = "宝马";// 定义Car类的中的属性car.speed = 120;// 定义Car类的中的属性car.color = "黑色";// 让原属于people的内存地址赋予了car.people// 相当于car.people = new People() 可以直接访问People类的属性car.people = people;// 将People类中的名字属性赋值car.people.name = "张三";car.drive();}}——————其次是人“类”:
// 人“类“ public class People {// 名字String name;// 走路的方法public void walk(){// 输出打印到控制台System.out.println(name +"走路上山");}}
————再是车类:
// 车类public class Car {// 品牌String brand;// 速度int speed;// 颜色String color;// 人名People people;public void drive() {System.out.println(people.name + "坐" + brand + "的车" + "速度为:" + speed + "每小时公里" + "颜色为:" + color + "的车到山顶");} }
图解:
————最后是面向过程类:
// 面向过程类public class ProcessOriented {public static void main(String[] args) {// 定义一个名字变量String name = "王五";// 将name这个变量传入到WalkUpTheMountain方法中WalkUpTheMountain(name);}// 假如WalkUpTheMountain失效了 那么这个程序就会失去意义 王五再也不会去到山顶上// 定义一个走路上山的方法static void WalkUpTheMountain(String name){System.out.println(name +"走路上山到山顶");} }
图解:
~~对于面向过程的图解解释:
1.由于定义的方法是个传参的方法,所以定义了一个name变量并且赋予值为“王五”。
2.main方法调用WalkUpTheMountain方法。
对于博主自写 的这篇文章,觉得有些疏漏之处,也希望大神能指点一二。但是还是希望能够帮助一些初学者。
最后希望大家能够成功上岸。
面向对象和面向过程~~编程思想相关推荐
- 通俗理解面向对象和面向过程+编程思想
上午单位的C++大佬给我们分享了一些编程思想,开始介绍了面向对象和面向过程 面向过程是什么,就是对事件的过程进行编程,我们已知事件的发展过程,我们根据过程发展的节点去编程.整个编程是过程驱动,开始,然 ...
- 面向对象与面向过程编程
从语言角度来讲: C是面向过程编程: C++一半是面向过程编程,一半是面向对象编程: Java是面向对象编程. 一.什么是面向对象编程与面向过程编程? 面向过程(Procedure Oriented ...
- 面向对象,面向过程编程
很多时候,我们都是用面向对象语言进行面向过程编码. 1. 滥用 getter.setter 方法. 滥用getter,setter方法很容易造成违反封装特性.数据没有访问权限控制,任何代码都可 ...
- 编程思想:面向对象和面向过程
何谓面向对象?何谓面向过程?对于这编程界的两大思想,一直贯穿在我们学习和工作当中.我们知道面向过程和面向对象,但要让我们讲出来个所以然,又感觉是不知从何说起,最后可能也只会说出一句就是那样啦,你知道啦 ...
- 编程思想:面向对象和面向过程的区别与联系
前言 何谓面向对象?何谓面向过程?对于这编程界的两大思想,一直贯穿在我们学习和工作当中.我们知道面向过程和面向对象,但要让我们讲出来个所以然,又感觉是不知从何说起.而这种茫然,其实就是对这两大编程思想 ...
- 面向对象和面向过程思想 oc
面向对象和面向过程思想 oc 面向对象和面向过程只是两种思想:都能解决问题: 面向过程关注的是解决问题的步骤:例如听歌-打开电脑--打开播放歌曲--关闭电脑 面向对象的思想的:思考的不是步骤,解决这个 ...
- 【Java开发语言 03】第三章 面向对象编程(面向对象与面向过程+类和对象+类成员一:属性+类成员二:方法+对象的创建和使用+封装和隐藏+构造器+关键字this,package,import)
面向对象编程 1 面向对象与面向过程 1.1 java类及类的成员 2 java语言的基本元素:类和对象 2.1 类的语法格式 2.2 创建Java自定义类 2.3 对象的创建及使用 3 类的成员之一 ...
- 什么是面向对象编程?面向对象和面向过程有什么区别?
面向对象 面向对象的程序设计(Object-Oriented Programming,简记为OOP),是当下最流行的程序设计方式之一.在面向对象的设计思想中,将程序视为多个对象共同协作的结果.程序被划 ...
- 面向对象和面向过程:两种程序设计思想的基础介绍和对比
一.面向过程程序设计 面向过程:程序=算法+数据结构 面向过程的核心理念是"步骤分解",即把需要解决的问题分成一个个步骤,并用不同函数来实现它们.设计思维"自顶向下,逐步 ...
最新文章
- 解决img标签间距问题
- 黑马程序员:从零基础到精通的前端学习路线
- 郑州5月份的windows phone7小聚
- OpenGL 与 GLSL 版本号
- Flutter实战一Flutter聊天应用(十一)
- 反复平方——快速计算一个数的平方
- c++中的堆(优先级队列 priority_queue)
- python collections.Counter
- CC2530之ADC
- 单片机高效c语言编程,飞思卡尔单片机高效C语言编程(中文).pdf
- 一、ShenYu快速开始
- h5禁止页面长按操作_解决HTML5对手机页面长按会粘贴复制禁用的方法-H5教程
- rk3288 安卓7.1显示正确的ICCID值
- Relative Orientation 与fundamental essential matrix
- 如何一眼辨别谁有男朋友/女朋友?哈哈哈哈哈哈哈
- 秒杀Excel的动态可视化报表,不用学python,用它仅需10分钟
- Python获取二维数组的行列数
- 数值计算笔记之插值(四)三次样条插值
- MYSQL的删除和重装
- mac 搭建Elasticsearch 6.8.6