PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

24
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila

Transcript of PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Page 1: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

PROGRAMACIÓN ORIENTADA A OBJETOS

Unidad 1 GENERICIDAD

M.S.C. Ivette Hernández Dávila

Page 2: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Clases fundamentales• Todas las clases de Java poseen una superclase común,

esa es la clase Object. Por eso los métodos de la clase Object son fundamentales ya que todas las clases los heredan.

• Esos métodos están pensados para todas las clases, pero hay que redefinirlos para que funcionen adecuadamente.

• Es decir, Object proporciona métodos que son heredados por todas las clase. La idea es que todas las clases utilicen el mismo nombre y prototipo de método para hacer operaciones comunes como comprobar igualdad, clonar, .... y para ello habrá que redefinir esos métodos a fin de que se ajusten adecuadamente a cada clase.

Page 3: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Comparar objetos• La clase Object proporciona un método para

comprobar si dos objetos son iguales. Este método es equals. Este método recibe como parámetro un objeto con quien comparar y devuelve true si los dos objetos son iguales.

• No es lo mismo equals que usar la comparación de igualdad. Ejemplos:

Page 4: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

• El operador “==” devuelve true si los dos objetos se refieren a la misma cosa (las dos referencias apuntan al mismo objeto).

• Realmente en el ejemplo anterior la respuesta del método equals sólo será válida si en la clase que se está comparando (Coche en el ejemplo) se ha redefinido el método equals. Esto no es opcional sino obligatorio si se quiere usar este método. El resultado de equals depende de cuándo consideremos nosotros que devolver verdadero o falso.

Page 5: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

• La clase Object define una serie de métodos que pueden utilizarse sobre todos los objetos que se creen en Java. Estos métodos son: clone(), equals(), finalize(), getClass(), hashCode(), toString(), wait(), notify() y notifyAll().

• El método toString() devuelve una cadena asociada al objeto. De esta forma todos los objetos en Java tienen una representación en forma de cadena de texto.

• El método hashCode() devuelve un entero que puede utilizarse como identificador único del objeto en la máquina virtual.

Page 6: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

La madre de todas las clases: Object

• En Java todas las clases descienden de la clase Object.

• Es como si el compilador añadiera “extends Object” a todas las clases que no extienden explícitamente a ninguna otra.

Page 7: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Introducción: Genericidad• La programación orientada a objetos tiene como principales

objetivos favorecer la confiabilidad, reusabilidad y extensibilidad del software.

• Adoptar el enfoque propuesto por la programación orientada a objetos implica:

En la etapa de diseño reducir la complejidad en base a la descomposición del problema en piezas más simples a partir de la identificación de objetos y su organización en una estructura de clases.

En la etapa de implementación utilizar un lenguaje que permita retener la estructura de clases identificada en la etapa de diseño y encapsular la representación interna de modo que sea inaccesible desde el exterior.

Page 8: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Genericidad• El encapsulamiento permite usar una clase considerando qué

funcionalidad brinda, sin tener en cuenta cómo la implementa.

• La herencia permite aumentar el nivel de abstracción mediante un proceso de clasificación en niveles.

• El proceso consiste en abstraer lo que es común y esencial en un conjunto de entidades para formar un concepto general que comprenda a todas.

• Una clase derivada puede pensarse como una especialización de una clase más general.

• Alternativamente podemos pensar a una clase derivada como una extensión de la clase base.

Page 9: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Genericidad• La extensibilidad se refiere a reducir el impacto de los cambios.

• Las modificaciones con frecuencia pueden resolverse definiendo nuevas clases específicas, sin necesidad de cambiar las que ya han sido verificadas.

• La reusabilidad evita escribir el mismo código repetidamente. Para lograrlo es necesario distinguir el comportamiento general del particular.

• La genericidad favorece la reusabilidad.

• Una clase genérica encapsula a una estructura cuyo comportamiento es independiente del tipo de las componentes.

Page 10: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Genericidad• La genericidad puede modelarse en Java de dos

