EL PARADIGMA ORIENTADO A OBJETOS

Metodología de desarrollo de aplicaciones en la cual éstas se organizan como colecciones cooperativas de objetos, cada uno de los cuales representan una instancia de alguna clase, y cuyas clases son miembros de jerarquías de clases unidas mediante relaciones de herencia. (Grady Booch)
Cambia…

  • El modo de organización del programa:

                    En clases (datos+operaciones sobre datos).

  • El concepto de ejecución de programa

                     Paso de mensajes

No basta con utilizar un lenguaje OO para programar orientado a objetos.

Para eso hay que seguir un paradigma de programación OO.

¿POR QUE LA POO ES TAN POPULAR?

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.
UN NUEVO MODO DE VER EL MUNDO


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 comunidades

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
  1. A un objeto se le envían mensajes para que realice una determinada 
    acción.
  2. El objeto selecciona un método apropiado para realizar dicha acción.
  3. A este proceso se le denomina Paso de mensajes
  4. Sintaxis de un mensaje:
receptor.selector(argumentos)

unJuego.mostrarCarta(laCarta,42,47)


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.
Un ejemplo:
JuegoDeCartas juego = new Poker … ó … new Mus … ó …

juego.repartirCartas(numeroDeJugadores)20

Responsabilidades
  • El comportamiento de cada objeto se describe en términos de responsabilidades
    • Mayor independencia entre los objetos
  • Protocolo: Conjunto de responsabilidades de un objeto
  • POO vs. programación imperativa
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).
  • Un objeto es una instancia de una clase.
  • El método invocado por un objeto en respuesta a un 
    mensaje viene determinado por la clase del objeto 
    receptor.
Jerarquías 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
Supongamos que en este ejemplo:

JuegoDeCartas juego = new Poker … ó … new Mus … ó …
juego.repartirCartas(numeroDeJugadores)

La asignación a la variable ‘juego’ depende de la interacción con el usuario 
(tiempo de ejecución). El mensaje ‘repartirCartas’ deberá tener enlace 
dinámico.





No hay comentarios:

Publicar un comentario

Archivo del blog