学习笔记----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;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章