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.