Conceptos Programación Orientada a Objetos

28
Programación Orientada a Objetos 1 CONCEPTOS DE POO Introducción (I) 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)

Transcript of Conceptos Programación Orientada a Objetos

Page 1: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 1

CONCEPTOS DE POO

Introducción (I)

• La programación orientada a objetos es un paradigma deprogramación que utiliza objetos que se comunican a través demensajes para la solución de problemas.

• Algunos lenguajes de programación orientados a objetos (ordencronoló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 ProgrammingConference de 1986)

• Java: 1995, 1997, 1998 (objeto de este curso)

Page 2: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 2

CONCEPTOS DE POO

Objetos (I)

• 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, esposible 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 distinguiblede todos los demás (identidad propia) desde su creación.

Page 3: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 3

CONCEPTOS DE POO

Objetos (II)

• Los objetos software se utilizan para:• representar objetos del mundo real.

• en un juego de carreras de coches, los coches del mundo real se podríanrepresentar mediante objetos software.

• en una aplicación de dibujo, las figuras geométricas (polígonos, rectas,...)se podrían representar mediante objetos software.

• en una aplicación de gestión de personal de una empresa, lostrabajadores de la empresa se podrían representar mediante objetossoftware.

• representar conceptos abstractos.• en interfaces gráficas de usuario, es habitual representar con objetos

(llamados eventos) las acciones realizadas por el usuario (ratón yteclado).

• en un entorno de simulación e identificación de la estructuratridimensional de una proteína, las posibles estructuras candidatas (no secorresponden con ningún objeto real) podrían represantarse medianteobjetos.

Page 4: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 4

CONCEPTOS DE POO

Objetos (III)

• Representación visual de un objeto software.

Variables

(estado)Métodos

(comportamiento)

Page 5: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 5

CONCEPTOS DE POO

Mensajes (I)

• Una aplicación orientada a objetos se compone de múltiplesobjetos que se comunican mediante mensajes.

• Si un objeto A quiere que un objeto B ejecute uno de susmétodos, el objeto A le envía un mensaje al objeto B.

objeto A objeto B

mensaje

• 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

Page 6: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 6

CONCEPTOS DE POO

Mensajes (II)

• Por ejemplo, en un juego de ordenador de carreras de coches,cada piloto se comunica con su coche.

piloto coche

cambiar marcha (2)

Mensaje con parámetros

piloto coche

arrancar

Mensaje sin parámetros

Page 7: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 7

CONCEPTOS DE POO

Clases (I)

• Los objetos del mundo real se pueden agrupar en tipos (clases)(personas, coches, ordenadores, lavadoras, aviones, etc) demanera que los objetos de la misma clase tienen la mismaestructura (estado) y el mismo comportamiento, aunque el estadode dos objetos puede ser distinto.

• Los objetos software también se pueden agrupar en clasesutilizando un criterio similar: los objetos de la misma clasecomparten estado y comportamiento.

• En terminología orientada a objetos, un objeto concreto de unaclase es una instancia de la clase.

Una clase es un patrón o prototipo que define las variables ylos métodos comunes a todos los objetos de un cierto tipo.

Page 8: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 8

CONCEPTOS DE POO

Clases (II)

• Las variables en las que se almacena el estado de un objeto, sellaman variables de instancia.

• Los métodos que implementan el comportamiento de un objeto sellaman métodos de instancia.

Page 9: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 9

CONCEPTOS DE POO

Clases (III)

• Por ejemplo, la clase Coche declara lasvariables de instancia necesarias paraalmacenar el Nº de marchas, lavelocidad actual, y la marcha actual.La clase también declara y proporcionala implementación de los métodos deinstancia que permiten arrancar,acelerar, frenar y cambiar de marcha.

Después de crear la clase Coche se pueden crear los objetos de la clase.Cada instancia de la clase tiene su propia copia de todas las variables deinstancia definidas en la clase.

cambiar demarcha

arrancar

acelerar

frenar

Nº de marchas

velocidad actual

marcha actual

cambiar demarcha

arrancar

acelerar

frenar

Nº de marchas =5

velocidad actual =80

marcha actual =3

cambiar demarcha

arrancar

acelerar

frenar

Nº de marchas =4

velocidad actual =120

marcha actual = 4

coche 1 coche 2

Coche

Page 10: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 10

CONCEPTOS DE POO

Clases (IV)

• Variables de clase: las clases, además de definir las variables deinstancia, también pueden definir variables de clase, quecontienen información común para todas las instancias de la clase.Si un objeto modifica el valor de una variable de clase, estamodificación afecta a todos los objetos de la clase.

