1. Học hỏi
  2. /
  3. Khoa Học
  4. /
  5. Lập trình hướng đối tượng với S3 và R6 trong R

Connected

Bài tập

Kết thúc (vòng đời của một đối tượng R6)

Cũng giống như một lớp R6 có thể định nghĩa phương thức initialize() công khai để chạy mã tùy chỉnh khi đối tượng được tạo, lớp đó cũng có thể định nghĩa phương thức finalize() công khai để chạy mã tùy chỉnh khi đối tượng bị hủy. finalize() không nhận đối số nào. Phương thức này thường dùng để đóng kết nối tới cơ sở dữ liệu hoặc tệp, hoặc hoàn tác các tác dụng phụ như thay đổi options() toàn cục (tài liệu) hay các tham số đồ họa par() (tài liệu).

Mẫu mã như sau.

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

Phương thức finalize() sẽ được gọi khi đối tượng bị loại bỏ khỏi bộ nhớ bởi bộ gom rác tự động của R. Bạn có thể ép gom rác bằng cách gõ gc() (tài liệu).

Hướng dẫn 1/2

undefined XP
    1
    2

Một lớp MicrowaveOven đã được định nghĩa sẵn trong workspace của bạn là microwave_oven_factory. Một cơ sở dữ liệu SQLite chứa thời gian nấu cho các loại thực phẩm khác nhau đã được tạo trong thư mục làm việc của bạn. Gói RSQLite (tài liệu) đã được nạp.

  • Hoàn thiện định nghĩa cho lớp SmartMicrowaveOven,
    • Lớp này phải kế thừa từ microwave_oven_factory.
    • Phần private phải có một trường tên conn, ban đầu đặt là NULL.
    • Phương thức initialize() phải kết nối tới cơ sở dữ liệu SQLite bằng dbConnect(SQLite(), "cooking-times.sqlite"),
    • Kết nối này cần được lưu vào trường private conn.
    • Phương thức finalize() phải hiển thị message() (tài liệu) với nội dung "Disconnecting from the cooking times database.", sau đó ngắt kết nối khỏi cơ sở dữ liệu bằng dbDisconnect(private$conn).
  • Tạo một đối tượng SmartMicrowaveOven và gán cho a_smart_microwave.
  • Gọi phương thức get_cooking_time() với đối số thực phẩm là "soup".