DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的。笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab编程书上都对Matlab面向对象所提甚少甚至没提。因此在DeepLab的使用说明书中专门添加Matlab面向对象编程基础是有必要的。
第一节 Matlab面向对象大体结构
代码清单2.1.1

classdef className<handle & superclass1 & superclass2
properties
property1;
property2;
end
methods
function F1 = Func1(class_obj,parameter1)
...
end
function class_obj = Func2(class_obj)
...
end
end
methods(Static)
function display(class_obj)
disp(class_obj.property1);
disp(class_obj.property2);
end
end
end

解释:在这段代码中,classdef关键字后给出了类名,className<handle说明handle是className类的父类(继承性),className可以使用handlle类中除指明privacy(类的私有属性,只允许该类的函数或变量访问)的所有函数。className可以从多个父类中继承(多态性),方法就是在多个父类名间加入‘&’。如果一个类没有父类,则classdef后接类名后什么都不用写。properties关键字给出类的属性。methods关键字给出类的方法(函数)。特别要注意的是,如果一个类有静态方法,即该方法和具体的对象无关而是类所固有的方法,则该类函数应单独写入一个methods之内并在其后加上(Static)。
第二节 如何调用methods中的函数
代码清单2.2.1

obj = className;
obj.Func1(parameter1);
obj.Func2;
className.display(obj);

解释:这段代码是基于在清单2.1.1中给出的类定义衍生的。第一句话用类className创造了一个实例obj。第二句话实例obj调用类中函数Func1,这里要注意虽然在Func1的定义中有两个参数,一个是class_obj,另一个是parameter1,但是在调用的时候仅写parameter1就足够了,class_obj是系统自动传入的。如果参数调用的时候写class_obj则会报错(错误提示:传入过多参数)。同理,第三句话是Func2的调用,由于Func2是只有一个class_obj当参数,所以调用的时候直接省略所有的参数,连括号都省略了。当然与调用函数相对应,在写函数的时候也要注意,无论是静态methods还是普通methods,写函数的参数都必须包括class_obj,否则,会提示一个错误(错误提示:未定义以‘double’型变量为参数的函数Func1)。带按清单的最后一句话是className.display(obj),这里请注意,由于display是静态methods,上文中我们提到过,静态methods与对象无关而与类本身相关,所以调用静态方法的主体是类,本例中就是className而不是实例化得obj。同时,请注意,与普通方法不同,静态方法调用的时候必须传入实例为参数。

第三节 如何将类声明文件分布在多个文件中
与C++和Java相同,matlab在定义类中方法时,允许只在methods中声明函数而将函数的实际文件及代码单独剥离成为另一个文件。这样做的好处是可以使代码简单易懂。
Step1. 对于一个类,首先建立类文件包。方法时新建文件夹,然后更改文件夹名称为@+类名。比如@className
Step2.在@className 文件中建立classdef类定义文件。比如代码清单2.3.1
代码清单2.3.1

classdef className<handle & superclass1 & superclass2
properties
property1;
property2;
end
methods
F1 = Func1(class_obj,parameter1);
class_obj = Func2(class_obj);
value = Func3(class_obj);
end
methods(Static)
display(class_obj);
end
end

可以看到methods中只包含方法的函数声明及返回值而不包括函数的具体定义。然我们看看函数的具体定义怎么写。
Step1. 在@className 文件中建立新的m文件,内容如清单2.3.2所示
代码清单2.3.2

function F1 = Func1(class_obj,parameter1)
  F1 = class_obj.Func3+parameter1;
end

可以看到,这与普通的m文件没有任何区别。但是需要注意的是,该函数Func1中,实际上又调用了类中的另一个函数Func3。而Func3在类中事先已经声明过了。如果在类文件@className中直接建立一个m文件作为函数,而在classdef中的methods中不声明,则Func1在调用的时候无法看到该函数。所以请注意:所有被对象调用的函数以及不被对象调用而被对象的函数调用函数,除matlab内建函数(sqrt,pow,length等等),必须在类中予以声明才能使用,否则必会报错。
在经历上述步骤后,一个类就算定义完成了。但是仍然要注意,如果你想象在代码清单2.2.1中建立并使用自己的对象。则必须退出@className文件,在@className的上一级文件中才能使用。

