Class trong Ruby là gì?
Classes là các khối xây dựng cơ bản trong Lập trình Hướng đối tượng (OOP) và chúng giúp bạn định nghĩa bản thiết kế (blueprint) để tạo đối tượng.
Đối tượng là sản phẩm của class.
Vậy đối tượng là gì?
Một đối tượng là một "điều" riêng biệt, với danh tính riêng và dữ liệu riêng.
Ví dụ:
Một class Book có thể là bản thiết kế để tạo sách.
Class này định nghĩa những thuộc tính TẤT CẢ cuốn sách đều có chung, như:
- một tiêu đề (title)
- một tác giả (author)
- số trang (pages)
- v.v.
Mỗi cuốn sách riêng lẻ là một đối tượng và bạn có thể tạo nhiều đối tượng giống nhờ class Book. Đó là điểm của việc tạo class, chúng là bản thiết kế tái sử dụng cho ứng dụng Ruby của bạn.
Bây giờ:
Bạn sẽ học cách viết class riêng của mình để bắt đầu viết code OOP, ngay hôm nay.
Cách tạo một Ruby Class
Cú pháp tạo class như sau:
class Orange end
Chú ý:
- Tên class bắt đầu bằng chữ in hoa
- Chúng ta dùng từ khóa
class, sau đó là từ khóaend - Một class rỗng không quá hữu ích, nhưng bạn vẫn có thể tạo đối tượng từ nó
Có cách khác để tạo class (như Class.new), nhưng các phương pháp đó chỉ hữu ích trong tình huống đặc biệt.
Một Class, Nhiều Object
Cách dùng chính của class là làm container cho các phương thức, biến instance và hằng số, tạo thành bản thiết kế mà bạn có thể tạo đối tượng từ đó.
Bạn có thể tạo đối tượng dùng phương thức new.
Như sau:
Orange.new
Chúng ta biết quá trình tạo đối tượng là "instantiation" (khởi tạo), và chúng ta nói đối tượng là một "instance" (thể hiện) của một class.
Tại sao tạo đối tượng?
Bởi vì mọi đối tượng bạn tạo là khác biệt và duy nhất.
Mọi đối tượng có danh tính riêng.
Ví dụ:
Với class Orange, mọi đối tượng orange bạn tạo có trọng lượng, xuất xứ, chất lượng, v.v. riêng.
Làm cho Ruby Classes hữu ích hơn
Classes trở nên hữu ích hơn khi bạn bắt đầu thêm phương thức instance và biến instance vào chúng.
Một phương thức là điều class của bạn có thể làm.
Ví dụ:
Bạn có thể vắt một cam để lấy nước.
Code ví dụ:
class Orange
def squeeze
puts "Here's your juice!"
end
end
orange = Orange.new
orange.squeeze
Các phương thức này trở thành lệnh cho đối tượng của bạn!
Mọi đối tượng Orange bạn tạo sẽ có quyền truy cập phương thức squeeze này và đó là một lợi ích của việc dùng class.
Biến instance là điều class của bạn biết.
Ví dụ:
class Orange
def initialize
@juice_available = 100
end
def squeeze
@juice_available -= 50
end
end
Biến instance khác với biến cục bộ vì chúng bắt đầu bằng ký hiệu @. Bạn không thể truy cập chúng bên ngoài class trừ khi bạn định nghĩa attr_accessor.
Đó là Class nào? (What Class is It?)
Khi làm việc với đối tượng trong Ruby, biết đối tượng đó được tạo từ class nào rất hữu ích.
Bạn có thể làm như sau:
"".class # String [].class # Array orange.class # Orange (giả sử orange = Orange.new)
Tại sao điều này hữu ích?
Phương thức là những "động cơ nhỏ" làm mọi thứ xảy ra trong Ruby.
Nếu bạn biết class, bạn có thể tìm ra phương thức nào có sẵn (dùng Google, ri, hoặc pry), nói cách khác, bạn có thể khám phá đối tượng có thể làm gì cho bạn!
Tìm hiểu thêm về Classes
Đây mới chỉ là "ngọn núi băng" khi nói đến classes.
Nếu bạn muốn tìm hiểu thêm…
Hãy đọc những bài này:
- Phương thức initialize trong Ruby
- Attr_accessor, attr_reader, attr_writer
- Kế thừa trong OOP
- Lập trình Hướng đối tượng
Btw, chính class cũng là đối tượng, ít nhất trong Ruby 🙂
Tóm tắt
Bạn đã học về class trong Ruby, cách tạo chúng và tại sao chúng hữu ích!
Đừng quên chia sẻ bài viết này để nhiều người hơn có thể thưởng thức.
Cảm ơn bạn đã đọc.