软件设计

1.软件设计模式概述

回眸只為那壹抹淺笑 提交于 2019-12-06 19:13:28
本节是后面各章学习的基础,从整体上介绍软件设计模式的概念与特点、软件设计模式的基本要素,以及 GoF 的 23 种设计模式简介。 软件设计模式的产生背景 “设计模式”这个术语最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977 年,美国著名建筑大师、加利福尼亚大学伯克利分校环境结构中心主任克里斯托夫·亚历山大(Christopher Alexander)在他的著作《建筑模式语言:城镇、建筑、构造(A Pattern Language: Towns Building Construction)中描述了一些常见的建筑设计问题,并提出了 253 种关于对城镇、邻里、住宅、花园和房间等进行设计的基本模式。 1979 年他的另一部经典著作《建筑的永恒之道》(The Timeless Way of Building)进一步强化了设计模式的思想,为后来的建筑设计指明了方向。 1987 年,肯特·贝克(Kent Beck)和沃德·坎宁安(Ward Cunningham)首先将克里斯托夫·亚历山大的模式思想应用在 Smalltalk 中的图形用户接口的生成中,但没有引起软件界的关注。 直到 1990 年,软件工程界才开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。 1995 年,艾瑞克·伽马(ErichGamma)、理査德·海尔姆(Richard Helm)、拉尔夫·约翰森

开闭原则——面向对象设计原则

泪湿孤枕 提交于 2019-12-06 14:23:20
在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据 7 条原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。我们将在下面的几节中依次来介绍这 7 条原则,本节首先介绍开闭原则。 开闭原则的定义 开闭原则(Open Closed Principle,OCP)由勃兰特·梅耶(Bertrand Meyer)提出,他在 1988 年的著作《面向对象软件构造》(Object Oriented Software Construction)中提出: 软件实体应当对扩展开放,对修改关闭(Software entities should be open for extension,but closed for modification) ,这就是开闭原则的经典定义。 这里的软件实体包括以下几个部分: 项目中划分出的模块 类与接口 方法 开闭原则的含义是:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求。 开闭原则的作用 开闭原则是面向对象程序设计的终极目标,它使软件实体拥有一定的适应性和灵活性的同时具备稳定性和延续性。具体来说,其作用如下。 1. 对软件测试的影响 软件遵守开闭原则的话,软件测试时只需要对扩展的代码进行测试就可以了,因为原有的测试代码仍然能够正常运行。 2.

阶段性总结(从软件工程到分层架构)

怎甘沉沦 提交于 2019-12-06 13:16:15
阶段性总结(从软件工程到分层架构) 阶段性总结(从软件工程到分层架构) 写在前面 软件工程 什么是软件工程 我对软件工程的理解 软件工程流程 UML 定义 为什么会出现UML UML模型 UML建模过程 UML如何描述一个系统 UML总结 设计模式 三层架构 总结 写在前面 这篇文字将会将2011年下半年的学习内容做个总结,不求细节只为从宏观上理解它们之间的联系以及学习它们的目的。 内容包括软件工程、UML、设计模式、三层架构还有两门语言,C#和VB.NET 软件工程 什么是软件工程 软件工程是研究和应用如何以系统性的、规范化的、可定量的过程化方法去开发和维护软件,以及如何把经过时间考验而证明正确的管理技术和当前能够得到的最好的技术方法结合起来的学科。(这是维基百科的定义) 其实软件工程的目的就是以健全的工程化的原则,在给定的成本和进度前提下有可修改性、有效性、可靠性、可理解性、可维护性、可重用 软件工程性、可适应性、可移植性、可追踪性和可互操作性并且满足用户需求的软件产品。 我对软件工程的理解 软件工程是伴随着软件的整个生命周期了存在的,它科学的指导着软件的计划、需求分析、设计编码、测试、运行维护整个生命周期的每一个阶段。 软件工程的兴起源于软件危机,人们不得不思考如何保证软件的可靠性,如何保证软件的开发进度等等问题。于是软件工程出现了

软件设计工作总结

末鹿安然 提交于 2019-12-06 12:29:23
新公司新项目,刚跳槽。 软件需求说明书,就是说这个软件要干什么,符合什么规范,实现哪些功能。 软件总体设计说明书,对软件需求说明书中的功能进行大的模块划分,对一些小的功能进行合并到一个大功能里面,说明模块之间的数据流向关系,模块调用关系,关键接口的伪代码定义。 软件详细设计说明书,对软件总体设计说明书进行细化,对每一额模块的每一个功能进行分析,设计具体函数接口,该阶段函数接口可直接应用到实际代码中。 编码,调试,修改,编码,调试。 来源: CSDN 作者: shuaiawp 链接: https://blog.csdn.net/shuaiAWP/article/details/45166027

