Abstrakcja VS Ukrywanie informacji VS Hermetyzacja

167

Czy możesz mi powiedzieć, jaka jest różnica między abstrakcją a ukrywaniem informacji podczas tworzenia oprogramowania?

Jestem zdezorientowany. Abstrakcja ukrywa implementację szczegółów, a informacja ukrywa abstrakcyjne szczegóły czegoś.

Aktualizacja: znalazłem dobrą odpowiedź na te trzy koncepcje. Zobacz oddzielną odpowiedź poniżej na kilka cytatów zaczerpniętych z tego miejsca .

popopome
źródło
„Hermetyzacja jest zatem techniką pakowania informacji w taki sposób, aby ukryć to, co powinno być ukryte, a uwidocznić to, co ma być widoczne”. ; pamiętając, że hermetyzację uzyskuje się poprzez ukrywanie informacji.
wulfgarpro
Citation kink broken
Rishi Dua

Odpowiedzi:

152

Idź do źródła! Grady Booch mówi (w Object Oriented Analysis and Design, strona 49, drugie wydanie):

Abstrakcja i hermetyzacja to koncepcje komplementarne: abstrakcja koncentruje się na obserwowalnym zachowaniu obiektu ... hermetyzacja skupia się na implementacji, która powoduje to zachowanie ... hermetyzacja jest najczęściej osiągana poprzez ukrywanie informacji, czyli proces ukrywania wszystkich tajemnice przedmiotu, które nie wpływają na jego podstawowe cechy.

Innymi słowy: abstrakcja = obiekt zewnętrznie; hermetyzacja (osiągnięta poprzez ukrycie informacji) = obiekt wewnętrznie,

Przykład: W .NET Framework System.Text.StringBuilderklasa zapewnia abstrakcję w buforze ciągów. Ta abstrakcja bufora umożliwia pracę z buforem bez względu na jego implementację. W ten sposób możesz dołączać łańcuchy do bufora bez względu na to, jak StringBuilderwewnętrznie śledzi rzeczy, takie jak wskaźnik do bufora i zarządzanie pamięcią, gdy bufor się zapełni (co robi z hermetyzacją poprzez ukrywanie informacji).

rp

rp.
źródło
5
czy powiedziałbyś, że w ten sam sposób, w jaki abstrakcja i hermetyzacja uzupełniają się, tak hermetyzacja i ukrywanie informacji również się uzupełniają? Jasne, hermetyzację uzyskuje się poprzez ukrywanie informacji, ale ... czy hermetyzacja nie jest mechanizmem, za pomocą którego realizowane jest ukrywanie informacji?
wulfgarpro
Inny przykład z prawdziwego świata dla definicji Boocha jest dostępny tutaj
lifebalance
Czy mógłbyś mi powiedzieć, czy słuszne byłoby stwierdzenie, że abstrakcja jest najlepiej rozumiana z perspektywy kodu klienta, podczas gdy kapsułkowanie jest najlepiej rozumiane z perspektywy kodu usługi (tj. Samej klasy hermetyzowanej)?
user1338998
Prawdziwy przykład dla powyższej definicji jest wyjaśniony tutaj: stackoverflow.com/a/635755/3181500
user3181500
83

OP zaktualizował swoje pytanie kilkoma cytatami, które znalazł, a mianowicie w artykule Edwarda V. Berarda zatytułowanym „Abstrakcja, enkapsulacja i ukrywanie informacji” . Ponownie publikuję nieco rozszerzoną i przeformatowaną wersję aktualizacji OP, ponieważ powinna to być odpowiedź sama w sobie.

(Wszystkie cytaty pochodzą z artykułu wymienionego powyżej).

Abstrakcja:

„Jednym z nieporozumień w odniesieniu do abstrakcji jest jej użycie zarówno jako procesu, jak i bytu. Abstrakcja jako proces oznacza wydobywanie podstawowych szczegółów na temat przedmiotu lub grupy elementów, ignorując nieistotne szczegóły. Abstrakcja jako encja, oznacza model, widok lub inną ukierunkowaną reprezentację rzeczywistego elementu. "

Ukrywanie informacji:

„Jego interfejs lub definicja została wybrana tak, aby ujawniać jak najmniej informacji o jego wewnętrznym działaniu”. - [Parnas, 1972b]

„Abstrakcja może być […] stosowana jako technika określania, które informacje powinny być ukryte”.

