软件设计之——“高内聚低耦合”
摘要:耦合度一、什么是耦合度软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分摸块的一个准则就是高内聚低耦合。 耦合度(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。 模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。降低模块间的耦合度能减少模块间的影响,防止对某一模块修改所引起的“牵一发动全身”的水波效应,保证系统设计顺利进行。 内聚和耦合密切相关,同其它模块存在强耦合关系的模块常意味这弱内聚,强内聚常意味着弱耦合。耦合度就是某模块(
阅读全文
posted @
2012-06-26 10:09
莫水千流
阅读(1679)
推荐(0) 编辑
linux 重定向命令
摘要:标准输入,输出和错误---------------------------------文件文件 描述符---------------------------------输入文件—标准输入 0输出文件—标准输出 1错误输出文件—标准错误 2---------------------------------COMMAND_OUTPUT > 2 # 将stdout重定向到一个文件. 3 # 如果这个文件不存在, 那就创建, 否则就覆盖. 4 5 ls -lR > dir-tree.list 6 # 创建一个包含目录树列表的文件. 7 8 ...
阅读全文
posted @
2012-06-26 09:58
莫水千流
阅读(4911)
推荐(0) 编辑
养成良好的绘制 UML 序列图的习惯
摘要:一些方法可以帮助您提高 UML 序列图的质量和效力。它们包括:和主题问题专家一起验证决策使解决方案尽量简单为绘制消息和返回值选择一种一致而有效的风格将序列图分层遵循一致的逻辑风格牢记序列图是动态的验证决策 在开发 图 1序列图的过程中,我做了一些对其它模型可能有潜在影响的决策。例如,在对第10步建模时,假设(大致上是个设计决策)费用显示屏幕同时也处理学生对费用是否可接受所进行的验证。该决策应该由用户界面原型反映出来,并由主题问题专家(SME) 进行验证。 您应该和SME(特别是那些对于如何开发类似模型有着深刻见解的富有经验的人)一起执行序列图的绘制工作。 保持简单 在对第 2 和第 3步建模时
阅读全文
posted @
2012-06-19 10:35
莫水千流
阅读(312)
推荐(0) 编辑
利用 UML 进行实体关系建模
摘要:简介:软件行业中最常被误解的一个术语实际上是我们非常熟悉的一个:实体关系(ER)。这是因为我们经常缺少一种能被开发团队的所有成员理解的共同定义。我们假定团队的每个成员都对与 ER 和 ER 建模相关的方法学、语法和机制(mechanics)有着同样清楚的理解。 -->本文的标签: uml标记本文!发布日期:2004 年 11 月 01 日 级别:初级 访问情况 :6916 次浏览 评论:0(查看|添加评论 - 登录) 平均分 (10个评分)为本文评分实体关系建模软件行业中最常被误解的一个术语实际上是我们非常熟悉的一个:实体关系(ER)。这是因为我们经常缺少一种能被开发团队的所有成员理解的
阅读全文
posted @
2012-06-19 10:35
莫水千流
阅读(566)
推荐(0) 编辑
用例建模技巧
摘要:简介:本文介绍了一些提高系统用例模型质量的技巧和技术。本文改编自 Object Primer 2nd Edition 的第 6 章。 -->本文的标签: uml标记本文!发布日期:2001 年 1 月 04 日 级别:初级 访问情况 :5332 次浏览 评论:0(查看|添加评论 - 登录) 平均分 (7个评分)为本文评分从参与者的角度并以主动语态编写用例。 应该以主动语态:“学生表明参加研习班意向”,而不是被动语态“研习班意向被学生表明”来编写用例。而且,应该从参与者的角度来编写用例。毕竟,用例的目的是理解用户如何对系统进行操作。 编写方案文本,而非功能需求。 用例描述的是对参与者来说有
阅读全文
posted @
2012-06-19 10:33
莫水千流
阅读(194)
推荐(0) 编辑
绘制整洁的 UML 图
摘要:简介:不管您喜欢与否,诸如统一建模语言 (UML)类模型和用例模型这样的软件图往往是根据它们的外观来判定其好坏的。看上去整洁的图比看上去杂乱的图更容易受到读者 -- 常常是您的用户或高级经理 -- 的青睐。 -->本文的标签: uml标记本文!发布日期:2000 年 11 月 27 日 级别:初级 访问情况 :7623 次浏览 评论:0(查看|添加评论 - 登录) 平均分 (17个评分)为本文评分我很愿意描述几个重要的经验法则,这些法则将使您比其他建模同仁做得更好。这些虽然简单但很关键的建议主要集中在如何安排组成软件图(包括UML类模型、用例模型,甚至持久模型)的那些框和线条,并因此适用
阅读全文
posted @
2012-06-19 10:32
莫水千流
阅读(259)
推荐(0) 编辑
UML 基础: 序列图
摘要:简介:本文来自于 Rational Edge本文作为 UML 基础的、关于统一建模语言的基础图的一系列文章的一部分,提供对序列图(Sequence Diagram,又称为 顺序图)的详细介绍。它也介绍了最近的 UML 2.0 规范的几个新符号元件。在是二月,而且到如今你或许已经读到、或听到人们谈论UML 2.0 —— 包括若干进步的 UML 的新规范,所做的变化。考虑到新规范的重要性,我们也正在修改这个文章系列的基础,把我们的注意力从 OMG 的 UML 1.4 规范,转移到 OMG 的已采纳 UML 2.0草案规范(又名 UML 2)。我不喜欢在一系列文章的中间,把重点从 1.4 变为 2.
阅读全文
posted @
2012-06-19 10:31
莫水千流
阅读(237)
推荐(0) 编辑
UML 基础: 组件图
摘要:Donald Bell, IBM 全球服务, IBMDonald Bell是IBM全球服务的一个IT专家,在那儿他和IBM的客户一起致力于设计和开发基于软件解决方案的J2EE。简介:来自 Rational Edge:这篇文章介绍组件图,一个在新的统一建模语言 2.0中规定的结构图。 -->本文的标签: uml, uml_(unified_modeling_language)标记本文!发布日期:2005 年 2 月 15 日 级别:初级 访问情况 :12294 次浏览 评论:1(查看|添加评论 - 登录) 平均分 (23个评分)为本文评分 该文是关于在统一建模语言 2.0或UML中使用的基
阅读全文
posted @
2012-06-19 10:31
莫水千流
阅读(378)
推荐(0) 编辑
UML基础: 统一建模语言简介
摘要:了21世纪--准确地说是2003年,UML已经获得了业界的认同。在我所见过的专业人员的简历中,75%都声称具备UML的知识。然而,在同绝大多数求职人员面谈之后,可以明显地看出他们并不真正了解UML。通常地,他们将UML用作一个术语,或对UML一知半解。大家对UML缺乏理解的这种状况,促进我撰写这篇关于UML 1.4的快速入门文章。当阅读完本文时,您还不具备足够的知识可以在简历上声称自己掌握了UML,但是您已具有了进一步钻研该语言的良好起点。参考 UML 基础系列的其他文章和教程统一建模语言(UML) 版本 2.0UML 基础: 类图UML 基础: 序列图UML 基础: 组件图绘制整洁的 UML
阅读全文
posted @
2012-06-19 10:29
莫水千流
阅读(205)
推荐(0) 编辑
统一建模语言(UML) 版本 2.0
摘要:简介:所谓的“模型驱动”开发(MDD)方式,已经显示出了它们从根本性上提高软件质量和开发生产力方面的潜力。与传统的方法相比,这种方式是基于较高层次上的抽象和更好的自动化利用的。由于建模语言对MDD的成功具有关键性的作用,所以最近完成了对基于工业标准的统一建模语言(UML)的主要修订。随着一些重要的新的建模能力添加到其中――比如更精确地获得软件架构的能力――这次修订的主要特性使得语言定义更加精确,从而达到了更高层次的自动化。这篇文章解释了这一特性是如何实现的,并且描述了 UML 2.0 的其他亮点。 -->本文的标签: ibm_software_delivery_platform, mda
阅读全文
posted @
2012-06-19 10:27
莫水千流
阅读(331)
推荐(0) 编辑
UML 基础: 类图
摘要:基础如先前所提到的,类图的目的是显示建模系统的类型。在大多数的 UML 模型中这些类型包括:类接口数据类型组件UML 为这些类型起了一个特别的名字:“分类器”。通常地,你可以把分类器当做类,但在技术上,分类器是更为普遍的术语,它还是引用上面的其它三种类型为好。类名 类的 UML 表示是一个长方形,垂...
阅读全文
posted @
2012-06-19 09:25
莫水千流
阅读(245)
推荐(0) 编辑
MultiByteToWideChar和WideCharToMultiByte用法详解
摘要:MultiByteToWideChar和WideCharToMultiByte用法详解//========================================================================//TITLE:// MultiByteToWideChar和WideCharToMultiByte用法详解//AUTHOR:// norains//DATE:// 第一版:Monday 25-December -2006// 增补版:Wednesday 27-December -2006// 修订版:Wednesday 14-March-2007 (修正之前的错
阅读全文
posted @
2012-06-14 19:03
莫水千流
阅读(360)
推荐(0) 编辑
win32 字符编(zz)
摘要:引言毫无疑问,你肯定见过像TCHAR,std::string,BSTR等等这类字符串类型.也包括一些以_tcs开头的奇怪的宏。也许你正盯着屏幕"哇哇"的发愁,然而阅读完本文情况将会改观。这篇指南概述了引入各种类型字符串的目的,展示了它们的一些简单用法,同时描述了在必要的时候在它们之间如何进行转换。在第一部分,将会涉及三种类型的字符编码。理解编码方案的工作原理对你至关重要。即使你现在已经知道字符串是一个字符数组,还是看看这部分内容。一旦你阅读了这些内容,你就清楚了这么多字符串类之间的联系。在第二部分,将描述字符串类本身,包括什么时候使用哪种类以及如何在他们之间进行转换。基本字
阅读全文
posted @
2012-06-13 10:46
莫水千流
阅读(609)
推荐(0) 编辑
ANSI Unicode UTF-8 转换(zz)
摘要:Ansi转Unicode介绍2种方法voidCConvertDlg::OnBnClickedButtonAnsiToUnicode(){//ansitounicodechar*szAnsi="abcd1234你我他";//预转换,得到所需空间的大小intwcsLen=::MultiByteToWideChar(CP_ACP,NULL,szAnsi,strlen(szAnsi),NULL,0);//分配空间要给'\0'留个空间,MultiByteToWideChar不会给'\0'空间wchar_t*wszString=newwchar_t[wc
阅读全文
posted @
2012-06-13 09:14
莫水千流
阅读(3101)
推荐(0) 编辑
file operation
摘要:FILE* fp; if((fp=_wfopen(L"turk2.txt", L"r,ccs=UNICODE"))!=NULL) { fseek(fp,0,SEEK_END); long len = ftell(fp); fseek(fp,0,SEEK_SET); wchar_t *temp = new wchar_t[len]; memset(temp,0,len); fread(temp,sizeof(wchar_t),len,fp); AfxMessageBox(temp); delete [] temp; fclose(fp); }
阅读全文
posted @
2012-06-11 21:01
莫水千流
阅读(232)
推荐(0) 编辑
选择目录对话框和选择文件对话框
摘要:选择目录对话框//选择目录按钮voidCDcPackerDlg::OnBnClickedDecgen(){charszPath[MAX_PATH];//存放选择的目录路径CStringstr;ZeroMemory(szPath,sizeof(szPath));BROWSEINFObi;bi.hwndOwner=m_hWnd;bi.pidlRoot=NULL;bi.pszDisplayName=szPath;bi.lpszTitle="请选择需要打包的目录:";bi.ulFlags=0;bi.lpfn=NULL;bi.lParam=0;bi.iImage=0;//弹出选择目录
阅读全文
posted @
2012-06-11 20:27
莫水千流
阅读(1621)
推荐(0) 编辑
MFC异常 与C++标准异常
摘要:1 MFC异常 MFC 较好地将异常封装到CException类及其派生类中,自成体系,下表给出了MFC 提供的预定义异常:异常类 含义 CMemoryException内存不足CFileException文件异常CArchiveException存档/序列化异常CNotSupportedException响应对不支持服务的请求CResourceExceptionWindows 资源分配异常CDaoException数据库异常(DAO 类)CDBException数据库异常(ODBC 类)COleExceptionOLE 异常COleDispatchException调度(自动化)异常CUse
阅读全文
posted @
2012-06-07 23:22
莫水千流
阅读(1110)
推荐(0) 编辑
C++ 数组参数
摘要:在 C++中,数组永远不会按值传递,它是传递第一个元素,准确地说是第 0个 的指针。例如,如下声明 :void putValues( int[ 10 ] ); 被编译器视为 void putValues( int* ); 数组的长度与参数声明无关,因此,下列三个声明是等价的: // 三个等价的 putValues()声明 void putValues( int* ); void putValues( int[] ); void putValues( int[ 10 ] ); 因为数组被传递为指针 所以这对程序员有两个含义:1. 在被调函数内对参数数组的改变将被应用到数组实参上而不是本地拷贝上,
阅读全文
posted @
2012-06-07 10:12
莫水千流
阅读(371)
推荐(0) 编辑