Jaka jest dokładna różnica między enkapsulacją a abstrakcją?
oop
encapsulation
abstraction
Skalisty
źródło
źródło
Odpowiedzi:
Większość odpowiedzi tutaj koncentruje się na OOP, ale enkapsulacja rozpoczyna się znacznie wcześniej:
Każda funkcja jest enkapsulacją ; w pseudokodzie:
Tutaj
distance
podsumowuje obliczenia (euklidesowej) odległości między dwoma punktami na płaszczyźnie: ukrywa szczegóły implementacji. To jest enkapsulacja, czysta i prosta.Abstrakcja jest procesem uogólnienia : podjęcia konkretnej implementacji i dostosowania jej do różnych, choć w pewnym stopniu powiązanych, rodzajów danych. Klasycznym przykładem abstrakcji jest
qsort
funkcjaCdo sortowania danych:Chodzi o
qsort
to, że nie dba o sortowane dane - w rzeczywistości nie wie, jakie dane sortuje. Jego typem wejściowym jest raczej wskaźnik bez typu (void*
), który jest po prostu sposobem C na powiedzenie „Nie dbam o typ danych” (jest to również nazywane skasowaniem typu). Ważne jest to, że implementacjaqsort
zawsze pozostaje taka sama, niezależnie od typu danych. Jedyne, co należy zmienić, to funkcja porównania, która różni się w zależności od typu danych.qsort
dlatego oczekuje, że użytkownik zapewni wspomnianą funkcję porównania jako argument funkcji.Hermetyzacja i abstrakcja idą w parze tak bardzo, że można stwierdzić, że są naprawdę nierozłączni. Dla celów praktycznych jest to prawdopodobnie prawda; powiedziawszy, oto enkapsulacja, która nie jest zbyt abstrakcyjna:
Hermetyzujemy współrzędną punktu, ale nie usuwamy ich materialnie, poza logicznym zgrupowaniem.
A oto przykład abstrakcji, która nie jest enkapsulacją:
Jest to zmienna ogólna
pi
o podanej wartości (π), a deklaracja nie dba o dokładny typ zmiennej. Przyznaję, że trudno byłoby znaleźć coś takiego w prawdziwym kodzie: abstrakcja praktycznie zawsze używa enkapsulacji. Jednakże, powyższe ma faktycznie istnieje w C ++ (14), za pomocą zmiennych szablonów (= ogólnych wzorów dla zmiennych); z nieco bardziej złożoną składnią, np .:źródło
Hermetyzacja ukrywa szczegóły implementacji, które mogą, ale nie muszą, dotyczyć ogólnych lub specjalistycznych zachowań.
Abstrakcja zapewnia uogólnienie (powiedzmy, nad zestawem zachowań).
Oto dobra lektura: Abstrakcja, enkapsulacja i ukrywanie informacji przez Edwarda V. Berarda z Object Agency.
źródło
Wiele odpowiedzi i ich przykładów wprowadza w błąd.
Hermetyzacja to pakowanie danych i funkcji działających na tych danych w pojedynczy komponent i ograniczeniu dostępu do niektórych komponentów obiektu.
Hermetyzacja oznacza, że wewnętrzna reprezentacja obiektu jest na ogół ukryta przed widokiem poza definicją obiektu.
Abstrakcja jest mechanizmem, który reprezentuje podstawowe funkcje bez uwzględnienia szczegółów implementacji.
Hermetyzacja: - Ukrywanie informacji .
Abstrakcja: - Ukrywanie implementacji .
Przykład:
Wewnętrzna reprezentacja dowolnego obiektu
foo
klasy jest ukryta poza klasą. -> Hermetyzacja.Dowolny dostępny element członkowski (dane / funkcja) obiektu
foo
jest ograniczony i może być dostępny tylko przez ten obiekt.Implementacja metody
add
jest ukryta. -> Abstrakcja.źródło
qsort
funkcji w C jest przykładem abstrakcji. Nie znasz szczegółów jego wdrożenia. Nie ma tu mowy o enkapsulacji. Użycie konstruktorów do zainicjowania pól danych obiektów w C ++ jest przykładem enkapsulacji (kontrolowany dostęp do komponentu obiektu przez konstruktor).enkapsulacja umieszcza niektóre rzeczy w pudełku i daje wizjer; dzięki temu nie musisz się martwić biegami.
abstrakcja całkowicie ignoruje szczegóły, które nie mają znaczenia, takie jak to, czy rzeczy mają koła zębate, zapadkowe, koła zamachowe lub rdzenie jądrowe; oni po prostu „idą”
przykłady enkapsulacji:
przykłady abstrakcji:
źródło
Hermetyzacja oznacza ukrywanie danych, takich jak używanie gettera i settera itp.
Abstrakcja oznacza ukrywanie implementacji za pomocą klasy abstrakcyjnej i interfejsów itp.
źródło
Przykład 2: architekt rozwiązanie jest osoba, która tworzy wysoki poziom abstrakcyjny projekt techniczny całego rozwiązania, a ten projekt jest następnie przekazany do zespołu projektowego do realizacji
.
Tutaj architekt rozwiązań działa jako abstrakcja, a zespół programistów działa jak enkapsulacja.
Przykład 3: Hermetyzacja (sieć) danych użytkownika
Kurtuazja
Abstrakcja (lub modułowość) - typy pozwalają programistom myśleć na wyższym poziomie niż bit lub bajt, nie zawracając sobie głowy implementacją niskiego poziomu. Na przykład programiści mogą zacząć traktować ciąg znaków jako zbiór wartości znaków zamiast zwykłej tablicy bajtów. Co więcej, typy pozwalają programistom myśleć i wyrażać interfejsy między dwoma dowolnymi podsystemami. Umożliwia to więcej poziomów lokalizacji, dzięki czemu definicje wymagane dla interoperacyjności podsystemów pozostają spójne, gdy te dwa podsystemy się komunikują. Źródło
źródło
Powyżej podano wiele dobrych odpowiedzi, ale tutaj przedstawię swój punkt widzenia (Java).
Enkapsulacja danych oznacza po prostu pakowanie i kontrolowanie dostępu do logicznie pogrupowanych danych w klasie. Jest to ogólnie powiązane z innym słowem kluczowym - Ukrywanie danych . Osiąga się to w Javie za pomocą modyfikatorów dostępu .
Prostym przykładem byłoby zdefiniowanie zmiennej prywatnej i udzielenie do niej dostępu za pomocą metod pobierających i ustawiających lub uczynienie metody prywatną, ponieważ jej jedynym zastosowaniem jest klasa. Użytkownik nie musi wiedzieć o tych metodach i zmiennych.
Uwaga : nie należy źle rozumieć, że enkapsulacja polega wyłącznie na ukrywaniu danych. Kiedy mówimy o enkapsulacji, należy położyć nacisk na grupowanie lub pakowanie lub łączenie powiązanych danych i zachowań.
Z drugiej strony, abstrakcja danych to koncepcja uogólnienia, aby złożona logika nie była narażona na działanie użytkownika. W Javie można to osiągnąć za pomocą interfejsów i abstrakcji klas .
Przykład -
Powiedzmy, że mamy interfejs Animal i ma funkcję makeSound () . Istnieją dwie konkretne klasy Dog i Cat, które implementują ten interfejs. Te konkretne klasy mają osobne implementacje funkcji makeSound (). Powiedzmy teraz, że mamy zwierzę (otrzymujemy to z jakiegoś modułu zewnętrznego). Wszystko, co użytkownik wie, to to, że obiekt, który odbiera, to jakieś zwierzę, a użytkownik jest odpowiedzialny za wydrukowanie zwierzęcego dźwięku. Jednym ze sposobów brutalnej siły jest sprawdzenie otrzymanego obiektu w celu zidentyfikowania jego typu, następnie przeniesienie go do tego typu zwierząt i wywołanie na nim metody makeSound (). Ale ładniejszym sposobem jest odniesienie polimorficzne wyodrębnienie rzeczy . Użyj Animal jakoi wywołaj na nim makeSound (). W czasie wykonywania zależności od tego, jaki prawdziwy typ obiektu jest właściwy, zostanie wywołana funkcja.
Więcej informacji tutaj .
Złożona logika znajduje się na płytce drukowanej, która jest zamknięta w tabliczce dotykowej, a przyjemny interfejs (przyciski) jest udostępniany użytkownikowi.
PS: Powyższe linki prowadzą do mojego osobistego bloga.
źródło
Podobnie jak podczas prowadzenia samochodu, wiesz, co robi pedał gazu, ale możesz nie znać procesu za nim, ponieważ jest on zamknięty.
Podam przykład w języku C #. Załóżmy, że masz liczbę całkowitą:
możesz użyć metody takiej jak Number.ToString (), która zwraca ci reprezentację znaków liczby 5 i przechowuje ją w obiekcie łańcuchowym. Ta metoda mówi ci, co robi, a nie jak.
źródło
Są to niejasne pojęcia, które nie są unikalne dla informatyki i programowania. Chciałbym przedstawić kilka dodatkowych przemyśleń, które mogą pomóc innym zrozumieć te ważne pojęcia.
Krótka odpowiedź
Kapsułkowanie - Ukrywanie i / lub ograniczanie dostępu do niektórych części systemu, jednocześnie ujawniając niezbędne interfejsy.
Abstrakcja - rozważenie czegoś z usuniętymi pewnymi cechami, oprócz konkretnych rzeczywistości, konkretnych obiektów lub rzeczywistych instancji, zmniejszając w ten sposób złożoność.
Głównym podobieństwem jest to, że techniki te mają na celu poprawę zrozumienia i użyteczności.
Główną różnicą jest to, że abstrakcja jest sposobem prostszego przedstawiania rzeczy (często w celu szerszego zastosowania reprezentacji), podczas gdy enkapsulacja jest metodą zmiany sposobu, w jaki inne rzeczy oddziałują z czymś.
Długa odpowiedź
Kapsułkowanie
Oto przykład enkapsulacji, która, mam nadzieję, wyjaśnia wszystko:
Tutaj mamy Arduino Uno i Arduino Uno w obudowie. Obudowa jest doskonałym odzwierciedleniem tego, na czym polega enkapsulacja.
Enkapsulacja ma na celu ochronę niektórych komponentów przed wpływami zewnętrznymi i wiedzą, a także ujawnienie komponentów, z którymi inne rzeczy powinny się łączyć. W kategoriach programowych obejmuje to ukrywanie informacji przez modyfikatory dostępu , które zmieniają zakres, w jakim niektóre zmienne i / lub właściwości mogą być odczytywane i zapisywane.
Ale poza tym enkapsulacja ma również na celu zapewnienie tych zewnętrznych interfejsów o wiele bardziej skutecznie. W naszym przykładzie Arduino może to obejmować ładne przyciski i ekran, co znacznie ułatwia interakcję użytkownika z urządzeniem. Zapewniają użytkownikowi proste sposoby wpływania na zachowanie urządzenia i uzyskiwania użytecznych informacji o jego działaniu, które w innym przypadku byłyby znacznie trudniejsze.
Programowania wymaga to zgrupowanie różnych składników do rozdzielnego konstrukcji, takich jak
function
,class
lubobject
. Obejmuje również zapewnienie środków interakcji z tymi konstruktami, a także metod uzyskiwania przydatnych informacji na ich temat.Hermetyzacja pomaga programistom na wiele dodatkowych sposobów, między innymi poprawiając utrzymanie kodu i testowalność.
Abstrakcja
Chociaż wiele innych odpowiedzi tutaj definiuje abstrakcję jako uogólnienie, osobiście uważam, że definicja ta jest błędna. Powiedziałbym, że uogólnienie jest w rzeczywistości specyficznym rodzajem abstrakcji, a nie odwrotnie. Innymi słowy, wszystkie uogólnienia są abstrakcje, ale wszystkie abstrakcje to nie koniecznie uogólnienia.
Oto jak lubię myśleć o abstrakcji:
Czy powiedziałbyś, że obraz przedstawia drzewo? Są szanse, że byś. Ale czy to naprawdę drzewo? Oczywiście, że nie! To wiązka pikseli, które wyglądają jak coś, co możemy nazwać drzewem. Można powiedzieć, że reprezentuje abstrakcję prawdziwego drzewa. Zauważ, że pominięto kilka wizualnych szczegółów drzewa. Ponadto nie rośnie, nie zużywa wody ani nie produkuje tlenu. Jak to możliwe? to tylko kilka kolorów na ekranie, reprezentowanych przez bajty w pamięci komputera.
A oto istota abstrakcji. Jest to sposób na uproszczenie, aby były łatwiejsze do zrozumienia. Każdy pomysł przechodzący przez twoją głowę jest abstrakcją rzeczywistości. Twój mentalny obraz drzewa nie jest bardziej prawdziwym drzewem niż ten plik JPEG.
W programowaniu możemy wykorzystać to na naszą korzyść, tworząc
Tree
klasę z metodami symulowanego wzrostu, zużycia wody i produkcji tlenu. Nasze stworzenie byłoby czymś, co reprezentuje nasze doświadczenie z rzeczywistymi drzewami i obejmuje tylko te elementy, na których naprawdę zależy nam w naszej konkretnej symulacji. Używamy abstrakcji jako sposobu reprezentowania naszego doświadczenia czegoś z bajtami i matematyką.Klasy abstrakcyjne
Abstrakcja w programowaniu pozwala nam również rozpatrywać podobieństwa między kilkoma „konkretnymi” typami obiektów (typy, które faktycznie istnieją) i definiować te podobieństwa w obrębie unikalnej jednostki. Na przykład nasza
Tree
klasa może odziedziczyć poabstract class Plant
, który ma kilka właściwości i metod, które mają zastosowanie do wszystkich naszych klas podobnych do roślin, ale usuwa te, które są specyficzne dla każdego rodzaju rośliny. Może to znacznie ograniczyć powielanie kodu i poprawić konserwowalność.Praktyczna różnica
abstract class
i zwykłyclass
jest koncepcyjnie nie ma „prawdziwe” wystąpieńabstract class
. Nie ma sensu konstruowaćPlant
obiektu, ponieważ nie jest on wystarczająco konkretny. Każdy „prawdziwy”Plant
jest również bardziej specyficznym rodzajemPlant
.Ponadto, jeśli chcemy, aby nasz program był bardziej realistyczny, możemy rozważyć fakt, że nasza
Tree
klasa może być zbyt abstrakcyjna. W rzeczywistości, każdyTree
jest bardziej specyficzny typTree
, więc mogliśmy tworzenia klas dla tych typów, takich jakBirch
,Maple
itp, które dziedziczą z naszej, być może terazabstract
,Tree
klasy.JVM
Innym dobrym przykładem abstrakcji jest Java Virtual Machine (JVM) , która zapewnia wirtualny lub abstrakcyjny komputer do uruchamiania kodu Java. Zasadniczo usuwa wszystkie elementy systemu specyficzne dla platformy i zapewnia abstrakcyjny interfejs „komputera” bez względu na konkretny system.
Różnica
Hermetyzacja różni się od abstrakcji tym, że nie ma nic wspólnego z tym, jak „prawdziwe” lub „dokładne” jest coś. Nie usuwa składników czegoś, co upraszcza lub ma szersze zastosowanie. Raczej może ukrywać niektóre elementy, aby osiągnąć podobny cel.
źródło
Hermetyzacja : ukrywa niechciane / nieoczekiwane / właściwe właściwości implementacji przed rzeczywistymi użytkownikami obiektu. na przykład
Abstrakcja : Jest to sposób na uogólnienie, a zatem powszechny sposób pracy z obiektami o dużej różnorodności. na przykład
źródło
Różnica między abstrakcją a enkapsulacją.
źródło
Abstrakcja: Pomysł przedstawienia czegoś w uproszczony / inny sposób, który jest albo łatwiejszy do zrozumienia i użycia, albo bardziej odpowiedni do sytuacji.
Zastanów się nad klasą, która wysyła wiadomość e-mail ... używa abstrakcji, aby pokazać się jako jakiś posłaniec, więc możesz zadzwonić na emailSender.send (poczta, odbiorca). To, co faktycznie robi - wybiera POP3 / SMTP, serwery wywołujące, tłumaczenie MIME itp. Jest abstrakcyjne. Widzisz tylko swojego posłańca.
Hermetyzacja: idea zabezpieczania i ukrywania danych i metod, które są prywatne dla obiektu. Chodzi raczej o to, aby stworzyć coś niezależnego i niezawodnego.
Weź mnie na przykład. Podsumowuję tętno z reszty świata. Ponieważ nie chcę, aby ktokolwiek inny zmieniał tę zmienną i nie potrzebuję, aby ktoś inny ją ustawiał, aby działał. Jest to dla mnie niezwykle ważne, ale nie musisz wiedzieć, co to jest, i prawdopodobnie i tak cię to nie obchodzi.
Rozejrzyj się, a zobaczysz, że prawie wszystko, czego dotykasz, jest przykładem zarówno abstrakcji, jak i enkapsulacji. Na przykład Twój telefon przedstawia abstrakcję polegającą na tym, że możesz zabrać to, co mówisz i powiedzieć to komuś innemu - obejmując GSM, architekturę procesora, częstotliwości radiowe i milion innych rzeczy, których nie rozumiesz lub których nie obchodzi. Zawiera również pewne dane od ciebie, takie jak numery seryjne, numery identyfikacyjne, częstotliwości itp.
Wszystko to sprawia, że świat jest przyjemniejszym miejscem do życia: D
źródło
Abstrakcja: Wyświetlane są tylko niezbędne informacje. Skupmy się na przykładzie włączania komputera. Użytkownik nie musi wiedzieć, co się dzieje, gdy system wciąż się ładuje (ta informacja jest ukryta przed użytkownikiem).
Weźmy inny przykład bankomatu. Klient nie musi wiedzieć, w jaki sposób urządzenie odczytuje PIN i przetwarza transakcję, wystarczy wpisać PIN, wziąć gotówkę i wyjść.
Enkapsulacja: zajmuje się ukrywaniem poufnych danych klasy, a tym samym prywatyzacją jej części. Jest to sposób na zachowanie poufności niektórych informacji dla klientów poprzez uniemożliwienie dostępu do nich z zewnątrz.
źródło
Inny przykład:
Załóżmy, że stworzyłem niezmienną klasę Rectangle w następujący sposób:
Teraz jest oczywiste, że zakapsułkowałem szerokość i wysokość (dostęp jest jakoś ograniczony), ale niczego nie wyodrębniłem (dobra, może zignorowałem położenie prostokąta w przestrzeni współrzędnych, ale jest to wada przykład).
Dobra abstrakcja zwykle oznacza dobre kapsułkowanie.
Przykładem dobrej abstrakcji jest ogólna klasa połączenia z bazą danych. Jego interfejs publiczny jest niezależny od bazy danych i jest bardzo prosty, ale pozwala mi robić to, co chcę z połączeniem. A ty widzisz Istnieje również enkapsulacja, ponieważ klasa musi mieć w środku wszystkie uchwyty i wywołania niskiego poziomu.
źródło
Abstraction
iEncapsulation
za pomocą jednego uogólnionego przykładu-------------------------------------------------- -------------------------------------------------- --------------------------------
Wszyscy używamy kalkulatora do obliczania złożonych problemów!
źródło
Your both example tell about just encapsulation, not abstraction
; przyczyna poboru ma nic wspólnego z tymhiding
raczejGeneralizing
Mechanizm, który chroni dane poszczególnych obiektów przed celowym lub przypadkowym niewłaściwym użyciem przez funkcje zewnętrzne, nazywa się „ enkapsulacją danych”
Akt reprezentowania istotnych cech bez uwzględnienia szczegółów tła lub wyjaśnień jest znany jako abstrakcja
źródło
Abstrakcja: Abstrakcja oznacza pokazanie
What
części funkcjonalności.Encapsulation: Encapsulation oznacza ukrywanie
How
części funkcjonalności.Weźmy bardzo prosty przykład
Klasa programu aplikacji konsolowej
źródło
Weźmy przykład stosu. Może być zaimplementowany przy użyciu tablicy lub listy połączonej. Ale obsługiwane przez nią operacje to push i pop.
Teraz abstrakcja ujawnia tylko interfejsy push i pop. Podstawowa reprezentacja jest ukryta (czy jest to tablica czy lista połączona?) I zapewniony jest dobrze zdefiniowany interfejs. Jak teraz zapewnić, że nie będzie przypadkowego dostępu do abstrakcyjnych danych? W tym momencie dochodzi do enkapsulacji . Na przykład klasy w C ++ używają specyfikatorów dostępu, które zapewniają zapobieganie przypadkowemu dostępowi i modyfikacji. Ponadto, czyniąc wyżej wymienione interfejsy publicznymi, zapewnia, że jedynym sposobem manipulowania stosem jest dobrze zdefiniowany interfejs. W tym czasie połączył dane i kod, który może nimi manipulować (nie angażujmy tutaj funkcji znajomych). Oznacza to, że kod i dane są ze sobą połączone, powiązane lub enkapsulowane.
źródło
Enkapsulacja owija złożoność w jedną kapsułę, która jest klasą, a zatem Enkapsulacja… Podczas gdy abstrakcja jest cechą obiektu, która odróżnia ją od innych obiektów ...
Abstrakcja może być osiągnięta poprzez uczynienie abstrakcji klasy abstrakcyjną za pomocą jednej lub więcej metod. Jest to cecha, która powinna zostać zaimplementowana przez klasę rozszerzającą ją. np. kiedy wymyślasz / projektujesz samochód, definiujesz takie cechy, jak samochód powinien mieć 4 drzwi, hamulec, kierownicę itp., więc każdy, kto korzysta z tego projektu, powinien uwzględnić te cechy. Wdrożenie nie jest główną abstrakcją. Określi tylko cechy, które należy uwzględnić.
Osłonięcie osiąga się, utrzymując dane i zachowanie w jednej kapsule, która jest klasowa, i wykorzystując modyfikatory dostępu, takie jak public, private, chronione wraz z dziedziczeniem, agregacją lub kompozycją. Więc pokazujesz tylko wymagane rzeczy, to też tylko w takim zakresie, w jakim chcesz to pokazać. tj. publiczny, chroniony, przyjazny i prywatny ka funda …… np. GM decyduje się na zastosowanie abstrakcyjnego projektu samochodu powyżej. Ale mają różne produkty o tych samych właściwościach i prawie takiej samej funkcjonalności. Piszą więc klasę, która rozszerza powyższą klasę abstrakcyjną. Mówi, jak powinna działać skrzynia biegów, jak powinna działać przerwa, jak powinna działać kierownica. Następnie wszystkie produkty korzystają z tej wspólnej funkcjonalności. Nie muszą wiedzieć, jak działa skrzynia biegów, czy działa przerwa, czy sterowanie pracą koła.
Oba są potężne; ale używanie abstrakcji wymaga więcej umiejętności niż enkapsulacja, a większe aplikacje / produkty nie mogą przetrwać bez abstrakcji.
źródło
Abstrakcja --- Ukrywanie implementacji - w fazie projektowania --- Korzystanie z interfejsu / Abstrakcyjne calsses
Hermetyzacja - Ukrywanie danych - Rozwój - Korzystanie z modyfikatorów dostępu (publiczny / prywatny)
źródło
Z tego
Różnica między enkapsulacją a abstrakcją w OOPS
Abstrakcja i enkapsulacja to dwie ważne koncepcje programowania obiektowego (OOPS). Zarówno enkapsulacja, jak i abstrakcja są wzajemnie powiązanymi terminami.
Rzeczywista różnica między enkapsulacją a abstrakcją
Encapsulate oznacza ukrywanie. Kapsułkowanie jest również nazywane ukrywaniem danych. Możesz myśleć o kapsułkowaniu jak kapsułce (tabletce leku), która ukrywa w sobie lek. Enkapsulacja to zawijanie, tylko ukrywanie właściwości i metod. Enkapsulacja służy do ukrywania kodu i danych w jednym urządzeniu w celu ochrony danych przed światem. Klasa jest najlepszym przykładem enkapsulacji.
Abstrakcja odnosi się do pokazywania tylko niezbędnych szczegółów zamierzonemu użytkownikowi. Jak sama nazwa wskazuje, abstrakcja jest „abstrakcyjną formą czegokolwiek”. Używamy abstrakcji w językach programowania do tworzenia klasy abstrakcyjnej. Klasa abstrakcyjna reprezentuje abstrakcyjny pogląd na metody i właściwości klasy.
Różnica w implementacji między enkapsulacją a abstrakcją
Abstrakcja jest implementowana przy użyciu interfejsu i klasy abstrakcyjnej, natomiast enkapsulacja jest implementowana przy użyciu prywatnego i chronionego modyfikatora dostępu.
OOPS wykorzystuje enkapsulację, aby wymusić integralność typu (tj. Upewnić się, że dane są wykorzystywane w odpowiedni sposób), uniemożliwiając programistom dostęp do danych w sposób niezamierzony. Poprzez enkapsulację tylko z góry określona grupa funkcji może uzyskać dostęp do danych. Zbiorowy termin dla typów danych i operacji (metod) w pakiecie wraz z ograniczeniami dostępu (publicznymi / prywatnymi itp.) To klasa.
źródło
Spróbuję wykazać enkapsulację w prosty sposób .. Zobaczmy ...
Kapsułkowanie to -
Enkapsulacja implementuje Abstrakcję.
A abstrakcja to -
Zobaczmy przykład
Poniższy obraz pokazuje graficzny interfejs użytkownika „Dane klienta, które należy dodać do bazy danych”.
Patrząc na obraz, możemy powiedzieć, że potrzebujemy klasy klienta.
Krok - 1: Czego potrzebuje moja klasa klienta?
to znaczy
1 Funkcja dodawania kodu klienta i nazwy klienta do bazy danych.
przestrzeń nazw CustomerContent {public class Customer {public string CustomerCode = ""; ciąg publiczny CustomerName = ""; public void ADD () {// mój kod DB przejdzie tutaj}
Teraz tylko metoda ADD nie będzie działać tutaj sama.
Krok -2: Jak będzie działać walidacja, funkcja ADD?
Będziemy potrzebować kodu połączenia z bazą danych i kodu sprawdzania poprawności (dodatkowe metody).
Teraz nie ma potrzeby pokazywania dodatkowych metod (Validate (); CreateDBObject () [metoda skomplikowana i dodatkowa]) użytkownikowi końcowemu. Użytkownik końcowy musi tylko zobaczyć i wiedzieć o kodzie klienta, nazwie klienta i przycisku DODAJ, który doda rekord .. Użytkownik końcowy nie dba o to, JAK DODAĆ dane do bazy danych ?.
Krok -3: Prywatne dodatkowe i skomplikowane metody, które nie wymagają interakcji użytkownika końcowego.
Więc uczynienie tych skomplikowanych i dodatkowych metod prywatnymi zamiast publicznych (tzn. Ukrywanie tych metod) i usuwanie obj.Validate (); obj.CreateDBObject (); z głównego programu w klasie osiągamy enkapsulację.
Innymi słowy Uproszczeniem interfejsu dla użytkownika końcowego jest enkapsulacja.
Więc teraz kod wygląda jak poniżej -
Podsumowanie :
Krok -1: Czego potrzebuje moja klasa klienta? jest abstrakcja.
Krok -3: Krok -3: Prywatne dodatkowe i skomplikowane metody, które nie wymagają interakcji użytkownika końcowego to enkapsulacja.
PS - Powyższy kod jest trudny i szybki.
źródło
Poniższy akapit pomógł mi zrozumieć, czym się różnią:
Możesz przeczytać więcej tutaj .
źródło
Ukrywanie informacji nie jest bezwzględnie wymagane w celu uzyskania abstrakcji lub enkapsulacji. Informacje mogą być ignorowane, ale nie muszą być ukryte.
Kapsułkowanie to zdolność do traktowania czegoś jako jednej rzeczy, nawet jeśli może składać się z wielu złożonych części lub pomysłów. Mogę na przykład powiedzieć, że siedzę na „krześle”, a nie odnoszę się do wielu różnych części tego krzesła, z których każda ma określony wygląd i funkcję, wszystkie pasują do siebie w celu wygodnego trzymania mojego tyłka na kilka stóp z dala od podłogi.
Abstrakcja jest włączana przez enkapsulację. Ponieważ obudowujemy obiekty, możemy myśleć o nich jako o rzeczach, które w jakiś sposób się ze sobą wiążą, zamiast zagłębiać się w subtelne szczegóły wewnętrznej struktury obiektu. Abstrakcja to umiejętność rozważenia większego obrazu, usuniętego z troski o drobne szczegóły. Rdzeń tego słowa jest abstrakcyjny, jak w streszczeniu, które pojawia się na górze artykułu naukowego, a nie abstrakcyjny, jak w klasie, która może być utworzona tylko jako pochodna podklasa.
Mogę szczerze powiedzieć, że kiedy opadam tyłek na krzesło, nigdy nie myślę o tym, jak struktura tego krzesła złapie i utrzyma moją wagę. To wystarczająco przyzwoite krzesło, że nie muszę się martwić o te szczegóły. Mogę więc zwrócić uwagę na komputer. I znowu nie myślę o częściach składowych mojego komputera. Patrzę tylko na część strony internetowej, która reprezentuje obszar tekstowy, który mogę wpisać, i komunikuję się słowami, ledwo nawet myśląc o tym, jak moje palce tak szybko znajdują odpowiednie litery na klawiaturze i jak ostatecznie nawiązano połączenie między stuknięciem tych kluczy a opublikowaniem na tym forum. To jest wielka siła abstrakcji. Ponieważ na niższych poziomach systemu można polegać na spójności i precyzji, musimy poświęcić więcej uwagi na większą pracę.
źródło
źródło
abstrakcja ukrywa nieprzydatne dane przed użytkownikami, a enkapsulacja wiąże dane w kapsułce (klasie). Myślę, że enkapsulacja jest sposobem na osiągnięcie abstrakcji.
źródło
Zarówno proces abstrakcji, jak i enkapsulacji generują interfejsy.
Interfejs wygenerowany przez enkapsulację ukrywa szczegóły implementacji.
Interfejs wygenerowany za pomocą abstrakcji ma zastosowanie do większej liczby typów danych w porównaniu do abstrakcji przed nią.
źródło
Abstraction
to umowa na wdrożenie, które zamierzamy wykonać. Wdrożenie może ulec zmianie w miarę upływu czasu. Różne implementacje mogą, ale nie muszą być ukryte, ale są maskowane za abstrakcję.Załóżmy, że zdefiniujemy całą
APIs
klasę, ainterface
następnie poprosimy użytkowników naszego kodu, aby polegali na zdefiniowanejAPIs
klasieinterface
. Jesteśmy w stanie ulepszyć lub zmodyfikować wdrożenie, tylko musimy postępować zgodnie z ustaloną umową. Użytkownicy nie są powiązani z naszą implementacją.NARAŻAMY wszystkie KONIECZNE Reguły (metody) w abstrakcji , implementacja reguł pozostawia się podmiotom implementującym, również implementacja nie jest częścią abstrakcji. To tylko podpis i deklaracja tworzą abstrakcję.
Encapsulation
to po prostu UKRYWANIE wewnętrznych szczegółów poprzez ograniczenie dostępu do stanów i zachowań. Hermetyzowana klasa może mieć, ale nie musi, dobrze zdefiniowanąAbstraction
.java.util.List
jest abstrakcją dlajava.util.ArrayList
. Wewnętrzne stanyjava.util.ArrayList
oznaczenianon public
modyfikatorami dostępu to hermetyzacja.Edycja Załóżmy klasę
Container.nava implements IContainer
,IContainer
może zadeklarować metody podobaaddElement
,removeElements
,contains
, itd. TutajIContainer
reprezentuje abstrakcji dla swojej klasie wykonawczego. Abstrakcja deklaruje interfejsy API klasy, modułu lub systemu światu zewnętrznemu. Te interfejsy API stają sięcontract
. Ten system może być jeszcze rozwinięty. Użytkownicy systemu mogą teraz polegać na zadeklarowanych interfejsach API i są pewni, że każdy system wdrażający taką umowę zawsze będzie stosować się do zadeklarowanych interfejsów API i zawsze zapewni implementację tych interfejsów API. Kiedy piszemy jakiś konkretny byt, decyzja o ukryciu naszych stanów wewnętrznych jest hermetyzacjąźródło
Myślę, że enkapsulacja jest sposobem na wdrożenie abstrakcji. Spójrz na poniższy link.
Abstrakcja i enkapsulacja
źródło
W skrócie
Użycie abstrakcji -> Użycie enkapsulacji i enkapsulacji -> ukrywanie danych
LUB
ukrywanie danych to podzbiór enkapsulacji, a enkapsulacja to podzbiór abstrakcji
Odniesienie: http://www.tonymarston.co.uk/php-mysql/abstraction.txt
źródło