第二章 Matlab面向对象编程基础的更多相关文章

  1. Matlab面向对象编程基础

    DeepLab是一款基于Matlab面向对象编程的深度学习工具箱,所以了解Matlab面向对象编程的特点是必要的.笔者在做Matlab面向对象编程的时候发现无论是互联网上还是书店里卖的各式Matlab ...

  2. 04747_Java语言程序设计(一)_第3章_面向对象编程基础

    链式编程 每次调用方法后,返回的是一个对象 /* * 链式编程 * 每次调用方法后,返回的是一个对象 */ class Student { public void study() { System.o ...

  3. 【学习笔记】第二章 python安全编程基础---python爬虫基础(urllib)

    一.爬虫基础 1.爬虫概念 网络爬虫(又称为网页蜘蛛),是一种按照一定的规则,自动地抓取万维网信息的程序或脚本.用爬虫最大的好出是批量且自动化得获取和处理信息.对于宏观或微观的情况都可以多一个侧面去了 ...

  4. Object-C 1.0 第三章:面向对象编程基础知识(OOP)

    1. 间接(indirection)        1.1 变量和间接(使用变量来代替一些数字)        1.2 使用文件名的间接                const  表示一个变量不允许 ...

  5. 【学习笔记】第二章 python安全编程基础---正则表达式

    一.python正则表达式 定义:正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式相匹配: 1.1RE模块:是python语言拥有全部的正则表达式功能的一个正则模块: 常见 ...

  6. Objective-C 基础教程第三章,面向对象编程基础知

    目录 Objective-C 基础教程第三章,面向对象编程基础知 0x00 前言 0x01 间接(indirection) 0x02 面向对象编程中使用间接 面向过程编程 面向对象编程 0x03 OC ...

  7. 16第一章 ASP.Net编程基础知识

    第一章        ASP.Net编程基础知识 第一章        ASP.Net编程基础知识 本章首先介绍用ASP.Net技术编制服务器端动态网页所需的网络和HTML标记语言方面的有关知识.然后 ...

  8. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  9. [.net 面向对象编程基础] (2) 关于面向对象编程

    [.net 面向对象编程基础]  (2)  关于面向对象编程 首先是,面向对象编程英文 Object-Oriented Programming 简称 OOP 通俗来说,就是 针对对象编程的意思 那么问 ...

随机推荐

  1. 耿丹CS16-2班第六次作业汇总

    Deadline: 2016-11-13 11:59 作业内容 第六次作业总结 00.本次题目分值最高为**6分/题 × 7题 + 5分/篇 × 1篇 = 47分**,其中有新解法者每题加原创分**2 ...

  2. AlloyTouch插件

    1.老样子引入js <script src="js/transform.js"></script> <script src="js/allo ...

  3. Ubuntu14.04源

    Ubuntu14.04源:   来源: http://wiki.ubuntu.org.cn/Qref/Source (包含15.04.14.10.14.04.12.04.10.04的源)     Ub ...

  4. EndNote(二)之英文引文导入方式

    在上一篇EndNote教程(一)--基本介绍中介绍了基本使用,今天将来介绍如何将常用文献引文导入EndNote中. EndNote在文献管理方面有着很多优点,可以节约很多精力.但是,不同文献查询网站可 ...

  5. VS2013 密钥 – 所有版本

    Visual Studio Ultimate 2013 KEY(密钥):BWG7X-J98B3-W34RT-33B3R-JVYW9 Visual Studio Premium 2013 KEY(密钥) ...

  6. C# 连接DB2字符串 Oracle免安装客户端连接字符串

    以下是DB2连接数据库 1)使用IBM.Data.DB2链接DB2数据库 2)必须安装DB2客户端,IBM.Data.DB2在安装的BIN里可以找到 3)注意一下DB2客户端版本问题,我的就是WIN7 ...

  7. Servlet调用过程

    (1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址. (2)浏览器根据ip地址和端口号访问服务器,组织http请求信息 ...

  8. 总结移动安全的测试点及详解allowbackup漏洞

    一.移动应用APP可能面临以下威胁: 木马--二次打包, 病毒--账号窃取, 篡改--资源篡改, 破解--广告植入, 钓鱼--信息劫持  二.移动终端APP安全评估的7个方向: 通信安全,敏感信息安全 ...

  9. url带#号,微信支付那些坑

    现在前端很多框架的前端路由都带#号,主要为了做到无刷新跳转页面. 在微信公众号做微信支付时,配置的支付路径比如是http://www.eee.com/#/order,在调微信支付的方法时错误信息是'U ...

  10. C# Lamda中类似于SQL 中的 In 功能

    首先,在程序中接受一个数组 例如:int[] s=[1,2,3]; 在Lamda表达式中使用如下: db.userinfo.where(u=>s.Contains(u.id)); 等同于sql语 ...