Verward over de definitie van ' abstractie ' in OOP
Geplaatst op februari 10, 2021 door adminIk probeer de definitie van “abstractie” in OOP te begrijpen.
Ik ben een paar hoofddefinities tegengekomen. Zijn ze allemaal geldig? Is een van hen fout? Ik ben in de war. (Ik heb de definitie herschreven met mijn eigen woorden).
Definitie 1:
Abstractie is het concept van het nemen van een object uit de echte wereld en het converteren naar programmeertermen. Zoals het maken van een Human
class en het geven van int health
, int age
, String name
, etc. eigenschappen, en eat()
etc. methoden.
Definitie 2:
Een meer algemene definitie. Abstractie is een concept dat overal plaatsvindt in een softwaresysteem waarin “dingen algemener / eenvoudiger / abstract maken” is hierbij betrokken. Een paar voorbeelden:
-
Een overervingshiërarchie, waarbij de hogere klassen eenvoudiger of algemener zijn en een meer algemene en abstracte implementatie definiëren. Wh ile de lagere klassen in de hiërarchie zijn concreter en definiëren meer gedetailleerde implementaties.
-
Inkapseling gebruiken om de details van de implementatie van een klasse te verbergen voor andere klassen, waardoor de klasse meer “abstract” (eenvoudiger) naar de externe softwarewereld.
Definitie 3
Een andere algemene definitie: abstractie is het concept waarbij de focus wordt verplaatst van de details en concrete implementatie van dingen naar de soorten dingen (bijv. klassen), de beschikbare bewerkingen (d.w.z. methoden), enz., waardoor de programmering eenvoudiger, algemener en abstracter wordt. (Dit kan overal en in elke context in het softwaresysteem plaatsvinden). Het vindt bijvoorbeeld plaats bij het inkapselen, omdat inkapseling betekent dat de details van de implementatie worden verborgen en alleen de soorten dingen en hun meer algemene en abstracte definities worden getoond. Een ander voorbeeld zou een List
-object in Java gebruiken. dit object gebruikt feitelijk de implementatiedetails van een ArrayList
of een LinkedList
, maar deze informatie wordt samengevat met de algemenere naam List
.
Is een van deze definities correct? (Ik verwijs naar de meest conventionele en geaccepteerde definitie).
Reacties
- Abstractie is het definiëren van een " ding " als een bepaald TYPE ding (Dier = > Dog) om het nog verder te verfijnen (Dog = > Poedel).
Answer
Abstractie is een van de 3 pijlers van Object Oriented Programming (OOP). Het betekent letterlijk om een entiteit in een systeem of context vanuit een bepaald perspectief waar te nemen. We verwijderen onnodige details en richten ons alleen op aspecten die nodig zijn voor die context of het betreffende systeem.
Hier is een goede uitleg:
Jij als persoon hebt verschillende relaties in verschillende rollen. Als je op school zit, ben je een “Student” . Als u op het werk bent, bent u een “Werknemer” . Als je bij een overheidsinstelling bent, kun je worden gezien als een “Citizen” . Het komt dus neer op wat in welke context we naar een entiteit / object kijken. Dus als ik een Salarissysteem modelleer, zal ik je beschouwen als een Werknemer (PRN, fulltime / parttime, aanwijzing) . Als ik een Cursusinschrijvingssysteem modelleer, dan zal ik uw aspecten en kenmerken beschouwen als een Student (rolnummer, leeftijd, geslacht, ingeschreven cursus) . En als ik een Informatiesysteem voor sociale zekerheid modelleer, dan zal ik uw gegevens bekijken als een Burger (zoals geboortedatum, geslacht, geboorteland, etc.)
Onthoud dat abstractie (focussen op noodzakelijke details) anders is dan inkapseling (details verbergen voor de buitenwereld). Inkapseling betekent het verbergen van de details van het object en het bieden van een fatsoenlijke interface voor de entiteiten in de buitenwereld om te communiceren met dat object of die entiteit.Als iemand bijvoorbeeld mijn naam wil weten, kan hij niet rechtstreeks bij mijn hersencellen komen om te weten wat mijn naam is. In plaats daarvan zal die persoon mijn naam vragen. Als een bestuurder een voertuig wil versnellen, is er een interface (gaspedaal, versnelling, enz.) Voor dat doel.
De eerste def is niet erg duidelijk. Def 2 is goed, maar het heeft de neiging om de nieuweling in verwarring te brengen omdat het abstractie probeert te koppelen aan inkapseling en erfenis. Def 3 is de beste van de 3 definities omdat het duidelijk definieert wat Abstraction precies is.
Opmerkingen
- Dus je zou zeggen dat het ' een generalisatie is in plaats van een specificatie?
- @samyismyhero Precies! We zoeken naar algemene kenmerken en gedrag van objecten voor abstractie.
- [Animal = > Dog] is een abstractie. U definieert welke mogelijke onderdelen een " Dier " kan hebben om een " hond te maken. " (staart, benen, vacht, enz.). Vervolgens kun je de klasse " Dog " gebruiken om een Poedel, Pit Bull, enz. Te definiëren. Dus jij ' hondenrassen opnieuw declareren op basis van de " Dog " klasse in plaats van een " Dier. "
Antwoord
Definitie 1 is beslist geen abstractie. Dat is een betere beschrijving van modellering .
Definities 2 en 3 beschrijven hetzelfde. En beide zijn redelijk goede beschrijvingen van een abstractie.
Opmerkingen
- Dat ' is wat ik dacht !
abstract class Shape
lol!
Antwoord
Elk van deze definities is prima.
Bij abstractie focus je je alleen op die details die belangrijk zijn voor je doel.
In het eerste geval kun je (momenteel) geen echte mensen in je code opnemen; u concentreert zich op bepaalde details van een persoon die uw doel dienen. In een ander programma moet u zich misschien op andere details concentreren. Dit zouden verschillende abstracties van een persoon zijn, en elk kan even geldig zijn in hun context .
De tweede en derde definitie zetten dit idee voort en passen het toe op software-entiteiten.
Geef een reactie