
一个,面向过程和面向对象
面向对象是相对于面向过程的一种编程方法.
面向过程的编程历史悠久. 当我第一次学习Basic和Pascal时,它们都是面向过程的程序设计. 这种方式非常直观,您需要编写一个函数,只需编写几行即可实现该方法. 例如,您需要操作一个人以移动到某个点,只需编写代码来修改该人的坐标属性,然后让他逐帧移动到目标.
面向对象的编程,可对单个对象进行操作. 例如,您仍然需要操纵一个人的动作. 您需要实例化该人员的管理类对象,然后告诉该“人员”对象,您需要移动到某个地方. 然后那个人自己走了. 至于具体的走法,外面不在乎,只有“人”对象本身知道.
面向对象具有优点和缺点,并且存在一些争论点. 确实,面向对象的性能绝对不如面向过程的性能好. 毕竟,面向对象需要实例化对象,这需要占用CPU和内存. 但是我认为它的优势也很明显. 毕竟,在大型项目中,面向对象易于维护和管理,并且组织也很清晰. 这是一个重要的编程思想.
第二,面向对象的四个特征
面向对象是现实世界模型的自然扩展,这是一种编程思想,即一切都是对象
对面向对象的简单理解是,您只负责最终结果,而无需管理过程中发生的事情,

面向对象具有四个基本特征: 封装,继承,多态和抽象. 据估计很容易记住,但是它们的具体含义是什么?
1,包装:
对于普通人而言,银行的印象是只有一排用于外部办公室的窗口,然后有两种基本的存款和取款业务.
银行是一个结构非常复杂且功能众多的机构. 但是实际上,我们不太关心银行内部的运作方式,例如银行员工如何计算货币,如何记录存款,如何打开保险箱等. 对于外部人员面向对象和面向过程,他们知道这样做可能会引起更多不必要的麻烦. 因此,银行只需告诉您您可以在此窗口中处理业务,您就可以存入和提取资金.
所谓的封装是隐藏内部实现,然后仅公开用于外部调用的必要方法.
2. 继承:
我刚才提到银行有两个基本业务,即存款和取款. 但实际上,大多数银行的业务不只是这两种类型,还有许多其他业务,例如投资窗口和用于处理公司业务的窗口. 这些服务是在最基本的银行存款和取款业务的基础上添加的,因此我们可以了解到,基本银行只是两种业务,然后在保留原始银行业务的基础上,后来的银行,再进行扩展其他业务.
如果基本银行被视为父类(基础类),其中包含两种公共存款和取款方法,则该银行可以被视为子类,该子类仅继承基本银行存款和取款的公共方法. 后来,它还增加了两种公开投资方式和公司业务. 一些银行甚至会重写基本的存款和取款功能,以使其业务不同于基本银行. 这个过程就是继承.

3. 多态性:
这也是一项存款业务. 如果我去银行处理和美元,银行的处理方式实际上是不同的. 这种管理与同一业务(公共方法)相同. 由于内容(传入参数的类型或编号)不同,操作(最终实现方法)也不同. 这称为编译多态,也称为函数重载.
接下来,我去了银行存款. 我不知道这家银行的存款业务是否与基本银行不同. 无论如何,我只是存了钱,然后将特定业务实际上称为基本银行. 我不在乎这家银行本身是否实现了存款功能. 该外部直接调用方法接口,然后由实际的处理类确定具体的实现内容以使用基类或子类方法,这称为运行时多态.
4. 抽象:
某些视图未将抽象列为面向对象的功能. 但是实际上,这是面向对象的本质.
尽管有许多不同类型的银行,但我们可以找到它们的共同点. 例如,如上所述,基本银行具有存款和取款服务,投资银行具有投资服务. 实际上,它们是银行的抽象视图.
在运行时,这些服务实际上是接口,无论我面对的是哪个特定银行,只要它是同一类型的银行,我都可以处理相同的业务.
三个面向对象的业务参与角色和边界划分

