2009-07-29 34 views
6

Tôi đang bối rối về sự trừu tượng và encapsulation.What tôi cảm thấy là lớp đó là đóng gói vì nó đóng gói dữ liệu và hành vi, trong khi giao diện là bình luận abstraction.PleaseGiao diện có mức trừu tượng cao nhất không?

+1

Đây là nhận xét của tôi: Cái gì? Bạn cần giải thích thêm. –

+0

Loại giao diện sai.Bạn nên gắn thẻ này với OOP và bất kỳ ngôn ngữ nào bạn đang nói đến, vì vậy chúng tôi có thể chỉ cho bạn đúng hướng. –

+0

Các thuật ngữ này có khác nhau về các ngôn ngữ khác nhau không. Tôi đoán OOPS giống nhau ở mọi nơi. – Rohit

Trả lời

13

Tôi nghĩ thuật ngữ của bạn bị nhầm lẫn.

  1. Encapsulation - đặt dữ liệu và chức năng liên quan ở một nơi. Chúng tôi có thể thực hiện việc này thông qua các lớp học

  2. Polymorphism - Cho phép các giá trị của các loại dữ liệu khác nhau được xử lý bằng giao diện đồng nhất.

Đa hình có thể đạt được bằng cách kế thừa các lớp cơ sở (với chức năng ảo) và/hoặc bằng cách triển khai giao diện.

Những kỹ thuật này (và những thứ khác) cung cấp cho chúng tôi abstraction, điều này thực sự áp dụng cho bất kỳ quy trình nào chúng tôi sử dụng để giải quyết vấn đề thành các thành phần nhỏ hơn.

EDIT

Q) Bạn hỏi "Tôi có thể nói, trừu tượng là hệ thống thứ bậc trên cùng được thực hiện thông qua đóng gói và đa hình?"

A) Tôi không thể trả lời câu hỏi đó, tôi không biết ý bạn là gì bởi "trên cùng" và "cao nhất". Không có phân cấp ở đây.

Functional Decomposition là một dạng trừu tượng, có thể đạt được mà không cần sử dụng Định hướng đối tượng, nó sẽ nằm ở đâu trong cấu trúc phân cấp?

Điều tốt nhất tôi có thể làm với một hệ thống phân cấp là định nghĩa này (thẳng ra khỏi đầu của riêng tôi, do đó, YMMV)

  1. Trừu tượng là việc thực hành phá vỡ một vấn đề lớn thành thành phần nhỏ hơn, vì vậy mỗi nhỏ vấn đề có thể được làm việc trên (tương đối) cô lập.
  2. Đa hình là một kỹ thuật mà chúng tôi có thể sử dụng để đạt được sự trừu tượng hóa. Nó liên quan đến việc xác định các loại khác nhau dữ liệu và hành vi có thể được được xử lý một cách đồng nhất.
  3. Giao diện chỉ khai báo các loại hành vi , đóng gói hành vi trong một loại. Nó cung cấp không có hành vi hoặc dữ liệu thực tế
  4. Lớp trừu tượng tuyên bố loại hành vi , nhưng cũng có thể cung cấp hành vi và dữ liệu , tất cả được đóng gói trong một loại.
  5. Do đó, một giao diện có thể được nhìn thấy như cung cấp một đơn giản hoặc tinh khiết dạng đa hình hơn lớp trừu tượng.
+0

Tôi có thể nói, trừu tượng là hệ thống phân cấp cao nhất được thực hiện thông qua đóng gói và đa hình. – Rohit

+1

Điều này xóa tất cả mọi người. – Rohit

+0

Bạn được chào đón, cảm ơn. –

4

Nhìn vào bài viết trên Wikipedia về abstraction in Computer Science. Đặc biệt, bạn có thể quan tâm đến sự trừu tượng đối với lập trình hướng đối tượng. Tôi đã trích dẫn một phần của bộ phận có liên quan dưới đây:

Về lý thuyết lập trình hướng đối tượng, trừu tượng liên quan đến cơ sở để xác định đối tượng đại diện trừu tượng "diễn viên" có thể thực hiện công việc, báo cáo trên và thay đổi trạng thái của chúng và "giao tiếp" với các đối tượng khác trong hệ thống. Đóng gói hạn đề cập đến việc che giấu các chi tiết của nhà nước, nhưng mở rộng khái niệm về kiểu dữ liệu từ ngôn ngữ lập trình trước đó để hành vi sư mạnh mẽ nhất với dữ liệu, và tiêu chuẩn hóa cách rằng các loại dữ liệu khác nhau tương tác, là sự bắt đầu trừu tượng. Khi trừu tượng tiến hành các hoạt động được xác định, cho phép các đối tượng các loại khác nhau được thay thế, nó được gọi là đa hình. Khi nó tiến hành theo hướng ngược lại, bên trong các loại hoặc lớp học, cấu trúc chúng để đơn giản hóa một phức tạp thiết lập các mối quan hệ, nó được gọi là ủy quyền hoặc kế thừa.

Nói chung, tôi sẽ nói rằng các giao diện VÀ các lớp nên là ví dụ về trừu tượng, xử lý dữ liệu dưới dạng "khái niệm" thay vì dữ liệu thô. Sự đóng gói được sử dụng để làm cho các trừu tượng này hoạt động tốt với các trừu tượng khác về các khái niệm "những thứ" khác nhau.

1

Mục đích của đóng gói là để ẩn các chi tiết thực hiện:

Một ví dụ rất giả tạo:

public class Person { 
    private int age; 

    public boolean canBuyBeer() { 
    return age >= 21; 
    } 

} 

bạn có thể sau đó thay đổi này để:

public class Person { 
    private int age; 
    private boolean isInUSA 


    public boolean canBuyBeer() { 
    if(isInUSA) 
     return age >= 21; 
    else 
     return age >= 18; 
    } 

} 

Các quy định liên quan tuổi tác và nguồn gốc có thể thay đổi nhưng người gọi không cần biết.

Giao diện có thể được sử dụng để trừu tượng hóa các loại khác nhau. Xem xét việc này:

public interface Beverage { 
    public boolean containsAlchohol; 
} 

public class Soda implements Beverage { 
    public boolean containsAlchohol { 
     return false; 
    } 
} 
public class Beer implements Beverage { 
    public boolean containsAlchohol { 
     return true; 
    } 
} 

Bạn có thể cập nhật Person như:

public class Person { 
    private int age; 
    private boolean isInUSA 


    public boolean canBuyBeverage(Beverage b) { 
    if(b.containsAlchohol()) { 
     if(isInUSA) 
      return age >= 21; 
     else 
      return age >= 18; 
    } 
    else { 
     return true; 
    } 
    } 

} 

Vì vậy, Người được đóng gói logic nếu khi một người có thể mua một loại nước giải khát. Giao diện đồ uống tóm tắt logic liên quan đến đồ uống.

Ví dụ tốt hơn có thể có, nhưng đó là ý tưởng chung.

2

Tôi nghĩ bạn đã hiểu đúng. Giao diện nói rộng rãi: đây là loại điều này là. Một lớp học nói: đây là cách hoạt động của nó; Tôi sẽ ẩn các chi tiết bên trong bản thân mình. Một lớp là một (thường) thực hiện cụ thể về trừu tượng giao diện.

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