Object Oriented & -Driven Programming with MATLAB

Ameya Deoras

© 2014 The MathWorks, Inc.1 Agenda

. Object-oriented programming in MATLAB – Classes in MATLAB – Advantages of object oriented design – Example: Designing a portfolio tracker

. Events in MATLAB – Event-driven programming fundamentals – Writing event handlers – Example: Building a real-time portfolio tracker

2 Case Study: Portfolio Tracker

45.8 61.88 DD.N JNJ.N 45.7 61.86

45.6 61.84

45.5 61.82

61.8 06:05 06:06 06:07 06:06 06:07 49 -660 WMT.N Portfolio 48.9

48.8 -665

48.7 06:06 06:07 78.8 MMM.N -670 78.6

78.4

78.2 -675 06:04 06:05 06:06 06:07 06:02 06:03 06:04 06:05 06:06 06:07

. Subscribe to real-time quotes for 4 equities from Reuters service . Track real-time combined portfolio valueVisualize instrument & portfolio history graphically in real-time

3 What is a program? Data

x = 12 while (x < 100) x = x+1 if (x == 23) x = 12 disp('Hello') while (x < 100) end x = x+1 end if (x == 23) disp('Hello') end Assignment end Looping Test Increment Test to Act Code Take Action End End

Actions 4 Progression of Programming Techniques

value Data variable structure

Level of Abstraction / Sophistication

function script command line Algorithm

5 Progression of Programming Techniques

value Data variable structure

(properties) Level of Abstraction / Sophistication class (methods)

function script command line Algorithm

6 Object-Oriented Terminology

. Class – Outline of an idea AKAM – Properties (data) GOOG YHOO MSFT – Methods (algorithms) ORCL An element of the set – object . Object – Specific example of a class – Instance Defined set – class Eg. Stock

7 From Structures to Objects

Example: Class MarketInstrument with properties Ticker and Price.

Operation Structure Class/Object

Initialization, x = struct; x = MarketInstrument; Property Access x.Ticker = 'GOOG'; x.Ticker = 'GOOG'; x.Price = 550; x.Price = 550;

Erroneous x.ticker = 'MSFT'; x.ticker = 'MSFT'; property name No public field ticker exists for class MarketInstrument

Erroneous x.Price = 'blah'; x.Price = 'blah'; property value Error using MarketInstrument/set.Price Price must be a scalar numeric value

8 Unique Advantages of Classes & Objects

. Property Access Control, Error Checking – Specify default values – Create constants – Make values interdependent – Execute methods when properties change

properties Components % Components of portfolio Quantity % Number of units of each component end

properties (SetAccess = protected) CurrentCompPrice % Up-to-date component price end

properties (Dependent) CurrentPrice % Up-to-date price of portfolio end 9 Unique Advantages of Classes & Objects

. Property Access Control, Error Checking – Specify default values – Create constants – Make values interdependent – Execute methods when properties change

>> x.Price = 'twelve';

set.Price(obj, val) assert(isnumeric(val))

Error using set.Price Price must be a numeric value

10 Unique Advantages of Classes & Objects

. Property Access Control, Error Checking . Reference Semantics

classdef Instrument

>> x = Instrument; function myFun(y) >> x.Price = 12; y.Price = 15; >> myFun(x);

>> x.Price ans = 12

11 Unique Advantages of Classes & Objects

. Property Access Control, Error Checking . Reference Semantics

classdef Instrument < handle

>> x = Instrument; function myFun(y) >> x.Price = 12; y.Price = 15; >> myFun(x);

>> x.Price ans = 15

12 Unique Advantages of Classes & Objects

. Property Access Control, Error Checking . Reference Semantics . Overload default functions & operations – plot, disp, size – [ ], +, /, &, ()

>> x.Price = 12; function disp(obj) >> x disp(['My price is $'... My price is $12 num2str(obj.Price)])

13 Unique Advantages of Classes & Objects

. Property Access Control, Error Checking . Reference Semantics . Overload default functions & operations . Automatic documentation

14 Unique Advantages of Classes & Objects

. Property Access Control, Error Checking . Reference Semantics . Overload default functions & operations . Automatic documentation . Support for MATLAB-like constructs – Dynamic allocation – Vectorized access of properties >> x(2) = MarketInstrument;

>> x(1).Price = 12; >> x(2).Price = 15; >> x(3).Price = 20; >> y = [x.Price] y = 12 15 20

15 Unique Advantages of Classes & Objects

. Property Access Control, Error Checking . Reference Semantics . Overload default functions & operations – plot, disp, size – [ ], +, /, &, . Automatic documentation . Support for MATLAB-like constructs – Dynamic allocation – Vectorized access of properties

Plus all the benefits of OOP in general (encapsulation, inheritance…)

16 Agenda

. Object-oriented programming in MATLAB – Classes in MATLAB – Advantages of object oriented design – Example: Designing a portfolio tracker

. Events in MATLAB – Event-driven programming fundamentals – Writing event handlers – Example: Building a real-time portfolio tracker

17 Introduction to Event-Driven Programming

! ! !

time

Terminology . Event handler/Callback: Function called to respond to event . Listener: Object that monitors for a specific event & calls handler . Event data: Data associated with event

18 Procedural vs Event-Driven Implementation

Instrument Price setPrice(newPrice) display()

Goal: When Instrument price changes, display new price

Procedural Event-Driven function setPrice(obj, newPr) function setPrice(obj, newPr) obj.price = newPr; obj.price = newPr; display(obj) notify(obj,'priceChanged') end end

addlistener(obj,... 'priceChanged', @obj.display)

19 Procedural vs Event-Driven Implementation

Instrument Portfolio Price Instruments setPrice(newPrice) Value display() updateValue()

Goal: When Instrument price changes, display new price and update value of Portfolios

Event-Driven function setPrice(obj, newPr) obj.price = newPr; notify(obj,'priceChanged') end

addlistener(instObj,'priceChanged', @instObj.display) addlistener(instObj,'priceChanged', @portObj.updateValue)

20 Sources of Events in MATLAB

MATLAB MATLAB MATLAB timer Graphics Classes Object

Datafeed External Trading Toolbox Interfaces Toolbox (Bloomberg, TT, IB, (Bloomberg, CQG) (COM, Java, .NET) Reuters)

22 Putting it Together: Portfolio Tracker

45.8 61.88 DD.N JNJ.N 45.7 61.86

45.6 61.84

45.5 61.82

61.8 06:05 06:06 06:07 06:06 06:07 49 -660 WMT.N Portfolio 48.9

48.8 -665

48.7 06:06 06:07 78.8 MMM.N -670 78.6

78.4

78.2 -675 06:04 06:05 06:06 06:07 06:02 06:03 06:04 06:05 06:06 06:07

. Subscribe to real-time quotes for 4 equities (MarketInstrument) . Track real-time combined portfolio value (MarketPortfolio) . Handle market events from Reuters service . Visualize instrument & portfolio history graphically in real-time

23 Benefits of OOP in MATLAB

. Separate from implementation – More checks and balances and control over how your code is used

. Manage complex data types with familiar interfaces – Custom objects that override default operators and functions

. Pass by reference – Maintain one true copy of your data

. Use event-driven programming – Simplify design of complex real-time applications

24 Additional Resources

25 Questions and Answers

26