Tính đa hình trong OOP
Mình có một câu hỏi liên quan đến OOP và muốn nhận được thảo luận từ mọi người.
Tại sao mình phải dùng tính đa hình trong OOP. Ví dụ mình có các lớp như sau:
class HinhHoc
{
function draw()
{
echo "ve hih hoc";
}
function chuVi()
{
echo "tinh chu vi";
}
}
class HinhTron extends HinhHoc
{
function draw()
{
echo "ve hinh tron";
}
function chuVi()
{
echo "tinh chu vi hinh tron";
}
}
class HinhVuong extends HinhHoc
{
function draw()
{
echo "ve hih vuong";
}
function chuVi()
{
echo "tinh chu vi hinh vuong";
}
}
Tức là 2 lớp con HinhTron và HinhVuong sẽ kế thừa 2 function ở lớp HinhHoc rồi override lại. Vậy tại sao mình phải sử dụng tính đa hình trong khi có thể bỏ lớp cha đi và chỉ viết 2 lớp HinhTron và HinhVuong:
class HinhTron
{
function draw()
{
echo "ve hinh tron";
}
function chuVi()
{
echo "tinh chu vi hinh tron";
}
}
class HinhVuong
{
function draw()
{
echo "ve hinh vuong";
}
function chuVi()
{
echo "tinh chu vi hinh vuong";
}
}
như vậy sẽ đỡ phải viết thêm 1 lớp.
Đây là vấn đề mình muốn hỏi mọi người, mong nhận được sự đóng góp của mọi người. Mình cám ơn nhiều
nếu chỉ xem xét trong TH nhỏ và riêng rẽ như bạn thì sẽ khó có thể thấy ứng dụng của OOP rồi, sẽ như thế nào nếu bạn có 1 class ShapeController như sau:
nếu bạn tạo 2 class riêng rẽ như TH2 của bạn thì sẽ cần tới 2 method showShape để hiển thị HinhVuong và HinhTron, sử dụng tính trừu tượng, đa hình cho phép dependencies class không cần quan tâm cụ thể đối tượng mà mình làm việc là gì, mà chỉ cần quan tâm đối tượng có thể làm được gì, cho phép sử dụng lại code và tính đúng đắn đã được kiểm nghiệm ở dependencies class, một đặc điểm quan trọng của OOP chính là