Què és la POO?

La programació orientada a objectes (POO) és un estil de programació que es basa en dividir el programa en petites unitats lògiques de codi (objectes). Aquests, intenten acostar al màxim la programació amb la realitat.

En la realitat, un objecte és qualsevol cosa que podem veure en el nostre entorn. Per exemple el PC, dispositiu o foli amb el que estem llegint aquestes línies. També serien bons exemples un cotxe, un arbre, una persona…

Si analitzem una mica més, en la realitat, un objecte com el PC  veurem que esta compost internament per varis components (CPU, HDD, placa mare, memòria RAM, monitor, teclat…). La unió d’aquests components permet l’existència i funcionament d’un PC.  Internament, cada un d’aquests components que formen el PC pot ser molt complicat o fabricat per moltes companyies amb diferents dissenys. Tot i això, nosaltres no necessitem saber com funciona cada un dels chips de la placa mare, ni com funciona la CPU internament per utilitzar el PC. Cada component és una unitat autònoma i tot el que necessitem saber és com interactuen entre si aquests components. Per exemple, necessitem saber si el processador és o no compatible amb la placa mare o en quin connector podrem introduir una nova targeta gràfica. Quant coneixem com es relacionen els components que formen el PC entre si, ja podrem utilitzar i muntar sense problemes un PC.

 I tot això com es relaciona amb la programació? La POO treballa d’aquesta forma. Tot el programa està construït en base a diferents components (objectes), cada un amb un rol específic en el programa i tots els components poden comunicar-se entre ells d’una forma definida.

Els objectes en la programació, igualment que els objectes del món real, també tenen característiques i comportaments. Un objecte en la POO guarda les seves característiques en una o més variables (atributs) i implementa el seu comportament utilitzant mètodes. Els mètodes són funcions associades a un objecte.

 

Objectes: atributs i mètodes

Un objecte està format principalment per atributs i mètodes. Els atributs representen les característiques d’un objecte mentre que els mètodes representen el seu comportament.  En un objecte cotxe, per exemple, la velocitat seria un atribut mentre que accelerar i frenar serien mètodes que modificarien l’atribut velocitat.

Classes: Instàncies d’un objecte

Podríem definir característiques (atributs una classe com una plantilla de la qual s’instancien un o més objectes. És a dir, la classe representa les) i comportaments (mètodes) d’un objecte. La classe és la definició d’un objecte i l’origen des del qual aquest es crea.

Mètodes geters and seters i constructors

Una classe (i de retruc els seus objectes) conte atributs i mètodes. El valor dels atributs però és inexistent. Per exemple, si creem una classe cotxe amb l’atribut velocitat i creem un objecte d’aquesta classe. Quin serà el valor de velocitat just després de crear l’objecte? La resposta pot tenir dos orígens:

  • Constructors  El constructor és el mètode cridat per tal de crear un objecte d’una classe. Aquest s’utilitza per tal d’inicialitzar els atributs de l’objecte amb un valor per defecte o passat per paràmetre.
  • Getters and setters:  Els anomenats getters and setters no són més que mètodes d’una classe que ens permetran assignar o recuperar el valor d’un dels atributs de l’objecte instanciat. Per conveni, els noms d’aquests mètodes seran set + NomDeLaVariableAtribut()  i  get + NomDeLaVariableAtribut()

 

Característiques de la POO: abstracció, encapsulament i ocultació

L’abstracció consisteix en captar les característiques essencials d’un objecte, així com el seu comportament. Per exemple, tornant a l’exemple del cotxe i la velocitat, quines característiques més podríem extreure de l’objecte cotxe? És a dir, quines característiques similars tenen tots els cotxes? En principi, tots tindran una marca, un model, un número de xassís, el seu pes, llantes, portes, finestres, potència… I pel que fa al seu comportament, tots els cotxes poden accelerar, frenar, retrocedir, aparcar… Així doncs, l’abstracció és l’extracció de característiques i comportaments d’un objecte.

Quant parlem d’encapsulament ens referim a la unió de les característiques (atributs) i comportaments (mètodes) en una classe. Es tracta de tenir-ho tot en una sola entitat. Quant ens proposem fer això en la programació estructurada ens adonem de que és impossible. L’encapsulament, per tant, es forma gràcies a l’abstracció i la ocultació (que veurem a continuació). La gran utilitat de l’encapsulament és la facilitat amb la que podrem controlar la complexitat, ja que podem crear classes com a caixes negres on només es coneix i utilitza el comportament però no com funciona aquest internament. És a dir, coneixerem que fa la classe però no com ho fa.

Finalment, la ocultació vindria a ser la capacitat d’amagar els detalls interns del comportament d’una classe i mostrar únicament els detalls necessaris per la resta del sistema. Amb Java, l’ocultament s’aconsegueix utilitzant les paraules reservades públic, private i protected davant del noms de les variables (atributs) i mètodes.

Herència

L’herència és un dels conceptes claus en la POO. L’herència bàsicament consisteix en que una classe pot heretar les seves variables i mètodes a varies subclasses. La classe que hereta s’anomena superclasse o classe pare. Això significa que una subclasse, apart dels seus atributs i mètodes propis, te incorporats els atributs i mètodes heretats de la classe pare o superclasse. D’aquesta forma, es crea una jerarquia d’herència.

Per exemple, imaginem que estem fent una anàlisi d’un sistema d’un banc que ofereix comptes corrent als seus clients:

Esquema_compte_corrent

A grans trets i sense fer molta feina amb l’abstracció, veiem que tenim una superclasse anomenada Compte amb els atributs i mètodes comuns en totes les subclasses CompteEstalvis i CompteCorrent.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *