Evolución Histórica de la Programación.
• Programación estructurada
• Programación modular
• Programación orientada a objetos
• Programación orientada a aspectos
• Programación orientada a componentes
La Programación Orientada a Objetos, POO, tal vez el paradigma de programación más utilizado en el mundo del desarrollo de software y de la ingeniería de software del siglo XXI, trae un nuevo enfoque a los retos que se plantean en la programación estructurada cuando los problemas a resolver son complejos. Al contrario que la programación procedimental que enfatiza en los algoritmos, la POO enfatiza en los datos.
En lugar de intentar ajustar un problema al enfoque procedimental de un lenguaje, POO intenta ajustar el lenguaje al problema. La idea es diseñar formatos de datos que se correspondan con las características esenciales de un problema.
La idea fundamental de los lenguajes orientados a objetos es combinar en una única unidad o módulo, tanto los datos como las funciones que operan sobre esos datos. Tal unidad se llama un objeto.
Las funciones de un objeto se llaman funciones miembro en C++ o métodos (éste es el caso de Smalltalk, uno de los primeros lenguajes orientados a objetos), y son el único medio para acceder a sus datos.
Los datos de un objeto, se conocen también como atributos o variables de instancia. Si se desea leer datos de un objeto, se llama a una función miembro del objeto. Se accede a los datos y se devuelve un valor. No se puede acceder a los datos directamente. Los datos son ocultos, de modo que están protegidos de alteraciones accidentales. Los datos y las funciones se dice que están encapsulados en una única entidad. El encapsulamiento de datos y la ocultación de los datos son términos clave en la descripción de lenguajes orientados a objetos.
Si se desea modificar los datos de un objeto, se conoce exactamente cuáles son las funciones que interactúan con las funciones miembro del objeto. Ninguna otra función puede acceder a los datos. Esto simplifica la escritura, depuración y mantenimiento del programa. Un programa C++ se compone normalmente de un número de objetos que se comunican unos con otros mediante la llamada a otras funciones miembro. La organización de un programa en C++ se muestra en la Figura, La llamada a una función miembro de un objeto se denomina enviar un mensaje a otro objeto.
En el paradigma orientado a objetos, el programa se organiza como un conjunto finito de objetos que contiene datos y operaciones (funciones miembro en C++) que llaman a esos datos y que se comunican entre sí mediante mensajes.
Propiedades fundamentales de la orientación a objetos
Existen diversas características ligadas a la orientación a objetos. Todas las propiedades que se suelen considerar, no son exclusivas de este paradigma, ya que pueden existir en otros paradigmas, pero en su conjunto definen claramente los lenguajes orientados a objetos. Estas propiedades son:
• Abstracción (tipos abstractos de datos y clases).
• Encapsulado de datos.
• Ocultación de datos.
• Herencia.
• Polimorfismo.
C++ soporta todas las características anteriores que definen la orientación a objetos, aunque hay numerosas discusiones en torno a la consideración de C++ como lenguaje orientado a objetos. La razón es que en contraste con lenguajes tales como Smalltalk, Java o C#, C++ no es un lenguaje orientado a objetos puro. C++ soporta orientación a objetos pero es compatible con C y permite que programas C++ se escriban sin utilizar características orientadas a objetos. De hecho, C++ es un lenguaje multiparadigma que permite programación estructurada, procedimental, orientada a objetos y genérica.
Conceptos.
Todo es un OBJETO.
Un Objeto es una entidad que contiene información y un conjunto de acciones que operan sobre los datos. Para que un objeto realice una de sus acciones se le manda un Mensaje. Petición de invocación a una función que pertenece a un objeto en particular. Por tanto, la primera ventaja de la programación orientada a objetos es la encapsulación de datos y operaciones, es decir, la posibilidad de definir Tipos Abstractos de Datos. Se puede crear un nuevo tipo de objeto haciendo un paquete con otros objetos. Ej: Carro (llantas, motor,...)
Se toma un componente conceptual del programa y se representa como un objeto. (perro, edificio, ventana, tuerca...).
Cada objeto tiene un tipo, una clase define el tipo de objetos por lo tanto un Objeto es una instancia de una clase determinada, que define la implementación de un tipo concreto de objetos.
Una clase describe la información de un objeto y los mensajes a los que responde. La declaración de una clase es muy parecida a la definición de un registro, pero aquí los campos se llaman instancias de variables o datos miembro (aunque utilizaré el término atributo, que no suena tan mal en castellano). Cuando le mandamos un mensaje a un objeto, este invoca una rutina que implementa las acciones relacionadas con el mensaje. Estas rutinas se denominan métodos o funciones miembro. La definición de la clase también incluye las implementaciones de los métodos.
Todos los objetos de un mismo tipo en particular pueden recibir los mismos mensajes, lo que implica la reutilización del código.
Ejemplo: Clase Figura Geométrica Clase Círculo
Clase Triángulo
Clase Cuadrado
Un objeto tipo o clase círculo también es de tipo figura, está garantizado que un objeto tipo círculo recibirá mensajes de figura.
Se puede pensar en las clases como plantillas para crear objetos. Se dice que un objeto es una instancia de una clase. También se puede decir que un objeto es miembro de una clase.
Fuente: Fundamentos de programación
Programación Orientada a Objetos utilizando C++...