Abstracció (informàtica)

De Viquipèdia
Dreceres ràpides: navegació, cerca
caixa negra
Esquema d'una caixa negra.

En l'informàtica, l'abstracció és un procés que consisteix a aïllar un concepte d’un context específic o dels altres conceptes que l'acompanyen. En Programació, el terme dona sentit a "què fa?" i no a "com ho fa?" (Característica de caixa negra). Des dels llenguatges clàssics o imperatius fins als orientats a objectes, el comú denominador en l'evolució dels llenguatges de programació, ha estat el nivell d'abstracció del qual cada un d'ells fa ús.

Els llenguatges de programació són les eines que els dissenyadors de llenguatges usen per poder implementar els models abstractes. L'abstracció que ofereix els llenguatges de programació es pot dividir en dues categories:

  • Abstracció de dades (pertanyents a les dades).

Els diferents paradigmes de programació han augmentat el seu nivell d'abstracció, començant des dels llenguatges de màquina, el més pròxim a l'ordinador i més llunyà a la comprensió humana, passant pels llenguatges de comandaments, els imperatius, l'orientació a objectes (POO), la programació orientada a aspectes (POA); o altres paradigmes com la programació declarativa, etc.

L'abstracció encarada des del punt de vista de la programació orientada a objectes expressa les característiques essencials d'un objecte, les quals distingeixen al propi objecte dels altres. A més de distingir entre els objectes proveeix límits conceptuals. Llavors es pot dir que l'encapsulació separa les característiques essencials de les no essencials dins d'un objecte. Si un objecte té més característiques de les necessàries, resultarà més difícil d'usar, modificar, construir i comprendre.

La mateixa genera una il·lusió de simplicitat donat al fet que minimitza la quantitat de característiques que defineixen un objecte.

Durant anys, els programadors s'han dedicat a construir aplicacions molt semblants que resolien una vegada i una altra els mateixos problemes. Per aconseguir que els seus esforços poguessin ser utilitzats per altres persones es va crear la POO que consisteix en una sèrie de normes per garantir la interoperabilitat entre usuaris de manera que el codi es pugui reutilitzar.

Raó Fonamental[modifica | modifica el codi]

El hardware implementa un model de computació que pot ser intercanviable amb altres models. El programari està estructurat en arquitectures per a permetre als humans la creació de grans sistemes de concentració en petites idees al mateix temps. Aquestes arquitectures estan fetes d'eleccions específiques d'abstracció. La desena Norma de Greenspun és un aforisme de com una arquitectura d'aquest tipus és inevitable i complexa.

Una forma d'abstracció en la computació, és l'abstracció d'idioma: nous llenguatges artificials són desenvolupats per expressar aspectes específics d'un sistema. Els llenguatges de modelatge ajuden en la planificació i els llenguatges de programació es poden processar amb un equip. Un exemple d'aquest procés d'abstracció és el desenvolupament generacional dels llenguatges de programació: tenint a baix nivell el llenguatge màquina, a sobre d'aquest l'assemblador i a dalt llenguatge a alt nivell. Cada etapa pot ser utilitzada com un trampolí per a la següent etapa.

Dins d'un llenguatge de programació, algunes característiques permeten al programador implementar noves abstraccions, com les subrutines. Altres abstraccions, com patrons de disseny del programari i estils arquitectonics, es mantenen invisibles al llenguatge de programació i operen només en el disseny d'un sistema.

Ús[modifica | modifica el codi]

A grans trets, l'abstracció, permet que disposem de les característiques d'un objecte que necessitem. Si necessitem l'objecte Persona , podríem posar nom, edat, adreça, estat civil, etc. Si ho necessitem en un sistema administratiu, però, si ho requerim per a l'àrea de biologia, dins dels seus atributs potser tenim, ADN, RND, Gen x1, Gen x2, etc. I els atributs abans esmentats no siguin requerits. En general, podem dir que Persona compta amb tots els atributs esmentats aquí, però, pel procés d'abstracció excloem tots aquells, que no té cabuda en el nostre sistema.

Característiques del llenguatge[modifica | modifica el codi]

Llenguatges de programació[modifica | modifica el codi]

Article Principal: Llenguatge de programació

Hi ha molts llenguatges de programació i cadascun té un tipus d'abstracció específic. Per exemple:

Mètodes d'especificació[modifica | modifica el codi]

Article Principal: especificació formal

