Confuz despre definiția ' abstractizare ' în POO
On februarie 10, 2021 by adminÎncerc să înțeleg definiția „abstractizării” din POO.
Am întâlnit câteva definiții principale. Sunt toate valabile? Este unul dintre ei greșit? Sunt „confuz. (Am rescris definiția cu propriile mele cuvinte).
Definiție 1:
Abstracția este conceptul de a lua un obiect din lumea reală și de a-l converti în termeni de programare. Cum ar fi crearea unei clase Human
și acordarea acestuia int health
, int age
, String name
, etc., și eat()
etc. metode.
Definiție 2:
O definiție mai generală. Abstracția este un concept care are loc oriunde într-un sistem software unde „a face lucrurile mai generale / mai simple / abstracte” este implicat. Câteva exemple:
-
O ierarhie a moștenirii, în care clasele superioare sunt mai simple sau mai generale și definesc o implementare mai generală și abstractă. ile clasele inferioare din ierarhie sunt mai concrete și definesc implementări mai detaliate.
-
Utilizarea încapsulării pentru a ascunde detaliile implementării unei clase de alte clase, făcând astfel clasa mai „abstract” (mai simplu) către lumea software exterioară.
Definiție 3
O altă definiție generală: Abstracția este conceptul de mutare a focalizării de la detalii și implementarea concretă a lucrurilor, la tipurile de lucruri (adică clase), operațiile disponibile (adică metode) etc., făcând astfel programarea mai simplă, mai generală și mai abstractă. (Acest lucru poate avea loc oriunde și în orice context din sistemul software). Are loc, de exemplu, atunci când se încapsulează, deoarece încapsularea înseamnă să ascundă detaliile implementării și să arate doar tipurile de lucruri și definițiile lor mai generale și abstracte. Un alt exemplu ar fi utilizarea unui obiect List
în Java. acest obiect utilizează de fapt detaliile de implementare ale unui ArrayList
sau al unui LinkedList
, dar aceste informații sunt extrase folosind numele mai general List
.
Este una dintre aceste definiții corecte? (Mă refer la cea mai convențională și acceptată definiție).
Comentarii
- Abstracția înseamnă un " lucru " pentru a fi un anumit TIP de lucru (Animal = > Dog) pentru a-l restrânge și mai mult (Dog = > Caniche).
Răspuns
Abstracția este unul dintre cei 3 piloni ai Programării Orientate pe Obiecte (OOP). În mod literal înseamnă a percepe o entitate într-un sistem sau context dintr-o anumită perspectivă. Scoatem detalii inutile și ne concentrăm doar pe aspecte care sunt necesare pentru contextul sau sistemul respectiv.
Iată câteva explicații bune:
În calitate de persoană, aveți relații diferite în diferite roluri. Când sunteți la școală, atunci sunteți un „student” . Când sunteți la serviciu, sunteți un „Angajat” . Când vă aflați la o instituție guvernamentală, puteți fi văzut ca „Cetățean” . Deci, se rezumă la ce în ce context ne uităm la o entitate / obiect. Deci, dacă modelez un Sistem de salarizare , te voi privi ca un Angajat (PRN, Full Time / Part Time, Designation) . Dacă modelez un Sistem de înscriere la curs , atunci voi considera aspectele și caracteristicile dvs. ca Student (Număr rol, vârstă, sex, curs înscris) . Și dacă modelez un Sistem de informații privind securitatea socială , atunci voi analiza detaliile dvs. ca Cetățean (cum ar fi DOB, sex, țara nașterii etc.)
mintiți-vă că Abstracția (concentrându-se pe detaliile necesare) este diferită de Encapsulare (ascunzând detaliile din lumea exterioară). Incapsularea înseamnă ascunderea detaliilor obiectului și furnizarea unei interfețe decente pentru entitățile din lumea exterioară pentru a interacționa cu acel obiect sau entitate.De exemplu, dacă cineva vrea să știe numele meu, atunci nu poate accesa direct celulele creierului meu pentru a afla care este numele meu. În schimb, acea persoană fie îmi va cere numele. Dacă un șofer dorește să accelereze un vehicul, atunci există o interfață (pedală de accelerație, treaptă etc.) în acest scop.
Primele definiții nu sunt foarte clare. Def 2 este bun, dar tinde să încurce începătorul în timp ce încearcă să lege Abstracția cu Encapsularea și Moștenirea. Def 3 este cel mai bun din 3 definiții, deoarece definește în mod clar ce este abstractizarea.
Comentarii
- Deci ați spune că ' seamănă cu o generalizare în loc de o specificație?
- @samyismyhero Exact! Căutăm atribute generice și comportamentul obiectelor pentru abstractizare.
- [Animal = > Dog] este o abstractizare. Definiți ce părți posibile poate avea un " Animal " pentru a crea un câine ". " (Coadă, picioare, blană etc.). Apoi, puteți utiliza clasa " Dog " pentru a defini un pudel, Pit Bull etc. Deci, ' re declararea raselor de câini pe baza clasei " Dog " în loc de o clasă " Animal. "
Răspuns
Definiția 1 nu este cu siguranță o abstracție. Aceasta descrie mai îndeaproape modelarea .
Definițiile 2 și 3 descriu același lucru. Și ambele sunt descrieri destul de bune ale unei abstracții.
Comentarii
- Asta ' este ceea ce am crezut !
abstract class Shape
lol!
Răspuns
Fiecare dintre aceste definiții este bine.
Abstracția este locul în care vă concentrați doar asupra acelor detalii importante pentru scopul dvs.
În primul caz, dvs. (în prezent) nu puteți include persoane reale în codul dvs.; vă concentrați asupra detaliilor specifice ale unei persoane care vă servesc scopului. Într-un alt program, poate fi necesar să vă concentrați asupra diferitelor detalii. Acestea ar fi abstracții diferite ale unei persoane și fiecare poate fi la fel de valabilă în contextul lor .
A doua și a treia definiție continuă această idee, aplicând-o entităților software.
Lasă un răspuns