INTRODUCCION

La computadora automática debe su derecho a existir, su utilidad, precisamente a su capacidad de efectuar vastos cálculos que no pueden realizar los seres humanos. Deseamos que la computadora efectúe lo que nunca podríamos hacer nosotros, y la potencia de las maquinas actuales es tal, que inclusive los cálculos pequeños, por su tamaño, escapan al poder de nuestra imaginación limitada.
Sin embargo debemos organizar el cálculo de manera tal que nuestros limitados poderes sean suficientes para asegurar que se establecerá el efecto deseado. Esta organización incluye la composición de los programas.
Los avances en la tecnología siempre van parejos con progresos en los lenguajes de programación y con nuevas ayudas para simplificar el uso del computador, con lo cual un número mayor de usuarios se beneficia del. Pero la necesidad de hacer programas para resolver problemas específicos quizás nunca desaparecerá.

CONCEPTO DE PROGRAMACION ESTRUCTURADA

EL creciente empleo de los computadores ha conducido a buscar un abaratamiento del desarrollo del software, paralelo a la reducción del costo del hardware obtenido gracias a los avances tecnológicos. Los altos costos del mantenimiento de las aplicaciones en producción normal también han urgido la necesidad de mejorar la productividad del personal de programación.
En la década del sesenta salieron a la luz pública los principios de lo que más tarde se llamo Programación Estructurada, posteriormente se libero el conjunto de las llamadas "Técnicas para mejoramiento de la productividad en programación", siendo la Programación Estructurada una de ellas.
Los programas computarizados pueden ser escritos con un alto grado de estructuración, lo cual les permite ser más fácilmente comprensibles en actividades tales como pruebas, mantenimiento y modificación de los mismos. Mediante la programación Estructurada todas las bifurcaciones de control de un programa se encuentran estandarizadas, de forma tal que es posible leer la codificación del mismo desde su inicio hasta su terminación en forma continua, sin tener que saltar de un lugar a otro del programa siguiendo el rastro de la lógica establecida por el programador, como es la situación habitual con codificaciones desarrolladas bajo otras técnicas.
En programación Estructurada los programadores deben profundizar más que lo usual al procederá realizar el diseño original del programa, pero el resultado final es más fácil de leer y comprender, el objetivo de u programador profesional al escribir programas de una manera estructurada, es realizarlos utilizando solamente un numero de bifurcaciones de control estandarizados.
El resultado de aplicar la sistemática y disciplinada manera de elaboración de programas establecida por la Programación Estructurada es una programación de alta precisión como nunca antes había sido lograda. Las pruebas de los programas, desarrollados utilizando este método, se acoplan más rápidamente y el resultado final con programas que pueden ser leídos, mantenidos y modificados por otros programadores con mucho mayor facilidad.

LA PROGRAMACIÓN ESTRUCTURADA Y LA ORIENTACIÓN A OBJETOS

La programación estructurada y la orientación a objetos constituyen los pasos finales de este camino, ya que permiten a los programadores escribir códigos sin necesidad de conocer los detalles de la implementación de funciones de una librería y objetos respectivamente. Su implementación permanece oculta a los programadores, liberándoles de los condicionantes que esto imponía.
De ese modo, un programador no necesita saber cómo se representan internamente los datos de un tablero de ajedrez. Tan sólo necesitará saber cómo mover, iniciar una partida o validar un determinado movimiento.
Lo realmente complicado de ambos paradigmas de programación es encontrar los modelos o patrones conceptuales correctos para el problema y no la implementación de los mismos. Realmente, el diseño adquiere la máxima importancia que no tenía en la programación tradicional.
La propuesta de la moderna programación estructurada y de la orientación a objetos consiste principalmente en intentar superar la complejidad inherente a los problemas del mundo real gracias a la abstracción de nuestro conocimiento sobre tales problemas y su encapsulación dentro de módulos o librerías y objetos respectivamente.
Se utiliza el término encapsular porque los objetos y las librerías pueden verse como "cápsulas" a modo de barrera conceptual que separa un conjunto de valores y operaciones, que poseen un substrato conceptual idéntico, del resto del sistema.
Así, tanto objetos como librerías tienen dos partes bien diferenciadas: la declaración y la implementación. La declaración o interfaz es de dominio público, conocido por las demás partes del programa. En la implementación se explicitan y codifican los elementos necesarios para responder a lo especificado en la declaración.
Esta separación permite que cada objeto definido en nuestro sistema pueda ocultar su implementación y hacer pública su interfaz de comunicación.
La ocultación de la información permite aislar una parte del programa del resto, y que el código de una parte sea revisado o extendido sin afectar a la integridad de las demás partes.
En este sentido, es interesante resaltar que la opción de encapsular datos y operaciones en librerías y objetos facilita enormemente que se puedan utilizar en una aplicación ajena.
Se puede, por tanto, empezar a hablar de una relación consumidor/proveedor de código.
La programación convencional daba más importancia a la relación entre el programador y su código, que a la relación entre el código y las aplicaciones en que se usa.