„Zamieszanie może wystąpić, gdy ludzie nie potrafią odróżnić ukrywania informacji od techniki (np. Abstrakcji), która pomaga określić, które informacje mają być ukryte”.

Kapsułkowanie:

„To […] odnosi się do budowy kapsuły, w przypadku bariery konceptualnej, wokół jakiegoś zbioru rzeczy”. - [Wirfs-Brock i in., 1990]

„Jako proces, hermetyzacja oznacza czynność polegającą na zamknięciu jednego lub więcej elementów w […] pojemniku. Kapsułkowanie, jako jednostka, odnosi się do opakowania lub obudowy, która zawiera (zawiera, zamyka) jeden lub więcej elementów”.

„Gdyby hermetyzacja była„ tym samym, co ukrywanie informacji ”, można by argumentować, że„ wszystko, co zostało hermetyzowane, było również ukryte ”. To oczywiście nieprawda ”.

Wniosek:

„Abstrakcja, ukrywanie informacji i hermetyzacja to bardzo różne, ale bardzo powiązane ze sobą pojęcia. Można argumentować, że abstrakcja jest techniką, która pomaga nam określić, które konkretne informacje powinny być widoczne, a które ukryte. Hermetyzacja jest zatem techniką do pakowania informacji w taki sposób, aby ukryć to, co powinno być ukryte, i uwidocznić to, co ma być widoczne. ”

stawki
źródło
świetne wyjaśnienie praktycznie. byłoby wspaniale podać konkretne przykłady w java. wydaje mi się, że setter / getter w javie ukrywa implementację, a więc osiąga Information Hiding(lub ukrywa implementację), podczas gdy rodzaj generyczny classosiąga hermetyzację, a abstrakcję uzyskuje się przez privatedostęp
abarik
57

Abstraction ukrywa szczegóły implementacji, zapewniając warstwę nad podstawową funkcjonalnością.

Information Hidingukrywa dane, na które ma wpływ ta implementacja. Użycie privatei publicpodlega temu. Na przykład ukrywanie zmiennych klas.

Encapsulationjest po prostu umieszczeniem wszystkich podobnych danych i funkcji w grupie, np. Classw programowaniu; Packetw sieci.

Poprzez wykorzystanie klas, możemy realizować wszystkie trzy koncepcje - Abstraction, Information HidingiEncapsulation

Shashwat
źródło
33

Proszę nie komplikować prostych pojęć.

Hermetyzacja : Zamknięcie danych i metod w jednej jednostce to Hermetyzacja (np. Klasa)

Abstrakcja : jest to akt przedstawiający tylko najważniejsze rzeczy bez uwzględniania szczegółów tła. (np. interfejs)

PRZYKŁADY I WIĘCEJ INFORMACJI GOTO:

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

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

Zatwierdzone definicje tutaj

PS: Pamiętam też definicję z książki Sumita Arora o nazwie C ++, którą czytamy w 11 klasie;)

Rashy
źródło
6

Znaczenie abstrakcji nadane przez Oxford English Dictionary (OED) najbliższe sensowi zamierzonemu tutaj brzmi: „Akt rozdzielania w myśli”. Lepszą definicją może być „Przedstawianie podstawowych cech czegoś bez tła lub nieistotnych szczegółów”.

Ukrywanie informacji to zasada, zgodnie z którą użytkownicy komponentu oprogramowania (takiego jak klasa) muszą znać tylko podstawowe szczegóły dotyczące sposobu inicjalizacji i dostępu do komponentu, a nie muszą znać szczegółów implementacji.

Edycja : Wydaje mi się, że abstrakcja to proces decydowania, które części implementacji powinny być ukryte .

Więc to nie jest abstrakcja VERSUS ukrywanie informacji. To informacja ukrywa abstrakcję VIA.

zacinanie się
źródło
4

Abstrakcja

Abstrakcja to czynność polegająca na przedstawianiu podstawowych szczegółów bez uwzględniania szczegółów tła. Klasa abstrakcyjna ma tylko sygnatury metod, a klasa implementująca może mieć własną implementację, dzięki czemu złożone szczegóły zostaną ukryte przed użytkownikiem. Abstrakcja skupia się na widoku zewnętrznym. Innymi słowy, abstrakcja to oddzielenie interfejsów od rzeczywistej implementacji.

