(POO-GI) Clases y Tipos de Datos

29
Manuel Lama Penín [email protected] Grupo de Sistemas Inteligentes Departamento de Electrónica e Computación Universidade de Santiago de Compostela PROGRAMACI PROGRAMACI PROGRAMACI PROGRAMACI PROGRAMACI PROGRAMACI PROGRAMACI PROGRAMACI Ó Ó Ó Ó Ó Ó N ORIENTADA A OBJETOS N ORIENTADA A OBJETOS N ORIENTADA A OBJETOS N ORIENTADA A OBJETOS N ORIENTADA A OBJETOS N ORIENTADA A OBJETOS N ORIENTADA A OBJETOS N ORIENTADA A OBJETOS CLASES Y TIPOS DE DATOS CLASES Y TIPOS DE DATOS CLASES Y TIPOS DE DATOS CLASES Y TIPOS DE DATOS CLASES Y TIPOS DE DATOS CLASES Y TIPOS DE DATOS CLASES Y TIPOS DE DATOS CLASES Y TIPOS DE DATOS

description

(POO-GI) Clases y Tipos de Datos

Transcript of (POO-GI) Clases y Tipos de Datos

Page 1: (POO-GI) Clases y Tipos de Datos

Manuel Lama Pení[email protected]

Grupo de Sistemas Inteligentes

Departamento de Electrónica e Computación

Universidade de Santiago de Compostela

PROGRAMACIPROGRAMACIPROGRAMACIPROGRAMACIPROGRAMACIPROGRAMACIPROGRAMACIPROGRAMACIÓÓÓÓÓÓÓÓN ORIENTADA A OBJETOSN ORIENTADA A OBJETOSN ORIENTADA A OBJETOSN ORIENTADA A OBJETOSN ORIENTADA A OBJETOSN ORIENTADA A OBJETOSN ORIENTADA A OBJETOSN ORIENTADA A OBJETOS

CLASES Y TIPOS DE DATOSCLASES Y TIPOS DE DATOSCLASES Y TIPOS DE DATOSCLASES Y TIPOS DE DATOSCLASES Y TIPOS DE DATOSCLASES Y TIPOS DE DATOSCLASES Y TIPOS DE DATOSCLASES Y TIPOS DE DATOS

Page 2: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 2

� Un programa se puede entender como una serie de instrucciones que operan con un conjunto de datos (entrada ) y generan otro conjunto de datos (salida ).

� Los tipos de datos disponibles en un lenguaje de programación limitanlos datos que es posible representar y, por tanto, el tipo de programas que se pueden crear.Ejemplo: si un lenguaje de programación no dispone de datos de tipo decimal no se podrá crear un programa para el cálculo del número PI.

� En programación orientada a objetos se establece la equivalencia entre clases y tipos de datos : una clase es un tipo de dato definido por el programador para representar los datos del problema que trata de resolver.

� Se pueden crear nuevos tipos de datos definiendo nuevas clases que posean las mismas propiedades del tipo de datos.

Tipos de datosDefinición

Page 3: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 3

Se ejecutan una única vez: a la hora de reservar memoria para una variable de una clase.

No devuelven ningún valor (no pueden tener la sentencia return).

Se reserva memoria y se van valores iniciales a los atributos de la clase (comunes a todas las instancias).

Características de la entidad que se intenta representar.

Variables usadas por varios métodos en sus operaciones.

Declaración de variables (no se reserva memoria).

Accesibles desde todos los métodos de la clase.

public <final | abstract> class <nombre_clase>{// Atributos

<tipo_acceso> <tipo> <nombre_atrib>;

<tipo_acceso> <static | final> <tipo> <nombre_atrib> = <valor>;

// Constructores

// Constructor por defectopublic <nombre_clase> ( ) { <código> }

public <nombre_clase> (<tipo> <nombre> *) { <código> }

// Destructores (no existen)

... (continuar )}

Tipos de datosObjetos (clases)

Page 4: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 4

Implementan cualquier operación relacionada con la clase.

Tienen acceso a todos los atributos de la clase y también utilizan variables locales (sólo accesibles desde los métodos).

Escritura de los atributos de las clases.

Tienen sentido si el tipo de acceso de los atributos es protegido o privado.

Lectura de los atributos de las clases.

Pueden admitir argumentos.

Tienen sentido si el tipo de acceso de los atributos es protegido o privado.

... (continuar )

// Métodos de lectura (getters)

public <tipo_atributo> get<nombre_atributo> ( ) {

<código>return <nombre_atributo>;

}

// Métodos de escritura (setters)

public void set<nombre_atributo> (<tipo_atributo> <nombre> * ) { <código> }

// Otros métodos

<tipo_acceso> <static | final> <tipo> <nombre_método> (<tipo> <nombre>) { <código> }}

Tipos de datosObjetos (clases)

Page 5: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 5

� Todas las construcciones o elementos de un programa se almacenan en la memoria del ordenador para que puedan ser accedidas por parte del procesador.

� El código de los métodos de las clases se almacenan en una zona de la memoria a la que el procesador accederá para ir leyendo cada una de las órdenes o sentencias de las que consta el método.

� Un dato es una posición de memoria en la que se almacena el valor de una variable utilizada por el programa en sus operaciones.

� Dependiendo del tipo de dato se utilizará una zona de la memoria u otra para almacenarlo y, además, el tamaño que ocuparán no será el mismo para todos los tipos de datos.

� El tamaño ocupado depende de la complejidad del tipo de dato.Un objeto no ocupa lo mismo que una variable de tipo entero.

Tipos de datosDefinición

Page 6: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 6

� Registros , los datos se almacenan en una zona de memoria localizada en el procesador con lo que la lectura/escritura de los datos es muy rápida (en comparación con las otras alternativas de almacenamiento).

� El número de registros es limitado .

� El compilador decide si en un programa se utilizarán registros para almacenar los datos durante su ejecución.El programador incluso desconocerá si el procesador está utilizando los registros para almacenar los datos del programa.

� Pila (stack ), zona de memoria RAM a la que el procesador tiene acceso directo y en la que, por tanto, la lectura/escritura de los datos será rápida.

� El compilador debe conocer con antelación cuánta memoria se necesita reservar durante la ejecución del programa y de cuántamemoria libre dispone el stack.

� Almacena el código correspondiente a los métodos de los objetos.

Tipos de datosFormas de almacenamiento de datos

Page 7: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 7

� Montón (heap ), zona de memoria RAM en la que se almacenarán los objetos Java y en la que el compilador no necesita conocer de cuánta memoria se dispone y cuánta memoria se necesita reservar.

� Flexibilidad a la hora de gestionar la reserva de memoria por parte del compilador (uso del operador new ), dado que no es necesario determinar el espacio de memoria usado para el almacenamiento.

� La lectura/escritura de los datos en el montón es más lenta que la de datos almacenados en la pila, dado que el procesador no tiene acceso directo a la pila.

� Almacenamiento estático (static ), zona de memoria RAM que contendrá aquellos datos que están disponibles durante todo el tiempo de ejecución del programa.

� Los objetos nunca pueden ser almacenados en la parte “estática” de la memoria RAM.

Tipos de datosFormas de almacenamiento de datos

Page 8: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 8

int

int

String

String

Reserva de memoria para los objetos que han sido declarados: operador new

Son referencias a objetos, con lo que no ocupan memoria

Tipos de datosFormas de almacenamiento de datos

float

public class Coche{// Atributos

private String marca;

private String modelo;

private int ciclindrada;

private int numPuertas;

private float precio;

// MétodosCoche(String emp, String tipo) {

marca= new String(emp);

modelo= new String(tipo);

}

...}

Stack (memoria)

Heap (memoria)

Page 9: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 9

