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

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

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

• Si un objeto A quiere que un objeto B ejecute uno de sus métodos.Mensajes (I) CONCEPTOS DE POO • Una aplicación orientada a objetos se compone de múltiples objetos que se comunican mediante mensajes. 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.

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

aunque el estado de dos objetos puede ser distinto. ordenadores. etc) de manera que los objetos de la misma clase tienen la misma estructura (estado) y el mismo comportamiento.Clases (I) CONCEPTOS DE POO • Los objetos del mundo real se pueden agrupar en tipos (clases) (personas. un objeto concreto de una clase es una instancia de la clase. • En terminología orientada a objetos. Programación Orientada a Objetos 7 . • Los objetos software también se pueden agrupar en clases utilizando un criterio similar: los objetos de la misma clase comparten estado y comportamiento. coches. lavadoras. aviones. 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.

se llaman variables de instancia. Programación Orientada a Objetos 8 .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.

Cada instancia de la clase tiene su propia copia de todas las variables de instancia definidas en la clase. la clase Coche declara las variables de instancia necesarias para almacenar el Nº de marchas. acelerar. 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.Clases (III) CONCEPTOS DE POO • Por ejemplo. frenar y cambiar de marcha. La clase también declara y proporciona la implementación de los métodos de instancia que permiten arrancar. la velocidad actual. 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 . y la marcha actual.

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

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. y a los cuales se puede acceder directamente desde la clase en oposición al acceso a los métodos de instancia.Clases (V) CONCEPTOS DE POO • Métodos de clase: son métodos que afectan a la clase en sí. 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 . • Por ejemplo. • Para usar un método de instancia. en la clase Factura se podrían tener métodos para consultar y modificar el valor del IVA aplicable a las facturas. por el contrario.

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. herencia y polimorfismo. encapsulamiento.

no dependen de otros. 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. – Aplicación de nóminas: necesita manipular la información de cada persona de manera independiente. 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. en ambas aplicaciones habrá una clase persona pero sólo la segunda tendrá variables miembro para antecedentes clínicos. 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. • 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. • El objetivo del modelo: • determina tanto el grado de detalle como la información relevante. habrá una clase plantilla pero no una clase persona. comprender y analizar pueden abstraerse como una clase. se puden describir.

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. “La abstracción y el encapsulamiento son conceptos complementarios: la abstracción se centra en el comportamiento observable de un objeto. Programación Orientada a Objetos 14 . pero cómo lo consigue queda oculto o encapsulado en el interior de la clase. mientras que el encapsulamiento se centra en la implementación que da lugar a ese comportamiento” (Booch).

desapilar un elemento y consultar el estado de la pila (vacía o no vacía). • Si se mantiene el comportamiento. • Esto es posible porque desde el exterior es invisible la implementación de la clase Pila. apilar un elemento. Programación Orientada a Objetos 15 .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. • Internamente se utiliza un vector para almacenar los elementos de la pila. 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. y permite crear una pila. • Ejemplo: • Supongamos que la clase Pila representa a pilas de números enteros.

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

El método de la superclase Figura que calcule el área del polígono deberá “redefinirse” en cada una de las subclases. • Se define la superclase Reloj con variables para almacenar la hora y la fecha actuales. 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. Programación Orientada a Objetos 17 • Por ejemplo. la clase RelojDespertador aumenta la estructura con una variable para almacenar la hora de la alarma.Herencia (II) CONCEPTOS DE POO • Habitualmente una subclase aumenta o redefine la estructura y el comportamiento de su superclase. • La clase RelojDespertador aumenta el comportamiento de la clase Reloj ya que es capaz de emitir una alarma a una hora previamente prefijada. entre los cuales está el método que permite calcular el área del polígono. • Por ejemplo. para ello. . y los métodos que permiten fijar la hora y fijar al fecha. • Se puede construir la subclase RelojDespertador a partir de Reloj utilizando la herencia. • 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. • Se define la superclase Polígono con distintas variables y métodos.

• La especialización consistirá en el aumento de la estructura y/o el comportamiento. Por ejemplo: • • • • Un coche de carreras “es-un” coche. • 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. • La subclase RelojDespertador de ejemplos anteriores aumenta la estructura y el comportamiento de la superclase Reloj.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”. Una nevera “es-un” electrodoméstico. Programación Orientada a Objetos 18 . Un árbol binario “es-un” árbol. • La subclases Triángulo y Pentágono redefinen el comportamiento de la superclase Polígono. Un triángulo “es-un” polígono. su redefinición o su aumento y redefinición.

– en C++ sí se permite pero utilizando calificación explícita. puede ocurrir que una subclase herede de dos superclases que tienen atributos o métodos con el mismo nombre.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 . • Este tipo de herencia es conceptualmente correcta pero introduce ciertas complejidades en los lenguajes de programación. • Herencia múltiple: una subclase hereda de más de una superclase. • Por ejemplo. 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. • 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.

Programación Orientada a Objetos 20 . • Ligadura (enlace) dinámica o tardía: los tipos de las variables y expresiones no se conocen hasta el momento de la ejecución.Ligadura estática y dinámica CONCEPTOS DE POO • En los lenguajes de poo objeto de este curso. 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.

• Esto sólo está permitido en poo cuando la variable que almacenará objetos de distintos tipos es de una clase más general. • 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.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. Programación Orientada a Objetos 21 .

cualquier mensaje que invoque el método área de mi_poligono invocará en este instante. • Se definen las subclases Triángulo y Pentágono. 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 . durante la ejecución del programa. • Supongamos que. puede recibir mensajes de otros objetos. la versión implementada en la clase Triángulo • Si posteriormente a mi_poligono se le asigna un objeto de tipo Pentágono. a mi_poligono se le asigna un objeto de la clase Triángulo. supongamos que se llama mi_poligono. puede declarar una variable de tipo Polígono. y en cada una de ellas se redefine el método área: hay distintas versiones del método área.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. ya que “es un objeto”. • Un programa que utilice esta jerarquía de clases. la variable mi_poligono puede almacenar objetos de estas dos últimas clases. • mi_poligono. • Como Polígono es una clase más general queTriángulo y Pentagono.

• Un país tiene muchas ciudades. Existe un relación entre la clase Empleado y la clase Compañía. Existe una relación entre las clase Ventana y la clase Menú. • Una frase pertenece a un párrafo. Programación Orientada a Objetos 23 . Por ejemplo: • Un empleado trabaja para una compañía. Estas relaciones pueden distinguirse por su significado o semántica. Existe un relación entre la clase País y la clase Ciudad. 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. • Una ventana tiene un menú.

• 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 Persona se relacionan varias instancias de la clase Compañía. • Con una única instancia de la clase Empresa se relacionan varias instancias de la clase Persona.. Programación Orientada a Objetos 24 . • 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).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. • Un empleado trabaja para una compañía. • 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 Compañía se relacionan varias instancias de la clase Empleado.

