Programación orientada a objetos
La programación orientada a objetos (POO) es un modelo de
programación que utiliza objetos, ligados mediante mensajes, para la solución
de problemas. Puede considerarse como una extensión natural de la programación
estructurada en un intento de potenciar los conceptos de modularidad y
reutilización del código.
Si nos pararnos a pensar en un determinado problema que
intentamos resolver podremos identificar entidades de interés, las cuales pueden
ser objetos potenciales que poseen un conjunto de propiedades o atributos, y un
conjunto de métodos mediante los cuales muestran su comportamiento. Y no sólo
eso, también podremos ver, a poco que nos fijemos, un conjunto de
interrelaciones entre ellos conducidas por mensajes a los que responden mediante
métodos.
MECANISMOS BÁSICOS DE LA POO
Los mecanismos básicos de la programación orientada a objetos son: objetos, mensajes, métodos y clases.
Objetos
Un programa orientado a objetos se compone solamente de objetos, entendiendo por objeto una encapsulación genérica de datos y de los métodos para manipularlos. Dicho de otra forma. un objeto es una entidad que tiene unos atributos particulares, las propiedades, y unas formas de operar sobre ellos, los métodos.
Por ejemplo, una ventana de una aplicación Windows es un
objeto. El color de fondo, la anchura, la altura, etc. son propiedades. Las
rutinas, lógicamente transparentes al usuario, que permiten maximizar la
ventana, minimizarla, etc. Son métodos.
Mensajes
Cuando se ejecuta un programa orientado a objetos, los objetos están recibiendo. interpretando y respondiendo a mensajes de otros objetos. Esto marca una clara diferencia con respecto a los elementos de datos pasivos de los sistemas tradicionales. En la POO un mensaje está asociado con un método, de tal forma que cuando un objeto recibe un mensaje la respuesta a ese mensaje es ejecutar el método asociado.
Por ejemplo, cuando un usuario
quiere maximizar una ventana de una aplicación Windows, lo que hace simplemente
es pulsar el botón de la misma que realiza esa acción. Eso, provoca que Windows
envíe un mensaje a la ventana para indicar que tiene que maximizarse.
Métodos
Un método se implementa en una clase de objetos y determina cómo tiene que actuar el objeto cuando recibe el mensaje vinculado con ese método. A su vez, un método puede también enviar mensajes a otros objetos solicitando una acción o información.
En adición, las propiedades
(atributos) definidas en la clase permitirán almacenar información para dicho
objeto.
Cuando se diseña una clase de
objetos, la estructura más interna del objeto se oculta a los usuarios que lo
vayan a utilizar, manteniendo como única conexión con el exterior, los
mensajes. Esto es, los datos que están dentro de un objeto solamente podrán ser
manipulados por los métodos asociados al propio objeto.
Según lo expuesto, podemos decir
que la ejecución de un programa orientado a objetos realiza fundamentalmente
tres cosas:
Crea los objetos necesarios.Los mensajes enviados a unos y a otros objetos dan lugar a que se procese internamente la información.
Finalmente, cuando los objetos no son necesarios, son borrados, liberándose la memoria ocupada por los mismos.
Crea los objetos necesarios.Los mensajes enviados a unos y a otros objetos dan lugar a que se procese internamente la información.
Finalmente, cuando los objetos no son necesarios, son borrados, liberándose la memoria ocupada por los mismos.
Clases
Una clase es un tipo de objetos definido por el usuario. Una clase equivale a la generalización de un tipo específico de objetos. Por ejemplo, piense en un molde para hacer flanes; el molde es la clase y los flanes los objetos.
Un objeto de una determinada
clase se crea en el momento en que se define una variable de dicha clase.
Una instancia es la
representación concreta y específica de una clase; Desde este punto de vista,
los términos instancia y objeto son lo mismo.
Cuando escribe un programa
utilizando un lenguaje orientado a objetos, no se definen objetos verdaderos, se
definen clases de objetos. donde una clase se ve como una plantilla para
múltiples objetos con características similares.
Afortunadamente no tendrá que
escribir todas las clases que necesite en su programa, porque Java proporciona
una biblioteca de clases estándar para realizar las operaciones más habituales
que podamos requerir. Por ejemplo, en el capítulo anterior, vimos que la clase
System tenía un atributo out que era un objeto de la clase PrintStream que, de
forma predeterminada, está ligado al dispositivo de salida (a la pantalla). A
su vez, la clase PrintStream proporciona un método denominado println que
acepta como argumento una cadena de caracteres. De esta forma, cuando el objeto
out reciba el mensaje println, responderá ejecutando este método, que envía la
cadena pasada como argumento al dispositivo de salida.
CÓMO CREAR UNA CLASE DE OBJETOS
Según lo expuesto hasta ahora, un objeto contiene, por una parte, atributos que definen su estado, y por otra, operaciones que definen su comportamiento. También sabemos que un objeto es la representación concreta y específica de una clase.
Para declarar una clase hay que
utilizar la palabra reservada class seguida del nombre de la clase y del cuerpo
de la misma. El cuerpo de la clase incluirá entre { y } los atributos y los
métodos u operaciones que definen su comportamiento.
Los atributos son las
características individuales que diferencian un objeto de otro. El color de una
ventana Windows, la diferencia de otras; el D.N.A. de una persona la identifica
entre otras; el modelo de un ordenador le distingue entre otros.
Los atributos también pueden
incluir información sobre el estado del objeto; por ejemplo. en el caso de un
ordenador, si está encendido o apagado, si la presentación en pantalla está
activa o inactiva, etc.
Todos los atributos son definidos
en la clase por variables:
class COrdenador
{
String
Marca ;
String
Procesador ;
String
Pantalla ;
boolean
OrdenadorEncendido:
boolean
Presentación :
}
Observe que se han definido cinco
atributos: tres de ellos, Marca, Procesador y Pantalla, pueden contener una
cadena de caracteres (una cadena de caracteres es un objeto de la clase String
perteneciente a la biblioteca estándar). Los otros dos atributos, Ordenador Etc.
encendido y Presentación, son de tipo boolean (un atributo de tipo boolean
puede contener un valor true o false; verdadero o falso).
Debe respetar las mayúsculas y
las minúsculas. No vamos a profundizar en los detalles de la sintaxis de este
ejemplo ya que el único objetivo ahora es entender la definición de una clase
con sus partes básicas.
El comportamiento define las
acciones que el objeto puede emprender. Por ejemplo, pensando acerca de un
objeto de la clase COrdenador, esto es, de un ordenador, algunas acciones que
éste puede hacer son:
·
Ponerse en marcha
·
Apagarse
·
Desactivar la presentación en la pantalla
·
Activar la presentación en la pantalla
·
Cargar una aplicación
Para definir este comportamiento
hay que crear métodos. Los métodos son rutinas de código definidas dentro de la
clase, que se ejecutan en respuesta a alguna acción tomada desde dentro de un
objeto de esa clase o desde otro objeto de la misma o de otra clase. Recuerde
que los objetos se comunican mediante mensajes.
Un método consta de su nombre
precedido por el tipo del valor que devuelve cuando finalice su ejecución (la
palabra reservada void indica que el método no devuelve ningún valor) y seguido
por una lista de parámetros separados por comas y encerrados entre paréntesis.
Los paréntesis indican a Java que el identificador (EncenderOrdenador) se refiere
a un método y no a un atributo.
A continuación se escribe el
cuerpo del método encerrado entre { y }.
Siempre que se trate de una
aplicación (no de un applet) es obligatorio que la clase que define el comienzo
de la misma incluya un método main. Cuando se ejecuta una clase Java compilada
que incluye un método main, éste es lo primero que se ejecuta.
El método main siempre se declara
público y estático, no devuelve un resultado.
CARACTERÍSTICAS DE LA POO
Las características fundamentales de la POO son: abstracción, encapsulamiento, herencia y polimorfismo.
Abstracción
Por medio de la abstracción conseguimos no detenernos en los detalles concretos de las cosas que no interesen en cada momento, sino gcneraHzar y centrarse en los aspectos que permitan tener una visión global del problema. Por ejemplo, el estudio de un ordenador podemos realizarlo a nivel de funcionamiento de sus circuitos electrónicos, en términos de corriente, tensión, etc., o a nivel de transferencia entre registros. centrándose así el estudio en el flujo de información entre las unidades que lo componen (memoria, unidad aritmética, unidad de control, registros, etc.), sin importamos el comportamiento de Jo¡ circuitos electrónicos que componen estas unidades.
Encapsulamiento
Esta característica permite ver un objeto como una caja negra en la que se ha introducido de alguna manera toda la infonnación relacionada con dicho objeto. Esto nos permitirá manipular los objetos como unidades básicas, pennanecicndo oculta su estructura interna.
La abstracción y la encapsulación
están representadas por la clase. La clase es una abstracción, porque en ella
se definen las propiedades o atributos de un detennlnado conjunto de objetos
con características comunes, y es una encapsulación porque constituye una caja
negra que encierra tanto los datos que almacena cada objeto como los métodos
que permiten manipularlos.
Herencia
La herencia permite el acceso automático a la información contenida en otras clases. De esta forma, la reutilización del código está garantizada. Con la herencia todas las clases están clasificadas en una jerarquía estricta. Cada clase tiene su superclase (la clase superior en la jerarquía), y cada clase puede tener una o más subclases (las clases inferiores en la jerarquía).
Las clases que están en la parte
inferior en la jerarquía se dice que heredan de las clases que están en la
parte superior en la jerarquía. El término heredar significa que las subclases
disponen de todos los métodos y propiedades de su superclase. Este mecanismo
proporciona una forma rápida y cómoda de extender la funcionalidad de una
clase.
En Java cada clase sólo puede
tener una superclase, lo que se denomina herencia simple. En otros lenguajes
orientados a objetos, como C++, las clases pueden tener más de una superclase,
lo que se conoce como herencia múltiple. En este caso, una clase comparte los
métodos y propiedades de varias clases. Esta característica, proporciona un
poder enorme a la hora de crear clases, pero complica excesivamente la
programación, por lo que es de escasa o nula utilización. Java, intentando
facilitar las cosas, soluciona este problema de comportamiento compartido utilizando
interfaces.
Una interfaz es una colección de
nombres de métodos, sin incluir sus definiciones, que puede ser añadida a
cualquier clase para proporcionarla comportamientos adicionales no incluidos en
los métodos propios o heredados.
Polimorfismo
Esta característica permite implementar múltiples formas de un mismo método, dependiendo cada una de ellas de la clase sobre la que se realice la implementación.
Esto hace que se pueda acceder a
una variedad de métodos distintos (todos con el mismo nombre) utilizando
exactamente el mismo medio de acceso. Más adelante, cuando estudie en
profundidad las clases y subclases, estará en condiciones de entender con
claridad la utilidad de esta característica.
CONSTRUCTORES Y DESTRUCTORES
Un constructor es un
procedimiento especial de una clase que es llamado automáticamente siempre que
se crea un objeto de esa clase. Su función es iniciar el objeto.
Un destructor es un procedimiento
especial de una clase que es llamado automáticamente siempre que se destruye un
objeto de esa clase. Su función es realizar cualquier tarea final en el momento
de destruir el objeto.
No hay comentarios:
Publicar un comentario