� En Java cuando se declara un objeto no estamos reservando memoria, sino que se está creando una referencia (ó puntero) a un dato: se asigna un nombre a la posición de memoria en la que se almacenará el dato.

<tipo_dato> <nombre>;<tipo_dato> <nombre>; // <nombre> es la // <nombre> es la referenciareferencia al datoal dato

String String marcaCochemarcaCoche;; /*/* StringString es el tipo de datoes el tipo de dato

marcaCochemarcaCoche es la referencia al dato */es la referencia al dato */

� Una vez hemos declarado el objeto, la reserva de memoria en la que se almacenará el dato se realiza usando el operador new que se encargará de invocará al constructor de la clase (o tipo de dato) a la que pertenece el objeto.

<nombre> = <nombre> = newnew <constructor><constructor>

<constructor> := <tipo_dato> (arg<constructor> := <tipo_dato> (arg 11, arg, arg 22, ... , , ... , argarg nn))

marcaCochemarcaCoche = = newnew StringString(“Jaguar”);(“Jaguar”);

Tipos de datosReferencias

Page 10: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 10

� El constructor de una clase es un método que se invoca siempre que se solicita la reserva de memoria para almacenar un objeto (ó dato) de dicha clase.

� La función básica del constructor debería ser asignar valores iniciales (inicializar ) a los atributos no constantes de una clase.

� El espacio de memoria reservado para los atributos de una clase no puede ser liberado mientras se esté usando dicha clase.

� A diferencia de C++, en Java no se puede liberar la memoria reservada previamente para almacenar los datos: únicamente se puede solicitar su reserva (usando new ).

� No es necesario gestionar el uso de la memoria, dado que la máquina virtual de Java decide cuándo un objeto deberá ser eliminado de la memoria, liberando espacio para que así pueda ser ocupado por otro dato u objeto.

Tipos de datosReferencias

Page 11: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 11

� La definición de una clase es estática en la medida en que cuando se define no se realiza ninguna reserva de memoria ni se ejecuta ningún método.

� En el momento en que utilizamos la clase (declarando ejemplos o instanciando ) es cuando requerimos que reserve espacio de memoria para almacenar los datos incluidos en la definición de la clase.

<nombre_clase> <nombre_instancia>;<nombre_clase> <nombre_instancia>; // // InstanciaciónInstanciación de una clasede una clase

Empleado pedro;Empleado pedro;

� Para acceder a los elementos de una instancia (atributos y métodos) se utiliza el operador “.”

<nombre_instancia>.<método/atributo_clase>

donde método/atributo_clase está referido a los métodos o atributos públicos de la clase de la que creamos la instancia.

Tipos de datosReferencias

Page 12: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 12

� Cuando realizamos una asignación de un referencia refA a otra referencia refB (refB = ref A) no estaremos copiando el contenido del espacio de memoria correspondiente a la referencia refA al contenido del espacio de memoria reservado para la referencia refB.

� Asignación de nombres de la referencias (o punteros).

� Se podrá acceder y manipular el mismo espacio de memoria usando dos o más nombres diferentes.

� Para asignar el contenido de memoria asociado a la referencia refA al espacio de memoria apuntado por la referencia refB deberemos utilizar el método clone() .

� El método clone se hereda de Object , que es la clase base (ó padre) de la que derivan todas las clases definidas en Java.

� El programador debe sobrecargar el método clone() para cada clase.

Tipos de datosReferencias

Page 13: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 13

Al modificar el valor de noEmp también se cambia el valor del atributo nombre del objeto emp debido a que se accede a la misma dirección de memoria (variable).

nombre y nuevo son referencias a la misma posición de memoria y, por tanto, se trata de la misma variable (con distinto nombrado o referencia).

public class Empleado{// Atributos

private StringBuffer nombre;private int DNI;private int salario;private Empresa empresa;

// MétodosEmpleado (StringBuffer nuevo)

{ nombre= nuevo; }

String getNombre ()

{ return nombre.toString(); }

...}

