2011-08-29 10 views
9

Czy są jakieś różnice w ukrywaniu danych i ukrywaniu informacji? Po przejrzeniu wszystkich odpowiedzi w tym linku jestem bardziej zdezorientowany. Abstraction VS Information Hiding VS Encapsulation Nie można znaleźć żadnej różnicy. Czy po prostu możemy nazwać jeden (ukrywanie informacji) jako cel, inny (abstrakcja) jako proces? Ale dla mnie to nie jest satysfakcjonująca różnica. Co więcej, uważam, że hermetyzacja jest techniką wdrażania procesu abstrakcji. Czy jestem tutaj? Proszę wyjaśnić dokładną różnicę.Różnica w ukrywaniu informacji i abstrakcji danych?

Odpowiedz

6

Ukrywanie informacji ma miejsce, gdy projektant wyraźnie decyduje się ograniczyć dostęp do szczegółów implementacji. Jest to zasada, która jest starsza niż projektowanie obiektowe, ale jest często używana.

Prostym przykładem jest definiowanie stałych w C, np., #define NAME_SIZE 15 Kod (klienci) stałej nie muszą znać jej wartości i nie będą niepokojone, jeśli ty (projektant) zdecydujesz się zmienić jej wartość później. Nie powinni przyjmować założeń na temat tego, że jest to naprawdę 15, ponieważ możesz zdecydować się na zmianę.

Abstraction jest, gdy masz do czynienia z kruszywa, na przykład, samochód jest abstrakcją detali takich jak podwozie, silnik, koła, itp Abstractions pozwalają nam myśleć o skomplikowanych rzeczach w prostszy sposób.

Kapsułkowanie to sposób, w jaki decydujemy o poziomie szczegółowości elementów składających się na nasze abstrakcje. Dobra enkapsulacja polega na ukrywaniu informacji, w celu egzekwowania limitów szczegółów. Na przykład mój samochód składa się w rzeczywistości ze wszystkich jego części, ale zapewnia mi tylko (sterownik) interfejs odpowiedni do moich potrzeb, a nie więcej. Potrafię kontrolować drzwi, zamki, okna, światła, klakson, szyberdach, kierunek ruchu, przyspieszać, zwalniać itd. Nawet jeśli jestem ciekawa, jak manipulować szczegółami "jak" wszystkich tych rzeczy, hermetyzacja zapobiega mnie od zobaczenia więcej.

Jeśli wdrożenie mojego samochodu ulegnie zmianie (zmieniłem silnik spalinowy na elektryczny lub hybrydowy), ponieważ jako kierowca znam tylko ograniczony interfejs, nie muszę zmieniać sposobu prowadzenia samochodu. Abstrakcji pozwala mi po prostu wiem, że jadę samochodem, zamiast setek kawałków metalu, gumy, itp

przykładem gdzie ukrywanie informacji nie było część samochodu może być choke valve. Rodzice powiedzieli mi, jak pracowali w samochodach, którymi jeździli ... to był szczegół silnika spalinowego, który nie byłby przydatny w samochodzie elektrycznym.

+1

doceniaj wysiłki, wyjaśniając przykład w czasie rzeczywistym. Dzięki. :) –

1

"Ukrywanie informacji" to ważna CZĘŚĆ "Abstrakcji danych", ale nie cała koncepcja.

Pamiętaj: możesz (i powinieneś) "ukrywać informacje" w kodach proceduralnych (np. "Nie używać globaliów" itp. W FORTRAN lub BASIC) - ale nie będziesz musiał mieć "abstrakcyjnego typu danych ".

Information hiding i Abstract Data Types są blisko spokrewnione, ale są to różne koncepcje.

2

Klasa zwykle ukrywa szczegóły implementacji od swoich klientów. Nazywa się to ukrywaniem informacji. poprzez tworzenie interfejsów możemy wezwać ukrywanie informacji koncepcji ...

przykładem ukrywania informacji jest poniżej ... mamy interfejs w naszym pliku nagłówka ...

class Coder 
{ 
    public: 
     Coder(); 
     void prints(); 

private: 
     int x; 

}; 

i realizacja funkcji w innym pliku „Coder.cpp” jest ...

Coder::Coder 
{ 
x=10;//any int value you can take; 
} 

void Coder::prints()  
{ 
    cout<<x; 
} 

raczej Tahn robi powyżej w dwóch plikach (jeden + jeden nagłówek pliku cpp) mogliśmy zrobić to w jednym miejscu. możemy dały defination konstruktora i funkcji drukowania w samym pliku nagłówka ...

class Coder 
    { 
     public: 
      Coder() 
      { 
       x=10;//any int value you can take; 

      } 
      void prints() 
    { 
      cout<<x; 
     } 

    private: 
      int x; 

    }; 

gdybyśmy zrobili to nie byliśmy w stanie realizować ukrywanie informacji ... a nasz klient będzie wiedział, w jaki wdrożyliśmy nasz Funkcje!

danych absraction można rozważyć ... Przykładem stosy ...

Klient klasy stosu nie musi być związane z realizacją stosie za. Klient wie tylko, że gdy elementy danych zostaną umieszczone w stosie, zostaną one przywołane w kolejności od ostatniego do ostatniego wejścia. Klient dba o to, jaką funkcjonalność oferuje stos, a nie o to, jak ta funkcjonalność jest zaimplementowana. Pojęcie to nazywa się abstrakcją danych.

5

Ukrywanie danych to proces, w którym modyfikatory dostępu są używane do ukrywania widoczności metod i zmiennych Java. Mają dostęp do modyfikatorów: public, private i protected.

Abstrakcja to proces, w którym definiujemy określone zachowanie przez fasolę abstrakcyjnych klas i metod, które stanowią szkielet każdej klasy, która rozszerza tę klasę.

0

Abstrakcja to przedstawienie czegoś z mniejszymi szczegółami (jak w abstrakcyjnym obrazie). W OO, typ abstrakcyjny może być manipulowany bez angażowania się w jego reprezentację wewnętrzną. Na przykład numer telefonu jako abstrakcja numeru telefonu może być obsługiwany bez wiedzy klienta, że ​​składa się on z kodu kraju, numeru kierunkowego i rzeczywistej liczby. Abstrakcja jest najbardziej przydatna w fazie analizy i projektowania, ponieważ pozwala mówić w kategoriach abstrakcyjnego typu danych (np. Numeru telefonu) bez obawy, w jaki sposób zostanie zaimplementowana.

Bardziej znajomy typ, string jest abstrakcją tekstu: manipulujesz string, nie wiedząc, w jaki sposób jest zaimplementowany. Abstrakcja łańcuchowa pozwala na zmianę jej wewnętrznych elementów bez wpływu na jej wykorzystanie w projekcie aplikacji.

Ukrywanie informacji i hermetyzacja to dwa sposoby zastosowania abstrakcyjnego typu danych. Abstrakcyjny typ danych może nie musi nawet ukrywać swojego stanu wewnętrznego lub jego enkapsulacji; na przykład liczba jako abstrakcja może być zaimplementowana jako int.

Powiązane problemy