Vous êtes sur la page 1sur 6

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.

Concepto de Clase
Una clase es una agrupación de datos (variables o campos) y de funciones (métodos) que operan
sobre esos datos.
public class Classname
{ ... // definición de variables y
métodos
}
Un objeto (instance) es un ejemplar concreto de una clase.
Las características de una clase son las siguientes:
1) Todas las variables y funciones de Java deben pertenecer a una clase.
2) Si una clase deriva de otra (extends), hereda todas sus variables y métodos.

3) Java tiene una jerarquía de clases estándar de la que pueden derivar las clases que
crean los usuarios.

4) En Java no hay herencia múltiple.

5) En un fichero se pueden definir varias clases, pero en un fichero no puede haber más
que una clase public.

6) Si una clase contenida en un fichero no es public, no es necesario que el fichero se


llame como la clase.

7) Los métodos de una clase pueden referirse de modo global al objeto de esa clase al
que se aplican por medio de la referencia this.
8) Las clases se pueden agrupar en packages, introduciendo una línea al comienzo del
fichero (package packageName;).

Variables miembro
Variables miembro de objeto
Variables miembro de clase (static). Son aquellas variables propias de la clase. Se crean
anteponiendo la palabra static a su declaración, y se suelen utilizar para definir constantes comunes
para todos los objetos de la clase.
Las variables de clase son lo más parecido que Java tiene a las variables globales de C/C++.

Variables finales
Variables que no pueden cambiar su valor a lo largo de la ejecución del programa. Puede ser
considerada como una constante, y equivale a la palabra const de C/C++.
Java permite separar la definición de la inicialización de una variable final; es decir, la inicialización
puede hacerse más tarde, en tiempo de ejecución, llamando a métodos o en función de otros datos.

Métodos (funciones miembro)


Los métodos son funciones definidas dentro de una clase.
La primera línea de la definición de un método se llama declaración o header; el código comprendido
entre las llaves { ... } es el cuerpo o body del método.
public returnValue functionName(arg1,arg2,...)
{ // comienzo del método
... // cuerpo de la función
} // final del método
El header consta del cualificador de acceso (public, en este caso), del tipo del valor de retorno, del
nombre de la función y de una lista de argumentos explícitos entre paréntesis, separados por
comas.

Métodos de objeto

Se aplican siempre a un objeto de la clase por medio del operador punto (.). Dicho objeto es su
argumento implícito.
Métodos de clase (static).
Métodos que no actúan sobre objetos concretos a través del operador punto. Los métodos de clase
pueden recibir objetos de su clase como argumentos explícitos, pero no tienen argumento implícito
ni pueden utilizar la referencia this.
Métodos sobrecargados (overloaded).
Métodos que tienen el mismo nombre, pero que se diferencian por el número y/o tipo de los
argumentos.

Constr uctores
Un constructor es un método que se llama automáticamente cada vez que se crea un objeto de una
clase. La principal misión del constructor es reservar memoria e inicializar las variables miembro de
la clase.
Los constructores no tienen valor de retorno (ni siquiera void) y su nombre es el mismo que el de la
clase. Su argumento implícito es el objeto que se está creando.
Una clase tiene varios constructores, que se diferencian por el tipo y número de sus argumentos
(métodos sobrecargados). Se llama constructor por defecto al constructor que no tiene argumentos.

Inicializadores
Línea de actuación para evitar que haya variables sin inicializar correctamente, y estos pueden ser
static (para la clase) o de objeto.
Inicializadores de clase (static).
Es un algo parecido a un método que se llama automáticamente al crear la clase. Se diferencia del
constructor en que no es llamado para cada objeto, sino una sola vez para toda la clase.
Los tipos primitivos pueden inicializarse directamente con asignaciones en la clase o en el
constructor, pero para inicializar objetos o elementos más complicados es bueno utilizar un
inicializador, ya que permite gestionar excepciones (situaciones de error) con try... catch.
Los inicializadores static se crean dentro de la clase, como métodos sin nombre, sin argumentos y
sin valor de retorno; tan solo es la palabra static y el código entre llaves { ... }.
Inicializadores de objeto.
No llevan la palabra static y se utilizan para las clases anónimas, que por no tener nombre no
pueden tener constructor. En este caso, los inicializadores de objeto se llaman cada vez que se crea
un objeto de la clase anónima.