Els analistes han desenvolupat diferents mètodes per especificar formalment els sistemes de programari. Alguns mètodes coneguts inclouen:

  • Mètode basat en el model abstracte(VDM,Z)
  • Tècniques algebraiques(Alerce,CLAR,OBJ,ACTE,CASL)
  • Tècniques basades en processos (LOTOS,SDL,Estelle)
  • Tècniques Trace-based (SPECIAL,TAM)
  • Tècniques basades en el coneixement (Refine,Gist)

Llenguatges d'especifiació[modifica | modifica el codi]

Article Principal: Llenguatge d'especificació

Els llenguatges d'especificació generalment es basen en abstraccions d'un tipus o un altre, ja que les especificacions es defineixen típicament més d'hora en un projecte(i en un nivell més abstracte) d'una aplicació.

El UML, per exemple, permet la definició de les clases abstractes, que segueixen sent abstractes durant l'arquitectura i l'especifiació del projecte.

Control d'abstracció[modifica | modifica el codi]

Un dels propòsits general dels llenguatges de programació és oferir  eines per controlar la abstracció als programas. Els ordinadors entenen les operacions a molt baix nivell com podria ser moure bits d'una posició de memòria a una altra i fent una suma entre dues seqüències de bits .Els llenguatges de programació deixen fer això a alt nivell .Per exemple mirem aquest tall de codi escrit en pascal:

a:(1+2)*5

Això per als humans és bastant senzill d'entendre i sembla un càlcul evident (un mes dos i tres, tes vegades 5 és quinze), però els passos a seguir a baix nivell per fer aquest càlcul i poder retornar 15 i assignar aquest 15 a una variable “a” són molt més complex que a alt nivell .Els valors necessiten ser convertits  a binari (una tasca molt més complexa del que un podria arribar a pensar) i les operacions han de ser descompostes (per alcompilador o l'intèrpret ) a instruccions assemblador (una altra vegada ésmolt menys intuïtiva per al programador: són operacions com shiftar els bits a l'esquerra o afegir el complement d'un registre  a un altre registre,no és tan senzill com els humans pensen en sumes i multiplicacions ). Per últim assignar el valor 15 a una variable etiquetada com a “a” per més tard poder utilitzar aquesta”a”, això també implica fer moviments ocults de buscar una posició de memòria, física o virtual etiquetada com a “a” per guardar la representació binaria del “15”.

Sense una abstracció del control un programador hauria d'especificar tots els moviments a nivell de registres i de bits per poder fer una operació. Això duplica l'esforç i comporta dos grans problemes:

-Obligaria al programador a repetir constantment tasques molt comunes per a fer operacions similars

-.Obligaria al programador a programar per un maquinari en particular i amb un conjunt d'instruccions

Programació estructurada[modifica | modifica el codi]

la programació estructurada implica separar tasques molt complexes en petites tasques més fàcils que són més fàcils per a controlar i programar.

Al final acabes creant diferents mòduls amb la capacitat de poder executar-se independentment i que units creen la gran tasca complexa que volies fer. Això porta uns avantatges:

-Cada mòdul ha de ser com una caixa que rep uns paràmetres i retorna un resultat. -Cada mòdul ha de ser fiable.

Abstracció de les dades[modifica | modifica el codi]

L'abstracció de les dades intenta separar entre prototips abstractes del tipus de dades i els detalls concrets de la seva implementació . Les propietats abstractes són visibles al codi client però la implementació éscompletament privada i de fet es pot arribar a fer canvies a la implementació, per exemple millorar l'eficiència. La idea és que aquests canvis no han de suposar cap impacte al codi del client perquè no han de comportar cap diferència en el comportament abstracte de les dades.

Per exemple un podria definir un tipus de dades abstractes anomenat taulaBusqued que és una associació de claus i valors, cada valor noméscorrespon a una clau. El nou tipus de dades podria ser implementat amb una taula hash o un arbre de cerca binaria o simplement amb una llista de parells (clau: valor). la manera de veure del client és la mateixa utilitzi una implementació o una altra .

Abstracció a la programació orientada a objectes[modifica | modifica el codi]

L'abstracció a la programació orientada a objectes implica la facilitat de definir objectes que representen actors que poden treballar, canviar el seu estat i interactuar amb altres objectes del sistema. El terme encapsulació fa referència a ocultar detalls de l'estat de l'objecte i ampliant o modificant perquè tingui un comportament per poder interactuar amb altres objectes, aquest és el principi de l'abstracció.

quan l'abstracció executa operacions definides, deixen a objectes de diferents tipus ser substituïts es diu polimorfisme. Si pasa al revés simplificant les relacions dels objectes es diu herència.

Disseny orientat a objectes[modifica | modifica el codi]

