学习笔记----MATLAB面向对象编程入门04--类之间的基本关系

本系列内容为《MATLAB面向对象编程–从入门到设计模式》学习笔记,特此说明。

面向对象的程序设计关键是对类的设计。

本文内容为类之间的基本关系:继承、组合和聚集

如何判断B能够继承A

若在逻辑上,B时A的“一种”(a kind of,isa),则允许B继承A的功能和属性。A是基类,B继承了A,B继承了A的成员变量和成员方法。

使用“继承”可以提高程序的复用性,但是如果只是为了增加程序的复用性而盲目地使用继承,那么就会造成逻辑上的混乱和程序适用性的降低,因此为了防止乱用“继承”,使用时应遵循:

如果类A和类B不相关,则不能为了使B的功能更多而让B继承A的功能和属性。

类的组合

如果在逻辑上A是B的“一部分”(a part of),则不要为了让B得到A的功能而去继承A,而是要用A和其他类组合出B。

e.g. 眼(Eye)、鼻(Nose)、口(Mouth)、耳(Ear)是头(Head)的一部分,因此类Head应该由Eye、Nose、Mouth、Ear组合而成,而不是派生而成。

classdef Nose < handle
    %.....
end

classdef Eye < handle
    %.....
end

classdef Mouth < handle
    %.....
end

classdef Ear < handle
    %.....
end

classdef Head < handle
    
    properties  %头由 眼、鼻、口、耳组成
        eye     %成员变量是对象
        nose
        mouth
        ear
    end
    
    methods
        function obj = Head()
            obj.eye = Eye();
            obj.nose = Nose();
            obj.mouth = Mouth();
            obj.ear  = Ear();
        end
    end
end

对应的,使用继承方式为:

classdef Head < Eye & Nose & Mouth & Ear   % 符号 & 表示多种继承

    %.....
end

不使用继承的原因:

Head 是由Nose、Mouth等组成,他们之间没有严格的isa关系,不能让Head得到Nose、Mouth等的功能而使用继承。

在MATLAB程序中,组合关系要求Head对象一定在内部拥有Nose等对象,这是通过Head对象的构造函数保证的。

 function obj = Head()
            obj.eye = Eye();
            obj.nose = Nose();
            obj.mouth = Mouth();
            obj.ear  = Ear();
        end

这将保证在Head对象被创建时,其余4个对象也同时被创建。

组合聚集关系

组合关系

组合(Composition)是一种强烈依赖的整体和部分关系。

e.g. 前面提到的头是有眼、鼻、口、耳组成。

聚集关系

聚集(Aggregation)是一种松散的整体和部分关系。整体和部分并不是强烈的依赖,即使整体不存在了,部分任然可以存在。

e.g. 自行车(Bike)由架子、轮子(Wheel)和坐垫(Seat)等部分组成。即使自行车架子不存在了,轮子等依然可以存在。

聚集反映在程序上,Wheel和Seat的对象可以独立创建(而不需要再Bike的构造函数中被创建)。创建完成之后,再装到自行车架子上。

classdef Bike <  handle
    properties
        frontWheel
        rearWheel
        seat
    end
end

%--------------------------------------------

frontWheelObj = Wheel();
rearWheelObj = Wheel();
seatObj = seat();

........

bikeObj = Bike();
bikeObj.frontWheel = frontWheelObj;  %聚集关系
bikeObj.rearWheel = rearWheelObj;
bikeObj.seat = seatObj;

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值