初識Matlab物件導向程式設計

2021-08-10 12:20:39 字數 3415 閱讀 1411

主要總結物件導向程式設計中的基本常見寫法在matlab中是怎樣的,方便以後查閱。

classreg.learning.fullclassificationregressionmodel

classdef fullclassificationmodel < ...

classreg.learning.fullclassificationregressionmodel & classreg.learning.classif.classificationmodel

% 屬性

% 可讀,只有其子類可以寫

% 該屬性需要自定義讀寫函式

properties(getaccess=public,setaccess=protected,dependent=true)

%y true class labels used to train this model.

% the y property is an array of true class labels. y is of the same type

% as the passed-in y data: a cell array of strings, categorical, logical,

% numeric or a character matrix.

%% see also classreg.learning.classif.fullclassificationmodel.

y;end

methods

function y = get.y(this)

y = labels(this.privy);

endend

% 方法 讀寫許可權繼承都是protected

methods(access=protected)

% 與類同名,建構函式

% matlab中不支援函式重債,需要通過傳入引數個數或varargin來實現

function this = fullclassificationmodel(x,y,w,modelparams,...

datasummary,classsummary,scoretransform)

% 先呼叫基類的建構函式

this = [email protected](...

datasummary,x,y,w,modelparams);

this = [email protected](...

datasummary,classsummary,scoretransform,);

this.modelparams = fillifneeded(modelparams,x,y,w,datasummary,classsummary);

endend

% 方法屬性 static 類方法

methods(static,hidden)

function [x,y,w,userclassnames,nonzeroclassnames,rowsused] = ...

processclassnames(x,y,w,userclassnames,allclassnames,rowsused)

% 此處省略很多字

endend

end

**片段的首行表示類fullclassificationmodel繼承了兩個類fullclassificationregressionmodelclassificationmodel,用classdef a < b & c 表示。

需要說明的是,matlab中的物件的繼承方式都是public,即對繼承方式沒有限制。

在matlab類的property塊定義中,可以為屬性直接賦乙個值,此時為預設值。 如果預設值的賦值使用表示式,該表示式僅在類定義被matlab裝載時執行一次,所以表示式計算的結果最好是固定。

定義:其值依賴於其他的屬性,一旦其他的屬性改變,該屬性也做響應的變化,在概念上可以理解為

數學中的因變數。為了不需要每次都在自變數變化之後更新因變數,可以把該值設為dependent(依

賴)屬性。

dependent屬性特點:物件內部沒有給屬性分配物理的儲存空間,每次該屬性被訪問時,其值將被動

態地計算出來。計算該屬性的方法由get提供。

隱藏的效果是在命令列中檢視物件的資訊時,該屬性不會被顯示出來。

和類的名稱相同,用來創造類的例項。類定義中只能有乙個constructor。constructor只能有乙個返回值,且必須是新建立的物件。matlab中不支援函式過載,需要通過判斷引數的個數nargin或借助varargin來實現。

在物件脫離作用域或者被銷毀時,負責收尾工作,比如關閉檔案控制代碼、釋放資料所佔記憶體空間等。matlab規定:這類方法要命名為delete。無論value或者handle都需要使用者定義自己的delete函

數。定義抽象方法,只需要一行宣告,不需要具體**,並且該類的子類包括有乙個同名的非抽象的辦 -法。

matlab中的含抽象函式的抽象類,不能被例項化出物件的類,可以有建構函式,只是不能利用這個建構函式宣告出物件來,該建構函式一般被子類建構函式所呼叫,需要顯式呼叫。

抽象類的子類必須實現抽象類中定義的所有抽象辦法,否則,該子類仍然是抽象類。

也叫作類方法,它為類服務,最明顯的特徵就是不需要物件就能使用。因為類的constant property

同樣也為類服務,而不屬於某個物件,所以靜態方法可以訪問類的constant property。類中的普通

方法可以訪問靜態方法,只需要在方法前面加上類名。

access=private:表示只有該類的成員方法可以訪問該資料,而子類和其他外部函式無法訪問

該成員變數。

access=protected:表示只有該類的成員方法還有該類的子類而已訪問該資料。

access=public:在類的定義中、類的成員方法、子類的成員和方法都可以訪問這個成員變數,類之外的函式或者指令碼也可以訪問這個成員變數。

classdef (sealed) a

end

matlab不支援static變數。如果要讓類的各個物件共享變數,可以在靜態成員方法中定義乙個persistent變數。比如可以用乙個persistent變數計算物件創造的數量。

獲得乙個類的meta.class物件

meta.class可以做什麼?

系統地獲得類中所有property的名字。

metaobj=?derived;

propnamelist= `

初識對物件導向程式設計。

假 why?什麼是物件導向程式設計?義 應該是某個人和她的物件面對面吧。丁 錯!如果從簡單的一面來看,就是用乙個物件把所有的變數和方法包含起來。var obj obj.fn 追夢子 19 當然實際情況可能會比這麻煩,但是在怎麼麻煩也只是多了一些屬性,多了一些方法,僅此而已,物件導向程式設計沒有你想象...

物件導向 初識物件導向

面向過程思想 步驟清晰簡單,第一步做什麼,第二步做什麼.面向過程適合處理一些較為簡單的問題 物件導向思想 物以類聚,分類的思維模式,思考問題首先會解決問題需要分哪些類,然後對這些類進行單獨思考,最後才是對某個分類下的細節進行面向過程的思索 物件導向適合處理複雜的問題,適合處理需要多人協作的問題 對於...

初識物件導向

1.例項化 2.init 方法 3.類方法和靜態方法 4.訪問控制 5.屬性裝飾器 在python中,用變數表示特徵,用函式表示技能,因而具有相同特徵和技能的一類事物就是 類 物件是則是這一類事物中具體的乙個.三要素類 class 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所...