Próbuję zrozumieć definicję „abstrakcji” w OOP.
Natknąłem się na kilka głównych definicji. Czy wszystkie są ważne? Czy któryś z nich się myli? Jestem zmieszany. (Ponownie napisałem definicję własnymi słowami).
Definicja 1:
Abstrakcja to koncepcja pobierania jakiegoś obiektu ze świata rzeczywistego i konwertowania go na warunki programowania. Takie jak tworzenie Human
klasę i dając go int health
, int age
, String name
itp właściwości i eat()
itp metody.
Definicja 2:
Bardziej ogólna definicja. Abstrakcja to koncepcja, która ma miejsce w dowolnym miejscu w systemie oprogramowania, w którym chodzi o „uczynienie rzeczy bardziej ogólnymi / prostszymi / abstrakcyjnymi” . Kilka przykładów:
Hierarchia dziedziczenia, w której wyższe klasy są prostsze lub bardziej ogólne i definiują bardziej ogólne i abstrakcyjne wdrożenie. Natomiast niższe klasy w hierarchii są bardziej konkretne i definiują bardziej szczegółowe implementacje.
Wykorzystanie enkapsulacji do ukrycia szczegółów implementacji klasy przed innymi klasami, czyniąc ją bardziej „abstrakcyjną” (prostszą) dla zewnętrznego świata oprogramowania.
Definicja 3
Inna ogólna definicja: abstrakcja to koncepcja przeniesienia uwagi ze szczegółów i konkretnej implementacji rzeczy na rodzaje rzeczy (tj. Klasy), dostępne operacje (tj. Metody) itp., Dzięki czemu programowanie jest prostsze, bardziej ogólne, i bardziej abstrakcyjne. (Może to mieć miejsce w dowolnym miejscu i dowolnym kontekście w systemie oprogramowania). Odbywa się to na przykład podczas enkapsulacji, ponieważ enkapsulacja oznacza ukrywanie szczegółów implementacji i pokazywanie tylko typów rzeczy oraz ich bardziej ogólnych i abstrakcyjnych definicji. Innym przykładem byłoby użycie List
obiektu w Javie. ten obiekt faktycznie używa szczegółów implementacji an ArrayList
lub a LinkedList
, ale ta informacja jest abstrakcyjna przy użyciu bardziej ogólnej nazwy List
.
Czy którakolwiek z tych definicji jest poprawna? (Mam na myśli najbardziej konwencjonalną i przyjętą definicję).