四大发明之活字印刷——面向对象思想的胜利

话说三国时期,曹操带领百万大军攻打东吴,大军在长江赤壁驻扎,军船连成一片,眼看就要灭掉东吴,统一天下,曹操大悦,于是大宴众文武,在酒席间,曹操诗性大发,不觉吟道:“喝酒唱歌,人生真爽。…………”。众文武齐呼:“丞相好诗!”于是一臣子速命印刷工匠刻版印刷,以便流传天下。

样张出来给曹操一看,曹操感觉不妥,说道:“喝与唱,此话过俗,应改为‘对酒当歌’较好!”,于是此臣就命工匠重新来过。工匠眼看连夜刻版之工,彻底白费,心中叫苦不喋。只得照办。

样张再次出来请曹操过目,曹操细细一品,觉得还是不好,说:“人生真爽太过直接,应改问语才够意境,因此应改为‘对酒当歌,人生几何?…………’!”当臣转告工匠之时,工匠晕倒…………!

可惜三国时期活字印刷还未发明,所以类似事情应该时有发生,如果是有了活字印刷。则只需更改四个字就可,其余工作都未白做。实在妙哉。

第一,要改,只需更改要改之字,此为可维护;第二,这些字并非用完这次就无用,完全可以在后来的印刷中重复使用,此乃可复用;第三,此诗若要加字,只需另刻字加入即可,这是可扩展;第四,字的排列其实有可能是竖有可能是横排,此时只需将活字移动就可做到满足排列需求,此是灵活性好

而在活字印刷术之前,上面的四种特性都无法满足,要修改,必须重刻,要加字,必须重刻,要重新排列,必须重刻,印完这本书后,此版已无任何可再利用价值。

小时候,我一直奇怪,为何火药、指南针、造纸术都是从无到有,从未知到发现的伟大发明,而活字印刷仅仅是从刻版印刷到活字印刷的一次技术上的进步,为何不是评印刷术为四大发明之一呢?

做了软件开发几年后,经历了太多的客户(曹操)改变需求,更改最初想法的事件,才逐渐明白当中的道理。其实客观的说,客户的要求也并不过份(改几个字而已),但面对已完成的程序代码,却是需要几乎重头来过的尴尬,这实在是痛苦不堪。说白了,原因就是因为我们原先所写的程序,不容易维护,灵活性差,不容易扩展,更谈不上复用,因此面对需求变化,加班加点,对程序动大手术的那种无耐也就非常正常的事了

之后当我学习了面向对象分析设计编程思想,开始考虑通过封装、继承、多态把程序的耦合度降低(传统印刷术的问题就在于所有的字都刻在同一版面上造成耦合度太高所制),开始用设计模式使得程序更加的灵活,容易修改,并且易于复用。体会到面向对象带来的好处,那种感觉应该就如同是一中国酒鬼第一次喝到了茅台,西洋酒鬼第一次喝到了XO一样,怎个爽字可形容呀。

再次回顾中国古代的四大发明,另三种应该都是科技的进步,伟大的创造或发现。而唯有活字印刷,实在是思想的成功,面向对象的胜利。不知您是否也有所感呢?

出处:http://www.cnblogs.com/cj723/archive/2006/08/16/478621.html