public class Nomina{// Método (de clase principal)

static void main (String arg[]) {StringBuffer noEmp;

noEmp = new StringBuffer(“manuel”);

Empleado emp= new Empleado(noEmp);System.out.println(emp.getNombre());

noEmp.append(“López Pérez”);

System.out.println(noEmp.toString());System.out.println(emp.getNombre());

}}

Tipos de datosReferencias

Page 14: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 14

� Los tipos de datos primitivos no necesitan reservar memoria de forma explícita y no son referencias a posiciones de memoria, sino posiciones de memoria en sí.

� A diferencia de los objetos, los tipos de datos primitivos se almacenan en el stack , lo que aumenta la eficiencia a la hora de acceder a ellos.

� Se almacenan en el stack porque son más usados que los objetos: para definir un objeto habitualmente se utilizarán a su vez tipos de datos primitivos.

� Con los tipos de datos primitivos de Java podemos representar números(enteros y decimales), variables lógicas (cierto/falso), referencias nulasy caracteres de texto.

� Cada uno de los formatos numéricos se diferencian entre sí en elrango de valores que pueden tomar.

� Los caracteres de texto no son usados frecuentemente (clase String ).

Tipos de datosPrimitivos

Page 15: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 15

� Se declaran de la misma forma que los objetos, y la única diferencia con ellos consiste en que dicha declaración implica la reserva automática del espacio de memoria necesario para almacenar el tipo de dato.

<tipo_dato_primitivo> <nombre>;<tipo_dato_primitivo> <nombre>;

floatfloat salarioEmpleado;salarioEmpleado;

intint numeroRuedasnumeroRuedas;;

� El espacio de memoria necesario para almacenar un tipo de dato define el rango de valores que puede tomar dicho tipo de dato.Ejemplo: si tuviésemos un tipo de dato numérico que ocupase 2 bits en memoria, los datos asociados a ese tipo solamente podrían tomar valores en el rango de 0 ... 3.

� Cuanto mayor sea el rango de valores que puede tomar el tipo de dato, mayor será el espacio de memoria que será necesario para almacenarlo.

Tipos de datosPrimitivos

Page 16: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 16

vacío

números decimales

números enteros

datos especiales

Void––––––void

DoubleIEEE745IEEE74564-bitdouble

FloatIEEE745IEEE74532-bitfloat

Long+263 – 1-26364-bitlong

Integer+231 – 1-23132-bitint

Short+215 – 1-21516-bitshort

Byte+127-1288-bitbyte

Char––––16-bitchar

Boolean––––––boolean

Objeto asociado

Valor máximo

Valor mínimo

TamañoTipo

Tipos de datosPrimitivos

Page 17: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 17

� Para cada uno de los tipos de datos primitivos la distribución estándar de Java define una clase que contiene métodos que realizan operaciones sobre el tipo de dato asociado a ella.

� Dado que es más ineficiente el uso de clases, únicamente se debería utilizar la clase en vez del dato primitivo cuando sea necesario hacer uso del objeto asociado al tipo de dato.

� Molde (cast ) se utiliza para realiza la conversión entre aquellos tipos de datos que están relacionados o podrían ser representados de formas diferentes.

Ejemplo: un entero se puede tratar como un decimal, y viceversa.

<dato1> = (<tipo_dato>) <dato2>;<dato1> = (<tipo_dato>) <dato2>;

salarioPesetas = salarioPesetas = ((intint )) salarioEuros * 166,386;salarioEuros * 166,386;// Correcto// Correcto

salarioPesetas = (salarioPesetas = (charchar) salarioEuros * 166,386;) salarioEuros * 166,386; // // IncorrectoIncorrecto

Tipos de datosPrimitivos

Page 18: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 18

Tipos de datosConjunto de datos (arrays)

� En Java un array se trata como un tipo especial deobjeto.

� Al igual que para cualquier objeto , la reserva de memoria del array se realiza usando el operador new y se almacena en el montón.