面向对象建模与数据库建模两种分析设计方法的比较

左心房为你撑大大i 提交于 2019-12-06 10:42:28
本人从Oracle Form进入开发领域,接受过严酷的pl/sql编程洗礼,对sql进行了为期一个月的死刑般的练习,可以说深受影响了。但是在开发过程中始终觉得力不从心,因为我在大学时代学过了java,接受了另外一种思想:面向对象编程。所以在写pl/sql的时候,总会用面向对象的思想去写,比如写包、触发器、存储过程的时候,总会去想到抽象和重用,但是事务性的sql语句,总让我感觉很累,最后不得不跳出oracle服务公司,转到如今的公司,参与到该公司的软件创业道路上来,接受了强烈的面向对象建模思想,并且完全抛弃了原有的数据库思想,可以说是洗心革面了自己的编程思想。发现领域建模+领域事件的结合是软件编写最完美的结合。下面就DDD跟RDBMS建模谈谈自己的看法。 我们知道:一个软件从无到有需要经过如下几个阶段:分析、设计、编程、调试、部署和运行。目前,将需求从客观现实世界映射到计算机软件世界主要有两种方式: 1、传统数据库分析设计 2、面向对象建模( object-oriented class model) 当前软件主要潮流无疑是面向对象占据主流,虽然它可能不是唯一最好最简单的解决方案,但是它是最普通,也是最恰当的。   也就是说:在分析设计阶段,采取围绕什么为核心(是对象还是数据表为核心)的分析方法决定了后面编码阶段的编程特点,如果以数据表为核心进行分析设计,

设计模式之美学习(二):到底什么是面向对象?

二次信任 提交于 2019-12-06 03:26:41
提到面向对象,相信很多人都不陌生,随口都可以说出面向对象的四大特性:封装、抽象、继承、多态。实际上,面向对象这个概念包含的内容还不止这些。 什么是面向对象编程和面向对象编程语言? 面向对象编程的英文缩写是 OOP ,全称是 Object Oriented Programming 。对应地,面向对象编程语言的英文缩写是 OOPL ,全称是 Object Oriented Programming Language 。 面向对象编程中有两个非常重要、非常基础的概念,那就是类( class )和对象( object )。这两个概念最早出现在 1960 年,在 Simula 这种编程语言中第一次使用。而面向对象编程这个概念第一次被使用是在 Smalltalk 这种编程语言中。 Smalltalk 被认为是第一个真正意义上的面向对象编程语言。 什么语言才算是面向对象编程语言呢?如果非得给出一个定义的话,可以用下面两句话来概括。 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石。 面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。 一般来讲,面向对象编程都是通过使用面向对象编程语言来进行的,但是,不用面向对象编程语言

设计模式之美学习(一):设计模式对编程工作者是很重要的,它的作用不言而喻。

删除回忆录丶 提交于 2019-12-06 03:26:01
继数据结构与算法之美后,王争老师的专栏又开始更新了,这次是《设计模式之美》,希望学习之后会对自己有所提升。在此记录下自己的学习笔记,希望对自己或者看到的读者都有所裨益。 为什么每个程序员都要尽早地学习并掌握设计模式相关知识? 1. 应对面试中的设计模式相关问题 学习设计模式和算法一样,最功利、最直接的目的,可能就是应对面试了。 不管你是前端工程师、后端工程师,还是全栈工程师,在求职面试中,设计模式问题是被问得频率比较高的一类问题。特别是一些像 BAT 、 TMD 这样的大公司,比较重视候选人的基本功,经常会拿算法、设计模式之类的问题来考察候选人。 2. 告别写被人吐槽的烂代码 我们经常说, Talk is cheap,show me the code 。实际上,代码能力是一个程序员最基础的能力,是基本功,是展示一个程序员基础素养的最直接的衡量标准。你写的代码,实际上就是你名片。 3. 提高复杂代码的设计和开发能力 大部分工程师比较熟悉的都是编程语言、工具、框架这些东西,因为每天的工作就是在框架里根据业务需求,填充代码。实际上,这样的工作并不需要你具备很强的代码设计能力,只要单纯地能理解业务,翻译成代码就可以了。 但是,有一天, leader 让开发一个跟业务无关的比较通用的功能模块,面对这样稍微复杂的代码设计和开发,就发现会有点力不从心,不知从何下手了。因为只是完成功能、代码能用

性别字段存储时应该使用的字符串,还是数字?

