Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Xin hỏi sự hữu ích của Interface.Xin một ví dụ cụ thể để thấy ý nghĩa đó

  1. #1
    Ngày gia nhập
    01 2011
    Nơi ở
    http://laptrinhviet.net/
    Bài viết
    91

    Mặc định Xin hỏi sự hữu ích của Interface.Xin một ví dụ cụ thể để thấy ý nghĩa đó

    Em cố gắng đặt tiêu đề trọng tâm lắm,tuy nhiên cảm thấy thực sự chưa đúng hết bản chất câu hỏi.Nếu có sai min xử tội nhẹ thôi.

    Em mới tìm hiểu về Iterface,thấy việc các class khác kế thừa nó ,nhưng em thực sự chưa thấy nó hữu ích trong trường hợp nào.Ví dụ
    Em có 1 interface như sau:
    Code:
     public interface IHinhHoc
        {
            void ChuVi();
            void DienTich();
        }
    Em có Class HinhVuong kế thừa nó như sau:
    Code:
    class HinhVuong : IHinhHoc 
        {
            public void ChuVi()
            {
                Console.WriteLine("day la bieu thuc tinh chu vi");
            }
        }
    Rõ ràng khi này mình vẫn phải định nghĩa lại phương thức ChuVi,hay DienTich nếu muốn sử dụng.
    Thế thì mình kế thừa cái thằng Interface để làm gì
    Kiến thức nông cạn mong các bác chỉ giáo

  2. #2
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    Lớp HinhVuong không phải kế thừa IHinhHoc mà là thi hành lớp hình học, một quan hệ là Is-A, một quan hệ là Has-A, bạn muốn hiểu interface thì phải hiểu rõ hai quan hệ này.

    HinhVuong có quan hệ Is-A với IHinhhoc tức là HinhVuong IHinhHoc
    HinhVuong có quan hệ Has-A với IHinhhoc tức là HinhVuong có hỗ trợ IHinhHoc

    Có lớp Chạy và lớp Mèo thì quan hệ chắc chắn là Has-A do vậy phải dùng interface mới biểu thị được quan hệ giữa hai lớp

    mô thức hướng đối tượng không hay ở chỗ nó cho kế thừa lại mã nguồn, điều này bị phê phán rất nhiều, người ta khuyên bạn dùng kế tập hơn là kế thừa mã nguồn.
    Interface chỉ là kế thừa lại phần giao diện (coi như là chữ ký) của hàm chứ ko kế thừa mã nguồn.

    Bạn phải hiểu rằng kế thừa mã nguồn sinh ra là có hai mục đích, thứ nhất, để dùng lại mã nguồn, thứ hai là để đa hình.
    interface sinh ra chỉ để thực hiện mục đích thứ 2

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    71

    Trích dẫn Nguyên bản được gửi bởi pkthanh92 Xem bài viết
    Lớp HinhVuong không phải kế thừa IHinhHoc mà là thi hành lớp hình học, một quan hệ là Is-A, một quan hệ là Has-A, bạn muốn hiểu interface thì phải hiểu rõ hai quan hệ này.

    HinhVuong có quan hệ Is-A với IHinhhoc tức là HinhVuong IHinhHoc
    HinhVuong có quan hệ Has-A với IHinhhoc tức là HinhVuong có hỗ trợ IHinhHoc

    Có lớp Chạy và lớp Mèo thì quan hệ chắc chắn là Has-A do vậy phải dùng interface mới biểu thị được quan hệ giữa hai lớp

    mô thức hướng đối tượng không hay ở chỗ nó cho kế thừa lại mã nguồn, điều này bị phê phán rất nhiều, người ta khuyên bạn dùng kế tập hơn là kế thừa mã nguồn.
    Interface chỉ là kế thừa lại phần giao diện (coi như là chữ ký) của hàm chứ ko kế thừa mã nguồn.

    Bạn phải hiểu rằng kế thừa mã nguồn sinh ra là có hai mục đích, thứ nhất, để dùng lại mã nguồn, thứ hai là để đa hình.
    interface sinh ra chỉ để thực hiện mục đích thứ 2
    Theo mình nghĩ, việc sử dụng lại mã nguồn thế nào cho hiệu quả, cái đó phụ thuộc vào trình độ của Developer. Nếu có từ 5-6 cái class inherit chồng chất lên nhau thì rõ ràng là không hiệu quả và làm khó cho những dev khác cho việc hiểu và đọc mã nguồn. Vậy ứng dụng thừa kế mã nguồn như thế nào cho hợp lí:
    theo mình trong những trường hợp có nhiều class cần dùng chung một function:
    Ví dụ như trong package Data Access Layer gồm nhiều class làm nhiệm vụ thao tác với database, các class này đều có nhu cầu logging lại nếu có lỗi. Giải pháp ở đây là có thể định nghĩa 1 class base có function log và các class thực thi thừa kế từ class base này, vậy tất cả các class thực thi đều có function log. Và việc bạn thay đổi function log khi cần thiết cũng rất dễ dàng.

  4. #4
    Ngày gia nhập
    01 2011
    Nơi ở
    http://laptrinhviet.net/
    Bài viết
    91

    Mặc định pkthanh92

    Chào bác pkthanh92.Nói chung bác đưa ra ý kiến làm em hiểu ra vài điều,
    uh thì là thi hành chứ không kế thừa.
    Giả sử khi này em viết Class HinhVuong,sau đó viết tiếp 2 phương thức ChuVi và DienTich trực tiếp trên Class này,sau đó ở đâu cần thì cứ đem ra mà phang.

    Chứ thi hành cái thằng Interface làm cái quái quỷ gì,ý em là thế,dùng cái thằng Interface giúp em được gì.Và bác cho em 1 ví dụ về sự tiện ích của nó được không ( tiện ích hơn việc khai báo trực tiếp class như em)

  5. #5
    Ngày gia nhập
    07 2010
    Nơi ở
    chỗ kín
    Bài viết
    446

    @billsang: mình hỏi khí không phải, bạn có kiến thức về đa hình ko

    @gauto988: đúng vậy bạn ạ, ví dụ logging của bạn thì base class chính là một interface đó

  6. #6
    Ngày gia nhập
    01 2011
    Nơi ở
    http://laptrinhviet.net/
    Bài viết
    91

    Mặc định uhm

    Mình chỉ là dẫn nghiệp dư tự học lập trình thôi,chứ chẳng phải dân kỹ thuật nên kiến thức it hạn hẹp lắm.Đa hình thì có đọc tài liệu,cũng biết nó code cái gì,còn ứng dụng thì thực sự mình chưa biết nó phục vụ mục đích gì của mình,nên không đi sâu.
    Mình đang làm cái MVC,thấy code mẫu trên mạng download về thấy người ta cứ hay khai báo interface thì tìm hiểu thôi.
    Không biết mới nhờ các hảo thủ chỉ giáo.Nếu có gì mạo phạm thì xin cáo lỗi anh em

  7. #7
    Ngày gia nhập
    05 2011
    Bài viết
    78

    Vì c# không có đa kế thừa nên người ta dùng Interface để thay thế thôi bạn a, theo mình thì đó là đa kế thừa của c#

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

  1. Định nghĩa đầy đủ về GDI - Graphics Device Interface
    Gửi bởi kwideur trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 12-11-2013, 04:43 PM
  2. Định nghĩa ép kiểu 2 interface khác nhau rong C# là thế nào?
    Gửi bởi pkthanh92 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 24-07-2012, 07:18 PM
  3. Trả lời: 0
    Bài viết cuối: 02-08-2011, 03:26 PM
  4. Thắc mắc về interface ,giúp mình
    Gửi bởi qhai_2009 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 1
    Bài viết cuối: 06-11-2010, 01:33 AM
  5. Xây dựng interface trên C# như thế nào?
    Gửi bởi zoro_bka trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 5
    Bài viết cuối: 15-10-2010, 01:46 AM

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