建材秒知道
登录
建材号 > 设计 > 正文

软件设计原则有哪些

丰富的荔枝
雪白的柚子
2023-01-01 00:00:33

软件设计原则有哪些

最佳答案
英勇的蛋挞
清脆的巨人
2025-04-05 04:59:07

七大设计原则

开闭原则

依赖导倒置原则

单一职责原则

接口隔离原则

迪米特原则

里氏替换原则

合成复用原则

设计模式-创建型模式

工厂方法模式

抽象工厂模式

建造者模式

单例模式

原型模式

设计模式-结构性模式

适配器模式

装饰者模式

代理模式

外观模式

桥接模式

组合模式

享元模式

设计模式-行为型模式

策略模式

模板方法模式

观察者模式

访问者模式

迭代器模式

责任链模式

中介者模式

解释器模式

状态模式

命令模式

备忘录模式

软件设计原则介绍

所以,可以说软件系统是连接需求分析、硬件系统以及使得系统实现的桥梁,对软件的设计应首先了解软件设计的设计原则。

设计原则

(1)可靠性

软件系统的规模越做越大越加复杂,其可靠性越来越难保证。应用本身对系统运行的可靠性要求越来越高,软件系统的可靠性也直接关系到设计自身的声誉和生存发展竞争能力。软件可靠性意味着该软件在测试运行过程中避免可能发生故障的能力,且一旦发生故障后,具有解脱和排除故障的能力。软件可靠性和硬件可靠性本质区别在于:后者为物理机理的衰变和老化所致,而前者是由于设计和实现的错误所致。故软件的可靠性必须在设计阶段就确定,在生产和测试阶段再考虑就困难了。

(2)健壮性

健壮性又称鲁棒性,是指软件对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。软件健壮性是一个比较模糊的概念,但是却是非常重要的软件外部量度标准。软件设计的健壮与否直接反应了分析设计和编码人员的水平。

(3)可修改性

要求以科学的方法设计软件,使之有良好的结构和完备的文档,系统性能易于调整。

(4)容易理解

软件的可理解性是其可靠性和可修改性的前提。它并不仅仅是文档清晰可读的问题,更要求软件本身具有简单明了的结构。这在很大程度上取决于设计者的洞察力和创造性,以及对设计对象掌握得透彻程度,当然它还依赖于设计工具和方法的适当运用。

(5)程序简便

(6)可测试性

可测试性就是设计一个适当的数据集合,用来测试所建立的系统,并保证系统得到全面的检验。

(7)效率性

软件的效率性一般用程序的执行时间和所占用的内存容量来度量。在达到原理要求功能指标的前提下,程序运行所需时间愈短和占用存储容量愈小,则效率愈高。

(8)标准化原则

在结构上实现开放,基于业界开放式标准,符合国家和信息产业部的规范。

(9)先进性

满足客户需求,系统性能可靠,易于维护。

(10)可扩展性

软件设计完要留有升级接口和升级空间。对扩展开放,对修改关闭。

(11)安全性

安全性要求系统能够保持用户信息、操作等多方面的安全要求,同时系统本身也要能够及时修复、处理各种安全漏洞,以提升安全性能。

最新回答
潇洒的巨人
勤恳的高跟鞋
2025-04-05 04:59:07

你好,很高兴能回答你的问题。

我们在软件开发中设计模式常用的的六大原则有下面几个:

1、开闭原则

开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。

2、里氏代换原则

里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是继承复用的基石,只有当派生类可以替换掉基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。

3、依赖倒转原则

这个原则是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。

4、接口隔离原则

这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。它还有另外一个意思是:降低类之间的耦合度。由此可见,其实设计模式就是从大型软件架构出发、便于升级和维护的软件设计思想,它强调降低依赖,降低耦合。

5、迪米特法则,又称最少指导原则

最少指导原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。

6、合成复用原则

合成复用原则是指:尽量使用合成/聚合的方式,而不是使用继承。

瘦瘦的曲奇
无情的御姐
2025-04-05 04:59:07
(1)可靠性

用软件系统规模越做越大越复杂,其可靠性越来越难保证。应用本身对系统运行的可靠性要求越来越高,软件系统的可靠性也直接关系到设计自身的声誉和生存发展竞争能力。软件可靠性意味着该软件在测试运行过程中避免可能发生故障的能力,且一旦发生故障后,具有解脱和排除故障的能力。软件可靠性和硬件可靠性本质区别在于:后者为物理机理的衰变和老化所致,而前者是由于设计和实现的错误所致。故软件的可靠性必须在设计阶段就确定,在生产和测试阶段再考虑就困难了。

(2)健壮性

健壮性又称鲁棒性,是指软件对于规范要求以外的输入能够判断出这个输入不符合规范要求,并能有合理的处理方式。软件健壮性是一个比较模糊的概念,但是却是非常重要的软件外部量度标准。软件设计的健壮与否直接反应了分析设计和编码人员的水平。

(3)可修改性

要求以科学的方法设计软件,使之有良好的结构和完备的文档,系统性能易于调整。

(4)容易理解

软件的可理解性是其可靠性和可修改性的前提。它并不仅仅是文档清晰可读的问题,更要求软件本身具有简单明了的结构。这在很大程度上取决于设计者的洞察力和创造性,以及对设计对象掌握得透彻程度,当然它还依赖于设计工具和方法的适当运用。

(5)程序简便

(6)可测试性

可测试性就是设计一个适当的数据集合,用来测试所建立的系统,并保证系统得到全面的检验。

(7)效率性

软件的效率性一般用程序的执行时间和所占用的内存容量来度量。在达到原理要求功能指标的前提下,程序运行所需时间愈短和占用存储容量愈小,则效率愈高。

(8)标准化原则

在结构上实现开放,基于业界开放式标准,符合国家和信息产业部的规范。

(9)先进性

满足客户需求,系统性能可靠,易于维护。

(10)可扩展性

软件设计完要留有升级接口和升级空间。

