Trừu tượng VS Thông tin Ẩn VS Đóng gói


167

Bạn có thể cho tôi biết sự khác biệt giữa trừu tượngẩn thông tin trong phát triển phần mềm là gì không?

Tôi bị bối rối. Trừu tượng che giấu việc thực hiện chi tiết và thông tin ẩn tóm tắt toàn bộ chi tiết của một cái gì đó.

Cập nhật: Tôi tìm thấy một câu trả lời tốt cho ba khái niệm này. Xem câu trả lời riêng biệt dưới đây cho một số trích dẫn được thực hiện từ đó .


"Đóng gói sau đó là kỹ thuật đóng gói thông tin theo cách để che giấu những gì cần ẩn và hiển thị những gì được dự định hiển thị." ; nhớ rằng đóng gói được thực hiện thông qua ẩn thông tin.
wulfgarpro


trích dẫn kink bị hỏng
Rishi Dua

Câu trả lời:


152

Về nguồn! Grady Booch nói (trong Phân tích và Thiết kế hướng đối tượng, trang 49, ấn bản thứ hai):

Trừu tượng hóa và đóng gói là các khái niệm bổ sung: trừu tượng tập trung vào hành vi có thể quan sát được của một đối tượng ... đóng gói tập trung vào việc thực hiện dẫn đến hành vi này ... đóng gói thường đạt được thông qua việc che giấu thông tin, đó là quá trình che giấu tất cả những bí mật của đối tượng không đóng góp vào đặc điểm thiết yếu của nó.

Nói cách khác: trừu tượng = đối tượng bên ngoài; đóng gói (đạt được thông qua ẩn thông tin) = đối tượng bên trong,

Ví dụ: Trong .NET Framework, System.Text.StringBuilderlớp cung cấp một sự trừu tượng hóa trên bộ đệm chuỗi. Sự trừu tượng hóa bộ đệm này cho phép bạn làm việc với bộ đệm mà không cần quan tâm đến việc thực hiện nó. Do đó, bạn có thể nối các chuỗi vào bộ đệm mà không cần quan tâm đến cách StringBuilderbên trong theo dõi những thứ như con trỏ vào bộ đệm và quản lý bộ nhớ khi bộ đệm đầy (điều này thực hiện với việc đóng gói thông qua ẩn thông tin).

rp


5
bạn có nói rằng, trong cùng một cách trừu tượng và đóng gói là bổ sung, đóng gói và che giấu thông tin cũng là bổ sung? Chắc chắn, đóng gói đạt được thông qua việc che giấu thông tin, nhưng ... không phải là đóng gói cơ chế thông qua đó ẩn thông tin được thực hiện?
wulfgarpro

Một ví dụ thế giới thực khác cho định nghĩa của Booch có sẵn ở đây
tuổi thọ

Bạn có thể vui lòng cho tôi biết liệu có đúng không khi nói rằng Trừu tượng được hiểu rõ nhất qua phối cảnh của Mã khách hàng trong khi Encapsulation được hiểu rõ nhất từ ​​phối cảnh Mã dịch vụ (tức là chính Lớp đóng gói)?
user1338998

Ví dụ thực tế cho định nghĩa trên được giải thích ở đây: stackoverflow.com/a/635755/3181500
user3181500

83

OP đã cập nhật câu hỏi của anh ấy với một số trích dẫn mà anh ấy đã tìm thấy, cụ thể là trong một bài viết của Edward V. Berard có tiêu đề, "Trừu tượng, đóng gói và che giấu thông tin" . Tôi đang đăng lại một phiên bản cập nhật và định dạng lại một chút của bản cập nhật của OP, vì nó phải là một câu trả lời theo đúng nghĩa của nó.

(Tất cả các trích dẫn được lấy từ bài báo đã đề cập ở trên.)

Trừu tượng:

