Introduction to OOP
OOP in MATLAB
                      Lecture 5
                Advanced MATLAB:
            Object-Oriented Programming
                         Matthew J. Zahr
                            CME 292
              Advanced MATLAB for Scientific Computing
                        Stanford University
                        7th October 2014
CME 292: Advanced MATLAB for SC     Lecture 5
                      Introduction to OOP
                         OOP in MATLAB
1   Introduction to OOP
2   OOP in MATLAB
     Class Definition and Organization
     Classes
        CME 292: Advanced MATLAB for SC     Lecture 5
                    Introduction to OOP
                       OOP in MATLAB
What is OOP?
    Procedural programming is a list of instructions for the computer to
    perform to accomplish a given task
        Code and data
        No association between functions and the data on which they operate
        Languages: FORTRAN, C
    Object-oriented programming (OOP) is a programming paradigm
    organized around objects equipped with data fields and associated
    methods.
        Data (state) and methods (behavior) associated via objects
        Objects used to interact with each other
        Languages: C++, Objective-C, Smalltalk, Java, C#, Perl, Python, Ruby,
        PHP
      CME 292: Advanced MATLAB for SC     Lecture 5
                      Introduction to OOP
                         OOP in MATLAB
Why use OOP?
 OOP enables a level of modularity and abstraction not generally available in
 procedural languages
     Increased code understanding
     Code maintenance
     Code expansion/evolution
        CME 292: Advanced MATLAB for SC     Lecture 5
                      Introduction to OOP
                         OOP in MATLAB
OOP Fundamentals
     Class: template for creating objects, defining properties and methods,
     as well as default values/behavior
     Object: instance of a class that has a state (properties) and behavior
     (methods)
     Properties: data associated with an object
     Methods: functions (behavior) defined in a class and associated with
     an object
     Attributes: modify behavior of classes and class components
     Inheritance: object or class (subclass) derived from another object or
     class (superclass)
     Polymorphism: single interface to entities of different types
 Other OOP features include events and listeners, which will not be covered
        CME 292: Advanced MATLAB for SC     Lecture 5
                       Introduction to OOP   Class Definition and Organization
                          OOP in MATLAB      Classes
Class Components in MATLAB
     classdef block
         Contains class definition, class attributes, and defines superclasses
     properties block
         Defines all properties to be associated with a class instance
         Defines attributes of all properties and default values
     methods block
         Defines methods associated with the class and their attributes
         First method must have the same name as the class, called the constructor
     event block
     enumeration block
  http:
  //www.mathworks.com/help/matlab/matlab_oop/class-components.html
        CME 292: Advanced MATLAB for SC      Lecture 5
                      Introduction to OOP   Class Definition and Organization
                         OOP in MATLAB      Classes
Class Block
     Class definitions - blocks of code delineated with classdef .. end
     keywords
     Specify attributes and superclasses
     Contains properties, methods, events subblocks
     One class definition per file
     Only comments and blanks can precede classdef
       CME 292: Advanced MATLAB for SC      Lecture 5
                      Introduction to OOP   Class Definition and Organization
                         OOP in MATLAB      Classes
Properties: Definition/Initialization
      Properties are variables associated a particular class
      Defined in special properties block
      Can be multiple properties blocks, each with own attributes
        CME 292: Advanced MATLAB for SC     Lecture 5
                        Introduction to OOP   Class Definition and Organization
                           OOP in MATLAB      Classes
Properties: Initialization/Attributes
   1   classdef class name
   2       properties
   3           PropertyName
   4       end
   5       properties (SetAccess=private,GetAccess=public)
   6           PropertyName = 'some text';
   7           PropertyName = sin(pi/12);
   8       end
   9   end
       Property attributes: http://www.mathworks.com/help/matlab/
       matlab_oop/property-attributes.html
          CME 292: Advanced MATLAB for SC     Lecture 5
                        Introduction to OOP   Class Definition and Organization
                           OOP in MATLAB      Classes
Methods
    Methods are MATLAB functions associated with a particular class
    Defined in special methods block
    Can be multiple methods blocks
      1   classdef ClassName
      2      methods
      3          function obj = ClassName(arg1,arg2,..)
      4          end
      5          function normal method(obj,arg1,..)
      6          end
      7      end
      8      methods (Static = true)
      9          function static method(arg1,..)
     10          end
     11      end
     12   end
          CME 292: Advanced MATLAB for SC     Lecture 5
                        Introduction to OOP   Class Definition and Organization
                           OOP in MATLAB      Classes
Value vs. Handle Class
     There are two fundamentally different types of classes in MATLAB
         Value class
         Handle class
     An instance of a value class behaves similar to most MATLAB objects
         A variable containing an instance of a value class owns the data associated
         to it
         Assigning object to new variable copies the variable
     Conversely, an instance of a handle class behaves similar to MATLAB
     graphics handles
         A variable containing an instance of a handle class is a reference to the
         associated data and methods
         Assigning object to a new variables makes a new reference to same object
         Events, listeners, dynamic properties
     http://www.mathworks.com/help/matlab/handle-classes.html
       CME 292: Advanced MATLAB for SC        Lecture 5
                       Introduction to OOP   Class Definition and Organization
                          OOP in MATLAB      Classes
Examples
  The remainder of this lecture will be done in the context of two examples
      polynomial.m
          A value class for handling polynomials of the form
                             p(x) = c0 + c1 x + c2 x2 + · · · + cm xm
           in a convenient and simple way
           Simple interface for performing operations of polynomials to create new
           ones
      dsg elem def.m
          A handle class for graphically deforming the deformation of a body
  Both examples are incomplete. We will (mostly) complete polynomial.m
  throughout the remainder of the lecture. You will have the opportunity to
  extend both in Homework 3.
         CME 292: Advanced MATLAB for SC     Lecture 5
                      Introduction to OOP   Class Definition and Organization
                         OOP in MATLAB      Classes
polynomial   class
     classdef polynomial
         %POLYNOMIAL
         properties (GetAccess=public,SetAccess=private)
             coeffs=0;
             order =0;
         end
         methods
             function    self = polynomial(arg)
             function    [tf] = iszero(poly)
             function    [y] = evaluate(poly,x)
             function    [apoly] = plus(poly1,poly2)
             function    [mpoly] = minus(poly1,poly2)
             function    [ipoly] = integrate(poly,const)
             function    [dpoly] = differentiate(poly)
             function    [iseq] = eq(poly1,poly2)
             function    [] = plot it(poly,x,pstr,ax)
             function    [] = disp(poly)
        CME 292: Advanced MATLAB for SC     Lecture 5