Resúmenes POO Rigago PDF
Resúmenes POO Rigago PDF
Resúmenes POO Rigago PDF
°
Los parámetros tienen tipos → El tipo define l a clase de valores que puede tomar u n
parámetro.
°
Comentarios → Por encima de l a cabecera del método.
↳ s e incluyen proporcionar información para e l lector (humano) del programa.
para
°
Instancias múltiples → Pueden crearse varios objetos similares a partir d e una única
clase.
°
los objetos tienen u n estado → se representa almacenando valores en campos.
•
t
Es una vista ampliada d e l objeto,e n l a q u e s e muestran los
.
Lo s valores d e los campos se almacenarán en e l objeto.
°
Los métodos se definen e n l a clase del objeto → dos los objetos d e u n a m i s m a clase
•
BlueJ → show Terminal (Mostrar Terminal)e n e l menú View(Uer).
|
seleccionar Record method calls (Registrar llamadasa métodos) e n e l menú
Options (Opciones)
¢
Esto hará que todas nuestras llamadas a métodos
s e escriban e n e l terminal.
SÁN Code Pad (Mostrar
teclado de código) e n e l menú View.
↳ Pueden recuperarse comandos utilizados anteriormente en e l Code Pa d
m é -
•
a los
de otros objetos.
Los objetos pueden otros objetos y pueden invocar también los métodos d e otros
o b -
.
crear
y
métodos) d e cada uno d e los objetos d e esa clase.
¿
•
C a d a clase tiene un código fuente asociado. → Es el texto que define los
detalles d e una clase.
'Blue]→ Podemos v e r el código fuente d e una clase seleccionando l a función Open Editor
[Abrir Editor) e n e l menú emergente de l a clase o haciendo doble clic sobre
e l icono d e l a clase.
•
Compilador → Traduce el código Java a código máquina.
•
Resultado → Los métodos pueden devolver información acerca de u n objeto mediante u n
valor d e retorno.
°
La cabecera de cada método nos d i c e s i e l método devuelve o no u n resultado y cuál e s
el tipo d e e s e resultado.
El tipo de retorno método
de forma parte d e signatura.
•
un n o s u
°
Cuando un método espera un objeto como parámetro, l a signatura d e l método especifica c o m o
N OTA E D :
↳
signatura: aglutina e l nombre del método,junto con e l número d e parámetros,s u s
[Encabe tipos orden d e los el mismos.
y
zado: l a ampliación del
es concepto de signatura,añadiéndole e l tipo d e
°
Blue]→ campos: fondo blanco.
constructores métodos: fondo amarillo.
y
•
Orden: 1'→ campos.
2 .→ constructores. Almacenan datos d e manera persistente
>
3 :→ métodos. ( dentro de un objeto.
a lectores humanos.
↳
↳ y → comentario d e u n a línea.
como variables.
método
constructor o
que l o declare.
reales →
son los valores del parámetro.
•
El tiempo d e v i d a de u n a variable describe durante cuánto tiempo continúa existiendo
de
•
Los métodos están compuestas pordos partes: u n a cabecera u n
y m
E -
e4a É p
contiene
plaque←
instrucciones: describen las acciones del método.
↳cualquier conjunto de declaraciones e instrucciones situado entre una pareja d e llaves.
•
Instrucción d e retorno(return)→ será siempre l a instrucción final del método.
°
Métodos selectores → devuelven información acerca del estado de u n objeto.→ getters
°
E l método System. out-printI n imprime s u parámetro en e l terminal d e texto.
°
Operador d e concatenación → t .
r e s u l -
•
Las expresiones booleanas solo tienen dos posibles valores: verdadero (true) falso(false).
•
y
Se utilizan menudo l a hora d e controlar l a elección entre las dos rutas d e ejecución
e s -
a a
" U n ámbito (bloque) e s una unidad de código que normalmente está encerrada entre llaves.
•
BlueJ → l a función "Autolayout", e n e l menú del editor, para corregirsangrado s i está liado.
¿7 Se usan como
E s común inicializarlas
almacenamiento temporal →
en el
para ayudara
s u tarea.
un métodoa completar
>
expresión.
Y
Nos e les proporciona un valor predeterminado.
S i e l valor de
campo n o puede modificarse después d e haberlo inicializado inmutable.
.
u n →
-
Un valor d e índice cero representa e l primer carácter d e u n a cadena.
↳las
variable.
variables que tienen u n a clase como tipo pueden almacenar objetos
de dicha clase.
|
Proporciona información acerca del código fuente y presenta u n a vista estática
de u n
programa.
> Muestra l a vista estática.
referencia a l objeto).
°
OPERADORES LÓGICOS i Actúan sobre valores booleanos y producen u n nuevo valor booleano
como resultado.
↳ 8 8 (and)
£11 (or)
1. (not)
°
Operador módulo (%) → Devuelve el resto de una división.
•
Creación de objetos → Los objetos pueden crear otros objetos utilizando e l operador n e w .
•
E l operador n e w hace dos c o s a s → c r e a u n nuevo objeto de l a clase indicada.
\ Ejecuta el constructor d e dicha clase.
°
Sobrecarga→ U n a clase puede tener más d e u n constructor o másd e u n método con el
mismo nombre → siempre que cada uno tenga u n conjunto diferente de tipos
d e parámetro.
°
Llamada a u n método interno→ Los métodos pueden invocar a otros métodos de l a misma
↳
clase como parte d e s u implementación.
'Llamada a método externo los métodos pueden invocar métodos de otros objetos,
u t i l i punto.]
-
un →
l a notación con
parámetros d e l a
y los llamada.
°
Diferencia → L a presencia d e u n nombre seguido por u n punto n o s informa d e que e l método
µ:::::::.........
>
>
Se puede utilizar
Proporciona funciones
para localizar errores.
}
nombre
para dos entidades diferentes.
Nos permite acceder a un campo cuando existe u n a variable definida m á s próxima c o n e l
mismo nombre.
> Hace referencia a l objeto
actual.
.
Blue] → para establecer u n punto d e interrupción, abrimos e l editor, seleccionamos l a línea
¿qq
§,,,,,,,,,,,,,,,
apropiada y luego seleccionamos set/Clear B r e a kpoint (configurar/Eliminar punto
.in
s e puede nacer n a a .e u , , , , , µ # a , número d e l a linea ¢ , ¡a.., e n
,,,,,,,,,,,,
cuestión.
+
step(Paso)→ Ejecuta l a siguiente línea d e código.
°
Resumen:
° Podemos tratar d e identificar subcomponentes aquellos objetos
que deseemosmodelar,
e n
d e gran tamaño.
indivi -
y
por separado.
Este enfoque proporciona estructuras d e objetos
nos
que funcionan
c oparan j u n t a -
-
d e s o r d e -
°
u n a
de tamaño flexible.
Quienes proporcionan las operaciones específicas d e cada escenario s o n l a s clases
que escribamos para
°
clases d e u n archivo.
°
Cuando objeto Arrayl i s t tenemos qué tipo d e objetos
a l m a que especificar
-
creamos u n v a a
→ e n e l momento de su creación.
°
Atraylist e s una clase de colección de propósito general → no está restringido e n l o que respecta
•
Notación diamante → Ej: files = new ArrayL i s t estringy1 );
°
Principales métodos de Arrayl i s t → a d d , size, get y remove.
Y
almacena
enl a lista
u n elemento
]
n o s dice cuántos elementos almacena
l a lista actualmente.
§
E s capaz d e incrementar s u capacidad interna según s e a necesario.
Mantiene s u propio contador privado, e l número d e elementos q u e almacena.
°
l a posición d e u n objeto dentro d e u n a colección s e conoce como índice.
°
Al primer elemento añadido a u n a colección s e l ed a e l número d e índice 0, a l segundo s e l e d a
•
E l método remove toda c o m o parámetro e l índice del objeto
que hay que eliminar.
↳ Esto puede cambiar los valores de índice e n los que están almacenados otrosobjetos d e
unidad.
S e pueden insertar elementos e n Arrayl i s t e n posición distinta del
final d e l a lista.
°
u n u n a
°
Instrucciones d e bucle = estructuras iterativas d e control.
•
E l bucle for-each tiene d o s partes:
↳
↳
Una cabecera del bucle
|
orden, a través d e l a variable declarada l a cabecera del
[No
e n
bucle.
nos aporta l a posición d e índice d e cada elemento.
tintitaciones
No podemos modificar lo
que e s t á almacenado l a colección
→
en
{S
mientras iteramos a través d e ella.
↳ No podemos n i añadir n i eliminar elementos d e l a
i queremos u n
colección.
n e c e s a -
e n en
dependerá de l o
que suceda durante
menos preciso → l a itera-
{ya,,,,
[Un
s i se evalúa como true → se ejecuta el cuerpo del bucle y s e vuelve a
pa primera v e z
da por terminada l a iteración.
,,,,,,,,,,,,,,,,,,, µ .
ga a ejecutarse nunca.
°
Con e l bucle while, e s posible cometer u n error que haga que tengamos u n bucle infinito.
↳
↳
E l programa parecerá haberse "colgado".
-
Ventajas del bucle while:
°
No necesita estar relacionado con u n a colección.
Puede necesitemos procesar todos los elementos, podemos detenernos antes,s i
°
que n o
a s í l o deseamos.
°
Tener una variable d e índice local puede ser
muy importante para realizar búsquedas en u n a
°
l a s búsquedas son u n a d e l a s formas más importantes d e iteración.
↳
[Tene Un bucle for-each e s inapropiado para búsquedas, porque siempre llevará
[la
búsqueda tiene éxito después d e u n número indefinido d e iteraciones.
[Debem
' l a búsqueda
falla después d e agotar todas l a s posibilidades.
os tener e n cuenta las dos posibilidades a l escribir l a condición del bucle.
↳ Ya que l a condición del bucle debe evaluarse como t r u e s i queremos iterar
otra v e z más.
TIPO ITERATOR:
Un iterador objeto
que proporciona funcionalidad para iterar a través d e todos los
e l e m e n -
°
es u n
de una colección.
°
Utiliza u n bucle while para realizar l a iteración y un objeto Iterator e n lugar d e u n a
§
public void listAllTracks(){ elemento no a l objeto colección.
Iterator<Track> it = tracks.iterator(); y
while (it.hasNext){
Track t = it.next();
System.out.println(t.getDetails());
}
}
-
Notenemos que preocuparnos d e l a variable index.
↳ Iterator controla e l punto e n e l que nos encontramos dentro d e l a colección.
°
Cuando llega a l final d e l a colección, devolverá false a l hacerse una llamada a hasNext.
°
Iterator está disponible para todas l a s colecciones d e l a librería d e clases d e Java.
°
Está prohibido usar e l método remove d e l a colección durante u n a iteración del bucle for-
each.
°
Iterator tiene u n método remove, n o admite ningún parámetro y tiene u n
tipo d e retorno
reciente a next.
÷
"
" "° "" " " "" " " "" ° " " " " ""
Iterator<Track> it = tracks.iterator();
while (it.hasNext()){
Track t = it.next(); tracks e n e l cuerpo del bucle.
String artist = t.getArtist();
if (artist.equals(artistToRemove)){ te
it.remove();
} Debemos utilizar e l método remove
}
d e Iterator, n o e l d e Arrayl i s t .
•
E l método remove de Iterator flexible→ eliminar elementos
a r b i t r a
n o podemos
-
e s menos
manera predeterminada.
°
Si una variable contiene e l valor null, n o s e debe realizar ninguna llamada a método
con ella, → Como los métodos pertenecen a objetos, n o podemos invocar u n método
NullPointerException.
°
API =
Application Programming Interface (Interfaz de programación de aplicaciones).
la interfaz d e u n a clase describe l o cómo s e puede utilizar
que u n a clase hace y
°
sin
°
E l código fuente que hace que l a clase funcione e s l a implementación.
°
la interfaz d e un método consta d e l a signatura del método y d e u n comentario.
cadena de caracteres.
°
U n objeto es inmutable s i s u contenido o estado n o puede cambiarse después d e crearlo.
↳
↳
{lo
l a s cadenas d e caracteres s o n inmutables.
aleatorio
•
Paquete Java. Util. Random randomGenerator;
randomGenerator = new Random();
int index = randomGenerator.nextInt();
°
Para crear u n número aleatorio.
-
n ex It n t →
genera un número entero
n o m -
uno o
°
Los paquetes están anidados → Pueden contener otros paquetes.
•
E l nombre completo nombre cualificado de clase e l nombre d e s paquete,
s por ey g u i -
o u n a es u
Clase HashMap:
-
Un mapa es u n a colección
que almacena parejas clave)v a l o r como entradas.
°
S e pueden buscar valores proporcionando l a clave.
°
Puede almacenar u n tipo flexible d e entradas.
°
Con Map c a d a entrada n o es u n objeto, sino u n a pareja d e objetos.
↳ un objeto clave y u n objeto valor.
" l o s mapas son ideales para búsquedas e n u n a sola dirección, donde conocemos l a clave d e
•
E l método get extrae el valor correspondiente a u n a clave especificada.
°
Al declarar u n a variable HashMap y a l crear u n objeto HashMap tenemos que indicar qué
tipo d e objetos s e almacenarán e n e l mapa y qué tipo d e objetos s e emplearán como clave.
d e l a derecha.
Conjuntos:
Un conjunto e s u n a colección
que almacena cada elemento individual
°
como máximo una vez.
°
No mantiene ningún orden específico.
•
Introducir u n elemento u n a segunda v e z n o tiene ningún efecto.
Método split →
°
clase string.
↳
{el d e v o l -
puede dividir u n a c a d e n a e n u n a serie d e subc a d e n a s separadas y
e (wrappers).
n v o l v e n -
s e a u n a
↳ Cada tipo primitivo tiene una clase envolvente correspondiente que representa e l
↳ Esto significa que los valores d e tipo primitivo pueden añadirse directamente a
÷
una colección. private ArrayList<Integer> markList;
...
public void storeMarkInList(int mark){
markList.add(mark);
}
°
La operación inversa, u nboxing, se realiza también d e forma automática.
°
E l autoboxing s e aplica también siempre que s e transfiera u n valor d e tipo primitivo c o m o
u n parámetro a u n método que espera u n
tipo envolvente, y c u a n d o s e almacena u n
v a -
u n u n a
de tipo primitivo.
°
E l resultado e s casi equivalente a almacenar l o s tipos primitivos e n colecciones.
°
E l tipo d e l a colección debe declararse como u n tipo envolvente
↳ Arraytriste Integery n o Arrayhisteinty.
"
l a documentación d e u n a clase debe ser l o suficientemente detallada como
para q u e otros
fuente.
[U
derecha d e la ventana del editor d e Source Code a Documentation.
El nombre de l a clase
-
-
Descripción del propósito global y características d e l a clase.
-
Número d e versión.
-
Nombre del autor.
Documentación
para c a d a constructor y c a d a método.
-
•
L a documentación d e cada constructor y c a d a método debe incluir:
-
El nombre del método.
-
E l tipo d e retorno.
Nombres los parámetros.
y tipos d e
-
-
Descripción d e cada parámetro.
-
Descripción d e l valor devuelto.
°
Cada proyecto completo h a d e tener un comentario global del proyecto e n u n archivo
"ReadMc".
↳
Blue] → Nota d e texto mostrada l a esquina superior izquierda del
d i a -
e n
d e clases.
°
los comentarios e n Javadoc s e escriben entre / ** *
/.
y
-
L a interfaz d e u n a clase es e l conjunto d e detalles que necesita v e z cualquier otro programador
Proporciona información acerca d e cómo utilizar l a clase.
que la u s e .→
↳
[Es
Incluye las signaturas d e los constructores y los métodos, además d e varios
comentarios.
↳
↳ Los cuerpos d e los métodos
y l a mayoría d e los campos.
Es la parte privada de u n a clase → E l usuario d e u n a clase no necesita conocerla.
°
private→ declara que es parte d e l a implementación.
implementación d e una clase deben estar ocultos a los ojos d e otras clases.
↳ Garantiza una mejor modularización de las aplicaciones.
°
Un programador que haga u s o d e una clase no debería necesitar conocer s u s interioridades.
°
A u n usuario no debería permitírsele conocer e s a s interioridades.
clases → Acoplamiento.
°
S i los cambios en u n a parte d e u n
programa n o hacen necesario realizar cambios e n otra parte
t r a -
n programa
→
o débil → →
Facilita el
de u n programador de mantenimiento.
Las clases deben estar débilmente acopladas → deberían "conocer" (ser
d de)e p e n d i e n -
•
no
m á s modulares d e mantener.
°
Una tarea de gran envergadura s e descompone e n otras m á s pequeñas para hacerla
m á s manejable → Las subtareas n o están pensadas para ser invocadas desde
privados.
Cuando hace falta t a re a métodos d e clase → E n vez d e
e s c r i -
-
u n a e n varios u n a
↳ Hace clase
que dependa de dicha información
v u fallos
l den e -
una
que sea
cambie.
°
Mantener l o s campos privados otorga a los objetos u n
mayor grado de control sobre
s u propio estado.
d e elementos.
•
Map→ Asocia claves a valores.
↳ No puede contener claves duplicadas y c a d a clave sólo puede tener u n valor
asociado.
.
HashMap→ Almacena l a s claves e n una tabla h a s h .
↳ Nogarantiza ningún orden a l a hora de realizar iteraciones.
static.
A
°
Las clases pueden tener campos→ variables d e clase o variables estáticas.
clase.
°
Todos los objetos d e l a clase comparten esta variable.
-
Estas variables s e emplean cuando tenemos u n v a l o r q u e debe s e r siempre e l mismo
°
Constantes:
-
En s u definición s e emplea frecuentemente l a palabra s t a t i c .
-
Similares a las variables, pero n o pueden cambiar d e valor durante l a
e de una
j e
aplicación. c u -
¡Garantizaq después
ue puedas e r n o
-
S e definen mediante l a palabra clave final. modificadode manera
accidental.
-
Diferencias c o n l a declaración d e u n
campo:
°
Incluyen l a palabra final antes del nombre del tipo.
° Han d e inicializarse con u n valor en e l momento d e l a declaración.
-
s e suelen escribir e n mayúsculas.
E s frecuente apliquen todas l a s instancias d e clase
c o n s -final y static.
-
s e u n a →
que a
d e clase → se declaran c o n
-
Pertenecen a l a clase n o a u n a instancia.
y
-
Pa r a declararlo se añade s t a t i c delante del nombre de tipo e n la
c a
d e l método. -
-
s e i n v o c a especificando e l nombre de l a clase e n l a que se ha definido,
delante del punto e n l a notación habitual.
- Presentan limitaciones importantes:
i n -
→ s e asocian c o n
clase.
•
E l método principal: → M i r a re n Apéndice E .
-
Pa r a i n i c i a r una aplicación Java sin Blue].
- Inicialmente no existen objetos, sólo clases → El primer método que tenemos
método d e clase.
que i n v o c a r
es u n
i n v o c a -
Java
-
→
MATRICES:
Una matriz tipo especial de colección que puede almacenar número
fijo
°
es u n u n
de elementos.
Una colección de tamaño llama matriz.
fijo
•
se
• Ventajas→ El acceso a los elementos almacenados e n una matriz suele ser más
{lasflexible
eficiente que el acceso a los elementos d e una colección d e tamaño
comparable.
°
Tiene u n soporte sintáctico especial→ se puede acceder a ellas c o n ayuda d e u n a
de corchetes que forman parte del nombre del tipo- i n t[7-→ matriz d e enteros.
f -
n e w. declaración
private int[] hourCounts;
hourCounts = new int[24];→
24 n o e s u n parámetro,e s e l tamaño creación objeto matriz
d e l a matriz. parámetrosconstruct T
°
No hay paréntesis para los orto matriz n o tiene constructor.
c o con -tipo
el declarado para l a variable.
°
Inmediatamente después d e s u creación, u n objeto motriz está vacío.
↳
↳
s i es u n a matriz para objetos→ contendrá valores null.
°
A los elementos individuales de una matriz s e accede indexando l a m a t r i z → u n índice
y
una variable de matriz - labels[6]
machines[0]
°
los índices d e u n a matriz siempre comienzan e n cero y van hasta u n a unidad menos que l a
longitud de l a matriz.
↳ Utilizar e l valor de l a longitud d e l a matriz como índice producirá u n error
Las expresiones
que seleccionan u elemento d e matriz pueden utilizarse
°
n u n a en cualquier
lugar donde se pueda emplear u n a variable del tipo base de l a matriz.
•
La utilización d e un índice d e matriz en e l lado izquierdo d e instrucción d e
a s i g n a (set) -
una
# hourCounts[hour] += 1; equivalent
hourCounts[hour] = hourCounts[hour] + 1;
e
a esto
°
Todaslas matrices tienen u n campo length que contiene e l valor d e s u tamaño fijo.
↳ s u valor s e corresponde con e l d e l a expresión entera utilizada para c r e a r e l objetomotriz.
↳
de tamaño flexible.
en 1, en cada iteración.
.
E s t á bien adaptado a aquellas situaciones e n las que s e necesita u n a iteración definida.
•
Forma general: losparéntesis contienen
instruccionesqueha
for (inicialización; condición; acción post-cuerpo)
{ tressecciones indepen-
dientes, separadas por
yquerep
punto y coma.
}
°
S i queremos eliminar elementos d e u n a colección mientras iteramos a través de ella con u n bucle.
fori
-inguna
for(Iterator<Track> it = tracks.iterator(); it.hasNext();){
Track t = it.next();
if(track.getArtist().equals(artist)){ post-
acción
}
it.remove();
del bucle
cuerpot
}
teniendo#n
pero seguimos e incluir el
del bucle.
[Se↳Consiste
en los dos caracteres?y : .
llama operador ternario → toma t r e s operandos.
↳ S e utiliza para seleccionar d e los dos valores alternativos,
b a s á n -
u n o
°
U n mapa e s u n a forma general de tabla de búsqueda → l a clave s e utiliza para buscar u n
e s - aplicaciones
que l a clave valor tomado d e intervalo
n ú m e -
e n e n e s u n u n de
enteros, y no u n objeto.
↳ Para ajustarse la forma d e indexar las colecciones, e l intervalo debe tener e l
[g,
a
°
Códigos d e Wolfram → Estudio con los 2 5 6 autómatas celulares elementales posibles.
Propuso u n sistema numérico p a r a definir l a conducta d e cada tipo d e autómata,y e l
Muchos d e los efectos de mal diseño d e clases hacen especialmente obvios a l tratar d e
°
u n s e
y l a cohesión.
°
Acoplamiento→ describe l a interconexión entre l a s clases.
Determi na
l o difícil
que e s realizar cambios e n u n a aplicación.
°
En estructura d e clases estrechamente acoplada, u cambio clase puede hacer
n e -
u n a n e n u n a
p r á cdifícil
que e s
-
e n
°
Cohesión→ Describe l o bien unidad d e código s e corresponde c o n u n a tarea lógica
que u n a
¢
o con u n a entidad.
En sistema
un
muy cohesionado, c a d a unidad d e código (método,clase
o
responsable d e tarea entidad bien definidas.
es
u n a o
paquete
> Un buen diseño d e clases exile u n alto grado de cohesión.
•
Cada unidad d e código debe ser responsable d e u n a tarea coherente → una tarea que
tipo d e entidad.
Principal razón del principio d e cohesión: l a reutilización → Si método o clase
r e s p o n -
°
u n es
de una única cosa bien definida, e s mucho m á s probable que pueda utilizarse d e nuevo
e n u n contexto distinto.
a p l i -
>
e n
e s probable
que
encontremos todas las piezas relevantes dentro de u n a misma unidad.
°
Cuando solo cambia l a implementación d e u n a clase, otras clases n o deberían verse afectadas.
↳ Tendremos u n acoplamiento débil.
.
Una adecuada encapsulación d e l a s clases reduce e l acoplamiento conduce, por tanto, a
y u n
↳
→ Es d e los principios fundamentales d e u
" " "°" buen diseño d e clases.
"él" u n o n
°
Hacer u s o d e u n a encapsulación adecuada reduce e l acoplamiento
y puede d i s m i n u i r
signi - l a cantidad de trabajo necesario para llevar cabo cambios e n
a p l i c a -
a u n a
°
l a encapsulación n o es el único factor que influye e n e l grado d e acoplamiento.
' E l diseño dirigido por responsabilidad e s e l proceso d e diseñar clases asignando unas
{
para determinar
parte d e u n a función de l a aplicación.
> Expresa l a idea de que cada clase debe s e r responsable d e gestionar s u s propios
datos.
Preguntarnos: ¿Qué clase debería s e r responsable de l a
tarea?]
^
r e s p o n -
°
unos
de manipularlos.
°
Uno d e los principales objetivos d e u n buen diseño d e clases e s e l d e conseguir l a localidad d e
los cambios → hacer cambios e n u n a clase debería tener u n efecto mínimo e n las clases
↳
" " " "si
podemos
conseguiresto siguiendo unas buenas reglas d e diseño
nuestras aplicaciones.
e s t r e c h a m e n -
e n s o n u n a
↳ E s mucho m á s
definida.
m u n
a n
buen diseño d e clases cuando s e modifica - o amplía l a aplicación.
↳ Consiste
en dos o m á s métodos.
Antes d e refactorizar debemos asegurarnos de
que exista conjunto d e pruebas para l a versión
°
u n
11) Refactorizar para mejorar l a estructura interna del código, pero s i n realizar
h e
introducido errores inadvertidamente.
-
E ) Una v e z que hayamos restablecido l a funcionalidad
r e f a c t o r i z a -
base e n l a versión
→
mejorar e l programa → realizar pruebas c o n l a n u e v a versión.
°
E n l a refactorización reestructuramos l a forma representamos nuestros datos para
e n
que
conseguir un mejor diseño c o n unos requisitos modificados.
y
después del cambio.
del tipo representa una instancia diferente d e ese tipo que y a ha sido creada para que
l a podamos emplear.
°
La sintaxis para utilizarlas es similar a las constantes d e clase.
•
l o s valores d e tipo enumerado son realmente objetos, no equivalen a números enteros.
y
Í
e n e l lugarde public enum CommandWord{
// Un valor para cada palabra de comando, más otro
// para los comandos no reconocidos.
se invocan COMO GO, QUIT, HELP, UNKNOWN;
}
lasconstantes de
clase:
Command.Word-GO, porconvenio,siempree n mayúsculas
CommandWord.QUIT...
°
Una instrucción switch selecciona u n a secuencia d e instrucciones para s u ejecución a partir
de u n a serie de múltiples opciones diferentes. → Apéndice D (pág.610).
°
Los constructores d e los tipos enumerados n u n c a son públicos→ No s o m o s nosotrosquienes
°
Enum puede implementar muchas interfaces.
•
Todo tipoenumerado define u n método values que devuelve u n a matriz llena con los objetos
-
Un método es demasiado largo s i lleva a cabo más d e una tarea lógico.
-
Una clase es demasiado compleja s i representa más d e una entidad lógica.
°
Resumen:
-
U n buen diseño de clases puede implicar u n a enorme diferencia a l a h o r a d e
c o
modificar o -
ampliar u n a aplicación.
-
Hay dos conceptos clave que permiten evaluar e l diseño d e las clases:
• E l acoplamiento hace referencia a l a interconexión entre l a s clases.
°
La cohesión s e refiere a l a modularización en unidades apropiadas.
-
Un buen diseño tiene un acoplamiento débil y una a l t a cohesión.
responsabilidad.
por
↳ Cada v e z que añadamos
i n t equé n t a r e -
una funcionalidad a l a aplicación,
identificar clase debe s e r responsable de cada parte d e l a
tarea.
-
A l ampliar un programa → usamos periódicamente la refactorización para
Íadaptareciénascambisequi
sitosgarantizar que las clases y los continúen estando métodos
c o yh e -
>
tipo d e mensaje de e r r o r ,
°
Errores lógicos → Es u n problema e n e l q u e e l programa s e compila se ejecuta s i n que s e
y
↳ Viene detrás d e
las pruebas.
•
Escritura de programas para s u mantenibilidad → E l tema más fundamental.
↳ Es intentar escribir código d e t a l m a n e r a ques e eviten
{
en primer lugar l o s
°
Cuando e l programa es d e otra persona, l a tarea d e depuración estáestrechamente relacionada
los métodos
y las clases.
°
Pruebas d e l a aplicación → consisten e n probar l a aplicación completa.
°
Las unidades sometidas a prueba puedens e r de diversos tamaños→ u n
grupo d e clases,
una única clase 0 u n único método.
°
Puede hacerse mucho antes d e completar u n a aplicación.
•
Cualquier método puede (y debe) s e r probada después d e haber sido escrito y compilado.
° Ventajas d e las pruebas experimentación tempranas:
y
↳
[Pod
Puede permitir detectar los problemas lo suficientemente pronto c o m o
para poder
resolverlos.
emos empezar a construir u n a serie de c a s o s y resultados d e prueba que s e
pueden utilizar que e l sistema crece.
y otra
una vez a medida
están llenas las llenas sólo s e pueden hacer las que tienen u n límite
→ con
fijo, c o m o
las matrices.
°
Hacer pruebas con u n a lista v a c í a es importante → es u n caso especial.
'
Una característica clave de unas buenas pruebas consiste e n asegurarse d e que comprueben
[¿{a
una
Y controlada.
| 'ates para u n buen procedimiento d e pruebas.
° Automatización d e pruebas → simplifica e l proceso d e pruebas d e regresión.
te
Implica volver a ejecutar pruebas que y a s e pasaron anteriormente con éxito,
para garantizar que l a n u e v a versión sigue superándolas.
•
Una de l a s formas m á s sencillas de automatizar las pruebas de regresión consiste e n
de pruebas.
escribir u n programa que actúe c o m o marco
{ E s u n entornod e pruebas
que soporta l a
Paraactivar l a s herramientas d e prueba, prueba estructurada d e unidades y l a s
pruebas d e regresión e n Java.
accedera l a pestaña Interface del
c d eudiálogoaPreferencias
-y esté seleccionada l a opción Mostrar
h e para la realización
-
asegurarse d e que
de pruebas de unidades.
°
Utilizando clases de prueba podemos automatizar l a s pruebas d e regresión.
°
l a clase d e prueba contiene e l código para llevara cabo una serie d e pruebas preparadas
°
C a d a clase prueba suele contener pruebas p a r a verificar la funcionalidad de
O N O.
°
Grabación de u n a prueba:
-
l a s pruebas se graban indicándole a
Blue] que comience a
grabar,
realizando l a prueba manualmente y luego indicando que l a prueba
h a finalizado.
-
Primer paso → a través del menú asociado a u n a clase d e prueba.
[s
base
para realizar pruebas de unidades.
-
E n e l menú
hay dos opciones D e l banco de objetos a l banco d e pruebas y
e
an.am a , m # a . * µ →
que, ¡ n o , automáticamente µ , antes
de invocar cada método de prueba → @Before.
>
los métodos de prueba individuales necesitan crear s u s propias versiones d e
ya n o
µ,,,,,,,,,,,,,,,,,,,,,,,,,,,
°
U n a parte importante d e l a realización del recorrido manual consiste e n asegurarse d e
y también e s
posible comparar los estadios después d e dos llamadas al
mismo método.
• Recorridos verbales→ Tratar de explicar a otra persona l o que hace u n a clase o
método.
d e -
•
y
"
↳
{proporc
programas.
{µ,,,,,,,,,,,,,,,,,
Consiste e n anotar temporalmente los métodos mediante
información a c e r c a d e :
-
los métodos que s e h a n invocado.
,,,,,,,,,
-
-
Los valores de las variables locales y los campos e n ciertos
puntos estratégicos.
tizar errores.
-
Puede resultar tedioso eliminarlas después.
Puede
que hagan falta
-
después de haberlas eliminado.
°
Las instrucciones d e impresión s e añaden a menudo a u n s o l o método c a d a v e z 0 a
¢
Es herramienta software que proporciona soporte realizar
r e c o -
una para u n
de u n segmento d e código.
↳
n o
método.
de esos objetos.
•
No e s importante en este momento decidir los detalles exactos d e todos los métodos
-
sólo queremos tener una primera impresión del diseño de esta aplicación.
•
E l estilo de notación para los diagramas de clases utilizados en el libro y e n Blue] e s u n
u n a vez →
evitando l a duplicación d e código.
•
Java utiliza l a palabra clave extends para definir l a relación d e herencia.
•
Las flechas ( I ) e n el diagrama d e clases, representan l a relación d e herencia.
↳ son flechas con cabeza hueca.
•
Superclase Toda clase ampliada por otra clase.
→
que es
•
Subclase → Una clase que amplía (hereda de) otra clase.
µ > Es
Hereda todos los
u n a
campos y
especialización de u n a superclase.
métodos d e s u superclase.
°
L a herencia se denomina e n ocasiones relación e s - u n .
•
Las instancias d e las s u bclases disponend e todos los métodos definidos tanto en la
o b -
•
es u n a
esas clases.
•
Hna subclase no puede acceder a los miembros privados d e s u superclase
accederatae
Estos s e modificarán o
campos s e
•
La palabra super hace l a llamada desde e l constructor d e l a subclase a l d e l a superclase.
•
siempre conviene incluir llamadas explícitas a l a superclase e n los constructores
↳
↳ es u n buen estilo d e programación.
que refactorizarla.
•
Clases abstractas → No se pretenden utilizar
para crear instancias y s u propósito
ex -
-
↳ U n cambio e n u n
campo o enun método compartidos
-
Capacidad de ampliación.
•
subtipo→ los tipos forman u n a jerarquía de tipos.
↳ El tipo especificado por l a definición d e u n a subclase es u n subtipo del tipo
correspondiente a s u superclase.
•
E s posible usar u n objeto d e una subclase cualquier lugar en
que s e requiera el tipo
c o -
e n
a su superclase.
Variables l a s variables pueden almacenar objetos d e
y subtipos→ tipo declarado de
•
s u o
↳ El tipod e una variable declara qué e s lo que esa variable puede almacenar.
•
sustitución → Pueden utilizarse objetos d e u n subtipo e n cualquier lugar e n e l que l o
↳
subtipo del tipo declarado.
Son las variables almacenan tipos d e objetos.
que
°
Casting → Debe evitarse siempre que s e a posible → Puede conducir a errores e n tiempo
↳
d e ejecución.
✓
todos los c a r son no todos los
vehicle vehicle s o n c a r
°
Operador de cast → Está compuesto por e l nombre de un tipo escrito entre paréntesis
en v. tiempod e ejecución→
depende de l a s asignaciones del
c o m p o r t a -
e n
exactamente e l
dinámico car
tipo
estáticop-tipo Vehicle.
}
Vehicle v1 = new Car(); El tipo d e l a variable v 1 e s
¢
↳ l a subclase declara u n método con la misma signatura q u e l a superclase,
pero c o n u n cuerpo del método diferente.
e l método sustituto tiene precedencia e n las llamadas a método
efectuadas,.ae
los objetos de l a subclase.
• También s e llama redefinición.
•
L a anotación @Override puede añadirse antes d e l a versión e n l a subclase para dejar claro
nueva versión d e u n método heredado.
ques e está definiendo u n a
°
Los objetos d e l a subclase dispondrán d e dos métodos con el mismo nombre y la misma
c → auno
-
heredado d e l a superdase y otro d e l a subclase.
•
Búsqueda d e métodos→ L a comprobación d e tipos emplea e l tipoestático, pero e n tier
(asociaciónd e métodos o ejecutan l o s métodos correspondientes a l tipo
po d e ejecución s e
despachod e métodos)
dinámico.
•
Quien determina qué método se encuentra en primer lugar y se ejecuta e s e l tipodinámico,
•
Llamada a
super e n los métodos → cuando queremos que s e ejecute tanto e l método
r e[n t e s a d a
e n cualquier lugar dentro d e l
hay que public void display(){
método
enunciar
super.display();
System.out.println(“ [“ + filename + “]”); tu
explícitamente System.out.println(“ “ + caption);
n o tiene
e l nombre del } ques e r necesaria-
o
Mente l a primerainstrucción.
Método d e la
superclase es obligatoria n i s e genera automáticamente diferenc
a ia de l o s
constructores
°
E n ausencia del mecanismo d e sustitución d e métodos, los miembros no privadosd e u n a super-
clase s o n directamente accesibles desdes u s subclases s i n necesidad d e ninguna sintaxis
e → s p
solo e s necesario hacer u n a e llamada a
-
super cuando haga falta acceder a la
d e métodos polimórficos.
propia.
e ser buena idea sustituir este método en nuestras propias clases.
°
Los métodos system-out.print s istem.out.printI n → s i el parámetro no e s u n objeto
y
automáticamente a l método tostring del objeto.
string, e l método invoca
°
E l método t ostring suele s e r útil para propósitos d e depuración.
•
Igualdad d e referencias→ N o tiene e n cuenta e n absoluto e l contenido d e los objetos.
↳ utilizando e l operador =
↳
s e comprueba
{Se
= .
son null.
↳
↳
método equals.
iguales.
•
No siempre será necesario comparar todos loscampos d e dos objetos
para c o n c l u i r que s o n
iguales.
•
Siempre que s e sustituya e l método equals, e s necesario sustituir también e l método hashco.de
e n el almacenamiento
y l a búsqueda d e objetos e n e s o s tipos d e colecciones.
.
E l método hashcode devuelve u n valor entero que representa un objeto.
↳ los diferentes objetos tendrán valores hashcode distintos.
°
Acceso protegido→ protected→ Permite acceder a los campos o métodos situados
↳
)
s u bclases (directas indirectas). No
debili -
o se aplica a l o s campos porque
l a encapsulación.
métodos
Suele reservarse para
4
constructores.
y Loscampos mutables d e las superclases deberían
seguirsiendo privados.
°
L a herencia asocia las clases más estrechamente → cualquier modificación de l a super_
indi rectamente,
•
u n
↳ Cuando
una instancia d e u n a determinada clase.
necesitamos el tipo dinámico distintivo d e objeto,
averiguar u n
E
0 cualquier subclase d e MyClass.
es
E l operador izquierdo es siempre
u n a referencia a objeto.
•
La utilización del operador instanceof suele i r seguido inmediatamente por u n c a s td e l a
-
ArrayList<MessagePost> messages = new ArrayList<MessagePost>;
for(Post post : posts){
if(post instanceof MessagePost){
messages.add((MessagePost) post);
}
}
¢
utilizando un modelo software.
e l sistema real.
t a m a -
°
Simulaciones predador-presa→ suelen utilizarse para modelar la variación e n los
Clases abstractas:
°
No están pensadas para crear objetos, s i n o solo para servir como superclases.
°
No pueden crearse instancias → N o tienen constructor.
S u cabecera termina
palabra clave abstract.
con u n puntoy coma.
•
Las clases que n o son abstractas s e denominan clases concretas.
•
Subclase abstracta → Para q u e u n a subclase d e u n a clase abstracta s e transforme
a l a superclase.
•
Llamadas a método en l a superclase → Las llamadas a método n o privadosdesde dentrod e
u n a superclase siempre s e evalúan en e l contexto m á s amplio del tipo dinámico del objeto.
• Herencia múltiple → Cuando tenemos u n a situación e n l a que u n a clase hereda d e
1
que permite u n a forma ilimitada d e herencia
Pero proporciona otra estructura
{múltiple.
Interface →
• E s u n a especificación d e u n
tipo (en l a forma de u n nombre de tipa u n
c o n -
y
↳ Características:
d e métodos) que n o define ninguna implementación paralos métodos.
-
En l a cabecera d e l a declaración s e utiliza interface en lugard e class.
- N o contiene constructor.
-
No contiene campos d e instancio.
-
los métodos abstractos n o tienen q u e i n c l u i r abstract e n l a cabecera.
s u cabecera de clase.
•
Si una clase amplía a la vez otra clase e implementa u n a interfaz → l a cláusula
heredado por todas las clases d e implementación → deja d e ser cierto que l a s interfaces
abstractos.
°
J ava permite a u n a clase ampliar como mucha otra clase → pero s i permite que u n a
clase implemente cualquier número d e interfaces.
Cuando clase implementa múltiples interfaces y dos o m á s las interfaces
t i e -
°
u n a de
•
L a cabecera del método d e sustitución n o contendrá l a palabra default.
para llamar a método por defecto desde las interfaces
°
super → u n u n a de e n u n método
de sustitución.
{ invocar a l método
pordefecto mediante l a
sintaxis:
InterfaceName. super.methodName l...)
-
•
Cuando u n a clase implementa u n a interfaz, n o hereda ninguna implementación d e e l l a
↳ porque las interfaces n o pueden contener cuerpos d e método.
U n a interfaz define tipo exactamente igual que l o hace clase pueden
d e -
•
u n u n a →
i m List,
p o r -
varias
L a clase C l a s s :
-
No tiene n a d a q u e v e r específicamente c o n l a s interfaces→ e s u n a característica
g d eJava.
e -
-
Cada tipo tiene u n objeto class asociado c o n é l .
-
Otra forma d e obtener el objeto Class para u n cierto tipo consiste e n escribir".class"
detrás del nombre del tipo (Font.class a int-class).
-
Incluso los tipos primitivos tienen objetos class asociados.
s e desea declarar u n a variable que contenga todos los objetos d e clase de todos los
tipos.
•
E s preferible definir métodos por defecto las interfaces salvo el
n o e n con fin d e adaptar
código antiguo.
°
S i podemos elegir→ las interfaces s o n preferibles → son tipos relativamente ligeros q u e
reducen a l mínimo las limitaciones sobre las clases d e implementación.
↳ esto c r e a u n a m e n o r superposición.
• El uso de interfaces permite obtener u n a estructura m á s flexible y ampliable.
Las simulaciones basadas e n asíncronas suelen s e r m á s eficientes
y resultan
•
p r e -
sucesos o
-
Un objeto podría s e r usado e n
formas que n o hubieran s i d o anticipadas por
e l diseñador d e l a clase y q u e e s o
e s t a -
conduzca a
q u e e l objeto quede e n u n
incoherente o inapropiado.
Programación defensiva:
°
Un objeto servidor típico n o inicia por s u propia cuenta ningún tipo d e a c c i ó n .
↳ todas sus actividades están dirigidas por l a s solicitudes d e los
clientes.
÷::::::::::::::::::::::::::::::::..
medio
y
↳ solo solicitarán los servicios d e
definida.
u n a forma coherente y bien
probable
problemático → hay que adoptar todas l a s posibles m e d i d a s para impedir que
los objetos cliente utilicen e l servidor d e forma incorrecta.
-
Puede haber u n cliente intencionalmente hostil→ que esté intentando h a c e r
•
s i n o se comprueban l o s parámetros → se puede producir u n error fatal e n tiempo
d e ejecución.
Generación d e informes d e error:
E s conveniente problema
que e l servidor indique q u e s e h a producido u
•
n
1 . Notificación a l usuario:
°
L a forma m á s obvia e n l a q u e u n objeto puede responder c u a n d o detecta que hay u n
¢ >
imprimiendo
mostrando u
un
n
mensaje de
mensaje d e e r r o r
error utilizando
e n u n a
System. o u t
ventana d e alerta.
a System.e n
Problemas→ Presuponer
q u e l a aplicación e s t á siendo utilizada por u usuario h u m a n o
•
n
problema.
°
L a notificación del error a l usuario n o e s u n a solución general a l problema d e l a
a l usuario.
[--
un si no. o
fallo de un método.
°
E s común que los métodos que devuelven referencias a objetos utilicen e l valor null
°
Los métodos que devuelven valores primitivos hacen l o m i s m o devolviendo u n valor
fuera d e limites.
↳ Esto no s e puede hacer cuando todos los valores del rango correspondiente
l ó -
como un valor normal generando u n error
c o distintos.
m p l e -
-
p r o -
no u n error
s e r -
una es u n
para indicar que n o puede terminar una llamada a uno de sus métodos.
{El
excepción
una
y continúe s u procesamiento como s i n a d a hubiera pasado.
excepción s e
genera para indicar q u e se h a producido u n
fallo.
°
Hay dos etapas en el proceso de creación de u n a excepción:
-
public ContactDetails getDetails(String key){
if(key == null){
throw new IllegalArgumentException(“null key in getDetails”);
}
return book.get(key);
}
especial.
i try.
n ↳s t r u c c i o -
uso de cláusulas throws e
cuyo uso n o
comprobación
por parte del compilador.
↳ son todas las subclases de la clase estándar RuntimeException.
• Las subclases de Error suelen estar reservadas para los errores del sistema d e tiempo
de ejecución, más que para errores sobre los cuales e l programador tenga control.
Y Timeexcept
PMicepincomprobada
ion
Y
MitxcepcionNocomprotado
•
l a s excepciones comprobadas están pensadas
para aquellos casos en los que e l cliente
debería esperar una operación pueda fallar→ E l cliente estará obligado a comprobar
que
si l a operación h a tenido éxito.
•
Las excepciones n o comprobadas están pensadas para aquellos casos
que n u n c a deberían
fallo del programa porque s e sospecha que existe algún error lógico dentro del
ser
p oque surja
s i -
generar una
que prevea
cuando
i n m e d tipoi a t a -
genera excepción, l a ejecución del método actual finaliza
•
s e u n a
e j e -
→ con u n no estarán obligados a
{
generación d e l a excepción indica l a incapacidad d e este método
°
S o n las m á s fáciles de utilizar → e l compilador impone muy pocas reglas.
°
E l compilador n o aplica ninguna comprobación especial n i e n e l método en e l que se
°
Una clase excepción es no comprobada si es u n a subclase d e RuntimeException,
comprobadas.
Merece l a
pena que los métodos realicen serie d e comprobaciones d e validez sobre
°
u n a
°
Un uso importante de las excepciones es impedir que s e creen objetos si estos n o
En constructores l a s excepciones s e
generan igual
los métodos.
que en
diente.]
También tendrán e l m i s m o efecto sobre el
cuando utilizan excepciones comprobadas, hay que seguir v a r i a s reglas más, porque e l
•
s e
¢,,,,,,,,,@µ,,,,,,,,,
que genere u n a
Ej:
~ public void saveToFile(String destinationFile)
throws IOException
,,,,,,,,,,,,,,,,,
l a cláusula
c o m p i l a -
•
se puede usar throws para l a s excepciones n o comprobadas, pero e l
no lo exige.
::::::::::::::::::::::::::::::::::
""
-
En u n bloque try puede incluirse cualquier número d e excepciones → colocaremos a l l í
de l a instrucción try.
°
Una excepción impide que continúe en el llamante el flujo normal d e control.
↳ s i s e genera u n a excepción
por u n a instrucción i nvo c a d a dentro del bloque
try, l a ejecución se reanuda en e l correspondiente bloque catch.
•
Las instrucciones contenidas e n u n bloque try s e llaman instrucciones protegidas.
excepción durante l a ejecución del saltará a l bloque
•
s i n o
surge ninguna bloque try, s e
catch tras alcanzarse e l final del bloque try → l a ejecución continuará con lo que
l a excepción.
°
Encer rar u n a instrucción throw directamente dentro d e u n a instrucción try será c a s i seguro u n
CHOI.
°
S i u n método genera m á s d e un tipo d e excepción → s i s o n excepciones comprobadas, hay
Ej:
o b -
→ Puede usarse e l mismo nombre de variable para e l
c o m p r u e -
una u n una
los bloques catch en el orden e n que aparecen escritos, hasta que s e encuentra u n a
recuperación específicos
para cada tipo de excepción.
°
El orden de los bloques catch dentro de una misma instrucción try e s importante.
°
Ningún bloque catch
para u n
determinado tipo de excepción puede estar situado después
•
Para gestionar múltiples excepciones con l a misma acción d e recuperación o información:
j '
try {
...
ref.process();
...
}
catch (EOFException | FileNotFoundException e){
//Llevar a cabo una acción apropiada para ambas excepciones.
...
}
•
Las excepciones deben capturarse y tratarse en l a primera oportunidad disponible.
necesita hacer ninguna recuperación por s í mismo, pero esa recuperación s í puede ser
d e s -
de una condición de error, s e pueden nuevas clases d e excepción m á s
usando l a herencia.
↳ Las comprobadas como subclases de Exception,por ejemplo.
Las n o comprobadas c o m o subclases de RuntimeException.
"
Para realizar pruebas d e coherencia internas eficientes, activadas
que puedan ser en
→ Funcionalidad de aserción.
°
U n a aserción e s u n enunciado d e u n hecho que debe s e r cierto durante l a ejecución del
•
l a palabra clave assert va seguido por expresión booleana → propósito e s
e n u n punto del -
u n a s u
Eji-neeee.ae
public void removeDetails(String key){
if(key == null){
throw new IllegalArgumentException(
“Null key passed to removeDetails.”);
}
if(keyInUse(key)){
ContactDetails details = book.get(key);
book.remove(details.getName());
book.remove(details.getPhone());
numberOfEntries—-; estepunto.
}
assert!keyInUse(key);
assert consistentSize(): “Inconsistent book size in removeDetails”;
}
↳ formaalternativa → l a cadena s e pasaráa l constructord e AssertionError para proporcionar
u n a cadena d e diagnósticos puedeemplearse cualquier
tipodevalor,que
Una será transformado e n stringantesd e
°
instrucción d e aserción tiene dos objetivos. pasar.
glides"
"in
A) Expresar d e explícita l o
d e t e r m i -
manera
que asumimos " u n punto
a s e r -
u n con una
°
l a s aserciones están pensadas modo d e realizar pruebas de coherencia
para proporcionar u n
Recuperación de errores:
que reciban.
→
La instrucción try es l a clave para suministrar u n mecanismo d e recuperación d e
°
l a recuperación implicará a menudo tener que intentar l a operación d e nuevo.
°
No puede garantizarse l a adecuada recuperación e n caso de e r r o r.
imposible.
°
L a clase File permite a u n programa consultar los detalles relativos a u n archivo externo,
e j e c u -
una archivos s e
el programa.
E l nombre del archivo constructor d e File.
pasa a l
°
s e
°
Al c r e a r un objeto File dentro d e u n programa n o s e crea e l archivo dentro d e l sistema
objeto Path.
↳ e l nombre del archivo puede estar como objeto string u objeto File.
°
Crear u n F i l eWriter abre e l archivo externo y l o prepara para recibir u n a información d e
Cuando e l abierto, pueden utilizarse los métodos write del escritor para almacenar
°
archivo e s
caracteres e n e l archivo.
una.mx#aiai*mi"""
•
"
"
try con recurso o gestión - existe u n a versión d e l a instrucción try que simplifica
de recursos automática
RM). ↳ para los
objetos d e las clases
sólo que implementen l a interfaz
Autoclaseable d e
java.lang.
" ÷
public boolean createFile(String filename, int numEntries){
boolean success = false;
try(FileWriter writer = new FileWriter(filename)){
se omite la creación de la entrada
for(int i = 0; i <= numEntries; i++){
writer.write(entries[i].toString());
writer.write(‘\n’);
}
success = true;
}
catch(IOException e){
System.err.println(“There was a problem write tiene to “ + filename);
}
return success;
}
Entrada d e texto:
° La clase FileReader contiene u n método para leer u n único carácter, pero n o
para l e e r u n a
↳
COMO chal.
Files.
°
L a c l a s e Scanner d e l paquete javaintil e s t á diseñada p a r a a n a l i z a r sintácticamente
T i e n e constructores
que pueden a d m i t i r argumentos de tipo string, File o
Path.
°
También s e u s a scanner
para leer la entrada desde e l "terminal" conectado a u n programa.
°
System-out e s d e tipo
java.io.Prints t r e a m → destino d e salida estándar.
•
system.in es d e tipo java.io.Inputstream → origen de entrada estándar.
°
C u a n d o hace falta leer entrada del usuario desde e l terminal, n o s e u s a directamente
°
E l método nexttime de scanner devuelve l a siguiente l í n e a completa d e entrada desde l a
Serialización:
•
L a serialización permite leer escribir e n ú n i c a operación objetos completos, a s í
y u n a como
jerarquías d e objetos→ Todos los objetos implicados deben pertenecera alguna clase que
implemente l a interfaz Serializable.
°
La serialización permite escribir u n objeto completo e n u n archivo externo e n u n a única
bases de datos d e información multimedia → permite que todas las entradas creadas en
ejecución
y requiere escribir muy poco código definido por e l usuario.
Resumen:
-
internas d e coherencia → estas instrucciones s e suelen o m i t i r e n e l código de
producción.
•
l a entrada/salida e s u n área e n la que hay bastante probabilidad de que s e generen
excepciones.
•
l a API d e Java soporta l a entrada/salida d e datos tanto d e texto como binarios,a
través de lectores, escritores y flujos de datos.
°
los paquetes javainio sustituyen a las antiguas clases java.io.