Chào mọi người, em đang tìm hiểu về tính kế thừa và đa hình của OOP thì gặp 2 thuật ngữ là Extends
và Implements
, em đang mông lung không biết rằng nếu dịch chính xác theo nghĩa tiếng việt thì 2 từ đó có thể là gì ạ. Em cảm ơn.
Extends và Implements có thể hiểu là gì?
Extend: Mở rộng.
Implement: Đính kèm.
Hiểu nôm na nó là như thế, còn tư duy của mình thì là extend là kế thừa toàn bộ: nội dung và hình thức, còn implement là kế thừa hình thức.
Trong Java thì đây là 2 từ khóa luôn. C# thì cả 2 lại chỉ là dấu hai chấm (:
).
-
extends
: mở rộng. Kế thừa và mở rộng từ một lớp (class
) có sẵn. -
implements
: triển khai. Thực hiện triển khai (định nghĩa) các phương thức đã được khai báo từ một hoặc nhiều giao tiếp (interface
).
Mà cho mình hỏi thêm là vì sao interface lại được gọi là “giao tiếp”, nó có ý nghĩa về từ ngữ như thế nào ạ ?
Nó đặt ra các hành động chung (các phương thức) để các lớp triển khai nó bắt buộc cùng thực hiện. Tức là các lớp triển khai cùng giao tiếp qua một quy tắc chung.
interface
thường được hiểu là giao diện
cho những thứ liên quan đến đồ họa và nhìn bằng mắt. Nhưng trong trường hợp này mình nghĩ từ giao tiếp
thì phù hợp cho việc trừu tượng như thế. Cá nhân thôi.
“Giao tiếp” là động từ mà Dùng như bạn trên là ổn, nhưng từ này dịch ra là “giao diện” thôi.
Giao diện là cái khuôn của phương thức
Phương thức cho ta biết mình có thể làm gì với vật thể. Lớp là một cái khuôn để tạo các vật thể cho nhanh. Giả sử ta có nhiều lớp khác nhau, và các vật thể được tạo ra từ các lớp này đều có cùng một số phương thức giống nhau. Lúc này, ta sẽ có một tập hợp các phương thức giống nhau cho tất cả các lớp.
Giao diện là cách để sử dụng vật thể mà không cần biết bên trong nó có gì. Tập hợp này được gọi là giao diện, vì cũng giống như những nút bấm trên màn hình quy định những gì ta có thể làm được với chương trình mà không cần biết bên trong có gì, những thứ trong tập hợp này quy định những gì ta có thể làm được với vật thể mà không cần biết bên trong có gì. Cái đầu tiên được gọi là GUI, cái sau được gọi là API.
Ta hay nghĩ phải có vật thể trước đã rồi mới biết mình có thể làm gì với nó. Nhưng thường việc nghĩ trước về những thứ mình có thể làm với nó rồi mới tạo nó ra sẽ hiệu quả hơn. Tức là đầu tiên ta sẽ định nghĩa giao diện, từ đó tạo ra các lớp triển khai giao diện đó, rồi mới tạo vật thể từ các lớp đó sau:
interface GiaoDiện {...}
class Lớp implements GiaoDiện {...}
const vậtThể = new Lớp()
Nếu sau này mình nghĩ ra được thêm điều gì mới thì sẽ cập nhật ghi chú tại https://doi-thoai.deno.dev/bE.2C.1