Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 12 kết quả

Đề tài: Tính đa hình và kế thừa là gì, tại sao phải sử dụng nó?

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    4

    Mặc định Tính đa hình và kế thừa là gì, tại sao phải sử dụng nó?

    Xin chào toàn thể cộng đồng C việt , em mới theo học lập trình được 1 năm nay , khi em chuyển sang lập trình hướng đối tượng , em có 1 chút thắc mắc muốn hỏi :
    - Tại sao phải xây dựng tính đa hình cho hàm ? Trong khi có thể dùng phủ quyết hoặc new trong lớp dẫn xuất ... ( ở đây là em dùng C# ) nhưng là liên quan đến ý chung về lập trình HDT chứ ko phải là post nhầm nơi ạ
    Có thể dùng kế thừa luôn từ lớp con , rồi thay đổi hàm đó trong lớp con đó , sao phải thiết kế tính đa hình ?
    Và tính đa hình thì sử dụng như thế nào cho hợp lý , các anh có thể cho em một ví dụ ( 1 đoạn code ngắn chẳng hạn ) để minh hoa rõ hơn về tính đa hình được ko ạ ?
    Thân ái và cảm ơn điễn đàn , rất mong sớm đc nhận câu trả lời .

  2. #2
    Ngày gia nhập
    10 2008
    Bài viết
    178

    không biết đa hình coi như không biết hướng đối tượng!

  3. #3
    Ngày gia nhập
    03 2009
    Bài viết
    4

    Rất cảm ơn góp ý , nhưng làm ơn đọc kỹ rồi hãy post trả lời .

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    153

    OOP ko có hàm chỉ có phương thức. Vui lòng đọc kỹ lại về OOP. Bro cho xin cái định nghĩa đa hình rồi tôi giải thích cho. Lâu không sờ lý thuyết nên chả nhớ đa hình nó là gì nữa. Chỉ code theo phản xạ thôi.
    ttecak ?

  5. #5
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    Khi bạn lập trình theo cấu trúc thông thường, nếu như gọi hàm: Func(), thì địa chỉ hàm này sẽ được tính ra cụ thể trong lúc compile chương trình, khi chạy thì bất kể thời điểm nào, khi có lời gọi Func() thì nó đều thực hiện chính xác duy nhất hàm đó.
    Còn trong lập trình OOP, thì không phải lúc nào bạn cũng gọi chính xác method đó, đôi khi bạn gọi A.Method() thì tùy thời điểm Method đó của A sẽ được gọi hay nó sẽ chuyển đến Method của B (là con A).

    Ví dụ bạn là một tướng chỉ huy rất nhiều đội quân, nào là pháo binh, thủy binh, bộ binh... và mỗi đội quân khác nhau sẽ có cách "tấn công" khác nhau, nhưng chung qui tất cả đều là lính và đều hiểu mệnh lệnh "tấn công". Khi ra trận, bạn chỉ cần hô "tấn công" là tất cả đều xông lên, không cần phải hô "bộ binh, tấn công", "pháo binh, tấn công"... cho từng đội quân.

    Vd khác gần hơn, bạn thiết kế vẽ các đối tượng đồ họa lên màn hình, khi trạng thái của các đối tượng thay đổi, bạn phải xóa màn hình, và vẽ lại trạng thái mới của các đối tượng đó. Nhưng có nhiều loại đối tượng đồ họa khác nhau, ví dụ Điểm, đường thẳng, hình tròn, hình vuông... Tất cả các đối tượng này đều thừa kế từ đối tượng Object gốc, đều có phuơng thức Draw(), nhưng Draw() của mỗi loại đối tượng là khác nhau. Khi phải vẽ lại tất cả các dối tượng, nếu bạn gọi:
    Line1.Draw();
    Line2.Draw();
    Circle3.Draw();
    ....
    sẽ rất tốn công và không khả thi, nếu bạn lưu tất cả vào một List<Object> ObjectCollection chẳng hạn, thì chỉ cần duyệt qua tất cả các phần tử trong List đó và gọi Draw();

    foreach (Object obj in ObjectCollection)
    {
    obj.Draw();
    }

    khi đó, obj là đối tượng loại nào thì nó sẽ chuyển hàm Draw() xuống dưới đối tượng đó (obj.Draw() ở đây là lời gọi method ảo).

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    4

    Mặc định Tính đa hình và kế thừa là gì, tại sao phải sử dụng nó?

    Ví dụ rất hay ... cảm ơn bạn , mình cũng hiểu thêm được rồi ...
    Nhân tiện mình hỏi luôn về lớp trừu tượng và giao diện , mình muốn hiểu rõ hơn về giao diện ...
    Mình mới học LT HDT nên rất mong bạn giúp đỡ , Cảm ơn nhìu

  7. #7
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    Ý bạn là interface và abstract class ?

    Về những khái niệm này thì bạn nên kiếm sách đọc, Java hoặc C# mới có khái niệm này, để so sánh 2 thứ này bạn có thể đọc ở đây

  8. #8
    Ngày gia nhập
    03 2009
    Bài viết
    4

    Cảm ơn bạn nhiều ...

  9. #9
    Ngày gia nhập
    11 2010
    Bài viết
    2

    hay quá. ví dụ rất cụ thể. thank mọi người

  10. #10
    Ngày gia nhập
    04 2011
    Bài viết
    1

    Mặc định Tính đa hình

    Tính đa hình thực chất nói gọn như thế này:
    Tính đa hình là các phương thức có cùng tên nhưng tuỳ vào hoàn cảnh mà có cách hành xử khác nhau.
    VD: lớp hình tròn và hình vuông cùng kế thừa từ lớp hình học cả 2 đều có phương thức tính chu vi.
    Hình tròn: chu vi= 2*pi*r; (1)
    Hình vuông: chu vi= 4*a; (2)
    Như vậy nếu ta gọi phuơng thức tính chu vi thì sẽ không biết tính chu vi như thế nào.
    Lúc này nếu ta thực hiện
    hinhtron.chuvi=? [lúc này chu vi sẽ được thưc hiện theo công thức 1]
    hinhvuong.chuvi=? [lúc này chu vi sẽ được thưc hiện theo công thức 2]

Các đề tài tương tự

  1. Trả lời: 6
    Bài viết cuối: 31-07-2013, 07:51 PM
  2. Mỹ phẩm Thu Huyền: Bộ mỹ phẩm trị nám, tàn nhang Bride Korea - call 0906.260.160
    Gửi bởi kimkim8910 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 12-03-2012, 10:49 PM
  3. phần merge module bị thiếu crystal report phải làm thế nào ?
    Gửi bởi manhluc88 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 06-01-2011, 01:11 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn