Title: Java
1Java Modulo 2
- Clases, Herencia, Interfaces
2Contenido
- Arreglos
- UML Diagramas de Clase
- Declarando clases repaso detalle
- Atributos y métodos de clase
- Modificadores de Acceso
- Herencia
- De Diagramas de Clase a Java
- Paquetes
- Clases Abstractas
- Interfaces
- Vector
- Colecciones
3Tipos
- Básicos int, float, etc
- Clases Integer, Float, String, etc
- Arrays
- Almacenan multiples valores de cualquier tipo
- Se crean con new
- Se usan para declarar y acceder
4Arrays
- Declaracion
- int a equivale a int a
- a es un array b y c son enteros
- int a, b, c
- a, b y c son arrays
- int a, b, c
- Instanciacion
- a new int20 ó int a new int20
- a0 15 // desde cero
- System.out.println(a.length) // imprime 20
5Arreglos
6Inicializacion de Arrays
- Sus elementos se inicializan al valor por defecto
del tipo correspondiente - int cuadrados 0, 1, 4, 9
- que equivale a int cuadrados new
int4 cuadrados0 0 cuadrados1 1
cuadrados2 4 cuadrados3 9
7Ejemplos de Arrays
- int digitos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
- String dias "lunes","martes","miércoles","jue
ves", "viernes","sábado","domin
go" - Fecha festivos new Fecha ( 1, 1, 2000),
new Fecha ( 15, 5, 2000),
new Fecha ( 12, 10, 2000),
new Fecha ( 6, 12, 2000),
- Recorrido int lista new lista10 for
(int i 0 i lt lista.length i)
System.out.println(listai)
8Arrays Multidimensionales
- Un array bidimensional es un array de arrays.Se
necesita un conjunto de corchetes por cada
dimensiónint unAnno new int12 int
tresAnnos new int312 - TresAnnos00 2
- tresAnnos211 1
9Arrays Bidimensionales No Rectangulares
- Un array de 2 dimensiones se puede crear sin
especificar el tamaño de su segunda dimensión - int tresAnnos new int3
tresAnnos0 new int12 tresAnnos1 new
int12 tresAnnos2 new int12 Si se
indica sólo una dimensión, ésta debe ser la
primera int tresAnnos new int3 //
Error Esta separación permite crear arrays no
rectangulares tresAnnos0 new int12
tresAnnos1 new int5 tresAnnos2 new
int9
10Inicialización de Arrays Multidimensionales
- Se necesita un conjunto de datos entre llaves
para cada dimensión - int matriz
-
- 1, 2, 3,
- 4, 5, 6
-
- equivale a int matriz
- new int23 matriz00 1
matriz01 2 matriz02 3
matriz10 4 matriz11 5
matriz12 6
11Clases para Manejar Cadenas de Caracteres
- Hay dos clases en el paquete java.lang que
permiten la manipulación de cadenas de
caracteres - La clase String maneja cadenas constantes, es
decir, que no pueden cambiar - La clase StringBuffer permite cambiar la cadena
insertando, añadiendo o borrando caracteres - La clase String es más eficiente, mientras que la
clase StringBuffer ofrece más posibilidades
12Ejemplo con Strings Palindromo
- protected static String reverse(String
string)
StringBuffer sb new - StringBuffer(string)
return sb.reverse().toString()
public static void main(String args)
String string "Madam, I'm Adam."
System.out.println() System.out.println( - "Testing whether the following "
"string is a palindrome")
System.out.println(" " string)
System.out.println() if
(isPalindrome(string))
System.out.println( - "It IS a palindrome!") else
System.out.println( - "It is NOT a palindrome!")
System.out.println()
- public class Palindrome public static
boolean isPalindrome( - String stringToTest) String
workingCopy removeJunk(stringToTest)
String reversedCopy
reverse(workingCopy) return
reversedCopy. - equalsIgnoreCase(workingCopy)
protected static String removeJunk(String
string) - int i, len string.length()
StringBuffer dest new
StringBuffer(len)
char c for (i (len - 1) i gt 0 i--)
c string.charAt(i)
if (Character.isLetterOrDigit(c))
dest.append(c)
return dest.toString() -
13Mas Orientacion a Objetos
14Orientación a Objetos
- Clases Patrones que indican como construir
objetos - Objetos Instancias de las clases en tiempo de
ejecución. - Miembros de la clase
- Atributos Características o propiedades de los
objetos (o clases). Pueden ser variables de tipos
simples o referencias a otros objetos - Métodos Comportamientos de los objetos. Son
funciones que operan sobre los atributos de los
objetos. - Herencia, Relaciones, Agregaciones
- UML Unified Modeling Language
- Lenguaje para varias metodologias
- Presentaremos sólo Diagramas de Clase
15Una clase
- class Persona
- // Atributos private String nombre private
String telefono private Persona padre private
Persona madre - // Constructorespublic Persona(String nombre,
String telefono) this(nombre,telefono,null,
null) public Persona(String nombre, String
telefono, - Persona padre, Persona madre)
this.nombre nombre this.telefono
telefono this.padre padre
this.madre madre - ....
- // Metodos, acceden a atributos privados
- public String nombre() return nombre
- public String telefono() return telefono
- public Persona padre() return padre
- public Persona madre() return madre
- public boolean hayPadre() return padre ! null
- public boolean hayMadre() return madre ! null
-
16El Lenguaje de Modelación Unificado (UML)?
Es un lenguaje estándar para la escritura de
modelos de software. UML puede ser utilizado para
visualizar, especificar, construir y documentar
los artefactos de un sistema de software
intensivo.
17Construcción de Bloques UML
- Elementos
- Relaciones
- Diagramas
18Elementos
- Elementos Estructurales
- clases, interfaces, colaboraciones, caso de uso,
clases activas, componentes, nodos. - Elementos de Comportamiento
- interacciones, máquinas de estado
- Elementos de Agrupación
- Paquetes
- Elementos de Anotación
- Notas
19Relaciones
- Dependencia
- Asociación
- Generalización
- Realización
20Diagramas
- Diagramas de Clase
- Diagramas de Objeto
- Diagramas de Caso de Uso
- Diagrama de Secuencia
- Diagrama de Estado
- Diagramas de Actividad
- Diagramas de Componente
- Diagramas de Desarrollo
21Elementos Estructurales
Los elementos estructurales son los sustantivos
de los modelos UML. Estos son la mayoría de las
partes estáticas de un modelo, representando
elementos que son conceptuales o físicos.
22(No Transcript)
23(No Transcript)
24Más Orientación a Objetos
25Ciclo de vida de un objeto
- Persona p1 // Aun no existe, null
- Creacion de objetos p1 new Persona(juan..
- Llama al Constructor.
- Puede dar excepcion OutOfMemoryError
- Uso del objeto
- p1.nombre otro // illegal privated
- p1.nombre()?
- new Persona(maria,...).nombre() maria
- No hay más referencias recolector de basura
26Declarando
- Clase
- Atributos
- Métodos
- Constructores
27Declarando una clase
- Por defecto no public, no abstract, no final,
extends Object - Sino es publica, solo visible en el mismo paquete.
28Declarando un atributo
29Declarando un método
- Sintaxis
- modificadores tipo nombre(parametrosFormales)
- throws excepciones
-
- sentencias
-
- Tipo a retornar puede ser void
- Valor devuelto return ltvaluegt
- Se pueden declarar variables locales si son
necesarias - Paso de parámetros en Java por valor. Incluso
las referencias, imitando el pasaje por
referencia de otros lenguajes.
30Modificadores para métodos
31Constructores
- Inicialización de la instancia de una clase
atributos - Tan complejos como se desee (ej pueden invocarse
otros métodos de la misma clase, o de otras
instancias creadas en el constructor). - Los constructores tienen el nombre de la clase
argumentos Persona(String .... - Cero o más constructores por clase.
- Sino se declara el constructor por defecto pone
los atributos en cero (false, null). - Pueden levantar excepciones, pero no pueden
devolver un resultado. - No se heredan, solo pueden llamarse
32Constructores
- class Circulo
- private Punto centro
- private double radio
- public Circulo()
- this(new Punto(),1)
-
- public Circulo(double x,
- double y, double radio)
- this(new Punto(x,y),radio)
-
- public Circulo(Punto centro, double radio)
- this.centro centro
- this.radio radio
- ...
- class Punto
- private double x
- private double y
- public Punto()
- this(0.0,0.0)
-
- public Punto(double x,
- double y)
- this.x x
- this.y y
-
- ...
-
33Sobrecarga de métodos (Polimorfismo)?
- Todo método tiene una firma su nombre con el
número y el tipo de sus parámetros. - Sobrecargar métodos mismo nombre, distinta firma
- Siempre se resuelve en tiempo de compilación (en
base al tipo estático de los parámetros reales)
en base al número y la especificidad del tipo de
los argumentos. - 1. Aplicables el número correcto de parámetros,
y cuyos parámetros formales son de tipos que
incluyen, por orden, los de los parámetros reales - 2. Si algún método tiene parámetros cuyos tipos
incluyen, por orden, a los tipos de los
parámetros del resto de los métodos, dicho método
se elimina del conjunto conflicto (ya que es más
genérico)? - 3. El paso (2) se repite hasta que no pueden
eliminarse más métodos. Si el conflicto
prevalece, se señala un error de compilación - En la práctica solo paso (1)?
34Sobrecarga de métodos (Polimorfismo)?
- public class DemoOverloading void print(int a,
int b) ... void print(int a, char b) ...
void print(char a, int b) ... void
print(int a, int b, int c) ... -
- public class EjemplosManipulacionObjetos
public static void main(String args)
DemoOverloading dm new DemoOverloading()
md.print(1, 2) md.print(1, a) - md.print(a, 1) md.print(1,
2, h)
35Destructores
- No existen como en C
- Metodo finalize que se ejecuta cuando va a ser
liberado por el recolector de basura. - Util para liberar objetos fuera de Java C/C
36Atributos y metodos de clase
- Refieridos a la clase y no a una instancia
particular
37Atributos de clase
- De instancia. Cada una tiene un valor particular.
Representan el estado particular de cada objeto.
- De clase. Todas las instancias comparten el mismo
valor para estos atributos (como atributo
global). - Si se cambia en una instancia, se refleja en
todas. - Representan el estado compartido
- Se declaran utilizando el modificador static.
class Ficha public long id public static
long idactual 0 public Ficha() id
idactual
38Métodos de clase
- Como atributos static
- Unicamente pueden acceder a atributos de clase
- No pueden usar la referencia this
- Unicamente pueden invocar a métodos de clase
- El acceso a los métodos y atributos de clase se
realiza utilizando el operador y el nombre de la
clase Math.sqrt(...) Math.PI - Los métodos de clase son útiles para
- Modularizar el método main de las aplicaciones
- Bibliotecas de subrutinas (por ejemplo,
java.lang.Math)?
39Ejemplo de static
- public class Error
-
- int x
- public static y
- public static void main (String args)?
-
- y 15
- x 20 ERROR
-
-
40Inicialización de atributos estáticos
- En la declaración (de arriba a abajo)?
- o con bloques de inicialización
- class Primos public static int primos new
int4 static primos0 2 for (int
i 1 i lt primos.length i) primosi
siguientePrimo() private static int
siguientePrimo() ...
41Acceso a atributos y métodos
- El operador . aplicado a referencias permite el
acceso a atributos y métodos. - public class EjemplosManipulacionObjetos
public static void main(String args)
Ficha f1 new Ficha()
System.out.println(f1.id) f1.id 34
Persona juan new Persona("Juan","5555555"
) Persona maria new
Persona("María","5555555") Persona
pedro new Persona("Pedro","5555555",
juan,maria) - System.out.println(pedro.nombre())
System.out.println(pedro.padre().nombre())
System.out.println(pedro.madre().nombre()
)
42Referencias
- En los métodos de instancia disponible una
referencia que refiere a la instancia particular
this - Por ejemplo para acceder a los atributos ocultos
por declaraciones locales en el método - null valor de las referencias que no refieren a
ningún objeto. - Por defecto toda referencia se inicializa a null
43Referencias Null Pointer
- Error muy común tratar de acceder a referencias
null. - public class EjemplosManipulacionObjetos2
public static void main(String args)
Persona juan - new Persona("Juan", "5555555")
- // Levantará nullPointerException
juan.padre.nombre() -
44Ejemplo con referencias
- public class RefDemo public static void
main(String args) Ficha f1 Ficha
f2 // 1 f1 new Ficha() // 2
f2 new Ficha() // 3 f2 f1
// 4 f1.id // 5 f2.id
// 6 -
45Ejemplo con referencias
- public class RefDemo2 public static void
main(String args) Persona juan new
Persona("Juan","5555555") // 1 Persona maria
new Persona("María","5555555") // 2
Persona pedro new Persona("María","5555555",
juan,maria) // 3 juan maria
null // 4 -
46Modificadores de Acceso
47Modificadores de acceso atributos y métodos
- El acceso desde otras clases, puede controlarse
mediante modificadores en su declaración - public Accesibles en cualquier lugar desde
donde la clase es accesible. Así mismo, son
heredados por las subclases. - private Accesibles únicamente en el interior de
la clase. - protected accesibles en las subclases y en el
código del mismo paquete. - Ninguno (package) Accesible en la clase y el
paquete.
48Métodos privados
- En lugar de construir métodos públicos
gigantescos e ininteligibles, mejor utilizar
métodos privados. - Otro caso útil class Quicksort implements
EstrategiaOrdenacion public void
ordena(Comparable v)
quicksort(v,0,v.length1) private
void quicksort(Comparable v, - int inf, int sup) ....
49Métodos para controlar el acceso al estado
- No es buena práctica de programación disponer
directamente de atributos de acceso público,
excepto constantes (final)? - Permite cambiar la implementación
- Mejor métodos que controlen el acceso al estado
(lectores, escritores setters, getters)
encapsulamiento, control de acceso,
mantenibilidad. - class Ficha private long id private
static long idactual 0 public Ficha()
id idactual public long id()
return id
50Partes protegidas (protected)?
- Se utiliza para aquellos atributos y métodos que
pueden ser únicamente accedidos a nivel de
subclase. De esta forma, la parte protegida de
una clase es aquellas parte que se publica
únicamente a los implementadores que extienden la
clase. - También desde cualquier clase que pertenece al
paquete de la clase que lo declara. - Como una familia y los de confianza.
51Protected Caso particular
- public class A protected int p
- // presume class B is in a different package from
Aclass B extends A void myMethod() p
1 // ok A a new A() a.p 1 // not ok, p
would have to be - //public for this to work.
-
52Modificadores de acceso atributos y métodos
53Herencia
54Herencia
- La clase extendida es la superclase. La clase que
se extiende es la subclase - Las subclases heredan características y métodos
de las superclases (excepto los constructores)? - Puede heredarse de solo una clase
- Se define una jerarquía de objetos
- Pero pueden implementarse varias interfaces
- Difiere de C herencia multiple
55Object
- Todas las clases implícitamente de la clase
Object raiz de la jerarquía. - Object define un conjunto de métodos
redefinibles - public boolean equals(Object o) Permite definir
el criterio de igualdad de contenido de una
determinada clase - El operador únicamente chequea la igualdad de
referencias. - En Object, equals se define directamente como la
identidad de referencias. - public String toString() Permite decidir la
representación externa de un objeto. Por defecto
es el valor de su referencia, etiquetada con el
nombre de la clase.
56Object
- public class Ficha private long id private
static long idactual 0 public Ficha()
id idactual public long id()
return id - public boolean equals(Object o) return (o
instanceof Ficha) ((Ficha)o).id() id
public String toString() return
"Ficha(id"id")" -
57Operadores de Comparación de Objetos
- String s1 new String("Hola")String s2 new
String("Hola")if (s1 s2) //
false...if (s1.equals(s2)) //
true...s1.equals(s2) equivale a s2.equals(s1)?
58Heredando clases
- La herencia de clases se lleva a cabo mediante
extends - Establece una relación de especialización --
generalización entre clases. - La subclase puede introducir nuevos métodos y
redefinir métodos de la superclase.
59Heredando clases
- public class Persona // Hereda de Object
private String nombre public Persona(String
nombre) this.nombre nombre public
String nombre() return nombre public class
Empleado extends Persona private double
salario public Empleado(String nombre,double
salario) super(nombre) this.salario
salario public double salario() return
salario
60Constructores y Subclases
- public class Persona private String nombre
public Persona(String nombre) this.nombre
nombre public String nombre() - return nombre public class Anonimo
- extends Persona private String
encontradoEn public Anonimo - (String encontradoEn) this.encontradoEn
encontradoEn public String encontradoEn()? - return encontradoEn
- Los constructores de las subclases siempre
invocan un constructor en la superclase como
primera acción - El estado establecido en las superclases se
inicializa siempre antes - Por defecto, este constructor es el que no tiene
argumentos. - Qué ocurre en el ejemplo?
61Constructores y Subclases
- public class Empleado
- extends Persona private double salario
public Empleado() this("desconocido",0)
public Empleado(double salario)
this("desconocido",salario) public
Empleado(String nombre, - double salario) super(nombre)
this.salario salario pulic double
salario() - return salario
-
- Los constructores no se heredan.
- La forma de invocar constructores de la
superclase desde la subclase es a través de
super(...)? - El uso de this(...) como primera sentencia de un
constructor permite retardar la elección del
constructor de la superclase que se va a
ejecutar.
62Relación "es-un
- Para saber si la relación de herencia es
correcta, se plantea la pregunta - "la subclase es-una superclase?". La respuesta
debe ser "sí - el Jefe es-un Empleado? Sí
- la Secretaria es-un Empleado? Sí
- class Bici
class Bici
int numRuedas
int numRuedas int
numAsientos int numAsientos
int velocidadMax
int velocidadMax
class Avion
class Avion extends Bici
int
numRuedas int numAlas
int numAsientos
int velocidadMax int numAlas
Avion es-una Bici? NO
63Relación de Contenido ("tiene-un")?
- Una clase puede contener referencias de objetos
de otras clases - Se diferencia de la herencia en que es necesario
instanciarlos por separado - Responde afirmativamente a la pregunta
ltContenedorgt tiene-un ltContenidogt?class Motor
class Chasis class Coche
... ...
Motor
m
Chasis ch
un Coche tiene-un
Motor? Síun Coche tiene-un Chasis? Sí
64Sobreescritura de Métodos
- Métodos virtuales en C
- Una subclase puede modificar los métodos que ha
heredado de la superclase, manteniendo los mismos
nombre, tipo de retorno y lista de argumentos - class Empleado ... int
calcularVacaciones()...class Jefe extends
Empleado int numTrabajadores int
calcularVacaciones()...
65Polimorfismo en Herencia
- Una clase sólo tiene una forma, pero una variable
que hace referencia a la superclase de una
jerarquía puede tener muchas formas (una por
cada subclase)Empleado e1 new
Empleado()Empleado e2 new Jefe()Empleado e3
new Secretaria()e2.numTrabajadores15 //
Error((Jefe)e2).numTrabajadores15 - Pueden utilizarse de dos maneras
- Parámetros polimórficos
- Colecciones heterogéneas
66Parámetros Polimórficos
- class Mascota ...class Raton extends Mascota
...class Gato extends Mascota
...class Veterinario void vacunar (
Mascota m ) ......Veterinario
doctor new Veterinario()Gato tom new
Gato()Raton jerry new Raton()doctor.vacunar(
tom)doctor.vacunar(jerry)...
67Colecciones Heterogéneas
- Hasta ahora un array sólo podía contener
elementos del mismo tipo (colección homogénea)? - Utilizando polimorfismo se pueden tener elementos
de distinto tipo en un array (colección
heterogénea)? - Se crean utilizando arrays definidos con el tipo
superclaseMascota listaMascotas new
Mascota5listaMascotas0 new
Mascota()listaMascotas1 new Gato()
listaMascotas2 new Raton()
listaMascotas3 new Raton()
listaMascotas4 new Gato()
68Ejemplo de Colecciones Heterogéneas
- Se consigue tratar a todos los elementos por
igual, aunque alguno tenga un tratamiento
especial - class Empleado
- ...int salarioint calcularVacaciones()...
-
- class Jefe extends Empleado
- int numTrabajadoresint calcularVacaciones()..
.
- ...
- Empleado lista
- new Empleado100lista0 new
Empleado()lista1 new Empleado()...lista5
6 new Jefe()...lista99 new
Empleado()for (int i 0 - i lt lista.length i)
System.out.println( - listai.
- calcularVacaciones())
69De diagramas de clase (UML)a Java
70(No Transcript)
71Transformación de asociaciones para una
implementación OO
- Una asociación bidireccional es implementada,
normalmente, como un atributo de referencia
dentro de cada objeto asociado. - Si la asociación es unidireccional sólo se
necesita añadir un atributo de referencia a una
de las clases. - Una asociación también se puede implementar como
una clase.
72Transformación de asociaciones para una
implementación OO
- Los atributos de referencia de la clase uno
son simplemente referencias a un objeto. - Los atributos de referencia de la clase muchos
necesitan un contenedor de objetos. - Una asociación cualificada se puede implementar
en forma de objeto diccionario.
73(No Transcript)
74Transformación de asociaciones para una
implementación OO
1..
1
Edita
Libros
Editorial
class Editorial Libro mislibros
Editorial( )
class Libro Libro( )
75Transformación de clase asociación para una
implementación OO
0..
Esta autorizado en
0..
Usuario
Estación de trabajo
Autorización
class autorización usuario miusuario
estaciónt miestación autorización( )
class Usuario autorización miautori
Usuario( )
class estaciónt autorización miautori
estaciónt( )
76Transformación de atributos de enlace para una
implementación OO
- Asociación uno-a-uno Los atributos de enlace se
pueden almacenar como atributos de cualquiera de
los objetos. - Asociación uno-a-muchos Los atributos de enlace
se pueden almacenar como atributos del objeto
muchos. - Asociación muchos-a-muchos Se implementa la
asociación como una clase.
77Transformación de agregación para una
implementación OO
- Se implementa igual que la asociación.
computadora
1
1..
monitor
teclado
class Computadora Monitor mismonitores
Teclado miteclado Computadora( )
class Monitor Monitor( )
class Teclado Teclado( )
78Transformación de herencia simple para una
implementación OO
Lámpara
Incandescente
Fluorescente
class Fluorescente extends
Lámpara Fluorescente( )
class Incandescente extends Lámpara
Incandescente( )
class Lámpara Lámpara( )
79Paquetes
80Paquetes
- Un paquete es una agrupación de clases
(librería)? - El programador puede crear sus propios paquetes
con la sentencia package al principio del fichero
fuente - package ltnombre.paquetegt
- Ejemplo package empresa.finanzas
- La composición de nombres (separados por puntos)
está relacionada con la jerarquía de
directoriosCLASSPATH\empresa\finanzas\ - Los nombres de los paquetes se suelen escribir en
minúsculas
81Ejemplo de Paquetes
- Fichero fuente Empleado.java
- package empresa.finanzaspublic class
Empleado ... - La clase Empleado realmente se llama
empresa.finanzas.Empleado - Si no se indica la sentencia package, la clase
Empleado pertenecerá a un paquete por defecto sin
nombre
82Sentencia import
- La sentencia import indica al compilador dónde
están ubicadas las clases que estamos utilizando - Para importar sólo una clase de un paquete
- import ltnombre.paquetegt.ltNombreClasegt
- Para importar todas las clases de un paquete
- import ltnombre.paquetegt.
- El compilador añade a todos los ficheros la línea
- import java.lang.
- El paquete que contiene las clases fundamentales
para programar en Java (System, String,
Object...)?
83Ejemplo de import
- import empresa.finanzas.public class Jefe
extends Empleado String departamento
Empleado subordinadosSi no se pone el
import, deberíamos referirnos a Empleado como
empresa.finanzas.EmpleadoLa clase Jefe pertenece
al paquete anónimo por defectoString pertenece
al paquete java.lang
84Modificadores de acceso atributos y métodos
85Clases Abstractas
86Clases Abstractas
- Una clase abstracta es una clase de la que no se
pueden crear objetos - Representa un concepto que no se puede instanciar
- Se define anteponiendo el modificador abstract a
la definición de una claseabstract class
Mamifero ...class Canino extends Mamifero
...class Felino extends Mamifero ...class
Roedor extends Mamifero ......Mamifero m
new Mamifero() // Error
87Métodos Abstractos
- Un método es abstracto si se declara (dentro de
una clase abstracta), pero no se implementa - abstract class Mamifero ... public abstract
- void alimentar()
- Todas las subclases de una clase abstracta deben
implementar los métodos abstractos que tenga
definidos, a menos que sea tambien abstracta - class Canino extends Mamifero ... public
void alimentar() ... - class Felino extends Mamifero ... public
void alimentar() ...
88Ejemplo
- Jerarquía de figuras geométricas
- class Punto int x int y
- int color
- abstract class Figura
- Punto ptoOrigen abstract void
- dibujar()
- class Rectangulo
- extends Figura Punto ptoFinal void
dibujar()? - ...
- class Circulo
- extends Figura int radio void
dibujar()? - ...
89Interfaces
90Interfaces (I)?
- Una interface es un conjunto de declaraciones de
métodosDeclaracióninterface
ltNombreInterfazgt lttipogt ltnombreMétodo1gt (
ltargsgt ) lttipogt ltnombreMétodo2gt ( ltargsgt
) ... - Una clase que implemente el código de la interfaz
debe implementar todos sus métodosclass
ltNombreClasegt implements ltNombreInterfazgt
lttipogt ltnombreMétodo1gt ( ltargsgt ) ltcódigogt
lttipogt ltnombreMétodo2gt ( ltargsgt ) ltcódigogt
...
91Interfaces (II)?
- Las interfaces sirven para
- Declarar métodos que serán implementados por una
o más clases - Definir la interfaz de programación de un objeto,
sin mostrar el cuerpo actual de la clase - Cada interfaz debe escribirse en un fichero
.java con el mismo nombre de la interfaz
92Equivalencia Interfaz - Clase Abstracta
- interface Interfaz lttipogt
ltmétodo1gt() lttipogt ltmétodo2gt()
... lttipogt ltmétodoNgt() equivale
aabstract class Interfaz abstract
lttipogt ltmétodo1gt() abstract lttipogt
ltmétodo2gt() ... abstract
lttipogt ltmétodoNgt()
93Vector
94La Clase Vector (I)?
- La clase Vector (paquete java.util) representa
una colección heterogénea de objetos (referencias
a objetos de tipo Object o a cualquiera de sus
subclases)? - El vector al crearse reserva cierta cantidad de
memoria, aunque sus elementos sólo utilicen una
parte - El tamaño del vector se incrementa por bloques
cuando se añade y se agota el espacio reservado.
El tamaño de incremento se indica en el atributo
capacityIncrement - El vector se mantiene compacto en todo momento
- Cada elemento es accesible a través de un índice,
pero no con los corchetes,
95La Clase Vector (II)?
- Atributos
- int capacityIncrement incremento en la capacidad
del vector. Si vale cero, duplica el tamaño
actual del vector. - int elementCount número de elementos válidos del
vector - Object elementData array de objetos donde se
guardan los elementos - Constructores
- Vector() Crea un vector vacío (capacidad 10,
incremento 0)? - Vector(int initialCapacity) Crea un vector vacío
con la capacidad dada (incremento 0)? - Vector(int initialCapacity, int
initialIncrement) Crea un vector vacío con la
capacidad y el incremento dados
96(No Transcript)
97(No Transcript)