Diferència entre revisions de la pàgina «POO Introducció»
Línia 19: | Línia 19: | ||
== Un primer exemple: objectes del joc del mur == | == Un primer exemple: objectes del joc del mur == | ||
− | Tots conexiem el joc del mur, popularment conegut com a "Arkanoid" per una màquina recreativa arcade: | + | Tots conexiem el joc del mur, popularment conegut com a [http://en.wikipedia.org/wiki/Arkanoid "Arkanoid"] per una màquina recreativa arcade: |
http://en.wikipedia.org/wiki/File:Arkanoid.png | http://en.wikipedia.org/wiki/File:Arkanoid.png |
Revisió del 18:28, 26 ago 2012
Pots introduïr-te al tema amb la següent presentació:
- http://www.slideshare.net/jpadillaa/programacion-orientada-a-objetos-en-python
- http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos
Contingut
Introducció
La Programació Orientada a Objectes (a partir d'ara POO) és un paradigma de programació que utilitza objectes. Els objectes són estructures de dades que disposen de atributs (variables internes) i mètodes (funcions internes). Restula útil per modelar el món real, però no sempre té perquè tenir una correspondència.
Algunes definicions importants:
- Classe: definició de les propietats (atributs i mètodes) d'un tipus d'objecte. Definint una classe definim un tipus, no un objecte real.
- Objecte/Instància: objecte real creat en temps d'execució i que ocupa un espai en memòria.
Els objectes, doncs, tenen aquestes propietats:
- Estat: el valor dels atributs.
- Comportament: definit pels mètodes.
- Identitat: distingeix un objecte real dels altres objectes (instàncies). Podria ser un identificador intern però també l'adreça de memòria on està ubicat.
Un primer exemple: objectes del joc del mur
Tots conexiem el joc del mur, popularment conegut com a "Arkanoid" per una màquina recreativa arcade:
http://en.wikipedia.org/wiki/File:Arkanoid.png
Anem a veure un exemple dels objectes fonamentals que poden aparèixer en el programa. Els podem veure en el següent diagrama UML:
Característiques de la POO
Llegiu aquí: http://es.wikipedia.org/wiki/Programaci%C3%B3n_orientada_a_objetos#Caracter.C3.ADsticas_de_la_POO
- Abstracció: correspondència entre les propietats (atributs i mètodes) amb el objectes reals.
- Encapsulament: agrupament de les propietats (atributs i mètodes) en un mateix nivell d'abstracció (classe).
- Modularitat: capacitat de treballar amb subunitats funcionals independents (classes).
- Principi d'ocultació: implementació oculta al qui utilitza l'objecte.
- Herència: poden definir-se subclasses que hereden les propietats del pare, afegeixen de noves i poden reescriure les heredades.
- Polimorfisme: les crides a objectes amb el mateix ancestre (pare) poden ser uniformes (mateix nom de mètode) però amb comportament diferent si els 2 objectes són de diferents subtipus (mètode sobreescrit).
- Sobrecàrrega: podem utilitzar el mateix nom de mètode amb paràmetres diferents que resultaran en comportaments diferents. Python no ho té per la seves variables dinàmiques.
- Agregació: objectes dins d'objectes (atributs). No confondre amb l'herència.
- Recol·lecció de basura: destrucció automàtica d'objectes quan cap altre li fa referència. Solen implementar-ho els llenguatges de més alt nivell (Java, Python, etc.) però no els de més baix nivell (C++) ja que impacta sobre la eficiència.
Visibilitat
Sí en Java i C++. Per atributs, mètodes i classes heredades.
No s'utilitza en Python. Es pot utilitzar el name mangling per simular-ho amb els "__" i super().
Disseny bottom-up vs top-down
Al treballar amb objectes sol ser més fàcil la modelització de processos, i facilita l'aproximació bottom-up, és a dir, el disposar d'un codi reutilitzable basat en una llibreria d'objectes estàndard que el programador pot fer servir pel seu cas concret.
La programació estructurada procedimental, en canvi, fa més ús del disseny top-down, és a dir, estableix els requeriments finals de l'aplicació i arma tota una sèrie de funcions que resolen el problema de forma eficient. En aquesta aproximació, la reutilització de codi és menys efectiva.