MATLAB OOP 实例 : 一个简单的BankAccout类
2011-05-03 23:42
309 查看
该例来自MATLAB OOP user manual. 程序加入一些注释(部分采用了C++的一些术语)旨在用这个例子说明一些简单的MATLAB OOP 语法
BankAccount Class
% BandAccount.m 文件 classdef BankAccount < handle %继承一个句柄基类 句柄类自动管理内存 properties (Hidden) %使用Hidden关键词修饰属性 在MATLAB的类display中不会显示这个属性 %但是仍然具有public的属性,可以在外部直接访问 AccountStatus = 'open' end properties (SetAccess = private ) %SetAccess声明访问权限 %这里Private意味着该成员只能通过成员函数access AccountNumber AccountBalance = 0 ; end events %定义一个事件,叫做存款不足 InsufficientFunds end methods %Constructor将接受初始化参数,返回一个新的obj function BA = BankAccount(AccountNumber, InitialBalance) BA.AccountNumber = AccountNumber ; BA.AccountBalance = InitialBalance ; AccountManager.addAccount(BA); %在这里使用了AccountManager类的static方法,即不需要声明 %AccountManager对象就可以直接使用这个方法 end %由于各个对象之间是共享成员函数的,所以需要通过参数列表把具体的obj传递 %给函数,在函数体内,访问成员变量也要加上obj的名字 这是nargin = 2 function deposit(BA, amt) %这个函数实际只接受一个参数 BA.AccountBalance = BA.AccountBalance + amt ; if BA.AccountBalance > 0 BA.AccountStatus = 'open'; end end function withdraw(BA,amt) if(strcmp (BA.AccountStatus ,'closed') && BA.AccountBalance<0 ) disp(['Account',num2str(BA.AccountNumber),'has been closed']); return end newbal = BA.AccountBalance - amt ; BA.AccountBalance = newbal ; %如果newbal小于零,将触发一个InsufficientFunds事件,对象在这里是一个 %通知者,但是并没有注明将通知谁,register的过程在监听方完成 %这里是一个Observer Pattern if newbal < 0 notify(BA,'InsufficientFunds') %需要注明是哪个obj发出了这个通知 end end %使用缺省的析构函数 end end
AccountManger Class
% AccountManager.m classdef AccountManager methods (Static) %静态方法,不需要实例化也可以使用其中函数 function assignStatus(BA) if BA.AccountBalance < 0 %如果得到了合适的Reference %这个经理类可以直接访问private属性 if BA.AccountBalance < -200 BA.AccountStatus = 'closed'; else BA.AccountStatus = 'overdrawn'; end end end function addAccount(BA) %BA是继承自handle class %addlistener是handle class的一个方法 addlistener(BA,'InsufficientFunds',... @(src,events)AccountManager.assignStatus(src)); end end end
Driver.m
clear; format long ; format compact ; BA = BankAccount(1234567,500); BA.AccountNumber BA.AccountBalance BA.AccountStatus BA.withdraw(600) %注意这个成员函数的调用方法 %没有使用BA.withdraw(BA,600) %第一个参数是隐藏的 BA.AccountBalance BA.AccountStatus BA.withdraw(200) BA.AccountBalance BA.AccountStatus BA.withdraw(100) %这时候不允许在取钱 %Balance应该freeze在-300 BA.AccountBalance BA.deposit(900) BA.AccountBalance BA.AccountStatus % 输出省略
相关文章推荐
- 一个简单的Matlab面向对象编程实例
- 关于支持向量机(SVM)的一个简单应用实例及matlab代码
- 《Applications=Code+Markup》读书札记(2)——创建一个简单的 WPF 程序的代码结构及关于 Window 实例位置设置问题
- 利用Maven快速创建一个简单的spring boot 实例
- SWT组件的生命周期(续一个简单的SWT程序实例及详解)
- C#调用webservice一个简单实例
- 仿实例开发----一个简单的视频播放器
- 一个简单的springMVC的定时任务实例
- 一个简单的ASP.NET Forms 身份认证的实例方法
- struts2入门-第一个例子==》第一个struts2实例——HelloWorld==》Struts2.0搭建和简单实例==>写一个Steuts2的经典入门案例,做了一个登陆程序作为入门例子
- 最简单的一个makefile实例
- 一个简单求和函数的matlab实现(带程序耗时功能)
- java 使用线程做的一个简单的ATM存取款实例代码
- (Java2D 学习笔记系列) (一)一个简单的图像填充实例及其分析理解
- spring-dm 一个简单的实例
- WPF 只允许运行一个实例(简单代码)
- 使用nRF51822/nRF51422创建一个简单的BLE应用 ---入门实例手册(中文)之三
- 一个简单的php MVC实例
- 跟一个从零开始学excel vba的新手的对话过程(简单程序实例)
- 一个完整的简单jsp+servlet实例,实现简单的登录