什么是面向对象编程

余生颓废 提交于 2020-01-12 23:45:19

什么是面向对象编程

本文关键字:面向对象、面向过程、面向过程编程语言、面向对象编程语言

一、浅说编程

说到编程,对于初学者来讲,可能第一想到的就是敲键盘,写代码,做游戏,甚至于会联想到软件破解、网络***。另一方面,在学了一些编程的相关知识以后,一个最明显的感觉就是:这东西有什么用?为什么我明明听懂了却还是解决不了实际的问题,甚至于完成不了相应的练习?这其中最主要的原因是什么呢?除了埋怨出的题目跨度太大意外,我们也应该好好的反思一下。
对于以上的问题,最主要的原因就是对于编程了解的不够深入。这个深入指的不是我们要去了解他的发展历史以及底层原理,而指的是我们要对编程有一个明确的定位,我们现在学的内容是什么,又能用来做什么?

  • 编程与软件开发

很多同学在刚开始都会把和计算机相关的所有内容都和编程,敲代码,程序员联想到一起,这其中甚至包括:做系统、配路由、修电脑、做病毒等等脑洞大开的想法。这些想法很多是行外人的看法,但是也有一少部分发生在学习者身上,等开始学了才发现和预想的完全不一样。
通常来说学习编程所对应的岗位就是开发工程师,开发工程师根据工作内容的不同又分为很多种:前端、后端、移动端、嵌入式、游戏开发、大数据等等。相同点在于都是完成一个应用产品,也就是在电脑上运行的软件、通过浏览器访问的应用、手机端运行的各种APP、各种硬件设备的监控、数据分析产品等等。
由于软件编程是信息技术的一部分,因此,在学习时通常会用到网络通信、操作系统、数据结构等等方面的知识,这时候往往就会一个头两个大了,因为这些学科可能不会去系统的学习,在接触的时候会感觉整个体系十分庞杂,难以掌握,学到的东西又不知道什么时候才会派上用场。

  • 如何学习编程

对于以上的情况,首先我们需要做的就是先沉下心,越难掌握的东西往往会让自身的价值更高。这也是为什么程序开发者相对高薪,无论你接受与否,这都是一条充满挑战且激动人心的学习之旅。那么,编程到底如何学呢?熟练的掌握基础语法?背下每一段常用的代码?当然不是。首先我们要把编程语言当做是工具,做它的主人。
我们现在所学的东西无非是那些伟大的人已经创造出来的东西,有一部分是固定的需要记忆下来的,就比如基础语法,一些基本的操作步骤。另外一部分就是比较难掌握,也是最充满魅力的部分,就是用已有的知识去解决一个实际的问题,而且通常这个问题都是自己之前没有实现过的。归结起来就是编程思想,对于初学者来说,就是解决一个问题的思路。

吴文俊院士曾经提出过“数学机械化”的概念,很多问题在前进一步之后都有一个确定的、必须选择的下一步,这样就可以沿着一条有规律的、刻板的道路,一直达到结论。
在编程和方法设计时我们也可以借鉴这样一个思路。通常我们按照三个步骤来思考就好,What I want?What I need?How to do?当然这只是本人总结的,如果大家有更清晰的步骤可以分享。

  • 第一步(What I want)

一定不要着急写程序,特别是大脑一片空白不知道如何下手的时候。首先我们最应该做的是明确我们自己要做什么,把这个问题转换为一个有步骤的逻辑问题,是一个简单的顺序结构,还是一个需要根据不同情况来进行选择和循环,功能和功能之间存在哪些联系,这是我们需要理清的。

  • 第二步(What I need)

在完成了第一步后,我们要在我们所学的知识当中来搜索,应该用到哪些基本结构或者已有的工具类和方法。如果还是没有任何思路,那只能说学的还不够扎实,或者又一次接触到了知识的盲区。这个时候并不需要暴躁,去查就可以了,并且幸运的是,在完成了第一步之后我们在搜索时我们的问题会很有针对性。搜索的问题不再是:XX系统怎么做?XX功能怎么实现?而是如何处理XX(步骤),XX技术点(使用方法)。碰到没有接触过的东西是一件很正常的事情,你目前所遇到的问题一定是先前别人已经遇到的。即使你遇到的是一个稀有级或者史诗级的BUG,那么通过搜索后得到的信息也一定会对解决问题有所帮助。

  • 第三步(How to do)

