El documento habla sobre los conceptos fundamentales de la programación orientada a objetos (POO). Explica que la POO es un paradigma que usa objetos y sus interacciones para diseñar aplicaciones. Describe algunas propiedades clave como la abstracción, encapsulamiento, herencia y polimorfismo.
2. Un paradigma de programación es una propuesta tecnológica que es
adoptada por una comunidad de programadores cuyo núcleo central es
incuestionable en cuanto a que unívocamente trata de resolver uno o varios
problemas claramente delimitados. La resolución de estos problemas debe
suponer consecuentemente un avance significativo en al menos un parámetro
que afecte a la ingeniería de software. Tiene una estrecha relación con la
formalización de determinados lenguajes en su momento de definición. Un
paradigma de programación está delimitado en el tiempo en cuanto a
aceptación y uso ya que nuevos paradigmas aportan nuevas o mejores
soluciones que la sustituyen parcial o totalmente.
La programación orientada a objetos o POO (OOP según sus siglas en
inglés) es un paradigma de programación que usa objetos y sus interacciones,
para diseñar aplicaciones y programas informáticos. El núcleo central de este
paradigma es la unión de datos y procesamiento en una entidad llamada
"objeto", relacionable a su vez con otras entidades "objeto".
El paradigma de la programación
orientada a objetos
3. Abstracción de un objeto
El objeto es una entidad provista de un conjunto de propiedades o atributos
(datos) y de comportamiento. La 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. El proceso de abstracción permite seleccionar las características
relevantes dentro de un conjunto e identificar comportamientos comunes
para definir nuevos tipos de entidades en el mundo real. La abstracción es
clave en el proceso de análisis y diseño orientado a objetos, ya que
mediante ella podemos llegar a armar un conjunto de clases que permitan
modelar la realidad o el problema que se quiere ataca
¿Qué es la POO? Propiedades
fundamentales de la POO(1)
4. Métodos y mensajes
El método es un 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.
Un mensaje es 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ó.
Los mensajes proporcionan dos ventajas importantes:
El comportamiento de un objeto está completamente determinado (a
excepción del acceso directo a variables miembro públicas) por sus métodos,
así que los mensajes representan todas las posibles interacciones que pueden
realizarse entre objetos.
Los objetos no necesitan formar parte del mismo proceso, ni siquiera residir
en un mismo ordenador para mandarse mensajes entre ellos (y de esta forma
interactuar).
¿Qué es la POO? Propiedades
fundamentales de la POO(2)
5. Encapsulado y ocultación de la información: clases.
En programación orientada a objetos, se denomina encapsulamiento al
ocultamiento del estado, es decir, de los datos miembro, de un objeto de
manera que sólo se puede cambiar mediante las operaciones definidas para ese
objeto.
Cada objeto está aislado del exterior, es un módulo natural, y la aplicación
entera se reduce a un agregado o rompecabezas de objetos. El aislamiento
protege a los datos asociados a un objeto contra su modificación por quien no
tenga derecho a acceder a ellos, eliminando efectos secundarios e interacciones.
El encapsulamiento consiste en unir en la clase las características y
comportamientos, esto es, las variables y métodos. Es tener todo esto en 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 lo que nos interesará será conocer qué hace la Clase pero
¿Qué es la POO? Propiedades
fundamentales de la POO(3)
6. La encapsulación da lugar a que las clases se dividan en dos partes:
Interfaz: Captura la visión externa de una clase, abarcando la abstracción del
comportamiento común a los ejemplos de esa clase.
Implementación: Comprende la representación de la abstracción, así como
los mecanismos que conducen al comportamiento deseado.
Formas de encapsular:
Estándar (Predeterminado)
Abierto : Hace que el miembro de la clase pueda ser accedido desde el
exterior de la Clase y cualquier parte del programa.
Protegido : Solo es accesible desde la Clase y las clases que heredan (a
cualquier nivel).
Semi cerrado : Solo es accesible desde la clase heredada
Cerrado : Solo es accesible desde la Clase.
En el encapsulamiento hay analizadores que pueden ser semánticos y
sintácticos.
¿Qué es la POO? Propiedades
fundamentales de la POO(4)
7. Modularidad.
Se denomina modularidad a la propiedad que permite subdividir una aplicación
en partes más pequeñas (llamadas módulos), cada una de las cuales debe ser tan
independiente como sea posible de la aplicación en sí y de las restantes partes.
Estos módulos se pueden compilar por separado, pero tienen conexiones con
otros módulos. Al igual que la encapsulación, los lenguajes soportan la
modularidad de diversas formas.
Jerarquización: Herencia y objetos compuestos.
Es una clasificación u ordenación de las abstracciones.
Por jerarquía denotamos el orden de relación que se produce entre
abstracciones diferentes.
¿Qué es la POO? Propiedades
fundamentales de la POO(5)
8. Los tipos de jerarquía más útiles:
Herencia (generalización/especialización, padre/hijo, jerarquía del tipo "es
un"...). Una clase (subclase) comparte la estructura o comportamiento
definido en otra clase, llamada superclase.
Herencia multiple Una clase comparte la estructura o comportamiento de
varias superclases.
Agregación Comprende relaciones del tipo "es parte de" al realizar una
descomposición.
Los objetos compuestos pueden contener a su vez objetos de otras clases dentro
de sí (esto es lo que da la potencia a la POO). El contenido la mayoría de las
veces no es el objeto en sí, sino una referencia (puntero) al objeto; con la
ventaja de que el objeto contenido puede cambiar de contenido o posición sin
afectar al objeto que contiene. El objeto contenido puede, además, estar en
varios objetos a la vez. Al mismo tiempo que se crea un objeto, se crean los
objetos que contiene.
¿Qué es la POO? Propiedades
fundamentales de la POO(6)
9. Polimorfismo.
El polimorfismo se refiere a la posibilidad de enviar un mensaje a un grupo de
objetos cuya naturaleza puede ser heterogénea. El único requisito que deben
cumplir los objetos que se utilizan de manera polimórfica es saber responder al
mensaje que se les envía. Es importante remarcar que si un cierto grupo de
objetos pueden utilizarse de manera polimórfica es porque, en última instancia,
todos ellos saben responder a un cierto mensaje (o a varios), pero dado que esos
mismos objetos generalmente contendrán otros métodos (que otros objetos en
dicho grupo no contienen), difícilmente se pueda decir lisa y llanamente que los
objetos son polimórficos; lo correcto es decir que esos objetos se pueden utilizar
de modo polimórfico para un cierto conjunto de mensajes.
El concepto de polimorfismo, desde una perspectiva más general, se puede
aplicar tanto a funciones como a tipos de datos. Así nacen los conceptos de
funciones polimórficas y tipos polimórficos. Las primeras son aquellas
funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de
forma indistinta; los tipos polimórficos, por su parte, son aquellos tipos de
datos que contienen al menos un elemento cuyo tipo no está especificado.
¿Qué es la POO? Propiedades
fundamentales de la POO(7)
10. Haciendo énfasis en las comparaciones entre programación orientada a objetos;
parto nombrando las ventajas de ambas; y que así; poder tener en cuenta la
parte positiva de cada programación y luego diferenciar como es que resuelve
un problema cada programación (realizar tareas, permitiendo hacer los
programas y módulos más fáciles o clara de escribir).
Las ventajas de un lenguaje orientado a objetos, son:
Fomenta la reutilización y extensión del código.
Permite crear sistemas más complejos.
Relacionar el sistema al mundo real.
Facilita la creación de programas visuales.
Construcción de prototipos.
Agiliza el desarrollo de software.
Facilita el trabajo en equipo.
Facilita el mantenimiento del software
Desarrollo tradicional frente a
desarrollo orientado a objetos(1)
11. Ventajas de la Programación estructurada
Con la programación estructurada elaborar programas de computador sigue siendo un
albor que demanda esfuerzo, creatividad, habilidad y cuidado. Sin embargo, con este
nuevo estilo podemos obtener las siguientes ventajas:
Los programas son más fáciles de entender. Un programa estructurado puede ser leído en
secuencia, de arriba hacia abajo, sin necesidad de estar saltando de un sitio a otro en la
lógica, lo cual es típico de otros estilos de programación. La estructura del programa es
más clara puesto que las instrucciones están más relacionadas entre sí, por lo que es más
fácil comprender lo que hace cada función.
Estableciendo las diferencias Programación orientada a objetos y estructurada:
La programación estructura pretende resolver un problema de principio a fin en una sola
estructura de código. La programación orientada a objetos, resuelve el problema
identificando los actores que tienen participación en el problema e identificando también
sus acciones. Con esta información se crean los objetos (que son una interpretación de
algunos de estos actores), estos objetos están compuestos por clases donde se detalla las
acciones que realizan y las propiedades de estos. Al tener creados los objetos solo es
ponerlos a interactuar entre ellos.
Desarrollo tradicional frente a
desarrollo orientado a objetos(2)
12. Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un
lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard
del Centro de Cómputo Noruego en Oslo. En este centro, se trabajaba en simulaciones de
naves, que fueron confundidas por la explosión combinatoria de cómo las diversas
cualidades de diferentes naves podían afectar unas a las otras. La idea surgió al agrupar los
diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de
objetos de definir sus propios datos y comportamientos. Fueron refinados más tarde en
Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre
Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos
se podrían crear y modificar "sobre la marcha" (en tiempo de ejecución) en lugar de tener
un sistema basado en programas estáticos.
Evolución de los lenguajes
orientados a objetos(1)
Línea de tiempo de los
lenguajes orientados a
objetos
13. Los conceptos de la programación orientada a objetos tienen origen en Simula 67, un
lenguaje diseñado para hacer simulaciones, creado por Ole-Johan Dahl y Kristen Nygaard
del Centro de Cómputo Noruego en Oslo. En este centro, se trabajaba en simulaciones de
naves, que fueron confundidas por la explosión combinatoria de cómo las diversas
cualidades de diferentes naves podían afectar unas a las otras. La idea surgió al agrupar los
diversos tipos de naves en diversas clases de objetos, siendo responsable cada clase de
objetos de definir sus propios datos y comportamientos. Fueron refinados más tarde en
Smalltalk, desarrollado en Simula en Xerox PARC (cuya primera versión fue escrita sobre
Basic) pero diseñado para ser un sistema completamente dinámico en el cual los objetos
se podrían crear y modificar "sobre la marcha" (en tiempo de ejecución) en lugar de tener
un sistema basado en programas estáticos.
Existen varias clasificaciones de los LOO, atendiendo a criterios de construcción o
características específicas de los mismos.
Clasificación de Peter Wegner
Clasificación de Tesler
Clasificación según el origen
Clasificación de los lenguajes
orientados a objetos(1)
14. Clasificación de Peter Wegner
Lenguajes Basados en Objetos: Soportan objetos. Es decir, disponen de componentes
caracterizados por un conjunto de operaciones (comportamiento) y un estado.
Lenguajes Basados en Clases: Disponen, además de objetos, de componentes tipo clase
con operaciones y estado común.
Lenguajes Orientados al Objeto: Además de objetos y clases ofrecen mecanismos de
herencia.
Clasificación de Tesler
Clasificación de los lenguajes
orientados a objetos(2)