`

面向对象的原则、模式、语言及框架(二)

阅读更多
一、一些拙劣的设计症结
说起面向对象的原则,不得不提一些拙劣的一些设计症结,和代码的Bad Smell类似,但他们处于更高的层次,是整个软件结构的Bad Smell.
这些症结主要有:
僵化性(Rigdity):设计难于改变。
很难对系统进行改动,因为每个改动会迫使许多对系统的其他部分做改动,这往往是系统耦合性太高.
脆弱性(Fragility):设计易于遭到破坏。
在一次改动时,程序的许多地方都会出问题,而且常常出新问题的地方和改动的地方并没有概念上的联系.这些模块不断的修改,然而你越是修改他们,他们就变的更糟.
牢固性(Immobility):设计难于重用。
设计中包含了许多对其他系统有用的部分,但是要把这部分从系统中分离出来所需要的努力和风险是巨大的.
粘滞性(Viscosity):难以做正确的事情。
主要表现在软件的粘滞性和环境的粘滞性。当面临一个改动是,开发人员会有许多的改动方法,有的方法能够保持设计,有的却破坏设计,但是保持设计的方法变得越发难以应用,这就
表明设计具有很高的粘滞性。当开发环境迟钝、低效时,例如编译代码花费的时间很长,开发人员往往被诱使做不会导致大规模重新编译的事情,即时这些改动会破坏设计,这就是环境粘滞。
不必要复杂性(Needless Complexity):过分设计。
设计包含当前没有用到的部分,开发人员预测需求的可能变化,并放置了处理那些潜在变化的代码,为过多的可能性做准备,导致了绝不会用到的结构。
不必要的重复性(Needless Repetition):滥用ctr+c,ctrl+v
复制粘贴,许多开发人员惯用的伎俩。当他们需要写一个功能时,在原有的代码中,查找是否有类似的功能,找到后直接拷贝过来,稍加修改便ok了。似乎是个很高效的方法,然而这样导致的结果是缺少必要的抽象,当在一个重复的代码中发现错误或者增加功能时,需要同时更新其他的重复代码。
晦涩性(Opacity):混乱的表达。
是指模块难以理解,代码需要清晰和富有活力的表达,然而也可能一种晦涩的方式表达,并且当代码随着时间演化时会变得越来越晦涩。这就要求代码的编写者要站在阅读者的角度写代码,写出清晰易于理解的代码。
二、面向对象的设计原则:
单一职责原则(The single responsibility principle)SRP
开-闭原则(the open-close principle) OCP
liskov替换原则(the liskov subsititution principle)LSP
依赖倒置原则(The dependency inversion principle)DIP
接口分离原则(The interface segregation interface)ISP
组合/聚合复用原则(Composition/Aggregation Principle)CARP
迪米特法则 (Law of Demeter)LoD
这些原则是数十年软件工程来之不易的成果,使许多软件开发人员和研究人员思想和著作的结晶。设计中的Bad smell,往往是违反了这几种原则的一种或几种而导致的结果。设计模式都是遵循了这些原则,在特定环境下一类问题的解决方案。分析设计模式从设计原则上分析才能知道为什么要这么设计。后面将要总结这些原则是如何去除设计中的Bad Smell的。当然过度使用这些原则会导致过度设计的Bad Smell.
参考:Bob大叔的《敏捷软件开发:原则、模式与实践》
3
1
分享到:
评论

相关推荐

    《C#面向对象设计模式纵横谈》.pdf

    设计模式是建立在面向对象原则基础上的。面向对象的设计强调类和对象的组织,以及它们之间的相互作用。面向对象设计模式通过类的抽象、类的组织和类之间的通信来实现面向对象设计的优化。 在C#中实现面向对象设计...

    C#面向对象设计模式视频01

    在IT行业中,面向对象设计模式是软件开发中的重要概念,特别是在使用C#这样的面向对象编程语言时。设计模式是经过时间验证的、可重用的解决方案,用来解决在软件设计中经常遇到的问题。本视频教程“C#面向对象设计...

    C#面向对象设计模式纵横谈视频以及源码

    在IT行业中,面向对象设计模式是软件开发中的重要概念,特别是在.NET框架,如C#这样的编程语言中。本文将深入探讨“C#面向对象设计模式纵横谈”视频教程及其源码,帮助开发者理解和掌握这些模式在实际项目中的应用。...

    几种设计模式和面向对象原则

    在面向对象编程中,设计模式帮助我们遵循一些基本原则,以提高代码的灵活性、可维护性和可扩展性。在这个主题中,我们将深入探讨"单件模式"这一重要的创建型设计模式。 单件模式是一种确保一个类只有一个实例,并...

    《C#面向对象设计模式纵横谈》讲义

    面向对象设计模式与面向对象原则的关系 面向对象设计模式是建立在良好的面向对象设计基础上的。优秀的面向对象设计能够更好地应对需求的变化,并提高代码的复用性。面向对象设计模式不仅关注于类的设计,还强调了...

    面向对象设计原则英文文章

    面向对象设计原则是软件开发中的核心概念,尤其在Java、C++等面向对象编程语言中至关重要。这些原则为创建可维护、可扩展和可重用的代码提供了指导框架。这篇文章将深入探讨面向对象设计原则,并结合设计模式进行...

    面向对象自动化测试框架的研究与设计

    ### 面向对象自动化测试框架的研究与设计 #### 摘要与引言 本文主要探讨了面向对象自动化测试框架的设计与实现。随着软件规模的不断扩大,传统的手动测试已经无法满足快速迭代的需求,因此自动化测试成为了提高...

    C#设计模式(1)面向对象设计模式与原则

    本文将深入探讨C#中的面向对象设计模式及其原则,旨在为程序员提供一个理解和应用这些模式的框架。 首先,我们来理解什么是设计模式。设计模式是一种在特定情况下解决问题的通用、可复用的解决方案,它描述了在软件...

    面向对象软件构造(第二版)中英对照版

    9. **设计原则**:作者可能会介绍SOLID原则,包括单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则,这些原则是指导良好面向对象设计的基石。 10. **软件生命周期**:从需求分析到系统实现,再到...

    数据结构与算法-面向对象的C++设计模式

    而面向对象的C++设计模式则是将这两种概念巧妙融合,为软件开发提供了强大的工具和框架。下面,我们将深入探讨这些关键知识点。 首先,我们要了解**数据结构**。数据结构是指在计算机中组织和存储数据的方式,以...

    面向对象的编程语言C#

    本文将深入探讨C#中的核心面向对象概念,以及与之相关的UML(统一建模语言)、设计原则和模式。 1. **dotNet概述** .NET是微软推出的一个开发平台,它提供了丰富的库和服务,支持多种语言(如C#、VB.NET、F#等)...

    清华Java语言与面向对象程序设计

    《清华Java语言与面向对象程序设计》是一门深入讲解Java编程和面向对象设计的课程,旨在帮助学习者掌握Java编程的基础知识以及如何运用面向对象的思想进行软件开发。课程内容覆盖了从基本语法到高级特性,从理论概念...

    C#面向对象设计模式纵横谈(1)面向对象设计模式

    面向对象设计模式是软件开发中的重要概念,尤其是在C#这样的面向对象编程语言中。设计模式是一种在特定场景下解决问题的标准化解决方案,它来源于实践中并被广泛验证为有效的。本篇文章将深入探讨C#中面向对象设计...

    电子书《面向对象程序设计与Java语言》(第0.1版)

    6. **面向对象设计原则与设计模式**:第十六章提供了面向对象设计的原则和常用的设计模式,帮助开发者更好地组织代码和解决实际问题。 #### 特色亮点 与其他同类教材相比,《面向对象程序设计与Java语言》具有以下...

    面向对象的编程语言 多种语言 ppt 特别是C#

    通过PPT的学习材料,我们可以深入探讨每个主题,如“设计模式”可以帮助我们更好地理解和应用常见的软件设计解决方案,“UML介绍”让我们掌握统一建模语言,用于系统分析和设计,“面向对象设计原则”如单一职责、开...

    设计模式基础培训材料-面向对象设计原则与模式

    ### 设计模式基础培训材料-面向对象设计原则与模式 ...以上概述了面向对象设计的基本原则以及23种设计模式,并通过Qt框架中的实例进行了简要说明。理解和应用这些原则和模式对于构建高质量的软件系统至关重要。

    JAVA设计模式六大原则详细讲解(面向对象语言通用)

    6.恰恰是告诉我们用抽象构建框架,用实现扩展细节的注意事项而已:单一职责原则告诉我们实现类要职责单一;里氏替换原则告诉我们不要破坏继承体系;依赖倒置原则告诉我们要面向接口编程;接口隔离原则告诉我们在设计...

    基于PHP面向对象的自定义MVC框架高级项目开发12天视频

    本系列视频教程旨在通过12天的学习与实践,帮助开发者掌握如何使用PHP语言构建一个面向对象的自定义MVC框架,并应用到实际项目中。 #### 二、MVC架构基础 1. **MVC概述** - **模型(Model)**:负责处理应用程序的...

    面向对象分析与设计

    总结来说,"面向对象分析与设计"主题涵盖了大量的理论知识和实践经验,包括面向对象的基本概念、设计原则、设计模式以及在Java项目中的实际应用。通过学习相关书籍和研究实际项目源码,开发者可以提升自己的面向对象...

Global site tag (gtag.js) - Google Analytics