平淡的白开水
现代的雪碧
2025-04-05 04:59:07
界面设计原则总的来说可以概括成界面在用户的掌控之中、保持界面的一致性和减少用户记忆的负担这三大点,下面就给大家具体介绍一下界面设计原则。(一)界面设计原则(1)用户原则。人机界面设计首先要确立用户类型。划分类型可以从不同的角度,视实际情况而定。确定类型后要针对其特点预测他们对不同界面的反应。这就要从多方面设计分析。(2)信息最小量原则。人机界面设计要尽量减少用户记忆负担,采用有助于记忆的设计方案。(3)帮助和提示原则。要对用户的*作命令作出反应,帮助用户处理问题。系统要设计有恢复出错现场的能力,在系统内部处理工作要有提示,尽量把主动权让给用户。(4)媒体最佳组合原则。多媒体界面的成功并不在于仅向用户提供丰富的媒体,而应在相关理论指导下,注意处理好各种媒体间的关系,恰当选用。(详见媒体的选择)(二)界面分析与规范在人机界面设计中,首先应进行界面设计分析,进行用户特性分析,用户任务分析,记录用户有关系统的概念、术语,这项工作可与多媒体应用系统分析结合进行,囊括于用户分析报告里。(三)人机界面的类型任务设计之后,要决定界面类型。目前有多种人机界面设计类型,各有不同的品质和性能,下图进行了详细的描述。创造性地使用多媒体环境,将会使应用程序功能大大增强。要做到这一点,需从如下两方面考虑:(1)媒体的功能:没有任何一种媒体在所有场合都是最优的,每种媒体都有其各自擅长的特定范围,各种媒体功能参考如下:①文本:在表现概念和刻划细节时可用表现。②图形:擅长表达思想轮廓及蕴含与大量数值数据内的趋向性信息,在空间信息方面有较大优势。③动画:可用来突出整个事物,特别适于表现静态图形无法表现的动作信息。④视频影像:适于表现其它媒体所难以表现的来自真实生活的事件和情景。⑤语音:能使对话信息突出,特别是在于影像,动画集合时能传递大量的信息。⑥姿态与动作:在与别的媒体结合时具有较强的信息引用能力,可以在相关信息之间建立起时间、空间以及逻辑上的联系。(2)媒体选择的结合与互补:脚本设计可根据内容需要分配表达的媒体,这里要特别注意媒体间的结合与区别。提出几条原则如下:①人们在问题求解过程中的不同阶段对信息媒体有不同需要。一般在最初的探索阶段采用能提供具体信息的媒体如语音、图像等,而在最后的分析阶段多采用描述抽象概念的文本媒体。而一些直观的信息(图形、图像等)介于两者之间,适于综合阶段。②媒体种类对空间信息的传递并没有明显的影响,各种媒体各有所长。③媒体结合是多媒体设计中需要研究的新课题。媒体之间可以互相支持,也会互相干扰。多种媒体应密切相关,扣紧一个表现主题,而不应把不相关的媒体内容拼凑在一起。④目前,媒体结合在技术上主要通过在一个窗口中提供多种媒体的信息片段(空间结合)和对声音、语音、录相等随时间变化的动态媒体加以同步实现(时间序列组合).⑤媒体资源并非愈多愈好,如何在语义层上将各种媒体很好的,结合以更有效地传递信息,是要很好地探索的研究课题,也是应用系统人机界面设计的关键问题。(四)界面设计原则中的用户心理学认知心理学,从广义上来说,就是关于认识的心理学。人类认识客观事物,主要就是通过感觉、知觉、注意、记忆、思维想象等来进行,因此,凡是研究人的认识心理过程的,都属于认识心理学。实际上,我们这里所指的认知心理学是指纯粹采用信息加工观点来研究认知心理学过程的心理学,也就是运用信息论以及计算机的类比、模拟、验证等方法来研究的的知识是如何获得、如何存贮、如何交换、如何取使用的。所以,我们这里所指的现代认知心理学实质是信息加工心理学。一般地,人们将信息加工心理学又称为狭义的认知心理学。1.认知过程看和听的过程构成知觉,图像和声音作为刺激的特征被接收并以抽象的方式被编码,把输入和记忆中的信息进行对比得出对刺激的解释,这一过程就是认知。人体信息处理器包括感官,短期记忆、长期记忆及与其相联系的动作处理器和认知处理器。每种知觉均有一个对应的短期存储器和处理器,人体信息模型总体框图如左图4.3.1所示。其中认知处理器执行的工作就是我们通常所说的思维。思维的结果或被存储起来,或送至动作处理器控制行动。2.认知心理学(1)现代认知心理学的核心: 现代认知心理学的理论实质,就是以计算机信息加工的观点来研究人的心理学活动,把人脑看作是一种如同计算机的信息加工系统。(2)现代认知心理学两个关键的重要概念: 现代认知心理学的学说内容集中体现在两个关键的重要概念上。现代认知心理学的一个重要的中心概念,就是“信息”。在某种程度上说,抽掉了“信息”的概念,认知心理学的理论也就会散架解体,难以存在。 现代认知心理学的另一个重要的中心概念,就是“信息加工系统”。信息加工系统的理论,是现代认知心理学理论的主体。(3)现代认知心理学的研究方法:现代认知心理学的研究方法有实验法、观察法(包括自我观察法)以及计算机模拟法等。3.人机交互设计遵循的认知原则根据用户心理学和认知科学,提出了如下基本原则指导人机界面交互设计。(1)一致性原则。即从任务、信息的表达、界面控制*作等方面与用户理解熟悉的模式尽量保持一致。(2)兼容性。在用户期望和界面设计的现实之间要兼容,要基于用户以前的经验。(3)适应性。用户应处于控制地位,因此界面应在多方面适应用户。(4)指导性。界面设计应通过任务提示和反馈信息来指导用户,做到“以用户为中心”。(5)结构性。界面设计应是结构化的,以减少复杂度。(6)经济性。界面设计要用最少的支持用户所必须步骤来实现。在界面设计原则指导下,提出以下几点针对界面设计与屏幕设计的参考:(1)由具体到抽象。即首先通过多媒体界面给用户提供具体的对象。然后从具体对象、内容中让学习者归纳出抽象的概念或原理,或用模拟系统来引导出抽象的原理。(2)由可视化的内容显示不可见的内容。尽可能利用数字、图解、动画、色彩等清晰爽目的对象显示原理、公式或抽象的概念。(3)由模拟引导创新。突出人机交互,尽量启发用户的积极思维和参与,并激起用户的学习和创造欲望。(4)合理运用再认与再忆,减少用户短期记忆的负担。所谓再认就是从系统给定的几个可能答案中要用户选择一个正确的或最好的。再忆即要求用户输入正确的答案或关键字。(5)考虑用户的个别差异,使用用户语言。以上五点具体体现了“由易而难,逐步强化。”这一源于认知心理学的原则。上文介绍的界面设计原则应该让大家心中对界面设计原则有了一定的认识,当然,因为界面设计是复杂的需要多学科参与的,心理学、语言学、设计学等学科都在里面占有重要作用。而用户界面是与程序交流的唯一方式,为了给用户提供最便捷的服务,界面设计原则是一定要遵守的。

