Abstrakcja (programowanie)

uproszczenie rozpatrywanego problemu

Abstrakcja – pewnego rodzaju uproszczenie rozpatrywanego problemu, polegające na ograniczeniu zakresu cech manipulowanych obiektów wyłącznie do cech kluczowych dla algorytmu, a jednocześnie niezależnych od implementacji. W tym sensie abstrakcja jest odmianą formalizmu matematycznego. Cel stosowania abstrakcji jest dwojaki: ułatwienie rozwiązania problemu i zwiększenie jego ogólności.

Języki programowania (w szczególności języki obiektowe) mogą oferować specjalne narzędzia do tworzenia pewnych typów abstrakcji, jednak pojęcie to nie zależy w żaden sposób od konkretnego języka. Każde uogólnienie problemu mające na celu wyizolowanie jego kluczowych aspektów jest abstrakcją.

Dla przykładu, dany program komputerowy może przetwarzać różne zbiory obiektów, jednak wszystkie one mają wspólną cechę – w pewnych warunkach można je traktować jako listę o następujących operacjach: pierwszy(), ostatni() i następny() oraz predykacie czy_ostatni(). Dlatego dla potrzeb fragmentów zajmujących się przetwarzaniem list, wygodnie jest wprowadzić abstrakcję iteratora, który będzie udostępniał te właśnie operacje. W języku Java deklaracja interfejsu realizującego tę abstrakcję mogłaby wyglądać następująco:

public interface IterListy 
{
    void pierwszy();
    void ostatni();
    void następny();
    boolean czy_ostatni();
}

// ...

public void przetwarzaj_listę(IterListy iter_listy)
{
    while (! iter_listy.czy_ostatni())
    {
        // zrób coś
        iter_listy.następny();
    }
}

Dla porównania, w języku Python żadna formalna deklaracja nie jest potrzebna, kod przetwarzający listy po prostu odwołuje się do odpowiednich metod obiektu:

def przetwarzaj_listę(iter_listy):
    while not iter_listy.czy_ostatni():
        # zrób coś
        iter_listy.następny()

W rzeczywistości, w Pythonie abstrakcja iteratora jest wbudowana w język, wobec czego powyższy fragment można przepisać jako:

def przetwarzaj_listę(lista):
   for obiekt in lista:
      # zrób coś

Pętla for użyta w tym fragmencie doskonale ilustruje użyteczność abstrakcji – ponieważ całkowicie pomijane są jakiekolwiek charakterystyczne cechy przetwarzanych kolekcji obiektów, for może z równym powodzeniem obsługiwać każdą z nich, pod warunkiem jedynie że dany typ implementuje odpowiedni zbiór operacji. Dzięki temu for stosować można do list, słowników, krotek, zbiorów itd. Jednocześnie unika się angażowania w szczegóły implementacji nieistotne dla rozwiązywanego problemu, tj. przeglądania kolekcji obiektów.

Inne użycia edytuj

Termin „abstrakcja” bywa również używany w informatyce na określenie pokrewnej, jednak nie tożsamej techniki ukrywania implementacji za wspólnym interfejsem, który może korzystać z wielu różnych bibliotek do osiągnięcia pożądanej funkcjonalności. W tym sensie można mówić o abstrakcji bazy danych, mając na myśli kod, który dostosowuje interfejs danej bazy danych do wspólnej postaci oczekiwanej przez program.

W praktyce wiele popularnych bibliotek, w szczególności biblioteki standardowe i biblioteki ułatwiające pisanie przenośnych programów to biblioteki użytecznych abstrakcji, zarówno w pierwszym jak i drugim znaczeniu tego słowa.

Zobacz też edytuj