30/09/2018, 17:02
Abstract class trong PHP
Bài viết được post tại: http://portal.daynhauhoc.com/p/abstract-class-trong-php/
Như ở bài trước về Interfaces, mình có đề cập cho các bạn về lớp trừu tượng hóa Abstract class rồi thì trong bài viết này, mình sẽ giới thiệu cho các bạn rõ hơn về Abstract class trong kỹ thuật lập trình hướng đối tượng. Khái niệm về Abstract…… xem thêm bài viết
Bài liên quan
Cái ví dụ trong bài viết đưa ra dở tệ.
Kết luận cũng ko chính xác -_-
Anh giúp em đính chính lại ví dụ và kết luận với
Abstract class: là một class cha cho tất cả các class có cùng bản chất. Bản chất ở đây được hiểu là kiểu, loại, nhiệm vụ của class. Hai class cùng hiện thực một interface có thể hoàn toàn khác nhau về bản chất.
hay em hiểu sai về cái Abstract này rồi
Abstract class là 1 lớp trừu tượng. Lớp trừu tượng là nó vẫn còn cái gì đó trừu tượng (abstract method), cần phải được khai báo rõ ràng ở lớp con (concrete class).
Để hiểu hơn phải đặt nó trong ngữ cảnh: 1 hệ thống có interface , abstract class và concrete class.
Thì do là lớp trừu tượng nên bạn không thể tạo ra trực tiếp 1 instance từ abstract class. Chỉ có concrete class là có thể tạo ra 1 instance.
Mình thường hiểu thế này,
Abstract class để miêu tả 1 khái niệm trừu tượng, mà từ đó , tất cả các khái niệm được mở rộng (trong php thường dùng từ khoá extents) sẽ kế thừa các properties (các biến được khai báo trong Abstract class), hay các phương thức chung.
Class dùng để diễn đạt một khái niệm cụ thể, rõ ràng hơn.
Interface thường dùng để diễn dải ta có thể làm được những việc gì, chú ý ở đây chỉ là diễn tả ta làm được gì thôi, chứ làm thế nào thì mỗi class phải tự implements riêng.
Một ví dụ cụ thể là
Với cách viết trên, ta sẽ thấy code của mình trở nên rõ ràng hơn rất nhiều, và đọc nhanh và dễ hơn, nhìn vào dòng lệnh
sẽ dễ dàng biết được class ChimBoiCa có khả năng ( method) đi bộ, bay, và bơi
Đà điểu thì chỉ có thể đi bộ được thôi, ít code thừa hơn. Và khi sử dụng ta có thể làm như sau
Một số sai lầm phổ biến của các bạn khi mới code thường gặp phải như
Cách viết này thường được các bạn viết, vì nó có 1 ưu điểm là mình sẽ implement được 1 số các method thường dùng để khi extends ra cụ thể thì không tốn công viết lại nữa, ở trong trường hợp này là method đi bộ được tiết kiệm 2 lần, không cần viết lại. Nhưng thật chất nó cho ta một cấu trúc không rõ ràng. Rõ ràng chim cánh cụt không biết bay nhưng vẫn phải có method bay, hay Đà điểu thì làm gì biết bơi với bay, những vẫn phải ôm đồm 2 việc này.
Và khi các bạn cần sử dụng thì càng khó khăn hơn. Giống như trên tôi muốn tổ chức 1 cuộc thi bơi, giữa muôn thú thì tôi phải làm sao
Bạn thấy rõ code rất mập mời
Bạn hiểu ý nghĩa của abstract class nhưng dùng nó thì phải lưu ý một chút là nếu abstract class mà không có cái gì đó trừu tượng ( abstract function) thì chuyển nó luôn về concrete class (lớp cụ thể) cho nó đơn giản