抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

(这篇是马克思主义基本原理课程的大作业,各位要是看到什么觉得不对的地方,也还请一笑了之)


马克思主义是关于自然、社会和人类思维发展一般规律的学说,而马克思主义基本原理是马克思主义理论体系的核心内容,是对马克思主义立场、观点和方法的集中概括。另一方面,随着计算机技术、移动技术的飞速发展,各种各样的的应用程序已经渗透到了人们生活的方方面面,而程序设计是关于程序如何编写设计的方法和范式,其思想也体现了许多马克思主义的原理。

我们知道,编程语言是人们与计算机对话的一种方式,是程序的一种表达形式。显然,我们可以使用不同的编程语言实现同样的效果或达到同样的目的。另一方面,由于不同编程语言本身有不同的设计目标,因而对同一问题采用不同语言解决的难易不同,选取合适的编程语言也就非常重要了,比如要与硬件打交道则需要像汇编语言或C语言这样偏底层的语言,要面对高并发环境则需要像Erlang这样低耦合的函数式语言,要制作用户界面那么选择XAML或QML这样的陈述性语言可能更为合适,等等。当然,我们既反对忽视程序设计而夸大编程语言的作用,也要积极利用合适的编程语言去促进程序的设计,这与马克思主义中的内容决定形式的原理是相一致的。

算法和数据结构常常被认为是一个程序的核心,它们是从程序中抽象出来的一般方法,而程序可以看作是算法与数据结构的具体化。比如快速排序算法大致就是将数据分割成两个小部分,并使得其中一个部分的所有数据比另一个部分都要小,然后对分割出的每堆不断进行这个操作,又比如队列这种数据结构就是对数据先进先出这种特征的抽象。这种抽象使得我们不必受编程中繁琐的具体内容所困,从而把握住程序的本质特征,进而能够对程序的具体行为和性能作出准确的分析。有了这些分析,我们也就有了程序设计的一些最基本的判据,甚至可以做一些简单程序的设计了。这一过程体现的正是马克思唯物辩证法中的抽象与具体的方法。

代码复用可以说是程序设计的一大核心主题,广义上的代码复用就是指对代码的重复利用。有效的代码复用可以极大地解放程序员的生产力,使得程序员不必将精力和体力耗费在枯燥繁琐的拷贝修改上,而将精力和智力花费在其它更有价值的地方。同时,代码复用本身也是一个具体到抽象的过程,它使我们可以从更高的角度看问题,例如我们前面提到的快速排序算法,我们显然不关心其中数据的具体类型是什么,只要它们是“具有序关系的”,我们就可以对它们使用快速排序算法,但对于一些强类型语言,你可能不得不为每一种“具有序关系的”类型提供一个实现,尽管它们之间可能只有微小的差异,而如果运用一些代码复用的手段,比如模版或者泛型,我们只需要提供一种实现代码即可达到目的。这样,我们不仅提高了生产力,而且提升了代码的抽象层次,使得代码的层次结构更为清晰,也有利于将来的维护。具体地,代码复用的常见实现手段有:泛型、模版、继承、多态、模块化,以及各种各样的设计模式等等。由于篇幅的限制,下面重点讲讲模块化与设计模式。

模块化也是程序设计中的一大主题,它虽然是代码复用的一种实现手段,但其意义不止于此。模块化是一个比较宽泛的概念,随着划分粒度的不同,大至一个程序库,小至一段函数,都可以称之为“模块”。“高内聚,低耦合”是我们常听到的模块设计的原则,所谓“内聚”是从功能角度度量模块内的联系程度,而“耦合”则是从数据访问的角度度量模块间的关联程度。高内聚的模块应当专心做好一件事,而低耦合的模块与模块间应该只通过少且简单的接口进行交互。这种原则使得程序的层次结构十分清晰,有利于程序的开发和维护,同时,模块充分的独立性也给程序后续的维护和升级带来便利。
可以看到,模块化进一步地解放了程序员的生产力。但另一方面,我们在实践中经常会遇到模块粒度的问题,显然,一个粗粒度的模块会包含许多细粒度的模块,那么粗粒度模块的高内聚,与细粒度模块间的低耦合就构成了一对矛盾。一种有效的解决策略是粗粒度的模块做抽象普遍的事,而细粒度的模块做具体特殊的事,例如一个图形界面库里面有一个对话框类,而对话框类里面有一个显示文本的方法。模块化的另一个矛盾是“高内聚,低耦合”虽然可以提高开发和维护的效率,但往往也会降低运行效率,而与之相对的“低内聚,高耦合”虽然加大了程序开发与维护的难度,但同时也换取了更高的运行效率。对于这个矛盾只能采取具体问题具体分析的方法,综合考虑程序具体的运行环境、硬件配置,以及程序本身的设计目标,进行合理的取舍。

所谓设计模式就是一系列程序设计中常见问题的通用解决方案,因而代码的可复用性也是其目标之一。以著名的MVC(模型-视图-控制器)模式为例,它将用户界面分离成三类对象,模型是应用对象,视图表达它在屏幕上的显示,控制器定义界面对用户输入的响应方式。对于一个用户输入,控制器获取它并将指令和数据传递给模型,由模型来更新数据库并通知视图刷新,最后由视图将结果返回给用户。它可以看作普遍联系观与否定之否定规律的运用,将现象与本质、内容与形式剥离开来,再重新建立起它们间的联系。这样,既克服了传统界面设计中数据、显示与业务逻辑高度耦合的混杂状态,又保持了数据、显示与业务逻辑之间的联系性与一致性。对于其它设计模式,这里就不再赘述了,只想用下面这幅图来展示普遍联系的观点是如何在设计模式中运用的(图中每一个方框都代表这一种设计模式,箭头表达了设计模式间是如何联系与转化的)。

(上图摘自《设计模式:可复用面向对象软件的基础》)

运用马克思主义基本原理,可以加深我们对软件设计的体会与理解。但“纸上得来终觉浅,绝知此事要躬行”,只有真正将马克思主义基本原理和程序设计贯彻到实践中去,才能让知识开花结果,制作出好的程序来。

评论