Bạn hiểu thế nào abstract và thế nào là interface?. [câu trả lời ngắn khi phỏng vấn lập trình php]

Toàn bộ câu hỏi là "Bạn hiểu thế nào abstract và thế nào là interface?. Vì sao Interface có nhiều thế mạnh hơn so với abstract?. Chức năng chính của chúng là gì?."
  • Abstract tính trừu tượng trong lập trình hướng đối tượng nó là một khái miện nhằm giúp lập trình viên trừu tượng ra hình thái của đối tượng, ví dụ khi ta nói về xe đạp bình thường, xe đạp leo núi, xe đạp đua, ta đều có thể tưởng tượng ra được nó có bánh xe, nó dùng để chạy.
  • Trong lập trình tính trừu được được thể hiện thông qua lớp trừu tượng (abstract class) lớp này dùng để khai báo các đặc điểm chung của các đối tượng và khi các lớp khác được kế thừa từ lớp này thì nó sẽ có đầy đủ thuộc tính và phương thức của lớp trường tượng điều này giúp ta có thể tái sử dụng code và tăng tốc độ thực thi của chương trình. Lại lấy ví dụ về xe đạp như đã trình bày ở trên ta có ba loại xe đạp khác nhau tuy chúng đều có thuộc tính chung là có bánh xe, và có phương thức chung là để chạy, vậy chỉ chần ta khai báo một lớp có các thuộc tính và phương thức chung để tạo nên các loại xe đạp trên thì ta sẽ khai báo ít ơn, tiết kiện thời gian hơn.
  • Interface xét về một số khía cạnh khái niệm và định nghĩa có thể xem nó là Abstract, vì đa số các ngôn ngữ đều không hỗ trợ đa kế thừa vì dẫn tới vấn đề "diamond problem" nên giải pháp của họ là loại bỏ khái niệm đa kế thừa này ra tuy nhiên ta không bàn sâu về vấn đề này, và để đáp ứng tính chất đa kế thừa họ đã đưa khái niệm mới là Interface vì thế nó khá giống Abstract. Lấy đơn giản thế này lớp xe đạp nó thể chạy, và ta có thê lớp xe hơi nó cũng có thể chạy, hoặc một lớp nào khác nó thể chạy, như thế mỗi lớp ta đều phải báo một phương thức chạy, thay vì làm như vậy ta tạo một lớp giao diện chạy thì lớp nào cũng có thể chạy được.
  • Tuy nhiên cần phân biệt rõ Abstract và Interface là hai khái niệm hoàn toàn khác nhau và cách thức sử dụng cũng khác nhau, dù rằng việc xác định rõ chúng trong thực tế là rất khó, nhưng nếu làm tốt sẽ khiến dự án luôn rõ ràng và dễ phát triển.




Bạn có thể xem thêm các câu hỏi phong vấn PHP khác tại bài viết Tổng hợp các câu hỏi có thể gặp khi đi phỏng vấn vị trí lập trình viên PHP (kèm theo phần trả lời). Nếu các bạn có thêm bất kỳ câu hỏi khác đã gặp trong quá trình phỏng vấn PHP thì chia sẻ với mình nhé, còn nếu câu trả lời của mình không hay thì cũng giúp mình biên soạn bổ sung và comment giúp dưới đây nhé để mình update thêm.







No comments:

Post a Comment