Zmatení ohledně definice ' abstrakce ' v OOP
On 10 února, 2021 by adminSnažím se porozumět definici „abstrakce“ v OOP.
Narazil jsem na několik hlavních definic. Jsou všechny platné? Mýlí se jeden z nich? Jsem zmatený. (Definici jsem přepsal vlastními slovy).
Definice 1:
Abstrakce je koncept převzetí nějakého objektu ze skutečného světa a jeho převedení na podmínky programování. Například vytvoření třídy Human
a její zadání int health
, int age
, String name
atd. a eat()
atd. metody.
Definice 2:
Obecnější definice. Abstrakce je koncept, který se odehrává kdekoli v softwarovém systému, kde „dělat věci obecnější / jednodušší / abstraktní“ je to zahrnuto. Několik příkladů:
-
Hierarchie dědičnosti, kde jsou vyšší třídy jednodušší nebo obecnější a definují obecnější a abstraktní implementaci. Nižší třídy v hierarchii jsou konkrétnější a definují podrobnější implementace.
-
Pomocí zapouzdření skryjete podrobnosti implementace třídy před jinými třídami, čímž se třída stane více „abstract“ (jednodušší) pro vnější svět softwaru.
Definice 3
Další obecná definice: Abstrakce je koncept přesunu fokusu od detailů a konkrétní implementace věcí k typům věcí (tj. třídy), dostupné operace (tj. metody) atd., čímž je programování jednodušší, obecnější a abstraktnější. (To se může stát kdekoli a v jakémkoli kontextu softwarového systému). Probíhá například při zapouzdření, protože zapouzdření znamená skrýt podrobnosti implementace a zobrazit pouze typy věcí a jejich obecnější a abstraktní definice. Příkladem Anotehr by bylo použití List
objektu v Javě. tento objekt ve skutečnosti používá podrobnosti implementace ArrayList
nebo LinkedList
, ale tyto informace jsou abstrahovány pomocí obecnějšího názvu List
.
Je některá z těchto definic správná? (Mám na mysli nejkonvenčnější a nejpřijatelnější definici).
Komentáře
- Abstrakce definuje " věc " jako určitý TYP věci (Animal = > Dog), aby se ještě více zúžil (Dog = > Pudl).
Odpověď
Abstrakce je jedním ze 3 pilířů objektově orientovaného programování (OOP). Doslova to znamená vnímat entitu v systému nebo kontextu z určité perspektivy. Odstraňujeme zbytečné podrobnosti a zaměřujeme se pouze na aspekty, které jsou pro daný kontext nebo systém nezbytné.
Zde je několik dobrých vysvětlení:
Vy jako člověk máte různé vztahy v různých role. Když jste ve škole, jste „student“ . Když jste v práci, jste „zaměstnanec“ . Pokud jste ve vládní instituci, můžete být považováni za „Občan“ . Takže se scvrkává na to, v jakém kontextu se díváme na entitu / objekt. Pokud tedy modeluji mzdový systém , budu se na vás dívat jako na Zaměstnanec (PRN, plný / částečný úvazek, označení) . Pokud modeluji Systém pro zápis do kurzu , budu vaše aspekty a charakteristiky považovat za Student (počet rolí, věk, pohlaví, zapsaný kurz) . A pokud modeluji Informační systém sociálního zabezpečení , podívám se na vaše podrobnosti jako Občan (jako DOB, pohlaví, země narození atd.)
Pamatujte, že Abstrakce (zaměřená na nezbytné detaily) se liší od Zapouzdření (skrývání detailů z vnějšího světa). Zapouzdření znamená skrytí detailů objektu a poskytnutí slušného rozhraní pro entity ve vnějším světě pro interakci s tímto objektem nebo entitou.Například pokud někdo chce znát mé jméno, nemůže přímo přistupovat k mým mozkovým buňkám, aby zjistil, jak se jmenuji. Místo toho se tato osoba zeptá na moje jméno. Pokud chce řidič zrychlit vozidlo, existuje pro tento účel rozhraní (plynový pedál, rychlostní stupeň atd.).
1. def. Není příliš jasný. Def 2 je dobrý, ale má sklon nováčka zmást, když se pokouší spojit Abstrakci s Zapouzdřením a Dědičností. Def 3 je nejlepší ze 3 definic, protože jasně definuje, co přesně je Abstrakce.
Komentáře
- Takže byste řekli, že to ' je jako zobecnění místo specifikace?
- @samyismyhero Přesně! Hledáme obecné atributy a chování objektů pro abstrakci.
- [Animal = > Pes] je abstrakce. Definujete, jaké možné části může " Zvíře " vytvořit, aby vytvořil " psa. " (ocas, nohy, srst atd.). Potom můžete použít třídu " Dog " k definování pudla, pitbula atd. Takže vy ' deklarace plemen psů na základě třídy " Dog " místo " Zvíře. "
Odpověď
Definice 1 rozhodně není abstrakce. To přesněji popisuje modelování .
Definice 2 a 3 popisují totéž. A oba jsou docela dobrým popisem abstrakce.
Komentáře
- To je ' to, co jsem si myslel !
abstract class Shape
lol!
Odpověď
Každá z těchto definic je fajn.
Abstrakce je místo, kde se soustředíte pouze na ty detaily, které jsou důležité pro váš účel.
V prvním případě (v současnosti) nemůžete do svého kódu zahrnout skutečné lidi; zaměřujete se na konkrétní podrobnosti osoby, které slouží vašemu účelu. V jiném programu se možná budete muset zaměřit na různé podrobnosti. Jednalo by se o různé abstrakce osoby a každá z nich může být stejně platná v jejich kontextu .
Druhá a třetí definice pokračují v této myšlence a aplikují ji na softwarové entity.
Napsat komentář