Introducción a la POO Objetivos " Definiciones "
" " " "
Clase Objeto Mensajes y métodos
Características " " " "
Abstracción Herencia Paso de mensajes Otras características
Este documento ofrece una pequeña base teórica sobre la Programación Orientada a Objetos. Se pueden encontrar más materiales en: http://www.usebox.net/jjm/docencia Última modificación: 21 Abril 2003
© 2003 Juan J. Martínez <
[email protected]> Se permite la copia textual y distribución de este documento en su totalidad, por cualquier medio, siempre y cuando se mantenga esta nota de copyright..
1
Objetivos La Programación Orientada a Objetos (POO) propone un nuevo paradigma de programación diferente al más extendido de la programación imperativa. Se basa en objetos y en sus relaciones, aplicando el concepto de responsabilidad. Es el propio objeto el que es responsable de su funcionamiento. Programación Imperativa OBJETO: Coche ACCIÓN: Reparar
Programación Orientada a Objetos OBJETO: Coche ACCIÓN: Reparar
El programador debe saber como reparar el coche.
Es el propio coche que sabe como debe repararse, solo hemos de pasarle el mensaje.
El paradigma Orientado a Objetos no solo se aplica a la programación, sino también al diseño y al análisis. Los principales beneficios de la POO son:
Reusabilidad: Los sistemas Orientados a Objetos permiten la reutilización de los objetos que los componen, haciendo posible crear nuevos sistemas basados en sistemas existentes.
Extensibilidad: Los sistemas Orientados a Objetos pueden extenderse con facilidad, sin tener que tocar los módulos existentes. Esta extensibilidad complementa a la reusabilidad.
2
Definición: Clase Se trata de una descripción de un tipo de objeto en base a unos atributos y unos servicios. Los atributos compartidos por todos los objetos pertenecientes a una clase se conocen como variables de clase, mientras que los atributos propios de cada instancia (es decir, de cada objeto independiente perteneciente a esa clase) se conocen como variables de instancia. Los servicios que proporcionan se conocen como métodos. Dependiendo de los mecanismos que proporcione el lenguaje Orientado a Objetos, tenemos: Por objeto:
Una parte privada: −variables de instancia
Una parte pública: −métodos
Por clase:
Solo parte privada: variables de clase
3
Definiciones Objeto Un objeto es una entidad real o abstracta con un papel bien definido en el dominio del problema. El objeto siempre pertenece a una clase (o clases) que define sus estados y comportamientos para con otros objetos.
Mensajes y métodos El mensaje es la acción que realiza un objeto sobre otro, la petición de servicio. El método es la respuesta al mensaje, la forma proporcionar el servicio. Método
Objeto
Mensaje
Existe una clasificación de los métodos según su objetivo: "
Constructores " Destructores " Iteradores
"
Selectores " Modificadores " Consultivos
Objeto
4
Características Abstracción La abstracción que proporciona la POO se basa en la posibilidad de encapsulación, que consiste en agrupar bajo la misma entidad los datos y las funciones o métodos que trabajan con esos datos. La agrupación de las funciones que manejan una serie de datos con los propios datos favorece la independencia de la implementación.
Herencia Es un mecanismo para relacionar clases en base a su similitud. Se utiliza para construir clases nuevas a partir de otras clases ya existentes, de forma que las nuevas clases incorporan la estructura y la funcionalidad de las clases de las que heredan. Cuando una clase hereda de otra se dice que es una subclase, clase derivada o clase hija. La clase original se llama entonces superclase, clase base o clase padre. La herencia aporta una serie de beneficios:
Y unos inconvenientes:
"
"
Reusabilidad " Compartir Código " Polimorfismo " Prototipado rápido " Gestión de la información
Mayor tamaño de los programas " Sobrecarga debido al paso de mensajes " Menor velocidad de ejecución (cada vez menos) " Aumento de la complejidad de los programas
5
Herencia Hay dos clases de herencia según la relación entre las clases: la relación Es Un y la relación Tiene Un. En el siguiente ejemplo una clase coche puede heredar de una clase vehículo o de una clase motor.
Vehículo
Motor
Coche
Coche
Herencia Es Un
Herencia Tiene Un
Se puede emplear la capacidad de herencia de un Lenguaje OO para: "
Especialización: uso directo de la relación Es Un. " Generalización: amplia el comportamiento. " Variación: implementaciones similares. " Construcción: cambios en el interfaz. Cuando se hereda una clase de otra se puede: "
Añadir nuevos métodos. " Modificar métodos heredados.
"
Especificación: interfaz común, abstracción incompleta. " Limitación: especialización de la especificación. " Extensión: añade capacidades nuevas. " Combinación: herencia múltiple.
6
Paso de mensajes Los servicios que proporcionan los objetos son accesibles mediante el paso de mensajes empleando métodos de los objetos. Un método NO es una función. Algunas diferencias generales: "
Una función tiene 0 o más argumentos, el método tiene SIEMPRE 1 o más. Ese argumento obligatorio es el objeto que debe procesar el mensaje. " Con el nombre de una función disponemos de una implementación, con un método tenemos la posibilidad de una implementación por objeto (empleando el mismo nombre). En la POO se definen dos tipos de interacciones con las clases (de objetos): "
El consumidor de clases: solo entiende de las operaciones que puede realizar con los objetos, no cómo se realizan. " El proveedor de clases: se encarga de la implementación interna de la clase y, en caso de usar herencia, puede ser a su vez consumidor de clases. La ejecución de una aplicación en un lenguaje OO suele comenzar con la creación de un objeto, seguida en algunos casos de la ejecución de un método. En la POO no existen, por lo general, subprogramas libres no ligados a un objeto. Algunos lenguajes OO no soportan la creación de subprogramas libres, e incluso obligan a heredar las nuevas clases de una clase base.
7
Otras características Enlace dinámico Se entiende como los mecanismos que permiten que el tipo de una variable o el código a ejecutar como respuesta a la llamada a una función no se conocen hasta el momento de su ejecución.
Polimorfismo Se entiende como una clase o método que puede tener distintas formas con el mismo nombre: "
Polimorfismo puro: Una función con argumentos de distinto tipo. Existe una única función con diferentes interpretaciones de la misma en función de los argumentos que reciba. " Sobrecarga: Varias funciones con el mismo nombre. Existen diferentes funciones con distintos argumentos e implementaciones, pero el mismo nombre. " Sustitución: Caso especial de sobrecarga cuando una clase define un método y al menos una subclase define un método con el mismo nombre que los sustituye.
Características avanzadas Son características que no todos los LOO soportan: concurrencia (hilos de ejecución), persistencia, genericidad, recolector de basura, etc.
FIN