maneras diferentes: usando tipos de datos parametrizados o usando herencia.

Page 11: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Clases parametrizadas• Para dar soporte a la genericidad, en la versión

1.5 Java introduce el concepto de genérico. Los genéricos permiten definir parámetros que se corresponden con un tipo en la definición de una clase o una interfaz. Estos genéricos dan lugar al concepto de clase (o interfaz) genérica. Las clases (o interfaces) genéricas también suelen denominarse clases parametrizadas.

Page 12: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

• La principal utilidad de las clases parametrizadas es la de permitir la creación de contenedores genéricos que acepten elementos independientes de su tipo. Hasta la versión 1.4 de Java, la genericidad se conseguía construyendo contenedores que almacenaban objetos de la clase Object y el casting posterior a la clase correspondiente.

Page 13: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Jerarquía de herencia entre clases parametrizadas

Page 14: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Ejemplo de uso genérico• El siguiente ejemplo muestra cómo utilizar los

genéricos al crear una clase Concesionario genérica, que luego será capaz de generar objetos Concesionario de objetos Deportivo y objetos Concesionario de objetos Utilitario.

Page 15: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

• Al crear una clase parametrizada se crea una superclase de la que heredarán cada una de las clases con una parametrización específica. A esta clase se la puede referenciar utilizando el símbolo de interrogación como parámetro. Así, la clase VectorDinamico<?> es superclase de todas las clases VectorDinamico, y puede utilizarse para aquellos casos en los que deseemos realizar alguna operación sobre un VectorDinamico sin importarnos el tipo de objeto que almacena.

Page 16: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Métodos genéricos• Al igual que se definen clases genéricas, es posible definir

métodos genéricos (incluso en clases no genéricas).• Es posible definir tipos genéricos en el interior de las

clases y utilizarlos para definir los parámetros de los métodos y los valores devueltos por estos. Al definir el método, las llaves angulares aparecen después de los modificadores del método y antes del tipo devuelto.

Page 17: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Genericidad con más de una variable

• Una clase genérica (o un método) puede referencias más de una variable genérica.

• Ejemplo:• La interfaz Map<K,V> del API de Java• public interface Map<K, V>{ … }• Permite establecer una correspondencia entre objetos de un

tipo (denominados claves) y de otro (denominados valores)• Ambos tipos pueden coincidir.• Ejemplo de instanciación:• Map<Integer, String> m = new SortedMap<Integer,

String>();• m.put(new Integer(5), “casa”);• String s = m.get(new Integer(5));

Page 18: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Bibliografía• Tutorial “Learning the Java Lenguage. Generics”

disponible en Inglés en la siguiente dirección: http://java.sun.com/docs/books/tutorial/java/generics/

Page 19: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Colecciones de Objetos• Una colección de objetos es sencillamente un

conjunto de cosas del mismo tipo.• En Java, existen colecciones de objetos que

también son considerados otros objetos, están modelados por clases o por estructuras primitivas. ArrayList es una clase que modela a un grupo especial de colecciones.

Page 20: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

ArrayList• La clase ArrayList almacena un conjunto de

objetos del mismo tipo a manera de lista. Java tiene una suite completa de objetos “Collection” que almacenan objetos de varias maneras. ArrayList es el tipo de colección más famoso y comúnmente usado.

Page 21: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Métodos

Page 22: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

Ejemplo de operaciones más utilizadas•Declaración de un ArrayList de

enteros

•Creación de un ArrayList de enteros

Page 23: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

• Añadiendo elementos al ArrayList

• Conociendo el tamaño del ArrayList

• Obteniendo un elemento del ArrayList

• Borrando un elemento del ArrayList

Page 24: PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD M.S.C. Ivette Hernández Dávila.

• Existen otras clases que modelan colecciones de objetos como HashMap, HashSet, Vector, etc. todas ellas propias de Java. También existen estructuras primitivas para manejar conjuntos de elementos conocidas como arreglos.