Ereditarietà a più livelli

Programmazione orientata agli oggetti con S3 e R6 in R

Richie Cotton

Data Evangelist at DataCamp

ch4_3-multiple-levels-of-inheritance.003.png

Programmazione orientata agli oggetti con S3 e R6 in R

ch4_3-multiple-levels-of-inheritance.005.png

Programmazione orientata agli oggetti con S3 e R6 in R

ch4_3-multiple-levels-of-inheritance.006.png

Programmazione orientata agli oggetti con S3 e R6 in R

 

thing_factory <- R6Class(
  "Thing"
)
child_thing_factory <- R6Class(
  "ChildThing",
  inherit = thing_factory
)
grand_child_thing_factory <- R6Class(
  "GrandChildThing",
  inherit = child_thing_factory
)
Programmazione orientata agli oggetti con S3 e R6 in R

 

thing_factory <- R6Class(
  "Thing",

public = list( do_something = function() { message("metodo do_something del parent") } )
)
Programmazione orientata agli oggetti con S3 e R6 in R

 

child_thing_factory <- R6Class(
  "ChildThing",
  inherit = thing_factory,

public = list( do_something = function() { message("metodo do_something del child") } )
)
Programmazione orientata agli oggetti con S3 e R6 in R

 

grand_child_thing_factory <- R6Class(
  "GrandChildThing",
  inherit = child_thing_factory,
  public = list(
    do_something = function() {
      message("metodo do_something del grand-child")

super$do_something()
super$super$do_something()
} ) )
Programmazione orientata agli oggetti con S3 e R6 in R

 

a_grand_child_thing <- grand_child_thing_factory$new()

a_grand_child_thing$do_something()
metodo do_something del grand-child

metodo do_something del child
Errore in a_grand_child_thing$do_something(): tentativo di applicare un non-funzione
Programmazione orientata agli oggetti con S3 e R6 in R

 

child_thing_factory <- R6Class(
  "ChildThing",
  inherit = thing_factory,
  public = list(
    do_something = function() {
      message("metodo do_something del child")
    }
  ),

active = list( super_ = function() super )
)
Programmazione orientata agli oggetti con S3 e R6 in R

 

grand_child_thing_factory <- R6Class(
  "GrandChildThing",
  inherit = child_thing_factory,
  public = list(
    do_something = function() {
      message("metodo do_something del grand-child")

super$do_something()
super$super_$do_something()
} ) )
Programmazione orientata agli oggetti con S3 e R6 in R

 

a_grand_child_thing <- grand_child_thing_factory$new()

a_grand_child_thing$do_something()
metodo do_something del grand-child
metodo do_something del child
metodo do_something del parent
Programmazione orientata agli oggetti con S3 e R6 in R

Riepilogo

  • Gli oggetti R6 possono accedere solo al loro genitore diretto
  • Le classi intermedie possono esporre il loro genitore
  • Usa un active binding chiamato super_
  • super_ deve solo restituire super
Programmazione orientata agli oggetti con S3 e R6 in R

Ayo berlatih!

Programmazione orientata agli oggetti con S3 e R6 in R

Preparing Video For Download...