基于MATLAB的面向对象编程(4)——类文件

5 MATLAB的类文件的组织结构

5.1 如何使用其他文件夹中类的定义

  • 添加路径
    addpath函数
    添加路径,调用其他路径的类
addpath('Z:\folder1\...');
p1 = Point(1.2,10);

5.2 类的定义和成员方法分开

当一个类的方法过多时,可以将类定义和成员方法定义放在同一个以@开头,类名为文件名的文件夹中。例如:@Point

classdef Point < handle
    properties(Access = private)
        x
        y
    end
    methods
        function obj = Point(x,y)
            obj.x = x;
            obj.y = y;
        end
        [norm] = normalize(obj);
        display1(obj); % display 与内置函数冲突
    end
end

function [norm] = normalize(obj)
norm = sqrt(obj.x^2+obj.y^2);
obj.x = obj.x/norm;
obj.y = obj.y/norm;
end

function display1(obj)
disp(['x = ',num2str(obj.x)]);
disp(['y = ',num2str(obj.y)]);
end

此类方法可以访问类的私有数据,其他的普通方法并不行。成员方法的声明同样需要放置在method block中。

  • 构造方法和析构方法只能放置在类定义中,不能剥离
  • set和get方法同样只能放置在类定义中。
  • static方法同理

使用类文件中的类定义,一般与脚本放置在同一文件夹即可。
更常用的方法是通过addpath进行调用。

5.3 类的局部函数

局部函数放置在classdef…end之后,作为工具(Utility)函数,提供一些功能,外部不可见。
在类定义中的类方法可以调用局部函数,在同一文件夹中的类方法则不行,但其自身可以定义局部函数。

classdef Point < handle
    properties(Access = private)
        x
        y
    end
    methods
        function obj = Point(x,y)
            obj.x = x;
            obj.y = y;
        end
        [norm] = normalize(obj);
        display1(obj); % display 与内置函数冲突
    end
end

% 局部函数
function [x,y] = localUtility()
%...
end

5.4 使用package文件夹管理类

package文件夹以“+”开头,可以包括各个类的文件夹,类之间可以有继承关系。但其继承类之前需要加上文件名。
凡是使用基类均需要加文件名,形如

classdef Point3D < MyPointPackage.Point2D
obj = obj@MyPointPackage.Point2D(x,y)
display@MyPointPackage.Point2D(obj)

同样的,使用某个类时,需要加上其文件名

p1 = MyPointPackage.Point2D(1,1);
p2 = MyPointPackage.Point2D(3,5);

导入此文件夹中的所有类的方法

import MyPointPackage.*;

此时不在需要添加文件夹名称即可调用相关的类。

5.5 类方法和函数重名的调用规则

其各自函数的调用规则不同,不会出现函数冲突。

5.6 同名函数优先级

直接路径优先级一般最高。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值