Nie jestem pewien, czy oba terminy mogą być używane zamiennie. Może jest jakieś akademickie rozróżnienie w informatyce, które nie ma znaczenia w codziennym programowaniu? Czy mogę używać obu terminów zamiennie, nie będąc w błędzie? Może zależy to od kontekstu, w którym używam obu terminów?
Edycja: Powodem, dla którego uważam oba terminy za możliwe do wymiany, jest wpis w Wikipedii o warstwie Abstrakcja . Tam można znaleźć cytat Davida Wheelersa: „Wszystkie problemy w informatyce można rozwiązać przez inny poziom pośredni”.
computer-science
terminology
Theo Lenndorff
źródło
źródło
Odpowiedzi:
Abstrakcja dotyczy uproszczenia, pośrednia - lokalizacji.
Abstrakcjato mechanizm, który „ukrywa” skomplikowane szczegóły obiektu w kategoriach prostszych, łatwiejszych w obsłudze terminów. W programowaniu dobrym przykładem jest różnica w szczegółach między kodem maszynowym a różnymi narzędziami do tworzenia aplikacji, które ostatecznie są oparte na kodzie maszynowym. Rozważ utworzenie aplikacji Windows Form za pomocą Visual Studio IDE. IDE pozwala myśleć o aplikacji w kategoriach łatwych w obsłudze elementów w sposób „co widzisz”. Pozycja widżetu ekranowego jest wyodrębniana do wizualnej lokalizacji w ramce, którą można zmienić, przeciągając widżet dookoła. Wewnętrznie IDE manipuluje widgetem przy użyciu innej warstwy abstrakcji, takiej jak język wysokiego poziomu (na przykład C #). Sam C # nie jest manipulowany za pomocą kodu maszynowego, jest manipulowany za pomocą „Common Runtime Environment”
Pośrednie odnosi się do uczynienia lokalizacji przedmiotu przezroczystym. Jeśli znasz identyfikator URI zasobu internetowego, możesz uzyskać dostęp do zasobu, nie znając jego dokładnej lokalizacji. Nie uzyskujesz bezpośredniego dostępu do zasobu, zamiast tego uzyskujesz dostęp poprzez kanał, który przekazuje twoje żądanie przez serię serwerów, aplikacji i routerów. Pośrednictwo może być uważane za szczególny rodzaj abstrakcji, gdy lokalizacja jest abstrakcyjna.
źródło
Abstrakcje są wdrażane przy użyciu pośrednich.
Na przykład pamięć wirtualna: abstrakcja to ciągła przestrzeń adresowa całkowicie do Państwa dyspozycji. Ta abstrakcja jest implementowana za pomocą pośrednictwa za pomocą tabeli stron. Zamiast bezpośredniego dostępu do adresów pamięci fizycznej, są one tłumaczone z adresu wirtualnego na adres fizyczny.
Aby dodać warstwę abstrakcji, musisz dodać warstwę pośrednią. Ale dodanie pośrednictwa niekoniecznie daje abstrakcję. Na przykład posiadanie metod pobierających i ustawiających dla każdej pojedynczej zmiennej jest warstwą pośrednią, ale jeśli wszystko, co robią, to pobieranie i ustawianie prostych wartości, nie ma abstrakcji.
źródło
Najpierw wypróbujmy odpowiednie definicje terminów:
Warstwa abstrakcji oznacza:
Z drugiej strony poziom pośredni oznacza:
Obie te rzeczy mogą oznaczać to samo, o ile używasz:
źródło
Rozumiem, że abstrakcja odnosi się głównie do funkcji, a pośrednictwo głównie do danych. Innymi słowy, poziom abstrakcji określa głębokość śladu stosu, a poziom pośredni określa liczbę wskaźników, które należy odrzucić. Przynajmniej tak używam terminów.
źródło
Warstwa abstrakcji i poziom pośrednictwa to odrębne pojęcia. Abstrakcja to agregacja i znaczące nazewnictwo szeregu elementów, takich jak fragmenty danych lub instrukcji programu, na przykład koncepcja wywołania pliku lub metody, natomiast pośrednictwo to oddzielenie jednostek w celu ułatwienia odroczenia realizacji ich relacji, na przykład użycie JNDI do oddzielenia identyfikacji zasobu w programie od rzeczywistego zasobu, który może być ostatecznie dostarczony przez kontener aplikacji.
Często koncepcje idą w parze, a to, które stosuje się do konkretnego konstruktu, zależy od tego, jakie ćwiczenie lub dyskusja jest w toku. Na przykład abstrakcyjny charakter interfejsu jest ważny podczas uczenia się lub dokumentowania API; jego właściwość pośrednia jest ważna podczas dodawania rozszerzalności lub tworzenia testów dla aplikacji.
Warstwa abstrakcji jest agregacją abstrakcji i daje im konceptualną integralność i spójność użytkowania. CreateProcess to nazwa interfejsu API win32 dla zestawu kodu, który buduje i wykonuje proces. „Nazwa” ma znaczenie w tym kontekście, ponieważ jeśli nazwiemy funkcję coś takiego jak DoAllocMemThenMakeEnvThenFindEntryPoint ... to naprawdę nie byłby bardzo abstrakcyjny. Warstwa, taka jak Win32 API, stanowi barierę, przez którą programiści mogą nie być zapuszczani. Usuwa złożoność z punktu widzenia dzwoniącego kosztem zmniejszenia mocy (elastyczność, wydajność itp.). Ten kompromis jest podkreślany przez częste dyskusje na temat nieszczelnych abstrakcji: może być konieczne wykonywanie bezpośrednich wywołań SQL podczas korzystania z Hibernacji lub wywoływanie Win32 podczas korzystania z .NET.
Jeśli chodzi o pośrednictwo, większość nietrywialnych programów działa z pewną formą pośrednictwa kodowanego przez użytkownika, o czym świadczy sekcja WEJŚCIA-WYJŚCIA COBOL-a sprzed arki. Podczas uzyskiwania dostępu do zasobu, takiego jak baza danych, możemy zobaczyć osadzenie ciągu połączenia JDBC w kodzie jako pośredni Poziom 0, połączenie JNDI (które deleguje wybór zasobu do kontenera aplikacji) jako Poziom 1 i niektóre konstrukcje Spring, które odwzorowują identyfikator JNDI aplikacji dla jednego z wielu zasobów kontenera jako Poziom 2. Wiele poziomów pozwala wielu stronom zewnętrznym na relację (w tym przypadku relację między wykonaniem kodu a bazą danych) na manipulowanie tą relacją. Dotyczy to również wewnętrznych składników programu, takich jak interfejsy i zdarzenia.
Widzimy, że bez względu na ich inne cechy abstrakcja zmniejsza złożoność, a pośrednia ją zwiększa. Abstrakcja zmniejsza moc, podczas gdy pośrednictwo ją zwiększa. Pośredni może być użyty do przywrócenia mocy abstrakcji poprzez umożliwienie zastąpienia domyślnego zachowania niestandardowymi wywołaniami zwrotnymi.
źródło
Wskaźnik do wskaźnika do wskaźnika do wskaźnika do wskaźnika do wskaźnika do int ma sześć poziomów pośrednich, ale nie ma żadnych warstw abstrakcji.
źródło
Dobrym przykładem abstrakcji jest wywołanie pojedynczej metody do przechowywania elementu w bazie danych. Metoda wyodrębnia szczegóły podłączenia i wywołania bazy danych. Gdy przykładem pośrednictwa jest użycie struktury do uzyskania dostępu do przerwań. Nadal masz dostęp do przerwania, gdy ustawiasz wartości w strukturze. dzieje się to pośrednio przez struct, nadając nazwy członków struct określonym punktom w pamięci.
Tak więc abstrakcja ukrywa szczegóły implementacji, gdzie pośrednictwo zapewnia po prostu „pośredni” interfejs, przez który można uzyskać dostęp do czegoś.
Abstrakcja ma miejsce wtedy, gdy nie musisz rozumieć, co jest ukryte, gdzie robisz to za pomocą pośrednictwa.
źródło
Dodanie poziomu (lub warstwy) abstrakcji i poziomu pośredniego to po prostu dwa sposoby mówienia tego samego. Kiedy rozwiązujesz problem, zwykle próbujesz bezpośredniego rozwiązania. Czasami nie jest to możliwe, więc wypróbuj rozwiązanie pośrednie. Wymaga to wprowadzenia pewnej abstrakcji w celu uproszczenia problemu - ponieważ problem jest złożony, nie można go rozwiązać bezpośrednio. Po rozwiązaniu problemu przez podejście pośrednie nie ma powodu, aby nie rozważać ponownego rozwiązania problemu, ale bardziej ogólnie; Będzie to wymagało wprowadzenia kolejnego, wyższego poziomu abstrakcji. A to nowe, bardziej ogólne rozwiązanie jest jeszcze bardziej pośrednie niż oryginalne rozwiązanie pośrednie - tj. Dlatego wprowadzono kolejny poziom pośredni.
źródło