"Một điểm nhầm lẫn về sự trừu tượng là việc sử dụng nó như cả quá trình và thực thể. Trừu tượng, như một quá trình, biểu thị việc trích xuất các chi tiết cần thiết về một mặt hàng, hoặc một nhóm các mặt hàng, trong khi bỏ qua các chi tiết không cần thiết. thực thể, biểu thị một mô hình, chế độ xem hoặc một số đại diện tập trung khác cho một mục thực tế. "

Ẩn thông tin:

"Giao diện hoặc định nghĩa của nó đã được chọn để tiết lộ ít nhất có thể về hoạt động bên trong của nó." - [Parnas, 1972b]

"Trừu tượng có thể là [V]] được sử dụng như một kỹ thuật để xác định thông tin nào sẽ bị ẩn."

"Sự nhầm lẫn có thể xảy ra khi mọi người không phân biệt được việc che giấu thông tin và một kỹ thuật (ví dụ, trừu tượng hóa) được sử dụng để giúp xác định thông tin nào sẽ bị ẩn."

Đóng gói:

"Nó [Bầu] đề cập đến việc xây dựng một viên nang, trong trường hợp là một rào cản về khái niệm, xung quanh một số bộ sưu tập của sự vật." - [Wirfs-Brock et al, 1990]

"Như một quy trình, đóng gói có nghĩa là hành động bao quanh một hoặc nhiều vật phẩm trong một thùng chứa [Cành]. Đóng gói, như một thực thể, đề cập đến một gói hoặc bao vây chứa (chứa, bao vây) một hoặc nhiều vật phẩm."

"Nếu đóng gói là 'điều tương tự như việc che giấu thông tin', thì người ta có thể đưa ra lập luận rằng 'mọi thứ được gói gọn cũng bị ẩn đi'. Điều này rõ ràng là không đúng sự thật. "

Phần kết luận:

"Trừu tượng hóa, che giấu thông tin và đóng gói rất khác nhau, nhưng các khái niệm có liên quan cao. Người ta có thể lập luận rằng trừu tượng hóa là một kỹ thuật giúp chúng ta xác định thông tin cụ thể nào sẽ được hiển thị và thông tin nào sẽ được ẩn đi. để đóng gói thông tin theo cách che giấu những gì cần ẩn và hiển thị những gì được dự định hiển thị. "


giải thích tuyệt vời thực tế. nó sẽ là tuyệt vời để cung cấp các ví dụ cụ thể trong java. Theo tôi, setter / getter trong java che giấu việc thực hiện, do đó đạt được Information Hiding(hoặc ẩn thực hiện), trong khi đó việc classđạt được sự đóng gói và trừu tượng hóa đạt được thông qua privatetruy cập
abarik

57

Abstraction đang ẩn các chi tiết thực hiện bằng cách cung cấp một lớp trên chức năng cơ bản.

Information Hidingđang che giấu dữ liệu đang bị ảnh hưởng bởi việc thực hiện đó. Sử dụng privatepublicđi theo điều này. Ví dụ, ẩn các biến của các lớp.

Encapsulationchỉ đưa tất cả dữ liệu và chức năng tương tự vào một nhóm, ví dụ như Classtrong lập trình; Packettrong mạng.

Thông qua việc sử dụng các lớp học, chúng tôi thực hiện tất cả ba khái niệm - Abstraction, Information HidingEncapsulation


33

Xin đừng phức tạp hóa các khái niệm đơn giản.

Đóng gói : Đóng gói dữ liệu và phương thức vào một đơn vị là Đóng gói (ví dụ: Lớp)

Trừu tượng : Đó là một hành động chỉ đại diện cho những điều thiết yếu mà không bao gồm các chi tiết nền. (ví dụ: Giao diện)

ĐỂ KIỂM TRA VÀ THÔNG TIN THÊM GOTO:

http://thecodekey.com/C_VB_Codes/Encapsulation.aspx

http://thecodekey.com/C_VB_Codes/ sát thương.aspx

Định nghĩa được phê duyệt ở đây

Tái bút: Tôi cũng nhớ định nghĩa từ một cuốn sách có tên C ++ của Sumita Arora mà chúng tôi đọc ở lớp 11;)


6

Ý nghĩa của sự trừu tượng được đưa ra bởi Từ điển tiếng Anh Oxford (OED) gần nhất với ý nghĩa dự định ở đây là 'Hành động tách biệt trong suy nghĩ'. Một định nghĩa tốt hơn có thể là 'Đại diện cho các tính năng thiết yếu của một cái gì đó mà không bao gồm nền hoặc chi tiết không cần thiết.'

Ẩn thông tin là nguyên tắc mà người dùng của một thành phần phần mềm (chẳng hạn như một lớp) chỉ cần biết các chi tiết cần thiết về cách khởi tạo và truy cập thành phần đó, và không cần biết chi tiết về việc triển khai.

Chỉnh sửa : Tôi dường như trừu tượng là quá trình quyết định phần nào của việc thực hiện nên được ẩn .

Vì vậy, nó không trừu tượng thông tin VERSUS ẩn. Đó là thông tin che giấu sự trừu tượng của VIA.


4

Trừu tượng

Trừu tượng là một hành động đại diện cho các chi tiết essentail mà không bao gồm các chi tiết nền. Một lớp trừu tượng chỉ có chữ ký phương thức và lớp triển khai có thể có cách triển khai riêng, theo cách này, các chi tiết phức tạp sẽ bị ẩn khỏi người dùng. Trừu tượng tập trung vào cái nhìn bên ngoài. Nói cách khác, Trừu tượng là tách biệt các giao diện từ việc triển khai thực tế.

Đóng gói

Đóng gói giải thích ràng buộc các thành viên dữ liệu và phương thức thành một đơn vị. Ẩn thông tin là mục đích chính của đóng gói. Đóng gói được thực hiện bằng cách sử dụng các chỉ định truy cập như riêng tư, công cộng, được bảo vệ. Các biến thành viên lớp được đặt ở chế độ riêng tư để chúng không thể truy cập trực tiếp ra thế giới bên ngoài. Đóng gói tập trung vào quan điểm bên trong. Nói cách khác, Encapsulation là một kỹ thuật được sử dụng để bảo vệ thông tin trong một đối tượng khỏi đối tượng khác.


3

Trừu tượng là ẩn chi tiết thực hiện khi bạn đặt nó.

Bạn trừu tượng một cái gì đó đến một điểm đủ cao mà bạn sẽ chỉ phải làm một cái gì đó rất đơn giản để thực hiện một hành động.

Ẩn thông tin là ẩn chi tiết thực hiện. Lập trình rất khó. Bạn có thể có rất nhiều thứ để giải quyết và xử lý. Có thể có các biến bạn muốn / cần theo dõi rất chặt chẽ. Ẩn thông tin đảm bảo rằng không ai vô tình phá vỡ một cái gì đó bằng cách sử dụng một biến hoặc phương pháp bạn tiếp xúc công khai.

Hai khái niệm này được liên kết rất chặt chẽ với nhau trong lập trình hướng đối tượng.


3

Trừu tượng - Đó là quá trình xác định các đặc điểm thiết yếu của một đối tượng mà không bao gồm các chi tiết không liên quan và tẻ nhạt.

Đóng gói - Đó là quá trình bao bọc dữ liệu và các chức năng thao tác dữ liệu này thành một đơn vị.

Trừu tượng và đóng gói là các khái niệm liên quan nhưng bổ sung.

  1. Trừu tượng là quá trình. Đóng gói là cơ chế mà Trừu tượng được thực hiện.

  2. Trừu tượng tập trung vào hành vi quan sát được của một đối tượng. Đóng gói tập trung vào việc thực hiện làm phát sinh hành vi này.

Ẩn thông tin - Đó là quá trình che giấu các chi tiết thực hiện của một đối tượng. Nó là kết quả của sự đóng gói.


2

Đóng gói: ràng buộc các thành viên dữ liệu và các hàm thành viên với nhau được gọi là đóng gói. đóng gói được thực hiện thông qua lớp học. trừu tượng hóa: ẩn sử dụng biểu mẫu chi tiết triển khai hoặc từ chế độ xem được gọi là trừu tượng hóa. ví dụ: int x; chúng tôi không biết int sẽ làm việc như thế nào trong nội bộ. nhưng chúng tôi biết int sẽ làm việc. đó là sự trừu tượng


2

Trừu tượng: Trừu tượng là khái niệm / kỹ thuật được sử dụng để xác định những gì nên là cái nhìn bên ngoài của một đối tượng. Chỉ làm cho giao diện cần thiết có sẵn.

Che giấu thông tin: Nó bổ sung cho Trừu tượng hóa, vì thông qua ẩn thông tin Trừu tượng đạt được. Che giấu mọi thứ khác nhưng cái nhìn bên ngoài.

Đóng gói: Là ràng buộc của dữ liệu và các chức năng liên quan vào một đơn vị. Nó tạo điều kiện cho Trừu tượng và ẩn thông tin. Cho phép các tính năng như quyền truy cập của thành viên được áp dụng trên thiết bị để đạt được Sự trừu tượng và ẩn thông tin


2

Xem bài viết của Joel về Luật trừu tượng

JoelOnsoftware

Về cơ bản, trừu tượng hóa cho bạn sự tự do suy nghĩ về các khái niệm cấp cao hơn. Một điều tương tự không phải là lập trình là hầu hết chúng ta không biết thực phẩm của chúng ta đến từ đâu hoặc được sản xuất như thế nào, nhưng thực tế là chúng ta (thường) không phải lo lắng về việc nó giải phóng chúng ta để làm những việc khác, như lập trình.

Đối với thông tin ẩn, tôi đồng ý với gây nhiễu.


2

Rất ngắn

Đóng gói : - Ẩn thông tin

Trừu tượng : - Thực hiện ẩn

Abstractioncho phép bạn tập trung vào what the object doestrong khi Encapsulation có nghĩa làhow an object works


1

Trừu tượng cho phép bạn coi một quy trình phức tạp là một quy trình đơn giản. Ví dụ, sự trừu tượng hóa "tệp" tiêu chuẩn coi các tệp như là một mảng byte liền kề. Người dùng / nhà phát triển thậm chí không phải suy nghĩ về các vấn đề của cụm và phân mảnh. (Trừu tượng thường xuất hiện dưới dạng các lớp hoặc chương trình con.)

Ẩn thông tin là về việc bảo vệ sự trừu tượng của bạn khỏi những người dùng độc hại / không đủ năng lực. Bằng cách hạn chế kiểm soát một số trạng thái (ví dụ phân bổ ổ cứng) cho nhà phát triển ban đầu, số lượng lớn xử lý lỗi trở nên dư thừa. Nếu không ai khác ngoài trình điều khiển hệ thống tệp có thể ghi vào ổ cứng, thì trình điều khiển hệ thống tệp biết chính xác những gì đã được ghi vào ổ cứng và ở đâu. (Biểu hiện thông thường của khái niệm này là privateprotectedtừ khóa trong các ngôn ngữ OO.)


1

Để trừu tượng một cái gì đó chúng ta cần phải ẩn chi tiết hoặc để ẩn chi tiết của một cái gì đó chúng ta cần phải trừu tượng hóa nó. Nhưng, cả hai đều có thể đạt được bằng cách đóng gói.

Vì vậy, ẩn thông tin là một mục tiêu, trừu tượng là một quá trình, và đóng gói là một kỹ thuật.


Bạn có thể cung cấp một ví dụ Java cho cùng không?
Chinmay

1

