學習筆記----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;

 

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