Förvirrad över definitionen av ' abstraktion ' i OOP
On februari 10, 2021 by adminJag försöker förstå definitionen av ”abstraktion” i OOP.
Jag har stött på några huvuddefinitioner. Är de alla giltiga? Är en av dem fel? Jag är förvirrad. (Jag skrev om definitionen med mina egna ord).
Definition 1:
Abstraktion är begreppet att ta något objekt från den verkliga världen och konvertera det till programmeringsvillkor. Såsom att skapa en Human
-klass och ge den int health
, int age
, String name
, etc. egenskaper, och eat()
etc. metoder.
Definition 2:
En mer allmän definition. Abstraktion är ett begrepp som äger rum var som helst i ett mjukvarusystem där ”gör saker mer allmänna / enklare / abstraktare” är involverade. Några exempel:
-
En arvshierarki, där de högre klasserna är enklare eller mer allmänna och definierar mer allmän och abstrakt implementering. ile de lägre klasserna i hierarkin är mer konkreta och definierar mer detaljerade implementeringar.
-
Användning av inkapsling för att dölja detaljerna för implementering av en klass från andra klasser, vilket gör klassen mer ”abstrakt” (enklare) till programvaruvärlden utanför.
Definition 3
En annan allmän definition: Abstraktion är begreppet att flytta fokus från detaljer och konkret implementering av saker till typ av saker (dvs. klasser), de tillgängliga operationerna (dvs. metoder) etc, vilket gör programmeringen enklare, mer allmän och mer abstrakt. (Detta kan ske var som helst och i vilket sammanhang som helst i mjukvarusystemet). Det sker till exempel vid inkapsling, eftersom inkapsling innebär att dölja detaljerna i implementeringen och endast visa typ av saker och deras mer allmänna och abstrakta definitioner. Ett annat exempel skulle använda ett List
-objekt i Java. det här objektet använder faktiskt implementeringsdetaljer för en ArrayList
eller en LinkedList
, men denna information abstraheras med det mer allmänna namnet List
.
Är någon av dessa definitioner korrekta? (Jag hänvisar till mest konventionella och accepterade definition).
Kommentarer
- Abstraktion definierar en " sak " för att vara en viss TYP av sak (Animal = > Hund) för att begränsa den ytterligare (Hund = > Pudel).
Svar
Abstraktion är en av de tre pelarna i Object Oriented Programming (OOP). Det betyder bokstavligen att uppfatta en enhet i ett system eller sammanhang ur ett visst perspektiv. Vi tar bort onödiga detaljer och fokuserar bara på aspekter som är nödvändiga för det sammanhanget eller systemet som övervägs.
Här är en bra förklaring:
Du som person har olika relationer i olika roller. När du går i skolan är du ”Student” . När du är på jobbet är du ”Anställd” . När du är på statlig institution kan du ses som en ”Citizen” . Så det kokar ner till vad i vilket sammanhang vi tittar på en enhet / ett objekt. Så om jag modellerar ett Lönesystem , kommer jag att se på dig som en Anställd (PRN, heltid / deltid, beteckning) . Om jag modellerar ett Course Enrollment System , kommer jag att betrakta dina aspekter och egenskaper som en Student (rullnummer, ålder, kön, kurs inskriven) . Och om jag modellerar ett Social Security Information System så kommer jag att titta på dina detaljer som en Medborgare (som DOB, kön, födelseland osv.)
Kom ihåg att abstraktion (med fokus på nödvändiga detaljer) skiljer sig från inkapsling (döljer detaljer från omvärlden). Inkapsling innebär att gömma detaljerna i objektet och tillhandahålla ett anständigt gränssnitt för enheterna i omvärlden att interagera med det objektet eller enheten.Om någon till exempel vill veta mitt namn kan han inte direkt komma åt mina hjärnceller för att få veta vad jag heter. Istället frågar personen antingen mitt namn. Om en förare vill påskynda ett fordon finns det ett gränssnitt (gaspedal, växel, etc.) för detta ändamål.
Den första def är inte så tydlig. Def 2 är bra men det tenderar att förvirra nybörjaren när den försöker koppla abstraktion med inkapsling och arv. Def 3 är den bästa av tre definitioner eftersom den tydligt definierar vad som är Abstraktion exakt.
Kommentarer
- Så du skulle säga att det ' är som en generalisering istället för en specifikation?
- @samyismyhero Exakt! Vi letar efter generiska attribut och beteenden för objekt för abstraktion.
- [Animal = > Hund] är en abstraktion. Du definierar vilka möjliga delar som ett " Djur " kan ha för att skapa en " Hund. " (Svans, ben, päls osv.). Sedan kan du använda klassen " Hund " för att definiera en pudel, Pit Bull osv. Så du ' omdeklarerar hundraser baserat på " Hund " i stället för en " Djur. "
Svar
Definition 1 är definitivt inte en abstraktion. Det beskriver närmare modellering .
Definitionerna 2 och 3 beskriver samma sak. Och båda är ganska bra beskrivningar av en abstraktion.
Kommentarer
- Det ' är vad jag trodde !
abstract class Shape
lol!
Svar
Var och en av dessa definitioner är bra.
Abstraktion är där du bara fokuserar på de detaljer som är viktiga för ditt syfte.
I det första fallet kan du (för närvarande) inte inkludera riktiga människor i din kod; du fokuserar på särskilda detaljer om en person som tjänar ditt syfte. I ett annat program kan du behöva fokusera på olika detaljer. Dessa skulle vara olika abstraktioner av en person, och var och en kan vara lika giltig i sitt sammanhang .
Den andra och tredje definitionen fortsätter denna idé och tillämpar den på mjukvaruenheter.
Lämna ett svar