Descargar la presentación
La descarga está en progreso. Por favor, espere
Publicada porEugenia Tebar Alarcón Modificado hace 7 años
1
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión 1.2.1
2
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Introducción Según lo visto hasta ahora “¿Cómo representaría N vectores en el espacio 3D?”: Integer v1_x=1, v1_y=4, v1_z=6; Integer v2_x=7, v2_y=3, v2_z=5; … Todo L.P. hace posible agrupar varios valores en una misma variable Al reducir el nº de variables los programas son más fáciles de desarrollar, entender y, por tanto, mantener Integer[ ] v1 = {1, 4, 6}; Integer[ ] v2 = {7, 3, 5}; … Y X Z v2 v1
3
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Arrays: definición Un array es un conjunto finito de elementos del mismo tipo almacenados en posiciones consecutivas de memoria. Dado que: A: Todos los elementos de un mismo tipo “requieren” los mismos bytes. B: Siempre se conoce la dirección de memoria de una variable. A y B hacen posible el acceso directo a los elementos de un array. El acceso directo permite acceder y modificar cualquier elemento del array del mismo modo que una variable independiente. El acceso directo en los arrays se lleva a cabo por indexación mediante el operador corchete: [ ] Cada elemento de un array de tamaño N tiene asociado un índice: El primer elemento tiene índice 0 y el último tiene índice N–1 Los arrays pueden contener elementos de cualquier tipo, arrays inclusive. Un array es un objeto y su tamaño no puede cambiarse tras crearse.
4
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Arrays: inicialización int[ ] v1 = {2, 34, 5}; /* v1 es un array con 3 elementos de tipo básico int: el primer elemento es 2, el segundo es 34 y el tercero es 5 */ Integer[ ] v2 = new Integer[7]; // v2 es un array vacío con capacidad para 7 elementos de tipo objeto Integer double[ ] v3; // v3 es un array de elementos de tipo básico double Diferencias entre v1, v2 y v3: v1 está inicializado (“tiene valores”) v2 no está inicializado (“no tiene valores”) v3 no es un array “todavía” (v3==null)
5
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Arrays: operaciones Suponiendo: int[ ] v1 = {2, 34, 5}; Integer[ ] v2 = new Integer[7]; Acceso a un elemento: int x = v1[0]; // x==2 Integer y = v2[0] ; // y==null (NULO, SIN VALOR) x=v1[-2]; y=v2[7]; MAL ( ArrayIndexOutOfBoundsException ) Modificación de un elemento: v2[0] = v1[1]; // Autoboxing Consultar el tamaño: int tams = v1.length + v2.length; // tams es una variable de tipo básico int inicializada con el valor 10 (3+7)
6
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Arrays de dos dimensiones int[ ][ ] m1 = {{3, 7, 4}, {2, 5, 9}}; /* m1 es un array de arrays que alberga 2 arrays con 3 elementos int cada uno. m1 representa a una matriz rectangular de enteros con 2 filas y 3 columnas */ int x = m1[0][1]; // x==7 Integer[ ][ ] m2 = new Integer[7][ ]; // m2 es una matriz que tendrá 7 filas, pero ninguna fila está creada todavía m2[3] = new Integer[8]; // la cuarta fila de m2 está creada pero no está inicializada Integer y = m2[3][6]; // y==null, no existe el elemento y = m2[5][1]; MAL ( ArrayIndexOutOfBoundsException )
7
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Arrays de objetos tablaPuntos tablaPuntos [0] = new PuntoImpl(1.0,1.0); tablaPuntos [1] = new PuntoImpl(1.0,2.0); tablaPuntos [2] = new PuntoImpl(1.0,3.0); tablaPuntos [3] = new PuntoImpl(1.0,4.0); 1.01.01.02.01.03.0 1.04.0 tablaPuntos [3] = new PuntoImpl(2.0,5.0); tablaPuntos = new PuntoImpl[5];
8
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos String Representan cadenas de caracteres Clase perteneciente al lenguaje (paquete java.lang) ENCAPSULA un array de elementos de tipo char y le añade funcionalidad Los objetos de tipo String son INMUTABLES La clase String no puede tener clases hijas Un literal (valor) String es toda secuencia de caracteres UNICODE encerrada entre dobles comillas (“…”)
9
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos String: ejemplo de uso Inicialización: String saludo = “Hola”; Consultar el número de caracteres: int tam = saludo.length(); // tam==4 Pasar a mayúsculas: String s2 = saludo.toUpperCase(); //”HOLA” Comparar dos cadenas: boolean iguales = saludo.equals(s2); //iguales==false
10
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos String: métodos de uso frecuente public final class String … { public int length( ) {…} public char charAt(int i) {…} public String concat(String s) {…} public boolean contains(CharSequence s) {…} public int indexOf(int c) {…} public String substring(int i1, int i2) {…} public String replace(char c1, char c2) {…} public String trim( ) {…} public String toLowerCase( ) {…} public String toUpperCase( ) {…} …. public boolean equals(Object o) {…} }
11
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Vector Clase perteneciente al paquete java.util (IMPORTAR) ENCAPSULA un array de OBJETOS y le añade funcionalidad. Los vectores tienen capacidad "ilimitada" Los vectores no pueden albergar tipos básicos. Todos los elementos de un vector deben ser del mismo tipo: O bien ser creados todos con la misma clase, O bien ser creados con clases que implementen una interfaz común.
12
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Vector: ejemplo de uso Inicialización: Vector v = new Vector (); Consultar el número de elementos: int tam = v.size(); // tam==0 Añadir un elemento al final: v.add(2.7); Añadir un elemento al principio: v.add(0, 4.9); Obtener un elemento según su índice: Double x = v.get(1); // x==2.7 Modificar un elemento según su índice: v.set(1, 3.5); Comprobar si contiene un elemento: boolean contiene = v.contains(2.7); //contiene==false
13
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Vector: métodos de uso frecuente public class Vector... { public Vector( ) {…} public int size( ) {…} public T get(int index) {…} public T set(int index, T element ) {…} public boolean add(T element ) {…} public void add(int index, T element ) {…} public boolean isEmpty( ) {…} public boolean contains(Object o) {…} public int indexOf(Object o) {…} … public boolean equals(Object o) {…} }
14
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Un parámetro genérico T representa a un tipo conocido en la definición de una clase o interfaz public class Vector... { private T[ ] elems; public Vector( ){…} public T get(int index) {…} public T set(int index, T element ) {…} public boolean add(T element ) {…} public void add(int index, T element ) {…} … } public class Vector... { private T[ ] elems; public Vector( ){…} public T get(int index) {…} public T set(int index, T element ) {…} public boolean add(T element ) {…} public void add(int index, T element ) {…} … } Tipos genéricos: concepto Los parámetros genéricos deben sustituirse por tipos concretos para poder usar objetos de tal clase o interfaz public class TestGenerico extends Test { public static void main(String[] args) { Vector v; v.add(6); mostrar(v); } public class TestGenerico extends Test { public static void main(String[] args) { Vector v; v.add(6); mostrar(v); }
15
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Tipos genéricos: sintaxis Si una interfaz tiene métodos genéricos se indica con tras su nombre Si una clase tiene atributos genéricos se indica con tras su nombre * = Un solo tipo genérico se indica con T, varios tipos genéricos se indican con T1, T2, T3, … interface Comparable { int compareTo(T e); } interface Comparable { int compareTo(T e); } public class ParejaImpl { private T1 e1; private T2 e2; … } public class ParejaImpl { private T1 e1; private T2 e2; … }
16
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Tipos genéricos: sintaxis Si una clase no tiene atributos genéricos pero implementa métodos genéricos, estos se indican tras sus modificadores En un método genérico al menos uno de sus parámetros o su tipo de retorno pueden cambiar en distintas llamadas al método public class Utiles { … public static Vector aVector(T a) { Vector v = new Vector (); v.add(a); return v; } … } public class Utiles { … public static Vector aVector(T a) { Vector v = new Vector (); v.add(a); return v; } … } public class TestGenerico2 extends Test { public static void main(String[] args) { Integer x = 3; String s = "Hola " ; Vector v1 = Utiles.aVector(x); Vector v2 = Utiles.aVector(s); mostrar(v1); mostrar(v2); } public class TestGenerico2 extends Test { public static void main(String[] args) { Integer x = 3; String s = "Hola " ; Vector v1 = Utiles.aVector(x); Vector v2 = Utiles.aVector(s); mostrar(v1); mostrar(v2); }
17
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Tipos genéricos: sintaxis Un atributo genérico se concretará al crear o instanciar un objeto de la clase a la que pertenece el atributo public class ParejaImpl … { private T1 e1; private T2 e2; … } public class ParejaImpl … { private T1 e1; private T2 e2; … } public class TestGenerico3 extends Test { public static void main(String[] args) { Pareja p = new ParejaImpl ( ); … } public class TestGenerico3 extends Test { public static void main(String[] args) { Pareja p = new ParejaImpl ( ); … }
18
UD5: Arrays, Cadenas y Vectores. Tipos Genéricos Tipos genéricos: consideraciones Los operadores con un tipo como operando NO admiten tipos genéricos. Ejemplo: instanceof NO es posible: constructores de un tipo T Inicializar arrays de un tipo T a instanceof Vector// bien (tipo crudo) a instanceof Vector // mal a instanceof T // mal T a = new T( );// mal T[ ] = new T[10]; // mal T a = (T) new Object(); // warning a instanceof Vector// bien (tipo crudo) a instanceof Vector // mal a instanceof T // mal T a = new T( );// mal T[ ] = new T[10]; // mal T a = (T) new Object(); // warning
Presentaciones similares
© 2024 SlidePlayer.es Inc.
All rights reserved.