調理機能のさらに上書き
中間クラスが super_ アクティブバインディングで親の機能を公開していれば、R6 クラスの複数世代にわたってメソッドへアクセスできます。構文は次のとおりです。
parent_method <- super$method()
grand_parent_method <- super$super_$method()
great_grand_parent_method <- super$super_$super_$method()
この演習はコースの一部です
R における S3 と R6 を使ったオブジェクト指向プログラミング
演習の手順
電子レンジクラスと高機能電子レンジクラスは、ワークスペースにあらかじめ用意されています。文字列 ascii_pizza_slice も定義済みです。
- 他の電子レンジのファクトリを、名前を出力して確認しましょう。
R6Class()(docs)を使ってHighEndMicrowaveOvenクラスジェネレータを定義し、high_end_microwave_oven_factoryに代入します。FancyMicrowaveOvenを継承させます。publicリスト要素を持たせます。
- public の
cook()メソッドをオーバーライドします。- メソッドは
time_secondsという単一の引数を取ります。 MicrowaveOvenのcook()メソッドを呼び出し、…- その後、
message(ascii_pizza_slice)(docs)でピザのスライスを表示します。
- メソッドは
- ハイエンド電子レンジのオブジェクトをインスタンス化し、
a_high_end_microwaveに代入します。 a_high_end_microwaveのcook()メソッドを呼び出し、1 秒間調理します。
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
# Explore other microwaves
microwave_oven_factory
fancy_microwave_oven_factory
# Define a high-end microwave oven class
high_end_microwave_oven_factory <- ___(
"___",
___ = ___,
___ = ___(
___ = ___
)
)
# Instantiate a high-end microwave oven
a_high_end_microwave <- ___
# Use it to cook for one second
___