Kapsułkowanie

Hermetyzacja wyjaśnia wiązanie elementów członkowskich danych i metod w jedną jednostkę. Ukrywanie informacji jest głównym celem hermetyzacji. Hermetyzację osiąga się za pomocą specyfikatorów dostępu, takich jak prywatny, publiczny, chroniony. Zmienne składowe klasy są ustawiane jako prywatne, więc nie mogą być dostępne bezpośrednio dla świata zewnętrznego. Hermetyzacja skupia się na widoku wewnętrznym. Innymi słowy, hermetyzacja jest techniką używaną do ochrony informacji w obiekcie przed innym obiektem.

Harleen
źródło
3

Abstrakcja ukrywa szczegóły implementacji, jak to ująłeś.

Abstrahujesz coś do tak wysokiego punktu, że będziesz musiał zrobić tylko coś bardzo prostego, aby wykonać akcję.

Ukrywanie informacji ukrywa szczegóły implementacji. Programowanie jest trudne. Możesz mieć wiele spraw do załatwienia i załatwienia. Mogą istnieć zmienne, które chcesz / musisz bardzo dokładnie śledzić. Ukrywanie informacji gwarantuje, że nikt przypadkowo nie zepsuje czegoś przy użyciu zmiennej lub metody, którą ujawnisz publicznie.

Te dwie koncepcje są ze sobą ściśle powiązane w programowaniu obiektowym.

Dan Herbert
źródło
3

Abstrakcja - jest to proces identyfikacji podstawowych cech obiektu bez uwzględniania nieistotnych i żmudnych szczegółów.

Hermetyzacja - jest to proces zamykania danych i funkcji manipulujących tymi danymi w jednej jednostce.

Abstrakcja i hermetyzacja to pojęcia powiązane, ale uzupełniające się.

  1. Abstrakcja to proces. Hermetyzacja to mechanizm implementacji abstrakcji.

  2. Abstrakcja skupia się na obserwowalnym zachowaniu obiektu. Hermetyzacja koncentruje się na implementacji, która powoduje takie zachowanie.

Ukrywanie informacji - to proces ukrywania szczegółów implementacji obiektu. Jest to wynik kapsułkowania.

Aatish Agarwal
źródło
2

Hermetyzacja: łączenie elementów członkowskich danych i funkcji składowych jest nazywane hermetyzacją. hermetyzacja odbywa się za pośrednictwem zajęć. abstrakcja: ukrywanie szczegółów implementacji z formularza lub z widoku nazywa się abstrakcją. ex: int x; nie wiemy, jak int będzie działać wewnętrznie. ale wiemy, że int będzie działać. to jest abstrakcja.

Siva Prasad
źródło
2

Abstrakcja: Abstrakcja to pojęcie / technika używana do określenia, jaki powinien być zewnętrzny widok obiektu. Udostępnianie tylko wymaganego interfejsu.

Ukrywanie informacji: jest uzupełnieniem abstrakcji, ponieważ dzięki ukrywaniu informacji uzyskuje się abstrakcję. Ukrywanie wszystkiego poza widokiem zewnętrznym.

Hermetyzacja: to wiązanie danych i powiązanych funkcji w jednostkę. Ułatwia Abstrakcje i ukrywanie informacji. Zezwalanie na zastosowanie funkcji, takich jak dostęp do członków w jednostce, w celu ukrycia abstrakcji i informacji

Vikram
źródło
2

Zobacz post Joela na temat prawa nieszczelnych abstrakcji

JoelOnsoftware

Zasadniczo abstrakcja daje swobodę myślenia o koncepcjach wyższego poziomu. Nieprogramująca analogia polega na tym, że większość z nas nie wie, skąd pochodzi nasza żywność ani jak jest produkowana, ale fakt, że (zwykle) nie musimy się tym martwić, pozwala nam robić inne rzeczy, takie jak programowanie.

Co do ukrywania informacji to zgadzam się na jamowanie.

Jason Z
źródło
2

W skrócie

Hermetyzacja : - Ukrywanie informacji

Abstrakcja : - Ukrywanie implementacji

Abstractionpozwala skupić się na, what the object doespodczas gdy oznacza hermetyzacjęhow an object works

Rahul Sharma
źródło
1

