1. 学ぶ
  2. /
  3. コース
  4. /
  5. R における S3 と R6 を使ったオブジェクト指向プログラミング

Connected

演習

これは終わり(R6オブジェクトの)

R6クラスは、オブジェクト作成時にカスタムコードを実行するための公開メソッド initialize() を定義できるのと同様に、オブジェクト破棄時にカスタムコードを実行する公開メソッド finalize() も定義できます。finalize() は引数を取りません。一般的には、データベース や ファイル への接続を閉じたり、グローバルな options()(docs)やグラフィックスの par()(docs)パラメータの変更といった副作用を元に戻すために使います。

コードのテンプレートは次のとおりです。

thing_factory <- R6Class(
  "Thing",
  public = list(
    initialize = function(x, y, z) {
      # do something
    },
    finalize = function() {
      # undo something
    }
  )
)

finalize() メソッドは、R の自動ガベージコレクタによってオブジェクトがメモリから削除されるときに呼び出されます。gc()(docs)を入力すると、ガベージコレクションを強制的に実行できます。

指示1 / 2

undefined XP
    1
    2

作業スペースには、microwave_oven_factory として定義済みの MicrowaveOven クラスがあります。作業ディレクトリには、さまざまな食品タイプの加熱時間を含む SQLite データベースが作成されています。RSQLite(docs)パッケージは読み込まれています。

  • SmartMicrowaveOven クラスの定義を完成させてください。
    • クラスは microwave_oven_factory を継承します。
    • private 要素に、初期値が NULL の conn フィールドを用意します。
    • initialize() メソッドでは、dbConnect(SQLite(), "cooking-times.sqlite") を使って SQLite データベースに接続します。
    • この接続は private の conn フィールドに保存します。
    • finalize() メソッドでは、"Disconnecting from the cooking times database." と表示する message()(docs)を呼び出し、その後 dbDisconnect(private$conn) でデータベースから切断します。
  • SmartMicrowaveOven オブジェクトを作成して、a_smart_microwave に代入します。
  • get_cooking_time() メソッドを、食品引数に "soup" を指定して呼び出します。