完成了前两步之后,最后一步其实就很简单了。明确了自己要什么,用什么来做,剩下的就是怎么做了,把思路和工具结合,就是你的结果!所以大家需要明确的是,真正能写出程序,让他工作的是我们,不要把计算机想象的太过智能,每一个功能,包括细小的逻辑判断都是从我们的需要出发来实现的。所以编程才会那么灵活多变,能开发出各种各样的系统,做各种各样的应用,这也就是最具魅力的地方。想一想,把自己的一个想法完整的实现出来,是一种什么样的感觉?

二、面向过程

首先我们来说一说面向过程的编程语言,这是一种编程思维,是以过程为中心的编程。主要的特点是先分析出解决问题需要的步骤,然后把每一步定义成一个一个方法,通过逐个调用的方式来完成整个功能。这样的好处是十分直接,要解决什么问题就写什么代码,但是复用性会比较差。

  • 举例说明:假如我需要制作一套家具

如果使用面向过程的语言来完成,那么我将化身一个全能木匠,从准备原材料开始到家具成品,中间的所有步骤都要自己完成。首先是确定原材料、准备原材料、然后是制作形状、上漆等步骤。在编程上体现为:主要通过方法调用来完成,一个程序解决一个特定的问题。

三、面向对象

那么什么是面向对象编程呢?由于对象这个词本身就很抽象,只要你不是按照下面这张图片理解的,那么你还是可以学好面向对象编程的。


面向对象是被目前绝大多数主流编程语言采用的编程思想和软件开发方法,并且由于这种概念的普适性,也已经在数据库系统、应用平台、分布式系统、人工智能等领域普遍使用。那么到底什么是面向对象编程呢?其实很简单,我们只需要按照我们正常的思维方式去思考就行了,比如还是制作一个木制家具,那么在实际生活中是怎样办到的呢?
原材料准备,这应该是采购商的工作,其他的环节他无需插手;家具设计图,这是设计公司的工作;找到合适的木匠,这是用人单位应该做的。谁来做家具呢?木匠。于是我们把这些人组合到一起就可以完成这样一个工作,编程者更像是一个项目的负责人,需要知道完成这项工作需要用到哪些人,这些人应该能够完成哪部分的工作,每个人各司其职。
  • 举例说明:面向过程与面向对象的比较


从直观来看,面向对象编程都有哪些特点呢?开销大,这是肯定的,原来一个经验丰富的老师傅能完成的工作现在要这么多人来完成,要创建这么多对象,内存的占用当然也是较多的。那有什么好处呢?我们把问题看的长远一点,如果我们要求家具用不同的材质来做,采用更多的式样来做,不单单是上漆,还要更多的装饰式样,这个时候会怎么样呢?如果使用面向过程的语言,我们需要写出很多很多个和要求匹配的程序,非常不利于维护。如果换成面向对象的语言呢?我们只需要告诉采购商:我要什么原材料;告诉设计公司:我要什么样的家具;告诉用人单位:我要什么样的木匠;告诉木匠:你该怎么做。虽然在前期要编写很多代码,但是在完成工作时可能只需要改变调用的参数就能解决很多问题。
总体来说,如果我们追求效率和资源,要以最小的开销做出符合要求的产品,那拉上一帮人只为做那么几件东西就显得有些得不偿失了,这个时候我们选择使用面向过程语言比较合适。如果我们要做的是一个国际公司,可以适应不同国家地区不同人的要求,那么这个时候我们使用面向对象思维是很必要的,你总不能为每个需求都量身定做写一套程序。

四、代表语言

  • 面向过程:

C语言、Fortran等

  • 面向对象:

C++、C#、Java、Python等

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!