冷傲的招牌
洁净的板栗
2025-04-05 04:59:07
具体来说,真是几篇纸也讲不完,但从我的经验来说。当然是我的个人认为最为重要的地方。

一、大量的注释(当然代码极为简单已经表明意思的除外)

二、要求有良好的客户体验。

下面是我从网络摘抄:(希望对你能有所帮助)

设计模式遵循的一般原则:

1.开-闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开发,对修改关闭.说的是,再设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展.换言之,应当可以在不必修改源代码的情况下改变这个模块的行为,在保持系统一定稳定性的基础上,对系统进行扩展。这是面向对象设计(OOD)的基石,也是最重要的原则。

2.里氏代换原则(Liskov Substitution Principle,常缩写为.LSP)

(1).由Barbar Liskov(芭芭拉.里氏)提出,是继承复用的基石。

(2).严格表达:如果每一个类型为T1的对象o1,都有类型为T2的对象o2,使得以T1定义的所有程序P在所有的对象o1都代换称o2时,程序P的行为没有变化,那么类型T2是类型T1的子类型.

换言之,一个软件实体如果使用的是一个基类的话,那么一定适用于其子类,而且它根本不能察觉出基类对象和子类对象的区别.只有衍生类可以替换基类,软件单位的功能才能不受影响,基类才能真正被复用,而衍生类也能够在基类的基础上增加新功能。

(3).反过来的代换不成立

(4).<墨子.小取>中说:"白马,马也乘白马,乘马也.骊马(黑马),马也乘骊马,乘马也."

(5).该类西方著名的例程为:正方形是否是长方形的子类(答案是"否")。类似的还有椭圆和圆的关系。

(6).应当尽量从抽象类继承,而不从具体类继承,一般而言,如果有两个具体类A,B有继承关系,那么一个最简单的修改方案是建立一个抽象类C,然后让类A和B成为抽象类C的子类.即如果有一个由继承关系形成的登记结构的话,那么在等级结构的树形图上面所有的树叶节点都应当是具体类而所有的树枝节点都应当是抽象类或者接口.

(7)."基于契约设计(Design By Constract),简称DBC"这项技术对LISKOV代换原则提供了支持.该项技术Bertrand Meyer伯特兰做过详细的介绍:

使用DBC,类的编写者显式地规定针对该类的契约.客户代码的编写者可以通过该契约获悉可以依赖的行为方式.契约是通过每个方法声明的前置条件(preconditions)和后置条件(postconditions)来指定的.要使一个方法得以执行,前置条件必须为真.执行完毕后,该方法要保证后置条件为真.就是说,在重新声明派生类中的例程(routine)时,只能使用相等或者更弱的前置条件来替换原始的前置条件,只能使用相等或者更强的后置条件来替换原始的后置条件.

3.依赖倒置原则(Dependence Inversion Principle),要求客户端依赖于抽象耦合.

(1)表述:抽象不应当依赖于细节,细节应当依赖于抽象.(Program to an interface, not an implementaction)

(2)表述二:针对接口编程的意思是说,应当使用接口和抽象类进行变量的类型声明,参量的类型声明,方法的返还类型声明,以及数据类型的转换等.不要针对实现编程的意思就是说,不应当使用具体类进行变量的类型声明,参量类型声明,方法的返还类型声明,以及数据类型的转换等.

要保证做到这一点,一个具体的类应等只实现接口和抽象类中声明过的方法,而不应当给出多余的方法.

只要一个被引用的对象存在抽象类型,就应当在任何引用此对象的地方使用抽象类型,包括参量的类型声明,方法返还类型的声明,属性变量的类型声明等.

(3)接口与抽象的区别就在于抽象类可以提供某些方法的部分实现,而接口则不可以,这也大概是抽象类唯一的优点.如果向一个抽象类加入一个新的具体方法,那么所有的子类型一下子就都得到得到了这个新的具体方法,而接口做不到这一点.如果向一个接口加入了一个新的方法的话,所有实现这个接口的类就全部不能通过编译了,因为它们都没有实现这个新声明的方法.这显然是接口的一个缺点.

(4)一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的登记结构中,而由于一般语言都限制一个类只能从最多一个超类继承,因此将抽象作为类型定义工具的效能大打折扣.

反过来,看接口,就会发现任何一个实现了一个接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个接口.