• 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. Una nevera “es-un” electrodoméstico. • Una Cadena (comercio) tiene varios Locales. Un árbol binario “es-un” árbol. Programación Orientada a Objetos 25 . • Asociación • Es una relación que describe vínculos entre objetos.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. • Un Cliente tiene una o más Cuentas (bancarias) • Agregación • Es una relación de tipo “todo-parte”. • Un País tiene muchas Ciudades.

Un Pedido tiene varias Lineas. Los tiempos de vida de las partes y el todo coinciden. • 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. El todo es responsable de la creación y de la destrucción de las partes. Una Ventana tiene una Barra de título y dos Scrollbar. Un Círculo está formado por muchos Puntos. Programación Orientada a Objetos 26 . Una Clase tiene varios Atributos. Una parte no puede pertenecer a dos composiciones al mismo tiempo. Es similar a las relaciones de composición físicas.Relaciones entre objetos (IV) CONCEPTOS DE POO • Composición • • • • • • • • • Es una relación de tipo “todo-parte” más fuerte que la agregación.

puede resultar conveniente. Programación Orientada a Objetos 27 . • A estas clases se las conoce como clases de asociación • Por ejemplo. para la biblioteca. • En el contexto de una biblioteca. sea relevante tener constancia de la fecha de inicio y finalización del préstamo para poder establecer posibles sanciones por entregas retrasadas. • En este caso. pueden existir dos clases Libro y Cliente que estén relacionadas mediante una asociación Préstamo. • Puede ser conveniente definir para la relación Préstamo la clase Préstamo que tendrá las variables miembros necesarias. definir una clase para contener esa estructura. 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.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. Fecha_inicio y Fecha_fin. • Es posible que. por ejemplo.

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

Sign up to vote on this title
UsefulNot useful