Abstrakcja pozwala traktować złożony proces jako prosty proces. Na przykład standardowa abstrakcja „pliku” traktuje pliki jako ciągłą tablicę bajtów. Użytkownik / programista nie musi nawet myśleć o problemach klastrów i fragmentacji. (Abstrakcja zwykle pojawia się jako klasy lub podprogramy).

Ukrywanie informacji polega na ochronie abstrakcji przed złośliwymi / niekompetentnymi użytkownikami. Ograniczając kontrolę nad jakimś stanem (na przykład alokacją dysku twardego) do pierwotnego programisty, ogromna ilość obsługi błędów staje się zbędna. Jeśli nikt inny oprócz sterownika systemu plików nie może zapisywać na dysku twardym, sterownik systemu plików dokładnie wie, co zostało zapisane na dysku twardym i gdzie. (Zwykle manifestacją tej koncepcji jest privatei protectedsłowa kluczowe w języku OO).

Zooba
źródło
1

Aby coś wyabstrahować, musimy ukryć szczegóły lub ukryć szczegóły czegoś, co musimy wyabstrahować. Ale oba z nich można osiągnąć przez hermetyzację.

Zatem ukrywanie informacji jest celem, abstrakcja to proces, a hermetyzacja to technika.

Selo
źródło
Czy możesz podać przykład Java do tego samego?
Chinmay
1

Abstrakcja oznacza po prostu technikę, w której tylko istotne szczegóły oprogramowania są widoczne dla użytkownika, aby pomóc użytkownikowi w jego używaniu lub obsłudze, a zatem szczegóły implementacji tego oprogramowania nie są pokazywane (są niewidoczne). Hermetyzacja to technika, w której pakiet zawiera jeden lub więcej elementów, a zatem niektóre informacje (szczególnie szczegóły programu) stały się widoczne, a niektóre niewidoczne dla użytkownika, więc hermetyzację uzyskuje się poprzez ukrywanie informacji. W podsumowaniu. Abstrakcja służy do obserwowalnego zachowania (zewnętrznie), a hermetyzacja służy do niewidzialności (wewnętrznie), ale te dwa elementy naprawdę się uzupełniają.

MOBITI MAHENGE
źródło
1

Po prostu dodając więcej szczegółów na temat Ukrywania informacji , znaleziono Ten link jest naprawdę dobrym źródłem z przykładami

Informacja Ukrywanie to idea, że ​​decyzja projektowa powinna być ukryta przed resztą systemu, aby zapobiec niezamierzonemu sprzężeniu. Informacje Ukrywanie jest zasadą projektowania. Informacje Ukrywanie powinno informować o sposobie hermetyzowania rzeczy, ale oczywiście nie musi .

Hermetyzacja to funkcja języka programowania.

Abhijeet
źródło
1

Zarówno abstrakcja, jak i hermetyzacja to dwie z czterech podstawowych koncepcji OOP, które pozwalają zamodelować rzeczy ze świata rzeczywistego w obiekty, dzięki czemu można je zaimplementować w programie i kodzie. Wielu początkujących myli się między abstrakcją a enkapsulacją, ponieważ oba wyglądają bardzo podobnie. Jeśli zapytasz kogoś, czym jest abstrakcja, powie, że jest to koncepcja OOP, która koncentruje się na istotnych informacjach, ukrywając niepotrzebne szczegóły, a kiedy zapytasz o hermetyzację, wielu powie, że jest to kolejna koncepcja OOP, która ukrywa dane przed światem zewnętrznym. Definicje nie są błędne, ponieważ zarówno abstrakcja, jak i enkapsulacja coś ukrywają, ale kluczowa różnica polega na zamiarze.

Abstrakcja ukrywa złożoność, dając bardziej abstrakcyjny obraz, coś w rodzaju widoku 10000 stóp, podczas gdy enkapsulacja ukrywa wewnętrzną pracę, dzięki czemu można ją później zmienić. Innymi słowy, Abstrakcja ukrywa szczegóły na poziomie projektowania, a kapsułkowanie ukrywa szczegóły na poziomie implementacji.

Charith Perera
źródło
0

Po przeczytaniu wszystkich powyższych odpowiedzi, jedna po drugiej, nie mogę powstrzymać się przed opublikowaniem tego

Abstrakcja obejmuje możliwość definiowania obiektów, które reprezentują abstrakcyjnych „aktorów”, którzy mogą wykonywać pracę, raportować i zmieniać swój stan oraz „komunikować się” z innymi obiektami w systemie.

