考研求职两不误 - 开放封闭原则(Open Close Principle)

4.1 考研失败

  • 时间: 3月5日   地点: 小菜房间   人物: 大鸟, 小菜      “…….多少次, 迎着冷眼与嘲笑, 从没有放弃过心中的理想, 一刹那恍惚, 若有所失的感觉, 不知不觉已变淡心里爱(谁明白我)….”
         小菜此是正咋房中坐在桌前发呆, 音响中大声的放着 Beyond 的<<海阔天空>>. 此是有人敲门, 打开一看, 原来是大鸟.
         大鸟: “小菜, 怎么听这么伤感的歌, 声音这么大, 我在隔壁都听得清清楚楚. 发生了什么事?”
         小菜: “今天研究生考试成绩出来了, 我的英语成绩里分数线差两分, 之前的努力白费了”
         大鸟: “考研失败也是正常的, 考不上的人还是占多数呀, 想开些吧, 找到好工作未必读研要差”
         小菜: “为了考研, 我没有做任何求职的准备, 所以我们班不少同学都找到工作了, 我却才刚开始, 前段时间的面试也没有消息.”
         大鸟: “哈, 鱼与熊掌岂能兼得, 为一件事而放弃另一些机会, 也是在情理之中的.”
         “说是这么说, 我却感觉无比难受, 我的同学, 有几个其实水平不比我强, 他们都签了 XX 大集团, XX 知名公司, 而我现在一无所有, 感觉很糟糕. 要是当时我也花点时间在简历上, 或许现在也不至于这么不爽.”
         大鸟: “你考研复习的时候, 每天学习多长时间, 有么有休息的时候”
         小菜: “差不多是个小时吧, 其实效率并不高, 有不少时候都困得不行了, 趴在桌上睡过去了.”
         大鸟: “这就对了, 你为什么不利用休息的时间考虑一下自己的简历如何写, 关心一下有什么单位在招聘呢? 这样也就不至于现在唉声叹气了.”
         小菜: “感觉找工作会影响复习的精力, 所有干脆什么都没找, 但其实每天都会有同学求职应聘的消息传到我的耳朵里, 我也没有安心复习.”
         大鸟: “小菜呀, 你其实就是没有搞懂一个设计模式的原则.”
         小菜: “哦, 什么原则?”
         大鸟: “先不谈这个原则, 你想想看, 香港澳门的顺利回归, 有一个人起了重要的作用, 他是谁?”
         小菜: “啊, 那还用说, 是邓小平呀, 如果不是他老人家提出的一国两制的思想, 或许现在还没有回归呢.”
         大鸟: “小平同志的确是伟大的政治思想家, 他的这一创造性想法有什么独到之处?”
         小菜: “我想想看, 原因主要是在与大陆的社会主义制度不能修改, 这一点毋庸置疑, 而香港澳门长期在资本主义制度向管理和发展, 所以回归时强行修改香港澳门的制度也并不合理, 所以用 ‘一国两制’ 来解决制度差异造成的矛盾是最合理的方法.”
         大鸟: “说得好, 社会主义制度不能修改, 邓小平在和英国首相撒切尔夫人谈香港问题的时候, 如果要定香港回来必须要是想社会主义制度, 那回归就困难重重了, 香港的老百姓也不答应呀, 毕竟这么多年来的殖民统治, 突然在整个管理制度上进行彻底变化也是不现实的, 那怎么办? 为了回归的大局, 增加一种制度又何尝不可, 一个国家, 两种制度, 这在政治上, 是伟大的发明哦. 在软件设计模式中, 这种不能修改, 但可以扩展的思想也是最重要的一种设计原则, 他就是开放—封闭原则(The Open-Closed Principle, 简称 OCP) 或叫开—闭原则.”

4.2 开放—封闭原则

     小菜: “开放封闭, 具体怎么解释呢?”

