Mylisz się co do definicji ' abstrakcji ' w OOP
On 10 lutego, 2021 by adminPró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 zdezorientowany (przepisałem definicję własnymi słowami).
Definicja 1:
Abstrakcja to koncepcja polegająca na wyjęciu obiektu ze świata rzeczywistego i przekształceniu go na terminy programistyczne. Na przykład utworzenie klasy Human
i nadanie jej int health
, int age
, String name
itp., i eat()
itp.
Definicja 2:
Bardziej ogólna definicja. Abstrakcja to pojęcie, które ma miejsce w dowolnym miejscu w systemie oprogramowania, w którym „uczynienie rzeczy bardziej ogólnymi / prostszymi / abstrakcyjnymi” jest w to zaangażowany. Kilka przykładów:
-
Hierarchia dziedziczenia, w której wyższe klasy są prostsze lub bardziej ogólne i definiują bardziej ogólną i abstrakcyjną implementację. Wh ile niższe klasy w hierarchii są bardziej konkretne i definiują bardziej szczegółowe implementacje.
-
Używanie enkapsulacji do ukrycia szczegółów implementacji klasy przed innymi klasami, dzięki czemu klasa jest bardziej „abstrakcyjny” (prostszy) dla zewnętrznego świata oprogramowania.
Definicja 3
Inna ogólna definicja: Abstrakcja to koncepcja przeniesienia uwagi ze szczegółów i konkretnej implementacji rzeczy na typy 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). Ma to miejsce na przykład podczas hermetyzacji, ponieważ enkapsulacja oznacza ukrycie szczegółów implementacji i pokazanie tylko typów rzeczy oraz ich bardziej ogólnych i abstrakcyjnych definicji. Przykładem może być użycie obiektu List
w Javie. ten obiekt w rzeczywistości używa szczegółów implementacji ArrayList
lub LinkedList
, ale te informacje są abstrakcyjne przy użyciu bardziej ogólnej nazwy List
.
Czy któraś z tych definicji jest poprawna? (Mam na myśli najbardziej konwencjonalną i akceptowaną definicję).
Komentarze
- Abstrakcja definiuje " rzecz " jako określony TYP rzeczy (Animal = > Dog), aby jeszcze bardziej zawęzić (Dog = > Pudel).
Odpowiedź
Abstrakcja jest jednym z trzech filarów programowania obiektowego (OOP). Dosłownie oznacza postrzeganie podmiotu w systemie lub kontekście z określonej perspektywy. Usuwamy niepotrzebne szczegóły i skupiamy się tylko na aspektach, które są niezbędne w danym kontekście lub rozważanym systemie.
Oto dobre wyjaśnienie:
Ty jako osoba masz różne relacje w różnych role. Kiedy jesteś w szkole, jesteś „Uczniem” . Kiedy jesteś w pracy, jesteś „Pracownikiem” . Przebywając w instytucji rządowej, możesz być postrzegany jako „Obywatel” . Sprowadza się więc do tego, w jakim kontekście patrzymy na byt / obiekt. Jeśli więc będę modelować System płac , będę patrzeć na Ciebie jako na Pracownik (PRN, pełny etat / niepełny etat, stanowisko) . Jeśli modeluję System zapisów na kurs , wtedy rozważę Twoje aspekty i cechy jako Student (numer rolki, wiek, płeć, zapisany kurs) . A jeśli modeluję System informacji o ubezpieczeniach społecznych , wtedy przyjrzę się Twoim szczegółom jako Obywatel (np. data urodzenia, płeć, kraj urodzenia itp.)
Pamiętaj, że abstrakcja (skupianie się na niezbędnych szczegółach) różni się od enkapsulacji (ukrywanie szczegółów ze świata zewnętrznego). Hermetyzacja oznacza ukrycie szczegółów obiektu i zapewnienie przyzwoitego interfejsu dla jednostek w świecie zewnętrznym do interakcji z tym obiektem lub bytem.Na przykład, jeśli ktoś chce poznać moje imię, nie może bezpośrednio uzyskać dostępu do moich komórek mózgowych, aby dowiedzieć się, jak się nazywam. Zamiast tego ta osoba zapyta mnie o imię. Jeśli kierowca chce przyspieszyć pojazd, ma do tego interfejs (pedał przyspieszenia, bieg itp.).
Pierwsza definicja nie jest zbyt jasna. Def 2 jest dobry, ale ma tendencję do dezorientowania początkującego, gdy próbuje połączyć abstrakcję z enkapsulacją i dziedziczeniem. Definicja 3 jest najlepszą z trzech definicji, ponieważ jasno definiuje, czym jest abstrakcja.
Komentarze
- Można więc powiedzieć, że ' jest jak uogólnienie zamiast specyfikacji?
- @samyismyhero Dokładnie! Szukamy ogólnych atrybutów i zachowania obiektów dla abstrakcji.
- [Animal = > Dog] to abstrakcja. Definiujesz, jakie możliwe części " zwierzę " może mieć, aby utworzyć " psa. " (ogon, nogi, futro itp.). Następnie możesz użyć klasy " Dog ", aby zdefiniować pudla, pitbulla itp. Zatem ' ponownie deklarowanie ras psów na podstawie klasy " Pies " zamiast " Zwierzę. "
Odpowiedź
Definicja 1 zdecydowanie nie jest abstrakcją. To dokładniej opisuje modelowanie .
Definicje 2 i 3 opisują to samo. Obie są całkiem dobrymi opisami abstrakcji.
Komentarze
- To ' tak mi się wydawało !
abstract class Shape
lol!
Odpowiedź
Każda z tych definicji jest dobrze.
Abstrakcja polega na tym, że koncentrujesz się tylko na tych szczegółach, które są ważne dla twojego celu.
W pierwszym przypadku nie możesz (obecnie) włączyć do swojego kodu prawdziwych ludzi; skupiasz się na konkretnych szczegółach osoby, które służą twojemu celowi. W innym programie może być konieczne skupienie się na innych szczegółach. To byłyby różne abstrakcje osoby i każda z nich może być równie ważna w swoim kontekście .
Druga i trzecia definicja kontynuuje tę ideę, stosując ją do jednostek oprogramowania.
Dodaj komentarz