zoukankan      html  css  js  c++  java
  • 面向对象设计之------Is-A(继承关系)、Has-A(合成关系,组合关系)和Use-A(依赖关系)(转)

    原文url:http://blog.csdn.net/loveyou128144/article/details/4749576

    @Is-A,Has-A,Use-A则是用来描述类与类之间关系的。简单的说Is-A代表继承,Has-A代表合成,Use-A代表依赖。

    1,Is-A继承关系:“表示类与类之间的继承关系、接口与接口之间的继承的关系以及类对接口实现的关系”。如:

    ---对象的继承关系是在编译时就定好了,所以无法在运行时改变从父类继承的实现。子类的实现与它的父类有非常紧密的依赖关系,以至于父类实现中的任何变化必然会导致子类发生变化。当你需要复用子类时,如果继承下来的实现不适合解决新的问题,则父类必须重写或被其他更适合的类替换。这种依赖关系限制了灵活性并最终限制了复用性。

    ---继承是一种强耦合的结构,父类变,子类就必须要变

    ---is-a,一个圆形就是一个几何形状。圆形可以继承几何形状。几何形状是圆形抽象。

    public abstract class A

    {

       ……

    }

    public class B : A

    {

      ……

    }

    B类继承自A类,那么B类和A类的关系就是Is-A的关系。

    2,Has-A合成关系:“是关联关系的一种,是整体和部分(通常为一个私有的变量)之间的关系,并且代表的整体对象负责构建和销毁代表部分对象,代表部分的对象不能共享”。如:

        public class Heart

        {

           ……

        }

        public class Man

        {

            private Heart heart = new Heart();

           ……

        }

    Man类和Heart类便是Has-A关系,人死的时候心也就死了(当然有心脏移植,不想抬杠,哈哈),人和心是一种比较强的拥有关系,并且心是不能共享的。

    ---这里有详细的继承和组合关系的介绍:http://www.cnblogs.com/feichengwulai/articles/4137395.html

    3,Use-A依赖关系:“是类与类(通常为函数的参数)之间的连接,依赖总是单向的”。如

         public abstract class Course

        {

            ……

        }

        public class Student

        {

            public void Learn(Course course)

            {

               ……

            }

       }

    Student类和Course的关系就是Use-A关系,Student类总是单向指向Course,学生知道自己学的是什么课程,而课程根本不关心它被哪个学生学习

  • 相关阅读:
    Docker 部署 Nginx
    Docker 安装 Redis
    linux shell "2>&1"
    定时备份docker mysql
    SpringBoot 中拦截器和过滤器的使用
    SpringBoot WebMvcConfigurer
    springboot自定义参数解析HandlerMethodArgumentResolver
    mysql在linux下查看my.cnf位置的方法
    Linux下设置mysql允许远程连接
    Android项目实战(六十):修改项目包名
  • 原文地址:https://www.cnblogs.com/xuxinstyle/p/9353428.html
Copyright © 2011-2022 走看看