除了几个主要功能,面向对象在使用时还具有几个概念: 参与者,边界,业务主题,业务工作者.
这些概念似乎是非常高端的,但实际上它们被概括为一句话,即“谁在做什么,在什么程度上做什么”.
例如,“您去银行存钱”,参与者是您自己,业务主体在存钱,业务人员是银行业务员,界限是在存钱.
在这里确定边界是一个重要的概念. 面向对象的操作的对象实际上是大或小. 在不同的业务流程中,可以更改参与者和业务主题.
这仍然是省钱. 参与者是您自己,但实际上包括一系列后续操作. 例如,在拿到钱后,银行业务员需要使用点钞机对其进行计数. 这个“人员计数”过程实际上是一个子业务. 该业务包括在存款的一般业务中,但不需要客户注意. 此时,业务参与者成为银行职员,业务的主体是点钞,业务人员成为点钞机,并且业务范围仅被划分为点钞本身.
存款实际上是一个复杂的业务流程,许多子业务(例如计数)构成了大型的存款业务,然后面向对象和面向过程,如果将存款和取款视为子业务,则这些子业务就构成了这个复杂的银行总行. 如果您将银行视为子公司,并将购物中心,市场,交通等子公司视为我们的生活,这是一个更复杂的大公司,那么将每个人的生活都视为子公司,然后每个人的生活再次组成了一个国家. 打个比方,地球,宇宙和无尽……
根据不同业务领域的划分,我们获得了不同的范围和结果. 每个子业务都是独立的,我们可以对其进行单独修改. 例如,在计数的操作中,我们可以使用计数器代替手动计数,并且可以达到相同的结果. 然后通过单个对象,组合成一个庞大而复杂的系统. 只要我们划分的边界足够清晰,我们就可以有条不紊地执行各种复杂的功能. 这就是为什么面向对象易于维护和管理的原因.
四种面向对象的个人观点

在从事程序员工作的那些年里,我很幸运地看到了许多项目的代码,并且发现有些情况下有些人编写程序,并且喜欢故意编写面向对象的代码,这些代码是为某些类提取的. 基类提取了许多接口,但是当实际编写实现代码时,我不知道如何使用这些接口.
有人还问我抽象是如何完成的. 例如,他首先根据函数编写了代码,然后发现该类具有很多可以重用的地方,然后提取到接口中,原始类变为基类,然后继承,依此类推. . 这是否意味着需要围绕接口进行一般开发?似乎有点矛盾.
对于这个问题,我只能谈谈自己的经历.
根据统一建模语言的理论,实际上,在实际用某种语言编写函数之前应该有一个设计阶段. 这个阶段只是要弄清楚业务参与者,边界,业务实体,业务工作者和其他元素,然后归结为“谁在做什么”. 在此阶段,我们不需要知道使用什么编程语言来实现它. 也许我们根本不需要一台计算机,并且我们可以用纯人工完成此功能.
在这个阶段,我们不需要知道如何实现特定功能,我们只需要知道我需要在此范围内实现什么样的功能,就需要为外部提供什么样的服务?其他人也可以使用,即使已经完成. 下一步是根据语言的特性讨论使用哪种语言以及如何实现该语言. 最后,这是编写代码编写实现过程的真正开始.
对于上面的实现过程,不难发现实际上,在我们开始编写代码之前,我们已经知道我们需要做些什么以及需要提供哪些外部窗口供他人使用. 这些窗口实际上是抽象接口.
所以,我自己的习惯是在写任何东西之前先用笔在纸上书写过程,弄清楚结构并模拟数据流. 弄清思路之后,您可以简单地编写类的结构并编写虚拟方法而无需特定的实现,只是看此抽象过程是否存在任何问题. 如果没有问题,请一一编写虚拟方法的具体实现. 对于需求的变化,如果先前的抽象不足以应付,则可以在有限的范围内对其进行抽象,并可以通过多态性提取并实现子类.
总而言之,面向对象和面向过程可以概括为以下两点
1. 面向过程的分析是分析解决问题所需的步骤,然后使用一个函数(方法)逐步实现这些步骤,使用时可以一一调用;
2. 面向对象是将构成问题的事务分解为各种对象. 建立对象的目的不是要完成一个步骤,而是要在解决问题的整个步骤中描述事物的行为.
-
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-188410-1.html
让台独份子折腾吧