Trừu tượng hóa đơn giản là kỹ thuật trong đó chỉ hiển thị các chi tiết cần thiết của phần mềm để người dùng sử dụng hoặc vận hành với phần mềm, do đó chi tiết triển khai của phần mềm đó không được hiển thị (được ẩn đi). Đóng gói là kỹ thuật có gói chứa một hoặc nhiều mục và do đó một số thông tin (đặc biệt là chi tiết chương trình) được hiển thị và một số không hiển thị cho người dùng, do đó đóng gói được thực hiện thông qua việc ẩn thông tin. Tóm tắt. Trừu tượng là dành cho hành vi có thể quan sát được (bên ngoài) và đóng gói là vô hình (bên trong) nhưng hai cái này thực sự bổ sung cho nhau.


1

Chỉ cần thêm thông tin chi tiết xung quanh InformationHiding , tìm thấy Liên kết này thực sự là nguồn tốt với các ví dụ

InformationHiding là ý tưởng rằng một quyết định thiết kế nên được ẩn khỏi phần còn lại của hệ thống để ngăn chặn sự ghép đôi ngoài ý muốn. InformationHiding là một nguyên tắc thiết kế. InformationHiding sẽ thông báo cho cách bạn gói gọn mọi thứ, nhưng tất nhiên là không phải như vậy .

Encapsulation là một tính năng ngôn ngữ lập trình.


1

Cả Trừu tượng hóa và Đóng gói là hai trong bốn khái niệm OOP cơ bản cho phép bạn mô hình hóa các thứ trong thế giới thực thành các đối tượng để bạn có thể triển khai chúng trong chương trình và mã của mình. Nhiều người mới bắt đầu bị nhầm lẫn giữa Trừu tượng và Đóng gói vì cả hai đều trông rất giống nhau. Nếu bạn hỏi ai đó là Trừu tượng, anh ta sẽ nói rằng đó là khái niệm OOP tập trung vào thông tin liên quan bằng cách ẩn chi tiết không cần thiết và khi bạn hỏi về Đóng gói, nhiều người sẽ nói rằng đó là một khái niệm OOP khác che giấu dữ liệu từ thế giới bên ngoài. Các định nghĩa không sai vì cả Trừu tượng và Đóng gói đều che giấu điều gì đó, nhưng sự khác biệt chính là về ý định.

Trừu tượng che giấu sự phức tạp bằng cách cung cấp cho bạn một bức tranh trừu tượng hơn, tầm nhìn 10.000 feet, trong khi Encapsulation che giấu công việc nội bộ để bạn có thể thay đổi nó sau này. Nói cách khác, Trừu tượng ẩn chi tiết ở cấp thiết kế, trong khi Encapsulation ẩn chi tiết ở cấp thực hiện.


0

Sau khi đọc tất cả các câu trả lời trên từng cái một, tôi không thể ngăn mình đăng nó

sự trừu tượng liên quan đến cơ sở để xác định các đối tượng đại diện cho các "tác nhân" trừu tượng có thể thực hiện công việc, báo cáo 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 khá rõ ràng từ phía trên tuy nhiên ->

Thuật ngữ đóng gói đề cập đến việc ẩn các chi tiết trạng thái, nhưng mở rộng khái niệm kiểu dữ liệu từ các ngôn ngữ lập trình trước đó để liên kết hành vi mạnh mẽ nhất với dữ liệu và chuẩn hóa cách thức các loại dữ liệu khác nhau tương tác, là khởi đầu của sự trừu tượng hóa.

wiki tham khảo


0

Tôi cũng rất bối rối về hai khái niệm Trừu tượng và Đóng gói. Nhưng khi tôi thấy bài viết trừu tượng trên myjavatrainer.com, tôi thấy rõ rằng Trừu tượng và Đóng gói là Táo và Cam, bạn thực sự không thể so sánh chúng vì cả hai đều bắt buộc.

Đóng gói là cách đối tượng được tạo ra và sự trừu tượng là cách đối tượng được xem trong thế giới bên ngoài.


0

Encapsulation: ràng buộc dữ liệu và các phương thức hành động trên nó. điều này cho phép ẩn dữ liệu khỏi tất cả các phương thức khác trong các lớp khác. Ví dụ: MyListlớp có thể thêm một mục, loại bỏ một mục, và loại bỏ tất cả các mục các phương pháp add, removeremoveAllhành động dựa trên danh sách (một mảng tư nhân) mà không thể được truy cập trực tiếp từ bên ngoài.

