2010-07-27 57 views
33

Tôi có một số câu hỏi cơ bản về các lớp/phương thức trừu tượng.Tôi biết sử dụng cơ bản các lớp trừu tượng là tạo các khuôn mẫu cho các lớp trong tương lai. Nhưng có sử dụng nhiều hơn của họ? Khi nào bạn nên thích chúng hơn các giao diện và khi nào thì không? Ngoài ra khi nào các phương thức trừu tượng có ích?Khi nào và Tại sao sử dụng các lớp/phương pháp trừu tượng?

+0

thể trùng lặp của [Interface vs class Base] (http://stackoverflow.com/questions/56867/interface-vs-base-class) - và có rất nhiều ** ** nhiều hơn với các câu trả lời có chất lượng rất cao: chỉ cần tìm kiếm trên 'lớp trừu tượng giao diện'. –

Trả lời

46

Tôi biết việc sử dụng cơ bản các lớp trừu tượng là tạo mẫu cho các lớp học trong tương lai. Nhưng có sử dụng nhiều hơn nữa của chúng không?

Không chỉ bạn có thể xác định mẫu cho trẻ em, mà lớp học trừu tượng mang lại lợi ích bổ sung cho phép bạn xác định chức năng mà lớp con bạn có thể sử dụng sau này.

Bạn không thể cung cấp triển khai cho Giao diện.

Khi nào bạn thích chúng hơn giao diện và khi nào thì không?

Lớp trừu tượng phù hợp nếu bạn muốn cung cấp chi tiết triển khai cho con mình nhưng không muốn cho phép thể hiện lớp học trực tiếp (cho phép bạn định nghĩa một phần).

Nếu bạn chỉ muốn xác định hợp đồng cho Đối tượng cần theo dõi, sau đó sử dụng Giao diện.

Ngoài ra khi nào phương pháp trừu tượng có ích?

Phương pháp trừu tượng hữu ích giống như cách xác định các phương thức trong Giao diện hữu ích. Đó là một cách để các nhà thiết kế của lớp Tóm tắt nói "bất kỳ đứa trẻ nào của tôi PHẢI thực hiện phương pháp này".

+1

"Bạn không thể cung cấp triển khai cho Giao diện". Bạn có thể trong Java 8 với một phương thức mặc định. –

2

Ở cấp độ rất cao:

Sự trừu tượng thuộc loại nào xảy ra để tách mối quan tâm. Mã "Client" của một trừu tượng không quan tâm đến việc hợp đồng được hiển thị như thế nào bởi sự trừu tượng được đáp ứng. Bạn thường không quan tâm nếu một lớp chuỗi sử dụng một thực thi lưu trữ nội bộ được kết thúc bằng bộ đệm rỗng hoặc được theo dõi theo chiều dài bộ đệm, chẳng hạn. Encapsulation ẩn các chi tiết, nhưng bằng cách tạo các lớp/phương thức/etc. trừu tượng, bạn cho phép triển khai thay đổi hoặc để triển khai mới được thêm vào mà không ảnh hưởng đến mã máy khách.

4

đọc bài viết sau http://mycodelines.wordpress.com/2009/09/01/in-which-scenario-we-use-abstract-classes-and-interfaces/

lớp Abstract

-> Khi bạn có một yêu cầu nơi lớp cơ sở của bạn nên cung cấp thực hiện mặc định của một số phương pháp trong khi các phương pháp khác nên mở để bị ghi đè bởi các lớp học trẻ em sử dụng các lớp trừu tượng.

Ví dụ: một lần nữa lấy ví dụ về lớp xe ở trên. Nếu chúng ta muốn tất cả các lớp bắt nguồn từ Phương tiện để triển khai phương thức Drive() theo cách cố định trong khi các phương pháp khác có thể bị ghi đè bởi các lớp con.Trong trường hợp như vậy, chúng tôi triển khai lớp học Lớp xe là lớp trừu tượng với việc triển khai Drive trong khi để các phương pháp/thuộc tính khác trừu tượng để chúng có thể bị ghi đè bởi các lớp con.

-> Mục đích của lớp tóm tắt là để cung cấp định nghĩa chung cho lớp cơ sở mà nhiều lớp học có thể chia sẻ .

Ví dụ một thư viện lớp học có thể xác định một lớp trừu tượng được sử dụng như một tham số với nhiều chức năng của mình và yêu cầu các lập trình viên sử dụng thư viện để cung cấp thực hiện riêng của họ lớp bằng cách tạo ra một lớp dẫn xuất.

Sử dụng một lớp trừu tượng

Khi tạo một thư viện lớp mà sẽ được phân phối rộng rãi hoặc tái sử dụng, đặc biệt đối với khách hàng, sử dụng một lớp trừu tượng trong ưu tiên cho một giao diện ; bởi vì, nó đơn giản hóa phiên bản . Đây là thực tế được sử dụng bởi nhóm Microsoft đã phát triển Thư viện lớp cơ sở. (COM là được thiết kế xung quanh giao diện.) Sử dụng lớp trừu tượng để xác định lớp cơ sở chung cho một loại gia đình. Sử dụng lớp trừu tượng để cung cấp hành vi mặc định . Phân lớp chỉ có một lớp cơ sở trong một hệ thống phân cấp mà lớp thuộc về mặt logic.

1

Thông thường, người dùng sử dụng lớp trừu tượng để cung cấp một số chức năng không đầy đủ sẽ được phân lớp bởi lớp con cụ thể. Nó có thể cung cấp các phương thức được sử dụng bởi các lớp con của nó; nó cũng có thể đại diện cho một nút trung gian trong phân cấp lớp, đại diện cho một nhóm phổ biến của các lớp con cụ thể, phân biệt chúng theo một cách nào đó từ các lớp con khác của lớp cha của nó. Vì một giao diện không thể lấy được từ một lớp, đây là một tình huống khác mà một lớp (trừu tượng hoặc khác) sẽ là cần thiết, so với một giao diện.

Nguyên tắc chung là chỉ có các nút lá của một hệ thống phân cấp lớp mới được khởi tạo. Làm cho các nút không phải là lá trừu tượng là một cách dễ dàng để đảm bảo điều đó.

1

Lớp/phương pháp trừu tượng thường được sử dụng khi một lớp cung cấp một số chức năng cấp cao nhưng loại bỏ các chi tiết nhất định sẽ được triển khai bởi các lớp dẫn xuất. Làm cho lớp trừu tượng/phương thức đảm bảo rằng nó không thể được sử dụng riêng của nó, nhưng phải chuyên biệt để xác định các chi tiết đã được bỏ ra khỏi việc thực hiện mức cao.Điều này thường được sử dụng nhiều nhất với mô hình phương pháp mẫu:

http://en.wikipedia.org/wiki/Template_method_pattern

Các vấn đề liên quan