??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美日韩亚洲综合,国产精品粉嫩,51ⅴ精品国产91久久久久久http://www.aygfsteel.com/jzone/category/40758.htmljava web, java wapzh-cnSun, 12 Jul 2009 18:53:44 GMTSun, 12 Jul 2009 18:53:44 GMT60cM间关pȝ层次http://www.aygfsteel.com/jzone/articles/286490.htmlGavin.leeGavin.leeSun, 12 Jul 2009 15:13:00 GMThttp://www.aygfsteel.com/jzone/articles/286490.htmlhttp://www.aygfsteel.com/jzone/comments/286490.htmlhttp://www.aygfsteel.com/jzone/articles/286490.html#Feedback0http://www.aygfsteel.com/jzone/comments/commentRss/286490.htmlhttp://www.aygfsteel.com/jzone/services/trackbacks/286490.html1.首先cM间的关系从宏观上可以分ؓQ关联、依赖、承,而其中关联又有两U特例:聚合和组合,不过在UML2.X中聚合和l合合成一U关pM?

2.从用的频率来看Q关联(包括聚合和组合)关系是用最为广泛的Q其ơ是依赖和?

3.兌和依赖的区别Q?
A:从类之间关系的强q度来分,兌表示cM间的很强的关p;依赖表示cM间的较弱的关p;

B:从类之间关系的时间角度来分,兌表示cM间的“持久”关系Q这U关pM般表CZU重要的业务之间的关p,需要保存的Q或者说需?#8220;持久?#8221;的,或者说需要保存到数据库中的。比如学生管理系l中的StudentcdClassQ班U)c,一个Student对象属于哪个Class是一个重要的业务关系Q如果这U关pM保存Q系l就无法理。另外,依赖表示cM间的是一U?#8220;临时、短?#8221;关系Q这U关pL不需要保存的Q比如StudentcdStuEditScreenQ学生登录界面)cM间就是一U依赖关p,StuEditScreencM赖Studentc,依赖Student对象的信息来昄~辑学生信息?

C:设计cM间的关系是遵循的原则Q首先判断类之间是否是一U?#8220;兌”关系Q若不是再判断是否是“依赖关系”Q一般情况下若不是关联,是依赖关系

D:依赖一般情况下是以下几U情况之一Qa、ClassA中某个方法的参数cd是ClassBQ这U情冉|合Qb、ClassA中某个方法的参数cd是ClassB的一个属性;q种情况成ؓ紧耦合Qc、ClassA中某个方法的实现实例化ClassBQd、ClassA中某个方法的q回值的cd是ClassBQ如果出C上述四种情况之一Q两个类很有可能是“依赖”关系?

E:依赖关系QDependencyQ:是类与类之间的连接,依赖L单向的。依赖关pM表一个类依赖于另一个类的定义。下面的例子中class A 依赖与class B、C、D?br />

    public class A{   
        
public B getB(C c, D d){   
        E e 
= new E();   
        B b 
= new B(c, d, e);   
        }
   
    }
 


