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ố 17 kết quả

Đề tài: Abstract class Vs Interface! Help me!

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

    Wink Abstract class Vs Interface! Help me!

    Em mới học OOP trong C#, thầy có cho em tìm hiểu về đề tài so sánh Abstract class và Interface. Em có tìm hiểu và biết chút ít, nhưng vẫn chưa thông lắm. Mong mấy Pác nào hiểu thì chỉ cho em rõ hơn chút xíu, nếu có tài liệu thì càng tốt. Thứ 4 tuần này em nộp bài rùi Thanks all...

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

    Interface thì chỉ có tên phương thức cùng với tham số, ko có xử lý gì hết. Lớp nào sử dụng nó thì phải viết code xử lý cho tất cả các phương thức mà nó khai báo.
    Abstract có tên phương thức, tham số và có thể có xử lý. Lớp nào sử dụng nó thì có quyền sử dụng tất cả các phương thức mà nó có, ko cần phải viết lại. Khi nào cần override thì mới viết lại.
    Mình chỉ hiểu sơ sơ vậy thui.

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

    Có học Java nên biết một chút

    A.Giống nhau:
    1. các class kế thừa từ abstract class hoặc liên kết Interface bắt buộc phải đưa ra chỉ thị cho các methods đã khai báo. (viết code hoàn chỉnh)
    2. Mục đích đều là để tạo giao diện chung cho các lớp kế thừa hoặc xử lý hình thức.
    3. 2 cái này đều mang tính chất Encapsulation của OOP

    B.Khác nhau
    1. Interface là một giao diện đơn, định nghĩa những method mà một giao diện nói chung đều bắt buộc phải có. Còn abstract thì không nhất thiết phải có.

    2. Các lớp chuyển giao Interface bắt buộc phải đưa ra code chỉ thị cho tất cả các method được khai báo. Còn abstract thì không nhất thiết.

    3. Interface thì có thể sử dụng tất cả các method đã đưa ra chỉ thị còn abstract với class thì chỉ có những method nào có chỉ thị thì mới được sử dụng còn nếu không thì sẽ sinh ra lỗi (encapsulation failure).

    4. Abstract còn thể hiện tính Inheritance (kế thừa) của OOP trong khi Interface thì không.

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

    So sánh Interface với Abstract Class là câu hỏi thuộc vào hàng kinh điển của Object Oriented ^^!

    Hiểu một cách đơn giản thì interface giống hệt 1 abstract class mà tất cả các method đều là abstract. Interface chỉ là cái "vỏ", không có method nào trong Interface có "ruột". Abstract Class thì có method có ruột, có cái không. Nôm na thì cái Abtract Class là con lai giữa class và interface ^^!

    Cheers!
    Is the moon rising...

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

    Theo tui thây để hiểu cái bày bạn nên nắm chắc định nghĩa của nó, cụ thể câu cú thế nào thì tôi quên rồi, Nhưng nội dung chủ yêu nó là :

    "Lớp trùi tượng là một lớp trùi tượng thật sự... không tạo ra bất kỳ thể hiện nào"
    -> Là một lớp => tính đơn kế thừa cho các thế hệ
    -> Trùi tượng thật sự => Không thể new môt obj nào từ lớp ảo.

    "Giao diện là một cam kết thực thi các phương thưc"
    -> gọi phương thức thông qua giao diện núi biết lớp có cam kết với giao diện đó.


    Trích dẫn Nguyên bản được gửi bởi bvKim Xem bài viết
    Có học Java nên biết một chút
    4. Abstract còn thể hiện tính Inheritance (kế thừa) của OOP trong khi Interface thì không.
    Tui thấy interface kế thừa, mở rộng rầm rầm đâu có gì đâu mà không được (vì nó là giải pháp làm giảm đi sự phức tạp của tính đa kế thừa trong C++)

    Trích dẫn Nguyên bản được gửi bởi darkan Xem bài viết
    So sánh Interface với Abstract Class là câu hỏi thuộc vào hàng kinh điển của Object Oriented ^^!

    Hiểu một cách đơn giản thì interface giống hệt 1 abstract class mà tất cả các method đều là abstract. Interface chỉ là cái "vỏ", không có method nào trong Interface có "ruột". Abstract Class thì có method có ruột, có cái không. Nôm na thì cái Abtract Class là con lai giữa class và interface ^^!

    Cheers!
    Tui nghĩ là nếu nói là giống hết ở mức đơn giản thì cũng không đúng bởi vì đơn giản nhất là interface chỉ chưa list các methods còn đã là class thì có thể có thềm thuộc tính....
    linhdkl
    -------------------------------------------------------------------------------------------
    linhdkl at gmail.com
    http://linhdkl.blogspot.com

  6. #6
    Ngày gia nhập
    10 2007
    Bài viết
    7

    Mặc định Abstract class Vs Interface! Help me!

    Thanks mấy Pác nhiều.!.

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

    @ kids: Bạn có thể xem so sánh kỹ hơn ở đây http://mindprod.com/jgloss/interfacevsabstract.html

    @lindeptrai : bạn làm ơn ngó lại xem bạn đang viết cái gì nghen ^^! Dark chịu không hiểu được bạn đang viết những cái gì ^^! Những câu kiểu như "lớp trừu tượng là 1 lớp trừu tượng thực sự" thì ai mà hiểu nổi. Không rõ bạn trích ở sách nào ra ?

    Nữa là Dark nói là "hiểu một cách đơn giản" chứ không phải là interface hay abstract class ở mức đơn giản.Bạn chịu khó phân biệt hộ 2 cái này nghen.

    Cheers!
    Is the moon rising...

  8. #8
    Ngày gia nhập
    02 2008
    Bài viết
    88

    Interface vẫn chứa được Properties như thường, nó chỉ đơn giản thế này thôi.
    Đừng nghĩ phức tạp làm gì, trong C#
    Visual C# Code:
    1. public interface ISinhVien
    2.         {
    3.             string name { get; set;}//Thuoc tinh
    4.             void Cuphoc(DateTime Ngay); //Method
    5.         }
    Mình từ Caulacbovb qua)
    Giã từ VB6 đến với VB.Net, C# và Java.

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

    @Dark:
    tui nói là "Lớp trùi tượng là một lớp trùi tượng thật sự... không tạo ra bất kỳ thể hiện nào"
    ở đây nhấn mạnh về mặt ngữ nghĩa của từ trùi tượng ý muốn nói không tạo ra thể hiện nào của lớp cả.

    @anhtuyenbk:
    phải cái vidu của bạn thì xem cũng giống như là thuộc tính thật, nhưng theo tôi đây chỉ cách viết khác đi của 2 phương thức getXXX() setXXX(var) có rất nhiều trong MFC 6.0.
    Trong Interface bạn không thể public int i;
    linhdkl
    -------------------------------------------------------------------------------------------
    linhdkl at gmail.com
    http://linhdkl.blogspot.com

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

    Trích dẫn Nguyên bản được gửi bởi linhdeptrai Xem bài viết
    @anhtuyenbk:
    phải cái vidu của bạn thì xem cũng giống như là thuộc tính thật, nhưng theo tôi đây chỉ cách viết khác đi của 2 phương thức getXXX() setXXX(var) có rất nhiều trong MFC 6.0.
    Trong Interface bạn không thể public int i;
    Tui đang nói C# mà và bạn đừng lấy C++ mà áp đặt vô C#. Cái bạn nói là quy định của C++ và cái tôi nói là quy định của C#, thế thôi. Đừng lấy cái này mà áp đặt cái kia --> rồi nói nó chỉ là cách viết khác.........
    Trong C# phân biệt rất rõ ràng
    public int i; chỉ được coi là field là một biến khai báo trong class--> hoàn toàn ko phải là thuộc tính --> đương nhiên nó ko khai báo được trong interface.
    Và get;set; thì là thuộc tính, nhờ nó mới thể hiện được cái khả năng đầy đủ của một thuộc tính.
    Đã được chỉnh sửa lần cuối bởi anhtuyenbk : 10-11-2008 lúc 08:19 PM.
    Mình từ Caulacbovb qua)
    Giã từ VB6 đến với VB.Net, C# và Java.

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

  1. Video hướng dân lập trình: vlog2+: Giao diện và lớp ảo C# (Interface vs abstract)
    Gửi bởi quoctrung1002 trong diễn đàn Công cụ, ebooks C#, ASP.NET, và Windows Mobile
    Trả lời: 0
    Bài viết cuối: 05-10-2013, 10:32 AM
  2. Abstract class khác với class thường ở chổ nào
    Gửi bởi nhan_t3 trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 3
    Bài viết cuối: 27-05-2013, 01:18 AM
  3. Trong Objective C có Abstract class và Reflection hay không ?
    Gửi bởi ngocsonaat trong diễn đàn Thắc mắc lập trình Objective-C
    Trả lời: 14
    Bài viết cuối: 27-09-2011, 10:04 PM
  4. So sánh interface với abstract
    Gửi bởi thanhluan_1905 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 30-11-2010, 11:51 PM
  5. Viết Plugin Đọc các loại File trong C# Dùng Inhetrite Interface, Abstract, hay Class
    Gửi bởi buidinhba5 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 11-07-2009, 04:27 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