PROGRAMACIÓN ESTRUCTURADA, ORIENTADA A EVENTOS

Paradigma de programación en el que la estructura y ejecución del programa dependen de los sucesos (eventos) que ocurran en el sistema o que ellos mismos provoquen.
El programador debe definir los eventos a los cuales el programa reaccionará y las acciones que seguirá al presentarse cada uno, esto se conoce como manejador de eventos.
Existen múltiples eventos y dependen del sistema operativo y del lenguaje de programación utilizado.
Al ejecutarse un programa así programado, se iniciará con el código correspondiente a su ejecución y luego el programa esperará a que ocurra un evento. Al ocurrir este, se ejecutará el código correspondiente al evento que se realizó.
Visual Basic es un buen ejemplo de programación orientada a eventos.

PROGRAMACIÓN ESTRUCTURADA ORIENTADA A OBJETOS


Objetos
Entender que es un objeto es la clave para entender cualquier lenguaje orientado a objetos.
Existen muchas definiciones que se le ha dado al Objeto. Primero empecemos entendiendo que es un objeto del mundo real. Un objeto del mundo real es cualquier cosa que vemos a nuestro alrededor. Digamos que para leer este artículo lo hacemos a través del monitor y una computadora, ambos son objetos, al igual que nuestro teléfono celular, un árbol o un automóvil.
Analicemos un poco más a un objeto del mundo real, como la computadora. No necesitamos ser expertos en hardware para saber que una computadora está compuesta internamente por varios componentes: la tarjeta madre, el chip del procesador, un disco duro, una tarjeta de video, y otras partes más. El trabajo en conjunto de todos estos componentes hace operar a una computadora.
Internamente, cada uno de estos componentes puede ser sumamente complicado y puede ser fabricado por diversas compañías con diversos métodos de diseño. Pero nosotros no necesitamos saber cómo trabajan cada uno de estos componentes, como saber que hace cada uno de los chips de la tarjeta madre, o cómo funciona internamente el procesador. Cada componente es una unidad autónoma, y todo lo que necesitamos saber de adentro es cómo interactúan entre sí los componentes, saber por ejemplo si el procesador y las memorias son compatibles con la tarjeta madre, o conocer donde se coloca la tarjeta de video. Cuando conocemos como interaccionan los componentes entre sí, podremos armar fácilmente una computadora.

