domingo, 1 de enero de 2012

1.1.- REPASO DE PROGRAMACIÓN ORIENTADA A OBJETOS.

Según lo expuesto la POO es una forma de programación que utiliza objetos que responden a sucesos. Estos sucesos producen un flujo de mensajes entre los objetos, lo que origina cambios en el estado del objeto que recibe el mensaje. Como ejemplo piense en el problema de que un objeto caja de texto visualice un comunicado cuando se haga clic en otro objeto botón de pulsación. La estructura de la programación básicamente estará formada por dos objetos y un mapa de mensajes; uno de los mensajes relacionara el clic sobre el botón con el método que tiene que ejecutarse para poner el comunicado en la caja de texto. Así la POO es un enfoque sumamente natural, puesto que la estructura de los programas refleja directamente la estructura del problema.

Además la POO puede considerarse como una extensión natural de la programación estructurada en un inte3nto de potenciar los conceptos de modularidad y reutilización del código.

MECANISMOS BÁSICOS DE LA POO:

Los mecanismos básicos de la programación orientada a objetos son: objetos mensajes, métodos, clases y subclases

OBJETOS

Un programa tradicional se compone de procedimientos y de datos. Un programa orientado a objetos se compone solamente de objetos. Un objeto es una encapsulación genérica de datos y de los procedimientos para manipularlos.

MENSAJES

Cuando se ejecuta un programa orientado a objetos los objetos están recibiendo, interpretando y respondiendo a mensajes de otros objetos.
El conjunto de mensajes a los que un objeto puede responder se denomina protocolo.

MÉTODOS

Un método se implementa en una clase, y determina como tiene que actuar el objeto cuando recibe un mensaje.

La POO frente a la programación tradicional
En la historia de la programación ha habido varias evoluciones sucesivas. Una de las principales fue la programación estructurada, cuyo principio fundamental era dividir un programa en subprogramas más pequeños y fáciles de resolver, hasta llegar a niveles de complejidad elementales, siempre apoyándonos en la idea de que debe hacer el programa.

CLASES

Una clase se puede considerar como plantilla para crear objetos de esa clase o tipo. Una clase describe los métodos y atributos que definen las características comunes a todos los objetos de esa clase.
Una clase es un tipo de objeto definido por el usuario. En otras palabras, una clase equivalente a la generalización de un tipo específico de objeto. Un objeto es la concreción de una clase (algunos autores utilizan el termino instancia, traducción directa de instante). Por ejemplo, un objeto de la clase C sería un ejemplar O de esa clase. Entonces, para disponer de un objeto, primero  se abstraen las características comunes (clase) y por último se pone nombre a uno o más ejemplares de la clase (objetos).

HISTORIA DE LOS LENGUAJES ORIENTADOS A OBJETOS

Son varios los lenguajes que han contribuido a la evolución de los lenguajes orientados a objetos de hoy: LISP en la década de los 50, simula en la década de los 60 y más tarde pascal, C, Modula y Ada. Si bien estos lenguajes no incluyen mecanismos para la programación orientada a objetos, sus características sirvieron de base para la construcción de estos mecanismos: por ejemplo, simula contribuye con el concepto de clase.
En la década de los 70, aparece como smaltalk como un lenguaje orientado a objetos puro, con lo que queda introducido definitivamente este tipo de programación. En la década de los 80 cuando los avances son mayores, debido fundamentalmente a la disponibilidad de extensiones orientadas a objetos en dos de los lenguajes populares, C y pascal.

VENTAJAS DE LOS LENGUAJES ORIENTADOS A OBJETOS

Un lenguaje de programación que soporte programación orientada a objetos beneficia el desarrollo de software. Esto es así, porque:

·         Los objetos bien diseñados son la base para sistemas que se construyen a partir de módulos reutilizables, dando lugar a una mayor productividad.
·         La reutilización de las clases que han sido probadas en circunstancias reales, en proyectos anteriores, dan lugar a sistemas de mayor calidad y con menos errores.
·         La herencia hace posible definir sistemas más fiables, más fáciles de ampliar y menos costosos de mantener.
·         Un diseño orientado a objetos es una herramienta clave para enfrentarse a problemas complejos porque favorece el paso de pequeños a grandes sistemas.
·         Las aplicaciones requieren escribir menos líneas de código, menos sentencias de bifurcación y por lo tanto, los módulos son más comprensibles.
·         La encapsulación ayuda a construir sistemas más seguros.
                                
