domingo, 11 de septiembre de 2016

EL PARADIGMA ORIENTADO A OBJETOS

Definición: Metodología de desarrollo de aplicaciones en la cual éstas se organizan como colleciones cooperativas de objetos, cada uno de los cuales representan una instancia de alguna clase, y curas clases son miembros de jerarquías de clases unidad mediante relaciones de herencia. (Grady Booch)

POO se ha convertido durante las pasadas dos décadas en el paradigma de programación dominante, y en una herramienta para resolver la llamada crisis del software.


Motivos

  • POO escala muy bien.
  • POO proporciona un modelo de abstracción que razona con técnicas que la gente usa para resolver problemas (metáforas) “Es más fácil enseñar Smalltalk a niños que a programadores” (Kay 77)
  •  Gran desarrollo de herramientas OO (IDEs, librerías,…) en todos los dominios.


Ejemplo: Supongamos que Luis quiere enviar flores a Alba, que vive en otra ciudad.

Luis va a la floristería más cercana, regentada por un florista llamado Pedro.
Luis le dice a Pedro qué tipo de flores enviar a Alba y la dirección de recepción.

El mecanismo utilizado para resolver el problema es:
  • Encontrar un agente apropiado (Pedro).
  • Enviarle un mensaje conteniendo la petición (envía flores a Alba).
  • Es la responsabilidad de Pedro satisfacer esa petición.
  • Para ello, es posible que Pedro disponga de algún método (algoritmo o conjunto de operaciones) para realizar la tarea.

Luis no necesita (ni le interesa) conocer el método particular que Pedro utilizará para satisfacer la petición: esa información está OCULTA.

Así, la solución del problema requiere de la cooperación de varios individuos para su solución.

La definición de problemas en términos de responsabilidades incrementa el nivel de abstracción y permite una mayor independencia entre objetos.


Mundo estructurado en:
  • Agentes y comunidades
  • Mensajes y métodos
  • Responsabilidades
  • Objetos y clases
  • Jerarquías de clases
  • Enlace de métodos
Agentes y comunidad
Un programa OO se estructura como una comunidad de agentes que interaccionan (OBJETOS). Cada objeto juega un rol en la solución del problema. Cada objeto proporciona un servicio o realiza una acción que es posteriormente utilizada por otros miembros de la comunidad. 

       Mensajes y métodos


  • A un objeto se le envían mensajes para que realice una determinada acción. 
  • El objeto selecciona un método apropiado para realizar dicha acción. 
  • A este proceso se le denomina Paso de mensajes 
  • Sintáxis de un mensaje:  receptor.selector(argumentos)

Mensajes y métodos

Un mensaje se diferencia de un procedimiento/llamada a función en dos aspectos:




  • En un mensaje siempre hay un receptor, lo cual no ocurre en una llamada a procedimiento.
  • La interpretación de un mismo mensaje puede variar en función del receptor del mismo.
  • Por tanto un nombre de procedimiento/función se identifica 1:1 con el código a ejecutar, mientras que un mensaje no.

      Objetos y clases
  • Un objeto es una encapsulación de un estado (valores de los datos) y comportamiento (operaciones). 


  • Los objetos se agrupan en categorías (clases).

  1. Un objeto es una instancia de una clase. 
  2. El método invocado por un objeto en respuesta a un mensaje viene determinado por la clase del objeto receptor. 


Jerarqas de clases
En la vida real, mucho conocimiento se organiza en términos de jerarquías. Este principio por el cual el conocimiento de una categoría más general es aplicable a una categoría más específica se denomina generalización, y su implementación en POO se llama herencia.
  •  Pedro, por ser florista, es un dependiente (sabe vender y cobrar)
  •  Los dependientes normalmente son humanos (pueden hablar)
  •  Los humanos son mamíferos (Pedro respira oxígeno…)

 Las clases de objetos pueden ser organizadas en una estructura jerárquica de herencia. Una clase ‘hijo’ hereda propiedades de una clase ‘padre’ más alta en la jerarquía (más general):




 Enlace de métodos


Instante en el cual una llamada a un método es asociada al código que se debe ejecutar
  • Enlace estático: en tiempo de compilación
  • Enlace dinámico: en tiempo de ejecución
INTRODUCCIÓN AL PARADIGMA ORIENTADO A OBJETOS
Cristina Cachero y Pedro J. Ponce de León
Sesión 1