propagating functionality with inheritance
play

Propagating Functionality with Inheritance Object-Oriented - PowerPoint PPT Presentation

OBJECT-ORIENTED PROGRAMMING IN R: S3 & R6 Propagating Functionality with Inheritance Object-Oriented Programming in R: S3 & R6 Object-Oriented Programming in R: S3 & R6 thing_factory <- R6Class( "Thing",


  1. OBJECT-ORIENTED PROGRAMMING IN R: S3 & R6 Propagating Functionality with Inheritance

  2. Object-Oriented Programming in R: S3 & R6 πŸ“Œ βœ‚

  3. Object-Oriented Programming in R: S3 & R6 thing_factory <- R6Class( "Thing", private = list( a_field = "a value", another_field = 123 ), public = list( do_something = function(x, y, z) { # do something here } ) )

  4. Object-Oriented Programming in R: S3 & R6 parent the class you inherit from child the class that inherits fields and methods

  5. Object-Oriented Programming in R: S3 & R6 child_thing_factory <- R6Class( "ChildThing", inherit = thing_factory , public = list( do_something_else = function() { # more functionality } ) )

  6. Object-Oriented Programming in R: S3 & R6

  7. Object-Oriented Programming in R: S3 & R6 parent ● a fancy microwave is a microwave is a ● not all microwaves are fancy microwaves child

  8. Object-Oriented Programming in R: S3 & R6 > a_thing <- thing_factory$new() > class(a_thing) [1] "Thing" "R6" > inherits(a_thing, "Thing") [1] TRUE > inherits(a_thing, "R6") [1] TRUE

  9. Object-Oriented Programming in R: S3 & R6 > a_child_thing <- child_thing_factory$new() > class(a_child_thing) [1] "ChildThing" "Thing" "R6" > inherits(a_child_thing, "ChildThing") [1] TRUE > inherits(a_child_thing, "Thing") [1] TRUE > inherits(a_child_thing, "R6") [1] TRUE

  10. Object-Oriented Programming in R: S3 & R6 Summary ● Propagate functionality using inheritance ● Use the inherit arg to R6Class() ● Children get their parent ’s functionality ● … but the converse is not true

  11. OBJECT-ORIENTED PROGRAMMING IN R: S3 & R6 Let’s practice!

  12. OBJECT-ORIENTED PROGRAMMING IN R: S3 & R6 Embrace, Extend, Override

  13. Object-Oriented Programming in R: S3 & R6 thing_factory <- R6Class( "Thing", public = list( do_something = function() { message("the parent do_something method") } ) )

  14. Object-Oriented Programming in R: S3 & R6 child_thing_factory <- R6Class( "ChildThing", inherit = thing_factory, public = list( do_something = function() { message("the child do_something method") } , do_something_else = function() { message("the child do_something_else method") } ) )

  15. Object-Oriented Programming in R: S3 & R6 > a_child_thing <- child_thing_factory$new() > a_child_thing$do_something() the child do_something method

  16. Object-Oriented Programming in R: S3 & R6 private$ accesses private fields self$ accesses public methods in self super$ accesses public methods in parent

  17. Object-Oriented Programming in R: S3 & R6 child_thing_factory <- R6Class( "ChildThing", inherit = thing_factory, public = list( do_something = function() { message("the child do_something method") }, do_something_else = function() { message("the child do_something_else method") self$do_something() super$do_something() } ) )

  18. Object-Oriented Programming in R: S3 & R6 > a_child_thing <- child_thing_factory$new() > a_child_thing$do_something_else() the child do_something_else method the child do_something method the parent do_something method

  19. Object-Oriented Programming in R: S3 & R6 Summary ● Override by giving the same name ● Extend by giving a new name ● self$ accesses public methods in self ● super$ accesses public methods in parent

  20. OBJECT-ORIENTED PROGRAMMING IN R: S3 & R6 Let’s practice!

  21. OBJECT-ORIENTED PROGRAMMING IN R: S3 & R6 Multiple Levels of Inheritance

  22. Object-Oriented Programming in R: S3 & R6

  23. Object-Oriented Programming in R: S3 & R6 microwave fancy microwave high-end microwave

  24. Object-Oriented Programming in R: S3 & R6 thing_factory <- R6Class( "Thing" ) child_thing_factory <- R6Class( "ChildThing", inherit = thing_factory ) grand_child_thing_factory <- R6Class( "GrandChildThing", inherit = child_thing_factory )

  25. Object-Oriented Programming in R: S3 & R6 thing_factory <- R6Class( "Thing" , public = list( do_something = function() { message("the parent do_something method") } ) )

  26. Object-Oriented Programming in R: S3 & R6 child_thing_factory <- R6Class( "ChildThing", inherit = thing_factory , public = list( do_something = function() { message("the child do_something method") } ) )

  27. Object-Oriented Programming in R: S3 & R6 grand_child_thing_factory <- R6Class( "GrandChildThing", inherit = child_thing_factory, public = list( do_something = function() { message("the grand-child do_something method”) super$do_something() super$super$do_something() } ) )

  28. Object-Oriented Programming in R: S3 & R6 > a_grand_child_thing <- grand_child_thing_factory$new() > a_grand_child_thing$do_something() the grand-child do_something method the child do_something method Error in a_grand_child_thing$do_something(): attempt to apply non-function

  29. Object-Oriented Programming in R: S3 & R6 child_thing_factory <- R6Class( "ChildThing", inherit = thing_factory, public = list( do_something = function() { message("the child do_something method") } ) , active = list( super_ = function() super ) )

  30. Object-Oriented Programming in R: S3 & R6 grand_child_thing_factory <- R6Class( "GrandChildThing", inherit = child_thing_factory, public = list( do_something = function() { message("the grand-child do_something method") super$do_something() super$super_$do_something() } ) )

  31. Object-Oriented Programming in R: S3 & R6 > a_grand_child_thing <- grand_child_thing_factory$new() > a_grand_child_thing$do_something() the grand-child do_something method the child do_something method the parent do_something method

  32. Object-Oriented Programming in R: S3 & R6 Summary ● R6 objects can only access their direct parent ● Intermediate classes can expose their parent ● Use an active binding named super_ ● super_ should simply return super

  33. OBJECT-ORIENTED PROGRAMMING IN R: S3 & R6 Let’s practice!

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend