Forvirret over definitionen af ' abstraktion ' i OOP
On februar 10, 2021 by adminJeg prøver at forstå definitionen af “abstraktion” i OOP.
Jeg er stødt på et par hoveddefinitioner. Er de alle gyldige? Er en af dem forkert? Jeg er forvirret. (Jeg skrev igen definitionen med mine egne ord).
Definition 1:
Abstraktion er begrebet at tage et objekt fra den virkelige verden og konvertere det til programmeringsbetingelser. Så som at skabe en Human
klasse og give den int health
, int age
, String name
osv. egenskaber og eat()
osv. metoder.
Definition 2:
En mere generel definition. Abstraktion er et begreb, der finder sted hvor som helst i et softwaresystem, hvor “at gøre tingene mere generelle / enklere / abstrakte” er involveret. Et par eksempler:
-
Et arvshierarki, hvor de højere klasser er enklere eller mere generelle og definerer mere generel og abstrakt implementering. ile de lavere klasser i hierarkiet er mere konkrete og definerer mere detaljerede implementeringer.
-
Brug af indkapsling til at skjule detaljerne i implementeringen af en klasse fra andre klasser, hvilket gør klassen mere “abstrakt” (enklere) til den ydre softwareverden.
Definition 3
En anden generel definition: Abstraktion er begrebet at flytte fokus fra detaljer og konkret implementering af ting til typer af ting (dvs. klasser), de tilgængelige operationer (dvs. metoder) osv., hvilket gør programmeringen enklere, mere generel og mere abstrakt. (Dette kan finde sted overalt og i enhver sammenhæng i softwaresystemet). Det finder sted for eksempel, når indkapsling, fordi indkapsling betyder at skjule detaljerne i implementering og kun vise typer af ting og deres mere generelle og abstrakte definitioner. Et andet eksempel ville bruge et List
-objekt i Java. dette objekt bruger faktisk implementeringsdetaljerne for en ArrayList
eller en LinkedList
, men denne information er abstrakt ved hjælp af det mere generelle navn List
.
Er nogen af disse definitioner korrekte? (Jeg henviser til mest konventionelle og accepterede definition).
Kommentarer
- Abstraktion definerer en " ting " til at være en bestemt TYPE af ting (Animal = > Hund) for at indsnævre den yderligere (Hund = > Puddel).
Svar
Abstraktion er en af de 3 søjler i Object Oriented Programming (OOP). Det betyder bogstaveligt talt at opfatte en enhed i et system eller en kontekst fra et bestemt perspektiv. Vi tager unødvendige detaljer ud og fokuserer kun på aspekter, der er nødvendige for den kontekst eller det system, der overvejes.
Her er en god forklaring:
Du som person har forskellige forhold i forskellige roller. Når du er i skole, er du en “Student” . Når du er på arbejde, er du en “Medarbejder” . Når du er på statsinstitution, kan du blive betragtet som en “Citizen” . Så det koger ned til hvad i hvilken sammenhæng ser vi på en enhed / objekt. Så hvis jeg modellerer et Lønsystem , vil jeg se på dig som en Medarbejder (PRN, fuld tid / deltid, betegnelse) . Hvis jeg modellerer et Course Enrollment System , så vil jeg overveje dine aspekter og egenskaber som en Student (rulletal, alder, køn, kursus tilmeldt) . Og hvis jeg modellerer et Social Security Information System så vil jeg se på dine detaljer som en Borger (som DOB, køn, fødested osv.)
Husk, at abstraktion (med fokus på nødvendige detaljer) er forskellig fra indkapsling (skjuler detaljer fra den ydre verden). Indkapsling betyder at skjule detaljerne i objektet og give en anstændig grænseflade for enhederne i den ydre verden til at interagere med det pågældende objekt eller enhed.For eksempel, hvis nogen vil vide mit navn, kan han ikke få direkte adgang til mine hjerneceller for at lære, hvad jeg hedder. I stedet vil denne person enten spørge mit navn. Hvis en chauffør ønsker at fremskynde et køretøj, er der en grænseflade (speederpedal, gear osv.) Til dette formål.
Den første def er ikke særlig klar. Def 2 er god, men det har en tendens til at forvirre nybegynderen, da den forsøger at forbinde abstraktion med indkapsling og arv. Def 3 er den bedste ud af 3 definitioner, da den klart definerer, hvad der er abstraktion præcist.
Kommentarer
- Så du vil sige, at det ' ligner en generalisering i stedet for en specifikation?
- @samyismyhero Præcis! Vi ser efter generiske attributter og opførsel af objekter til abstraktion.
- [Animal = > Hund] er en abstraktion. Du definerer, hvilke mulige dele et " Dyr " kan have for at oprette en " Hund. " (Hale, ben, pels osv.). Derefter kan du bruge klassen " Hund " til at definere en puddel, Pit Bull osv. Så du ' at erklære hunderacer baseret på " Hund " klassen i stedet for en " Dyr. "
Svar
Definition 1 er bestemt ikke en abstraktion. Dette beskriver nærmere modellering .
Definitioner 2 og 3 beskriver den samme ting. Og begge er ret gode beskrivelser af en abstraktion.
Kommentarer
- Det ' er hvad jeg troede !
abstract class Shape
lol!
Svar
Hver af disse definitioner er fint.
Abstraktion er, hvor du kun fokuserer på de detaljer, der er vigtige for dit formål.
I det første tilfælde kan du (i øjeblikket) ikke inkludere rigtige mennesker i din kode; du fokuserer på bestemte detaljer om en person, der tjener dit formål. I et andet program skal du muligvis fokusere på forskellige detaljer. Disse ville være forskellige abstraktioner af en person, og hver kan være lige så gyldig i deres sammenhæng .
Den anden og tredje definition fortsætter denne idé ved at anvende den på softwareenheder.
Skriv et svar