Buscar este blog

martes, 31 de mayo de 2016

Programación orientada a objetos

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.

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