Destr ucción de objetos (liberación de memoria)


En Java no hay destructores como en C++. El sistema se ocupa automáticamente de liberar
memoria de los objetos que ya han perdido la referencia, esto es, objetos que ya no tienen ningún
nombre que permita acceder a ellos, por ejemplo por haber llegado al final del bloque en el que
habían sido definidos, porque a la referencia se le ha asignado el valor null o porque a la referencia
se le ha asignado la dirección de otro objeto. A esta característica se le llama recogida de basura
(garbage collection).

Finalizadores
Son métodos que vienen a complementar la labor del garbage collector. Un finalizador es un método
de objeto (no static), sin valor de retorno (void), sin argumentos, con nombre de función finalize(), y
que se llama automáticamente cuando se va a destruir un objeto (antes de que la memoria sea
liberada de modo automático por el sistema). Se utilizan para ciertas operaciones de terminación
distintas de liberar memoria (por ejemplo: cerrar ficheros, cerrar conexiones de red, etc.)

Packa ges
Un package es una agrupación de clases.
Para que una clase pase a formar parte de un package llamado pkgName, hay que introducir en ella
la sentencia: package pkgName; que debe ser la primera sentencia del fichero sin contar
comentarios y líneas en blanco.
Los nombres de los packages se suelen escribir con minúsculas para distinguirlos de las clases.
Todas las clases que forman parte de un package deben estar en el mismo directorio. Los nombres
compuestos de los packages están relacionados con la jerarquía de directorios en que se guardan
las clases. Package permite que los nombres de las clases de Java sean únicos en Internet y así
evitar conflictos.
Las clases de un package se almacenan en un directorio con el mismo nombre largo (path) que el
package. Por ejemplo, la clase es.ceir.jgjalon.infor2.ordenar.QuickSort.class debería estar en el
directorio CLASSPATH\es\ceir\jgjalon\infor2\ordenar\QuickSort.class, donde CLASSPATH es una
variable de entorno del PC que establece la posición absoluta de los directorios en los que hay
clases de Java (clases del sistema o de usuario), en este caso la posición del directorio es en los
discos locales del ordenador.
Los packages se utilizan con las finalidades siguientes:
1) Para agrupar clases relacionadas.

2) Para evitar conflictos de nombres ya que el dominio de nombres de Java es la


Internet.

3) Para ayudar en el control de la accesibilidad de clases y miembros.

Concepto de Herencia
Construir una clase a partir de otra. Para indicar que una clase deriva de otra se utiliza la palabra
extends, como por ejemplo: class CirculoGrafico extends Circulo { ... }
Cuando una clase deriva de otra, hereda todas sus variables y métodos. Estas funciones y variables
miembro pueden ser redefinidas(overridden) en la clase derivada, que puede también definir o añadir
nuevas variables y métodos.
La clase Object
Es la raíz de toda la jerarquía de clases de Java. Como consecuencia, todas las clases tienen
algunos métodos que han heredado de Object.

Clases y métodos abstractos


Una clase abstracta (abstract) es una clase de la que no se pueden crear objetos. Su utilidad es
permitir que otras clases deriven de ella, proporcionándoles un marco o modelo que deben seguir y
algunos métodos de utilidad general. Las clases abstractas se declaran anteponiéndoles la palabra
abstract, como por ejemplo public abstract class Geometria { ... }
Una clase abstract puede tener métodos que no son abstract, pero si una clase tiene algún método
abstract es obligatorio que la clase sea abstract.

Clases y métodos finales


Una clase declarada final no puede tener clases derivadas. Esto se puede hacer por motivos de
seguridad y también por motivos de eficiencia, porque cuando el compilador sabe que los métodos
no van a ser redefinidos puede hacer optimizaciones adicionales.
Análogamente, un método declarado como final no puede ser redefinido por una clase que derive de
su propia clase.

Interfaces
Una interface es un conjunto de declaraciones de métodos (sin definición).

Vous aimerez peut-être aussi