A l'hora de programar les decisions que hem de prendre per deixar una cosa abstracta o no depenen del programador, que consta de moltes petites decisions que es fan a l'hora de l'anàlisi, hem de saber també quins altres sistemes hem de treballar.

Aquestes anàlisis han de ser flexibles per a poder després modificar i millorar el codi.

Consideracions[modifica | modifica el codi]

L'abstracció és el fet de simplificar d’una manera segura el comportament del programa, és més important el resultat final, que els passos intermedis per arribar-hi.

L’abstracció pot ser exacta o creïble depenent de quin model hagi de respondre.

Encara que l’abstracció no sigui del tot exacta ha de poder respondre d’una forma adequada a les possibles preguntes que puguin fer.

Per exemple si agafem les edats dels estudiants màxima i mínima podem respondre si una edat pot correspondre a un estudiant.

El nivell d’abstracció inclòs en un llenguatge de programació influeix en la usabilitat d’aquest.

En el marc de treball de la dimensioó cognitiva hi ha inclòs un apartat per l’abstracció (quins nivells d’abstracció s’utilitzarà). Això permet ajudar als desenvolupadors de llenguatges, ja que pot veure amb quina usabilitat hauran de tractar els usuaris finals.

L’abstracció té una gran importància  a l'hora de treballar amb programes perquè els detalls de menys importància molt a vegada són ignorats per qui utilitza el software.

Nivells d'abstracció[modifica | modifica el codi]

La informàtica sovint presenta diferents nivells o capes d’abstracció, a on cada nivell representa diferents models de la mateixa informació, els models de nivells més alts estan construïts a partir d’un model de nivell més baix (no necessàriament del mateix).

Sistemes de bases de dades.

Molts usuaris desconeixen les estructures amb les quals estan construïdes. El desenvolupador sovint amaga la complexitat en diversos nivells

  • Nivell Físic: el nivell més baix, fa referència a com estan guardades les dades en la màquina.
  • Nivell Lògic: és el següent nivell, fa referència a com el SGBD tracta la informació com la guarda i la relaciona. Ja que el SGBD no necessita saber com es guardarà finalment la informació es crea un espai que si coneix per facilitar i agilitzar el funcionament de la base de dades, Però llavors caldrà una relació entre com guarda la informació el SGBD i com es guarda en el nivell Físic.
  • Nivell Usuari: és el nivell més alt, sovint l’usuari no necessita saber tota la informació guardada al sistema. Així els desenvolupadors implementen interfícies amb la informació que finalment podrà consultar l’usuari. Poden haver-hi diverses interfícies d’usuaris per la mateixa informació (per exemple depenent de quin tipus d’usuari està interactuant).

Arquitectura per Capes

La possibilitat d’oferir diversos nivells permet:

  • Simplificar el nivell considerablement
  • Permetre diversos tipus d’usuaris treballar en diversos nivells.
  • Dóna suport a la portabilitat del software “artefacts”

A l’hora de dissenyar sistemes o processos es pot utilitzar aquesta arquitectura.

En aquesta arquitectura, parteixen el sistema en diverses capes. És una tècnica utilitzada en la implementació de software, hardware  i de comunicació, ja que permet modificar una capa independentment de les altres.

Exemple[modifica | modifica el codi]

Pensar en termes d'objectes és molt semblant a com ho faríem en la vida real. Una analogia seria modelitzar un cotxe en un esquema de POO. Diríem que el cotxe és l'element principal que té una sèrie de característiques, com podrien ser el color, el model o la marca. A més té una sèrie de funcionalitats associades, com ara posar en marxa, parar o aparcar. En un esquema POO el cotxe seria l'objecte, les propietats serien les característiques com el color o el model i els mètodes serien les funcionalitats associades com posar-se en marxa o parar.

Per posar un altre exemple ara veurem com modelitzar en un esquema POO una fracció, és a dir, l'estructura matemàtica que té un numerador i un denominador que el divideix, com ara 3/2. La fracció serà l'objecte i tindrà dues propietats, el numerador i el denominador. Després podria tenir diversos mètodes com simplificar, sumar-se amb una altra fracció o nombre, restar amb una altra fracció, etc.

Aquests objectes són utilitzables en els programes, per exemple en un programa de matemàtiques es pot fer ús d'objectes fracció i en un programa que gestioni un taller de cotxes, objectes cotxe. Els programes orientats a objectes utilitzen molts objectes per realitzar les accions que es volen fer i ells mateixos també són objectes. És a dir, el taller de cotxes serà un objecte que utilitzarà objectes cotxe, eina, mecànic, recanvis, etc.