Classes và Objects: triết lí hướng đối tượng Kotlin (tiếp tục)
Một khái niệm quan trọng là rằng Invoice không phải là một object, Person và Triangle cũng không phải.
Cái đó có thể là như thế nào? Chúng ta chính đang nói về invoices như các objects, và tại sao Person và Triangle
không phải là các objects? Mâu thuẫn này đến từ một vài loại sự mềm mại về mặt ngôn ngữ. Bạn có nhận ra rằng
chúng ta đang nói về Invoice, nhưng không phải một invoice? Có một khác biệt chính giữa những cái đó: Một invoice,
hay chính xác hơn một invoice cụ thể, là một object, nhưng Invoice là một phân loại hay class. Tất cả các invoices
có thể chia sẻ tư cách thành viên trong class Invoice, và tất cả các persons cụ thể chia sẻ tư cách thành viên
trong class Person, chính như tất cả các triangles có thể thuộc về class Triangle. Cái này có vẻ lí thuyết hay thậm
chí soi mói? Có thể, nhưng nó có các ngầm chỉ thực tiễn quan trọng và chúng ta thực sự cần hiểu khái niệm class đó.
Xem xét một 1000 invoices đi đến vào một ngày cụ thể. Trong một vài chương trình máy tính, chúng ta có thực sự muốn
viết thứ gì đó giống cái này:
object1 = Invoice(Buyer=Smith,Date=20180923,Good=Peas,Cost=$23.99), object2
= Invoice(…), …, object1000 = Invoice(…)
Cái đó không có ý nghĩa, vì chúng ta không muốn viết một chương trình máy tính lớn mọi ngày. Cái gì thay vào có ý
nghĩa là có một Invoice class cái mô tả tất cả các invoices có thể. Từ class này chúng ta phải là có thể tạo các
invoices cụ thể cho một vài nhập vào style invoice. Trong pseudo-code:
data = [Some incoming invoice data]
Cái này cung cấp các dữ liệu invoice đang đến cho một invoice giấy cụ thể. Đảm bảo dữ liệu có thể được trình bày
bởi các đặc điểm trừu tượng của Invoice class, nên nó có một buyer, một date, goods hay services và vv… Cái
này là giống với khi nói rằng Invoice là một phân loại có hiệu lực của tất cả dữ liệu nhập vào có thể.
object = concrete object using that data
