﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-选择C/C++-随笔分类-设计</title><link>http://www.cppblog.com/walkspeed/category/4694.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 20 May 2008 23:20:11 GMT</lastBuildDate><pubDate>Tue, 20 May 2008 23:20:11 GMT</pubDate><ttl>60</ttl><item><title>解依赖</title><link>http://www.cppblog.com/walkspeed/archive/2007/12/29/39906.html</link><dc:creator>walkspeed</dc:creator><author>walkspeed</author><pubDate>Sat, 29 Dec 2007 01:50:00 GMT</pubDate><guid>http://www.cppblog.com/walkspeed/archive/2007/12/29/39906.html</guid><wfw:comment>http://www.cppblog.com/walkspeed/comments/39906.html</wfw:comment><comments>http://www.cppblog.com/walkspeed/archive/2007/12/29/39906.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.cppblog.com/walkspeed/comments/commentRss/39906.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/walkspeed/services/trackbacks/39906.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 对于程序开发，解依赖是很重要的。设计时要考虑到程序中有那些依赖关系，如何将他们解开。解依赖并不是说将这些依赖关系打断，不要依赖了。而是接触对实现的依赖。当一个模块的实现变了，它的变化不会对这个模块有依赖的模块产生大的影响，这就是解依赖了。<br>&nbsp;&nbsp;&nbsp; 解依赖有利于大规模的程序开发。大规模的开发，一个软件被分成了很多的模块，解依赖后，这些模块才可能单独开发，对某模块有深入了解的人才能更关注与这个模块的开发。大家在交流是关注与依赖的交互，而不是实现的细节，有利于在更高层次上讨论问题。<br>&nbsp;&nbsp;&nbsp; 解依赖有利于程序的修改和升级。<br>&nbsp;&nbsp;&nbsp; 解依赖有利于模块测试，集成测试。<br>&nbsp;&nbsp;&nbsp; 解依赖有利于开发库的形成。<br><br>&nbsp;&nbsp;&nbsp; 解依赖中有两个总要的概念。模块和接口。模块的规模可大可小。大的模块可以是一个库，甚至是一个软件，小的模块是一个函数，或一个成员。模块的目的是将一个确定的功能包装起来，向外提供一个统一的访问接口。接口是一种声明，表示某个模块有那些能力。<br><br><img src ="http://www.cppblog.com/walkspeed/aggbug/39906.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/walkspeed/" target="_blank">walkspeed</a> 2007-12-29 09:50 <a href="http://www.cppblog.com/walkspeed/archive/2007/12/29/39906.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>接口设计的要点（接口不应被使用者直接销毁）</title><link>http://www.cppblog.com/walkspeed/archive/2007/08/07/29457.html</link><dc:creator>walkspeed</dc:creator><author>walkspeed</author><pubDate>Tue, 07 Aug 2007 01:49:00 GMT</pubDate><guid>http://www.cppblog.com/walkspeed/archive/2007/08/07/29457.html</guid><wfw:comment>http://www.cppblog.com/walkspeed/comments/29457.html</wfw:comment><comments>http://www.cppblog.com/walkspeed/archive/2007/08/07/29457.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/walkspeed/comments/commentRss/29457.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/walkspeed/services/trackbacks/29457.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 接口的使用者不应该在使用完接口后直接销毁接口，而应该将接口返还给接口提供者。接口提供者来管理接口的声明周期。&nbsp;&nbsp;<a href='http://www.cppblog.com/walkspeed/archive/2007/08/07/29457.html'>阅读全文</a><img src ="http://www.cppblog.com/walkspeed/aggbug/29457.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/walkspeed/" target="_blank">walkspeed</a> 2007-08-07 09:49 <a href="http://www.cppblog.com/walkspeed/archive/2007/08/07/29457.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>领域分析--认识领域分析</title><link>http://www.cppblog.com/walkspeed/archive/2007/07/11/27869.html</link><dc:creator>walkspeed</dc:creator><author>walkspeed</author><pubDate>Wed, 11 Jul 2007 07:54:00 GMT</pubDate><guid>http://www.cppblog.com/walkspeed/archive/2007/07/11/27869.html</guid><wfw:comment>http://www.cppblog.com/walkspeed/comments/27869.html</wfw:comment><comments>http://www.cppblog.com/walkspeed/archive/2007/07/11/27869.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cppblog.com/walkspeed/comments/commentRss/27869.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/walkspeed/services/trackbacks/27869.html</trackback:ping><description><![CDATA[领域分析--认识领域分析<br><br>软件分析的开端一般是需求分析。但是在实践中，发现了很多的问题。<br>1 用户的需求并不是有用户提出。在和用户或软件的风险承担者交谈后，会常发现，他们对自己想要的<br>软件并不是很清楚，会提出一些笼统的要求。在开发出一个原型后，他们会修正或更改，甚至推翻他们<br>的需求。你会发现是你在不断的提出、完善需求，用户或风险承担者只是在裁决你的需求。而这样下去<br>你的软件要不断的改，好像遥遥无期。<br>2 需求多是一种功能的集合。软件出来后，如果有了改动，或在新的项目中去复用以前的软件会发现很<br>难。对每个需求，你不得不从头开始。<br><br>领域分析和需求分析不同，它不是面向功能的。而是面向问题的。这有些像考试中解题。针对特定的问<br>题，来提供解决方案，并在这个方案的直接指导下解出题目。这个直接指导很有意义，应为直接指导表<br>示解题的方案将被应用到解题的过程中（即是可实现的）。<br><br>领域分析不是对要构造的软件进行全面的分析。而是对软件涉及到的特定的领域进行分析（如写多媒体<br>软件，你要对音视频领域进行分析）。而领域是与特定的知识相关联的（如音视频领域中关于音频、视<br>频编解码知识，领域分析要搞清楚这个领域中的知识，找出各知识点中的关系，并对它们进行抽象，形<br>成模型。领域分析强调的是问题域。这就是说它面对的是一个相对确定的范围。软件要解决的是一个相<br>对确定的范围。也有利于测试软件。<br><br>领域分析不能代替需求分析，但是可以脱离需求来对特定的领域进行分析。领域分析后产生的设计要直<br>接指导实现，可以映射到软件中。由于领域分析是面对问题的，它产生的软件不一定能满足需求，可能<br>根本就对应不上需求。但是它是特定问题的解决方案，可以作为一个机制来支持需求的实现。而且特定<br>的问题或着说这种反应某个领域中的知识关系的软件其对应的是一种稳定的需求，比较容易复用、测试<br>和发展。<br><br>面对需求分析得到是一种应用的要求。而根据软件涉及的领域进行分析，得到的是它的基本机制。应用<br>是多样的，而机制其实就只有那么几个。根据应用的要求来组合这些机制。这样需求的变化，并不会去<br>过多的冲击你通过领域分析得到的模型和实现。你要做的是对他们进行组合。<img src ="http://www.cppblog.com/walkspeed/aggbug/27869.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/walkspeed/" target="_blank">walkspeed</a> 2007-07-11 15:54 <a href="http://www.cppblog.com/walkspeed/archive/2007/07/11/27869.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>