对象的关联关系

187 阅读5分钟

对象的关联关系

    我们现在有了一些面向对象的基本认知了,至少包括:需要在问题域当中寻找对象,定义
    
 类,new对象,调用对象的属性和行为了。

    在实际开发中,我们遇到的很多问题不是某一个对象单独解决的,而是可能由多个不同类型
    
 的对象协作完成的,那么我们就需要在复杂问题域当中去设计他们的关联,让他们能够协同。

对象的三种关联关系

    1. has-a 关系

        顾名思义: 有一个。

        指的是在一个对象的内部“拥有”另一个对象

    2. use-a 关系

        用一个。

        指的是在一个对象的某个方法当中“使用”另一个对象

    3. is-a 关系

        是一个。

        指的是一个对象是另外一种对象的特例。

has - a 关系

 在语法上,has-a关系就是把一个对象设计为另一个对象的属性。

 关联分 单向关联 和 双向关联

 A has BB has A 都叫做单向关联

 A has BB has A 叫做双向关联

     把对方设计为自己的属性后,有一个特点,那就是在当前对象的所有方法中,都可以访问
     
 到关联对象。换句话说,两个对象的生命周期是保持一致的,这就是所谓的你中有我,我是你
 
 的一部分。

use - a 关系

    在语法上,use-a关系是把一个对象设计为另一个对象的某个方法的局部变量。

        该变量可以通过参数传递进这个方法,也可以在方法内部自己new一个。两者无论采用
        
    哪种方式,都是use-a关系。因为参数也好,自己方法内部声明定义也好,都是方法内部的
    
    局部变量,方法结束,局部变量消失,关系解除。

this 关键字

        在一个类当中定义的属性和行为,都需要用"对象."的方式来访问。这种语法的规定是
        
    有道理的,因为同一个类可以产生多个对象,必须明确的告知是哪个对象的属性,或者调用
    
    哪个对象的方法。

        在类的内部方法中,访问当前类的属性或调用自己的某个方法,也有一个默认的对象-
        
    --用this表示。这个this代表的是“当前对象”,相当于“我”的含义。那么谁是当前对象
    
    呢?谁调用这个方法谁就是“当前对象”。

        利用“this.”,后面可以访问自己属性和自己的行为。


        建议大家在书写代码的时候只要是访问本类属性或本类方法就加上"this."
        
    原因:

        1. 利用IDEA工具,书写上"this."以后,可以自动联想出本类的属性和方法,提高编
        
    程速度;

        2. 它可以区分局部变量和属性重名的情况;

对于"this."的使用,我们要分情况:

    1. 如果出现局部变量和全局变量重名,我们又需要特指全局的时候,那么就一定要用"this.";

    2. 如果没有出现上面的这种情况,加不加"this."就看程序员个人的使用习惯,或你服务的公

    司的代码规范了。

        当我们的程序越来越大,里面包含的类越来越多,那么我们就需要一种结构能够帮助
        
    我们分门别类的存放这些类,以达到更好的管理。于是,有了“包”的概念。

    包的命名规范:全小写

        包在本质上大家就把它想成是专门用来存放java类的文件夹。当一个java类被放入到
        
    某个包当中的时候有以下几个特点:

        1. 在这个类的最高处要增加一句包申明的代码,使用关键字"package",后面跟上包
        
        的名字。

        比如:package com.lovo.test;

        2. 在默认情况下,一个java类只能访问来自于同一个包的其他java类。如果需要访
        
        问其他包的类,那么需要使用关键字“import”,把那个类导入进来。

        比如:import com.lovo.practise.Car;

            可以使用 import com.lovo.practise.*; 导入practise包下面所有的java
            
        类,但是不建议这么做,最好的方式是需要用谁才导入谁。

        3. 在IDEA工具中,具有多种创建包或创建类的方式,需要大家逐步的熟悉。

        当局部变量和属性出现重名的时候,在默认情况下,直接书写"name",永远指的是离
        
        它声明最近的局部变量name,而不是属性name;

        这种情况下,用"this.name"就特指当前对象的name,当然就是全局的这个了。

 

普遍问题:

    1、定一个类就创建一个独立的Java文件,千万不要在一个类里面定义另一个类;

    在一个类里面定义另一个类 --- 这种叫做"内部类",这是Java中高阶语法;

    它描述的内部类与外部类是有特定关系的,使用语法也和普通类完全不同。



    2、命名规范:

     类名 -- 名词,首字母大写,后面每个单词的首字母也要大写 --- 
     
         形如: AaaaBbbbCccc

     变量名 --- 无论属性还是局部变量,名词,第一个单词全小写,后面每个单词的首字母大写 --- 
     
         形如:aaaaBbbbCccc

     常量名 --- 名词,所有字母使用全大写,单词与单词之间用"_"分隔 --- 
     
         形如:AAAA_BBBB_CCCC

     方法名 --- 动词,千万不要使用类名做方法名,第一个单词全小写,后面每个单词的首字母大写 --- 
     
         形如:aaaaBbbbCccc