DISEÑO ORIETADO A OBJETOS

Un diseño orientado a objetos no es un diseño top down ni bottom up. Aunque envuelve elementos próximos a ambos. En el diseño top down, usted prueba a ver y comprender el problema en su aspecto más general; una vez superado este paso, tratara de descomponer el problema general en subproblemas más pequeños y fáciles de resolver, procediendo con estos de forma similar.

PROGRAMACION 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 modernizarlo 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.

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 y 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.

CONCEPTOS FUNDAMENTALES

La programación orientada a objetos es una forma de programar que trata de encontrar una solución a estos problemas. Introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos destacan los siguientes:

Clase: definiciones de las propiedades y comportamiento de un tipo de objeto concreto. La instanciación es la lectura de estas definiciones y la creación de un objeto a partir de ellas.

Herencia: (por ejemplo, herencia de la clase D a la clase C) Es la facilidad mediante la cual la clase D hereda en ella cada uno de los atributos y operaciones de C, como si esos atributos y operaciones hubiesen sido definidos por la misma D. Por lo tanto, puede usar los mismos métodos y variables publicas declaradas en C. Los componentes registrados como "privados" (private) también se heredan, pero como no pertenecen a la clase, se mantienen escondidos al programador y sólo pueden ser accedidos a través de otros métodos públicos. Esto es así para mantener hegemónico el ideal de OOP.

Objeto: entidad provista de un conjunto de propiedades o atributos (datos) y de comportamiento o funcionalidad (métodos) los mismos que consecuentemente reaccionan a eventos. Se corresponde con los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa). Es una instancia a una clase.

Método: Algoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.

Evento: Es un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento, a la reacción que puede desencadenar un objeto, es decir la acción que genera.

Mensaje: una comunicación dirigida a un objeto, que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.

Propiedad o atributo: contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto y esto se define como sus características predeterminadas, y cuyo valor puede ser alterado por la ejecución de algún método.

Estado interno: es una variable que se declara privada, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos). No es visible al programador que maneja una instancia de la clase.

Componentes de un objeto: atributos, identidad, relaciones y métodos.

Representación de un objeto: un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.
En comparación con un lenguaje imperativo, una "variable", no es más que un contenedor interno del atributo del objeto o de un estado interno, así como la "función" es un procedimiento interno del método del objeto.

CARACTERÍSTICAS DE LA POO

Hay un cierto acuerdo sobre exactamente qué características de un método de programación o lenguaje le definen como "orientado a objetos", pero hay un consenso general en que las características siguientes son las más importantes:
Abstracción: Denota las características esenciales de un objeto, donde se capturan sus comportamientos. Cada objeto en el sistema sirve como modelo de un "agente" abstracto que puede realizar trabajo, informar y cambiar su estado, y "comunicarse" con otros objetos en el sistema sin revelar cómo se implementan estas características. Los procesos, las funciones o los métodos pueden también ser abstraídos y cuando lo están, una variedad de técnicas son requeridas para ampliar una abstracción.

Encapsulamiento: Significa reunir a todos los elementos que pueden considerarse pertenecientes a una misma entidad, al mismo nivel de abstracción. Esto permite aumentar la cohesión de los componentes del sistema. Algunos autores confunden este concepto con el principio de ocultación, principalmente porque se suelen emplear conjuntamente.

Principio de ocultación: Cada objeto está aislado del exterior, es un módulo natural, y cada tipo de objeto expone una interfaz a otros objetos que especifica cómo pueden interactuar con los objetos de la clase.

Herencia: las clases no están aisladas, sino que se relacionan entre sí, formando una jerarquía de clasificación. Los objetos heredan las propiedades y el comportamiento de todas las clases a las que pertenecen. La herencia organiza y facilita el polimorfismo y el encapsulamiento permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes.

Recolección de basura: la Recolección de basura o Garbage Collection es la técnica por la cual el ambiente de Objetos se encarga de destruir automáticamente, y por tanto desasignar de la memoria, los Objetos que hayan quedado sin ninguna referencia a ellos.

No hay comentarios:

Publicar un comentario