﻿<?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>BlogJava-atlantic-文章分类-java</title><link>http://www.blogjava.net/atlantic23/category/33091.html</link><description>final</description><language>zh-cn</language><lastBuildDate>Sat, 30 Aug 2008 06:28:35 GMT</lastBuildDate><pubDate>Sat, 30 Aug 2008 06:28:35 GMT</pubDate><ttl>60</ttl><item><title>(转)&lt;面向接口系列&gt;zz 一些基本概念</title><link>http://www.blogjava.net/atlantic23/articles/225558.html</link><dc:creator>chencj</dc:creator><author>chencj</author><pubDate>Fri, 29 Aug 2008 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/atlantic23/articles/225558.html</guid><wfw:comment>http://www.blogjava.net/atlantic23/comments/225558.html</wfw:comment><comments>http://www.blogjava.net/atlantic23/articles/225558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/atlantic23/comments/commentRss/225558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/atlantic23/services/trackbacks/225558.html</trackback:ping><description><![CDATA[[韩小明]面向接口设计（Interface Oriented Design）<a href="http://www.builder.com.cn/" target="_blank"><font color="#000000">开发者在线 Builder.com.cn</font></a> 更新时间:<font size="1"><font color="#a0a0a0">2007-10-10</font></font>作者：<font color="#666666">韩小明</font> 来源:CSDN本文关键词： <a href="http://www.builder.com.cn/files/list-0-0-92682-1-1.htm" target="_blank"><font color="#e98e00">韩小明</font></a> <a href="http://www.builder.com.cn/files/list-0-0-73783-1-1.htm" target="_blank"><font color="#e98e00">面向接口</font></a> <a href="http://www.builder.com.cn/files/list-0-0-70027-1-1.htm" target="_blank"><font color="#e98e00">设计</font></a> 我在网上搜索这个概念的时候，发现在中国还很少有此类文章，外国有一本同名书籍出版，但是无缘拜读。所以这个概念基本是我自己杜撰出来的，只是网上也有同名而已。 <br />
先说说，什么是接口。这是个老问题，可是在设计之前，必须先将此定义清楚。<br />
<br />
一个常见的定义是，接口就是契约。我认为这个定义非常模糊。契约是约定双方的有一定法律或道德效应的说明。但是，第一，中国人不常定契约，所以不是很能理解其中精髓。第二，此定义还是没有定义出接口的内容特征，因此很多人看了这个定义，还是不理解接口。此定义可以是不合国情，不合民意。<br />
<br />
我更倾向于将接口定义为职责（或角色、能力）。职责就是在某种情况下被赋予的权力和义务。在社会应用领域中，使用角色的概念更能深入人心。在英文中使用Role单词。而在普遍意义下，能力大家也能接受。<br />
<br />
让我们打个比方。在面向对象分析中，我们分析出来一个人的对象。在其中，我们假定一个实例为韩小明，那么韩小明这个对象应该实现多少个接口呢？<br />
<br />
他在公司上班，需要编写代码，因此必须拥有编码的能力。有时候还要参加设计，因此必须同时拥有设计能力。他有了家庭，必须有对家庭负责的能力。有了妻子，要有作为丈夫的能力。当然了，上面的这些能力也可以理解为角色。软件工程师、架构师、丈夫、孩子、父亲等等。<br />
<br />
对于韩小明这样一个人（对象），他身上同时拥有多个角色，那么就要实现这么多接口吗？那就要看我们的业务领域涉及哪些了。如果我们只关心他的工作情况，那么也只会涉及软件工程师和架构师这两种角色（接口）。<br />
<br />
面向接口设计，就在这个时候开始发挥作用了。<br />
<br />
在UML设计中，其实也涉及到了，关于接口的设计，那就是Role，只是没有专门对Role本身进行设计，只是作为一种关系存在而已。方法都转移到了对象上面。在一定意义上，导致接口的设计被人忽略。<br />
<br />
重新捋一下我们在做OOA/OOD的过程，分析出对象，静态分析出对象的属性，动态（建模）分析出对象的方法。如果我们将接口的分析和设计过程加入其中，那么我们的流程就变成：分析出对象，分析出属性、分析出接口（角色、能力），分析出方法。接口这个集合处于类和方法之间，恰好是一个非常好的分析工具。<br />
<br />
至于面向接口设计的一些原则和方法，相信又将是一篇非常精彩的文章。<br />
<br />
在我们还没有被一些新的概念淹没之前，重新看看我们最基本的软件设计，我们经常会发现一些意想不到的收获。面向接口设计如此，其他也是如此。希望这些收获也能对你有所帮助
<img src ="http://www.blogjava.net/atlantic23/aggbug/225558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/atlantic23/" target="_blank">chencj</a> 2008-08-29 13:46 <a href="http://www.blogjava.net/atlantic23/articles/225558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>