martes, 8 de mayo de 2012

POO vs PE

Programación Orientada a Objetos

La programación Orientada a Objetos (POO) es una metodología de diseño de software y un paradigma de programación que define los programas en términos de "clases de objetos", objetos que son entidades que combinan estado (es decir, datos) y comportamiento (esto es, procedimientos o métodos). La programación orientada a objetos expresa un programa como un conjunto de estos objetos, que se comunican entre ellos para realizar tareas. Esto difiere de los lenguajes procedurales tradicionales, en los que los datos y los procedimientos están separados y sin relación. Estos métodos están pensados para hacer los programas y módulos más fáciles de escribir, mantener y reutilizar.
Otra manera en que esto es expresado a menudo, es que la programación orientada a objetos anima al programador a pensar en los programas principalmente en términos de tipos de datos, y en segundo lugar en las operaciones ("métodos") específicas a esos tipos de datos. Los lenguajes procedurales animan al programador a pensar sobre todo en términos de procedimientos, y en segundo lugar en los datos que esos procedimientos manejan.
Los programadores que emplean lenguajes procedurales, escriben funciones y después les pasan datos. Los programadores que emplean lenguajes orientados a objetos definen objetos con datos y métodos y después envian mensajes a los objetos diciendo que realicen esos métodos en sí mismos.
Algunas personas también diferencian la POO sin clases, la cual es llamada a veces programación basada en objetos.

Hay un cierto desacuerdo sobre exactamente que características de un método de programación o lenguaje le califican como "orientado a objetos", pero hay un consenso general en que las características siguientes son las más importantes (cada una de las cuales se explica más detalladamente en su respectiva página enlazada):
Abstracción: 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 tambien ser abstraídos y cuando los están, una variedad de técnicas son requeridas para ampliar una abstracción. 
Encapsulación: También llamada "ocultación de la información", esto asegura que los objetos no pueden cambiar el estado interno de otros objetos de maneras inesperadas; solamente los propios métodos internos del objeto pueden acceder a su estado. Cada tipo de objeto expone una interfaz a otros objetos que especifica cómo otros objetos pueden interactuar con él. Algunos lenguajes relajan esto, permitiendo un acceso directo a los datos internos del objeto de una manera controlada y limitando el grado de abstracción.
Polimorfismo: Las referencias y las colecciones de objetos pueden contener objetos de diferentes tipos, y la invocación de un comportamiento en una referencia producirá el comportamiento correcto para el tipo real del referente. Cuando esto ocurre en "tiempo de ejecución", esta última característica se llama asignación tardía o asignación dinámica. Algunos lenguajes proporcionan medios más estáticos (en "tiempo de compilación") de polimorfismo, tales como las plantillas y la sobrecarga de operadores de C++. 
Herencia: Organiza y facilita el polimorfismo y la encapsulación permitiendo a los objetos ser definidos y creados como tipos especializados de objetos preexistentes. Estos pueden compartir (y extender) su comportamiento sin tener que reimplementar su comportamiento. Esto suele hacerse habitualmente agrupando los objetos en clases y las clases en árboles o enrejados que reflejan un comportamiento común.



Programación estructurada
La programación estructurada esta compuesta por un conjunto de técnicas que han ido evolucionando aumentando considerablemente la productividad del programa reduciendo el tiempo de depuración y mantenimiento del mismo.
Esta programación estructurada utiliza un número limitado de estructuras de control, reduciendo así considerablemente los errores.
Esta técnica incorpora:
Diseño descendente (top-dow): el problema se descompone en etapas o estructuras jerárquicas.
Recursos abstractos (simplicidad): consiste en descompones las acciones complejas en otras más simples capaces de ser resueltas con mayor facilidad.
Estructuras básicas: existen tres tipos de estructuras básicas:
Estructuras secuénciales: cada acción sigue a otra acción secuencialmente. La salida de una acción es la entrada de otra.
Estructuras selectivas: en estas estructuras se evalúan las condiciones y en función del resultado de las mismas se realizan unas acciones u otras. Se utilizan expresiones lógicas.
Estructuras repetitivas: son secuencias de instrucciones que se repiten un número determinado de veces.
Las principales ventajas de la programación estructurada son:
Los programas son mas fáciles de entender
Se reduce la complejidad de las pruebas
Aumenta la productividad del programador
Los programas queden mejor documentados internamente.
Un programa esta estructurado si posee un único punto de entrada y sólo uno de salida, existen de "1 a n" caminos desde el principio hasta el fin del programa y por último, que todas las instrucciones son ejecutables sin que aparezcan bucles infinitos.

CONCLUCIONES:
Que la programacion orientada a objetos, se trabaja con objetos, por ejemplo creas una clase o el esqueto, la clase carro, luego le asignas variables(valores o atributos), ejemplo, VelocidadMax =190; Cambios: 5, Marcas: Toyota ; luego creas metodos o funciones (ejemplo -> funcion queVayaHaciaAdelante, funcion queSeDetenga, etc);esto seria la clase, ahora programamos el objeto.
 y cual seria el objeto de la clase carro? Tu carro, entonces creo un objeto: MiCarro que utiliza una clase llamada auto, pero la clase auto puede contener a su ves una clase llamada motor, otra clase llamada llanta, etc.... es como programar por partes y luego las puedes cambiar(polimorfismo), heredar(herencia), reutilizar, etc y esta seria la forma mas facil de programar.
Ahora para la programacion estructurada, se programa de manera secuencial, por lo que para programas muy complejos se vuelve casi imposible programar bien, sin confundirse, es muy tedioso y mas complicado.