不打扰是莪最后的温柔 提交于 2019-12-05 15:21:29
在我和同事结对时,发现数据库中多个表中,分别都会有gender这个字段。比如A表,B表,C表。这三个表中,gender字段都是int类型。但是同一性别,在各个表中的值是不同的。比如A表中,1代表男,在B表中却代表了女,在C表中代表未知。 我突然意识到这背后存在更大的问题。从而引发我对“性别字段存储时应该使用的字符串,还是数字?”这个问题思考。也许已经有前辈思考过这个问题并写在某本书的某页,如果有,请告知。谢谢。 0代表女,1代表男 首先,你可能会问,对于这样的问题还用想吗?不是都使用数字吗?0代表女,1代表男。 其实,淘宝就是这么做的: html代码是这样的: 这时,我会问如果这个用户没有填写性别信息呢?那你可能将原来的实现改成0代表空,1代表男,2代表女。我提醒你,当你开发的是一个大型网站时,你要将原来的“0代表女”改成“0代表空”,不会那么容易。历史数据要处理。你还需要修改所有用到0,1的代码,即使你使用的是常量代替而不是魔法数字,也不会容易到哪里去。 有经验的程序员 是的,有经验的程序员写代码时,一开始就会想到这个问题,所以一开始就设计“0代表空,1代表男,2代表女”。从前端到后端都统一使用数字。比如: class User{ final static int GENDER_NULL = 0 final static int GENDER_MALE = 1 final

第10组 Alpha事后诸葛亮

匆匆过客 提交于 2019-12-05 09:33:45
资源 我们有足够的资源来完成各项任务么? 我们的资源目前足够我们来完成现阶段的各项任务。 各项任务所需的时间和其他资源是如何估计的,精度如何? 开始时精度很粗略,后来因为任务的逐步加重,也因为大家这些日子一直忙着课程考试,抽出时间写任务已经是最大,所以没有再去想细化精度问题。 测试的时间,人力和软件/硬件资源是否足够? 对于那些不需要编程的资源 (美工设计/文案)是否低估难度? 人力资源是足够的,硬件资源在现阶段也是足够的,而对于美工和文案我们最开始的确都低估了难度,真正上手才发现并不简单。 你有没有感到你做的事情可以让别人来做(更有效率)? 我们现阶段的事情都是可以自主完成的,而且一些设计如果交给别人来做反而会没有办法事后沟通修改,反而会加大工作量。 有什么经验教训? 如果历史重来一遍, 我们会做什么改进? 设计/实现 设计工作在什么时候,由谁来完成的?是合适的时间,合适的人么? 设计工作是在需求确定之后,有团队中擅长这一方面的同学来完成的,是合适的时间和合适的人。 设计工作有没有碰到模棱两可的情况,团队是如何解决的? 很多,大家都不知道如何解决,也有时候会出现一些小问题但是能个人解决也就没有影响团队。 团队是否运用单元测试(unit test),测试驱动的开发(TDD)、UML, 或者其他工具来帮助设计和实现?这些工具有效么? 我们暂时还没有用这些工具来测试

《信息安全专业导论》第八周学习总结

六眼飞鱼酱① 提交于 2019-12-05 08:44:19
教材内容总结 理解了功能设计与面向对象设计的区别 面向对象设计模式描述的是软件设计,因此它是独立于编程语言的,但是面向对象设计模式的最终实现仍然要使用面向对象编程语言来表达,如Visual Basic、.NET、C++/CLI等。 面向对象设计模式不像算法技巧,可以照搬照用,它是建立在对"面向对象"纯熟、深入的理解的基础上的经验性认识。掌握面向对象设计模式的前提是首先掌握"面向对象"! 功能设计是按照产品定位的初步要求,在对用户需求及现有产品进行功能调查分析的基础上,对所定位产品应具备的目标功能系统进行概念性构建的创造活动。 理解了编译器和解释器具体工作原则 知道了一些泛型的内容,命令式,声明式。 了解了一些语言的共性和差异。 教材学习中的问题及解决过程 问题:什么叫做保留字 上网查找:保留字(reserved word),指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用。 保留字包括关键字和未使用的保留字。关键字则指在语言中有特定含义,成为语法中一部分的那些字。在一些语言中,一些保留字可能并没有应用于当前的语法中,这就成了保留字与关键字的区别。一般出现这种情况可能是由于考虑扩展性。例如,Javascript有一些未来保留字,如abstract、double、goto等等。 代码调试中的问题和解决过程 完成四则运算时出现了许多问题,通过自己查找和询问同学解决