软件设计

认识UML工具

删除回忆录丶 提交于 2019-12-16 23:22:01
摘要 :本文并不会介绍具体的某种UML工具如何操作,总结了一些我使用UML工具的心得体会,希望对大家有帮助! 作者 :张传波 软件知识园地基地 正文 : 常见的可以绘制UML的工具有:Rose、XDE、Visio、Enterprise Architeture、JUDE、StarUML,其中可免费使用的是JUDE、StarUML,其他几种都是需要购买license的。 我与任何 UML工具 厂商没有利益关系(至少目前是这样),为避免广告的嫌疑,本小节并不会具体介绍某一种或几种UML工具的细节,也不会说我用得最多的是哪个 软件 。况且介绍具体一个UML软件是如何操作,这是没啥必要的,这样只会浪费本书的篇幅,增加书的售价而已。我相信只要你稍加研究,你是可以很快上手的。 我使用过不少UML软件,我会简单介绍我的一些心得体会,希望这些体会能帮助你更快上手、更快找到适合你自己或贵公司的软件。 1. 开始向导 很多UML软件喜欢一启动就显示一个开始向导,似乎这样的设计能让你很快入手,但这样的向导往往会让新手很困惑,这是这些向导的第一个问题!而第二个问题是:向导显示了各种模板,用这些模板建立了一系列内容框架,这些内容框架会让你很头晕。第三个问题是:实际工作中这些模板基本没用,我不喜欢这些模板建立的内容框架,我基本上会删除掉全部甚至大部分模板建立的内容。 对于开始向导,我的建议是:大致看看就OK了

web架构师经验之谈

别说谁变了你拦得住时间么 提交于 2019-12-16 19:53:17
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本人也是coding很多年,虽然很失败,但也总算有点失败的心得,不过我在中国,大多数程序员都是像我一样,在一直走着弯路,如果想成为一个架构师,就必须走正确的路,否则离目标越来越远,正在辛苦工作的程序员们,你们有没有下面几种感觉? 一、我的工作就是按时完成领导交给我的任务,至于代码写的怎样,知道有改进空间,但没时间去改进,关键是领导也不给时间啊。 二、我发现我的水平总是跟不上技术的进步,有太多想学的东西要学,Jquery用的人最近比较多啊,听说最近MVC比较火,还有LINQ,听说微软又有Silverlight了…… 三、我发现虽然我工作几年了,除了不停的coding,Ctrl+c和Ctrl+V更熟练了,但编码水平并没有提高,还是一个普通程序员,但有人已经做到架构师了。 四、工作好几年了,想跳槽换个工作,结果面试的考官都问了一些什么数据结构,什么垃圾回收,什么设计模式之类的东西,虽然看过,但是平时用不着,看了也忘记了,回答不上来,结果考官说我基础太差。。。 有没有,如果没有,接下来就不用看了,你一定是大拿了,或者已经明白其中之道了,呵呵。 如果有,恭喜你,你进入学习误区了,如果想在技术上前进的话,就不能一直的coding,为了完成需求而工作,必须在coding的同时,让我们的思维,水平也在不停的提高。

软件设计的哲学:前言

