Lập trình hướng đối tượng (Object-Oriented Programming) trong R là khái niệm để chỉ đến việc xây dựng các khối mã, module cho các chương trình lớn. Lập trình hướng đối tượng cung cấp các lớp và đối tượng làm công cụ chính để giảm và quản lý độ phức tạp của chương trình. Mỗi đối tượng có những đặc điểm và tính năng riêng, được biểu hiện qua lớp của chúng trong quá trình khởi tạo. Lập trình hướng đối tượng có các đặc điểm sau:
- Class: Lớp
- Object: Đối tượng
- Encapsulation: Đóng gói
- Polymorphism: Đa hình
- Inheritance: Kế thừa
Class
Lớp là bản thiết kế để biểu diễn tập hợp các thuộc tính chung cho tất cả các đối tượng cùng loại, các lớp bao gồm lớp S3, lớp S4 và lớp tham chiếu.
Lớp S3 là hệ thống chương trình hướng đối tượng đơn giản nhất nhưng phổ biến nhất. Lớp này không cần định nghĩa và cấu trúc cho đối tượng của nó; chẳng hạn một đối tượng thuộc lớp này có thể được tạo ra chỉ bằng cách thêm một thuộc tính vào nó.
Trong lớp S3 các phương thức không thuộc về lớp mà chúng thuộc về các hàm chung. Có nghĩa là ta không thể tạo phương thức riêng của mình ở đây.
Lớp S4 là lớp mà có các đối tượng được định nghĩa và cấu trúc phù hợp.
Ở đây, hàm setClass() được sử dụng để định nghĩa một lớp và hàm new() được sử dụng để tạo các đối tượng.
Các phương thức trong lớp S4 tương tự như lớp S3, nghĩa là chúng thuộc về các hàm chung.
Lớp tham chiếu là một lớp cải tiến của lớp S4 với các phương thức thuộc về các lớp. Việc định nghĩa lớp tham chiếu tương tự như định nghĩa lớp S4: sử dụng hàm setRefClass() thay thế hàm setClass() và thuộc tính “fields” thay vì thuộc tính “slots”.
Object
Đối tượng là các kiểu dữ liệu để lưu trữ giá trị hoặc bất kỳ thông tin nào để người dùng có thể gán vào các kiểu dữ liệu này thông qua các biến bằng các phép toán tương ứng. Các kiểu dữ liệu bao gồm ký tự, số nguyên, số thực,…
Có 6 loại đối tượng trong R: vectơ, danh sách (list), ma trận, factor, mảng (array) và data frame.
- Vectơ: lưu trữ các kiểu dữ liệu đồng nhất như ký tự, số đôi, số nguyên, logic, ….
- Danh sách: lưu trữ các kiểu dữ liệu không đồng nhất như vectơ, ma trận, hoặc danh sách khác.
- Ma trận: lưu trữ giá trị dưới dạng mảng 2 chiều.
- Factor: dùng để chuyển đổi một vectơ thành một vectơ mà các phần tử là duy nhất.
- Mảng: lưu trữ giá trị dưới dạng nhiều khối ma trận.
- Data frame: lưu trữ dữ liệu ở dạng bảng bao gồm các thuộc tính của dữ liệu.
Encapsulation
Khi làm việc với các lớp và xử lý dữ liệu thì việc cấp quyền truy cập vào toàn bộ các biến được sử dụng trong chương trình không phải là lựa chọn tốt, vì khi đó, việc truy xuất dữ liệu sẽ tốn nhiều thời gian, đồng thời, cấu trúc của chương trình sẽ cồng kềnh hơn. Vì vậy, việc đóng gói một đối tượng nào đó là rất cần thiết. Đóng gói là liên kết dữ liệu với mã xử lý dữ liệu của nó và giữ cho dữ liệu và mã an toàn khỏi sự can thiệp từ bên ngoài. Đối với các lớp, khi hai lớp liên kết với nhau thì thực tế là các đối tượng của các lớp giao tiếp với nhau và thực hiện công việc, cho nên, việc cập nhật, chỉnh sửa hoặc xóa dữ liệu khỏi các thuộc tính có thể được thực hiện thông qua việc sử dụng các phương thức được xác định cụ thể cho mục tiêu này.
Đóng gói giúp xây dựng, bảo trì mã hóa dễ dàng hơn bằng cách giúp chặn lan tỏa của những thay đổi mã. Nó cũng giúp tạo liên kết mã hóa hoàn thiện bằng cách giảm quyền truy cập trực tiếp vào trạng thái và hành vi của đối tượng.
Polymorphism
R đang phát triển và triển khai đa hình tham số, có nghĩa là các phương thức trong R tham chiếu đến các hàm, không phải các lớp. Đa hình tham số cho phép định nghĩa một phương thức hoặc hàm có sẵn cho các loại đối tượng chưa được định nghĩa. Nghĩa là, có thể sử dụng cùng một tên cho một số hàm, với các tập hợp đối số khác nhau và từ nhiều lớp khác nhau. Cơ chế gọi phương thức của R là phương thức chung cho phép đăng ký một số tên nhất định để được coi là phương thức trong R và chúng đóng vai trò như chương trình điều phối. Đa hình trong R có thể đạt được bằng các hàm có sẵn trong R, như hàm plot() và summary() trả về các kết quả khác nhau tùy thuộc vào các đối tượng được truyền cho chúng.
Ví dụ: Tạo lớp ngân hàng và phương thức display() để sử dụng phương thức print() và hiển thị nội dung của lớp theo định dạng do người dùng chỉ định.
Để thực hiện việc này, trước tiên, phải khởi tạo hàm display() và hàm UseMethod().
Sau khi khởi tạo hàm hiển thị chung, chúng ta sẽ khởi tạo hàm hiển thị cho lớp ngân hàng.
Kết quả hiển thị cho hàm function()
Kế thừa
Kế thừa là một khái niệm mà theo đó các lớp mới có thể được kế thừa từ các lớp hiện có hoặc lớp cơ sở, giúp tái sử dụng mã. Các lớp được kế thừa có thể giống như một lớp cơ sở hoặc có thể có các tính năng mở rộng, tạo ra cấu trúc phân cấp của các lớp trong môi trường lập trình.
Kết luận
Lập trình hướng đối tượng trong R là một công cụ mạnh để quản lý độ phức tạp trong các chương trình lớn, đặc biệt thích hợp cho phát triển giao diện đồ họa người dùng.
Nhất Luận
----------------------------------------
Tài liệu tham khảo:
[1] R for Data Science. https://r4ds.had.co.nz/
[2] R for Data Science (2e). https://r4ds.hadley.nz/
[3] R for Data Science. https://bookdown.org/swen/R_for_Data_Science/
[4] R Packages (2e). https://r-pkgs.org/
[5] Advanced R. https://adv-r.hadley.nz/index.html#license
[6] Advanced R Solutions. https://advanced-r-solutions.rbind.io/