• Por ejemplo, en una aplicación de facturación, la clase Factura puedetener una variable de clase con el IVA que se aplica a las facturas, yaque este valor es común a todos los objetos de la clase Factura, y nosería eficiente que cada uno de los objetos de la clase tuviera unacopia.

• Si en una aplicación se quiere contabilizar el número de instancias quehay de una determinada clase, se puede utilizar una variable de clase.Por ejemplo, la clase Ventana de una iterfaz gráfica puede declararvariables de clase para almacenara el número de ventanas visibles, eltamaño por omisión y el tamaño máximo de cualquier ventana.

Page 11: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 11

CONCEPTOS DE POO

Clases (V)

• Métodos de clase: son métodos que afectan a la clase en sí, y alos cuales se puede acceder directamente desde la clase enoposición al acceso a los métodos de instancia, que se realizasiempre a través de los objetos

• Es importante señalar que para invocar un método de clase no esnecesario haber creado ningún objeto que reciba como mensaje unainvocación de ese método.

• Para usar un método de instancia, por el contrario, se necesitaobligatoriamente que se cree un objeto de la clase que reciba elmensaje de ese método.

• Por ejemplo, en la clase Factura se podrían tener métodos para consultary modificar el valor del IVA aplicable a las facturas, ya que este valortiene sentido en sí mismo y no está condicionado a la existencia deobjetos de la clase.

Page 12: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 12

CONCEPTOS DE POO

Conceptos fundamentales del modelo de objetos

ENCA

PSU

LAM

IEN

TO

ABS

TRA

CCIÓ

N

POLI

MO

RFIS

MO

HER

ENCI

A

MODELO DE OBJETOS

Hay cuatro conceptos fundamentales en el paradigma deorientación a objetos: abstracción, encapsulamiento,herencia y polimorfismo.

Page 13: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 13

CONCEPTOS DE POO

Abstracción

• La abstracción consiste en extraer los aspectos esenciales deuna entidad e ignorar sus propiedades accidentales, es unaherramienta en el proceso de creación del modelo a partir de unproblema real que está determinada por los siguientes factores:

• Identificación de clases: los conceptos que tienen entidad en símismos, no dependen de otros, se puden describir, comprender yanalizar pueden abstraerse como una clase.

• El objetivo del modelo:• determina tanto el grado de detalle como la información relevante.• Ejemplos:

– Aplicación de macroeconomía: los empleados de una empresa pueden no serimportantes como individuos porque sólo interese su comportamiento globalcomo plantilla; habrá una clase plantilla pero no una clase persona.

– Aplicación de nóminas: necesita manipular la información de cada persona demanera independiente; habrá una clase persona

– Con el mismo grado de detalle de la aplicación de nóminas, los antecedentesclínicos de una persona son irrlevantes en una aplicación de préstamobibliotecario pero fundamentales en una aplicación hospitalaria de ayuda aldiagnóstico de enfermedades; en ambas aplicaciones habrá una clase personapero sólo la segunda tendrá variables miembro para antecedentes clínicos.

Page 14: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 14

CONCEPTOS DE POO

Encapsulamiento (I)

“El encapsulamiento es el proceso de almacenar en un mismo compartimentolos elementos de una abstracción que constituyen su estructura y sucomportamiento; sirve para separar la interfaz contractual de una

abstracción y su implantación” (Booch)

• Cada clase “firma un contrato con el exterior” comprometiéndosea exhibir un determinado comportamiento, pero cómo lo consiguequeda oculto o encapsulado en el interior de la clase.

“La abstracción y el encapsulamiento son conceptos complementarios: laabstracción se centra en el comportamiento observable de un objeto,

mientras que el encapsulamiento se centra en la implementación que dalugar a ese comportamiento” (Booch).

Page 15: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 15

CONCEPTOS DE POO

Encapsulamiento (II)

• Una de las grandes ventajas del encapsulamiento es que posibilitaque la implementación de un objeto se pueda cambiar sin afectara las aplicaciones que lo utilizan.

• Ejemplo:• Supongamos que la clase Pila representa a pilas de números enteros, y

permite crear una pila, apilar un elemento, desapilar un elemento yconsultar el estado de la pila (vacía o no vacía).

• Internamente se utiliza un vector para almacenar los elementos de lapila.

• Si se mantiene el comportamiento, se podría cambiar larepresentación interna de los datos de la pila y sustituir el vector poruna lista sin afectar a las aplicaciones que utilizan la clase Pila.

• Esto es posible porque desde el exterior es invisible laimplementación de la clase Pila.