Hermetyzacja jest jednak dość wyraźna z góry ->

Termin hermetyzacja odnosi się do ukrywania szczegółów stanu, ale rozszerzenie koncepcji typu danych z wcześniejszych języków programowania w celu najsilniejszego kojarzenia zachowania z danymi i ujednolicenie sposobu interakcji różnych typów danych jest początkiem abstrakcji.

odnośnik wiki

user666
źródło
0

Ja również byłem bardzo zdezorientowany co do dwóch koncepcji abstrakcji i enkapsulacji. Ale kiedy zobaczyłem artykuł o abstrakcji na myjavatrainer.com, stało się dla mnie jasne, że abstrakcja i enkapsulacja to jabłka i pomarańcze, nie możesz ich tak naprawdę porównać, ponieważ oba są wymagane.

Hermetyzacja to sposób tworzenia obiektu, a abstrakcja to sposób, w jaki obiekt jest postrzegany w świecie zewnętrznym.

Navin Israni
źródło
0

Hermetyzacja: powiązanie danych i metody, które na nie działają. pozwala to na ukrycie danych przed wszystkimi innymi metodami w innych klasach. Przykład: MyListklasa, które można dodać element, usunąć element, i usunąć wszystkie elementy metod add, removeoraz removeAllustawę na liście (prywatny tablicy), które nie mogą być dostępne bezpośrednio z zewnątrz.

Abstrakcja: ukrywa nieistotne zachowanie i dane. Sposób, w jaki elementy są faktycznie przechowywane, dodawane lub usuwane, jest ukryty (abstrakcyjny). Moje dane mogą być przechowywane w prostej tablicy, ArrayList, LinkedList i tak dalej. Również sposób implementacji metod jest ukryty z zewnątrz.

Ammar Samater
źródło
0

Hermetyzacja - wymuszanie dostępu do danych wewnętrznych w sposób kontrolowany lub uniemożliwienie bezpośredniego dostępu do członków.

Abstrakcja - ukrywanie szczegółów implementacji niektórych metod jest nazywane abstrakcją

Rozumiemy na przykładzie: -

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
}

teraz dla abstrakcji zdefiniuj metodę, do której można uzyskać dostęp, a użytkownik nie wie, jaka jest treść metody i jak ona działa. Rozważmy powyższy przykład, możemy zdefiniować obszar metody, który oblicza pole prostokąta.

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

Teraz za każdym razem, gdy użytkownik użyje powyższej metody, otrzyma tylko obszar, a nie sposób, w jaki jest obliczany. Możemy rozważyć przykład metody println (), po prostu wiemy, że jest używana do drukowania i nie wiemy, jak wypisuje dane. Napisałem szczegółowo blog, na którym można zobaczyć poniższy link, aby uzyskać więcej informacji na temat abstrakcji a hermetyzacja

Rohan Sharma
źródło
0

Warto zauważyć, że te terminy mają ustandaryzowane definicje IEEE, które można przeszukać pod adresem https://pascal.computer.org/ .

abstrakcja

  1. widok obiektu, który koncentruje się na informacjach istotnych dla określonego celu i ignoruje pozostałą część informacji
  2. proces formułowania poglądu
  3. proces ukrywania nieistotnych szczegółów w celu ustalenia uproszczonego modelu lub wyniku tego procesu

ukrywanie informacji

  1. technika tworzenia oprogramowania, w której interfejsy każdego modułu ujawniają jak najmniej informacji o wewnętrznym działaniu modułu, a inne moduły nie mogą wykorzystywać informacji o module, których nie ma w specyfikacji interfejsu modułu
  2. zawarcie decyzji projektowej lub wdrożeniowej w jednym module, tak aby decyzja była ukryta przed innymi modułami

kapsułkowanie

  1. technika tworzenia oprogramowania polegająca na wyodrębnieniu funkcji systemu lub zbioru danych i operacji na tych danych w ramach modułu i dostarczeniu dokładnych specyfikacji modułu
  2. koncepcja, że ​​dostęp do nazw, znaczeń i wartości obowiązków klasy jest całkowicie oddzielony od dostępu do ich realizacji
  3. pomysł, że moduł ma zewnętrzną stronę, która różni się od wnętrza, że ​​ma zewnętrzny interfejs i wewnętrzną implementację
jaco0646
źródło