F:兌是一U结构关p,说明一个事物的对象与另一个事物的对象相联pR给定一个连接两各类的关联,可以从一个类的对象导航到另一个类的对象?br /> 兌可以有方向,卛_航。一般不作说明的时候,D是双向的Q不需要在U上标出头。大部分情况下导航是单向的,可以加一个箭头表C。关联在代码中一般表CZؓ属性(成员变量Q,例如下面例子?class A与B兌
 
public class A{  
    private B b;  
}  
如果B也关联到AQ那么它们就是双向的兌?br /> public class B{  
    private A a;  


G:聚合关系(Aggregation)Q是兌关系的一U,是强的关联关pR聚合是整体与个体之间的关系。如汽RcM引挚c,轮胎cM间的关系是整体与个体的关系?
与关联关pMP聚合关系也是通过实例变量来实现的?/p>

***兌关系所涉及的两个类是处于同一层次上的Q而在聚合关系中,两个cd在不q等的层ơ上的,一个代表整体,一个代表部分。(兌与聚合仅仅从语法上是区分不开的,需要察所涉及的类之间的逻辑关系。)

H:l成关系(Composition)Q是兌关系的一U,是比聚合关系强的关系。它要求普通的聚合关系中代表的对象负责代表部分的对象的生命周期Q合成关pL不能׃n的?
代表整体的对象需要负责保持对象的存活Q在一些情况下负责代表部分的对象湮灭掉。代表整体的对象可以代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换a之,

*******代表部分的对象在每一个时d能与一个对象发生合成关p,由后者排它的负责其生命周期?br />



Gavin.lee 2009-07-12 23:13 发表评论
]]>
cMcM间唯妙的关系http://www.aygfsteel.com/jzone/articles/286489.htmlGavin.leeGavin.leeSun, 12 Jul 2009 14:50:00 GMThttp://www.aygfsteel.com/jzone/articles/286489.htmlhttp://www.aygfsteel.com/jzone/comments/286489.htmlhttp://www.aygfsteel.com/jzone/articles/286489.html#Feedback0http://www.aygfsteel.com/jzone/comments/commentRss/286489.htmlhttp://www.aygfsteel.com/jzone/services/trackbacks/286489.html做java也有D|日了Q但是总觉得自p很虚Q好多不会,即会的也不能全懂,自己内心感觉到恐慌?br />
既然是程序设计,那谈到设计了Q就不能dc,因ؓjava中一切的设计都是以类为基的?br />
从javaeye上找个篇文章Q根据自q理解做了Ҏ术,请作者不要见怪?br />
cMcM间存在以下关p:

1?泛化(Generalization)

很简单,是我们常说的ѝ是说子c获得父cȝ功能的同Ӟq可以扩展自q功能?如图:
  

Java代码中表CؓQextends ?implements

2?依赖(Dependency)

两个相对独立的咚?A和B)Q当A负责构造BӞA与B形成依赖关系Q即A使用B。如图:

 

<v:shape id="_x0000_i1026" style="WIDTH: 378pt; HEIGHT: 81.75pt" type="#_x0000_t75"><v:imagedata o:title="Dependency" src="file:///D:\DOCUME~1\Yaogao\LOCALS~1\Temp\msohtml1\01\clip_image003.wmz"></v:imagedata></v:shape>

Java代码中:表现为局部变量,Ҏ的参敎ͼ以及寚w态方法的调用

3?兌(Association )

   两个相对独立的咚?A和B)Q当A对象持有B对象的时候,形成兌关系?

关于分ؓ有两U特D的形式Q聚合(AggregationQ和l合QCompositionQ,聚合和组合只有概念上的区别,在Java中的代码实现上没有区别?

聚合Q指的是整体与部分的关系Q如图:

 

l合Q表C类之间整体和部分的关系Q但是组合关pM部分和整体具有统一的生存期,x体对象不存在Q部分对象也不存在Q如图:

 

Java代码中:表现为成员变量?/strong>

4?ȝ

在Java中,应该量优先使用l合Q而不是承,因ؓl承会得类关系q于复杂化,破坏了封装性,使用l合一样可以获得已有类的功能,而且会新类更加E_?

实际上,从依?-----〉聚?-------〉组合,cMcM间的关系更加紧密Q互怹间的影响来大Q其实我们^常比较少d分这些关p,而且事实上这东西的定义不太好理解Q所以肯定会D认识上的偏差Q所以我们用这些东西的时候,量靠近大家都认同的做法Q这样容易让别h理解?



Gavin.lee 2009-07-12 22:50 发表评论
]]>
关于泛型http://www.aygfsteel.com/jzone/articles/286442.htmlGavin.leeGavin.leeSun, 12 Jul 2009 04:13:00 GMThttp://www.aygfsteel.com/jzone/articles/286442.htmlhttp://www.aygfsteel.com/jzone/comments/286442.htmlhttp://www.aygfsteel.com/jzone/articles/286442.html#Feedback0http://www.aygfsteel.com/jzone/comments/commentRss/286442.htmlhttp://www.aygfsteel.com/jzone/services/trackbacks/286442.html
import  java.util.ArrayList;
import  java.util.List;

class  Fan  {
    
private  String name;

    
public   void  setName(String name)  {
        
this .name  =  name;
    }


    
public  String getName()  {
        
return  name;
    }

}