(5)从代码重构的角度上讲,将一个单独的具体类重构成一个接口的实现是很容易的,只需要声明一个接口,并将重要的方法添加到接口声明中,然后在具体类定义语句中加上保留字以继承于该接口就行了.

而作为一个已有的具体类添加一个抽象类作为抽象类型不那么容易,因为这个具体类有可能已经有一个超类.这样一来,这个新定义的抽象类只好继续向上移动,变成这个超类的超类,如此循环,最后这个新的抽象类必定处于整个类型等级结构的最上端,从而使登记结构中的所有成员都会受到影响.

(6)接口是定义混合类型的理想工具,所为混合类型,就是在一个类的主类型之外的次要类型.一个混合类型表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为.

(7)联合使用接口和抽象类:

由于抽象类具有提供缺省实现的优点,而接口具有其他所有优点,所以联合使用两者就是一个很好的选择.

首先,声明类型的工作仍然接口承担的,但是同时给出的还有一个抽象类,为这个接口给出一个缺省实现.其他同属于这个抽象类型的具体类可以选择实现这个接口,也可以选择继承自这个抽象类.如果一个具体类直接实现这个接口的话,它就必须自行实现所有的接口相反,如果它继承自抽象类的话,它可以省去一些不必要的的方法,因为它可以从抽象类中自动得到这些方法的缺省实现如果需要向接口加入一个新的方法的话,那么只要同时向这个抽象类加入这个方法的一个具体实现就可以了,因为所有继承自这个抽象类的子类都会从这个抽象类得到这个具体方法.这其实就是缺省适配器模式(Defaule Adapter).

(8)什么是高层策略呢?它是应用背后的抽象,是那些不随具体细节的改变而改变的真理. 它是系统内部的系统____隐喻.

4.接口隔离原则(Interface Segregation Principle, ISP)

(1)一个类对另外一个类的依赖是建立在最小的接口上。

(2)使用多个专门的接口比使用单一的总接口要好.根据客户需要的不同,而为不同的客户端提供不同的服务是一种应当得到鼓励的做法.就像"看人下菜碟"一样,要看客人是谁,再提供不同档次的饭菜.

(3)胖接口会导致他们的客户程序之间产生不正常的并且有害的耦合关系.当一个客户程序要求该胖接口进行一个改动时,会影响到所有其他的客户程序.因此客户程序应该仅仅依赖他们实际需要调用的方法.

5.合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)

在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分新的对象通过这些向对象的委派达到复用已有功能的目的.这个设计原则有另一个简短的表述:要尽量使用合成/聚合,尽量不要使用继承.

6.迪米特法则(Law of Demeter LoD)又叫做最少知识原则(Least Knowledge Principle,LKP),就是说,一个对象应当对其他对象有尽可能少的了了解.

迪米特法则最初是用来作为面向对象的系统设计风格的一种法则,与1987年秋天由Ian Holland在美国东北大学为一个叫做迪米特(Demeter)的项目设计提出的,因此叫做迪米特法则[LIEB89][LIEB86].这条法则实际上是很多著名系统,比如火星登陆软件系统,木星的欧罗巴卫星轨道飞船的软件系统的指导设计原则.

没有任何一个其他的OO设计原则象迪米特法则这样有如此之多的表述方式,如下几种:

(1)只与你直接的朋友们通信(Only talk to your immediate friends)

(2)不要跟"陌生人"说话(Don't talk to strangers)

(3)每一个软件单位对其他的单位都只有最少的知识,而且局限于那些本单位密切相关的软件单位.

就是说,如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

7.单一职责原则(Simple responsibility pinciple SRP)

就一个类而言,应该仅有一个引起它变化的原因,如果你能想到多于一个的动机去改变一个类,那么这个类就具有多于一个的职责.应该把多于的指责分离出去,分别再创建一些类来完成每一个职责.

精明的蜜蜂
激情的抽屉
2025-04-05 04:59:07
一个类就干一件事儿

依赖抽象,而不是依赖细节。 上传模块不应该依赖底层模块, 而是应该依赖底层模块的抽象。货币就是一个非常好的抽象。

能用父类的地方都可以用子类来替换。 子类可以扩展父类的功能,但是不要改变父类原有的功能。

最少知道原则, 一个对象对于其他对象应该尽可能的少了解,局部变量作用域中不要引入新的类。

最小功能单元, 接口粒度要尽可能的小,不可冗余。