• 阿卡牛
    2019-11-04
    面向对象是武器,设计模式是招式,设计原则是心法
    以心法为基础,以武器运用招式应对复杂的编程问题
     6
     327
  • 帆大肚子
    2019-11-04
    函数是相对比较小的可复用单位
    面向对象把可复用单位提升到类层次
    设计模式把可复用单位提升到框架层次
    
     124
  • 段启超
    2019-11-11
    我觉得今年对我来说,是重新认识“面向对象”的一年。
    今年事我工作的第三年了(从八月份开始算第三年),年初的时候误打误撞的学了一段时间的DDD,让我瞬间感受到了什么才是面向对象编程,之前自己做的都是用面向对象的语言写面向过程的代码。究其原因,可能是MVC 三层架构的影响,太多人的代码里头只剩下了pojo这种贫血模型。封装,继承,多态,抽象是啥,早就忘干净了。
    在软件设计方面,很多人习惯了一开始就设计数据库表结构,结果就是代码逻辑跟数据库构成了强耦合,数据库一改,代码基本上会被改个彻底。在这种情况下,我们用的java面向对象的语言,结果却写的是面向过程的代码,这种代码基本没有可维护,可扩展,更没有可测试性一说。所以,面向对象的这个词语,被太多的人只是挂在嘴边上了,落实到代码里边,就成了面向过程。
    在意识到这个问题后,我花了一段时间重新回顾了一遍面向对象的知识,并试图用来改进代码质量,这个过程是充满坎坷的,我总结了一些自己的体会:
    1: 要真正落地面向对象编程,面向对象设计是前提,没有面向对象的设计意识,写着写着就成了面条代码。
    2:以前只知道封装、继承、多态,全然忽视了最重要的抽象,抽象是封装、继承、和多态的基础。合理的抽象源于对业务主体的合理分析和认识。合理的抽象,应该是自洽的,易于理解的。
    3:关于组合和聚合的关系,最核心的区别就是生命周期的区别,组合关系中,整体和部分是一个整体,离开了整体,部分没有意义,同时产生,同时销毁,而聚合关系中,部分单独存在也可以是有意义的。
    4:别滥用继承,继承的作用更多的时候使用多态的特性。
    关于UML :
    在工作的过程中,试着画过UML图,UML图有着自己一条完整的语言和生态,学习成本还是相当高的,问题在于,即使用了标准的UML 图,如果沟通过程中,对方不懂,也依然效果不大,所以我对UML的感觉就是: 能看懂,会画基本的即可,没必要太追求标准化,虽然如此,但是UML 还是很重要的,它的意义是提供一种面向对象设计的表达方式,是学习面向对象设计中不可缺少的一部分(个人理解)。
    展开
     4
     87
  • aof
    2019-11-04
    第二题,文中已经给出答案了?
    主要是因为面向对象编程因为具有丰富的特性(封装抽象继承多态),可以实现很多复杂的设计思路,
    是很多设计原则、设计模式等编码实现的基础。
    
     36
  • 丁丁历险记
    2019-11-04
    建议和左耳的程序员练级攻略结合起来一起读。
    上述道理 ,知易行难,一起加油。
     3
     24
  • 于留月
    2019-11-06
    个人认为重构对提高代码质量最有效,原因:
    重构的基础就是面向对象、设计原则、设计模式、编程规范;
    重构是一个持续的过程,能够兼顾项目进度、项目开发效率和项目质量,既可以避免前期的过度设计,又能避免后期代码腐化,从而保证代码的质量不下降以致不断提高代码质量;
    通过单元测试等相关手段,保证重构的正确性
    重构可从代码层次、项目阶段、开发周期、人员规模等不同纬度进行

    其他提高代码质量的方法:
    阅读高质量框架代码,先模仿;
    代码Review,定期总结;
    技术分享,倒逼输出,看了、做了都不如说给比人听更有效果;
    工具检查(如lint、leakcanary等),开发过程中避免常识性错误和隐藏问题;

    为什么它在标题中会特意提到“面向对象”呢?
    因为设计原则、设计模式实现大部分都是基于面向对象的特性(封装、抽象、继承、多态)实现的
    展开
    
     16
  • Monday
    2019-11-05
    看起来都明白,讲起来都不清
     1
     12
  • Yayu
    2019-11-05
    面向对象的特征也未必包含“继承”这一点吧,比如 Go 语言就没有提供“继承”这个特性,取而代之的是,推荐使用“组合”。但不能说它不支持面向对象编程。那么我们在探讨“面向对象”这个范式时,需要更深刻的去思考“面向对象”的本质是什么。而不是用Java 中的概念来一以概之。希望王争老师参考。

    作者回复: 后面会讲到,等讲到了就明白了

     9
     12
  • lijun
    2019-11-04
    有的时候业务复杂,代码就被业务牵着鼻子走,尤其是老项目,既存代码写的可读性差,但是时间紧任务重,能跑就行……哎
     6
     10
  • 哥本
    2019-11-06
    设计原则是高手的内功,设计模式是少林,武当,峨眉派的武术套路,规范是招式 出拳还是横扫,重构是组合拳 融汇贯通各种组合,而想练好这些武功还要有扎实的基本功 面向对象。
    
     9
  • 兔2🐰🍃
    2019-11-06
    总结:提高代码质量的方法论,包含面向对象(基础),设计原则(指导方针),设计模式(三大类,提高扩展性),编程规范(提高可读性),重构(保证代码质量)。
    
     7
  • 刘大明
    2019-11-05
    最近一直在思考一个问题,就是我们在开发过程中,写好代码,应该是一个程序员必备的基本功。这个好字就是这老师说的高质量的代码,以前一直觉得要追求最热最新的技术,不然就会被淘汰。其实忘记了一个最基本的事情,怎么写好代码,写高质量的代码,这个才是我们开发过程中的重点,写好代码应该是一个合格的程序员必备的技能,毕竟写代码才是我们真真正正吃饭的家伙。老师出的这个专栏真的是太好了,教大家怎么样做好我们程序员最基本的事情。
    
     7
  • 陈拾柒
    2019-11-15
    再好的理论,应用不到实际中也是白费。所以对于提升代码质量,最有效的是编码规范,其次是设计原则,再次是代码重构,最后才是面向对象和设计模式。
    整个排序是按照我理解的难易程度来进行的。一般一个项目都是多人开发,多人并行开发中,考虑到团队中技术水平不一,保持代码质量最好的方式就是先制定编码规范,大家最容易达成一致并遵守。其次是设计原则,因为它相对来讲更明确,违反设计原则基本等于硬伤,更容易得到认同。代码重构是需要长期去做的,甚至不是在开发过程中而是在维护过程中去做的,所以排在第三位。后面两项更多的要考虑实际情况,不同水平的人甚至相同水平的人都会有自己不同的理解,比较难以达成统一,项目排期足够还好,一旦排期不足,很可能在当时没那个成本去谈论这些。

    第二个问题老师已经回答了,因为面向对象的特性是其他的基石。

    建议老师在后续课程中,除了讨论如何提升自己的代码质量,也讨论一下在一个多人团队中如何提升团队的代码质量,有哪些比较好的手段可以去应用。包括在项目排期比较紧的时候,可以有哪些方式去保证代码质量。
    展开

    作者回复: 嗯嗯,加餐里有讲到的。

    
     4
  • Miaozhe
    2019-11-08
    我看到设计原则中还有迪米特法则(Law of Demeter, LoD),这个也是解决God类的一种方式。另外这个法则,好像跟组合复用相背呢。帮忙解释一下。

    作者回复: 学了后面章节就明白了

    
     3
  • 不与三季人说
    2019-11-07
    导读部分的最后一节课了,明白了编程思想、设计原则。设计模式。编码规范和重构的意思,之前也有了解,这次通过老师解读,理解变得更清晰了,有了面向对象的设计思想,才有了适合这种思想的设计原则,设计原则是设计系统和代码应该考虑的问题,在满足部分原则的情况下,针对具体的场景,有了设计模式,设计模式的出现就是为了最大可能的满足设计原则,至于编码规范,可以提高代码的可读性和不同程序员直接的一个约定一样的,没有规范不影响计算机运行程序,但是在项目交接和团队合作的时候会变得很麻烦,重构也是一个项目的必经阶段,好的代码重构起来也会很方便,而不是牵一发动全身。
    提高代码质量的方法还有就是写注释吧,代码注释可以很大程度的增加可读性。
    设计模式之所以加上面向对象,是因为设计模式是基于设计原则而设计出来的具体执行方法,而设计原则是根据设计思想衍生出的,设计思想是面向对象,所以才有了设计原则和设计模式。
    编程思想就像是宪法,在宪法的基础上细化的法规就相当于设计原则,而设计模式就相当于条例,是具体的体现。
    展开
    
     3
  • zachary
    2019-11-06
    争哥,设计模式有三种类型:
    创建型:这个好理解,就是用来创建对象的一些模式
    结构型和行为型不好理解,结构体现在哪里?行为又体现在哪里?能否说的更具体点?

    作者回复: 后面会讲到的,别急哈

    
     3
  • 修缘
    2019-11-06
    编码规范和设计原则解决的是可读性和可维护性,而面向对象是一种设计方法或者说是一种抽象思维,更符合人类的思考方式,所以它们的属性偏向于静态的概念;代码重构和设计模式是一种动态的概念,是具体的执行方法,当然代码重构本身就包含了:编码规范,设计原则,设计模式。
    另外,面向对象和设计模式本身就有着紧密的联系,设计模式是解决特定问题的有效方法,是经验的总结。
    
     3
  • 辣么大
    2019-11-05
    GoF的提出是针对解决面向对象编程中遇到的问题,所以书名中强调“面向对象”。It’s a book
    of design patterns that describes simple and elegant solutions to specific problems
    in object-oriented software design.
    
     3
  • 刘冬
    2019-11-04
    初级:代码规范 面向对象
    中级:设计原则 设计模式
    高级:设计模式 重构

    oop的基本特性(封装 抽象 继承 多态)和design pattern的需求高度匹配
     1
     3
  • Geek_222ec6
    2019-11-09
    设计原则是指导设计模式的更抽象的理论(这么说应该对吧)

    另外有个困惑就是在编码规范的时候,自我感觉英语还可以,但是函数,变量命名的时候经常会犯纠结症和强迫症。。。不知道怎么命名才好。

    作者回复: 理解是对的。这个正常,一个好的命名确实要花点时间想的

     1
     2
我们在线,来聊聊吧