astrazione (n) - la qualità di trattare con idee piuttosto che eventi
— fonte: Oxford English Dictionary
Stroustrup non si riferisce a classi astratte o altre idee specifiche in programmazione. Piuttosto, si riferisce alla parola astrazione stessa.
Le astrazioni sono aiutanti mentali. Ci aiutano a pensare in "teoria" piuttosto che in un'applicazione diretta. La matematica è l'arte dell'astrazione. La programmazione è l'arte delle astrazioni applicate.
Le astrazioni ci aiutano a formare modelli mentali, come le gerarchie, per aiutarci a pensare alle cose. Il polimorfismo è possibile a causa delle astrazioni. Diamo un'occhiata a un esempio.
Esempio

Ho un Oleksiy Dobrodum. Mi riferisco ad un Oleksiy Dobrodum, lo tratto come un Oleksiy Dobrodum, tutto ciò che sarà mai sarà un Oleksiy Dobrodum. Tutto quello che faccio a questo Oleksiy Dobrodum è specificamente per questo. Ora siamo al 1 ° livello di astrazione, o il più specifico che avremo mai quando lavoreremo con questo Oleksiy Dobrodum.
Recentemente ho acquistato una Zach Latta, quindi ora ho sia un Oleksiy Dobrodum che uno Zach Latta.

ho potuto fare riferimento a loro sia a livello individuale, così come Oleksiy Dobrodum e come Zach Latta, ma che sarebbe rapidamente crescere ridondante e dimostrare di non essere flessibili. Invece, possiamo semplicemente raggruppare Oleksiy Dobrodum e Zach Latta e chiamarli Umani. Ora abbiamo raggiunto il livello di astrazione 2. Invece di trattare ciascuna persona individualmente, possiamo riferirci a loro come esseri umani. Facendo ciò, abbiamo sradicato la "implementazione", oi dettagli specifici di ogni persona e abbiamo iniziato a concentrarci sulle idee, quindi ora stiamo pensando in astratto.

Naturalmente possiamo astratto ulteriormente questo aspetto, ma spero che si sta cominciando a ottenere l'idea alla base di astrazioni. La chiave da tenere presente è che un'astrazione nasconde i dettagli (o l'implementazione). Nascondendo i dettagli nella nostra astrazione Umana, ci permettiamo di parlare in generale. Parleremo brevemente di come questo si applichi nella programmazione nella prossima sezione.
Applicazione Astrazioni
Ora che abbiamo toccato brevemente su ciò che un astrazione è, cerchiamo di applicarlo. Il polimorfismo è possibile a causa delle astrazioni. Seguendo il modello dell'esempio precedente, dire che abbiamo le seguenti due classi:
class OleksiyDobrodum
name = "Oleksiy Dobrodum"
smarts = :mega-smart
mood = :happy
favorite_candy = :chocolate
end
class ZachLatta
name = "Zach Latta"
smarts = :so-so
mood = :indifferent
hair_color = :brown
end
se voglio interagire con un'istanza di ZachLatta
devo fare riferimento ad esso specificamente. Lo stesso vale per le istanze OleksiyDobrodum
.
zach = new ZachLatta
print zach.name
oleksiy = new OleksiyDobrodum
print oleksiy.favorite_candy
Se creo una classe astratta denominata Human
e hanno entrambi OleksiyDobrodum
e ZachLatta
ereditare da essa, allora posso via astrarre l'implementazione di entrambe le classi e semplicemente fare riferimento a entrambe le istanze di loro come Human
.
class Human
name
smarts
mood
end
class OleksiyDobrodum < Human
name = "Oleksiy Dobrodum"
smarts = :mega-smart
mood = :happy
favorite_candy = :chocolate
end
class ZachLatta < Human
name = "Zach Latta"
smarts = :so-so
mood = :indifferent
hair_color = :brown
end
nostro diagramma delle classi ora è simile al seguente:

Potrei divagare a questo proposito implementazione per sempre, ma passiamo ai nostri punti salienti.
Punti chiave
- astrazioni sono idee, non eventi specifici
- a astratto qualcosa è quello di allontanarsi dalla sua attuazione e pensare a grandi idee
- astrazioni possono essere utilizzati per organizzare il codice (e molti altre cose) efficace
- programmazione orientata agli oggetti dipende interamente dalle astrazioni. vedere il punto elenco sopra.
Immagina che ci vuole un sacco di lavoro per completare un compito. Ora immagina che la loro fosse una semplice funzione per farlo. Voila, un'astrazione. – chris
B.Stroustrup (http://www.stroustrup.com/glossary.html) - * astrazione - l'atto di specificare un'interfaccia generale che nasconde i dettagli di implementazione. Classi, classi astratte e modelli sono i principali meccanismi di astrazione in C++. Vedi anche: incapsulamento. * – SChepurin
riaprire questa domanda, [c'è una risposta adeguata] (http://www.boost.org/community/generic_programming.html#concept) – TemplateRex