`

玩积木的程序员

 
阅读更多
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></iframe>

自从我学习程序设计开始,就不断地听到大家谈论面向对象。在最开始接触C++时,确实被它的OO特性迷住了,相比之前用过的C语言更加丰富多彩。想当初,经常因为写出了一个类而暗自自豪半天。

现在做程序员也有些年头了,回过头来看以前似乎领悟到的OO思想又有了一些新的感悟。

一、代码之外的对象

提起OO,大家都会想到class关键字。以前老师这么教的,平时自己也是这么用的。虽然有些语言中的表现不一样,但本质上都是差不多的。刚开始时,说OO是一种技术;后来说OO是一种潮流;再后来说OO是一种信仰;后来的后来说OO是一种思想,总之是越说越玄。
不过有一点却是肯定的,我们可以将OO思想用在不支持OO特性的语言中。比如说,学了C++的人去写C程序,很可能写出来的还是C++风格的。

进一步推理,OO思想可以在语言之外体现出来。

年初就开始做插件系统方面的东西,做到现在系统中的插件有好几百个。对于这样的系统来说,插件就相当于非插件系统中的对象。没有谁规定对象必须是 class创建出来的。在以前写的文章中,有朋友的评论说到,这种情况可以叫做“对象模型(Model)”,和我这里说的是一个意思。

插件分为代码和配置两个部分,代码实现插件的业务,配置文件处理插件特性和插件之间的交互关系。可以说,在插件系统中,代码加配置组成的那个东西也能叫做“对象”,也就是代码之外的对象。

当我们能将OO思想摆脱代码的局限时,那么就能拥有更加广阔的思考空间了。

二、组合优于继承

封装、继承、多态是面向对象的三大特性。对于插件来说,封装是能很好地表现出来,但对于继承和多态却非常难实现了。至少我现在还没有看到有人将插件做成支持继承的。

以前有人问我觉得面向对象的三个特性中哪一个最有意思。当时我回答是多态,因为它最灵活。多态是和继承绑定的,继承是一种强耦合,也就是说派生类和基类不 可解耦。在有些时候继承和多态能带来意想不到的好处,但更多时候我们需要用组合来代替继承,以此获得更大的灵活性,尤其是站在系统的层面。

比如说有两个模块功能非常接近,如果按照派生的思路,在这两个模块之上提出一个基类,继承两个子类来完成具体的功能。对于代码之中的对象这样做没什么问 题,但对于代码之外的对象,只能采用组合来代替派生的思路了。做法是将两个模块的公用部分做成一个公用子模块C,不同部分做成A、B两个模块。A与C组合 起来生成第一个模块,B与C组合起来生成第二个模块。
还有一种解决方法就是用配置来处理模块特性,大家可以参考我以前写过的文章。

在设计模式中也强调“组合优于继承”。

三、好积木的要点

将软件模块比作积木,我们程序员就是玩积木的人了。各种各样的类库和框架、加上形形色色的控件,都是我们玩的积木。在插件系统中,插件就是积木。本文的着重点是插件系统。

好的“积木”需要具备以下的几点:

1、可插拔性,动态加载
2、外观可调
3、显示位置可配置指定
4、统一的列表管理
5、元素之间可通讯

上面介绍一些基本的要点,也是插件系统需要解决的若干个问题。上面的这些问题在以前的文章中已经简单介绍过。解决上述问题的方法多种多样,很感谢那些和我分享自己解决方法的朋友们:)
在现在的项目中,最关键的一点就是“配置”,这就要求满足1、2、3点,而4、5点则是将插件组装成完整系统的必备因素。

四、什么是技术含量

粗略地可以将程序员分成两类:做积木、与玩积木的人。

做积木的人指的就是那些自己写控件、插件的人,玩积木的人指的就是将各种各样控件或插件组装成系统的人。在业界大多数人都会认可那些自己写控件的,对于“只会拖拖控件”的程序员则不屑一顾。

我们很难说做积木与玩积木的人哪一个水平高,因为需要的是两种不同的能力。做积木的人需要对底层计算机技术有深刻的了解,而玩积木的人则需要对业务、用户需求和整体框架有清楚的认识。两个层面的人都需要有优化的意识。

很多学生的眼中,技术含量指的就是学习系统底层知识,掌握计算机原理;但工作过一段时间,尤其是做行业软件的程序员则会有不同的看法,他们更加关注怎样来“玩积木”,同样是一门学问。这也就是设计模式在学生中很少有人知道,而算法等基础理论离职业化程序员越来越远的原因。

我们不能仅仅按照做积木和玩积木两种类型来区分技术含量,不同的工作对技术的侧重点不一样。不过在我看来,玩积木才是我真正想做的事情,也可以说是架构设计了。当然,成为一个优秀的架构师还是相当困难的。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1504171


分享到:
评论

相关推荐

    blocks:简单积木游戏

    最终,它必须作为新手游戏程序员的教育参考。 《俄罗斯方块》的好处是它具有非常著名的游戏机制,并且实现起来相对简单,但挑战性足以使它变得不那么琐碎。特征核心逻辑使用ANSI C和C ++进行编程。 游戏逻辑与负责...

    WindowsAPI参考大全

    这些函数在程序员手中犹如“积木块”一样,可搭建出各种界面丰富、功能灵活的应用程序。不过,由于这些函数结构复杂,所以往往难以理解,而且容易误用。 随着软件技术的不断发展,在Windows平台上出现了很多优秀的...

    程序员考试刷题-Practical1:实用1

    程序员考试刷题实用 10 - 递归、测试、API、Flask 今天我们将探索递归的使用、测试工具、维基百科的API和非常酷的Flask Web 框架。 这是该主题的最后一次标记为实践,并且必须在实践时间(下周没有标记)中令人满意...

    Windows API 编成

    而在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具唯有API函数,这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。...

    COM技术内幕

    在COM架构下,人们可以开发出各种各样的功能专一的“软件”积木块(组件),然后将它们按照需要“搭”起来,构成复杂的应用系统。由此带来的好处是多方面的,可以将系统中的组件用的组件替换掉,以随时进行系统的...

    win32的api手册

    win32 api在Windows程序设计领域处于发展初期时,Windows程序员可使用的编程工具唯有API 函数。这些函数在程序员手中犹如“积木块”一样,可搭建出各种界面丰富、功能灵活的应 用程序。

    morten-andersen:Pra实用程序员-“我们只砍石头的人一定在设想大教堂”

    因为就像世界上所有积木的乐高积木一样 因为我在乎细节-软件是关于细节,精心设计的架构,可靠的实现 把钱放在嘴里 -我捐赠给所有开源项目的列表 一些个人笔记和演示 我在公司内部活动中举行的 上的编程语言,IT系统...

    设计模式InJava

    Java 提供了丰富的API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎变成了类似积木的简单"拼凑"和调用,甚至有人提倡"蓝领程序员",这些都是对现代编程技术的不了解所至. 在真正可复用的面向对象编程中,...

    一个用搭积木的方式构建pdf的框架(基于pdfbox/fop)

    x-easypdf是一个基于pdfbox/fop二次封装的框架,目前拥有两大模块:【pdfbox模块】与【fop模块】。【pdfbox模块】主打pdf编辑功能,以组件化的形式进行pdf的构建;【fop模块】主打pdf导出功能,采用数据源的方式对...

    Windows API函数大全 word版

    而在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具唯有API函数,这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。...

    基于pdfbox/fop二次封装的框架,一个用搭积木的方式构建pdf的框架

    x-easypdf是一个基于pdfbox/fop二次封装的框架,目前拥有两大模块:【pdfbox模块】与【fop模块】。【pdfbox模块】主打pdf编辑功能,以组件化的形式进行pdf的构建;【fop模块】主打pdf导出功能,采用数据源的方式对...

    WindowsAPI函数清单

    而在WINDOWS程序设计领域处于发展的初期,WINDOWS程序员所能使用的编程工具唯有API函数,这些函数是WINDOWS提供给应用程序与操作系统的接口,他们犹如“积木块”一样,可以搭建出各种界面丰富,功能灵活的应用程序。...

    Java23种设计模式(Patterns in Java)

    Java 提供了丰富的API,同时又有强大的数据库系统作底层支持,那么我们的编程似乎变成了类似积木的简单"拼凑"和调用,甚至有人提倡"蓝领程序员",这些都是对现代编程技术的不了解所至. 在真正可复用的面向对象编程中...

    一款免费的数据可视化报表,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等

    「数据可视化报表工具」类似excel操作风格,在线拖拽完成报表设计!功能涵盖: 报表设计、图形报表、打印设计、大屏设计等,完全免费!秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、...

    初学者编程必须养成的十大好习惯

    现在是模块化程序设计的天下,应用程序要实现的目标就是金字塔尖,进行程序设计规划的意义就在于,对构成金字塔的基础模块进行划分,规划得越详细,模块分工越明确,越容易明白下一步该做什么,这好比搭积木的游戏,...

    2022升级!《慕慕到家》家政小程序组件化进阶实战 源码

    各位程序员,听说有个叫《慕慕到家》的家政小程序源码,是个组件化进阶实战,但你们知不知道,这可不仅仅是一个小程序啊! 这玩意还能助你走上人生巅峰!怎么说呢?它提供的服务真的非常丰富,让你足不出户就能享受...

    Scratch编程面试:轻松掌握20个核心问题!.zip

    技术关键词:Scratch编程语言、图形化编程、事件块、控制块、运动块、外观块、声音块、侦测块、运算块、变量、列表、广播消息、自制积木、画笔功能、克隆功能、舞台背景、角色、音乐、声音效果、传感器、扩展功能、...

    laravel-engine:以乐高方式开发面向 CRUD 的网站

    对于程序员来说,这就像乐高积木,他们只需要将所有“积木”粘合在一起即可获得可运行的应用程序。 我们称这些砖块为“组件”,在引擎中有两种类型的砖块: 网格组件 - 这些是用于列出存储在数据库中的数据的砖块...

    数据可视化报表系统源码.zip

    数据可视化报表系统源码,一款数据可视化报表系统,含报表和大屏设计,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! Web 版报表设计器,类似于excel操作风格,通过拖拽完成...

    设计模式(Patterns in Java)

    变成了类似积木的简单"拼凑"和调用,甚至有人提倡"蓝领程序员",这些都是对现代编 程技术的不了解所至. 在真正可复用的面向对象编程中,GoF 的《设计模式》为我们提供了一套可复用的面向对 象技术,再配合Refactoring...

Global site tag (gtag.js) - Google Analytics