戏子无情 提交于 2019-12-16 16:38:52
01 前言 80多年来,人们一直在为计算机编写程序,但令人惊讶的是,关于如何设计这些程序或什么是好程序的讨论却少之又少。关于软件开发过程(如敏捷开发)和开发工具(如调试器、版本控制系统和测试覆盖工具),已经有了相当多的讨论。还广泛分析了编程技术,如面向对象编程和函数式编程,以及 设计模式 和算法。所有这些讨论都是有价值的,但是软件设计的核心问题在很大程度上仍然没有触及。David Parnas的经典论文“关于将系统分解成模块的标准”发表于1971年,但是在随后的45年里,软件设计的技术水平并没有超过这篇论文。 计算机科学中最基本的问题是问题分解:如何把一个复杂的问题分解成可以独立解决的几个部分。问题分解是 程序员 每天都要面对的核心设计任务 ,然而,除了这里描述的工作,我还没有在任何一所大学里找到一个以问题分解为中心主题的类。我们教循环和面向对象编程,但不教软件设计。 此外,程序员之间在质量和生产力方面存在巨大差异,但是我们很少尝试去理解是什么让最好的程序员变得更好,或者在我们的课堂上教授这些技能。我曾与一些我认为是优秀的程序员的人交谈过,但是他们中的大多数人都很难清楚地表达出那些给他们带来优势的特定技术。许多人认为软件设计技能是一种天生的天赋,是不能被教授的。然而,有相当多的科学证据表明,在许多领域的杰出表现更多地与高质量的实践有关,而不是天生的能力(例如,杰夫•科尔文高估了才能

Java基础:15 面向过程与面向对象

早过忘川 提交于 2019-12-11 04:54:40
1、面向过程与面向对象区别 二者都是一种思想,面向对象是相对于面向过程而言的。 面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。 面向对象,将功能封装进对象,强调具备了功能的对象,以类/对象为最小单位,考虑谁来做。 面向对象更加强调运用人类在日常的思维逻辑中采用的思想方法与原则,如抽象、分类、继承、聚合、多态等。 面向过程是一种是事件为中心的编程思想。一般是先分析出解决问题所需的步骤,然后用函数把这些步骤实现,并按顺序调用。 面向对象是用线性的思维,是以“对象”为中心的编程思想。与面向过程相辅相成。在软件开发过程中,宏观上,用面向对象来分析系统,把握事物间复杂的关系。微观上,仍然使用面向过程。 面向过程(OP:procedure-oriented)和面向对象(OO:object-oriented)不只是指编码的两种方式。 以OO为例,对应于软件开发的过程,OO衍生出3个概念:OOA、OOD和OOP。 采用面向对象进行分析的方式称为OOA,采用面向对象进行设计的方式称为OOD, 采用面向对象进行编码的方式称为OOP。 面向过程(OP)和面向对象(OO)本质的区别在于分析方式的不同,最终导致了编码方式的不同。 总的来说: 面向对象是将事物高度抽象化。 面向过程是一种自顶向下的编程 面向对象必须先建立抽象模型,并在之后的编程中直接使用该模型。 2、面向对象的思想概述

软件设计之——“高内聚低耦合”

*爱你&永不变心* 提交于 2019-12-10 04:51:50
耦合度 一、什么是耦合度 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分摸块的一个准则就是高内聚低耦合。 耦合度 (Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。 模 块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越 差。降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身”的水波效应,保证系统设计顺利进行。 内 聚和耦合密切相关,同其它模块存在强耦合关系的模块常意味这弱内聚,强内聚常意味着弱耦合。 耦合度就是某模块(类)与其它模块(类)之间的关联、感知和依赖的程度,是衡量代码独立性的一个指标,也是软件工程设计 及编码质量评价的一个标准。耦合的强度依赖于以下几个因素: (1)一个模块对另一个模块的调用; (2)一个模块向另一个模块传递的数据量; (3)一个模块施加到另一个模块的控制的多少; (4)模块之间接口的复杂程度。 耦合按从强到弱的顺序可分为以下几种类型: a)非直接耦合:两模块间没有直接关系,之间的联系完全是通过主模块的控制和调用来实现的    b)数据耦合:一个模块访问另一模块,彼此间通过简单数据参数来交换输入、输出信息。这里的简单数据参数不同于控制参数、公共数据结构或外部变量。  

UML常用工具之三--RSA

做~自己de王妃 提交于 2019-12-10 03:05:41
什么是 Rational Software Architect? IBM Rational Software Architect -- IBM软件开发平台的一部分 – 是IBM在2003年二月并购Rational以来,首次发布的Rational产品。改进过的软件开发平台在集成和易用性上达到一个新的层次,这将会让 使用IBM产品工作的开发者感到满意。 软件开发平台包含了好几个IBM Rational产品: IBM Rational Portfolio Manager: 是一个围绕整个项目生命周期的项目管理工具,Rational Portfolio Manager有助于对项目组合投资提供实时的可见性。它允许管理者作出正确的决定。这个产品也可以用来增进不同开发团队间的协作。 IBM Rational Application Developer and Rational Web Developer: 这分别是 IBM WebSphere Studio Application Develope r和 IBM WebSphere Studio Site Developer 集成开发环境(IDE)工具的另一个商标。这些新产品现在是IBM Rational Software Modeler 和 IBM Rational Software Architect 的基础。 IBM Rational

软件设计模式的七大原则

