登录后台

页面导航

本文编写于 342 天前,最后修改于 342 天前,其中某些信息可能已经过时。

“算法+数据结构=程序”(Algorithm+Data Structures=Programs)


一、前言

Niklaus Wirth有一句在计算机领域人尽皆知的名言:

“算法+数据结构=程序”。

从计算机底层实现而言,如何用到最小的内存,达到最快的处理速度,对一个程序来说就是一个最优体验的程序。

当然,我们普遍遇到的一个问题就是:

  1. 要取得高的运行速度,就要增大内存。
  2. 而要用到比较小的内存呢,却又需要比较长的运行效率。

也就是说,既要用到最小的内存,达到最大的处理速度,目前是没什么可能的。那我们退而求次,就要想着如何在内存和运行速度上分别取多少,才是一个相对合适的办法。数据算法结构就应运而生了。

二、面向对象编程

这是程序的一个核心部分,不同的程序因为需求特性的不一样,要么消耗运行效率换取内存,要么消耗内存换取运行效率。然后选择一个相对比较好的方案,从而使得程序的体验相对完美。而数据与算法就是关于计算机底层执行的一个方案设计。所对应的对象,就是计算机的底层。但是,计算机并不认识字啊,这些数据结构和算法怎么才能让计算机懂得呢?这就靠我们光荣而伟大的程序员把它转变为一行行可供计算机识别的代码了。而这一行行的代码,最终构成的,就是一个项目,一个程序源码了。

但是,从计算机的角度而言,程序的执行需要优化。那么,从程序员而言,当一个项目复杂到一个程度上,通常这么说的时候,一般表明程序相当复杂,可以说是臃肿了~这个时候,一但程序员不小心哪里写错了什么,计算机说我不管,你给我改回来了我再执行,不然就等着死机吧。那程序员呢?就要苦逼的去找错,改错,调整,测试,一系列工作写来,两个愉快的周末就要过去了,怎么办?怎样可不是个好办法啊。于是,程序员大喊!不行,我也要对代码进行优化!!可是怎么优化呢?他们将相关的元素和方法放在一起,组成一个新的引用类型数据,然后通过创建引用数据类型方式获得其他所需的数据来构建项目。而既然是是数据类型,那么我们就知道,我们是可以随便去调用它的。也就是说,当程序需要在多个地方用到同一个方法或者同一个变量的时候,我们就可以在这里创建该引用对象,然后通过引用对象去获得封装在其中的变量或者方法。而这种优化的方法,就叫做:

面向对象编程。

而没有经过这种优化的叫做:

面向过程编程

当然,这里并不是说面向过程不行,两者和数据与算法架构中的运行速率和内存一样,是一对cp关系。面向对象编程使程序更易于管理和维护,但因为多重嵌套,降低了程序的执行效率。

什么意思?试想我们在电脑桌面放着一份叫做“android开发教程全系列”的文档,我们打开的时候自然就直接点击就打开了。但是呢,如果我把这个文档放在了一个叫做“点击我啊”的文件夹里的另一个叫做“快点我啊”的文件夹呢,那么我们要找到这个文档再打开是不是就需要更多的时间了。也就是说,面向过程使得代码难以维护和管理,但他的运行效率比面向对象要快。那么,这两种方式,到底要选择什么呢?作为一名java程序员,必须要选择程序员优先的面向对象编程呀!电脑干得多最多死机,又不会挂。人要干得多死了又不能重启是吧。

下面看一下面向对象和面向过程的区别:

  • 面向过程编程:

面向过程编程:需要调用的对象/方法不会被分类

  • 面向对象编程:

面向对象编程:不同的对象/方法存放在不同的位置,并且已分类

上面是关于面向对象的简单介绍,在这里说明,面向对象编程是一种编程理念,而所谓理念这东西,就是你的价值观。他其实使用于很多的编程语言,比如javac#,哪怕是面向过程语言阵营中的c语言,现在也可以实现面向对象编程。当然,它不是技术,不是学了什么其他的东西就可以掌握了的。而是应该在以后的开发中,不断去学习,不断去实践,不断去琢磨,然后再在这些思考的基础上,再去学习,实践,琢磨,如此螺旋式的学习10年之后,或许你就可以说你已经掌握了面向对象了。当然,这并不是说这10年内什么都干不了,实际上,作为一个理念,你只需要掌握它基本的一些内容和知识点,那么你完全就可以去工作了。但是,为什么强调要掌握呢?因为你对面向对象的理解越深,那么你写起代码来就越得心应手,代码也更容易维护和管理。这样的人,公司想不升职都难啊,但是如果你10年来,写的代码一直都是只有个面向对象的轮廓,其他的又复杂,维护又难的话。那么公司能留你10年也挺不容易的了。也就是说。掌握面向对象这个理念,是和你的前途有关的,对它理解越深,对你越有好处,那么我们为什么不好好学习呢?对吧。那什么叫做掌握面向对象呢?其实很简单:就一句话:“万物皆对象”,什么意思呢?就是哪天,你发现你眼睛可以看到的任何东西,都可以看作是一个对象,并且抽象出其特质的话,你就是大师了。