编程思想 _用Minercraft来讲解面向过程与面向对象

2021-04-02 02:17:49 浏览数 (2)

c _两大编程思想:面向过程与面向对象 ——初识面向对象

!!!这篇文章主要学习面向对象和面向过程的思想,面向对象的具体实现将在后续文章出现


面向对象是一种编程思想, 2大编程思想其中一个就是面向对象, 另一个叫做面向过程。

面向对象的优缺点与面向过程是一种互补!将两者联系起来才可以使编程效益最大化

那么我们首先先了解一下面向过程:

一. 面向过程

面向过程遵守“从上至下”的设计模式,C语言编程就是一个面向过程的编程

(java是纯面向对象,c语言是纯面向过程,c 半面向过程)

用面向过程的方式解决问题的思路:
代码语言:javascript复制
提出问题,分析问题的处理流程,将一个大问题分解成小问题,如果小问题比较复杂,那么就分解为更小的问题去逐一解决这些问题,当一个问题解决完成开始解决下一个问题,最终完成整个处理流程,这种编程思想的方向主要是解决问题中的一个个过程,因此被称之面向过程。

面向过程就相当于一个流水线,以Minercraft制作一个火把为例:

提出问题:Minercraft里面制作一个火把!

处理流程:

  1. 想致富先撸树!! 获取原木
  2. 将原木分解为木板 获取木板
  3. 将木板分解为木棍 获取木棍
  4. 获取煤炭
  5. 用煤炭和木棍合成火把

我的第一个火把诞生了,这样的设计过程思想称之为面向过程

优缺点:

1、优点:

代码语言:javascript复制
1. 程序结构简单,仅由顺序结构,选择结构,循环结构三种基本结构组成即可解决任何问题,对于面向过程需要专注于逻辑的学习,不需要记忆很多的语法。
2. 对于一些结构简单的问题,通过面向过程可以高效的解决问题
3. 把大问题分解为小问题解决,逐一把小问题解决,可以使问题简单化
4. 自上向下,一步一步解决问题,从整体角度看待问题,开发者可以更全面的考虑问题,对整个程序的逻辑结构清晰明了,作为独立的开发者而言,这样纵观全局的开发模式自然是合适不过了(但这也是它面对多人开发最大的弊端)

2、缺点:

代码语言:javascript复制
1.在面向过程的时候,数据和操作往往都是分离的,如果数据的结构发生改变,操作数据的函数就必须重写,会产生巨大的代价。
2.数据不具有封装性,很多变量都暴露出来,容易被篡改,产生安全问题
3.在多人协作开发时,会产生标识符重名,每个人之间的项目逻辑不清楚
4.面向过程需要一个问题解决才能开始下一个问题,但是在多人协作开发过程中,这样的编程方式是一个巨大的阻碍。

为了解决面向对象的这也不足,面向对象编程思想产生了!

二. 面向对象

  1. 面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。现实中的基本单元的物体在程序中对应的基本单元就是对象。
  2. 面向对象可以理解为:将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。
  3. 它将应用程序看成实现某些特定任务功能模块,其中子过程是实现某项具体操作的底层功能模块。在每个功能模块中,用数据结构描述待处理数据的组织形式,用算法描述具体的操作过程。
  4. 对象在程序中抽象为两个部分: 描述对象的状态或者属性的数据(变量) 描述对象的行为或者功能的方法(函数)

以上内容部分取自百度百科


用面向过程的方式解决问题的思路:
  1. 实现一个类,这个类里面封装好了,需要解决这个问题的数据和方法通过类实例化一个对象,然后调用对象的功能。
  2. 分成各个对象解决问题,没有合适的对象就生成一个对象。

对于面向对象的现实分析:我们依然用Minercraft来举例

这次我们要实现的不再是向火把这样简单的东西!

我要用红石电路做个CPU出来!!! (卑微劝退)

我要用红石电路做一个简单的永动机

如果我们依然用面向过程来解决这个问题!

分析问题:Minercraft中制作永动机

处理流程:首先我们应该采集材料红石矿,然后获取,红石粉,制作各种红石原件,而制作每个红石原件再分为小问题解决,解决之后收集制作各种电源类原件,导线类原件,用电器原件,如果没有这些我们都不能开始正式的制作,现在你建立了一个服务器,好朋友们来帮助你一起完成这个永动机,你让好朋友去做这些原件,但是好朋友却迟迟等不来你的原材料,这就是弊端。

编程逐渐成熟起来,我们的服务器MC世界也已经很成熟了,我们所需求的促使我们应该开始采用面向对象了

此时我们服务器的MC世界已经很成熟,我们的服务器也已经有了很多的玩家,在这个MC世界有一个庞大的管理系统,我们的向往更优质的设备,此时我们希望制作一个计算机,在我们这个庞大的管理系统(项目)中,给每一个玩家设置了一个任务,还有高级的玩家作为管理者,分别管理不同的职务,低级玩家去负责采集给对应的管理者提升自己,经过发展我们的世界存储这许多的库存,已经有了显示器等科技,当新的科技需要完成时,我们不在需要从原材料开始,我们可以通过获取显示器等——调用类对象,把这些低级科技变成高级科技,同时我们的每一个人都在同时工作,在这里显示器是对象,计算机也是对象。如果我们在MC世界有一个小的动车,我们需要一个大的能运送多个人的货运车,我们不需要重新做一个车,车的结构已经有了(我们继承!),发动机不够就加(引入对象2级发动机),轮子不够就加(引入对象轮子),而这些轮子和发动机是在你做货车之前就已经准备好了的!你要用就给你(给你接口),但是你所要操作的是改装,轮子是怎么做出来的你不需要知道,你也无法直接去改变轮子大小(私有),这是另一个玩家针对轮子这个对象应该考虑的。

面向对象的特点:

对比上面流程中小括号的关键词,看看是否理解

代码语言:javascript复制
    1、面向对象将数据和行为结合在一起,共同来表达一个数据。
    2、在面向过程中,数据和行为是分开的,当问题比较复杂或涉及多开发,那么会导致拓展和维护很困
难。而面向对象能解决这个问题,问题会被分解为一个个的对象,每一个对象有独立的数据和行为,修改或拓
展某一个对象时并不会影响到其他对象。
    3、面向对象的封装性、继承及多态。
        ①封装:封装就是将属性(数据)私有化,提供公有的方法(行为)访问私有属性。通过封装可以对
对象属性进行存取限制,提高了程序的维护性。
        ②继承可以在原来的对象基础上很快的产生新的对象,新的对象是一个全新的个体,但又有原来对象
的特性。如同现实生活中的父子继承,儿子是一个新的个体,但又继承了父亲这个个体的特点,比如:外貌,
性格。
        ③多态是面向对象思想的核心。做到同一个接口,使用不同的实例就能去执行不同的操作。方便了程序的
设计。
    4、面向对象编程可以使代码维护方便、可扩展性好、支持代码重用技术
    5、对象唯一性:每个对象都有自身唯一的标识,直到毁灭。
    6、将具有一致性的属性和行为的对象抽象成类。
高内聚低耦合:

高内聚低耦合是判断软件好坏的一个标准,多用于面向对象程序设计。

内聚:每个模块在项目中的独立程度,不依赖于模块外部代码;

耦合:模块与模块之间接口的复杂度,越复杂,耦合度越高;

高内聚:尽可能类的每个成员方法只完成一件事(最大限度的聚合);

低耦合:减少类内部,一个成员方法调用另一个成员方法;

也就是说一般情况下内聚与耦合成反比例;

良好的程序习惯应该尽可能的保证高度的”高内聚低耦合“

0 人点赞