4-4 Objecr và Class

4-4 Objecr và Class

"Class" và "Object" có quan hệ rất mật thiết. Vậy thì Class cuối cùng là gì rồi Object là là gì?

Slime

Hãy xem những dòng code sau đây.

monster = Slime.new
monser.hello

[Slime.new] chính là câu thần chú để sinh ra một con Slime. Con slime mới sinh ra, để được sử dụng trong chương trình được thay thế bằng biến số [monster]. Chỉ trong 2 dòng của chương trình thì Class và Object đã được giấu.

Slime chính là object

Dưới đây chính là câu thần chú để sinh ra con Slime.

Slime.new

Chúng ta gọi một con Slime được sinh ra là Object. Object mới được sinh ra được thay vào biến số. Tại sao vậy thì nếu không có giai đoạn tham chiếu object thì chúng ta không thể sử dụng được object.

Biến số = Slime.new

Như thế thì chúng ta có thể điền object slime mới vào biến số.

Slime Class

Vậy cuối cùng câu thần chú [Slime.new] chính là cái gì? Thực ra, chúng ta đang thể hiện một trường (Class) bằng tên Slime. Slime chính là một class. Từ nay chúng ta hãy gọi Slime thành Slime class. Đối với slime class, chúng ta thực hiện một lệnh là [new], nên có thể sinh ra một con Slime như đã nói ở trên.

Slime.new

Slime class có khả năng để ra những con slime. Tương tự như vậy, nếu là Ghost Class thì cũng có khả năng đẻ ra những con Ghost. Dragon class thì cũng có thể đẻ ra những con Dragon đáng sợ trên thế giới này. Có nghĩa là từ class sẽ đẻ ra được những Object như mình mong muốn.

Ở đây, điều tôi muốn chú ý đó chính là Slime class không phải là một chính thể nào cả. Class có thể đẻ ra những con slime nhưng nó không phải là một bản thể nhất định.

Class là gì?

Vậy thì ở đây chúng ta sẽ giải quyết, cuối cùng class chính là cái gì? Class chính là nơi định nghĩa tính chất của object mà nó đẻ ra. Nói theo một cách khác, Slime class chính là một bản kế hoạch cần thiết để đẻ ra những Slime object. Trong thế giới lập trình thì người ta gọi class là hình dạng của object. Slime class là nơi định nghĩa nhưng qui tắc để đẻ ra object mang hình dạng slime. Cũng tương tự như vậy thì dragon class là nơi định nghĩa những qui tắc để tạo ra những object mang hình dạng con dragon.

Để từ class mà tạo ra các object thì chúng ta làm như sau.

Tên class.new

Quá đơn giản đúng không? Đằng sau tên class chúng ta chỉ cần viết [.new] thôi. Như vậy chúng ta thêm biến số đại diện vào là có thể có được một object. Cũng như vậy, chúng ta có thể sinh ra những object tương tự nếu có Dragon Class hay Ghost Class.

monster2 = Ghost.new
monster3 = Dragon.new

Tất nhiên chúng ta cũng có thể tạo lên được rất nhiều những monster giống nhau khác nữa.

monster1 = Slime.new
monster2 = Slime.new
monster3 = Slime.new

Tấn công của những Slime

Vậy, chúng ta đã hiểu cách sinh ra những con Slime từ một class. Vậy những Slime object, hay chính là những con slime này có thể làm được những gì? Kể cả những con quái vật yếu thế nào đi chăng nữa thì ít nhất những khả năng tấn công tối thiểu.

monster1 = Slime.new
monster2 = Slime.new
monster1.attack monster2

Để gọi ra được những chức năng của object có thfi chúng ta phải gọi được những lệnh mà object có.

Object.lệnh(Argument,...)

Object Slime có mang trong mình lệnh [attack] dùng để tấn công. Lệnh tấn công này lấy đối phương làm argument. Tức là với chương trình ví dụ bên trên thì monster1 sẽ tấn công monster2. Có thể nhân vật bị tấn công là monster2 sẽ bị mất máu. Object slime mang trong mình lệnh hp để trả lại kết quả máu của chính mình.

p monster2.hp	#=> máu hiện tại

Như vậy, những object như thế này có mang trong mình những lệnh để điều khiển object hay yêu cầu trả lại thông tin đối với object. Object mang những lệnh nào thì việc đó được định nghĩa trong class. Có nghĩa là những lệnh mà object slime mang theo mình là những lệnh được định nghĩa ở Slime class. Nếu chúng ta gọi lệnh hello thì có khi con slime sẽ cúi chào chúng ta ấy chứ.

Object là gì?

Object là những "vật" được tạo ra từ Class. Ở trong những vật đó chính là những lệnh được định nghĩa. Thực hiện lệnh đối với "Vật" hay chính là Object thì chúng ta có thể thao tác với object rồi có thể có được trạng thái của object đó. Và, object đó mang những lệnh nào thì cái đó được định nghĩa bên trong class. Cũng như con slime có thông số là máu thì một object sẽ mang theo một vài thông số, như vậy cũng có lúc chúng ta nhìn thấy Object như là một nơi tập trung những thông số giữ liệu. Một object mang theo mình những thong số dữ liệu như thế nào thì đó chính là công việc của class.


Class .................. Slime Object ................. Được tạo ra từ [Slime.new] và được cho vào biến số [monster]


Tóm tắt

Chúng ta hãy nhớ lại chương trình đầu tiên.

monster = Slime.new

Trong một dòng thì nếu hỏi class hay object được giấu ở đâu thì bây giờ chắc mọi người cũng đã hiểu câu trả lời.

Chương tiếp theo sẽ giải thích chi tiết về cách tạo ra class.