Introducción (I

)
CONCEPTOS DE POO

• La programación orientada a objetos es un paradigma de programación que utiliza objetos que se comunican a través de mensajes para la solución de problemas. • Algunos lenguajes de programación orientados a objetos (orden cronológico)
• Simula: 1967 (antecedente de todos, por Dahl, Myhrhaug y Nygard) • Smalltalk: 1980 (lenguaje poo puro desarrollado en Xerox Palo Alto Reasearch Center Learning Research Group) • Eiffel: ‘80 (por Bertrand Meyer, orientado a objetos y con técnicas de verificación de programas y herramientas de ingeniería) • C++: 1983-1990 (por Bjarne Stroustrup) • Object Pascal: 1986 (esqueleto simplificado de lenguaje poo por desarrolladores de Apple Computer y Niklaus Wirth) • LISP/CLOS: 1988 (diseñado por un comité presidido por Daniel Bobrow a partir de la ACM Lisp and Fuctional Programming Conference de 1986) • Java: 1995, 1997, 1998 (objeto de este curso)
Programación Orientada a Objetos 1

Objetos (I)
CONCEPTOS DE POO

• Los objetos del mundo real comparten tres características:
• estado o estructura: por ejemplo, en un coche el nº de marchas, la velocidad actual, la marcha actual, etc... • comportamiento: por ejemplo, un coche puede arrancar, acelerar, frenar, cambiar marcha, etc.... • identidad: aquello que distingue a un objeto de todos los demás, por ejemplo, si la estructura de una persona es su nombre y edad, es posible que haya dos juanes de 20 años que no son la misma persona.

• Los objetos software también tienen esas características:
• estado: se almacena en un conjunto de variables. • comportamiento: se implementa con métodos. Un método es una función (subrutina, subprograma, procedimiento). • identidad: garantizada por los sistemas de poo.

Un objeto es una agrupación de variables y métodos distinguible de todos los demás (identidad propia) desde su creación.
Programación Orientada a Objetos 2

) se podrían representar mediante objetos software. • en una aplicación de gestión de personal de una empresa. rectas. Programación Orientada a Objetos 3 . los coches del mundo real se podrían representar mediante objetos software.. es habitual representar con objetos (llamados eventos) las acciones realizadas por el usuario (ratón y teclado). las posibles estructuras candidatas (no se corresponden con ningún objeto real) podrían represantarse mediante objetos. • en interfaces gráficas de usuario. las figuras geométricas (polígonos. • en una aplicación de dibujo..Objetos (II) CONCEPTOS DE POO • Los objetos software se utilizan para: • representar objetos del mundo real. • en un juego de carreras de coches. los trabajadores de la empresa se podrían representar mediante objetos software. • representar conceptos abstractos.. • en un entorno de simulación e identificación de la estructura tridimensional de una proteína.

Variables Métodos (comportamiento) (estado) Programación Orientada a Objetos 4 .Objetos (III) CONCEPTOS DE POO • Representación visual de un objeto software.

mensaje objeto A objeto B • Cada mensaje tiene tres componentes: • el objeto destinatario del mensaje • el nombre del método a ejecutar • los parámetros (si existen) del método Programación Orientada a Objetos 5 . el objeto A le envía un mensaje al objeto B.Mensajes (I) CONCEPTOS DE POO • Una aplicación orientada a objetos se compone de múltiples objetos que se comunican mediante mensajes. • Si un objeto A quiere que un objeto B ejecute uno de sus métodos.

en un juego de ordenador de carreras de coches. cada piloto se comunica con su coche.Mensajes (II) CONCEPTOS DE POO • Por ejemplo. Mensaje sin parámetros arrancar piloto coche Mensaje con parámetros cambiar marcha (2) piloto Programación Orientada a Objetos coche 6 .

Una clase es un patrón o prototipo que define las variables y los métodos comunes a todos los objetos de un cierto tipo. Programación Orientada a Objetos 7 . etc) de manera que los objetos de la misma clase tienen la misma estructura (estado) y el mismo comportamiento. lavadoras. coches. aviones. • Los objetos software también se pueden agrupar en clases utilizando un criterio similar: los objetos de la misma clase comparten estado y comportamiento. aunque el estado de dos objetos puede ser distinto. un objeto concreto de una clase es una instancia de la clase.Clases (I) CONCEPTOS DE POO • Los objetos del mundo real se pueden agrupar en tipos (clases) (personas. ordenadores. • En terminología orientada a objetos.

Clases (II) CONCEPTOS DE POO • Las variables en las que se almacena el estado de un objeto. • Los métodos que implementan el comportamiento de un objeto se llaman métodos de instancia. Programación Orientada a Objetos 8 . se llaman variables de instancia.

frenar y cambiar de marcha. Cada instancia de la clase tiene su propia copia de todas las variables de instancia definidas en la clase. acelerar. La clase también declara y proporciona la implementación de los métodos de instancia que permiten arrancar. cambiar de marcha arrancar frenar Nº de marchas velocidad actual marcha actual acelerar Coche Después de crear la clase Coche se pueden crear los objetos de la clase. cambiar de marcha arrancar frenar Nº de marchas =5 velocidad actual =80 marcha actual =3 cambiar de marcha arrancar frenar Nº de marchas =4 velocidad actual =120 marcha actual = 4 acelerar acelerar coche 1 Programación Orientada a Objetos coche 2 9 . la velocidad actual. la clase Coche declara las variables de instancia necesarias para almacenar el Nº de marchas. y la marcha actual.Clases (III) CONCEPTOS DE POO • Por ejemplo.

esta modificación afecta a todos los objetos de la clase. Si un objeto modifica el valor de una variable de clase. Programación Orientada a Objetos 10 .Clases (IV) CONCEPTOS DE POO • Variables de clase: las clases. ya que este valor es común a todos los objetos de la clase Factura. la clase Ventana de una iterfaz gráfica puede declarar variables de clase para almacenara el número de ventanas visibles. se puede utilizar una variable de clase. • Si en una aplicación se quiere contabilizar el número de instancias que hay de una determinada clase. el tamaño por omisión y el tamaño máximo de cualquier ventana. que contienen información común para todas las instancias de la clase. también pueden definir variables de clase. en una aplicación de facturación. además de definir las variables de instancia. la clase Factura puede tener una variable de clase con el IVA que se aplica a las facturas. y no sería eficiente que cada uno de los objetos de la clase tuviera una copia. • Por ejemplo. Por ejemplo.

ya que este valor tiene sentido en sí mismo y no está condicionado a la existencia de objetos de la clase. se necesita obligatoriamente que se cree un objeto de la clase que reciba el mensaje de ese método. que se realiza siempre a través de los objetos • Es importante señalar que para invocar un método de clase no es necesario haber creado ningún objeto que reciba como mensaje una invocación de ese método. Programación Orientada a Objetos 11 . en la clase Factura se podrían tener métodos para consultar y modificar el valor del IVA aplicable a las facturas. • Por ejemplo. • Para usar un método de instancia.Clases (V) CONCEPTOS DE POO • Métodos de clase: son métodos que afectan a la clase en sí. por el contrario. y a los cuales se puede acceder directamente desde la clase en oposición al acceso a los métodos de instancia.

Programación Orientada a Objetos 12 POLIMORFISMO ABSTRACCIÓN HERENCIA .Conceptos fundamentales del modelo de objetos CONCEPTOS DE POO MODELO DE OBJETOS ENCAPSULAMIENTO Hay cuatro conceptos fundamentales en el paradigma de orientación a objetos: abstracción. encapsulamiento. herencia y polimorfismo.

es una herramienta en el proceso de creación del modelo a partir de un problema real que está determinada por los siguientes factores: • Identificación de clases: los conceptos que tienen entidad en sí mismos. habrá una clase persona – Con el mismo grado de detalle de la aplicación de nóminas. • El objetivo del modelo: • determina tanto el grado de detalle como la información relevante. – Aplicación de nóminas: necesita manipular la información de cada persona de manera independiente. en ambas aplicaciones habrá una clase persona pero sólo la segunda tendrá variables miembro para antecedentes clínicos. se puden describir. no dependen de otros. Programación Orientada a Objetos 13 .Abstracción CONCEPTOS DE POO • La abstracción consiste en extraer los aspectos esenciales de una entidad e ignorar sus propiedades accidentales. habrá una clase plantilla pero no una clase persona. comprender y analizar pueden abstraerse como una clase. • Ejemplos: – Aplicación de macroeconomía: los empleados de una empresa pueden no ser importantes como individuos porque sólo interese su comportamiento global como plantilla. los antecedentes clínicos de una persona son irrlevantes en una aplicación de préstamo bibliotecario pero fundamentales en una aplicación hospitalaria de ayuda al diagnóstico de enfermedades.

“La abstracción y el encapsulamiento son conceptos complementarios: la abstracción se centra en el comportamiento observable de un objeto. sirve para separar la interfaz contractual de una abstracción y su implantación” (Booch) • Cada clase “firma un contrato con el exterior” comprometiéndose a exhibir un determinado comportamiento.Encapsulamiento (I) CONCEPTOS DE POO “El encapsulamiento es el proceso de almacenar en un mismo compartimento los elementos de una abstracción que constituyen su estructura y su comportamiento. mientras que el encapsulamiento se centra en la implementación que da lugar a ese comportamiento” (Booch). Programación Orientada a Objetos 14 . pero cómo lo consigue queda oculto o encapsulado en el interior de la clase.

y permite crear una pila. • Si se mantiene el comportamiento.Encapsulamiento (II) CONCEPTOS DE POO • Una de las grandes ventajas del encapsulamiento es que posibilita que la implementación de un objeto se pueda cambiar sin afectar a las aplicaciones que lo utilizan. desapilar un elemento y consultar el estado de la pila (vacía o no vacía). se podría cambiar la representación interna de los datos de la pila y sustituir el vector por una lista sin afectar a las aplicaciones que utilizan la clase Pila. • Internamente se utiliza un vector para almacenar los elementos de la pila. Programación Orientada a Objetos 15 . • Esto es posible porque desde el exterior es invisible la implementación de la clase Pila. • Ejemplo: • Supongamos que la clase Pila representa a pilas de números enteros. apilar un elemento.

de manera que la subclase hereda la estructura (estado) de la superclase a través de las variables. y hereda el comportamiento a través de los métodos. Programación Orientada a Objetos 16 . acelerar. De esta manera. frenar y cambiar de marcha. la velocidad actual. se puede construir la subclase CocheCarreras a partir de Coche utilizando la herencia. • Por ejemplo.Herencia (I) CONCEPTOS DE POO • La herencia es el mecanismo que permite definir una clase (subclase) a partir de otra clase (superclase). y los métodos que permiten arrancar. la clase CocheCarreras hereda las variables y los métodos de la clase Coche. si se define la superclase Coche con las variables para almacenar el Nº de marchas. y la marcha actual.

• Se definen las subclases Triángulo y Pentágono • En cada una de ellas la fórmula matemática para el cálculo del área es diferente.Herencia (II) CONCEPTOS DE POO • Habitualmente una subclase aumenta o redefine la estructura y el comportamiento de su superclase. Programación Orientada a Objetos 17 • Por ejemplo. la clase RelojDespertador aumenta la estructura con una variable para almacenar la hora de la alarma. • Por ejemplo. . • Se define la superclase Reloj con variables para almacenar la hora y la fecha actuales. entre los cuales está el método que permite calcular el área del polígono. y los métodos que permiten fijar la hora y fijar al fecha. • La clase RelojDespertador aumenta el comportamiento de la clase Reloj ya que es capaz de emitir una alarma a una hora previamente prefijada. • Se define la superclase Polígono con distintas variables y métodos. • Se puede construir la subclase RelojDespertador a partir de Reloj utilizando la herencia. El método de la superclase Figura que calcule el área del polígono deberá “redefinirse” en cada una de las subclases. otra para alamacenar el estado de la alarma (activada/desactivada) y los métodos que permiten fijara la hora de la alarma y activarla o desactivarla. para ello.

Una nevera “es-un” electrodoméstico. Un triángulo “es-un” polígono. Por ejemplo: • • • • Un coche de carreras “es-un” coche. • La subclases Triángulo y Pentágono redefinen el comportamiento de la superclase Polígono.Herencia (III) CONCEPTOS DE POO • Que una clase sea subclase de una superclase significa (semántica) que es un caso especial de la misma y por eso a esta relación entre clases se la conoce con el nombre “es-un”. su redefinición o su aumento y redefinición. Un árbol binario “es-un” árbol. • La subclase RelojDespertador de ejemplos anteriores aumenta la estructura y el comportamiento de la superclase Reloj. • La especialización consistirá en el aumento de la estructura y/o el comportamiento. Programación Orientada a Objetos 18 . • La herencia genera una jerarquía de generalización/especialización en la que una subclase especializa el comportamiento o la estructura más general de su superclase.

puede ocurrir que una subclase herede de dos superclases que tienen atributos o métodos con el mismo nombre. • Por ejemplo. • Este tipo de herencia es conceptualmente correcta pero introduce ciertas complejidades en los lenguajes de programación. • Es fundamental señalar que la herencia no se limita a un número determinado de niveles por lo que todas los objetos de una aplicación heredarán de las superclases más altas de la jerarquía de las que hereden directa o indirectamente.Herencia (IV) CONCEPTOS DE POO • Se pueden distinguir distintos tipos de herencia en cuanto al número de superclases de una subclase: • Herencia simple: una subclase hereda solamente de una superclase. Programación Orientada a Objetos 19 . • Herencia múltiple: una subclase hereda de más de una superclase. – en C++ sí se permite pero utilizando calificación explícita. Esta colisión de nombres se resuelve de distinta manera en los lenguajes orientados a objetos: – en Java no se permite la herencia múltiple.

Ligadura estática y dinámica CONCEPTOS DE POO • En los lenguajes de poo objeto de este curso. Programación Orientada a Objetos 20 . aparecen los siguientes conceptos relacionados con el momento en el que los nombres se ligan con sus tipos: • Ligadura (enlace) estática o temprana: se fijan los tipos de todas las variables y expresiones en tiempo de compilación. • Ligadura (enlace) dinámica o tardía: los tipos de las variables y expresiones no se conocen hasta el momento de la ejecución.

Polimorfismo (I) CONCEPTOS DE POO • Es la característica más potente de estos lenguajes que nace de la interacción de la herencia y el enlace dinámico. • Esto sólo está permitido en poo cuando la variable que almacenará objetos de distintos tipos es de una clase más general. Programación Orientada a Objetos 21 . • Respecto al enlace dinámico: • Es importante señalar que esta técnica tiene interés cuando variables de un tipo pueden almacenar objetos de otros tipos.

supongamos que se llama mi_poligono. a mi_poligono se le asigna un objeto de la clase Triángulo. puede declarar una variable de tipo Polígono. puede recibir mensajes de otros objetos. durante la ejecución del programa. • Se definen las subclases Triángulo y Pentágono.Polimorfismo (II) CONCEPTOS DE POO • Expliquemos ese concepto mediante un ejemplo: • Se define la superclase Polígono con el método área que permite calcular el área del polígono. la versión implementada en la clase Triángulo • Si posteriormente a mi_poligono se le asigna un objeto de tipo Pentágono. • Un programa que utilice esta jerarquía de clases. • Supongamos que. ya que “es un objeto”. cualquier mensaje que invoque el método área de mi_poligono invocará en este instante. • mi_poligono. la variable mi_poligono puede almacenar objetos de estas dos últimas clases. cualquier mensaje que invoque el método area de mi_poligono invocará la versión del método implementada en Pentágono Programación Orientada a Objetos 22 . • Como Polígono es una clase más general queTriángulo y Pentagono. y en cada una de ellas se redefine el método área: hay distintas versiones del método área.

Existe una relación entre las clase Ventana y la clase Menú. • Un país tiene muchas ciudades. Existe una relación entre la clase Frase y la clase Párrafo.Relaciones entre objetos (I) CONCEPTOS DE POO • Se puede modelar las relaciones que se identifiquen entre las clases. Programación Orientada a Objetos 23 . Por ejemplo: • Un empleado trabaja para una compañía. Existe un relación entre la clase País y la clase Ciudad. • Una frase pertenece a un párrafo. • Una ventana tiene un menú. Estas relaciones pueden distinguirse por su significado o semántica. Existe un relación entre la clase Empleado y la clase Compañía.

• Un empleado trabaja para una compañía.. • Con una única instancia de la clase Ciudad se relaciona una instancia de la clase País. • Las personas tiene acciones de las empresas. • Con una única instancia de la clase Compañía se relacionan varias instancias de la clase Empleado. • Con una única instancia de la clase Empresa se relacionan varias instancias de la clase Persona.Relaciones entre objetos (II) CONCEPTOS DE POO • Multiplicidad: especifica el número de instancias de una clase que pueden estar relacionadas con una única instancia de una clase asociada. Programación Orientada a Objetos 24 . • Los países tienen una ciudad como capital • Con una única instancia de la clase País se relaciona una instancia de la clase Ciudad. • Con una única instancia de la clase Persona se relacionan varias instancias de la clase Compañía. • Con una única instancia de la clase Empleado se relaciona una instancia de la clase Compañía (siempre y cuando un empleado solo pueda trabajar en una compañía).

• Una Cadena (comercio) tiene varios Locales. • Un Cliente tiene una o más Cuentas (bancarias) • Agregación • Es una relación de tipo “todo-parte”. • Realmente la diferencia entre una relación de agregación y una de asociación es una cuestión de “preferencia” por parte del analista. Un árbol binario “es-un” árbol. Programación Orientada a Objetos 25 . • Un País tiene muchas Ciudades. • Asociación • Es una relación que describe vínculos entre objetos. Una nevera “es-un” electrodoméstico.Relaciones entre objetos (III) CONCEPTOS DE POO • Las relaciones entre los objetos se pueden clasificar de acuerdo a su semántica: • Generalización • • • • Relación de tipo “es-un” (herencia). Un triángulo “es-un” polígono.

Programación Orientada a Objetos 26 . • Dependencia • Es un aspecto semántico que se puede identificar en muchos tipos de relaciones y se refiere al hecho de que los cambios en unos objetos afectan a otros. Una Ventana tiene una Barra de título y dos Scrollbar. Un Pedido tiene varias Lineas. Una Clase tiene varios Atributos. Un Círculo está formado por muchos Puntos. El todo es responsable de la creación y de la destrucción de las partes. Es similar a las relaciones de composición físicas. Los tiempos de vida de las partes y el todo coinciden. Una parte no puede pertenecer a dos composiciones al mismo tiempo.Relaciones entre objetos (IV) CONCEPTOS DE POO • Composición • • • • • • • • • Es una relación de tipo “todo-parte” más fuerte que la agregación.

definir una clase para contener esa estructura. • Puede ser conveniente definir para la relación Préstamo la clase Préstamo que tendrá las variables miembros necesarias. • Es posible que.Relaciones entre objetos (V) CONCEPTOS DE POO • Variables miembro de una relación y clases de asociación: de forma similar a la manera en la que las variables miembro de una clase describen su estructura. para la biblioteca. sea relevante tener constancia de la fecha de inicio y finalización del préstamo para poder establecer posibles sanciones por entregas retrasadas. por ejemplo. Programación Orientada a Objetos 27 . • En el contexto de una biblioteca. puede resultar conveniente. pueden existir dos clases Libro y Cliente que estén relacionadas mediante una asociación Préstamo. • A estas clases se las conoce como clases de asociación • Por ejemplo. hay ocasiones en las que existe cierta información relevante de una relación entre clases • Las relaciones pueden especificar variables miembro para contener esta información. • En este caso. Fecha_inicio y Fecha_fin.

• Algunos elementos: • • • • • • Clases Objetos Relaciones Multiplicidad Diagramas de clases Diagramas de objetos Programación Orientada a Objetos 28 . visualizar. construir y documentar los componentes de un sistema software.UML (I) CONCEPTOS DE POO • Es un lenguaje de modelado visual de propósito general que se utiliza para especificar. • Ha sido adoptado con generalidad en el ámbito del desarrollo de software orientado a objetos.

Sign up to vote on this title
UsefulNot useful