Page 16: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 16

CONCEPTOS DE POO

Herencia (I)

• La herencia es el mecanismo que permite definir una clase(subclase) a partir de otra clase (superclase), de manera que lasubclase hereda la estructura (estado) de la superclase a travésde las variables, y hereda el comportamiento a través de losmétodos.

• Por ejemplo, si se define la superclase Coche con las variables paraalmacenar el Nº de marchas, la velocidad actual, y la marcha actual, ylos métodos que permiten arrancar, acelerar, frenar y cambiar demarcha, se puede construir la subclase CocheCarreras a partir deCoche utilizando la herencia. De esta manera, la clase CocheCarrerashereda las variables y los métodos de la clase Coche.

Page 17: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 17

CONCEPTOS DE POO

Herencia (II)

• Habitualmente una subclase aumenta o redefine la estructura y elcomportamiento de su superclase.

• Por ejemplo,• Se define la superclase Reloj con variables para almacenar la hora y la

fecha actuales, 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.• La clase RelojDespertador aumenta el comportamiento de la clase Reloj

ya que es capaz de emitir una alarma a una hora previamente prefijada,para ello, la clase RelojDespertador aumenta la estructura con unavariable para almacenar la hora de la alarma, otra para alamacenar elestado de la alarma (activada/desactivada) y los métodos que permitenfijara la hora de la alarma y activarla o desactivarla.

• Por ejemplo,• Se define la superclase Polígono con distintas variables y métodos, entre

los cuales está el método que permite calcular el área del polígono.• 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. El método de la superclase Figura que calcule el área delpolígono deberá “redefinirse” en cada una de las subclases.

Page 18: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 18

CONCEPTOS DE POO

Herencia (III)

• 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 entreclases se la conoce con el nombre “es-un”. Por ejemplo:

• Un coche de carreras “es-un” coche.• Un árbol binario “es-un” árbol.• Un triángulo “es-un” polígono.• Una nevera “es-un” electrodoméstico.

• La herencia genera una jerarquía de generalización/especializaciónen la que una subclase especializa el comportamiento o la estructuramás general de su superclase.

• La especialización consistirá en el aumento de la estructura y/o elcomportamiento, su redefinición o su aumento y redefinición.

• La subclase RelojDespertador de ejemplos anteriores aumenta laestructura y el comportamiento de la superclase Reloj.

• La subclases Triángulo y Pentágono redefinen el comportamiento de lasuperclase Polígono.

Page 19: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 19

CONCEPTOS DE POO

Herencia (IV)

• Se pueden distinguir distintos tipos de herencia en cuanto alnúmero de superclases de una subclase:

• Herencia simple: una subclase hereda solamente de una superclase.• Herencia múltiple: una subclase hereda de más de una superclase.

• Este tipo de herencia es conceptualmente correcta pero introduceciertas complejidades en los lenguajes de programación.

• Por ejemplo, puede ocurrir que una subclase herede de dos superclasesque tienen atributos o métodos con el mismo nombre. Esta colisión denombres se resuelve de distinta manera en los lenguajes orientados aobjetos:

– en Java no se permite la herencia múltiple,– en C++ sí se permite pero utilizando calificación explícita.

• Es fundamental señalar que la herencia no se limita a un númerodeterminado de niveles por lo que todas los objetos de unaaplicación heredarán de las superclases más altas de la jerarquíade las que hereden directa o indirectamente.

Page 20: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 20

CONCEPTOS DE POO

Ligadura estática y dinámica

• En los lenguajes de poo objeto de este curso, aparecen lossiguientes conceptos relacionados con el momento en el que losnombres se ligan con sus tipos:

• Ligadura (enlace) estática o temprana: se fijan los tipos de todaslas variables y expresiones en tiempo de compilación.

• Ligadura (enlace) dinámica o tardía: los tipos de las variables yexpresiones no se conocen hasta el momento de la ejecución.

Page 21: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 21

CONCEPTOS DE POO

Polimorfismo (I)

• Es la característica más potente de estos lenguajes que nace de lainteracción de la herencia y el enlace dinámico.

• 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.• Esto sólo está permitido en poo cuando la variable que almacenará

objetos de distintos tipos es de una clase más general.

Page 22: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 22

CONCEPTOS DE POO

Polimorfismo (II)

• 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.• Se definen las subclases Triángulo y Pentágono, y en cada una de ellas

se redefine el método área: hay distintas versiones del método área.• Un programa que utilice esta jerarquía de clases, puede declarar una

variable de tipo Polígono, supongamos que se llama mi_poligono.• Como Polígono es una clase más general queTriángulo y Pentagono, la

