# Ocultació d'informació

En programació orientada a objectes el principi d'ocultació fa referència al fet que els atributs privats d'un objecte no poden ser modificats ni obtinguts tret que es faci a través del pas d'un missatge (invocació a mètodes, ja siguin aquests funcions o procediments) a l'objecte.
En informàtica, es coneix com a principi d'ocultació d'informació a l'ocultació de decisions de disseny en un programa susceptible de canvis amb la idea de protegir a altres parts del codi si es produeixen aquests canvis. Protegir una decisió de disseny suposa proporcionar una interfície estable que protegeixi la resta del programa de la implementació (susceptible de canvis). En els llenguatges de programació moderns el principi d'ocultació d'informació es manifesta de diferents formes, com per exemple l'encapsulació.

## Usos

El terme encapsulació sovint s'utilitza com a sinònim de l'ocultació d'informació, si bé existeixen certes diferències entre tots dos conceptes [1]. Tot i així sembla que no existeix un acord sobre aquestes diferències, sent comuna la idea que l'ocultació d'informació és el principi mentre que l'encapsulació és la tècnica. Un mòdul de programari oculta informació encapsulant-la en un altre mòdul o una altra construcció amb la qual es comunica mitjançant una interfície.
L'ús més comú de l'ocultació d'informació és ocultar el disseny de l'emmagatzematge físic de les dades, de forma que si aquest disseny és modificat només afecti a un petit subconjunt del programa total. Per exemple, si un punt tridimensional de coordenades (x,i,z) és representat en un programa amb tres variables escalars de coma flotant i posteriorment aquesta representació és modificada a una variable array de grandària 3, un mòdul dissenyat mitjançant l'ocultació d'informació en principi protegiria a la resta del programa d'aquest canvi.
En la programació orientada a objectes, l'ocultació d'informació redueix els riscos en el desenvolupament de programari en superar la dependència del codi d'una implementació encara incerta (és una decisió de disseny) gràcies a una interfície ben construïda. Els clients de la interfície realitzen les seves operacions a través d'ella de forma que si la implementació canvia, els clients no tenen coneixement d'això. Els autors dels patrons de disseny comenten les tensions entre l'herència i l'encapsulació en quant a que els dissenyadors abusen d'aquesta última (Gang of Four 1995:20). El perill és expressat de la següent forma:
    "Ja que l'herència exposa a una subclasse els detalls de la implementació de la seva classe pare, sovint es diu que 'l'herència trenca l'encapsulació'". (Gang of Four 1995:19)

## Exemple

Per exemple, una marca de cotxes pot oferir una versió de luxe d'un cert model del que també n'ofereix una versió bàsica. La versió de luxe incorpora un motor més potent que la bàsica. Tot i així, els enginyers han realitzat el disseny de tots dos motors de forma que la "interfície" sigui la mateixa: tots dos motors encaixen en la carrosseria compartida pels dos models, estan acoblats a la mateixa transmissió i tenen els mateixos controls. La diferència entre ells resideix que la versió de luxe, més potent, és de major cilindrada i va alimentat mitjançant injecció.
A més d'un motor més potent, la versió de luxe oferiria altres opcions com un millor sistema de so, seients més còmodes, una millor suspensió amb pneumàtics més amples i diferents colors per a la carrosseria. Malgrat tots aquests canvis, el cotxe en si és el mateix. El sistema de so reemplaça a la ràdio bàsica, que és per si mateixa un mòdul; els seients van muntats sobre la mateixa base que els bàsics, etc.
Els enginyers han dissenyat el cotxe dividint el treball en diferents tasques assignades als seus respectius equips. Cada equip dissenya llavors els seus components amb l'única restricció d'adaptar-se a un determinat estàndard o interfície que asseguri la cohesió del resultat final.
Com es veu en l'exemple, l'ocultació d'informació suposa major flexibilitat. Aquesta flexibilitat permet al programador modificar diferents funcions del programa per adaptar-lo a les necessitats dels usuaris. Si durant el disseny s'han seguit aquestes pautes, els canvis evolutius són molt més fàcils de realitzar, ja que solen tenir un abast local i no global.
Tornant als cotxes, un altre exemple és la interfície del conductor amb la màquina, formada per pedals, volant, testimonis, palanques... Malgrat algunes diferències, és comuna entre tots els cotxes, de forma que quan una persona aprèn a conduir i rep el seu permís de conducció no ha de tornar a obtenir-lo si canvia de cotxe.

## Història

El concepte d'ocultació d'informació va aparèixer documentat per primera vegada a un article de David Parnas, "On the Criteria to Be Used in Decomposing Systems Into Modulis", publicat a "Communications of the ACM" al desembre de 1972.