public   class  FanTest  {
    
public   static   void  main(String[] args)  {
        
//  /用泛型的效果--list的getҎ取出来的对象不需要强制{?/span>
        Fan fan1  =   new  Fan();
        fan1.setName(
" fanTest1 " );
        Fan fan2 
=   new  Fan();
        fan2.setName(
" fanTest2 " );

        List
< Fan >  list  =   new  ArrayList();
        list.add(fan1);
        list.add(fan2);

        System.out.println(list.get(
0 ).getName());
        System.out.println(list.get(
1 ).getName());

        
//  /不用泛型的效?-list的getҎ取出来的对象需要强制{?/span>
        List no_list  =   new  ArrayList();
        no_list.add(fan1);
        no_list.add(fan2);

        System.out.println(((Fan) list.get(
0 )).getName());
        System.out.println(((Fan) list.get(
1 )).getName());

    }

}

首先l一个我在CSDN里查到的我们常用的例子,q个基本上天天都会用Q但是从来没仔细的考虑q中间的含义Q惭愧?br />

规则和限?br />  1、泛型的cd参数只能是类cdQ包括自定义c)Q不能是单类型?br />  2、同一U泛型可以对应多个版本(因ؓ参数cd是不定的)Q不同版本的泛型cd例是不兼容的?br />  3、泛型的cd参数可以有多个?br />  4、泛型的参数cd可以使用extends语句Q例?lt;T extends superclass>。习惯上UCؓ“有界类型”?br />  5、泛型的参数cdq可以是通配W类型。例如Class<?> classType = Class.forName(java.lang.String);


package  com.Gavin.fanxing;

public   class  GenDemo  {
    
public   static   void  main(String[] args)  {
        
//  定义泛型cGen的一个Integer版本
        Gen < Integer >  intOb  =   new  Gen < Integer > ( 88 );
        intOb.showTyep();
        
int  i  =  intOb.getOb();
        System.out.println(
" value=  "   +  i);
        System.out.println(
" ---------------------------------- " );
        
//  定义泛型cGen的一个String版本
        Gen < String >  strOb  =   new  Gen < String > ( " Hello Gen! " );
        strOb.showTyep();
        String s 
=  strOb.getOb();
        System.out.println(
" value=  "   +  s);
    }

}


class  Gen < T >   {
    
private  T ob;  //  定义泛型成员变量

    
public  Gen(T ob)  {
        
this .ob  =  ob;
    }


    
public  T getOb()  {
        
return  ob;
    }


    
public   void  setOb(T ob)  {
        
this .ob  =  ob;
    }


    
public   void  showTyep()  {
        System.out.println(
" T的实际类型是:  "   +  ob.getClass().getName());
    }

}


package  com.Gavin.fanxing;

class  Gen2  {
    
private  Object ob;  //  定义一个通用cd成员

    
public  Gen2(Object ob)  {
        
this .ob  =  ob;
    }


    
public  Object getOb()  {
        
return  ob;
    }


    
public   void  setOb(Object ob)  {
        
this .ob  =  ob;
    }


    
public   void  showTyep()  {
        System.out.println(
" T的实际类型是:  "   +  ob.getClass().getName());
    }

}


public   class  NoGenDemo  {
    
public   static   void  main(String[] args)  {
        
//  定义cGen2的一个Integer版本
        Gen2 intOb  =   new  Gen2( new  Integer( 88 ));
        intOb.showTyep();
        
int  i  =  (Integer) intOb.getOb();
        System.out.println(
" value=  "   +  i);
        System.out.println(
" ---------------------------------- " );
        
//  定义cGen2的一个String版本
        Gen2 strOb  =   new  Gen2( " Hello Gen! " );
        strOb.showTyep();
        String s 
=  (String) strOb.getOb();
        System.out.println(
" value=  "   +  s);
    }

}



