面向对象Matlab编程小demo

来源:互联网 发布:茶空间网络组织架构 编辑:程序博客网 时间:2024/05/06 07:39

1.前言

matlab初学者,在编写matlab代码时,感觉代码比较乱,不好写也不易看,突然想到是否可以使用面向对象的思想去编写matlab程序,在网上找了找,果然有一本专门讲解面向对象的matlab书,并且作者还讲解了设计模式,很不错。自己也尽量的使用之前编写Java程序的方式去写,简单地写一个demo程序,以方便自己以后查看。

参考书籍:《MATLAB面向对象编程---从入门到设计模式》作者 徐潇,李远。感谢两位作者

操作系统:win7

matlab版本:R2010b

2.步骤

这个简单的demo的功能是每隔一段时间,向两个观察者发送消息,接收者收到消息后打印消息

(1)建立一个文件夹叫demo,打开它,再逐步建立文件夹"+cn" --> "+jxm" --> "+demo",类似于Java中的包一样,注意在matlab中的包名前要加"+"


(2)点击"+demo"文件,右键-->“New File”-->"Class"建立Publisher类

classdef Publisher < handle    events        MyEvent1;%定义事件1        MyEvent2;%定义事件2    end        properties        deltaTime;%间隔时间,单位为毫秒        myTimer;%Timer        count = 0;%计数,5次后关闭timer    end        methods        %构造函数        function obj = Publisher(deltaTime)            obj.deltaTime = deltaTime;            %timer            obj.myTimer = timer('TimerFcn',@obj.timerFunction,'Period',obj.deltaTime/1000,'ExecutionMode','fixedrate');        end                %启动timer函数        function start(obj)            start(obj.myTimer);        end                %停止timer函数        function stop(obj)            ts=timerfind;            if (~isempty(ts))                stop(ts);                delete(ts);            end        end                %timer响应函数        function timerFunction(obj,timer,event)            %通知观察者1            obj.notify('MyEvent1');            %通知观察者2,传递消息"Hello Observer!"            msg = cn.jxm.demo.Msg('Hello Observer!');            obj.notify('MyEvent2',msg);                        obj.count = obj.count + 1;            if(obj.count == 5)                obj.stop();            end        end            end    end
(2)同样方法建立Msg类,注意该类的父类

classdef Msg < event.EventData        properties        str;    end        methods        function obj = Msg(str)            obj.str = str;        end    end    end

(3)建立Observer1类

classdef Observer1 < handle    properties        str = 'I am Observer1, response to MyEvent1';    end        methods        %添加消息发布者        function addPublisher(obj,publisher)            publisher.addlistener('MyEvent1',@obj.listenerFunction);        end        %收到消息后的响应        function listenerFunction(obj,src,data)            disp(obj.str);        end    end    end

(4)建立Observer2类

classdef Observer2 < handle        properties         str = 'I am Observer2, response to MyEvent2.The msg is: ';    end        methods        %添加消息发布者        function addPublisher(obj,publisher)            publisher.addlistener('MyEvent2',@obj.listenerFunction);        end        %收到消息后的响应        function listenerFunction(obj,src,data)            disp([obj.str,data.str]);        end    end    end

(5)建立测试类Test

classdef Test        properties    end        methods(Static)        function main()            publsher = cn.jxm.demo.Publisher(1000);            observer1 = cn.jxm.demo.Observer1();            observer1.addPublisher(publsher);            observer2 = cn.jxm.demo.Observer2();            observer2.addPublisher(publsher);                        publsher.start();        end    end    end

3.测试

在matlab中输入:

 import cn.jxm.demo.Test

Test.main()

得到结果



0 0
原创粉丝点击