早过忘川 提交于 2019-12-09 16:04:42
1.开放原则 开闭原则(Open-Closed Principle,OCP)是指一个软件实体如类、模块和函数应该对扩展开放,对修改关闭。所谓的开闭,也正是对扩展和修改两个行为的一个原则。强调的是用抽象构建框架,用实现扩展细节。可以提高软件系统的可复用性及可维护性。开闭原则,是面向对象设计中最基础的设计原则。它指导我们如何建立稳定灵活的系统,例如:我们版本更新,我尽可能不修改源代码,但是可以增加新功能。在现实生活中对于开闭原则也有体现。比如,很多互联网公司都实行弹性制作息时间,规定每天工作8小时。意思就是说,对于每天工作8小时这个规定是关闭的,但是你什么时候来,什么时候走是开放的。早来早走,晚来晚走。 实现开闭原则的核心思想就是面向抽象编程,接下来我们来看一下关于课程的代码。首先创建一个课程接口 ICourse: public interface ICourse { Integer getId ( ) ; String getName ( ) ; Double getPrice ( ) ; } 整个课程生态有 Java 架构、大数据、人工智能、前端、软件测试等,我们来创建一个 Java架构课程的类 JavaCourse: public class JavaCourse implements ICourse { private Integer Id ; private String

OOAD 面向对象的分析与设计

人盡茶涼 提交于 2019-12-08 18:33:30
OOAD 面向对象的分析与设计 OOA-----分析阶段(针对业务问题清晰视图, 列出系统完成任务, 整理业务的公共词汇, 列出解决业务的解决方法) OOD-----解决业务的具体实现(技术选型,架构搭建,第三方组件调用) OO 面向对象 一种系统建模技术 对象 客观存在 唯一的实体 是面向对象编程过程中分析与解决问题的出发点与基础 对象具有 属性 (特征) 方法(行为) 类是对象的模板 对象通过类实例化产生 就是 一般是new出来 一个类可创建多个对象 OO的方法三部分组成 过程 标识 规则 OOP 面向对象编程 按照OO的方法学来开发程序的过程 OOP主要特征 抽象 -------忽略细节关注本质特征 封装 -------隐藏数据和实现 提供公共方法供调用功能 继承 -------通过存在的类型 定义新类型的机制 "is a" 例 苹果 "is a" 水果 实现代码重用,是多态的基础 多态 -------一个名称 多 基于继种形式承 -------不同对象调用方法给出不同的处理方式 -------play(Football);---- 用脚完成 -------play(Basketball);----用手完成 关联 -------对象之间的引用 例 person 使用computer 就是 关联关系 聚合 -------一个对象是另一个对象的组成部分 "has a" 汽车

小菜学设计模式——开放封闭原则

天涯浪子 提交于 2019-12-07 11:52:05
背景 本文标题为什么叫小菜学习设计模式,原因是本文内容主要是学习《大话设计模式》时的笔记摘要部分,当然,并不是记录书中小菜的学习过程,这个完全没有意义,而是指本人学习 设计模式的 成长之旅。 真诚的希望自己能够从一名小菜成长为一名大鸟! 编写的程序应该满足: 1)可维护 2)可扩展 3)可复用 4)够灵活 废话少说,言归正传,设计模式原则之:开放封闭原则 书面理解 开放封闭原则 :软件实体(类、模块、函数等等)应该可以扩展,但是不可以修改 对 于扩展是开放的,对于修改则是关闭的 无论模块是多么的封闭,都会存在一些对之无法封闭的变化。既然不能完全封闭,设计人员必须对于他设计的模块应该对哪种变化封闭做出选择。他必须猜测出最有可能发生发生变化的种类,然后构造抽象来隔离那些变化。 实际开发过程中是很难通过猜测来判断哪些种类会发生变化的,但是我们却可以在发生小变化时,就及早想办法应对发生更大的变化的可能。也就是说,等到变化发生时立即采取行动。 在我们最初编写代码时,假设变化不会发生,当变化发生时,我们就创建抽象来隔离以后发生的同类变化。 面对需求,对程序的改动是通过增加新代码进行的,而不是更改现有的代码 。 我们希望的是在开发工作中展开不久就知道可发生的变化。查明可能发生变化所等待的时间越长,要创建正确的抽象就越困难。换句话说,如果在开发过程中已经使用或者依赖这个接口的地方越多

如何使用 Laravel Facades ?

我只是一个虾纸丫 提交于 2019-12-06 23:09:36
Facade 布局是在面向对象编程中经常使用的一种软件设计布局方式。Facade 实际上是一种包括复杂函数库的类,提供了更加简洁易读的接口。Facade 布局还能为一组结构复杂、设计简陋的 API 提供统一、设计周到的 API。 Laravel 框架与该布局的特点相似,也称为 Facades。在本教程中,我们会学习如何在其他框架应用 Laravel 的 “Facades”。在继续学习之前,让我们简单了解一下 Ioc 容器 。 首先,我们了解 Laravel 的 facades 内部工作结构。之后再讨论如何将之改造并用于其他环境。 Laravel 中的 Facades Laravel facade 是一种为容器内部服务提供类似静态接口的类。据其文档描述,Facades 是可触及容器服务底层实现方式的代理。 不过,在 PHP 社区,有关其名称的争论一直不断。一些人坚持修改此名称以避免开发者的困惑,因为其并未完全实现 Facade 布局。如果你也受此名称困扰,大可以为其取个别名。但是,请注意,下文将会用到的 Laravel 框架基类(base class)将会称为 Facade。 How Facades Are implemented in Laravel Facades 在 Laravel 中如何实现 你可能也知道,容器内的每个服务都有个唯一名称。在 laravel 应用中,可使用