Trừu tượng: là ẩn các hành vi và dữ liệu không liên quan. Làm thế nào các mục thực sự được lưu trữ, thêm hoặc xóa bị ẩn (trừu tượng hóa). Dữ liệu của tôi có thể được giữ trong mảng đơn giản, ArrayList, LinkedList, v.v. Ngoài ra, làm thế nào các phương thức được thực hiện được ẩn từ bên ngoài.


0

Đóng gói - thực thi quyền truy cập vào dữ liệu nội bộ một cách có kiểm soát hoặc ngăn chặn các thành viên truy cập trực tiếp.

Trừu tượng hóa - Ẩn các chi tiết triển khai của các phương thức nhất định được gọi là trừu tượng hóa

Hãy hiểu với sự giúp đỡ của một ví dụ: -

class Rectangle
{
private int length;
private int breadth;// see the word private that means they cant be accesed from 
outside world.
 //now to make them accessed indirectly define getters and setters methods
void setLength(int length)
{  
// we are adding this condition to prevent users to make any irrelevent changes 
  that is why we have made length private so that they should be set according to 
   certain restrictions
if(length!=0)
{
 this.length=length
 }
void getLength()
{
 return length;
 }
 // same do for breadth
}

Bây giờ để trừu tượng xác định một phương thức chỉ có thể được truy cập và người dùng không biết phần thân của phương thức đó là gì và nó hoạt động như thế nào. Hãy xem xét ví dụ trên, chúng ta có thể định nghĩa một khu vực phương pháp tính diện tích của hình chữ nhật.

 public int area()
 {
  return length*breadth;
 }

Bây giờ, bất cứ khi nào người dùng sử dụng phương pháp trên, anh ta sẽ chỉ nhận được diện tích chứ không phải cách tính toán. Chúng ta có thể xem xét một ví dụ về phương thức println () mà chúng ta chỉ biết rằng nó được sử dụng để in và chúng ta không biết nó in dữ liệu như thế nào. Tôi đã viết một blog chi tiết, bạn có thể xem liên kết dưới đây để biết thêm thông tin trừu tượng và đóng gói


0

Điều đáng chú ý là các thuật ngữ này đã được chuẩn hóa, các định nghĩa của IEEE, có thể được tìm kiếm tại https://pascal.computer.org/ .

trừu tượng

  1. quan điểm của một đối tượng tập trung vào thông tin liên quan đến một mục đích cụ thể và bỏ qua phần còn lại của thông tin
  2. quá trình hình thành quan điểm
  3. quá trình loại bỏ chi tiết không liên quan để thiết lập một mô hình đơn giản hóa, hoặc kết quả của quá trình đó

ẩn thông tin

  1. kỹ thuật phát triển phần mềm trong đó các giao diện của mỗi mô-đun tiết lộ ít nhất có thể về hoạt động bên trong của mô-đun và các mô-đun khác bị ngăn không sử dụng thông tin về mô-đun không có trong đặc tả giao diện của mô-đun
  2. ngăn chặn một quyết định thiết kế hoặc thực hiện trong một mô-đun để quyết định bị ẩn khỏi các mô-đun khác

đóng gói

  1. kỹ thuật phát triển phần mềm bao gồm cách ly chức năng hệ thống hoặc tập hợp dữ liệu và thao tác trên các dữ liệu đó trong một mô-đun và cung cấp thông số kỹ thuật chính xác cho mô-đun
  2. khái niệm truy cập vào tên, ý nghĩa và giá trị trách nhiệm của một lớp hoàn toàn tách biệt với quyền truy cập vào nhận thức của chúng
  3. ý tưởng rằng một mô-đun có một bên ngoài khác biệt với bên trong của nó, rằng nó có một giao diện bên ngoài và một triển khai bên trong
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.