因为已突破原帖子主题“对结构型设计模式的理解”本身含义,所以转移出来
jamesby 写道
qinysong 写道
jamesby 写道
qinysong 写道
jamesby 写道
我觉得降低偶合,也就是解偶是关键,底偶合高内聚,高扩展,高复用是软件设计的目标。
我觉得“底偶合高内聚”应该在设计原则层次,通过原则指导利于达到设计目标——“高扩展,高复用”
我觉得设计原则应该是
面向接口和抽象编程
优先使用组成而不是继承,也就是HAS A OR IS A 等等,
而遵守设计原则的软件就是高内聚底偶合的设计,也就是高扩展,高复用的设计!
我认为高扩展,高复用是终极目标,但是达到了高内聚底偶合的目标也就达到了高扩展,高复用的目标.
嗯,非常好,这样的讨论非常促进我的认识
我想再引入一个词——属性,一个好的软件,一个最大限度接近优秀目标(高扩展,高复用)的软件本身应该具有一些基本属性,就像高尔基说的“不幸的家庭各有各的不幸,而幸福的家庭都是相似的”,软件也是,不好、劣质的软件各有各的不好之处,而优秀的软件(从设计角度来说)却都具有基本的属性,这些属性中我觉得就可以包括“高内聚、底偶合”。
所以“高内聚、底偶合”这是优秀软件的基本属性,而目标是表达我们最大渴望的主观意愿,一个软件只要高扩展,高复用我们就满足了,在这个满足的前提下我们不在乎是不是高内聚低耦合。但是幸福的家庭都是相似的
比喻的不错。
是不是也可以这样理解,软件的终极目标,就是复用。
可复用的软件一定是可扩展的,可扩展的一定具有高内聚、底偶合的特点。
而软件设计原则是达到这个目标的通道。设计模式是这个终极目标的表现方式。
我觉得软件设计有两个大的目标:
第一个:可重用性。可重用性通过复用之前的劳动成果提高了生产效率,降低了成本;
第二个:可维护性。可维护性通过延长系统的使用寿命,增值了产品价值;
要想设计达到这两个目标,系统就需要有一些特性
包括可读性、高灵活性、易扩展性、通用性、可移植性,这些特性是一个系统表现出来的,可概括为“白箱特性”:),而系统内部也要有一些属性,如高内聚、低耦合,这些内部属性更侧重内部结构性,概括为“黑箱属性”。
为了使一个系统具有那些优秀的特性,有一些手段,或者称为方法
这些方法/手段包括抽象(提高通用性)、封装(增强内聚性)、分离(降低耦合性)等等
当对这些方法/手段进行细化、分类、概括时,就产生了一些设计原则/准则
比如面向接口编程、优先使用对象组合、SRP单职责准则、OCP准则等等
这些准则/原则在一定场景下的经典表现方式,就产生了设计模式
以上是个人理解,因为这种层次的划分包括大量的理解上、语义上的因素,所以每个人的划分可能会有不同,不过我感觉这样的划分虽然可能因人而异,但是他可以让我们有一个全局观念,所以还是很有意义的
大家多批评
分享到:
相关推荐
主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...
期末复习时,我们需要关注几个核心概念,包括程序的本质、高质量代码的特性、软件设计模式及其分类、UML的作用,以及面向对象设计原则。 首先,程序是解决问题的语句序列,它是计算机执行任务的基础。高质量的代码...
【软件设计原则】是指导设计实践的准则,包括用户需求优先、接受变化、合理预估软件规模等思想原则,以及开-闭原则、单一职责原则、李氏代换原则、依赖倒转原则、接口隔离原则、合成/聚合复用原则和迪米特法则等技术...
通过以上对面向对象数据结构与软件开发的核心知识点的介绍,我们可以看出,面向对象的设计思想不仅有助于构建更加灵活和可维护的软件系统,而且在实际开发过程中,结合合适的数据结构和设计模式,能够显著提高开发...
3. **面向对象设计原则:**面向对象设计(OOD)是现代软件开发中常用的方法之一,其基本原则包括封装、继承、多态等,有助于提高代码的复用性和灵活性。 ### 三、软件开发过程管理 1. **需求分析的重要性:**需求...
在软件设计与体系结构中,我们首先探讨的是面向对象的概念。面向对象是现代软件开发中的核心思想,它强调以对象为中心的设计方式。 1. **抽象**:抽象是将现实世界中的复杂问题简化为易于理解的形式,它关注的是...
软件设计涉及将项目需求转化为具体的软件架构,这包括选择合适的数据结构、算法和编程模式。良好的设计可以提高代码的可读性、可维护性和扩展性,同时降低未来的修改成本。 #### 编码与实现 编码是将设计转换为...
首先,第一章《软件工程基本观念》是整个书籍的基础,它讲述了软件工程的起源、目标和原则。软件工程不仅关注软件的开发,更注重软件的生命周期管理,包括需求分析、设计、编码、测试、维护等各个阶段。这一章会阐述...
- **目标**:消除代码中的重复部分,修复体系结构缺陷,使之更符合设计模式的原则。 **反模式(Antipatterns)**: - **定义**:常见问题的负面示例,揭示了设计中的陷阱。 - **作用**:帮助识别并避免常见的设计错误...
软件工程学是软件工程的理论基础,它不仅包含了软件开发的技术细节,还涵盖了软件项目的管理策略和方法论。 #### 二、软件工程管理 **软件工程管理:** 软件工程管理涉及软件项目的计划、组织、协调和控制等管理...
Java软件开发工程师培训课程体系是针对想要进入IT行业,尤其是Java软件开发领域的人员设计的一套系统性学习计划。课程旨在帮助学员从零基础到具备专业技能,通过分阶段的实训和素质培养,全面掌握Java编程语言及其...
继承是面向对象编程中的一个重要特性,允许创建新的类来继承现有类的属性和方法。这一章深入分析了继承的概念、优缺点及其在面向对象设计中的应用。 - **继承的定义**:继承是指一个类可以从另一个类那里获取其所有...
为此,软件工程提出了诸多原则和方法,如迭代开发、敏捷开发、持续集成和持续交付等,以适应快速变化的软件开发环境。 总的来说,软件开发过程是一个涉及多方面知识和技能的过程,它需要开发者理解软件的本质,掌握...
11. **软件需求的概念**:软件需求是软件系统预期达到的目标或应具备的功能和性能特性。 12. **软件需求规约主要包括的内容**:软件需求规约通常包括功能需求、非功能需求、约束条件等内容。 13. **软件设计阶段的...
- **继承**:一个类可以从另一个类派生,继承其属性和方法。 - **多态**:同一操作作用于不同的对象上会产生不同的结果。 综上所述,《面向对象软件构造》这本书从软件质量出发,逐步引导读者了解面向对象编程的...
- **标准化意义、目标及指导思想**:强调标准在系统建设中的作用,设定标准制定的目标,以及遵循的原则。 - **标准化工作任务**:列出需要完成的标准规范,如接口标准、数据格式标准等。 6. **安全体系设计** - ...
- 介绍 Spring 框架的特性,运用软件设计原则解释 Spring 及其子项目的设计目标、特性和应用优势。 - 说明 Spring 框架的组织结构、应用场景和作用。 - 解释依赖反转模式(IoC)和 IoC 容器的概念。 - 讲解 Bean...
因最先进入队列的元素将最先出队,所以队列具有先进先出的特性,体现“先来先服务”的原则。 队头元素q1是最先被插入的元素,也是最先被删除的元素。队尾元素qn是最后被插入的元素,也是最后被删除的元素。因此,与...