<tipo_dato>[ ] <<tipo_dato>[ ] < nombre_arraynombre_array >;>;

<<nombre_arraynombre_array > = > = newnew <tipo_dato>[<tamaño>];<tipo_dato>[<tamaño>];

StringString[ ] [ ] articulosarticulos; ;

articulosarticulos = = newnew StringString[50];[50];

memoria

<tipo>[0]

<tipo>[1]

<tipo>[2]

<tipo>[3]

<tipo>[4]

� Un array se define como una secuencia de datos del mismo tipo que ocupan posiciones adyacentes de memoria.

� Los arrays pueden estar formados por cualquiertipo de dato (sea primitivo o no).

Page 19: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 19

� Cada uno de los datos de un array se identifica por la posición (ó indice) que ocupa en dicho array.

<<nombre_arraynombre_array >[<índice>]>[<índice>]

donde índice es una variable de tipo entero (int ) que tomará valores desde 0 (primera posición) hasta n-1 (con n el tamaño del array).

� Para cada uno de los elementos del array se debe reservar memoria, tal y como si se tratase de un dato cualquiera.

<<nombre_arraynombre_array >[>[indiceindice ] = ] = newnew <tipo_dato>(<tipo_dato>( argsargs ););

articulosarticulos[3]= [3]= newnew StringString(“zapatos”); (“zapatos”); // Reserva para el elemento // Reserva para el elemento 44

� Se definen métodos y atributos para acceder a las propiedades del array; concretamente el atributo length indica el tamaño del array.

<<nombre_arraynombre_array >.>.lengthlength

System.out.printlnSystem.out.println(“Tamaño del array: “ + articulos.length);(“Tamaño del array: “ + articulos.length);

Tipos de datosConjunto de datos (arrays)

Page 20: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 20

cada uno de los elementos del array se trata como un dato independiente, y, por tanto, cada elemento debe ser inicializado .

en la inicialización del array se especifica su tamaño y el tipo de los datos que se almacenan en dicho array.

en la declaración del array no se indica su tamaño; únicamente se especifica el tipo de datos que formarán el array.

public class Empresa{// Atributos

private String nombre;private int numeroEmpleados;

private Empleado[ ] empleados ;

// MétodosEmpresa (int tamaño, String emp, String empresa) {

numeroEmpleados = tamaño;

empleados = new Empleado[numeroEmpleados] ;

nombre = new String(empresa);

for(int indice=0;indice<numeroEmpleados;indice++)empleados[ indice ] = new Empleado(emp[ indice ]);

}

...}

Tipos de datosConjunto de datos (arrays)

Page 21: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 21

� Un array multidimensional es un array cuyos elementos son a su vez arrays, los cuales pueden ser también arrays de tipo multidimensional, y en el que los elementos de la última dimesión son los que contienen los tipos de datos.

� Para arrays de dos dimensiones (n x m )se estaría representando una matriz de n filas y m columnas.

� En un array multidimensional es necesario reservar espacio de memoria para cada unade las dimensiones del array, extendiendo latécnica usada para un array unidimensional.

<tipo_dato>[ ][ ] <<tipo_dato>[ ][ ] < nombre_arraynombre_array >;>;

<<nombre_arraynombre_array > = > = newnew <tipo_dato>[tamaño_fila][<tamaño_columna>];<tipo_dato>[tamaño_fila][<tamaño_columna>];

<array>[0]

<array>[1]

<array>[2]

<array>[3]

<tipo>[0]

<tipo>[1]

<tipo>[2]

columna 0

array 4 x 3

Tipos de datosConjunto de datos (arrays)

Page 22: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 22

� Una vez que han sido inicializados, los arrays no pueden cambiar su tamaño; si necesitamos almacenar nuevo datos tendremos que eliminar datos del array.

� En muchas aplicaciones se desconoce el número de datos del mismo tipo que es necesario almacenar, y, por tanto, el uso de arraysno es lo más recomendado para representar los datos. Ejemplo: en un programa de gestión de matrícula de estudiantes, apriori no se conoce el número definitivo de alumnos.

