lenguajes de programación tema 3. paradigma orientado a objetos pedro garcía lópez...
TRANSCRIPT
![Page 2: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/2.jpg)
• © University Rovira i Virgili
• Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; A copy of the license is available at:
• http://www.fsf.org/licenses/fdl.html
Copyright
![Page 3: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/3.jpg)
Indice
• Introducción
• Paradigma Orientado a Objetos
• Estudio de caso: Java
• Conclusiones
![Page 4: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/4.jpg)
Paradigma Orientado a Objetos
• Conceptos generales• Clases y Objetos• Herencia • Polimorfismo
![Page 5: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/5.jpg)
Problemas en la creación del software¿Hay crisis del software?
• Gran complejidad– Número de estados posibles es muy elevado– Conexiones entre entidades– Complejidad arbitraria que surge de instituciones
humanas
• Sujeto a continuos cambios• No tiene representación gráfica• Especificación de requisitos• Comunicación del equipo
![Page 6: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/6.jpg)
Calidad del Software
Factores Externos• Corrección• Robustez• Extensibilidad• Reutilización• Compatibilidad
• Modularidad• Legibilidad
Factores Internos
• Eficiencia• Portabilidad• Facilidad de uso• Funcionalidad
![Page 7: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/7.jpg)
Mantenimiento del software
• Parte noble: MODIFICACION
• Parte no noble: DEPURACION
• Se le dedica el 70 % del coste del software
• Distribución coste según [Lientz79]:– Cambios solicitados por los usuarios (41.8%)– Cambios en los formatos de los datos (17.4%)– Cambios de emergencia (12.4%)– Depuración rutinaria (9%)– Costes de documentación (5.5%)
![Page 8: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/8.jpg)
Mantenimiento del software• Conclusiones del estudio:
– Ausencia de extensibilidad– Estructura física de los datos dispersa por
muchas partes del sistema– No se hace documentación a posteriori– Cuando el sistema funciona no se buscan
mejoras en eficiencia.
![Page 9: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/9.jpg)
• Numero de conexiones sea mínimo
• Flujo de información sea mínimo
• Comunicaciones explícitas
Modulo A Modulo B
Modulo C
Modulo A Modulo B
Modulo C
Acoplamiento mínimo:
• Cohesión de datos• Cohesión funcional
Cohesión interna:
En los Sistemas Software interesa ...
![Page 10: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/10.jpg)
Reutilización del software
• ¿Por qué el software no es como el hardware?
• ¿Por qué cada nuevo proyecto software arranca de la nada?
Librerías de softwareSoftware-IC
![Page 11: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/11.jpg)
Repetición en el desarrollo del software
• ¿Cuántas veces en los últimos 6 meses has escrito código para buscar un elemento en una colección?
• Naturaleza repetitiva de la programación (ordenar, buscar, recorrer, ...)
• ¿Por qué no es frecuente?– Dificultades técnicas y no técnicas
![Page 12: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/12.jpg)
Dificultades técnicas
• Diseñar código reutilizable es difícil.
• Hacemos las mismas cosas pero no de la misma forma.
• Difícil captura de las similitudes.
• Permitir adaptación
![Page 13: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/13.jpg)
Ejemplo
Rutina genérica para “búsqueda en una colección”
FUNCTION buscar (x: Elemento; c: Coleccion): BOOLEANVAR
pos : Posicion;BEGIN
pos:= Comenzar (x,c);WHILE not Completa (pos,c) and not Encontrado (pos, x,
c) DO pos:= Siguiente (pos, x, c);buscar:= not Completa (pos,c);
END;
![Page 14: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/14.jpg)
Requisitos de los módulos para facilitar la reutilización
1. Variación en tiposAplicable a diferentes tipos de elementos
x: Elemento
FUNCTION buscar (x: Elemento; c: Coleccion): BOOLEANVAR pos : Posicion;BEGIN
pos:= Comenzar (x,c);WHILE not Completa (pos,c) and not Encontrado (pos, x,
c) DO pos:= Siguiente (pos, x, c);buscar:= not Completa (pos,c);
END;
![Page 15: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/15.jpg)
Requerimientos de los módulos para facilitar la reutilización
2. Variación en estructuras de datos y algoritmosEl tipo Coleccion puede estar implementado de diferentes formas y Siguiente(pos,x,c) puede estar ligado a diferentes rutinas:
FAMILIAS DE MODULOS relacionados
FUNCTION buscar (x: Elemento; c: Coleccion): BOOLEANVAR pos : Posicion;BEGIN
pos:= Comenzar (x,c);WHILE not Completa (pos,c) and not Encontrado (pos, x,
c) DO pos:= Siguiente (pos, x, c);buscar:= not Completa (pos,c);
END;
![Page 16: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/16.jpg)
Requerimientos de los módulos para facilitar la reutilización
3. Independencia de la representaciónSe puede usar una operación sin conocer su implementación
siguiente(pos,x,c), comenzar(x,c),
encontrado(pos,c), completa(pos,c)
FUNCTION buscar (x: Elemento; c: Coleccion): BOOLEANVAR pos : Posicion;BEGIN
pos:= Comenzar (x,c);WHILE not Completa (pos,c) and not Encontrado (pos, x,
c) DO pos:= Siguiente (pos, x, c);buscar:= not Completa (pos,c);
END;
![Page 17: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/17.jpg)
Independencia de la representación
Alternativa:
if “c es de tipo A” then “aplicar algoritmo de búsqueda A”
elseif “c es de tipo B” then “aplicar algoritmo de búsqueda B”
elseif …
• Este código sería incluido en:– Un único módulo: Grande y sujeto a constantes
cambios– Código cliente: Dificulta la extensibilidad
![Page 18: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/18.jpg)
Requerimientos de los módulos para facilitar la reutilización.
4. Factorizar comportamientos comunes dentro de una familia de implementaciones
5. Rutinas relacionadas
FUNCTION buscar (x: Elemento; c: Coleccion): BOOLEANVAR pos : Posicion;BEGIN
pos:= Comenzar (x,c);WHILE not Completa (pos,c) and not Encontrado (pos, x,
c) DO pos:= Siguiente (pos, x, c);buscar:= not Completa (pos,c);
END;
![Page 19: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/19.jpg)
Tabla
Secuencial Conjunto
Lista Array
• La operación “búsqueda” se escribe una sola vez.
Ejemplo: Factorizar comportamientos comunes
FicheroSecuencial
![Page 20: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/20.jpg)
FUNCTION busqueda (x: elemento; t:Secuencia): BOOLEANBEGIN
Comenzar;WHILE not Completa and not Encontrado(x) DO
Avanzar;busqueda:=not Completa;
END;
ARRAY LISTAENLAZADA
FICHEROSECUENCIAL
Comenzar i:=1 l:=cabeza resetAvanzar i:=i+1 l:=l^.next readCompleta i>tamaño l=nil eofEncontrado t[i] = x l^.item = x f^= x
Una nueva variante sólo tiene que especificar cómo implementar estas cuatro rutinas
![Page 21: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/21.jpg)
Estructuras modulares tradicionales
• Rutinas• Paquetes o Módulos
¿Por qué no son suficientes?
Posibles soluciones para darles flexibilidad:• Sobrecarga • Genericidad
¿cubre los requisitos de módulos reutilizables?
![Page 22: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/22.jpg)
Rutinas• Unidad de software que puede llamar a otras unidades para
ejecutar un cierto algoritmo.
• Enfoque de reutilización: librerías de rutinas
• Adecuadas en áreas donde pueden ser identificado un conjunto de problemas individuales con las siguientes limitaciones:
1. Admiten especificación simple: pequeño conjunto de parámetros.2. No estén implicadas estructuras de datos complejas.3. Problemas claramente diferenciados.
![Page 23: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/23.jpg)
Limitaciones de las rutinas• Soluciones para: "Búsqueda en una colección secuencial”:
1) Una rutina:• "CASE" enorme.• Muchos argumentos.
2) Conjunto de rutinas:• Rutinas muy similares ( factorizar comportamiento)
• Cliente debe buscar en un laberinto de rutinas.
Conclusión: Un módulo reutilizable debe estar abierto a la adaptación y, la única forma de adaptación de una rutina es pasarle diferentes argumentos.
Las rutinas no son suficientemente flexibles
![Page 24: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/24.jpg)
Paquetes/Módulos• Son unidades de descomposición de software que:
– Cumplen el principio de Unidad Lingüística Modular
– Contienen variables y rutinas relacionadas = características del
`paquete
– Admiten la Ocultación de la Información (módulos abstractos)
– Permite la implementación de tipos definidos por el programador
• Los módulos sólo resuelven ”rutinas relacionadas”
– facilita depuración y cambio al proveedor
– es más fácil para los clientes encontrar y usar los servicios de los
módulos
![Page 25: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/25.jpg)
Ejemplo: Paquetes/Módulos
Package TablaEnteros;type ArbolBinEnteros
recordinfo: Integerizq, der: ArbolBinEnteros
end;
new: ArbolBinEnteros begin … end; añadir(t:ArbolBinEnteros; x: Integer) begin … end; existe(t:ArbolBinEnteros; x: Integer): Boolean begin ..
end
….end
DECLARACIÓN DE TIPO
OPERACIONES SOBRE EL
TIPO
PAQUETE
![Page 26: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/26.jpg)
Sobrecarga
• Identificador con más de un significado.
• Ejemplo: Sobrecarga de rutinas
FUNCTION Búsqueda (x:Cuenta; t: ListaCuentas): Boolean;
FUNCTION Búsqueda (x:CHAR; t: ARRAY [CHAR]): Boolean;
FUNCTION Búsqueda (x:REAL; t: ARRAY[REAL]): Boolean;
• Facilidad sintáctica orientada a los clientes.
• Permite escribir el mismo código cliente usando diferentes implementaciones de cierto concepto.
![Page 27: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/27.jpg)
¿Qué nos proporciona la sobrecarga?
• ¿ Resuelve “Variación en estructuras de datos y algoritmos”?
• ¿Resuelve “Independencia de la representación”?
• En cada invocación “Busqueda(x,t)” cliente y compilador saben de que versión se trata.
• “Independencia en la representación” exige poder escribir “Busqueda(x,t)” significando:
“Busca x en t usando el algoritmo adecuado, cualesquiera que sea la clase de colección ligada a t en tiempo de ejecución”
![Page 28: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/28.jpg)
Genericidad• Posibilidad de definir módulos parametrizados, cuyos
parámetros representan tipos.
• Facilidad orientada a los creadores de módulos permite
escribir el mismo código cuando se usa la misma
implementación de cierto concepto, aplicado a
diferentes tipos de objetos” Ej: Array [T],
Lista[T]
• Los módulos cliente deben instanciar el módulo
genérico Ej: Array [Real],
Lista[Figura],
• Resuelve “variación en tipos”
![Page 29: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/29.jpg)
Ejemplo de Genericidad
Package Tabla[T];type ArbolBinario
recordinfo: Tizq, der: ArbolBinEnteros
end;
new: ArbolBinario begin … end; añadir(t:ArbolBinario; x: T) begin … end; existe(t:ArbolBinario; x: T): Boolean begin .. end
….end
![Page 30: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/30.jpg)
• La genericidad resuelve:
Variación en tipos.
• Los paquetes/modulos resuelve:
Rutinas relacionadas.
• No se resuelve:Variación en estructuras de datos y algoritmos.
Independencia de la representación.
Capturar similitudes entre un subgrupo de un conjunto de posibles implementaciones.
Conclusión
![Page 31: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/31.jpg)
Descomposición Funcional
A
B C D
E HGF
Secuencia
Bucle
Condicional
![Page 32: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/32.jpg)
Inconvenientes de la Descomposición Funcional
• Función principal: “Cima del sistema”– El “programa principal” es una propiedad
volátil– Sistemas reales no tienen “cima”– Mejor la visión de un “conjunto de servicios”
• Centrado en la interfaz– Primera pregunta: ¿Que hará el sistema?– La arquitectura del software debe basarse en
propiedades más profundas.
• Ordenación temporal prematura
![Page 33: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/33.jpg)
Inconvenientes de la Descomposición Funcional
• No favorece la reutilización– Se desarrollan elementos software para satisfacer
necesidades específicas de otro elemento del nivel superior.
– “Cultura del proyecto actual”
• Las estructuras de datos son descuidadas– Funciones y datos deben jugar un papel
complementario
• Cuando un sistema evoluciona los datos son más estables que los procesos.
![Page 34: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/34.jpg)
Ventajas de la Descomposición Funcional
• Técnica simple, fácil de aplicar
• Util para pequeños programas y describir algoritmos.
• Buena para documentar diseños.
• Facilita desarrollo sistemático de sistemas
• Adecuada para dominar la complejidad
![Page 35: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/35.jpg)
Descomposición basada en objetos
• Los objetos son más estables que las funciones cuando el sistema evoluciona (Extensibilidad).
• Tipos de objetos equipados con las operaciones asociadas (Reutilización).
• El diseñador lista las operaciones aplicables a cierto tipo de objetos, especificando su efecto.
• Se retrasa todo lo posible el orden en que se ejecutan las operaciones.
![Page 36: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/36.jpg)
Desarrollo software OO
1. Encontrar tipos de objetos relevantes
2. Encontrar operaciones para tipos de objetos
3. Describir tipos de objetos
4. Encontrar relaciones entre objetos
5. Usar tipos de objetos para estructurar software
![Page 37: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/37.jpg)
Conceptos Clave POO• Clase y Objeto• Clase: Atributos y métodos• Creación de clases: constructores e instanciación• Invocación de métodos• Atributos y métodos de clase• Ocultación de información• Tipos referencia, asignación, aliasing y copia de objetos• Concepto de Metaclase• Relaciones entre clases: clientela y herencia• Tipos de herencia• Polimorfismo y ligadura dinámica
![Page 38: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/38.jpg)
Clases y Objetos
Una clase es un módulo y un tipo de dato:
• Módulo (concepto sintáctico)
– Mecanismo para organizar el software (sintáctico)
– Encapsula componentes software
• Tipo (concepto semántico)
– Mecanismo de definición de nuevos tipos de datos:
describe una estructura de datos (objetos) para representar
valores de un dominio y las operaciones aplicables.
![Page 39: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/39.jpg)
Combinación módulo-tipo
“Los servicios proporcionados por una clase, vista como un módulo, son precisamente las operaciones disponibles sobre las instancias de la clase, vista como un tipo”.
• Como cada módulo es un tipo, cada operación del módulo es relativa a cierta instancia del tipo
![Page 40: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/40.jpg)
TAD y Clase
Teoría
TAD
{Operaciones: Sintaxis
y Semántica}
Software
Clase
{Elegir representación e
implementar operaciones}
![Page 41: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/41.jpg)
Clases: Ejemplo• Al modelar un banco, encontramos objetos
“cuenta”.
• Todos los objetos “cuenta” tienen unas propiedades comunes:– saldo, titular, código, reintegro, ingreso, …
• Definimos una clase Cuenta.
• Clases del dominio y clases de diseño/implementación
![Page 42: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/42.jpg)
Componentes de un clase• Atributos
– Determinan una estructura de almacenamiento para cada objeto de la clase
• Rutinas (Métodos)– Operaciones aplicables a los objetos– Único modo de acceder a los atributos
Ejemplo: Al modelar un banco, encontramos objetos “cuenta”.
Todos los objetos “cuenta” tienen propiedades comunes:
• atributos: saldo, titular, ...• operaciones: reintegro, ingreso, …
Definimos una clase CUENTA.
![Page 43: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/43.jpg)
Cada objeto es instancia de una clase
Clase Cuenta
Objeto Cuenta
Objeto Cuenta
Objeto Cuenta
Objeto CuentaInstanciación
Cada objeto es instancia directa de una clase.
Una clase es una factoría de objetos
Estructura de datos
Cuenta ococ = new Cuenta()
Código
![Page 44: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/44.jpg)
Constructores (C++ y Java)
• Realizan la inicialización de un objeto tras la creación.
• Un constructor – procedimiento especial con el mismo nombre que
la clase.– Se debe invocar cuando se crea un objeto de la
clase con el operador new– En C++ también cuando se declara una variable.– Pueden tener modificadores de acceso
![Page 45: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/45.jpg)
Mensajes
• Mecanismo básico de la computación OO.
• Invocación de la aplicación de un método sobre un objeto.
• La modificación o consulta del estado de un objeto se realiza mediante mensajes.
• Formado por tres partes
– Objeto receptor– Selector o identificador del método a aplicar– Argumentos
![Page 46: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/46.jpg)
Semántica mensajes
• Sea el mensaje x.f, su significado es:
“Aplicar el método f sobre el receptor x, efectuando el paso de parámetros”
¡NO CONFUNDIR CON LA INVOCACIÓN DE UN PROCEDIMIENTO!
![Page 47: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/47.jpg)
Variables y métodos de Clase• Compartida por todas las instancias de una
clase.
• Registrar valor común a todas las instancias
• Ejemplos para una clase Cuenta:– Interés, Coste tarjeta, Último código asignado
• ¿Cuándo se inicializa?
• Puede ser accedida por métodos de instancia y de clase
• Los métodos de clase no deberían acceder a variables de instancia
![Page 48: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/48.jpg)
Clases y Ocultación de Información
• Ocultamiento información importante para conseguir arquitecturas flexibles y coherentes.
• Interface vs. Implementación:– Un cliente sólo conoce la interface.
– Sólo los métodos de la clase deberían poder acceder a sus atributos.
• Cada lenguaje OO (Eiffel, C++, Java, Smalltalk) presenta diferencias en cuanto al ocultamiento de información.
![Page 49: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/49.jpg)
Tipos referencia• Los posibles valores de una entidad (atributo,
parámetro, …) son referencias a objetos potenciales que pueden ser creados en tiempo de ejecución a través, siempre, de instrucciones de creación explícitas.
• Una referencia puede encontrarse en uno de dos estados posibles– No ligada: Void (Eiffel) o null (Java)– Ligada a un objeto
• Las referencias son “punteros domesticados”.• Void es un estado (null es un literal) mientras que “nil”
(en Pascal) o “null” (en C) son valores de tipo puntero.
![Page 50: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/50.jpg)
Ventajas de los tipos referencia
• Más eficiente para manejar objetos complejos.
• Soporte para definir estructuras de datos recursivas.
• Soporte del polimorfismo.
• Los objetos son creados cuando son necesarios.
• Permite la compartición de un objeto (integridad
semántica).
• DESVENTAJA: “Aliasing”
![Page 51: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/51.jpg)
¡Cuidado con el Aliasing!
oa ob
oa:= ob
oboa
La asignación no implica copia de valores sino dereferencias
Asignación
![Page 52: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/52.jpg)
Solución: Copia de objetos
• Copia superficial– Se copian los valores de cada campo del objeto
origen oy en el objeto destino ox; ox y oy comparten referencias.
– Soportada por defecto y puede redefinirse para una clase concreta.
• Copia profunda– Se crea un objeto con una estructura idéntica al
objeto origen.– No hay compartición de referencias– No suele ser soportada por defecto
![Page 53: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/53.jpg)
Metaclases
• Una clase puede ser considerada un objeto:– ¿Cuál es su clase?
• Metaclase– Clase que describe clases, sus instancias son
clases.– Propiedades: lista de atributos, lista de variables
de clase, lista de métodos, lista de métodos de clase.
• Java y Smalltalk tienen metaclases• Útil en programación avanzada, cuando se manejan
entidades software, p.e. depuradores, inspectores, browsers,..
![Page 54: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/54.jpg)
Relaciones entre clases• Clientela
Una clase A es cliente de una clase B, si A contiene una declaración en la que se establezca que cierta entidad (atributo, parámetro, variable local) e es de tipo B (e:B)
Ejemplo: titular: Persona
CUENTA PERSONA
“Cuenta es cliente de Persona”• Herencia Una clase es una versión especializada de otra existente
Ejemplo:
Cuenta
CuentaAhorro CuentaCorriente
![Page 55: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/55.jpg)
Herencia
PUBLICACION
LIBRO REVISTA
LIBRO_TEXTO INVESTIGACIONMAGAZINE
FIGURA
POLIGONO CIRCULO
RECTANGULO
La herencia organiza las clases en una estructura jerárquica:
Jerarquías de clases
Ejemplos:
• No es tan solo un mecanismo para compartir código.
• Consistente con el sistema de tipos del lenguaje
![Page 56: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/56.jpg)
Herencia• Puede existir una clase “raíz” en la jerarquía de la
cual heredan las demás directa o indirectamente.
• Incluye todas las características comunes a todas las clases
Eiffel: clase ANYSmalltalk: clase ObjectJava: clase ObjectC++: no existe
![Page 57: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/57.jpg)
HerenciaSi B hereda de A entonces B incorpora la estructura (atributos) y comportamiento (métodos) de la clase A, pero puede incluir adaptaciones:
-B puede añadir nuevos atributos-B puede añadir nuevos métodos
-B puede REDEFINIR métodos
-B puede renombrar atributos o métodos- B puede implementar un método diferido en A
…
Adaptaciones dependientes del lenguaje(Redefinición disponible en cualquier LOO)
•Refinamiento: Extender el uso original
•Reemplazo: Mejorar la implementación
![Page 58: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/58.jpg)
Polimorfismo• Es restringido por la herencia
• Importante para escribir código genérico
• Sea las declaraciones:ox: X; rutina1 (oy:Y)
– En un lenguaje con monomorfismo (Pascal, Ada, ..) en t.e. ox y oy denotarán valores de los tipos X e Y, respectivamente.
– En un lenguaje con polimorfismo (Eiffel, C++, ..) en t.e. ox y oy podrán estar asociados a objetos de varios tipos diferentes:
tipo estático vs. tipo dinámico
![Page 59: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/59.jpg)
Tipo estático y tipo dinámico
• Tipo estático: – Tipo asociado en la declaración
• Tipo dinámico: – Tipo correspondiente a la clase del objeto conectado a
la entidad en tiempo de ejecución
• Conjunto de tipos dinámicos:– Conjunto de posibles tipos dinámicos de una entidad
oa: A; ob: B; oc; C;
te(oa) = A ctd(oa) = {A,B,C,D,E,F}
te(ob) = B ctd(ob) = {B, D, E}
te(oc) = C ctd(oc) = {C,F}
A
ED
CB
F
Ejemplo:
![Page 60: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/60.jpg)
Conexión polimorfa
• Cuando el origen y el destino tiene tipos diferentes:a) asignación:
p := r; -- p es una entidad polimorfa
b) paso de parámetros: f (p:POLIGONO) is do ... end -- f es una rutina
polimorfa
• Sólo se permite para entidades destino de tipo referencia
(POLIGONO)p
(antes)
(después)
(RECTANGULO)
r
p:POLIGONO; r:RECTANGULO
![Page 61: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/61.jpg)
Tipos de polimorfismo• Real
– Paramétrico (“lista de T”)– Inclusión:
• Basado en la herencia• una función y varias interpretaciones diferentes
• Aparente– Sobrecarga
• varias funciones todas con el mismo nombre
Ejemplo polimorfismo paramétrico:long (l:lista): integer
if l=nil then long:=1else long:= 1 + long(cola(l))
![Page 62: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/62.jpg)
Sobrecarga
• Es el nombre de la función lo que es polimórfico
• Se resuelve en tiempo de compilación, según la signatura de la rutina.
• No es necesario que exista similitud semántica.
• En los lenguajes OO puede existir sobrecarga– dentro de una clase
– entre clases no relacionadas (es fundamental)
![Page 63: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/63.jpg)
Polimorfismo y código genérico• Estructuras de datos polimórficas:
Pueden contener instancias de una jerarquía de clases
• Ejemplo: fig: ARRAY [FIGURA]
p: POLIGONO; r: RECTANGULO; c: CIRCULO;t:TRIANGULO;
!!p; !!r; !!c; !!t;
fig.put (p,1); fig.put (r,2); fig.put (c,3); fig.put (t,4); ...
1
2
3
4
fig
![Page 64: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/64.jpg)
Genericidad
• ¿Cómo escribir una clase que represente una estructura de datos y que sea posible almacenar objetos de cualquier tipo?
Pila-Enteros
Pila_Libros Pila de ?Pila_Figuras
….
• Necesidad de reconciliar reutilización con el uso de un lenguaje tipado.
![Page 65: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/65.jpg)
Herencia
ColeccionEntero
ListaEntero
ListaCircularEntero
ColeccionTarea
GrafoTarea
RedTarea
![Page 66: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/66.jpg)
class ListaEntero inherit ColeccionEntero feature
numElements: Integer is do ..
añadir (i: Integer, v:Integer) is do ..
iesimo (i:Integer): Integer is do ..
buscar (v:Integer): Boolean is do ..
...
end ¿Cómo asociar a v un tipo pero sin hacer que la clase sea dependiente del tipo de objeto almacenado?
![Page 67: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/67.jpg)
Genericidad
Coleccion [G]
Lista [G]
ListaCircular [G]
![Page 68: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/68.jpg)
class Lista [G] feature
numElements. Integer is do ..
añadir (i: Integer, v:G) is do ..
iesimo (i:Integer): G is do ..
buscar (v:G): Boolean is do ..
...
end
miLista1: Lista [Integer] miLista2: Lista [Punto]
![Page 69: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/69.jpg)
Genericidad
• Posibilidad de parametrizar las clases; los parámetros son tipos de datos.
• Facilidad útil para las clases que representan estructuras de datos generales: TIPO BASE ES UN PARAMETRO
class ARRAY [G], class PILA [G], class LISTA [G], ...
• Orientada a los creadores de clases
![Page 70: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/70.jpg)
Estudio de caso: JavaLenguaje:
• Simple
• Orientado a Objetos
• Robusto
• Arquitectura-neutral (portable)
• Moderno
– librerias (+ APIs)
– excepciones
– (...)
![Page 71: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/71.jpg)
Hola Mundo
/* * Example HelloWorld * Prints the message "Hello, World!“ */public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, world.”); }}
![Page 72: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/72.jpg)
Palabras reservadas
abstractbooleanbreakbytebyvaluecasecastcatchcharclassconstcontinue
defaultdodoubleelseextendsfalsefinalfinallyfloatforfuturegeneric
gotoifimplementsimportinnerinstanceofintinterfacelongnativenewnull
operatorouterpackageprivateprotectedpublicrestreturnshortstaticsuperswitch
synchronizedthisthrowthrowstransienttruetryvarvoidvolatilewhile
![Page 73: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/73.jpg)
Tipos Simples Tamaño Valor Mínimo Valor Màximo Tipos Wrapper
boolean 1-bit - - Boolean
char 16-bit Unicode 0 Unicode 216-1 Character
byte 8-bit -128 +127 Byte
short 16-bit -215 +215-1 Short
int 32-bit -231 +231-1 Integer
long 64-bit -263 +263-1 Long
float 32-bit IEE754 IEE754 Float
double 64-bit IEE754 IEE754 Double
void - - - Void
Tipos Simples Tamaño Valor Mínimo Valor Màximo Tipos Wrapper
boolean 1-bit - - Boolean
char 16-bit Unicode 0 Unicode 216-1 Character
byte 8-bit -128 +127 Byte
short 16-bit -215 +215-1 Short
int 32-bit -231 +231-1 Integer
long 64-bit -263 +263-1 Long
float 32-bit IEE754 IEE754 Float
double 64-bit IEE754 IEE754 Double
void - - - Void
Tipos Simples
![Page 74: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/74.jpg)
Bloques
![Page 75: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/75.jpg)
Comandos y secuenciadores
if (expressBool) { ....} else { ....}
switch (selector) { case valor1: instrucció1; break; case valor2: ........... ... default: instruccióN;}
selector: char,byte,short,int
![Page 76: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/76.jpg)
Comandos y Secuenciadores• Bucles FOR:
for (<inicialització>; <continuar si ...>;<increment>)for (int i=0; i<10; i++) {...}
• Bucles DO-WHILEdo {...
} while (expressioBooleana);
• Bucles WHILEwhile (expressioBooleana) {
...
}
![Page 77: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/77.jpg)
Clases en Java
• Lenguaje tipado estáticamente
• Legible
• No separación en fichero interfaz e implementación.
• Lenguaje interpretado: Máquina Virtual Java
• Atributos y variables de clase
• Métodos de instancia y de clase
• Incluye metaclases (Reflexión)
![Page 78: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/78.jpg)
Ejemplo: Cuentaclass Cuenta { private String titular; private int saldo; private int codigo; private int[] ultOper; private static int ultimoCodigo = 0;
public static int nuevoCodigo () {return ++ultimoCodigo;} public Cuenta (String quien) {
saldo=0; titular=quien; codigo = nuevoCodigo(); ultOper = new int[100];}
public void reintegro (int suma) { if (puedoSacar(suma)) saldo=saldo-suma;};
public void ingreso (int suma) { saldo=saldo+suma;}
public int getSaldo () { return saldo; } private boolean puedoSacar(int suma) {return (saldo >=suma);}
}
![Page 79: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/79.jpg)
Creación de Objetos
• Acceso a las variables de instancia de la clase mediante métodos de instancia (set y get).
Cuenta c = new Cuenta (“pedro”);c.reintegro(10000);c.ingreso(20000);int x = c.getSaldo();
“
![Page 80: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/80.jpg)
Propiedades de clase: static
class Cuenta { private String titular; public static int interes=3;
public int setInteres(int cantidadPts){
interes= cantidadPts}
¿ Que ocurre ?
![Page 81: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/81.jpg)
Propiedades de clase
• No podemos acceder desde variables de clase a variables de instancia.
// Método de clasepublic static int setInteres(int cantidadPts){
interes= cantidadPts}
![Page 82: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/82.jpg)
Propiedades de clase
public class HelloWorld { public static void main(String[] args) { Cuenta.setInteres(12); Math.sqrt(9); }}
Las propiedades de clase son válidas para todos los objetos de la clase.
![Page 83: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/83.jpg)
Clases Java y Ocultación de Información
• “package”– accesible por las clases del paquete, no
accesible a los clientes del paquete
• public– accesible por todas las clases
• private– sólo accesible por los métodos de la clase
• protected– accesible por las clases del paquete y por las
subclases
![Page 84: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/84.jpg)
Visibilidad
public
protected
package
private
The class itself Si Si Si SiClases del mismo paquete
Si Si Si No
Subclases de otro paquete
Si Si No No
No-subclases de otro paquete
Si No No No
![Page 85: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/85.jpg)
Asignación• Un objeto asociado a una variable cambia cuando se
evalúa una expresión de asignación.
variable = expresión• Ejemplos:
c1:=new Cuenta(); saldo := saldo - cantidadPtas.s:= c1.saldo();rect := new Rectangulo(punto1, punto2);miObjeto:= otroObjeto;
• El operador := no hace una copia del objeto
![Page 86: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/86.jpg)
Asignación y cloningPoint p = new Point (1,1);Point p2 = p;
p2.setLocation(120,120);//AliasingSystem.out.println("Valor de p:" + p.getX());System.out.println("Valor de p2:" + p2.getX());
Point p3 = (Point)p.clone();p3.setLocation(40,40);System.out.println("Valor de p:" + p.getX());System.out.println("Valor de p3:" + p3.getX());
![Page 87: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/87.jpg)
Copia en Java
• La clase Object incluye el método protected Object clone( ) {..} ..}
que implementa una copia superficial.
• Para poder clonar objetos de una clase se debe– Declarar que implementa la interfaz Cloneable– Redefinir y hacer público el método clone()– Dejar la versión original (copia superficial) o
bien hacer una copia de mayor profundidad.
![Page 88: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/88.jpg)
Paso de Parámetros class PassByValue { public static void modifyPoint(Point pt, int j) { pt.setLocation(5,5); j = 15; } public static void main(String args[]) { Point p = new Point(0,0); //1 int i = 10; modifyPoint(p, i); //2 //3 } }
![Page 89: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/89.jpg)
Concepto de Metaclase: RTTI
• Run Time Type Identification• Object
– Class getClass()
• Class– getFields– getMethods– getName– (...)
![Page 90: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/90.jpg)
Agrupación de clases: Package
• package pedro.utils;
• import pedro.utils.*;
• import pedro.*; // No es jerárquico
• import pedro.utils.Cosa;– java.lang --- general – java.awt --- GUI – java.io --- I/O – java.util --- utilities – java.applet --- applet – java.net --- networking
Paquetes Java
![Page 91: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/91.jpg)
Tipos Wrapper
int a =1; int b= 2*3;
Integer awrap = new Integer(a); int x = awrap.intValue();
int y = Integer.parseInt("123");
String z = String.valueOf(y);
![Page 92: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/92.jpg)
Arrays: Tipo parametrizableint lista [] = new int[100];
lista[0]=1;
for (int i=0;i<lista.length;i++)
lista[i]=0;
int lista[] = {1,2,3,4};
Perro lista2 = new Perro[100];
lista2[0] = new Perro ();
Object lista3 = new Object [100][100];
![Page 93: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/93.jpg)
Relaciones entre clases
-name : String-gpa : float
Student Faculty
-streetAddress : String-city : String-state : String-zipCode : String
Address
*1
* 1
Composicíón: Tiene - Un
![Page 94: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/94.jpg)
Relaciones entre clases
Student
GraduateStudent UndergraduateStudent
MasterStudent PhDStudent
Herencia: Es -Un
![Page 95: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/95.jpg)
Clases abstractas
• Algún método no se implementa• No podemos instanciar una clase abstracta• La clase abstracta puede tener métodos no abstractos• La clase abstracta debe ser heredada.
public abstract class Figura
{
public abstract dibujar();
}
![Page 96: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/96.jpg)
Herencia en Java
• public class X extends Y {...}
![Page 97: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/97.jpg)
Sintaxis de clase
• La clase Object
• this y super
[ ClassModifiers ] class ClassName [ extends SuperClass ] [ implements Interface1, Interface2 ...] { ClassMemberDeclarations }
![Page 98: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/98.jpg)
Polimorfismo
Animal a = new Animal();
Perro p;
a = p;
Object x;
Perro p = new Perro();
x = p;
![Page 99: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/99.jpg)
Polimorfismo y castings
Vector list = new Vector();
String s = “lala”;
Perro p = new Perro();
list.add(p);
list.add(s);
Object x = list.elementAt(0);
Perro p2 = (Perro)list.elementAt(0);
![Page 100: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/100.jpg)
Polimorfismo y ligadura dinámica• Java es un lenguaje tipado estáticamente
• La ligadura de un mensaje a un método concreto se realiza en tiempo de ejecución
• ¿Qué versión de perímetro se ejecuta en cada mensaje?
f= new Poligono ();f.perimetro(); {i}r = new Rectangulo();r.perimetro(); {ii}f=r;f.perimetro(); {iii}
![Page 101: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/101.jpg)
Interfaces
• Son clases en las que todos las propiedades son estáticas y finales y todos los métodos son abstractos.
interface Persona
{
public void habla();
}
interface Perro
{
public void ladra();
}
![Page 102: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/102.jpg)
Interfaces y herenciapublic class Mutante implements Persona, Perro
{
public void habla()
{ System.out.println(“Soy una persona”);
}
public void ladra()
{ System.out.println(“GUAU”);
}
}
![Page 103: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/103.jpg)
Interfaces y polimorfismo
Mutante m = new Mutante();
Persona p = m;
p.habla();
Perro p = m;
m.ladra();
![Page 104: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/104.jpg)
Interfacesclass Prueba
{
public static void ladra (Perro p)
{ p.ladra();
{
public static void habla(Persona p)
{ p.habla()
}
![Page 105: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/105.jpg)
Interfaces
Mutante m = new Mutante();
Prueba.habla(m);
Prueba.ladra(m);
![Page 106: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/106.jpg)
Ejemplo código genérico
S ta ck
V e c to r A rra yL is t L in ke d L ist
A b s tra c tL ist
A rra yS et H a sh S et
A b s trac tS e t
A b s tra c tC o lle c tion
C o lle c tio n
java.util.Collection
![Page 107: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/107.jpg)
Ejemplo: código genérico• boolean add(Object)• boolean addAll(Collection)• void clear()• boolean contains(Object)• boolean containsAll(Collection)• boolean isEmpty()• Iterator iterator()• boolean remove(Object)• boolean removeAll(Collection)• boolean retainAll(Collection)• int size()• Object[] toArray()
![Page 108: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/108.jpg)
• boolean hasNext()• Object next()• void remove() [implementación opcional]• Por ejemplo:
public void escribir (Collection c) { for (Iterator it=c.iterator(); it.hasnext();) { System.out.println(it.next()); }}
Iteradores
![Page 109: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/109.jpg)
Genericidad y Java
• Java no posee genericidad (hasta el Jdk1.5)
• Necesidad de declaraciones de tipo Object
• Problemas: – Necesidad de conversiones de tipo– No se asegura homogeneidad
• Incluye genericidad para arrays
private Cuenta[ ] cuentas = new Cuenta[100]
private int[ ] valores = new int [4]
![Page 110: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/110.jpg)
Estructuras de datos polimorfas
• Contiene objetos de diferentes clases
• Ejemplo: Array con cualquier variante de Figura
Figura conjFig = new Figura[10];p= new Poligono(); r = new Rectangulo(); c = new Circulo();.t = new Triangulo();
conjFig[0]=p;conjFig[0]=r;conjFig[0]=c;conjFig[0]=t;
1
2
3
4
conjFig
![Page 111: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/111.jpg)
Estructuras polimorfas y código genérico
public void dibujarFiguras()
{
for (int i=0;i<conjFig.length;i++)
conjFig[i].dibujar();
}
![Page 112: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/112.jpg)
Genericidad Restringida• Es posible restringir las clases a las que se puede
instanciar el parámetro genérico formal de una clase genérica.
class C [G -> R]• Sólo es posible instanciar G con descendientes de la
clase R.• Ejemplos:
VECTOR [G - > NUMERIC]DICTIONARY [G, H - > COMPARABLE]ORDENACION [G - > COMPARABLE]
• Permite aplicar operaciones sobre entidades cuyo tipo es un parámetro genérico formal.
![Page 113: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/113.jpg)
Genericidad en Java (JDK1.5)
• Basado en las templates de C++
• Se han rediseñado las colecciones de Java para acomodar el código genérico
• Se han rediseñado los iteradores para hacerlos más sencillos
• Permite genericidad restringida
![Page 114: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/114.jpg)
Ejemplos genericidad
Nuevo iterador: for (Tipo elem: colección)
![Page 115: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/115.jpg)
Ejemplos genericidad
![Page 116: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/116.jpg)
Enumerados (JDK1.5)
![Page 117: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/117.jpg)
Static Import (JDK1.5)
![Page 118: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/118.jpg)
Excepciones Java
• “Proporcionan una manera limpia de comprobar errores sin complicar el código”
• “Proporcionan, además, un mecanismo para señalar directamente los errores sin necesidad de usar indicadores (atributos, parámetros)”.
• “Son lanzadas cuando se detectan situaciones imprevistas de error”.
![Page 119: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/119.jpg)
119
Excepciones Java
BufferedReader br;int codigoProducto = Integer.parseInt (br.readLine() )
• Puede suceder algo inesperado como que:– br represente un fichero sobre un disco flexible que se ha extraído– br represente una conexión en red y se produzca una caída de la
red– br represente un fichero en mal estado sobre el disco duro– el usuario introduzca un carácter no numérico– el usuario introduce un código numérico incorrecto
Situaciones que deben ser manejadas por excepciones
![Page 120: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/120.jpg)
Excepciones Java
• Las excepciones son objetos. • Hay dos tipos:
– Comprobadas– No comprobadas
• Necesidad de definir subclases de Exception o RunTimeException.
![Page 121: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/121.jpg)
Jerarquía de Tipos de Excepciones Java
Object
Throwable
ExceptionError
RunTimeException
No comprobadas
Comprobadas
![Page 122: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/122.jpg)
Excepciones Comprobadas
• Subclases de Exception• Un método que lance una excepción comprobada,
debe especificarlo en su signatura.• El código que invoca un método que puede lanzar
una excepción comprobada debe manejarla mediante una cláusula try-catch.
• Situaciones comprobadas por el compilador
![Page 123: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/123.jpg)
123
Excepciones No Comprobadas
• Subclases de RuntimeException• Un método puede lanzar una excepción no
comprobada, sin especificarlo en su signatura.• El código que invoca un método que puede lanzar
una excepción no comprobada no debe manejarla. • Es recomendable listar todas las excepciones en la
signatura para facilitar su uso.
¿Cómo elegimos si una nueva excepción es comprobada o no comprobada?
![Page 124: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/124.jpg)
124
Uso de Excepciones Comprobadas
public class ClaveNoExiste extends Exception {public ClaveNoExiste() { super(); }
}// método en TablaHashpublic void cambiarValor (String clave, Object valor)
throws ClaveNoExiste { if (obtener(clave) == null)
throw new ClaveNoExiste ();…
}
TablaHash unaTabla;...try { unaTabla.cambiarValor(s,v);} catch (ClaveNoExiste e) {...} finally {...}
![Page 125: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/125.jpg)
Excepciones Comprobadas
¿Qué puede hacer el cliente de un método que lanza una excepción comprobada?
1) Capturarla y manejarla
2) Capturarla y asociarla a una de las excepciones declaradas en el método.
3) Declararla en la cláusula throws y no manejarla, con lo que se propaga al método que lo invocó.
![Page 126: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/126.jpg)
Excepciones No Comprobadas
¿Qué puede hacer el cliente de un método que lanza una excepción no comprobada?
1) Si no la captura se propaga al método que lo invocó.
2) También puede capturarla y manejarla.
3) Capturar la excepción y asociarla a una de las excepciones declaradas en el método.
![Page 127: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/127.jpg)
Excepciones Java
try {
“Sentencias con mensajes que pueden provocar excepciones”
} catch (unaExcepcion e) {“codigo manejo excepción”
} catch (OtraExcepcion e) {“codigo manejo excepción”
} finally {...} // se ejecuta se lance o no una excepción
![Page 128: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/128.jpg)
Excepciones en Java
try{
//sentencias
}catch (TipoExcepcion1 e){
//manejar excepción
}catch (TipoExcepcion2 e){
//manejar excepción
} ...
finally{
//sentencias que se ejecutan SIEMPRE
//salte o no una excepción
}
Ej: cerrar ficheros
-Se evalúan en orden
- Sólo se ejecuta una¡Una excepciónes un objeto!
![Page 129: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/129.jpg)
Ejemplos
public static int factorial (int n) throws NonPositiveException{
if (n<=0) throw new NonPositiveException (“Num.factorial”);…
}
try { Num.factorial(y); } catch (NonPositiveException e) { … }
![Page 130: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/130.jpg)
Ejemplospublic static int search (int [] a, int x) throws NullPointerException
NoEncontradoException{ … }
try { …;try { x = Arrays.search(v,7);}catch (NullPointerException e) {
throw new NoEncontradoException(); }} catch (NoEncontradoException e) {..}
¿Debo declarar NullPointerException en la signatura?
¿Es acertado considerar la situación de elemento no encontrado como una excepción?
![Page 131: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/131.jpg)
Captura de excepciones no comprobadas
try { x = y [n]; i = Arrays.search(z, x);}
catch (IndexOutOfBoundsException e) {
“manejar la excepción en el caso del acceso y[n]” }
No se sabe la procedencia exacta de la excepción no comprobada IndexOutOfBoundsException
Restringir el ámbito de la sentencia try
![Page 132: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/132.jpg)
Ejemplos
public class Arrays {public static int min (int [] a) throws NullPointerException,
EmptyException{ // EFECTO: Si a es null lanza NullPointerException, si no si a // está vacío lanza EmptyException, si no retorna el valor mínimo // del array aint m;try { m = a[0]; }catch (IndexOutOfBoundsException e) {
throw new EmptyException(“Arrays.min”); }for (int i = 1; i < a.length; i++) if (a[i] < m) m = a[i];return m; }
![Page 133: Lenguajes de Programación Tema 3. Paradigma Orientado a Objetos Pedro García López pgarcia@etse.urv.es](https://reader033.vdocuments.net/reader033/viewer/2022051401/5665b4731a28abb57c9193d0/html5/thumbnails/133.jpg)
Ejemplos
public class Arrays {public static boolean sorted (int [] a) throws
NullPointerException, EmptyException{ // EFECTO: Si a es null lanza NullPointerException, si no retorna // true si el array está ordenado en orden ascendente si no false
int prev;try { prev = a[0]; }catch (IndexOutOfBoundsException e) { return true; }for (int i = 1; i < a.length; i++)
if (prev <= a[i]) prev = a[i]; else return falsereturn true; }