Gavin.lee 2009-07-12 12:13 发表评论
]]>
接口 && 抽象c?/title><link>http://www.aygfsteel.com/jzone/articles/286434.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 12 Jul 2009 03:07:00 GMT</pubDate><guid>http://www.aygfsteel.com/jzone/articles/286434.html</guid><wfw:comment>http://www.aygfsteel.com/jzone/comments/286434.html</wfw:comment><comments>http://www.aygfsteel.com/jzone/articles/286434.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/jzone/comments/commentRss/286434.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/jzone/services/trackbacks/286434.html</trackback:ping><description><![CDATA[java不允许多重?br /><br />正是因ؓjava不支持多l承才生了接口Qjava允许实现多个接口Q接口就是给Z些没有内容的ҎQ要注意的是想用接口必须实现接口的所有方?br /><br />接口是用来规范类的,它可以避免类在设计上的不一_q在多h合作的开发中犹ؓ重要Q就比如接口中有AҎ那么实现q个接口必d现AҎq就形成了一U规范,也就是说QAl承了BQ但却想使用C的一个方法,但又不能再承,所以就使用了C的接口?<br /><br /><strong>Java 接口和Java抽象cM表的是抽象cdQ就是我们需要提出的抽象层的具体表现。OOP面向对象的编E,如果要提高程序的复用率,增加E序的可l护性,可扩展性,必L面向接口的编E,面向抽象的编E,正确C用接口、抽象类q些太有用的抽象cd做ؓ你结构层ơ上的顶层?<br /></strong><br />Java接口和Java抽象cL太多怼的地方,又有太多特别的地方:<br /><br />1、抽象类可以提供某些Ҏ的部分实玎ͼ接口不可以,如果向一个抽象类里加入一个新的具体方法时Q那么它所有的子类都能得到了这个新ҎQ而接口做不到q一点,如果向一个接口里加入一个新ҎQ所有实现这个接口的cd无法成功通过~译了,因ؓ你必让每一个类都再实现q个Ҏ才行Q这昄是Java接口的缺炏V?<br /><br />2、一个抽象类的实现只能由q个抽象cȝ子类l出Q也是_q个实现处在抽象cL定义出的l承的等U结构中Q而由于Java语言的单l承性,所?strong>抽象cM为类型定义工L效能大打折扣</strong>。在q一点上QJava接口的优势就出来了,M一个实C一个Java接口所规定的方法的c都可以hq个接口的类型,因ؓcd以实CQ意多个Java接口Q从而这个类有了多U类型?<br /><br />3、从W?点不隄出,Java接口是定义؜合类型的理想工具Q؜合类表明一个类不仅仅具有某个主cd的行为,而且h其他的次要行为?<br /><br />4、结??点中抽象cdJava接口的各自优势,L典的设计模式出来了Q声明类型的工作仍然由Java接口承担Q但是同时给Z个Java抽象c,且实Cq个接口Q而其他同属于q个抽象cd的具体类可以选择实现q个Java接口Q也可以选择l承q个抽象c,也就是说在层ơ结构中QJava接口在最上面Q然后紧跟着抽象c,哈,q下两个的最大优炚w能发挥到极至了。这个模式就是“缺省适配模式”?<br />在Java语言API中用了这U模式,而且全都遵@一定的命名规范QAbstract Q接口名?<br /><br />Java接口和Java抽象cȝ存在是Z用于具体cȝ实现和承的Q如果你准备写一个具体类ȝ承另一个具体类的话Q那你的设计有很大问题了。Java抽象cd是ؓ了承而存在的Q它的抽象方法就是ؓ了强制子cdd实现的?<br /><br />使用Java接口和抽象Javac进行变量的cd声明、参数是cd声明、方法的q还cd说明Q以及数据类型的转换{。而不要用具体Javac进行变量的cd声明、参数是cd声明、方法的q还cd说明Q以及数据类型的转换{?<br /><br />我想Q如果你~的代码里面q一个接口和抽象c都没有的话Q也许我可以说你Ҏ没有用到M设计模式QQ何一个设计模式都是和抽象分不开的,而抽象与Java接口和抽象Javacd是分不开的?<br /><img src ="http://www.aygfsteel.com/jzone/aggbug/286434.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/jzone/" target="_blank">Gavin.lee</a> 2009-07-12 11:07 <a href="http://www.aygfsteel.com/jzone/articles/286434.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ɽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">غ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">ʡ</a>| <a href="http://" target="_blank">ԭ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ŷ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ʯ</a>| <a href="http://" target="_blank">괨</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Դ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ҿ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>