� En la distribución estándar de Java se introducen clases que permiten definir conjuntos de datos (del mismo o distinto tipo) cuyo tamaño puede ser redefinido cuando se necesite un espacio de memoria extra.

� Si los datos son de distinto tipo es necesario controlar el tipo de dato cuando recuperamos o almacenamos un nuevo dato.

� Todas las clases se encuentran en el paquete java.util

Tipos de datosConjunto de datos (arrays)

Page 23: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 23

� La clase ArrayList permite gestionar dinámicamente un conjunto (ó vector) de objetos , adaptando automaticamente el espacio de memoria que sea necesario en cada momento .

� La clase ArrayList no puede almacenar directamente tipos de datos primitivos; se crea y almacena el objeto asociado al dato primitivo.

� Incorpora una serie de métodos que se utilizarán para acceder de varias formas a los elementos del vector, lo que evitará tener que implementar código para manipular el contenido del vector (como en los arrays).

� Añadir o sustituir un objeto del vector.

add(Objectadd(Object objobj )) // Añade // Añade objobj al final del vector.al final del vector.

add(intadd(int pos, pos, ObjectObject objobj )) // Añade // Añade objobj en posición en posición pospos ..

addElement(ObjectaddElement(Object objobj )) // Añade // Añade objobj al final del vector al final del vector e incrementa su tamaño en e incrementa su tamaño en 11..

setElementAt(ObjectsetElementAt(Object objobj , , intint pos)pos) // Sustituye el objeto que está // Sustituye el objeto que está en la posición en la posición pospos por por objobj ..

Tipos de datosConjunto de datos: Clase ArrayList

Page 24: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 24

� Eliminar o borrar un objeto del vector.

booleanboolean removeElement(ObjectremoveElement(Object objobj )) // Borra la primera ocurrencia // Borra la primera ocurrencia de de objobj en el vector.en el vector.

BooleanBoolean removeElementAt(intremoveElementAt(int pos)pos) // Borra el objeto que está en la// Borra el objeto que está en laposición posición pospos ..

booleanboolean removeAllElementsremoveAllElements ( )( ) // Borra todos los elementos.// Borra todos los elementos.

� Determinar si un objeto se encuentra en el vector.

booleanboolean contains(Objectcontains(Object objobj ))

� Devolver el objeto almacenado en una posición dada.

ObjectObject get(intget(int pos)pos)

� Devolver los parámetros de configuración del vector.

intint capacitycapacity ( )( ) // Devuelve la capacidad // Devuelve la capacidad actualactual del vector.del vector.

intint sizesize ( )( ) // Devuelve el // Devuelve el número de objetosnúmero de objetos del vector.del vector.

Tipos de datosConjunto de datos: Clase ArrayList

Page 25: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 25

si el número de datos del conjunto es igual al tamaño inicial, al introducir un nuevo dato automáticamente se aumenta la capacidad del conjunto de datos.

en la inicialización se introduce como argumento el tamaño inicial del conjunto de datos y, a diferencia de los arrays, dicho tamaño inicial no es fijo , sino que irá cambiando a medida que se introduzcan más datos.

public class Empresa{// Atributos

private String nombre;private int numeroEmpleados;

private Vector empleados;

// MétodosEmpresa (int tamaño, String emp) {

numeroEmpleados = tamaño;nombre = new String(emp);

empleados = new Vector(numeroEmpleados);

}

void introducirEmpleado(Empleado emp) { empleados.add(emp); }

void eliminarEmpleado(Empleado emp) {

int index = empleados.indexOf(emp);empledos.remove(index);

}

... (continuar )

Tipos de datosConjunto de datos: Clase ArrayList

Page 26: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 26

el método get(numeroEmpleados) devuelve el objeto que ha sido almacenado en la última posición, la cual debería coincidir con el número de empleados de la empresa.