¿Que tiene que ver esto con la programación?
La programación orientada a objetos trabaja de esta manera. Todo el programa está construido en base a diferentes componentes (Objetos), cada uno tiene un rol específico en el programa y todos los componentes pueden comunicarse entre ellos de formas predefinidas.
Todo objeto del mundo real tiene 2 componentes: características y comportamiento.
Por ejemplo, los automóviles tienen características (marca, modelo, color, velocidad máxima, etc.) y comportamiento (frenar, acelerar, retroceder, llenar combustible, cambiar llantas, etc.).
Los Objetos de Software, al igual que los objetos del mundo real, también tienen características y comportamientos. Un objeto de software mantiene sus características en una o más "variables", e implementa su comportamiento con "métodos". Un método es una función o subrutina asociada a un objeto.
Las Clases
En el mundo real, normalmente tenemos muchos objetos del mismo tipo. Por ejemplo, nuestro teléfono celular es sólo uno de los miles que hay en el mundo. Si hablamos en términos de la programación orientada a objetos, podemos decir que nuestro objeto celular es una instancia de una clase conocida como "celular". Los celulares tienen características (marca, modelo, sistema operativo, pantalla, teclado, etc.) y comportamientos (hacer y recibir llamadas, enviar mensajes multimedia, transmisión de datos, etc.). Cuando se fabrican los celulares, los fabricantes aprovechan el hecho de que los celulares comparten esas características comunes y construyen modelos o plantillas comunes, para que a partir de esas se puedan crear muchos equipos celulares del mismo modelo. A ese modelo o plantilla le llamamos CLASE, y a los equipos que sacamos a partir de ella la llamamos OBJETOS.
Herencia
La herencia es uno de los conceptos más cruciales en la POO. La herencia básicamente consiste en que una clase puede heredar sus variables y métodos a varias subclases (la clase que hereda es llamada superclase o clase padre). Esto significa que una subclase, aparte de los atributos y métodos propios, tiene incorporados los atributos y métodos heredados de la superclase. De esta manera se crea una jerarquía de herencia.
Encapsulamiento
El encapsulamiento consiste en unir en la Clase las características y comportamientos, esto es, las variables y métodos. Es tener todo esto es una sola entidad. En los lenguajes estructurados esto era imposible. Es evidente que el encapsulamiento se logra gracias a la abstracción y el ocultamiento que veremos a continuación.
La utilidad del encapsulamiento va por la facilidad para manejar la complejidad, ya que tendremos a las Clases como cajas negras donde sólo se conoce el comportamiento pero no los detalles internos, y esto es conveniente porque nos interesará será conocer qué hace la Clase pero no será necesario saber cómo lo hace.
Polimorfismo
Una de las características fundamentales es el polimorfismo, que no es otra cosa que la posibilidad de construir varios métodos con el mismo nombre, pero con relación a la clase a la que pertenece cada uno, con comportamientos diferentes. Esto conlleva la habilidad de enviar un mismo mensaje a objetos de clases diferentes. Estos objetos recibirían el mismo mensaje global pero responderían a él de formas diferentes.
Propiedades
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
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.
Mensaje
Normalmente un único objeto por sí solo no es muy útil. En general, un objeto aparece como un componente más de un programa o una aplicación que contiene otros muchos objetos. Es precisamente haciendo uso de esta interacción como los programadores consiguen una funcionalidad de mayor orden y modelar comportamientos mucho más complejos.
Los objetos de un programa interactúan y se comunican entre ellos por medio de mensajes. Cuando un objeto A quiere que otro objeto B ejecute una de sus funciones miembro (métodos de B), el objeto A manda un mensaje al objeto B.
En ocasiones, el objeto que recibe el mensaje necesita más información para saber exactamente lo que tiene que hacer. Esta información se pasa junto con el mensaje en forma de parámetro.

Conclusión

Día a día los costos del Hardware decrecen. Así surgen nuevas áreas de aplicación cotidianamente: procesamiento de imágenes y sonido, bases de datos multimediales, automatización de oficinas, ambientes de ingeniería de software, etc. Aún en las aplicaciones tradicionales encontramos que definir interfaces hombre-máquina "a-la-Windows" suele ser bastante conveniente.

Lamentablemente, los costos de producción de software siguen aumentando; el mantenimiento y la modificación de sistemas complejos suele ser una tarea trabajosa; cada aplicación, (aunque tenga aspectos similares a otra) suele encararse como un proyecto nuevo, etc.

Todos estos problemas aún no han sido solucionados en forma completa. Pero como los objetos son portables (teóricamente) mientras que la herencia permite la reusabilidad del código orientado a objetos, es más sencillo modificar código existente porque los objetos no interaccionan excepto a través de mensajes; en consecuencia un cambio en la codificación de un objeto no afectará la operación con otro objeto siempre que los métodos respectivos permanezcan intactos. La introducción de tecnología de objetos como una herramienta conceptual para analizar, diseñar e implementar aplicaciones permite obtener aplicaciones más modificables, fácilmente extensibles y a partir de componentes reusables. Esta reusabilidad del código disminuye el tiempo que se utiliza en el desarrollo y hace que el desarrollo del software sea más intuitivo porque la gente piensa naturalmente en términos de objetos más que en términos de algoritmos de software.



Un Trabajito del CAES... vamos x más!!