Introducimos para los más profanos las bases sobre las que se
asienta la Programación Orientada a Objetos.
La programación Orientada a objetos (POO) es una forma especial de programar,
más cercana a como expresaríamos las cosas en la vida real que otros tipos de
programación.
Con la POO
tenemos que aprender a pensar las cosas de una manera distinta, para escribir
nuestros programas en términos de objetos, propiedades, métodos y otras cosas
que veremos rápidamente para aclarar conceptos y dar una pequeña base que
permita soltarnos un poco con este tipo de programación.
Motivación
Durante años,
los programadores se han dedicado a construir aplicaciones muy parecidas que
resolvían una y otra vez los mismos problemas. Para conseguir que los esfuerzos
de los programadores puedan ser utilizados por otras personas se creó la POO.
Que es una serie de normas de realizar las cosas de manera que otras personas
puedan utilizarlas y adelantar su trabajo, de manera que consigamos que el
código se pueda reutilizar.
La POO no es
difícil, pero es una manera especial de pensar, a veces subjetiva de quien la
programa, de manera que la forma de hacer las cosas puede ser diferente según
el programador. Aunque podamos hacer los programas de formas distintas, no
todas ellas son correctas, lo difícil no es programar orientado a objetos sino
programar bien. Programar bien es importante porque así nos podemos aprovechar de
todas las ventajas de la POO.
Cómo se
piensa en objetos
Pensar en
términos de objetos es muy parecido a cómo lo haríamos en la vida real. Por
ejemplo vamos a pensar en un coche para tratar de modelizarlo
en un esquema de POO. Diríamos que el coche es el elemento principal que tiene
una serie de características, como podrían ser el color, el modelo o la marca.
Además tiene una serie de funcionalidades asociadas, como pueden ser ponerse en
marcha, parar o aparcar.
Pues en un
esquema POO el coche sería el objeto, las propiedades serían las
características como el color o el modelo y los métodos serían las
funcionalidades asociadas como ponerse en marcha o parar.
Por poner
otro ejemplo vamos a ver cómo modelizaríamos en un
esquema POO una fracción, es decir, esa estructura matemática que tiene un
numerador y un denominador que divide al numerador, por ejemplo 3/2.
La fracción
será el objeto y tendrá dos propiedades, el numerador y el denominador. Luego
podría tener varios métodos como simplificarse, sumarse con otra fracción o
número, restarse con otra fracción, etc.
Estos objetos
se podrán utilizar en los programas, por ejemplo en un programa de matemáticas
harás uso de objetos fracción y en un programa que gestione un taller de coches
utilizarás objetos coche. Los programas Orientados a objetos utilizan muchos
objetos para realizar las acciones que se desean realizar y ellos mismos
también son objetos. Es decir, el taller de coches será un objeto que utilizará
objetos coche, herramienta, mecánico, recambios, etc.
Clases en
POO
Las clases
son declaraciones de objetos, también se podrían definir como abstracciones de
objetos. Esto quiere decir que la definición de un objeto es la clase. Cuando
programamos un objeto y definimos sus características y funcionalidades en
realidad lo que estamos haciendo es programar una clase. En los ejemplos
anteriores en realidad hablábamos de las clases coche o fracción porque sólo
estuvimos definiendo, aunque por encima, sus formas.
Propiedades
en clases
Las
propiedades o atributos son las características de los objetos. Cuando
definimos una propiedad normalmente especificamos su nombre y su tipo. Nos
podemos hacer a la idea de que las propiedades son algo así como variables
donde almacenamos datos relacionados con los objetos.
Métodos en
las clases
Son las
funcionalidades asociadas a los objetos. Cuando estamos programando las clases
las llamamos métodos. Los métodos son como funciones que están asociadas a un
objeto.
Objetos en
POO
Los objetos
son ejemplares de una clase cualquiera. Cuando creamos un ejemplar tenemos que
especificar la clase a partir de la cual se creará. Esta acción de crear un
objeto a partir de una clase se llama instanciar (que
viene de una mala traducción de la palabra instace
que en inglés significa ejemplar). Por ejemplo, un objeto de la clase fracción
es por ejemplo 3/5. El concepto o definición de fracción sería la clase, pero
cuando ya estamos hablando de una fracción en concreto 4/7, 8/1000 o cualquier
otra, la llamamos objeto.
Para crear un
objeto se tiene que escribir una instrucción especial que puede ser distinta
dependiendo el lenguaje de programación que se emplee, pero será algo parecido
a esto.
miCoche = new
Coche()
Con la
palabra new especificamos que se tiene que crear una
instancia de la clase que sigue a continuación. Dentro de los paréntesis
podríamos colocar parámetros con los que inicializar el objeto de la clase
coche.
Estados en
objetos
Cuando
tenemos un objeto sus propiedades toman valores. Por ejemplo, cuando tenemos un
coche la propiedad color tomará un valor en concreto, como por ejemplo rojo o
gris metalizado. El valor concreto de una propiedad de un objeto se llama
estado.
Para acceder
a un estado de un objeto para ver su valor o cambiarlo se utiliza el operador
punto.
miCoche.color = rojo
El objeto es miCoche, luego colocamos el operador punto y por último el
nombre e la propiedad a la que deseamos acceder. En este ejemplo estamos
cambiando el valor del estado de la propiedad del objeto a rojo con una simple
asignación.
Mensajes
en objetos
Un mensaje en
un objeto es la acción de efectuar una llamada a un método. Por ejemplo, cuando
le decimos a un objeto coche que se ponga en marcha estamos pasándole el
mensaje “ponte en marcha”.
Para mandar
mensajes a los objetos utilizamos el operador punto, seguido del método que
deseamos invocar.
miCoche.ponerseEnMarcha()
En este
ejemplo pasamos el mensaje ponerseEnMarcha(). Hay que colocar paréntesis igual que cualquier llamada a
una función, dentro irían los parámetros.
Otras
cosas
Hay mucho
todavía que conocer de la POO ya que sólo hemos hecho referencia a las cosas
más básicas. También existen mecanismos como la herencia y el polimorfismo que
son unas de las posibilidades más potentes de la POO.
La herencia
sirve para crear objetos que incorporen propiedades y métodos de otros objetos.
Así podremos construir unos objetos a partir de otros sin tener que
reescribirlo todo.
El
polimorfismo sirve para que no tengamos que preocuparnos sobre lo que estamos
trabajando, y abstraernos para definir un código que sea compatible con objetos
de varios tipos.
Son conceptos
avanzados que cuesta explicar en las líneas de ese informe. No hay que olvidar
que existen libros enteros dedicados a la POO y aquí solo pretendemos dar un
repaso a algunas cosas para que os suenen cuando tengáis que poneros delante de
ellas en los lenguajes de programación que debe conocer un desarrollador del web.
Ejemplo
concreto de programación orientada a objetos
Para
conseguir un ejemplo concreto de lo que es la programación orientada a objetos,
podemos entrar en el Manual
de PHP 5. Realmente este manual explica las características de orientación
a objetos de PHP 5 y ofrece ejemplos concretos de creación de clases con
características como herencia, polimorfismo, etc.