el método removeElement(emp) busca la posición del vector en la que está emp y elimina su contenido.

el método contains( emp) determinará si el objeto emp está almacenado en el vector, con lo que noserá necesario programar código para comprobarlo.

... (continuar )

void borrarEmpleado(Empleado emp) { empleados.removeElement(emp); }

boolean perteneceEmpresa(Empleado emp) {

if( empleados.contains(emp) ) {

System.out.println(“Pertenece”);return true;

}else {

System.out.println(“No pertenece”);return false;

}}

Empleado ultimoEmpleado( ) {

Object ultimo = empleados.get(numeroEmpleados) ;

return (Empleado) ultimo;}

}

Tipos de datosConjunto de datos: Clase ArrayList

Page 27: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 27

Tipos de datosConjunto de datos: Clase Hashtable

� La clase Hash implementa una tabla de búsqueda rápida (tabla hash) en la que los objetos se guardan en la tabla asignándoles un identificador que permite su lectura rápida. tabla se recuperan.

� Incorpora una serie de métodos que se utilizarán para acceder de varias formas a los elementos del vector, lo que evitará tener que implementar código para manipular el contenido del vector (como en los arrays).

� Añadir a la tabla hash un par identificador/objeto.

put(Objectput(Object keykey , , ObjectObject objobj )) // Añade // Añade objobj a la tabla a la tabla hashhash con elcon elidentificador identificador keykey ..

� Obtener un objeto de la tabla hash.

ObjectObject get(Objectget(Object keykey )) // Obtiene el objeto asociado con el // Obtiene el objeto asociado con el indentificadorindentificador keykey ..

� Eliminar de la tabla hash un objeto.

remove(Objectremove(Object keykey )) // Elimina el objeto asociado a // Elimina el objeto asociado a keykey ..

Page 28: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 28

el objeto id de la clase Integer, asociado al dato primitivo dni definido en la clase Empleado, será el identificador del objeto emp y, por tanto, toda referencia al objeto tendrá lugar utilizando dicho identificador (se considera como una clave que permite identificarlo).

en la inicialización se introduce como argumento el tamaño inicial del conjunto de datos y, a diferencia de los arrays, dicho tamaño inicial no es fijo , sino que irá cambiando a medida que se introduzcan más datos.

public class Empresa{// Atributos

private String nombre;private int numeroEmpleados;

private Hashtable empleados;

// MétodosEmpresa (int tamaño, String emp) {

numeroEmpleados = tamaño;nombre = new String(emp);

empleados = new Hashtable(numeroEmpleados);

}

void introducirEmpleado(Empleado emp) {

Integer id = new Integer(emp.dni);empleados.put(id, emp);

}

... (continuar )

Tipos de datosConjunto de datos: Clase Hashtable

Page 29: (POO-GI) Clases y Tipos de Datos

© Manuel Lama Penín Clases y Tipos de datos 29

el método containsKey(DNI) determina si el objeto DNI es un identificador de algún objeto en la tabla hash empleados , o lo que es lo mismo, si existe una clave DNI dentro de la tabla hash. Alternativamente podríamos usar el método containsValue(obj) que busca sielobjeto obj está almacenado en la tabla hashempleados .

para acceder (eliminar o leer) a un objeto (en este caso, empleado) almacenado en la tabla hash únicamente se necesitará utilizar la clave o identificador (dni , que utilizamos en su forma objeto, DNI) asociado al objeto que se desea eliminar.

... (continuar )void borrarEmpleado(int dni) {

Integer DNI = new Integer(dni);empleados.remove(DNI);

}

Empleado obtenerEmpleado(int dni) {

Integer DNI = new Integer(dni);Object empleado = empleados.get(DNI);

return (Empleado) empleado;}

boolean perteneceEmpresa(int dni) {Integer DNI = new Integer(dni);

if( empleados.containsKey(DNI) )return true;

elsereturn false;

}}

Tipos de datosConjunto de datos: Clase Hashtable