jueves, 16 de febrero de 2012

Definiciones Básicas

¿Que es un objeto?



Objeto es el concepto clave de la Programación Orientada a Objetos, la idea de objeto es similar a la del mundo real, un objeto puede ser una silla, una mesa. Tu perro es un objeto.

Los objetos tienen dos características: Un estado y un comportamiento. Fijate que por ejemplo tu perro tiene un estado: nombre, color, raza, altura, etc. y un comportamiento: ladrar, cavar pozo, llorar, dormir, comer, etc.

Un auto es un objeto. También tiene un estado: Cantidad de puertas, color, tamaño, etc. y un comportamiento: acelerar, frenar, subir cambio, bajar cambio, girar izq., girar der., etc.

Entonces podemos definir a un objeto en POO, como un conjunto de datos y funciones relacionadas. A las funciones de los objetos, tales como acelerar en el caso del auto, de aquí en más las llamaremos métodos, a los datos los llamaremos atributos.

Los objetos en programación, son modelados observando objetos del mundo real, por ejemplo implementamos el objeto "perro" dentro de nuestro programa definiendo los atributos y métodos del objeto perro real.


Un ejemplo mas complicado de un objeto podría ser el siguiente:

Objeto: Cuenta bancaria
Atributos: tipo, titular, saldo.
Métodos: Depositar, Extraer.

Aquí se ve la necesidad de que el atributo "saldo" sea solo accesible a través de los métodos "Depositar" y "Extraer" por una cuestión de seguridad, encapsulamiento y para evitar comportamientos indeseados.

Herencia

Los sistemas orientados a objetos permiten definir clases en término de otras clases. Por ejemplo ovejero alemán y caniche son diferentes razas de perros. En la terminología orientada a objetos "Ovejero Alemán" y "Caniche" son subclases de la clase perro. De forma similar Perro es la superclase de "Ovejero Alemán".



Cada subclase hereda los atributos de la superclase. Tanto la clase "Ovejero Alemán" como "Caniche" tendrán los atributos nombre, color de pelo, altura definidos en la clase Perro.
Una subclase no esta limitada únicamente a los atributos de su superclase, también puede tener atributos propios, o redefinir algunos definidos anteriormente en la superclase.
No se esta limitado tampoco a un solo nivel de herencia, se pueden tener todos los que se consideren necesarios.

Ejemplo:

Clase Empleado hereda de clase Persona, y esta a su vez hereda de clase Animal.
Las subclases proveen un comportamiento especializado sobre los elementos comunes provistos por las superclases. Gracias a la herencia, los programadores pueden rehusar código una y otra vez.


Polimorfismo

El polimorfismo es un concepto de la programación orientada a objetos que nos permite programar en forma general, en lugar de hacerlo en forma específica. En general nos sirve para programar objetos con características comunes y que todos estos compartan la misma superclase en una jerarquía de clases, como si todas fueran objetos de la superclase. Esto nos simplifica la programación.

Recuerde el ejemplo del ecosistema, en donde todos los objetos de las distintas especies heredaban de una superclase llamada Animal, que brindaba la información general de cualquier animal, independiente de su especie. Sin embargo, cada especie hace un uso particular de cada uno de los métodos u operaciones de la clase Animal. El método comer() no se ejecutará de la misma manera en un León() o en un Pavo(). Lo mismo ocurre para métodos moverse() en objetos de tipo Tiburón() o Gallina(), aunque todas las especies realicen estos métodos. A la sobrescritura o implementación específica de métodos es la clave del polimorfismo.

Para poner en práctica se hará un ejemplo bastante sencillo. Se hará una librería de clases que represente figuras tridimensionales y bidimensionales, y su respectiva jerarquía de clases. Las clases deben ser capaces de tener funcionamiento bastante básico, como obtener áreas, volúmenes y perímetros de la figura correspondiente.


La representación de la jerarquía sería como ésta:

 

Encapsulamiento


Definicion de encapsulamiento
 
El encapsulamiento es la característica de autonomía de la OO. Esta característica  permite generar componentes autónomos de software tomando una parte de funcionalidad y ocultando los detalles de la implementación al mundo exterior.
Los términos módulo, componente o bean se suelen utilizan en lugar de “componente encapsulado de software”.
Una vez encapsulada, una entidad de software se puede visualizar como una caja negra.

 
Un encapsulamiento eficaz permite escribir componentes autónomos de software.
Las tres características de un encapsulamiento eficaz son:
Abstracción.
Ocultamiento de la implementación.
División de la responsabilidad.


Abstracción 

La abstracción es el proceso de simplificar un problema complejo.La abstracción permite resolver un problema una vez y utilizar la solución posteriormente en todo el dominio del problema.
Ejemplo 1
Imaginemos una cola de personas ante un cajero en un banco.
Tan pronto como el cajero está listo, la primera persona de la cola avanza a la ventanilla.
La gente mantiene este orden: primero en entrar, primero en salir.
Ejemplo 2
Consideremos un establecimiento de venta rápida de hamburguesas.
Conforme una hamburguesa llega al final de la banda transportadora, es colocada tras la última hamburguesa por preparar.
Así, la primera hamburguesa que se toma es también la primera que se preparó.
Ambos dominios son un ejemplo de una cola primero en entrar, primero en salir (orden de elementos
tipo FIFO).




Ocultamiento de la implementación

 El ocultamiento de la implementación presenta dos beneficios:
Proteger al objeto de los usuarios.
Mediante los Tipos Abstractos de Datos.
Proteger a sus usuarios del objeto.
Mediante la utilización de código moderadamente ligado.
¿Cómo proteger a los usuarios mediante el ocultamiento de la implementación?

El ocultamiento de la implementación conduce a un diseño más flexible porque evita que los usuarios del objeto dependan estrechamente de la implementación del objeto. 

Así, el ocultamiento de la implementación no sólo protege al objeto, sino también a aquellos que lo utilizan pues fomenta la creación de código moderadamente ligado al objeto. 

El código moderadamente ligado es independiente de la implementación de otros componentes.
El código estrechamente ligado depende intensamente de la implementación de otros componentes.
El encapsulamiento y el ocultamiento de la implementación no son mágicos. Si se realizan cambios en una interfaz, será necesario actualizar el código dependiente de esa interfaz. Mediante el ocultamiento de los detalles y la escritura de software para una interfaz, se crea código moderadamente ligado.
 El código estrechamente ligado choca con el propósito del encapsulamiento: crear objetos independientes y reutilizables.
 
División de la responsabilidad
 
Para generar código moderadamente desligado, hay que contar con una división apropiada de la
responsabilidad.
El ocultamiento de la implementación y la responsabilidad van de la mano.
Un objeto tiene la responsabilidad de saber cómo llevar a cabo su trabajo.
Si la implementación se deja abierta a todo el mundo exterior, un usuario podría empezar a actuar
sobre ella, duplicando en consecuencia la responsabilidad
 RESUMEN
El encapsulamiento eficaz se compone de:
Abstracción más
Ocultamiento de la implementación más
Responsabilidad.
Si eliminamos
La abstracción, el rdo será código no reutilizable.
El ocultamiento de la implementación, el rdo será código frágil y estrechamente ligado.
La responsabilidad, el rdo será código orientado a datos y con una lista de procedimientos (procedural).

No hay comentarios:

Publicar un comentario