Co to jest abstrakcja w programowaniu?

2015-02-05 15:07
Pijany Terrorysta
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

Pozostało 580 znaków

2015-02-05 15:22
2015-02-05 15:22
2015-02-05 15:40
ne0
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.


Pomogłem? To dobrze :)

Pozostało 580 znaków

2015-02-05 21:21
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).


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

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