开放封闭原则, 是说软件实体(类, 模块, 函数等等) 应该是也易扩展的, 但是不可修改. [ASD]

     大鸟: “这个原则其实是有两个特征, 一个是说 ‘对于扩展式开放的(Open for extension)‘, 另一个是说 ‘对于更改时封闭的(Closed for modification)‘[ASD].”
     大鸟: “我们在做任何系统的时候, 都不要指望系统一开始就需求确定, 就再也不会变化, 这是不现实也是不科学的想法, 而既然需求总是一定会变化的, 那么如何在面对需求的变化时, 设计的软件可以相对容易的修改, 不至于说, 新需求一来, 就要把整个程序推倒重来. 怎样的设计才能面对需求的改变却可以保持相对稳定, 从而使得系统可以在第一个版本以后不断推出新的版本呢?[ASD], 开放—封闭给我们答案.”
     小菜: “我明白了, 你的意识是说, 设计软件要容易维护又不容易出问题的最好办法呢, 就是多扩展, 少修改.”
     大鸟: “是的, 比如说, 我是公司老板, 我规定, 九点上班, 不允许迟到. 但有几个公司骨干, 老是迟到. 如果你是老板你怎么做?”
     小菜: “严格执行考勤制度, 迟到扣钱.”
     大鸟: “你倒是够狠的, 但实际情况是, 有的员工家离公司太原, 有的员工每天要送小孩子上学, 交通一堵就不得不迟到了.”
     小菜: “这个, 让他们有特殊原因的人打报告, 然后允许他们迟到.”
     大鸟: “哈, 谈何容易, 别的不迟到的员工不答应了呀, 凭什么他能迟到, 我就不能, 大家都是工作, 我上回也完全可以多睡会再来.”
     小菜: “那怎么办? 老是迟到的确也不好, 但是不让迟到不现实. 离家远近, 交通是否堵塞也不是可控制的.”
     大鸟: “仔细想想, 你会发现, 其实迟到不是主要问题, 每天保证你8小时的工作量是老板的需要. 甚至8小时工作时间也不是主要问题, 业绩目标的完成或超额完成才是最重要的指标, 于是应该改变管理方式, 比如弹性上班工作制, 早到早下班, 玩到晚下班, 或者没人每月允许三次迟到, 迟到者当天下班补时间等等, 对市场销售人员可能就更加以业绩为标准, 工作时间不固定了—其实就是对工作时间或业绩成效的修改关闭, 而对时间制度扩展的开放.”
     小菜: “这就需要老板自己很清楚最希望达到的目的是什么, 制度的制定才最合理有效.”
     大鸟: “对的, 用我们古人的理论来说, 管理需要中庸之道.”

4.3 合适应对变化

     小菜: “哈, 有道理. 所以, 我们尽量应该在设计时, 考虑到需求的种种变化, 把问题想的全了, 就不回应为需求依赖,手足无措.”
     大鸟: “哪有那么容易, 如果什么问题都考虑的周到, 那不就成了未卜先知, 这是不可能的.需求时常会在你想不到的地方出现, 让你防不胜防.”
     小菜: “那我们应该怎么做?”
     大鸟: “开放—封闭原则的意思就是说, 你设计的时候, 时刻要考虑, 尽量让这个类是足够好的, 写好了就不要去修改了, 如果新需求来了, 我们增加一些类就完事儿了, 原来的代码能不动则不动.”
     小菜: “这可能做到吗? 我深表怀疑啊, 怎么可能写完一个类就不改了呢?”
     大鸟: “你说的没错, 绝对的修改关闭是不可能的. 无论模块多么的 ‘封闭’, 都存在一些无法对之封闭的变化. 既然不可能完全封闭, 设计人员必须对于他设计的模块应该对那种变化封闭做出选择. 他必须县猜测出最有可能发生变化的种类, 然后构造抽象来隔离那些变化[ASD].
     小菜: “那还是需要猜测程序可能会发生的变化, 猜对了, 那是成功, 猜错了, 那完全走到另一面去了, 把本该简单的设计做的非常复杂, 很不划算呀. 而且事先猜测, 这又是很难做到的.”
     大鸟: “你说的没错, 我们是很难预先猜测, 但我们却可以再发生小变化时, 就及早去想办法应对发生更大变化的可能, 也就是说, 等到变化发生时立即采取行动[ASD]. 正所谓, 同一地方, 摔第一跤不是你的错, 再次再次摔跤就是你的不对了.”
     大鸟: “我们在最初编写代码时, 假设变化不会发生. 当变化发生时, 我们就创建抽象来隔离以后发生的同类变化[ASD]. 比如, 我之前让你写的加法程序, 你会快在一个 client 类中完成, 此时变化还没有发生. 然后我让你添加一个减法功能, 你发现, 增加功能需要修改原来这个类, 这就违背了今天讲到的 ‘开放—封闭原则’ , 于是你就该考虑重构程序, 增加一个抽象的运算类, 通过一些面向对象的手段, 如继承, 多态等隔离具体的加法, 减法与 client 的耦合, 需求依然可以满足, 还应对对变化. 这时我又要你在家乘除法功能, 你就不需要再去更改 client 以及加法减法类了, 而是增加乘法和除法子类就可以了.
面对需求, 对程序的改动是通过增加代码进行, 而不是更改现有的代码[ASD]. 这就是’开放—封闭原则’ 的精神所在.”



     大鸟: “当然, 并不是什么时候应对变化都是容易的. 我们希望的是在开发工作展开不久就知道可能发生的变化. 查明可能发生的变化所等的时间越长, 要创建正确的抽象就越困难[ASD].”
     小菜: “这个我能理解, 如果加减运算都在很多地方应用了, 在考虑抽象, 考虑分离, 就很困难.”
     大鸟: “开放—封闭原则是面向对象设计的核心所在. 遵循这个原则可以带来面向对象技术所声称的巨大好处, 也就是可维护, 可扩展, 可复用, 灵活性好. 开发人员应该进队程序中呈现出频繁变化的那些部分做出抽象, 然而, 对于应用程序中的每个部分都刻意的进行抽象同样不是一个好主意. 拒绝不成熟的抽象和抽象本身一样重要[ASD]. 切记, 切记.”
     小菜 : “哦, 我还以为尽量的抽象是好事呢, 看来过犹不及啊.”

4.4 两手准备, 并全力以赴

     此处河蟹掉没什么卵用的五百字…

~感谢捧场,您的支持将鼓励我继续创作~