Co to jest abstrakcja w programowaniu?

1

Witam, jestem początkujący i chciałbym dowiedzieć się czym jest abstrakcja w programowaniu. Spotkałem się z tym wiele razy, wiem że są klasy abstrakcyjne, wiem jak są skonstruowane ale jak opisać to znacznie w prostym języku?
Pozdrawiam

0

Załóżmy że masz dużo, bardzo dużo kasy. Kupujesz sobie różna rzeczy, np. samolot, helikopter, quad-a, 10 samochód, motor. Każda z tych rzeczy to pewnego rodzaju pojazd, pojazd może się zepsuć - wyobraź sobie że zamiast mieć po jednym mechaniku do każdego rodzaju pojazdu, możesz mieć jednego do wszystkiego. Takie podejście, a przynajmniej próba jego realizacji nazywamy abstrakcją. Tak mi się wydaje że taki sensowniejszy życiowy przykład.

3

ne0:
Bardziej by mi to podchodziło pod God-class ;]

Klasa abstrakcyjna to zwykle klasa posiadająca metody abstrakcyjne, czyli niezaimplementowane. Kompilator zwykle zabrania tworzenia instancji takich klas. Jednak mogą być odstępstwa - np klasa może mieć modyfikator abstract chociaż nie ma żadnych metod abstrakcyjnych albo jakiś język programowania może dawać możliwość tworzenia instancji klas abstrakcyjnych.

Abstrakcja sama w sobie to jednak coś nieco innego. Abstrakcje tworzy się po to, by operować na abstrakcjach. Dla przykładu:

  • zamiast operować na konkretnej bazie danych tworzy się abstrakcję na składowanie danych, czyli operując na abstrakcji nie obchodzi nas jak działa baza tylko co wysyłamy i odbieramy z abstrakcji. Dzięki temu można mieć wiele różnych baz pod spodem albo w testach jednostkowych stworzyć konkretyzację abstrakcji, która w ogóle nie komunikuje się z żadną bazą danych zapisującą na dysk.
  • zamiast operować na konkretnej kolekcji typu java.util.List, możesz operować na java.util.Collection - to drugie zawiera mniejszą funkcjonalność niż to pierwsze, ale jednocześnie stwarza mniej założeń, więc jeśli twój algorytm działa dla Collection to działa dla Listy ale i wielu innych kolekcji,

Żeby stworzyć abstrakcję na coś musisz właśnie usunąć jakieś założenie, czyli np:

  • usuwamy zależność od Postgres w interfejsie warstwy dostępu do bazy danych - teraz nasza warstwa dostępu do bazy danych operuje na wyższym poziomie abstrakcji,
  • usuwamy zależność od Listy, bo np nie wymagamy, by mieć dostęp do elementów po indeksach, iterator nam wystarczy. Dzięki temu możemy operować np na zbiorach, gdzie z oczywistych względów nie da się indeksować elementów,

Możesz też zobaczyć sobie na hierarchię struktur algebraicznych, np na: http://pl.wikipedia.org/wiki/Pier%C5%9Bcie%C5%84_(matematyka)
Są struktury bardzo ogólne (jak np półgrupa), ale są też bardzo konkretne (jak np zbiór liczb całkowitych).

1 użytkowników online, w tym zalogowanych: 0, gości: 1