四大发明之活字印刷——面向对象思想的胜利相关推荐

  1. 使用面向对象思想,实现(人狗大战)小游戏

    学习面向对象之后,练习使用面向对象思想,实现代码 ⼈狗⼤站,2个⻆⾊,⼈和狗,游戏开始后,⽣成2个⼈,3条狗,互相混战,⼈被狗咬了会掉⾎,狗被⼈打了也掉⾎,狗和⼈的攻击⼒,具备的 功能都不⼀样. 类: ...

  2. 第0篇 面向对象思想

    一 面向对象思想的起源 面向对象(Object-Oriented)思想最初起源于20世纪60年代末的simula67语言.面向对象方法的基本要点首次在simula语言中得到了表达和实现.80年代,位于 ...

  3. 前端小白用面向对象思想实现元素拖拽

    上篇文章分享了如何用面向对象思想编写选项卡,在文章最后留了一个拖拽的例子,希望大家可以试着写一下,现在我就谈谈我在这过程中遇到的一些问题和解决方法.(本文主要是想和js初学者分享经验,代码中的更改th ...

  4. java有无参数求长方形的周长面积_用java面向对象思想编程求长方形的周长和面积...

    //面向的重要体现就是接口的使用 //甲 interface zfx { double mianji(); double zhchang(); } //乙 class zfxing implement ...

  5. Python__面向对象思想

    目录 一.Python中的面向对象思想 二.类和对象 Python 是一种面向对象的编程语言,不过,Python 与 C++ 一样,还支持面向过程的程序设计.在 Python 中完全可以使用函数.模块 ...

  6. 树结构之树和二叉树的概念以及如何用面向对象思想进行结构定义01

    树和二叉树的概念及结构定义 前言 一.树的基本概念及代码层面如何定义 1.树的概念 2.代码层面树如何定义 二.二叉树的基本概念及代码层面如何定义 1.二叉树的概念 2.代码层面二叉树如何定义 3.二 ...

  7. IOS应用管理学习,进阶,涉及字典转模型,工厂方法,面向对象思想,页面布局等

    IOS应用管理学习,进阶,涉及字典转模型,工厂方法,面向对象思想,页面布局等 前言:人为规定的参数 每一个 小view视图 宽度 80 高度 90 数据类型 CGFloat 定义, 3 列,数据类型 ...

  8. 浅谈面向对象思想下的 C 语言

    如何使用OO思维方式 面向对象(object Oriented,简称:OO)在于用"找对象"的方式去规划和描述问题. 一.怎样"找对象" (思维过程) &quo ...

  9. 你知道如何用面向对象思想写好并发编程吗?

    在工作中,我发现很多人在设计之初都是直接按照单线程的思路来写程序的,而忽略了本应该重视的并发问题:等上线后的某天,突然发现诡异的 Bug,再历经千辛万苦终于定位到问题所在,却发现对于如何解决已经没有了 ...

最新文章

  1. 解压zip_go|用Go写一个zip解压脚本
  2. Python2的Json反序列化工具
  3. 一种可以穿透还原卡和还原软件的代码
  4. Spring Cloud之网关搭建
  5. nginx长连接出现504的解决办法
  6. 优化 recipe 达到快速启动 SAP Hybris Accelerator Storefront 的方法
  7. python实现视频关键帧提取(基于帧间差分)
  8. php怎样查看视频播放的进度条,H5中视频与音频标签和进度条如何使用
  9. 顺序查找-判断质数/记录出现次数
  10. 1107班12月第5周 班级计划 为s1结业答辩做准备
  11. 分享2个第三方社会化分享按钮及分享工具
  12. iOS_网络_02_搭建本地Web服务器
  13. liferay录入中文乱码问题
  14. 万以内的字符串整数变成汉子字符串
  15. 奈奎斯特定理和香农定理之科普篇
  16. python钓鱼评论爬取
  17. python桌面整理小助手
  18. python保存简单网页图片到本地(详细步骤)
  19. linux添加javahome
  20. ORCALE 19C数据库Linux系统数据泵导入步骤

热门文章

  1. 浅探C指针(一)--初识指针
  2. linux文件常用权限,常用的更改Linux系统文件权限的命令
  3. linux 病毒脚本,解析常见的Linux病毒
  4. pyqt5教程9:Widgets组件
  5. 关于雅可比迭代的Python实现
  6. go消息服务器吗,Go语言聊天服务器
  7. 手写html基础格式,手写服务器_HTML 简单入门知识
  8. 动态性是Java的特性吗_Java的动态特性有哪些?
  9. 小程序仿 axios 请求封装
  10. 半潜式深海平台动力定位控制技术研究