variable mi_poligono puede almacenar objetos de estas dos últimasclases.

• Supongamos que, durante la ejecución del programa, a mi_poligono se leasigna un objeto de la clase Triángulo.

• mi_poligono, ya que “es un objeto”, puede recibir mensajes de otrosobjetos; cualquier mensaje que invoque el método área de mi_poligonoinvocará en este instante, la versión implementada en la clase Triángulo

• Si posteriormente a mi_poligono se le asigna un objeto de tipoPentágono, cualquier mensaje que invoque el método area demi_poligono invocará la versión del método implementada en Pentágono

Page 23: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 23

CONCEPTOS DE POO

Relaciones entre objetos (I)

• Se puede modelar las relaciones que se identifiquen entre lasclases. Estas relaciones pueden distinguirse por su significado osemántica. Por ejemplo:

• Un empleado trabaja para una compañía.Existe un relación entre la clase Empleado y la clase Compañía.

• Una frase pertenece a un párrafo.Existe una relación entre la clase Frase y la clase Párrafo.

• Un país tiene muchas ciudades.Existe un relación entre la clase País y la clase Ciudad.

• Una ventana tiene un menú.Existe una relación entre las clase Ventana y la clase Menú.

Page 24: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 24

CONCEPTOS DE POO

Relaciones entre objetos (II)

• Multiplicidad: especifica el número de instancias de una clase quepueden estar relacionadas con una única instancia de una claseasociada.

• Un empleado trabaja para una 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 enuna compañía).

• Con una única instancia de la clase Compañía se relacionan variasinstancias de la clase Empleado.

• Las personas tiene acciones de las empresas.• Con una única instancia de la clase Empresa se relacionan varias

instancias de la clase Persona..• Con una única instancia de la clase Persona se relacionan varias instancias

de la clase Compañía.• Los países tienen una ciudad como capital

• Con una única instancia de la clase País se relaciona una instancia de laclase Ciudad.

• Con una única instancia de la clase Ciudad se relaciona una instancia de laclase País.

Page 25: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 25

CONCEPTOS DE POO

Relaciones entre objetos (III)

• Las relaciones entre los objetos se pueden clasificar de acuerdoa su semántica:

• Generalización• Relación de tipo “es-un” (herencia).• Un árbol binario “es-un” árbol.• Un triángulo “es-un” polígono.• Una nevera “es-un” electrodoméstico.

• Asociación• Es una relación que describe vínculos entre objetos.• Un País tiene muchas Ciudades.• 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.• Una Cadena (comercio) tiene varios Locales.

Page 26: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 26

CONCEPTOS DE POO

Relaciones entre objetos (IV)

• Composición• Es una relación de tipo “todo-parte” más fuerte que la agregación.• 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.• El todo es responsable de la creación y de la destrucción de las partes.• Una Clase tiene varios Atributos.• Un Pedido tiene varias Lineas.• Un Círculo está formado por muchos Puntos.• Una Ventana tiene una Barra de título y dos Scrollbar.

• 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 objetosafectan a otros.

Page 27: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 27

CONCEPTOS DE POO

Relaciones entre objetos (V)

• Variables miembro de una relación y clases de asociación: deforma similar a la manera en la que las variables miembro de unaclase describen su estructura, hay ocasiones en las que existecierta información relevante de una relación entre clases

• Las relaciones pueden especificar variables miembro paracontener esta información.

• En este caso, puede resultar conveniente, definir una clase paracontener esa estructura.

• A estas clases se las conoce como clases de asociación• Por ejemplo.

• En el contexto de una biblioteca, pueden existir dos clases Libro yCliente que estén relacionadas mediante una asociación Préstamo.

• Es posible que, para la biblioteca, sea relevante tener constancia dela fecha de inicio y finalización del préstamo para poder establecerposibles sanciones por entregas retrasadas.

• Puede ser conveniente definir para la relación Préstamo la clasePréstamo que tendrá las variables miembros necesarias, por ejemplo,Fecha_inicio y Fecha_fin.

Page 28: Conceptos Programación Orientada a Objetos

Programación Orientada a Objetos 28

CONCEPTOS DE POO

UML (I)

• Es un lenguaje de modelado visual de propósito general que seutiliza para especificar, visualizar, construir y documentar loscomponentes de un sistema software.

• Ha sido adoptado con generalidad en el ámbito del desarrollo desoftware orientado a objetos.

• Algunos elementos:• Clases• Objetos• Relaciones• Multiplicidad• Diagramas de clases• Diagramas de objetos