object-oriented programmingstatmath.wu.ac.at/~hornik/atc/atc_oop.pdf · basics — every object has...
TRANSCRIPT
![Page 1: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/1.jpg)
Object-OrientedProgramming
Kurt Hornik
October 8, 2018
![Page 2: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/2.jpg)
Outline
� Motivation
� S3 Classes
� S4 Classes
� Reference Classes
Slide 2
![Page 3: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/3.jpg)
Needs in data analysis
� Support structural thinking (numeric vectors, factors, data frames,results of fitting a model, . . . )
� Support functional thinking (“generic” functions)� Allow for simple extensibility (printing, plotting, summarizing, . . . )
Slide 3
![Page 4: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/4.jpg)
Needs in data analysis
� Support structural thinking (numeric vectors, factors, data frames,results of fitting a model, . . . )
� Support functional thinking (“generic” functions)
� Allow for simple extensibility (printing, plotting, summarizing, . . . )
Slide 3
![Page 5: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/5.jpg)
Needs in data analysis
� Support structural thinking (numeric vectors, factors, data frames,results of fitting a model, . . . )
� Support functional thinking (“generic” functions)� Allow for simple extensibility (printing, plotting, summarizing, . . . )
Slide 3
![Page 6: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/6.jpg)
Outline
� Motivation
� S3 Classes
� S4 Classes
� Reference Classes
Slide 4
![Page 7: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/7.jpg)
Basic idea
� Specify the class via the class attribute
� Have a way of making a function “generic”� The “method” of generic foo for class bar is called foo.bar� Allow for default methods called foo.default
Slide 5
![Page 8: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/8.jpg)
Basic idea
� Specify the class via the class attribute� Have a way of making a function “generic”
� The “method” of generic foo for class bar is called foo.bar� Allow for default methods called foo.default
Slide 5
![Page 9: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/9.jpg)
Basic idea
� Specify the class via the class attribute� Have a way of making a function “generic”� The “method” of generic foo for class bar is called foo.bar
� Allow for default methods called foo.default
Slide 5
![Page 10: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/10.jpg)
Basic idea
� Specify the class via the class attribute� Have a way of making a function “generic”� The “method” of generic foo for class bar is called foo.bar� Allow for default methods called foo.default
Slide 5
![Page 11: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/11.jpg)
Outline
� Motivation
� S3 Classes� Classes
� Generic and Method Functions
� Group Methods
� Odds and ends
� S4 Classes
� Reference ClassesSlide 6
![Page 12: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/12.jpg)
Manipulating the class info
� Function class() gets the class attribute, and there is a replacementfunction for setting it:R> x <- 1 : 3R> x
[1] 1 2 3
R> class(x) <- "bar"R> x
[1] 1 2 3attr(,"class")[1] "bar"
� If e.g. class(x) is c("bar", "baz", "grr"), then x belongs to classbar and inherits from baz, then grr, etc.
� Function unclass() removes the class(es)
Slide 7
![Page 13: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/13.jpg)
Manipulating the class info
� Function class() gets the class attribute, and there is a replacementfunction for setting it:R> x <- 1 : 3R> x
[1] 1 2 3
R> class(x) <- "bar"R> x
[1] 1 2 3attr(,"class")[1] "bar"
� If e.g. class(x) is c("bar", "baz", "grr"), then x belongs to classbar and inherits from baz, then grr, etc.
� Function unclass() removes the class(es)
Slide 7
![Page 14: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/14.jpg)
Manipulating the class info
� Function class() gets the class attribute, and there is a replacementfunction for setting it:R> x <- 1 : 3R> x
[1] 1 2 3
R> class(x) <- "bar"R> x
[1] 1 2 3attr(,"class")[1] "bar"
� If e.g. class(x) is c("bar", "baz", "grr"), then x belongs to classbar and inherits from baz, then grr, etc.
� Function unclass() removes the class(es)
Slide 7
![Page 15: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/15.jpg)
Manipulating the class info
� Function class() gets the class attribute, and there is a replacementfunction for setting it:R> x <- 1 : 3R> x
[1] 1 2 3
R> class(x) <- "bar"R> x
[1] 1 2 3attr(,"class")[1] "bar"
� If e.g. class(x) is c("bar", "baz", "grr"), then x belongs to classbar and inherits from baz, then grr, etc.
� Function unclass() removes the class(es)
Slide 7
![Page 16: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/16.jpg)
Outline
� Motivation
� S3 Classes� Classes
� Generic and Method Functions
� Group Methods
� Odds and ends
� S4 Classes
� Reference ClassesSlide 8
![Page 17: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/17.jpg)
Method dispatch
� A generic function tries to find methods for its primary argument
� First, using the GENERIC.CLASS naming convention for each class theprimary arg inherits from
� If no such method found, try GENERIC.default (default method)� If not found either: error.
Slide 9
![Page 18: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/18.jpg)
Method dispatch
� A generic function tries to find methods for its primary argument� First, using the GENERIC.CLASS naming convention for each class the
primary arg inherits from
� If no such method found, try GENERIC.default (default method)� If not found either: error.
Slide 9
![Page 19: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/19.jpg)
Method dispatch
� A generic function tries to find methods for its primary argument� First, using the GENERIC.CLASS naming convention for each class the
primary arg inherits from� If no such method found, try GENERIC.default (default method)
� If not found either: error.
Slide 9
![Page 20: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/20.jpg)
Method dispatch
� A generic function tries to find methods for its primary argument� First, using the GENERIC.CLASS naming convention for each class the
primary arg inherits from� If no such method found, try GENERIC.default (default method)� If not found either: error.
Slide 9
![Page 21: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/21.jpg)
Creating generics
Typically via UseMethod(). E.g.,
R> foo <- function(x, ...) UseMethod("foo")R> foo
function(x, ...) UseMethod("foo")
Slide 10
![Page 22: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/22.jpg)
Creating methods
Simply create functions obeying the GENERIC.CLASS naming convention.E.g.,
R> foo.bar <- function(x, ...) cat("I am here\n")R> foo.bar
function(x, ...) cat("I am here\n")
Basic dispatch by calling the generic:
R> foo(x)
I am here
Slide 11
![Page 23: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/23.jpg)
Explicitly invoking inheritance
Function NextMethod() can be used within methods to call the nextmethod. E.g.,
R> test <- function(x) UseMethod("test")R> test.c1 <- function(x) { cat("c1\n"); NextMethod(); x }R> test.c2 <- function(x) { cat("c2\n"); NextMethod(); x }R> test.c3 <- function(x) { cat("c3\n"); NextMethod(); x }R> x <- 1R> class(x) <- c("c1", "c2")
What will happen?
R> test(x)
Slide 12
![Page 24: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/24.jpg)
Dispatching on other arguments
Specify argument for dispatch in the UseMethod() call. E.g.,
foo <- function(x, y, ...) UseMethod("foo", y)
Slide 13
![Page 25: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/25.jpg)
Testing and coercion
No “formal” testing (predicate) for and coercion to S3 classes. Byconvention, is.bar() and as.bar(). E.g.,
R> is.bar <- function(x) inherits(x, "bar")R> as.bar <- function(x) if(is.bar(x)) x else bar(x)
(assuming that bar() creates objects of class "bar").
Slide 14
![Page 26: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/26.jpg)
Outline
� Motivation
� S3 Classes� Classes
� Generic and Method Functions
� Group Methods
� Odds and ends
� S4 Classes
� Reference ClassesSlide 15
![Page 27: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/27.jpg)
Motivation
Issues:
� How can we e.g. add or compare objects of a certain class?� Or more generally, e.g. compare with objects not in the same class?
Need a dispatch mechanism for “operators” (such as "<") which worksin both arguments!
Slide 16
![Page 28: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/28.jpg)
Group methods
Mechanism:
� Operators grouped in three categories (Math, Ops, Summary)
� Invoked if the operands correspond to the same method, or one to amethod that takes precedence; otherwise, the default method is used.
� Class methods dominate group methods.� Dispatch info available: .Method, .Generic, .Group, .Class
Slide 17
![Page 29: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/29.jpg)
Group methods
Mechanism:
� Operators grouped in three categories (Math, Ops, Summary)� Invoked if the operands correspond to the same method, or one to a
method that takes precedence; otherwise, the default method is used.
� Class methods dominate group methods.� Dispatch info available: .Method, .Generic, .Group, .Class
Slide 17
![Page 30: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/30.jpg)
Group methods
Mechanism:
� Operators grouped in three categories (Math, Ops, Summary)� Invoked if the operands correspond to the same method, or one to a
method that takes precedence; otherwise, the default method is used.� Class methods dominate group methods.
� Dispatch info available: .Method, .Generic, .Group, .Class
Slide 17
![Page 31: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/31.jpg)
Group methods
Mechanism:
� Operators grouped in three categories (Math, Ops, Summary)� Invoked if the operands correspond to the same method, or one to a
method that takes precedence; otherwise, the default method is used.� Class methods dominate group methods.� Dispatch info available: .Method, .Generic, .Group, .Class
Slide 17
![Page 32: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/32.jpg)
Existing group methods
Math abs sign sqrt floor ceiling trunc round signifexp log cos sin tan acos asin atancosh sinh tanh acosh asinh atanhlgamma gamma gammaCody digammatrigamma tetragamma pentagammacumsum cumprod cummax cummin
Ops + - * / ^ %% %/%& | !== != < <= >= >
Summary all any sum prod min max range
Slide 18
![Page 33: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/33.jpg)
Outline
� Motivation
� S3 Classes� Classes
� Generic and Method Functions
� Group Methods
� Odds and ends
� S4 Classes
� Reference ClassesSlide 19
![Page 34: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/34.jpg)
Internal generics
In addition to UseMethod dispatch and group methods, some functionsdispatch “internally” (DispatchOrEval() in the underlying C code ofbuiltin functions):
� subscripting and subassigning ([, [[, $)� length dim dimnames c unlist� as.character as.vector� many is.xxx functions for builtins data types xxx
Slide 20
![Page 35: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/35.jpg)
Strengths and weaknesses
� Simple and powerful as long as the naming convention is adhered to
� No formal class structure (can have objects with class c("foo", "U")and c("foo", "V"), no structural integrity, . . . )
� No flexible dispatch on several arguments
(Some of these weaknesses disappear for code in namespaces.)
Slide 21
![Page 36: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/36.jpg)
Strengths and weaknesses
� Simple and powerful as long as the naming convention is adhered to� No formal class structure (can have objects with class c("foo", "U")
and c("foo", "V"), no structural integrity, . . . )
� No flexible dispatch on several arguments
(Some of these weaknesses disappear for code in namespaces.)
Slide 21
![Page 37: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/37.jpg)
Strengths and weaknesses
� Simple and powerful as long as the naming convention is adhered to� No formal class structure (can have objects with class c("foo", "U")
and c("foo", "V"), no structural integrity, . . . )� No flexible dispatch on several arguments
(Some of these weaknesses disappear for code in namespaces.)
Slide 21
![Page 38: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/38.jpg)
Outline
� Motivation
� S3 Classes
� S4 Classes
� Reference Classes
Slide 22
![Page 39: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/39.jpg)
Basics
� Every object has exactly one class
� All objects in a class must have the same structure� All methods for a new-style generic must have exactly the same
formal arguments (could be ...)� Can dispatch according to the signature of arbitrarily many arguments
Slide 23
![Page 40: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/40.jpg)
Basics
� Every object has exactly one class� All objects in a class must have the same structure
� All methods for a new-style generic must have exactly the sameformal arguments (could be ...)
� Can dispatch according to the signature of arbitrarily many arguments
Slide 23
![Page 41: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/41.jpg)
Basics
� Every object has exactly one class� All objects in a class must have the same structure� All methods for a new-style generic must have exactly the same
formal arguments (could be ...)
� Can dispatch according to the signature of arbitrarily many arguments
Slide 23
![Page 42: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/42.jpg)
Basics
� Every object has exactly one class� All objects in a class must have the same structure� All methods for a new-style generic must have exactly the same
formal arguments (could be ...)� Can dispatch according to the signature of arbitrarily many arguments
Slide 23
![Page 43: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/43.jpg)
Outline
� Motivation
� S3 Classes
� S4 Classes� Classes and Inheritance
� Generic and Method Functions
� Group Methods
� Reference Classes
Slide 24
![Page 44: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/44.jpg)
Basics
Classes are created by setClass():
� First arg is the name of the class� Arg representation specifies the slots
R> setClass("fungi",+ representation(x = "numeric", y = "numeric",+ species = "character"))
Slide 25
![Page 45: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/45.jpg)
Basics
Classes are created by setClass():
� First arg is the name of the class
� Arg representation specifies the slots
R> setClass("fungi",+ representation(x = "numeric", y = "numeric",+ species = "character"))
Slide 25
![Page 46: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/46.jpg)
Basics
Classes are created by setClass():
� First arg is the name of the class� Arg representation specifies the slots
R> setClass("fungi",+ representation(x = "numeric", y = "numeric",+ species = "character"))
Slide 25
![Page 47: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/47.jpg)
Basics (ctd.)
Creation can use existing classes:
R> setClass("xyloc",+ representation(x = "numeric",+ y = "numeric"))R> setClass("fungi",+ representation("xyloc",+ species = "character"))
Slide 26
![Page 48: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/48.jpg)
Basics (ctd.)
Existing classes can be examined using getClass():
R> getClass("fungi")
Class "fungi" [in ".GlobalEnv"]
Slots:
Name: species x yClass: character numeric numeric
Extends: "xyloc"
Slide 27
![Page 49: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/49.jpg)
Basics (ctd.)
New instances can be created using new()
R> f1 <- new("fungi", x = runif(5), y = runif(5),+ species = sample(letters[1:3], 5, replace = TRUE))
Slide 28
![Page 50: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/50.jpg)
Basics (ctd.)
Such instances can be inspected by typing their name (which callsshow() instead of print())
R> f1
An object of class "fungi"Slot "species":[1] "c" "a" "c" "b" "a"
Slot "x":[1] 0.53827758 0.72234531 0.04228939 0.46204104 0.20706792
Slot "y":[1] 0.69083106 0.07209983 0.51760378 0.12305639 0.45677010
Slide 29
![Page 51: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/51.jpg)
Basics (ctd.)
The slots can be accessed using @:
R> f1@x
[1] 0.53827758 0.72234531 0.04228939 0.46204104 0.20706792
Slide 30
![Page 52: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/52.jpg)
Basics (ctd.)
Typically, there would be a creator function:
R> fungi <- function(x, y, species)+ new("fungi", x = x, y = y, species = species)
so that users do not need to call new() themselves.
Slide 31
![Page 53: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/53.jpg)
Basics (ctd.)
Using the creator:
R> f2 <- fungi(runif(3), runif(3), letters[1 : 3])R> f2
An object of class "fungi"Slot "species":[1] "a" "b" "c"
Slot "x":[1] 0.3760097 0.0144067 0.6897521
Slot "y":[1] 0.6598063 0.6988959 0.7950575
Slide 32
![Page 54: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/54.jpg)
Validity checking
Can specify restrictions for “valid” objects via the validity argument tosetClass or via setValidity (note: sets to the value of the currentversion.)
R> ## A valid "xyloc" object has the same numberR> ## of x and y values:R> .valid_xyloc_object <- function(object) {+ nx <- length(object@x)+ ny <- length(object@y)+ if(nx == ny)+ TRUE+ else+ sprintf("Unequal x, y lengths: %d, %d", nx, ny)+ }
Slide 33
![Page 55: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/55.jpg)
Validity checking
R> setValidity("xyloc", .valid_xyloc_object)
Class "xyloc" [in ".GlobalEnv"]
Slots:
Name: x yClass: numeric numeric
Known Subclasses: "fungi"
R> xy1 <- new("xyloc", x = runif(5), y = runif(5))R> xy2 <- tryCatch(new("xyloc", x = runif(5), y = runif(3)),+ error = identity)R> strwrap(conditionMessage(xy2))
[1] "invalid class \"xyloc\" object: Unequal x, y lengths: 5, 3"
Slide 34
![Page 56: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/56.jpg)
Validity checking
R> ## We can still do bad things "directly":R> xy1@y <- 3R> ## However, now validObject() will throw an error ...R> tc <- tryCatch(validObject(xy1), error = identity)R> tc
<simpleError in validObject(xy1): invalid class "xyloc" object: Unequal x, y lengths: 5, 1>
R> conditionMessage(tc)
[1] "invalid class \"xyloc\" object: Unequal x, y lengths: 5, 1"
Slide 35
![Page 57: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/57.jpg)
Prototypes
� Classes have prototypes stored with their definition
� Default prototype: for each slot a new object of that class� Other prototypes might be more appropriate; can be specified viaprototype arg to setClass()
Slide 36
![Page 58: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/58.jpg)
Prototypes
� Classes have prototypes stored with their definition� Default prototype: for each slot a new object of that class
� Other prototypes might be more appropriate; can be specified viaprototype arg to setClass()
Slide 36
![Page 59: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/59.jpg)
Prototypes
� Classes have prototypes stored with their definition� Default prototype: for each slot a new object of that class� Other prototypes might be more appropriate; can be specified viaprototype arg to setClass()
Slide 36
![Page 60: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/60.jpg)
Virtual classes
� Usually have neither representation nor prototype
� Useful by inheritance between classes� Can be created using "VIRTUAL" when specifying the representation
Slide 37
![Page 61: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/61.jpg)
Virtual classes
� Usually have neither representation nor prototype� Useful by inheritance between classes
� Can be created using "VIRTUAL" when specifying the representation
Slide 37
![Page 62: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/62.jpg)
Virtual classes
� Usually have neither representation nor prototype� Useful by inheritance between classes� Can be created using "VIRTUAL" when specifying the representation
Slide 37
![Page 63: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/63.jpg)
Inheritance
Class A inherits from (or extends) class B if is(x, "B") is truewhenever is(x, "A") is.
Can be determined using function extends():
R> extends("fungi", "xyloc")
[1] TRUE
Slide 38
![Page 64: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/64.jpg)
Inheritance
Class A inherits from (or extends) class B if is(x, "B") is truewhenever is(x, "A") is.
Can be determined using function extends():
R> extends("fungi", "xyloc")
[1] TRUE
Slide 38
![Page 65: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/65.jpg)
Testing and coercion
� Use general-purpose functions is() and as() for testing andcoercion:R> is(f1, "xyloc")
[1] TRUE
R> as(c(1, 2, 3, 4.4), "integer")
[1] 1 2 3 4
� Corresponding information obtained from the class definition, or viasetIs() and setAs()
Slide 39
![Page 66: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/66.jpg)
Testing and coercion
� Use general-purpose functions is() and as() for testing andcoercion:R> is(f1, "xyloc")
[1] TRUE
R> as(c(1, 2, 3, 4.4), "integer")
[1] 1 2 3 4
� Corresponding information obtained from the class definition, or viasetIs() and setAs()
Slide 39
![Page 67: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/67.jpg)
Outline
� Motivation
� S3 Classes
� S4 Classes� Classes and Inheritance
� Generic and Method Functions
� Group Methods
� Reference Classes
Slide 40
![Page 68: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/68.jpg)
Method dispatch
� Explicit setting of methods for certain signatures (the classes of thearguments used in the dispatch)
� Can use several arguments in the dispatch� Can determine the method dispatched to with selectMethod()
Slide 41
![Page 69: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/69.jpg)
Method dispatch
� Explicit setting of methods for certain signatures (the classes of thearguments used in the dispatch)
� Can use several arguments in the dispatch
� Can determine the method dispatched to with selectMethod()
Slide 41
![Page 70: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/70.jpg)
Method dispatch
� Explicit setting of methods for certain signatures (the classes of thearguments used in the dispatch)
� Can use several arguments in the dispatch� Can determine the method dispatched to with selectMethod()
Slide 41
![Page 71: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/71.jpg)
Creating generics
Typically by setting a method (which automatically makes a functiongeneric with the old definition as the default method).
Or explicitly using setGeneric().
Slide 42
![Page 72: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/72.jpg)
Creating methods
By using setMethod():
R> setMethod("show", "fungi",+ function(object) cat("I am just a fungus.\n"))R> f1
I am just a fungus.
(Note: sets to the value of the current version if a named function isused.)
For more complicated signatures:
R> setMethod("plot", c("numeric", "factor"), .......)
Slide 43
![Page 73: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/73.jpg)
Outline
� Motivation
� S3 Classes
� S4 Classes� Classes and Inheritance
� Generic and Method Functions
� Group Methods
� Reference Classes
Slide 44
![Page 74: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/74.jpg)
Basics
� Partially different from the Green Book (e.g., currently nogetGroupMembers())
� Mechanism “similar” to S3 group methods� Can construct arbitrary groups using setGroupGeneric()
Slide 45
![Page 75: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/75.jpg)
Group methods
Math log, sqrt, log10, cumprod, abs, acos, acosh, asin,asinh, atan, atanh, ceiling, cos, cosh, cumsum, exp,floor, gamma, lgamma, sin, sinh, tan, tanh, trunc
Math2 round signifOps Arith Compare [Logic]Arith + - * / ^ %% %/%Compare == != < <= >= >Summary max, min, range, prod, sum, any, allComplex Arg, Conj, Im, Mod, Re
Slide 46
![Page 76: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/76.jpg)
Outline
� Motivation
� S3 Classes
� S4 Classes
� Reference Classes
Slide 47
![Page 77: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/77.jpg)
Basics
Main differences between reference classes and S3 and S4:
� Refclass objects use message-passing OO� Refclass objects are mutable: the usual R copy on modify semantics
do not apply
Thus, the refclass object system behaves more like Java or C#.
Use them only where mutable state is absolutely required!
Slide 48
![Page 78: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/78.jpg)
Basics
A reference class has three main components, given by threearguments to setRefClass:
� contains, the classes which the class inherits from.
� fields are the equivalent of slots in S4. They can be specified as avector of field names, or a named list of field types.
� methods are functions that operate within the context of the objectand can modify its fields.
Slide 49
![Page 79: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/79.jpg)
Basics
A reference class has three main components, given by threearguments to setRefClass:
� contains, the classes which the class inherits from.� fields are the equivalent of slots in S4. They can be specified as a
vector of field names, or a named list of field types.
� methods are functions that operate within the context of the objectand can modify its fields.
Slide 49
![Page 80: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/80.jpg)
Basics
A reference class has three main components, given by threearguments to setRefClass:
� contains, the classes which the class inherits from.� fields are the equivalent of slots in S4. They can be specified as a
vector of field names, or a named list of field types.� methods are functions that operate within the context of the object
and can modify its fields.
Slide 49
![Page 81: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/81.jpg)
Example
A simple reference class for bank accounts with methods for withdrawaland deposit:
R> setRefClass("Account",+ fields = list(balance = "numeric"),+ methods =+ list(deposit =+ function(amount) {+ ## The following string documents the method+ "Deposit the given amount from the account"+ balance <<- balance + amount+ },+ withdraw =+ function(amount) {+ "Withdraw the given amount from the account"+ balance <<- balance - amount+ }))
Slide 50
![Page 82: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/82.jpg)
Example
What is returned by setRefClass, or can be retrieved by getRefClass,is a reference class generator:
R> (Account <- getRefClass("Account"))
Generator for class "Account":
Class fields:
Name: balanceClass: numeric
Class Methods:"withdraw", "deposit", "field", "trace", "getRefClass","initFields", "copy", "callSuper", ".objectPackage", "export","untrace", "getClass", "show", "usingMethods", ".objectParent","import"
Reference Superclasses:"envRefClass"
Slide 51
![Page 83: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/83.jpg)
Example
The reference class generator has methods:
� new() for creating new objects of that class. Takes named argumentsspecifying initial values for the fields.
� methods() for modifying existing or adding new methods� help() for getting help about methods� fields() to get a list of fields defined for class� lock() locks the named fields so that their value can only be set once
Slide 52
![Page 84: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/84.jpg)
Example
The reference class generator has methods:
� new() for creating new objects of that class. Takes named argumentsspecifying initial values for the fields.
� methods() for modifying existing or adding new methods
� help() for getting help about methods� fields() to get a list of fields defined for class� lock() locks the named fields so that their value can only be set once
Slide 52
![Page 85: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/85.jpg)
Example
The reference class generator has methods:
� new() for creating new objects of that class. Takes named argumentsspecifying initial values for the fields.
� methods() for modifying existing or adding new methods� help() for getting help about methods
� fields() to get a list of fields defined for class� lock() locks the named fields so that their value can only be set once
Slide 52
![Page 86: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/86.jpg)
Example
The reference class generator has methods:
� new() for creating new objects of that class. Takes named argumentsspecifying initial values for the fields.
� methods() for modifying existing or adding new methods� help() for getting help about methods� fields() to get a list of fields defined for class
� lock() locks the named fields so that their value can only be set once
Slide 52
![Page 87: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/87.jpg)
Example
The reference class generator has methods:
� new() for creating new objects of that class. Takes named argumentsspecifying initial values for the fields.
� methods() for modifying existing or adding new methods� help() for getting help about methods� fields() to get a list of fields defined for class� lock() locks the named fields so that their value can only be set once
Slide 52
![Page 88: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/88.jpg)
Example
We can use the generator to create an account object:
R> a1 <- Account$new(balance = 100)R> a1
Reference class object of class "Account"Field "balance":[1] 100
We can ask the generator for help:
R> Account$help("withdraw")
Call:$withdraw(amount)
Withdraw the given amount from the accountSlide 53
![Page 89: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/89.jpg)
Example
We can then make deposits and withdrawals:
R> a1$withdraw(50)R> a1
Reference class object of class "Account"Field "balance":[1] 50
To access the balance:
R> a1$balance
[1] 50
R> a1$field("balance")
[1] 50Slide 54
![Page 90: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/90.jpg)
Example
The most important property of refclass objects is that they aremutable, or equivalently they have reference semantics:
R> a2 <- a1R> a2$deposit(10)R> a1
Reference class object of class "Account"Field "balance":[1] 60
(In the example, copies will always refer to the same account.)
Slide 55
![Page 91: Object-Oriented Programmingstatmath.wu.ac.at/~hornik/ATC/atc_oop.pdf · Basics — Every object has exactly one class — All objects in a class must have the same structure — All](https://reader034.vdocuments.site/reader034/viewer/2022042200/5e9fb5a0417e18066651fa3a/html5/thumbnails/91.jpg)
Cool stuff
R> setRefClass("Dist")R> setRefClass("DistUniform",+ c("a", "b"),+ "Dist",+ methods =+ list(mean =+ function() {+ (a + b) / 2+ }))R> DistUniform <- getRefClass("DistUniform")R> U01 <- DistUniform$new(a = 0, b = 1)R> U01$mean()
[1] 0.5
(Could add other sub-classes for observed or simulated values.)
Slide 56