2011-11-03 6 views
6

Tôi đã tìm kiếm qua nhiều bài đăng S/O và không tìm thấy câu trả lời giúp tôi.
Tôi muốn có được một cái nhìn tinh thần về một lớp trừu tượng là gì và giao diện là gì. Tôi đã đọc qua bài đăng này Real world abstract class usage simple samples, nhưng tôi vẫn chưa rõ về các khái niệm.Đang cố gắng để có được một khái niệm thế giới thực của lớp Tóm tắt vs Giao diện trong asp.net

Tôi hy vọng ai đó có thể mô tả một thế giới thực dưới dạng đối tượng "Người". Vì vậy, thừa kế sẽ là "Người" -> "nhân viên" -> "Người quản lý"
Và Overriding sẽ là "Mức lương của nhân viên" sẽ trở thành "Doanh thu hoa hồng nhân viên"

Làm thế nào tôi có thể mô tả một lớp trừu tượng và một giao diện trong một khái niệm đối tượng Person?

Trả lời

9

Có các chế độ xem khác nhau về chủ đề sử dụng giao diện so với lớp trừu tượng. Một giao diện, tuy nhiên, nên thể hiện hành vi của một đối tượng (những gì nó có thể làm) và lớp trừu tượng nên xác định nó là gì. Về cơ bản "tôi có thể" so với "tôi" từ sự nhìn nhận của đối tượng.

Vì vậy, nếu chúng ta có một Người, đó là danh từ và vì vậy chúng tôi sẽ sử dụng một lớp trừu tượng để xác định nó. Bất cứ điều gì mà "là một" Người sẽ kế thừa từ lớp đó. Nếu chúng ta muốn định nghĩa một số hành vi mô tả một số hành vi mà Person có khả năng không mở rộng cho tất cả mọi người, chúng ta nên đặt nó vào một giao diện.

Sử dụng mối quan hệ mà bạn đã xác định (Người -> Nhân viên -> Người quản lý), chúng tôi có thể nói rằng Nhân viên triển khai IFirable và Người quản lý triển khai IFirer. Nhân viên có thể bị sa thải và người quản lý có thể bắn một nhân viên.

+0

Tương tự tốt. Bạn đang nói Người là một lớp trừu tượng? – DotNetRookie

+1

@DotNetCookie - Tôi thực sự không muốn nói có hoặc không có điều đó. Tất cả phụ thuộc vào bối cảnh của vấn đề bạn đang cố gắng giải quyết. Nếu bạn cần để có thể khởi tạo một đối tượng Person "plain", thì điều đó sẽ không có ý nghĩa gì nhiều. Trong trường hợp này (Person -> Employee -> Manager) nó có thể có ý nghĩa để làm cho lớp cơ sở, Person, abstract. –

+1

Hành vi tôi muốn sử dụng cho giao diện với Person là IEat, có thể khai báo phương thức Feed. Điểm mấu chốt là các giao diện bị cắt ngang, vì vậy Mammal: IEat> Person> vv và PlantLife: IEat> Cactus, do đó một Person không phải là PlantLife (một số hành động như nó) nhưng tất cả đều ăn theo một cách nào đó. –

4

Tôi xin lỗi vì tôi không sử dụng ví dụ cá nhân của bạn, vui lòng coi đây là nhận xét mở rộng.

Tôi tìm thấy nó dễ nhất để giải thích các khái niệm, cho những người không có nền tảng lập trình, sử dụng sự tương tự với điều mà hầu hết mọi người đã hiểu: Ép nhựa!

phép nói rằng chúng tôi đang làm trái nhựa ví dụ:

Một giao diện được như nấm mốc, nó có hình dạng của sản phẩm cuối cùng, nhưng bạn có thể điền vào nó với tất cả các loại màu sắc và chất liệu khác nhau. Tất cả chúng sẽ có cùng một hình dạng cuối cùng, ngay cả khi chúng hoàn toàn khác nhau về màu sắc và kết cấu.

Lớp trừu tượng sẽ giống như một thứ gì đó cần thêm một bước, như vẽ. Bạn tạo ra trái cây nhựa cơ bản, sau đó gửi nó đi để có được một số bức tranh hoặc lông dán trên hoặc một cái gì đó.

Quả chưa hoàn thành giống như một lớp trừu tượng trong đó có định nghĩa nhiều hơn về sản phẩm cuối cùng thì khuôn đó có, nhưng bản thân nó chưa hoàn chỉnh. Nó cần nhiều công việc hơn để hoàn thành, và các sản phẩm cuối cùng có thể là các màu hoàn toàn khác nhau, nhưng chúng vẫn cơ bản giống nhau.

Tôi hy vọng điều đó sẽ hữu ích!

4

OK, chúng ta hãy xem nếu tôi hiểu câu hỏi của bạn ...

Tôi nghĩ conceptaully bạn không chắc chắn về sự khác biệt và/hoặc điểm tương đồng giữa việc sử dụng các giao diện và lớp trừu tượng.Nếu đó là vấn đề thì heres của tôi "starter cho 10" tóm tắt;

Các lớp trừu tượng không thể được instantiated, nhưng có thể chứa chi tiết thực hiện, vì vậy khi phát sinh một lớp từ một bạn nhận được hợp đồng và bất kỳ hành vi mặc định bạn đặt trong lớp trừu tượng. Ví dụ lớp Person của bạn (tôi giả định một lớp trừu tượng của nó cho ví dụ này) sẽ định nghĩa hợp đồng một lớp Employee hoặc Manager có nguồn gốc phải (ít nhất) có, nhưng cũng có thể cung cấp một số hành vi mặc định.

Giao diện mặt khác chỉ ghi rõ hợp đồng; những gì thực hiện các lớp học phải làm, họ không thể cung cấp bất kỳ cách thức thực hiện. Ví dụ, nếu "Person" trong ví dụ của bạn là infact một interface nó wohuld định nghĩa những lớp nào đang thực thi nó (Employee và Manager) phải làm, nhưng không thể cung cấp bất kỳ sự thực thi mặc định nào cho hợp đồng đó.

Cũng lưu ý rằng bằng nhiều ngôn ngữ (Java, C#, Delphi) bạn có thể kế thừa từ chỉ một lớp cha, nhưng có thể triển khai nhiều giao diện.