aboutsummaryrefslogtreecommitdiff
path: root/poo
diff options
context:
space:
mode:
authorJuan Marín Noguera <juan.marinn@um.es>2020-02-24 11:22:00 +0100
committerJuan Marín Noguera <juan.marinn@um.es>2020-02-24 11:22:00 +0100
commit79e1a51eb55d0df43323c0fe77a7d55b2c2bd17d (patch)
tree89bd93a329f9deb72efce8fed205b69918c3d9b9 /poo
parent1f7f9bcc7660fba0827a62c3068d5c7082f025d7 (diff)
POO
Diffstat (limited to 'poo')
-rw-r--r--poo/n.lyx266
-rw-r--r--poo/n1.lyx235
-rw-r--r--poo/n2.lyx1168
-rw-r--r--poo/n3.lyx959
-rw-r--r--poo/n4.lyx3827
-rw-r--r--poo/n5.lyx926
-rw-r--r--poo/n6.lyx771
-rw-r--r--poo/na.lyx1500
-rw-r--r--poo/nb.lyx743
9 files changed, 10395 insertions, 0 deletions
diff --git a/poo/n.lyx b/poo/n.lyx
new file mode 100644
index 0000000..ff15b9e
--- /dev/null
+++ b/poo/n.lyx
@@ -0,0 +1,266 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize 10
+\spacing single
+\use_hyperref false
+\papersize a5paper
+\use_geometry true
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\leftmargin 0.2cm
+\topmargin 0.7cm
+\rightmargin 0.2cm
+\bottommargin 0.7cm
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style swiss
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle empty
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Title
+Programación Orientada a Objetos
+\end_layout
+
+\begin_layout Date
+\begin_inset Note Note
+status open
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+def
+\backslash
+cryear{2018}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "../license.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Bibliografía:
+\end_layout
+
+\begin_layout Itemize
+Programación Orientada a Objetos, anónimo (Curso 2018–2019).
+\end_layout
+
+\begin_layout Itemize
+Java™ Platform, Standard Edition 8, API Specification (
+\begin_inset Flex URL
+status open
+
+\begin_layout Plain Layout
+
+https://docs.oracle.com/javase/8/docs/api/
+\end_layout
+
+\end_inset
+
+).
+\end_layout
+
+\begin_layout Chapter
+Introducción
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "n1.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Clases y objetos
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "n2.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Herencia
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "n3.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Genericidad
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "n4.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Programación funcional
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "n5.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Excepciones
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "n6.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+\start_of_appendix
+Algo más de la API
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "na.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Chapter
+Despliegue de software Java
+\end_layout
+
+\begin_layout Standard
+\begin_inset CommandInset include
+LatexCommand input
+filename "nb.lyx"
+
+\end_inset
+
+
+\end_layout
+
+\end_body
+\end_document
diff --git a/poo/n1.lyx b/poo/n1.lyx
new file mode 100644
index 0000000..4ab7e7c
--- /dev/null
+++ b/poo/n1.lyx
@@ -0,0 +1,235 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+La evolución de los lenguajes de programación va ligada al crecimiento de
+ la complejidad en aplicaciones y a la mejora de la capacidad del hardware,
+ y busca acercarse a los conceptos del dominio de la aplicación (
+\series bold
+abstracción
+\series default
+).
+ Un
+\series bold
+paradigma de programación
+\series default
+ es una serie de conceptos que guían la forma de pensar acerca de los programas,
+ construirlos y estructurarlos.
+ Los lenguajes de programación reflejan uno o varios de estos paradigmas.
+\end_layout
+
+\begin_layout Standard
+El paradigma
+\series bold
+orientado a objetos
+\series default
+ organiza el software como una colección de objetos que se relacionan y
+ proveen la funcionalidad de un sistema.
+ Este paradigma nos permite:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Abstracción
+\series default
+: Centrarse en las propiedades de los tipos y no en la implementación.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Modularidad
+\series default
+: Descomponer el software en componentes que se combinan entre sí.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Encapsulación
+\series default
+: Juntar la estructura de un tipo de datos con sus operaciones.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Ocultación de información
+\series default
+: Diferenciar la parte pública de un módulo de la privada.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Herencia
+\series default
+: Definir clases a partir de otras.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Polimorfismo
+\series default
+: Permitir que una entidad haga referencia a objetos de distintos tipos.
+\end_layout
+
+\begin_layout Standard
+En 1985 se crean el
+\series bold
+C++
+\series default
+, extensión orientada a objetos de C muy popular que ayudó a difundir el
+ paradigma, y
+\series bold
+Eiffel
+\series default
+, creado por Bertrand Meyer tras un profundo estudio del paradigma pero
+ considerado
+\begin_inset Quotes fld
+\end_inset
+
+teórico
+\begin_inset Quotes frd
+\end_inset
+
+ y poco usado.
+\end_layout
+
+\begin_layout Standard
+En 1995, Sun Microsystems (adquirido por Oracle en 2009) crea
+\series bold
+Java
+\series default
+, un lenguaje OO puro popularizado por su uso en la web y con numerosas
+ bibliotecas de código, y en el año 2000 Microsoft crea
+\series bold
+C#
+\series default
+, que combina C++ y Java, junto con su plataforma
+\series bold
+.NET
+\series default
+.
+\end_layout
+
+\begin_layout Standard
+El compilador de Java genera un
+\series bold
+código intermedio
+\series default
+ o
+\emph on
+bytecode
+\emph default
+, independiente de la plataforma, e interpretado o compilado en el momento
+ (compilación
+\series bold
+JIT
+\series default
+,
+\emph on
+Just In Time
+\emph default
+) por la máquina virtual de Java (JVM), con lo que el código se puede ejecutar
+ en cualquier máquina que tenga instalado el entorno de ejecución de Java
+ y la máquina virtual, independientemente de la arquitectura del procesador
+ y el sistema operativo.
+\end_layout
+
+\begin_layout Standard
+Java presenta una sintaxis sencilla, parecida a C++ pero eliminando las
+ características complejas, y es robusto al ser fuertemente tipado (el compilado
+r detecta muchos problemas del código), soportar excepciones (para gestión
+ de errores en tiempo de ejecución) y proveer
+\begin_inset Quotes fld
+\end_inset
+
+recogida de basura
+\begin_inset Quotes frd
+\end_inset
+
+ (hace innecesaria la gestión de punteros).
+ Aprenderemos Java 1.8.
+\end_layout
+
+\end_body
+\end_document
diff --git a/poo/n2.lyx b/poo/n2.lyx
new file mode 100644
index 0000000..e22fece
--- /dev/null
+++ b/poo/n2.lyx
@@ -0,0 +1,1168 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+En Java los tipos de datos se implementan como
+\series bold
+clases
+\series default
+, cada una dentro de un fichero y con nombre normalmente en
+\emph on
+CamelCase
+\emph default
+, que a su vez se organizan en
+\series bold
+paquetes
+\series default
+ que agrupan código relacionado
+\emph on
+,
+\emph default
+ con nombres en
+\emph on
+lowerCamelCase
+\emph default
+
+\begin_inset Foot
+status open
+
+\begin_layout Plain Layout
+Ese término me lo he inventado.
+\end_layout
+
+\end_inset
+
+, que pueden a su vez estar en otros.
+ Los elementos de la ruta de un paquete, clase, etc.
+ se separan con
+\begin_inset Quotes fld
+\end_inset
+
+
+\family typewriter
+.
+\family default
+
+\begin_inset Quotes frd
+\end_inset
+
+.
+ Los ficheros de clase contienen:
+\end_layout
+
+\begin_layout Itemize
+Declaración del paquete en el que está la clase:
+\family typewriter
+package
+\emph on
+ruta.del.paquete
+\emph default
+;
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+Importación de clases de paquetes distintos al de la clase o a
+\family typewriter
+java.lang
+\family default
+, para poder referirnos a ellas sin indicar la ruta completa:
+\family typewriter
+import
+\emph on
+ruta.de.Clase
+\emph default
+;
+\family default
+.
+ También se pueden importar constantes
+\begin_inset Newline newline
+\end_inset
+
+definidas en clases con
+\family typewriter
+import static ruta.de.Clase.
+\family default
+[
+\family typewriter
+CONSTANTE
+\family default
+|
+\family typewriter
+*
+\family default
+]
+\family typewriter
+;
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+Definición de la clase: [
+\family typewriter
+\emph on
+visibilidad
+\family default
+\emph default
+] [
+\family typewriter
+\emph on
+mods
+\family default
+\emph default
+]
+\family typewriter
+class
+\emph on
+NombreClase
+\family default
+\emph default
+[
+\family typewriter
+<
+\family default
+...
+\family typewriter
+>
+\family default
+] [
+\family typewriter
+extends
+\emph on
+Clase
+\family default
+\emph default
+] [
+\family typewriter
+implements
+\emph on
+Interfaz1
+\emph default
+,
+\family default
+...]
+\family typewriter
+{
+\family default
+...
+
+\family typewriter
+ }
+\family default
+, donde se define la clase.
+ La visibilidad es
+\family typewriter
+public
+\family default
+ para que la clase sea visible fuera del paquete; por defecto solo lo es
+ dentro de este.
+\end_layout
+
+\begin_layout Standard
+Los elementos de una clase (dentro de
+\family typewriter
+{
+\family default
+...
+
+\family typewriter
+ }
+\family default
+) pueden tener visibilidad pública (
+\family typewriter
+public
+\family default
+, accesible fuera del paquete), privada (
+\family typewriter
+private
+\family default
+, accesible solo dentro la clase) o a nivel de paquete (por defecto, accesible
+ solo dentro del paquete).
+ Estos son:
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Atributos
+\series default
+: Los campos de la estructura: [
+\family typewriter
+\emph on
+visibilidad
+\family default
+\emph default
+] [
+\family typewriter
+\emph on
+mods
+\family default
+\emph default
+]
+\family typewriter
+\emph on
+Tipo nombre
+\emph default
+
+\family default
+[
+\family typewriter
+=
+\emph on
+expr
+\family default
+\emph default
+]
+\family typewriter
+;
+\family default
+.
+ Siempre privados según las buenas prácticas.
+ Cuando una clase
+\begin_inset Formula $A$
+\end_inset
+
+ declara un atributo cuyo tipo es otra clase
+\begin_inset Formula $B$
+\end_inset
+
+, decimos que
+\begin_inset Formula $A$
+\end_inset
+
+ es
+\series bold
+cliente
+\series default
+ de
+\begin_inset Formula $B$
+\end_inset
+
+ (
+\series bold
+relación de clientela
+\series default
+).
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Métodos
+\series default
+: Operaciones aplicables sobre los objetos:
+\begin_inset Newline newline
+\end_inset
+
+[
+\family typewriter
+\emph on
+visibilidad
+\family default
+\emph default
+] [
+\family typewriter
+\emph on
+mods
+\family default
+\emph default
+] [
+\family typewriter
+\emph on
+TipoDevuelto
+\family default
+\emph default
+|
+\family typewriter
+void
+\family default
+]
+\family typewriter
+\emph on
+ nombre
+\emph default
+(
+\family default
+[
+\family typewriter
+final
+\family default
+]
+\family typewriter
+\emph on
+Tipo parámetro
+\emph default
+,
+\family default
+...
+ [
+\family typewriter
+,
+\family default
+[
+\family typewriter
+final
+\family default
+]
+\family typewriter
+
+\emph on
+Tipo
+\emph default
+...
+
+\emph on
+array
+\family default
+\emph default
+]
+\family typewriter
+)
+\family default
+[
+\family typewriter
+throws
+\emph on
+Excepción1
+\emph default
+,
+\family default
+...]
+\family typewriter
+ {
+\family default
+(implementación)
+\family typewriter
+ }
+\family default
+.
+ Si se incluye el parámetro
+\family typewriter
+\emph on
+array
+\family default
+\emph default
+, su tipo es
+\family typewriter
+\emph on
+Tipo
+\emph default
+[]
+\family default
+ (ver abajo), y recibe la lista de todos los parámetros después de los obligator
+ios si son de tipo
+\family typewriter
+\emph on
+Tipo
+\family default
+\emph default
+, o el (único) parámetro des
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+pués de los obligatorios si es de tipo
+\family typewriter
+\emph on
+Tipo
+\emph default
+[]
+\family default
+.
+ Puede haber varios métodos con el mismo nombre, siempre que tengan distinto
+ número de parámetros o alguno tenga distinto tipo y estos sean disjuntos
+ (
+\series bold
+sobrecarga de métodos
+\series default
+ u
+\series bold
+\emph on
+
+\series default
+overloading
+\emph default
+).
+\begin_inset Newline newline
+\end_inset
+
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+sremember{IP}
+\end_layout
+
+\end_inset
+
+Llamamos
+\series bold
+parámetros formales
+\series default
+ a los parámetros de una acción (
+\begin_inset Formula $par_{1},\dots,par_{n}$
+\end_inset
+
+) y
+\series bold
+argumentos
+\series default
+ o
+\series bold
+parámetros reales
+\series default
+ a los valores con los que se invoca la acción, mediante la notación
+\begin_inset Quotes cld
+\end_inset
+
+
+\emph on
+nombre
+\emph default
+(
+\begin_inset Formula $expr_{1},\dots,expr_{n}$
+\end_inset
+
+)
+\begin_inset Quotes crd
+\end_inset
+
+.
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+eremember{}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\end_inset
+
+Para acceder a los atributos se pueden usar
+\series bold
+métodos de acceso
+\series default
+ (
+\emph on
+getters
+\emph default
+, normalmente
+\family typewriter
+public
+\emph on
+Tipo
+\emph default
+ get
+\emph on
+Atributo
+\emph default
+()
+\family default
+) y
+\series bold
+métodos de modificación
+\series default
+ (
+\emph on
+setters
+\emph default
+, normalmente
+\family typewriter
+public void set
+\emph on
+Atributo
+\emph default
+(
+\emph on
+Tipo atributo
+\emph default
+)
+\family default
+), lo que permite más tarde cambiar la estructura manteniendo la interfaz
+ compatible.
+ Otras veces se accede a los atributos de otras formas más apropiadas para
+ su significado concreto, o se añaden métodos de acceso para propiedades
+ calculadas.
+\end_layout
+
+\begin_layout Itemize
+
+\series bold
+Constructores
+\series default
+: Operaciones encargadas de inicializar correctamente un objeto.
+ Se definen como los métodos pero sin el tipo devuelto, y el nombre es el
+ de la clase.
+ Si no se define ninguno se crea un
+\series bold
+constructor por defecto
+\series default
+, que no toma ningún parámetro y deja todos los atributos con su valor por
+ defecto.
+\end_layout
+
+\begin_layout Standard
+Los modificadores (
+\family typewriter
+\emph on
+mods
+\family default
+\emph default
+) son:
+\end_layout
+
+\begin_layout Itemize
+
+\family typewriter
+static
+\family default
+: Indica que un atributo es global para todos los objetos de la clase (atributo
+
+\series bold
+de clase
+\series default
+), o que un método es de clase, y por tanto no se llama a través de un objeto
+ y en principio solo puede acceder a atributos de clase.
+\end_layout
+
+\begin_layout Itemize
+
+\family typewriter
+final
+\family default
+: Indica que el valor de un atributo (o variable local) solo puede ser estableci
+do en su declaración o, en su caso, en un constructor.
+ No se les asigna un valor por defecto.
+ Puede combinarse con
+\family typewriter
+static
+\family default
+ para definir constantes, que no hace falta hacerlas privadas.
+
+\end_layout
+
+\begin_layout Standard
+Tipos de datos en Java:
+\end_layout
+
+\begin_layout Itemize
+Primitivos.
+\end_layout
+
+\begin_deeper
+\begin_layout Itemize
+Enteros con signo:
+\family typewriter
+byte
+\family default
+ (8 bits),
+\family typewriter
+short
+\family default
+ (16),
+\family typewriter
+int
+\family default
+ (32),
+\family typewriter
+long
+\family default
+ (64).
+ Por defecto:
+\family typewriter
+0
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+Reales:
+\family typewriter
+float
+\family default
+ (IEEE-854, 32 bits),
+\family typewriter
+double
+\family default
+ (64).
+ Por defecto:
+\family typewriter
+0
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+Caracteres:
+\family typewriter
+char
+\family default
+.
+ Por defecto:
+\family typewriter
+'
+\backslash
+u000'
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+Booleano:
+\family typewriter
+boolean
+\family default
+.
+ Valores
+\family typewriter
+false
+\family default
+ (por defecto) y
+\family typewriter
+true
+\family default
+.
+\end_layout
+
+\end_deeper
+\begin_layout Itemize
+
+\series bold
+Objetos
+\series default
+.
+
+\series bold
+Instancias
+\series default
+ de una clase, representadas por una estructura en memoria con un campo
+ por cada atributo, que para tipos primitivos contiene el valor y para el
+ resto contiene un identificador de objeto (
+\emph on
+oid
+\emph default
+), o el valor
+\family typewriter
+null
+\family default
+, su valor por defecto, que no indica ningún objeto.
+ El
+\series bold
+estado
+\series default
+ de un objeto es el valor de estos campos.
+\begin_inset Newline newline
+\end_inset
+
+Los objetos en Java se manejan por referencia (a través del
+\emph on
+oid
+\emph default
+).
+ Esto permite la compartición de objetos con integridad referencial, es
+ más eficiente para objetos complejos, permite estructuras recursivas e
+ implica que los objetos se crean cuando se construyen y no en su declaración.
+ El inconveniente es el
+\series bold
+\emph on
+aliasing
+\series default
+\emph default
+, pues al asignar el valor de una variable a otra no se copia el objeto
+ sino su identificador, lo cual es importante tener en cuenta en métodos
+ de acceso a atributos mutables para no comprometer la integridad del objeto.
+\end_layout
+
+\begin_deeper
+\begin_layout Itemize
+Las cadenas de caracteres son objetos inmutables de clase
+\family typewriter
+String
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+Los
+\series bold
+enumerados
+\series default
+ son clases definidas de forma especial, con la sintaxis [
+\family typewriter
+\emph on
+visibilidad
+\family default
+\emph default
+]
+\family typewriter
+enum
+\emph on
+Nombre
+\emph default
+ {
+\emph on
+VALOR_1
+\emph default
+,
+\emph on
+VALOR_2
+\emph default
+,
+\family default
+...
+
+\family typewriter
+ }
+\family default
+.
+ Incluyen una constante del propio tipo para cada valor, y estas definen
+ el dominio de valores de la clase, así como métodos
+\family typewriter
+public int ordinal()
+\family default
+ que devuelve el índice del valor y
+\family typewriter
+public static
+\emph on
+Tipo
+\emph default
+[] values()
+\family default
+ que devuelve una lista con todas los valores posibles.
+\end_layout
+
+\begin_layout Itemize
+Los
+\series bold
+\emph on
+arrays
+\series default
+\emph default
+ son objetos que contienen un número fijo de elementos de otro tipo.
+ Su tipo es
+\family typewriter
+\emph on
+TipoElemento
+\emph default
+[]
+\family default
+...
+\family typewriter
+[]
+\family default
+ (pueden tener varias dimensiones).
+ Su tamaño puede consultarse mediante el atributo
+\family typewriter
+public final int length
+\family default
+.
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+El operador
+\family typewriter
+==
+\family default
+ comprueba si dos elementos de un tipo primitivo son iguales o si dos referencia
+s apuntan al mismo objeto (igual
+\emph on
+oid
+\emph default
+), y en particular si dos elementos de un tipo enumerado tienen el mismo
+ valor (devuelve un booleano).
+\end_layout
+
+\begin_layout Standard
+Los objetos se comunican entre sí mediante
+\series bold
+mensajes
+\series default
+, formados por un
+\series bold
+objeto receptor
+\series default
+ (si no es un método de clase), un
+\series bold
+identificador de método
+\series default
+ y los
+\series bold
+argumentos
+\series default
+.
+ Enviar un mensaje es llamar al método, definido en la clase del objeto,
+ con la sintaxis
+\family typewriter
+\emph on
+objeto
+\emph default
+.
+\emph on
+método
+\emph default
+(
+\emph on
+args
+\emph default
+,
+\family default
+...
+\family typewriter
+)
+\family default
+ o, si es un método de clase, con
+\family typewriter
+\emph on
+Clase
+\emph default
+.
+\emph on
+método
+\emph default
+(
+\emph on
+args
+\emph default
+,
+\family default
+...
+\family typewriter
+)
+\family default
+.
+ Los argumentos se pasan por valor.
+ Este método (si no es de clase) puede acceder al objeto sobre el que se
+ llama (la
+\series bold
+instancia actual
+\series default
+) por la palabra reservada
+\family typewriter
+this
+\family default
+.
+ Además, puede referirse a los métodos y atributos de la instancia actual
+ (si no es un método de clase) o de la propia clase sin especificar la instancia
+ actual o la clase, siempre que no haya un parámetro o variable local del
+ mismo nombre.
+ Un constructor puede invocar a otro mediante
+\family typewriter
+this(
+\emph on
+args
+\emph default
+,
+\family default
+...
+\family typewriter
+);
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+Dentro de un método, la sentencia
+\family typewriter
+\emph on
+Tipo var
+\emph default
+
+\family default
+[
+\family typewriter
+=
+\emph on
+expr
+\family default
+\emph default
+]
+\family typewriter
+;
+\family default
+ declara una variable local y le asigna opcionalmente un valor, y la expresión
+
+\family typewriter
+new
+\emph on
+Clase
+\emph default
+(
+\emph on
+arg
+\emph default
+,
+\family default
+...
+\family typewriter
+)
+\family default
+ asigna el espacio para la estructura de un objeto, le asigna un identificador,
+ inicializa los campos con su valor por defecto, llama al constructor corrspondi
+ente y devuelve dicho objeto.
+ Para crear un
+\emph on
+array
+\emph default
+ se usa
+\family typewriter
+new
+\emph on
+TipoElemento
+\emph default
+[
+\emph on
+t1
+\emph default
+]
+\family default
+...
+\family typewriter
+[
+\emph on
+tn
+\emph default
+]
+\family default
+[
+\family typewriter
+{
+\family default
+\emph on
+...
+\family typewriter
+\emph default
+{
+\emph on
+valor11
+\emph default
+,
+\family default
+...
+\family typewriter
+},
+\family default
+...
+\family typewriter
+}
+\family default
+], con el número de elementos en cada dimensión, lo que asigna el espacio
+ necesario al
+\emph on
+array
+\emph default
+, le asigna un identificador e inicializa cada elemento con su valor por
+ defecto o con los valores indicados entre llaves.
+ La destrucción de los objetos no es explícita, sino que el
+\series bold
+recolector de basura
+\series default
+ (
+\emph on
+garbage collector
+\emph default
+) periódicamente libera los objetos que no son referenciados.
+ Un objeto puede ser notificado antes de ser eliminado implementando el
+ método
+\family typewriter
+finalize()
+\family default
+, lo que interesa cuando este hace uso de recursos externos.
+ Estructuras de control:
+\end_layout
+
+\begin_layout Itemize
+Sentencias condicionales:
+\family typewriter
+if (
+\emph on
+cond-expr
+\emph default
+)
+\emph on
+then-stmt
+\emph default
+
+\family default
+[
+\family typewriter
+else
+\emph on
+else-stmt
+\family default
+\emph default
+] (
+\family typewriter
+\emph on
+cond-expr
+\family default
+\emph default
+ debe evaluar a booleano);
+\family typewriter
+switch (
+\emph on
+expr
+\emph default
+) {
+\family default
+...
+
+\family typewriter
+ }
+\family default
+ (
+\family typewriter
+\emph on
+expr
+\family default
+\emph default
+ debe evaluar a entero, valor de enumerado o cadena, y es necesario usar
+
+\family typewriter
+break;
+\family default
+ para evitar que la ejecución continúe con el caso siguiente).
+\end_layout
+
+\begin_layout Itemize
+Bucles:
+\family typewriter
+while
+\family default
+,
+\family typewriter
+for
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+Una aplicación OO se organiza como un conjunto de clases relacionadas, siendo
+ una de ellas la
+\series bold
+raíz de la aplicación
+\series default
+, que contiene un método (en Java,
+\family typewriter
+public static void main(String[] args)
+\family default
+) encargado de poner en marcha la aplicación.
+ El flujo de ejecución siempre se encuentra aplicando un método sobre un
+ objeto o ejecutando alguna instrucción imperativa, si bien en una aplicación
+ concurrente puede haber varios flujos de ejecución.
+\end_layout
+
+\begin_layout Standard
+Si una clase tiene muchos atributos de tipo primitivo, suele ser necesario
+ separar la funcionalidad definiendo clases con parte de estos atributos.
+ Se usa el patrón
+\series bold
+experto en información
+\series default
+: asignar una funcionalidad a la clase que tiene la información necesaria
+ para llevarla a cabo.
+\end_layout
+
+\end_body
+\end_document
diff --git a/poo/n3.lyx b/poo/n3.lyx
new file mode 100644
index 0000000..1c193b3
--- /dev/null
+++ b/poo/n3.lyx
@@ -0,0 +1,959 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+La
+\series bold
+herencia
+\series default
+ es un mecanismo para definir y utilizar relaciones conceptuales entre clases
+ como de extensión, especialización y combinación, que permite definir una
+ clase a partir de otra, organizando las clases en una
+\series bold
+jerarquía
+\series default
+ consistente con el sistema de tipos.
+ La
+\series bold
+especialización
+\series default
+ ocurre cuando una clase es un caso especial o un tipo de otra, mientras
+ que la
+\series bold
+generalización
+\series default
+, muy relacionada, ocurre cuando se detectan clases con características
+ en común.
+\end_layout
+
+\begin_layout Standard
+Cuando una clase
+\begin_inset Formula $B$
+\end_inset
+
+
+\series bold
+hereda
+\series default
+ de una clase
+\begin_inset Formula $A$
+\end_inset
+
+, incorpora automáticamente los atributos y métodos de
+\begin_inset Formula $A$
+\end_inset
+
+ (en Java, no incorpora los constructores), pero puede añadir nuevos atributos
+ y métodos y redefinir métodos heredados.
+ Decimos que
+\begin_inset Formula $A$
+\end_inset
+
+ es la
+\series bold
+superclase
+\series default
+ o clase padre de
+\begin_inset Formula $B$
+\end_inset
+
+ y
+\begin_inset Formula $B$
+\end_inset
+
+ es una
+\series bold
+subclase
+\series default
+ o clase hija de
+\begin_inset Formula $A$
+\end_inset
+
+.
+ Si
+\begin_inset Formula $C$
+\end_inset
+
+ hereda a su vez de
+\begin_inset Formula $B$
+\end_inset
+
+, también hereda de
+\begin_inset Formula $A$
+\end_inset
+
+, pero
+\begin_inset Formula $B$
+\end_inset
+
+ es un
+\series bold
+descendiente directo
+\series default
+ y
+\begin_inset Formula $C$
+\end_inset
+
+ es un
+\series bold
+descendiente indirecto
+\series default
+ de
+\begin_inset Formula $A$
+\end_inset
+
+.
+ Decimos que
+\begin_inset Formula $A$
+\end_inset
+
+ y
+\begin_inset Formula $B$
+\end_inset
+
+ son
+\series bold
+ascendientes
+\series default
+ de
+\begin_inset Formula $C$
+\end_inset
+
+.
+ Algunos lenguajes como C++ o Python permiten
+\series bold
+herencia múltiple
+\series default
+, de modo que una clase puede heredar directamente de varias, mientras que
+ otros, como Java o C#, solo permiten
+\series bold
+herencia simple
+\series default
+.
+\end_layout
+
+\begin_layout Standard
+En Java se indica que una clase deriva de otra indicando
+\family typewriter
+extends
+\emph on
+Superclase
+\family default
+\emph default
+ detrás del nombre de la clase en su definición.
+ Los descendientes de una clase no pueden ver sus atributos y métodos privados,
+ sino que se proporciona el nivel de visibilidad
+\family typewriter
+protected
+\family default
+, útil para métodos, que da visibilidad a nivel de paquete y a descendientes
+ de la clase.
+\end_layout
+
+\begin_layout Standard
+La primera sentencia de un constructor debe ser una llamada a un constructor
+ de la clase padre, que se hace con
+\family typewriter
+super(
+\family default
+...
+\family typewriter
+);
+\family default
+ o a otro constructor de la propia clase, y si se omite el compilador inserta
+ una llamada
+\family typewriter
+super();
+\family default
+ al constructor vacío, dando error si este no existe.
+\end_layout
+
+\begin_layout Standard
+El modificador
+\family typewriter
+final
+\family default
+ se puede añadir a un método para impedir que sea redefinido en clases descendie
+ntes, y en una clase para impedir que se pueda heredar de ella.
+\end_layout
+
+\begin_layout Section
+Polimorfismo
+\end_layout
+
+\begin_layout Standard
+Un método es una
+\series bold
+redefinición
+\series default
+ si tiene la misma signatura (nombre, parámetros y tipo de retorno) que
+ un método de la clase padre.
+ En Java se indica con la
+\series bold
+anotación
+\series default
+
+\family typewriter
+@Override
+\family default
+ encima de la definición de la función, que es opcional pero señala un fallo
+ si el método no es realmente una redefinición, útil para detectar errores.
+ Esta puede ser de
+\series bold
+reemplazo
+\series default
+ si se sustituye completamente la implementación o de
+\series bold
+refinamiento
+\series default
+ si simplemente se añade nueva funcionalidad, en cuyo caso la sintaxis
+\family typewriter
+super.
+\emph on
+método
+\emph default
+(
+\family default
+...
+\family typewriter
+)
+\family default
+ sirve para llamar a la versión del padre de un método redefinido.
+\end_layout
+
+\begin_layout Standard
+El
+\series bold
+polimorfismo
+\series default
+ es la capacidad de una entidad de referenciar en tiempo de ejecución a
+ objetos de distintas clases, y en lenguajes como Java significa que toda
+ entidad tiene un
+\series bold
+tipo estático
+\series default
+ (
+\emph on
+te
+\emph default
+), asociado a su declaración, y uno
+\series bold
+dinámico
+\series default
+, que corresponde al objeto al que hace referencia y puede variar.
+ A cada entidad le corresponde un
+\series bold
+conjunto de tipos dinámicos
+\series default
+ (
+\emph on
+ctd
+\emph default
+), el de los posibles tipos dinámicos a los que puede hacer referencia y
+ que viene dado por el conjunto de tipos
+\series bold
+compatibles
+\series default
+ con el tipo estático, es decir, los descendientes de este tipo incluyéndose
+ a sí mismo.
+\end_layout
+
+\begin_layout Standard
+Una asignación polimórfica es válida si el tipo estático de la parte derecha
+ es compatible con el de la parte izquierda.
+ Un paso de parámetros es válido si el tipo estático del parámetro real
+ es compatible con el del parámetro formal.
+ La
+\series bold
+ligadura dinámica
+\series default
+ significa que la versión de un método que se llama al pasar un mensaje
+ es la asociada al tipo dinámico, que puede ser la del tipo estático o haber
+ sido redefinida.
+\end_layout
+
+\begin_layout Standard
+En Java, la sintaxis
+\family typewriter
+(
+\emph on
+Tipo
+\emph default
+)
+\emph on
+variable
+\family default
+\emph default
+ permite hacer un
+\emph on
+casting
+\emph default
+ a uno de los
+\family typewriter
+\emph on
+Tipo
+\family default
+\emph default
+s dinámicos que puede tener la
+\family typewriter
+\emph on
+variable
+\family default
+\emph default
+, permitiendo tratar la variable como si este fuese su tipo estático y pudiendo
+ acceder a los métodos de este, si bien esto dará un error en tiempo de
+ ejecución si el tipo dinámico de la variable no es compatible con el que
+ se especifica al hacer el
+\emph on
+casting
+\emph default
+.
+ La expresión
+\family typewriter
+\emph on
+variable
+\emph default
+ instanceof
+\emph on
+Tipo
+\family default
+\emph default
+ devuelve verdadero si el tipo dinámico de la
+\family typewriter
+\emph on
+variable
+\family default
+\emph default
+ es compatible con el del
+\family typewriter
+\emph on
+Tipo
+\family default
+\emph default
+ y falso en caso contrario.
+\end_layout
+
+\begin_layout Standard
+Al redefinir un método (al que se tenga acceso desde la clase descendiente)
+ se puede cambiar el tipo de retorno a un tipo descendiente (
+\series bold
+regla covariante
+\series default
+) o incrementar su nivel de visibilidad.
+\end_layout
+
+\begin_layout Standard
+Se recomienda situar los atributos y métodos comunes en clases altas de
+ la jerarquía, aplicando herencia si tiene sentido decir que todos los objetos
+ de una clase
+\begin_inset Quotes fld
+\end_inset
+
+lo son
+\begin_inset Quotes frd
+\end_inset
+
+ también de otra, usando polimorfismo y ligadura dinámica para evitar análisis
+ de casos.
+ No debe usarse herencia si un método heredado no tiene sentido en la clase
+ hija, y no se debe cambiar la semántica de un método en la clase hija.
+\end_layout
+
+\begin_layout Section
+Clases abstractas
+\end_layout
+
+\begin_layout Standard
+Una
+\series bold
+clase abstracta
+\series default
+ es una que no se puede instanciar, no puede ser
+\family typewriter
+final
+\family default
+ y permite definir
+\series bold
+métodos abstractos
+\series default
+, sin código, con
+\family typewriter
+;
+\family default
+ en vez de la implementación (
+\family typewriter
+{
+\family default
+...
+\family typewriter
+}
+\family default
+), y que no pueden ser
+\family typewriter
+static
+\family default
+ ni
+\family typewriter
+final
+\family default
+.
+ Las clases y métodos abstractos se deben indicar con el modificador
+\family typewriter
+abstract
+\family default
+, y una clase
+\series bold
+efectiva
+\series default
+ (no abstracta) debe implementar todos los métodos abstractos que hereda.
+ Una clase abstracta puede implementar constructores, pero estos sólo son
+ útiles para su uso por las clases hijas, por lo que se declaran
+\family typewriter
+protected
+\family default
+.
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+método plantilla
+\series default
+ es un método ordinario de una clase abstracta que usa uno o más métodos
+ abstractos, normalmente
+\family typewriter
+protected
+\family default
+, con el fin de evitar repetición de código en las clases descendientes.
+ La generalización por clases abstractas se aplica muchas veces tras la
+ implementación (
+\series bold
+refactorización
+\series default
+).
+\end_layout
+
+\begin_layout Section
+Interfaces
+\end_layout
+
+\begin_layout Standard
+Una
+\series bold
+interfaz
+\series default
+ es la definición de un tipo sin la implementación, como una clase totalmente
+ abstracta, y se definen con [
+\family typewriter
+\emph on
+visibilidad
+\family default
+\emph default
+] [
+\family typewriter
+\emph on
+mods
+\family default
+\emph default
+]
+\family typewriter
+ interface
+\emph on
+Nombre
+\family default
+\emph default
+ [
+\family typewriter
+extends
+\emph on
+Interfaz1
+\emph default
+,
+\family default
+...]
+\family typewriter
+ {
+\family default
+...
+
+\family typewriter
+ }
+\family default
+.
+ Las interfaces no tienen constructores, sus métodos son
+\family typewriter
+public abstract
+\family default
+ por defecto (aunque puede haber métodos no abstractos) y sus atributos
+ son
+\family typewriter
+public static final
+\family default
+, y no es necesario indicar estos modificadores.
+
+\end_layout
+
+\begin_layout Standard
+Una interfaz puede heredar de varias interfaces con
+\family typewriter
+extends
+\family default
+.
+ Una clase puede heredar de varias interfaces (se dice que las
+\series bold
+implementa
+\series default
+), y se indica con
+\family typewriter
+implements
+\emph on
+Interfaz1
+\emph default
+,
+\family default
+....
+\end_layout
+
+\begin_layout Standard
+Las interfaces pueden incluir
+\series bold
+métodos por defecto
+\series default
+, con el modificador
+\family typewriter
+default
+\family default
+, que no son abstractos.
+ Una clase puede implementar varias interfaces con distintos métodos por
+ defecto con la misma signatura, en cuyo caso para que una clase compile
+ debe reimplementar este método.
+ La sintaxis
+\family typewriter
+\emph on
+Interfaz
+\emph default
+.super.
+\emph on
+método
+\emph default
+(
+\family default
+.\SpecialChar endofsentence
+.
+\family typewriter
+)
+\family default
+ permite llamar al método por defecto de una interfaz
+\begin_inset Quotes fld
+\end_inset
+
+padre
+\begin_inset Quotes frd
+\end_inset
+
+ cuando hay ambigüedad.
+ Las interfaces también pueden incluir métodos
+\family typewriter
+static
+\family default
+.
+\end_layout
+
+\begin_layout Section
+La clase
+\family typewriter
+Object
+\end_layout
+
+\begin_layout Standard
+Cuando una clase no hereda de ninguna, realmente hereda de
+\family typewriter
+Object
+\family default
+.
+ Métodos de
+\family typewriter
+Object
+\family default
+:
+\end_layout
+
+\begin_layout Enumerate
+
+\family typewriter
+public final Class
+\series bold
+getClass
+\series default
+()
+\family default
+.
+ Devuelve la clase de la instancia actual.
+ Se recomienda usar
+\family typewriter
+instanceof
+\family default
+ en vez de esto en caso de duda para comprobar compatibilidad.
+\end_layout
+
+\begin_layout Enumerate
+
+\family typewriter
+public boolean
+\series bold
+equals
+\series default
+(Object)
+\family default
+.
+ Indica si un objeto es igual a otro.
+\begin_inset Newline newline
+\end_inset
+
+Tipos de igualdad:
+\series bold
+superficial
+\series default
+, que compara la igualdad de los campos primitivos y el
+\emph on
+oid
+\emph default
+ de las referencias;
+\series bold
+profunda
+\series default
+, que usa
+\family typewriter
+equals
+\family default
+ recursivamente, o adaptada a las necesidades de la aplicación.
+ Por defecto la comparación es superficial.
+\begin_inset Newline newline
+\end_inset
+
+Es necesario redefinir el método en las clases donde necesitemos igualdad,
+ pero hay que elegir la semántica de igualdad más adecuada.
+ El método heredado en una subclase es correcto si no tiene nuevos atributos
+ o estos no se tienen en cuenta en la igualdad, y en caso contrario, salvo
+ que la versión heredada sea la de
+\family typewriter
+Object
+\family default
+, hay que reutilizarla.
+\end_layout
+
+\begin_layout Enumerate
+
+\family typewriter
+public int
+\series bold
+hashCode
+\series default
+()
+\family default
+.
+ Devuelve el resultado de aplicar alguna función
+\emph on
+hash
+\emph default
+ al objeto; usado en tablas de dispersión.
+ Si
+\family typewriter
+\emph on
+o1
+\emph default
+.equals(
+\emph on
+o2
+\emph default
+)
+\family default
+, debe ser
+\family typewriter
+\emph on
+o1
+\emph default
+.hashCode() ==
+\emph on
+o2
+\emph default
+.hashCode()
+\family default
+.
+ Por defecto se compara la dirección de memoria del objeto.
+ Si se redefine el método
+\family typewriter
+equals
+\family default
+ también debe redefinirse
+\family typewriter
+hashCode
+\family default
+.
+\end_layout
+
+\begin_layout Enumerate
+
+\family typewriter
+public String
+\series bold
+toString
+\series default
+()
+\family default
+.
+ Devuelve una representación textual de un objeto.
+ Por defecto se imprime el nombre de la clase y el
+\emph on
+oid
+\emph default
+.
+ Se recomienda usar
+\family typewriter
+getClass().getName()
+\family default
+, que devuelve la clase de la instancia actual, permitiendo que la implementació
+n sea he
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+re
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+da
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+ble.
+ Debe ser redefinido en una subclase si añade nuevos atributos.
+\end_layout
+
+\begin_layout Enumerate
+
+\family typewriter
+protected Object
+\series bold
+clone
+\series default
+() throws CloneNotSupportedException
+\family default
+.
+ Devuelve una
+\begin_inset Newline newline
+\end_inset
+
+copia del objeto.
+\begin_inset Newline newline
+\end_inset
+
+Tipos de copia:
+\series bold
+superficial
+\series default
+, que copia los campos primitivos y los
+\emph on
+oid
+\emph default
+;
+\series bold
+profunda
+\series default
+, que aplica
+\family typewriter
+clone
+\family default
+ recursivamente, y adaptada a las necesidades de la aplicación.
+ Por defecto la copia es superficial.
+\begin_inset Newline newline
+\end_inset
+
+Al redefinir el método, hay que cambiar la visibilidad a
+\family typewriter
+public
+\family default
+, cambiar el tipo de retorno al tipo propio y ocultar la excepción (el
+\family typewriter
+throws
+\family default
+...).
+ Esta excepción se lanza si la clase del objeto no implementa la interfaz
+
+\family typewriter
+Cloneable
+\family default
+, que no implementa ningún método pero marca que los objetos de una clase
+ (y todas las clases descendientes) pueden ser clonadas.
+\begin_inset Newline newline
+\end_inset
+
+Al redefinir este método, para que funcione con la herencia, es conveniente
+ llamar a la versión heredada y, si el tipo padre no es
+\family typewriter
+Cloneable
+\family default
+, manejar la excepción mediante
+\family typewriter
+try {
+\family default
+(código que llame a
+\family typewriter
+super.clone()
+\family default
+)
+\family typewriter
+ } catch (CloneNotSupportedException e) {
+\family default
+(manejo del error)
+\family typewriter
+ }
+\family default
+ de modo que si salta la excepción se salte directamente al código de manejo
+ del error, lo que no debería ocurrir.
+\end_layout
+
+\begin_layout Standard
+Además, para cada tipo primitivo existe una clase (
+\family typewriter
+Integer
+\family default
+,
+\family typewriter
+Float
+\family default
+,
+\family typewriter
+Double
+\family default
+,
+\family typewriter
+Character
+\family default
+,
+\family typewriter
+Boolean
+\family default
+, etc.) correspondiente que actúa como
+\series bold
+objeto envoltorio
+\series default
+ y hereda de
+\family typewriter
+Object
+\family default
+.
+ Java permite convertir automáticamente entre el tipo primitivo y el envoltorio
+ (
+\series bold
+\emph on
+autoboxing
+\series default
+\emph default
+).
+\end_layout
+
+\end_body
+\end_document
diff --git a/poo/n4.lyx b/poo/n4.lyx
new file mode 100644
index 0000000..dce5506
--- /dev/null
+++ b/poo/n4.lyx
@@ -0,0 +1,3827 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+Una
+\series bold
+clase genérica
+\series default
+ es aquella que en su declaración tiene uno o varios tipos variables (
+\series bold
+parámetros
+\series default
+).
+ Se indican como
+\family typewriter
+\emph on
+NombreClase
+\emph default
+<
+\emph on
+T
+\begin_inset Formula $_{1}$
+\end_inset
+
+
+\family default
+\emph default
+ [
+\family typewriter
+extends
+\emph on
+K
+\emph default
+
+\begin_inset Formula $_{11}$
+\end_inset
+
+[&
+\family default
+...]][
+\family typewriter
+,
+\family default
+...]
+\family typewriter
+>
+\family default
+, y dentro de la clase se pueden usar los tipos
+\family typewriter
+T
+\family default
+
+\begin_inset Formula $_{i}$
+\end_inset
+
+ como otros tipos cualesquiera, sobre los que se pueden usar los métodos
+ de los tipos no primitivos
+\family typewriter
+K
+\begin_inset Formula $_{ij}$
+\end_inset
+
+
+\family default
+, o de
+\family typewriter
+Object
+\family default
+ si no se especifican, salvo constructores.
+ El uso de tipos
+\family typewriter
+K
+\begin_inset Formula $_{ij}$
+\end_inset
+
+
+\family default
+ permite
+\series bold
+genericidad restringida
+\series default
+.
+\end_layout
+
+\begin_layout Standard
+También existen las interfaces genéricas, con la misma sintaxis.
+ Una clase genérica puede heredar de otra e implementar interfaces genéricas.
+ En la herencia se establecen los parámetros de la clase padre e interfaces
+ implementadas, que pueden ser parámetros de la propia clase hija o tipos
+ concretos.
+\end_layout
+
+\begin_layout Standard
+La parametrización de una clase genérica se realiza en la declaración de
+ una variable (incluyendo parámetro, etc.) y en la construcción de objetos,
+ con la forma
+\family typewriter
+\emph on
+NombreClase
+\emph default
+<
+\emph on
+T
+\begin_inset Formula $_{1}$
+\end_inset
+
+
+\emph default
+,
+\family default
+...
+\family typewriter
+>
+\family default
+, donde los
+\family typewriter
+T
+\begin_inset Formula $_{i}$
+\end_inset
+
+
+\family default
+ son los tipos parámetros y deben ser compatibles con todos los
+\family typewriter
+K
+\begin_inset Formula $_{ij}$
+\end_inset
+
+
+\family default
+, si bien en la construcción se pueden omitir los parámetros con la sintaxis
+
+\family typewriter
+\emph on
+NombreClase
+\emph default
+<>
+\family default
+.
+ En la declaración de variables los
+\family typewriter
+\emph on
+T
+\begin_inset Formula $_{i}$
+\end_inset
+
+
+\family default
+\emph default
+ se pueden cambiar por
+\family typewriter
+? extends
+\emph on
+E
+\begin_inset Formula $_{i}$
+\end_inset
+
+
+\family default
+\emph default
+ (
+\series bold
+tipo comodín
+\series default
+) para indicar que se permite cualquier tipo compatible con
+\family typewriter
+\emph on
+E
+\begin_inset Formula $_{i}$
+\end_inset
+
+
+\family default
+\emph default
+, o
+\family typewriter
+? super
+\emph on
+S
+\begin_inset Formula $_{i}$
+\end_inset
+
+
+\family default
+\emph default
+ para cualquier tipo con el que
+\family typewriter
+\emph on
+S
+\begin_inset Formula $_{i}$
+\end_inset
+
+
+\family default
+\emph default
+ sea compatible.
+\end_layout
+
+\begin_layout Standard
+También podemos declarar un tipo genérico sin especificar
+\begin_inset Quotes cld
+\end_inset
+
+
+\family typewriter
+<
+\family default
+...
+\family typewriter
+>
+\family default
+
+\begin_inset Quotes crd
+\end_inset
+
+ con los parámetros de tipo (
+\series bold
+tipo puro
+\series default
+), en cuyo caso equivale a parametrizarlo a
+\family typewriter
+Object
+\family default
+ (salvo genericidad restringida), si bien esto no es recomendable y el compilado
+r lo marca como un aviso.
+ La información de los tipos parámetro se pierde en tiempo de ejecución,
+ pues no se almacenan en el código compilado, por lo que solo podemos comprobar
+ si el tipo dinámico de una variable es o no del tipo puro (o compatible).
+ El compilador marca una conversión a un tipo genérico como un
+\emph on
+warning
+\emph default
+, pues no se puede comprobar el tipo utilizado en la parametrización, pero
+ podemos suprimirlo escribiendo la línea
+\family typewriter
+@SuppressWarnings("unchecked")
+\family default
+ encima de la sentencia que realiza la conversión.
+\end_layout
+
+\begin_layout Standard
+Un
+\series bold
+método genérico
+\series default
+ es el que en su declaración acepta uno o varios parámetros de tipo, independien
+tes de los de la clase (si los hay), que pueden aparecer en la signatura
+ y el cuerpo del método y que se indican poniendo
+\family typewriter
+<
+\family default
+...
+\family typewriter
+>
+\family default
+ (sintaxis como en las clases genéricas) antes del tipo de retorno (o de
+
+\family typewriter
+void
+\family default
+).
+ Se llaman como un método normal, y los tipos se infieren a partir de sus
+ parámetros o la variable a la que se asigna el resultado.
+\end_layout
+
+\begin_layout Section
+Ordenación
+\end_layout
+
+\begin_layout Standard
+Las clases e interfaces que se definen a continuación están todas en
+\family typewriter
+java.util
+\family default
+, salvo si se indica lo contrario.
+ Se omite cualquier declaración, o parte de declaración, que no es relevante.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+java.lang.Comparable<T>
+\family default
+ Una clase es
+\series bold
+comparable
+\series default
+ si implementa esta interfaz, y si dice que tiene un
+\series bold
+orden natural
+\series default
+.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+boolean equals(Object)
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+int
+\begin_inset space ~
+\end_inset
+
+compareTo(T)
+\family default
+ Devuelve un entero positivo si el objeto receptor es mayor, negativo si
+ es menor y 0 si es igual al parámetro.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+@FunctionalInterface
+\begin_inset space ~
+\end_inset
+
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+Comparator<T>
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+int
+\begin_inset space ~
+\end_inset
+
+compare(T,
+\begin_inset space ~
+\end_inset
+
+T)
+\family default
+ Devuelve un entero positivo si el primer parámetro es mayor, ne
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+ga
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+ti
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+vo si es menor y 0 si es igual al segundo.
+\end_layout
+
+\end_deeper
+\begin_layout Section
+Iteradores
+\end_layout
+
+\begin_layout Standard
+Permiten recorrer una secuencia de elementos.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+Iterator<E>
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+boolean
+\begin_inset space ~
+\end_inset
+
+hasNext()
+\family default
+\series default
+ Indica si quedan elementos en la iteración.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+E
+\begin_inset space ~
+\end_inset
+
+next()
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws NoSuchElementException
+\end_layout
+
+\end_inset
+
+Devuelve (y
+\begin_inset Quotes fld
+\end_inset
+
+consume
+\begin_inset Quotes frd
+\end_inset
+
+) el siguiente elemento en la iteración.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+default
+\begin_inset space ~
+\end_inset
+
+void
+\begin_inset space ~
+\end_inset
+
+remove()
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, IllegalStateException
+\end_layout
+
+\end_inset
+
+Elimina de la colección el último elemento devuelto por el ite
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+ra
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+dor, y sólo puede ser llamado una vez después de cada llamada a
+\family typewriter
+next()
+\family default
+.
+ Si la colección se modifica mientras el iterador está en progreso, su comportam
+iento es no especificado.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+java.lang.Iterable<T>
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+Iterator<T>
+\begin_inset space ~
+\end_inset
+
+iterator()
+\family default
+ Devuelve un iterador sobre elementos de tipo
+\family typewriter
+T
+\family default
+.
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+Dado un objeto
+\family typewriter
+\emph on
+c
+\family default
+\emph default
+ que implementa la interfaz
+\family typewriter
+Iterable<
+\emph on
+T
+\emph default
+>
+\family default
+, la sintaxis
+\family typewriter
+for (
+\emph on
+T
+\emph default
+
+\emph on
+e
+\emph default
+ :
+\emph on
+c
+\emph default
+)
+\emph on
+stmt
+\family default
+\emph default
+ equivale a:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+Iterator _it =
+\emph on
+c
+\emph default
+.iterator();
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+Extra indentation is because this'll typically be inside a method inside
+ a class, not (just) for centering.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+while (_it.hasNext()) {
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+
+\emph on
+T e
+\emph default
+ = _it.next();
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+
+\emph on
+stmt
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+
+\begin_inset space \hspace*{}
+\length 4em
+\end_inset
+
+}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Esto también se puede hacer si
+\family typewriter
+\emph on
+c
+\family default
+\emph default
+ es de tipo
+\family typewriter
+\emph on
+T
+\emph default
+[]
+\family default
+, en cuyo caso se hace recorrido secuencial.
+\end_layout
+
+\begin_layout Section
+Colecciones
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+Collection<E>
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+Iterable<E>
+\family default
+\series default
+ Colección de elementos.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+boolean containsAll(Collection<?>) throws ClassCastException, NullPointerExcepti
+on
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+boolean equals(Object)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+int hashCode()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+boolean removeAll(Collection<?>) throws UnsupportedOperationException, ClassCast
+Exception, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+boolean retainAll(Collection<?>) throws UnsupportedOperationException, ClassCast
+Exception, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Object[] toArray()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+<T> T[] toArray(T[]) throws ArrayStoreException, NullPointerException
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+int
+\begin_inset space ~
+\end_inset
+
+size()
+\family default
+\series default
+ Devuelve el número de elementos en la colección, si cabe en un entero.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+ Si contiene más que
+\family typewriter
+Integer.MAX_VALUE
+\family default
+, devuelve
+\family typewriter
+Integer.MAX_VALUE
+\family default
+.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+boolean
+\begin_inset space ~
+\end_inset
+
+isEmpty()
+\family default
+\series default
+ Indica si la colección está vacía.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+boolean
+\begin_inset space ~
+\end_inset
+
+contains(Object)
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws ClassCastException, NullPointerException
+\end_layout
+
+\end_inset
+
+Indica si la colección contiene el elemento dado.
+ Es un error común pasar un elemento de tipo no compatible con
+\family typewriter
+E
+\family default
+.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+boolean
+\begin_inset space ~
+\end_inset
+
+add(E)
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, ClassCastException, NullPointerException,
+ IllegalArgumentException, IllegalStateException
+\end_layout
+
+\end_inset
+
+Se asegura de que la colección contenga el elemento especificado, indicando
+ si la colección ha cambiado como resultado de la llamada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+boolean
+\begin_inset space ~
+\end_inset
+
+remove(Object)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws ClassCastException, NullPointerException
+\end_layout
+
+\end_inset
+
+Elimina una única instancia del elemento especificado de la colección, si
+ esta presente, indicando si la colección ha cambiado como resultado de
+ la llamada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+boolean
+\begin_inset space ~
+\end_inset
+
+addAll(Collection<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+E>)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, ClassCastException, NullPointerException,
+ IllegalArgumentException, IllegalStateException
+\end_layout
+
+\end_inset
+
+Añade a esta colección todos los elementos de otra, indicando si ha cambiado
+ como resultado de la llamada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+boolean
+\begin_inset space ~
+\end_inset
+
+removeAll(Collection<?>)
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, ClassCastException, NullPointerException
+\end_layout
+
+\end_inset
+
+Elimina de essta colección todos los elementos en común con otra, indicando
+ si ha cambiado como resultado de la llamada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+void
+\begin_inset space ~
+\end_inset
+
+clear()
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException
+\end_layout
+
+\end_inset
+
+Elimina todos los elementos de la colección, que quedará vacía.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+default
+\begin_inset space ~
+\end_inset
+
+Stream<E>
+\begin_inset space ~
+\end_inset
+
+stream()
+\family default
+ Devuelve un flujo secuencial con esta colección como fuente.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+abstract
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+AbstractCollection<E>
+\begin_inset space ~
+\end_inset
+
+implements
+\begin_inset space ~
+\end_inset
+
+Collection<E>
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+public abstract Iterator<E> iterator()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+public abstract int size()
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+String
+\begin_inset space ~
+\end_inset
+
+toString()
+\family default
+ Devuelve una representación como cadena de caracteres de la colección como
+ una lista de sus elementos.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+List<E>
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+Collection<E>
+\family default
+\series default
+ Lista, colección ordenada o secuencia.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+int indexOf(Object) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+int lastIndexOf(Object) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+ListIterator<E> listIterator()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+ListIterator<E> listIterator(int)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+List<E> subList(int, int)
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+boolean
+\begin_inset space ~
+\end_inset
+
+add(E)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, ClassCastException, NullPointerException,
+ IllegalArgumentException
+\end_layout
+
+\end_inset
+
+Añade un elemento al final de la lista y devuelve
+\family typewriter
+true
+\family default
+.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+default
+\begin_inset space ~
+\end_inset
+
+void
+\begin_inset space ~
+\end_inset
+
+sort(Comparator<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+E>)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws ClassCastException, UnsupportedOperationException, IllegalArgumentExcepti
+on
+\end_layout
+
+\end_inset
+
+Ordena una lista de acuerdo a un comparador.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+boolean
+\begin_inset space ~
+\end_inset
+
+equals(Object)
+\family default
+ Indica si el otro objeto es una lista del mismo tamaño y con los mismos
+ elementos en las mismas posiciones.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+E
+\begin_inset space ~
+\end_inset
+
+get(int)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws IndexOutOfBoundsException
+\end_layout
+
+\end_inset
+
+Devuelve el elemento en una determinada posición en el rango
+\begin_inset Formula $[0,\mathtt{size()})$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+E
+\begin_inset space ~
+\end_inset
+
+set(int,
+\begin_inset space ~
+\end_inset
+
+E)
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, ClassCastException, NullPointerException,
+ IllegalArgumentException, IndexOutOfBoundsException
+\end_layout
+
+\end_inset
+
+Sustituye el elemento en la posición dada, en el rango
+\begin_inset Formula $[0,\mathtt{size()})$
+\end_inset
+
+, por el elemento dado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+void
+\begin_inset space ~
+\end_inset
+
+add(int,
+\begin_inset space ~
+\end_inset
+
+E)
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, ClassCastException, NullPointerException,
+ IllegalArgumentException, IndexOutOfBoundsException
+\end_layout
+
+\end_inset
+
+Inserta el elemento dado en la posición dada, en el rango
+\begin_inset Formula $[0,\mathtt{size()}]$
+\end_inset
+
+, moviendo todos los elementos posteriores una posición a la derecha.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+E
+\begin_inset space ~
+\end_inset
+
+remove(int)
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, IndexOutOfBoundsException
+\end_layout
+
+\end_inset
+
+Elimina el elemento en la posición especificada, en el rango
+\begin_inset Formula $[0,\mathtt{size()})$
+\end_inset
+
+, moviendo todos los elementos posteriores una posición a la izquierda.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+\series bold
+public abstract class AbstractList<E> extends AbstractCollection<E> implements
+ List<E>
+\end_layout
+
+\end_inset
+
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+abstract E get(int)
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+abstract
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+AbstractSequentialList<E>
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+AbstractList<E>
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+abstract ListIterator<E> listIterator(int)
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+\series bold
+public class LinkedList<E> extends AbstractSequentialList<E> implements
+ List<E>, Cloneable
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+, Serializable
+\end_layout
+
+\end_inset
+
+Lista doblemente enlazada, con la que podemos gestionar pilas y colas.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+LinkedList()
+\family default
+\series default
+ Construye una lista vacía.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+LinkedList(Collection<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+E>)
+\family default
+\series default
+ Construye una lista con los elementos de la colección dada, en el orden
+ en que los devuelve el iterador.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+E
+\begin_inset space ~
+\end_inset
+
+getFirst()
+\begin_inset space ~
+\end_inset
+
+throws
+\begin_inset space ~
+\end_inset
+
+NoSuchElementException
+\family default
+ Devuelve el primer elemento.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+E
+\begin_inset space ~
+\end_inset
+
+getLast()
+\begin_inset space ~
+\end_inset
+
+throws
+\begin_inset space ~
+\end_inset
+
+NoSuchElementException
+\family default
+ Devuelve el último elemento.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+E
+\begin_inset space ~
+\end_inset
+
+removeFirst()
+\series default
+
+\begin_inset space ~
+\end_inset
+
+throws
+\begin_inset space ~
+\end_inset
+
+NoSuchElementException
+\family default
+ Elimina y devuelve el primer elemento.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+E
+\begin_inset space ~
+\end_inset
+
+removeLast()
+\begin_inset space ~
+\end_inset
+
+throws
+\begin_inset space ~
+\end_inset
+
+NoSuchElementException
+\family default
+Elimina y devuelve el último elemento.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+void
+\begin_inset space ~
+\end_inset
+
+addFirst(E)
+\family default
+\series default
+ Inserta un elemento al principio.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+void
+\begin_inset space ~
+\end_inset
+
+addLast(E)
+\family default
+ Inserta un elemento al final.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+Object
+\begin_inset space ~
+\end_inset
+
+clone()
+\family default
+\series default
+ Devuelve una copia superficial (no se copian los elementos).
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+ArrayList<E>
+\begin_inset space ~
+\end_inset
+
+expands
+\begin_inset space ~
+\end_inset
+
+AbstractList<E>
+\begin_inset space ~
+\end_inset
+
+implements
+\begin_inset space ~
+\end_inset
+
+List<E>,
+\begin_inset space ~
+\end_inset
+
+Cloneable
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+, RandomAccess, Serializable
+\end_layout
+
+\end_inset
+
+Lista contigua redimensionable.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+ArrayList()
+\family default
+\series default
+ Construye una lista vacía.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+ArrayList(Collection<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+E>)
+\family default
+\series default
+ Construye una lista con los elementos de la colección dada, en el orden
+ en que los devuelve el iterador.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+Object
+\begin_inset space ~
+\end_inset
+
+clone()
+\family default
+\series default
+ Devuelve una copia superficial (no se copian los elementos).
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+Set<E>
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+Collection<E>
+\family default
+\series default
+ Conjunto o colección sin elementos duplicados.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+boolean
+\begin_inset space ~
+\end_inset
+
+add(E)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, ClassCastException, NullPointerException,
+ IllegalArgumentException
+\end_layout
+
+\end_inset
+
+Añade un elemento si no estaba ya presente, indicando si se ha añadido (si
+ no estaba ya presente).
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+boolean
+\begin_inset space ~
+\end_inset
+
+equals(Object)
+\family default
+\series default
+ Indica si el objeto dado es un conjunto de igual longitud que este y todos
+ los miembros del conjunto dado están contenidos en este (o, equivalentemente,
+ todos los de este están en el otro).
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+public abstract class AbstractSet<E> extends AbstractCollection<E> implements
+ Set<E>
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+HashSet<E>
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+AbstractSet<E>
+\begin_inset space ~
+\end_inset
+
+implements
+\begin_inset space ~
+\end_inset
+
+Set<E>,
+\begin_inset space ~
+\end_inset
+
+Cloneable
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+, Serializable
+\end_layout
+
+\end_inset
+
+Conjunto implementado por tabla de dispersión.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+HashSet()
+\family default
+\series default
+ Construye un conjunto vacío.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+HashSet(Collection<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+E>)
+\family default
+\series default
+ Construye un conjunto con los elementos de la colección dada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+Object
+\begin_inset space ~
+\end_inset
+
+clone()
+\family default
+\series default
+ Devuelve una copia superficial (no se copian los elementos).
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+SortedSet<E>
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+Set<E>
+\family default
+ Conjunto totalmente ordenado, por el orden natural de
+\family typewriter
+E
+\family default
+ o por un
+\family typewriter
+Comparator<? super E>
+\family default
+.
+ El iterador devuelve los elementos en orden ascendente.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+Comparator<? super E> comparator()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+SortedSet<E> subSet(E, E)
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+SortedSet<E>
+\begin_inset space ~
+\end_inset
+
+headSet(E)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws ClassCastException, NullPointerException, IllegalArgumentException
+\end_layout
+
+\end_inset
+
+Devuelve una vista de los elementos estrictamente menores que el dado, y
+ que depende del original.
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+Y que lanzará un
+\family typewriter
+IllegalArgumentException
+\family default
+ si se intenta insertar un elemento fuera del rango.
+\end_layout
+
+\end_inset
+
+Una vista es un objeto que permite acceder a otro con una interfaz algo
+ distinta.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+SortedSet<E>
+\begin_inset space ~
+\end_inset
+
+tailSet(E)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws ClassCastException, NullPointerException, IllegalArgumentException
+\end_layout
+
+\end_inset
+
+Devuelve una vista de los elementos estrictamente mayores que el dado, y
+ que depende del original.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+Y que lanzará un
+\family typewriter
+IllegalArgumentException
+\family default
+ si se intenta insertar un elemento fuera del rango.
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+E
+\begin_inset space ~
+\end_inset
+
+first()
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws NoSuchElementException
+\end_layout
+
+\end_inset
+
+Devuelve el menor elemento del conjunto.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+E
+\begin_inset space ~
+\end_inset
+
+last()
+\family default
+\series bold
+
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws NoSuchElementException
+\end_layout
+
+\end_inset
+
+Devuelve el mayor elemento del conjunto.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+NavigableSet<E>
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+SortedSet<E>
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+E ceiling(E) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Iterator<E> descendingIterator()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+NavigableSet<E> descendingSet()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+E floor(E) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+NavigableSet<E> headSet(E, boolean) throws ClassCastException, NullPointerExcept
+ion, IllegalArgumentException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+E higher(E) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+E lower(E) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+E pollFirst()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+E pollLast()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+E subset(E, boolean, E, boolean) throws ClassCastException, NullPointerException
+, IllegalArgumentException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+E tailSet(E, boolean) throws ClassCastException, NullPointerException, IllegalAr
+gumentException
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+\series bold
+public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>,
+ Cloneable
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+, Serializable
+\end_layout
+
+\end_inset
+
+ Conjunto implementado por árbol rojo-negro.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+TreeSet()
+\family default
+\series default
+ Construye un conjunto vacío.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+TreeSet(Collection<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+E>)
+\family default
+\series default
+ Construye un conjunto con los elementos de la colección dada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+TreeSet(Comparator<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+E>)
+\family default
+\series default
+ Construye un conjunto vacío con el comparador dado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+Object
+\begin_inset space ~
+\end_inset
+
+clone()
+\family default
+\series default
+ Devuelve una copia superficial (no se copian los elementos).
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+Collections
+\family default
+ Utilidades estáticas para colecciones.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+<T
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+Comparable<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+T>>
+\begin_inset space ~
+\end_inset
+
+void
+\begin_inset space ~
+\end_inset
+
+sort(List<T>)
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+ Ordena una lista según el orden natural de sus elementos.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+<T>
+\begin_inset space ~
+\end_inset
+
+void
+\begin_inset space ~
+\end_inset
+
+sort(List<T>,
+\begin_inset space ~
+\end_inset
+
+Comparator<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+T>)
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+ Ordena una lista según un comparador.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+@SafeVarargs
+\begin_inset space ~
+\end_inset
+
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+<T>
+\begin_inset space ~
+\end_inset
+
+boolean
+\begin_inset space ~
+\end_inset
+
+addAll(Collection<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+T>,
+\begin_inset space ~
+\end_inset
+
+T...)
+\family default
+ Añade todos los elementos a la colección dada, indicando si la colección
+ ha cambiado como resultado de la llamada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+<T>
+\begin_inset space ~
+\end_inset
+
+Set<T>
+\begin_inset space ~
+\end_inset
+
+unmodifiableSet(Set<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+T>)
+\family default
+\series default
+ Devuelve una vista no modificable del conjunto dado.
+ Para dar acceso de solo lectura a un conjunto interno a una clase sin necesidad
+ de hacer una copia.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+<T>
+\begin_inset space ~
+\end_inset
+
+List<T>
+\begin_inset space ~
+\end_inset
+
+unmodifiableList(List<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+T>)
+\family default
+ Devuelve una vista no modificable de la lista dada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+<K,V>
+\begin_inset space ~
+\end_inset
+
+Map<K,V>
+\begin_inset space ~
+\end_inset
+
+unmodifiableMap(Map<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+K,?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+V>)
+\family default
+\series default
+ Devuelve una copia no modificable del mapa dado.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+Arrays
+\family default
+ Utilidades estáticas para
+\emph on
+arrays
+\emph default
+.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+@SafeVarargs
+\begin_inset space ~
+\end_inset
+
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+<T>
+\begin_inset space ~
+\end_inset
+
+List<T>
+\begin_inset space ~
+\end_inset
+
+asList(T...)
+\family default
+ Devuelve una vista de un
+\emph on
+array
+\emph default
+ como lista de tamaño fijo.
+\end_layout
+
+\end_deeper
+\begin_layout Section
+Mapas
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+Map<K,V>
+\family default
+ Mapa o diccionario clave-valor.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+static interface Map.Entry<K,V>
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+boolean equals(Object)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+K getKey() throws IllegalStateException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+V getValue() throws IllegalStateException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+int hashCode()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+V setValue(V) throws UnsupportedOperationException, ClassCastException,
+ NullPointerException, IllegalArgumentException, IllegalStateException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Set<Map.Entry<K,V>> entrySet()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+boolean equals(Object)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+int hashCode()
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+int
+\begin_inset space ~
+\end_inset
+
+size()
+\family default
+ Devuelve el total de asociaciones clave-valor.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+boolean
+\begin_inset space ~
+\end_inset
+
+isEmpty()
+\family default
+\series default
+ Indica si el mapa es vacío.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+boolean
+\begin_inset space ~
+\end_inset
+
+containsKey(Object)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws ClassCastException, NullPointerException
+\end_layout
+
+\end_inset
+
+Indica si el mapa contiene una asociación para la clave dada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+boolean
+\begin_inset space ~
+\end_inset
+
+containsValue(Object)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws ClassCastException, NullPointerException
+\end_layout
+
+\end_inset
+
+Indica si el mapa contiene una asociación con el valor dado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+V
+\begin_inset space ~
+\end_inset
+
+get(Object)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws ClassCastException, NullPointerException
+\end_layout
+
+\end_inset
+
+Obtiene el valor asociado a la clave dada, o
+\family typewriter
+null
+\family default
+ si el mapa no tiene asociación para la clave.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+V
+\begin_inset space ~
+\end_inset
+
+put(K,
+\begin_inset space ~
+\end_inset
+
+V)
+\family default
+\series medium
+
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, ClassCastException, NullPointerException,
+ IllegalArgumentException
+\end_layout
+
+\end_inset
+
+
+\series medium
+Asocia el valor dado a la clave dada, sustituyendo la asociación anterior
+ para esta clave de haber alguna.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+V
+\begin_inset space ~
+\end_inset
+
+remove(Object)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, ClassCastException, NullPointerException
+\end_layout
+
+\end_inset
+
+Elimina la asociación para la clave dada, si existe.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+void
+\begin_inset space ~
+\end_inset
+
+putAll(Map<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+K,
+\begin_inset space ~
+\end_inset
+
+?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+V>)
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException, ClassCastException, NullPointerException,
+ IllegalArgumentException
+\end_layout
+
+\end_inset
+
+Copia todas las asociaciones del mapa dado al objeto receptor.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+void
+\begin_inset space ~
+\end_inset
+
+clear()
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws UnsupportedOperationException
+\end_layout
+
+\end_inset
+
+Elimina todas las asociaciones del mapa, dejándolo vacío.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+Set<K>
+\begin_inset space ~
+\end_inset
+
+keySet()
+\family default
+ Devuelve una vista de las claves del mapa, que depende de este.
+ Si el mapa se modifica mientras se itera la vista, el comportamiento es
+ no especificado.
+ Eliminar un elemento del conjunto elimina la asociación correspondiente
+ del mapa.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+Collection<V>
+\begin_inset space ~
+\end_inset
+
+values()
+\family default
+ Devuelve una vista de los valores del mapa, que depende de este.
+ Si el mapa se modifica mientras se itera la vista, el comportamiento es
+ no especificado.
+ Eliminar un elemento de la colección elimina la asociación correspondiente
+ del mapa.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+default
+\begin_inset space ~
+\end_inset
+
+V
+\begin_inset space ~
+\end_inset
+
+getOrDefault(Object,
+\begin_inset space ~
+\end_inset
+
+V)
+\family default
+\series default
+ Devuelve el valor asociado a la clave dada, o el que se le pasa como parámetro
+ si no hay ninguno asociado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+default
+\begin_inset space ~
+\end_inset
+
+V
+\begin_inset space ~
+\end_inset
+
+putIfAbsent(K,
+\begin_inset space ~
+\end_inset
+
+V)
+\family default
+ Si la clave dada no está asociada ningún valor (o está asociada a
+\family typewriter
+null
+\family default
+), la asocia al valor dado, devolviendo
+\family typewriter
+null
+\family default
+ si este es el caso o su valor actual en caso contrario.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+AbstractMap<K,V>
+\begin_inset space ~
+\end_inset
+
+implements
+\begin_inset space ~
+\end_inset
+
+Map<K,V>
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+public abstract Set<Map.Entry<K,V>> entrySet()
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>,
+ Cloneable
+\end_layout
+
+\end_inset
+
+
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+, Serializable
+\end_layout
+
+\end_inset
+
+Diccionario implementado por tabla de dispersión.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+HashMap()
+\family default
+\series default
+ Construye un mapa vacío.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+HashMap(Map<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+K,?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+V>)
+\family default
+\series default
+ Construye un mapa con las asociaciones del mapa dado.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+SortedMap<K,V>
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+Map<K,V>
+\family default
+ El iterador de
+\family typewriter
+keySet()
+\family default
+ devuelve las claves en orden ascendente.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+Comparator<? super K> comparator()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+K firstKey() throws NoSuchElementException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+SortedMap<K,V> headMap(K) throws ClassCastException, NullPointerException,
+ IllegalArgumentException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+K lastKey() throws NoSuchelementException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+SortedMap<K,V> subMap(K, K)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+SortedMap<K,V> tailMap(K) throws ClassCastException, NullPointerException,
+ IllegalArgumentException
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+NavigableMap<K,V>
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+SortedMap<K,V>
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+Map.Entry<K,V> ceilingEntry(K) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+K ceilingKey(K) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+NavigableSet<K> descendingKeySet()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+NavigableMap<K,V> descendingMap()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Map.Entry<K,V> firstEntry()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Map.Entry<K,V> floorEntry(K) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+K floorKey(K) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+NavigableMap<K,V> headMap(K, boolean) throws ClassCastException, NullPointerExce
+ption, IllegalArgumentException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Map.Entry<K,V> higherEntry(K) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+K higherKey(K) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Map.Entry<K,V> lastEntry()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Map.Entry<K,V> lowerEntry(K) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+K lowerKey(K) throws ClassCastException, NullPointerException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+NavigableSet<K> navigableKeySet()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Map.Entry<K,V> pollFirstEntry()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Map.Entry<K,V> pollLastEntry()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+NavigableMap<K,V> subMap(K, boolean, K, boolean) throws ClassCastException,
+ NullPointerException, IllegalArgumentException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+NavigableMap<K,V> tailMap(K, boolean) throws ClassCastException, NullPointerExce
+ption, IllegalArgumentException
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+\series bold
+public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>,
+ Cloneable
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+, Serializable
+\end_layout
+
+\end_inset
+
+Diccionario implementado por árbol rojo-negro.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+TreeMap()
+\family default
+\series default
+ Construye un mapa vacío.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+TreeMap(Map<?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+K,?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+V>)
+\family default
+\series default
+ Construye un mapa con las asociaciones del mapa dado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+TreeMap(Comparator<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+K>)
+\family default
+\series default
+ Construye un mapa vacío con el comparador dado.
+\end_layout
+
+\end_deeper
+\begin_layout Section
+Recomendaciones
+\end_layout
+
+\begin_layout Enumerate
+En constructores y métodos públicos, especificar el tipo de retorno y tipo
+ de los pa
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+rá
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+me
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+tros mediante la interfaz, y no la clase.
+\end_layout
+
+\begin_layout Enumerate
+Evitar el uso de
+\emph on
+arrays
+\emph default
+, pues tienen tamaño fijo, no definen las operaciones fundamentales de
+\family typewriter
+Object
+\family default
+ y es necesario usar
+\family typewriter
+java.util.Arrays
+\family default
+ para estas.
+\end_layout
+
+\end_body
+\end_document
diff --git a/poo/n5.lyx b/poo/n5.lyx
new file mode 100644
index 0000000..bcf7598
--- /dev/null
+++ b/poo/n5.lyx
@@ -0,0 +1,926 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+En Java, la sintaxis
+\family typewriter
+new
+\emph on
+Clase
+\family default
+\emph default
+[
+\family typewriter
+\emph on
+<T1
+\emph default
+,
+\family default
+...
+\family typewriter
+>
+\family default
+]
+\family typewriter
+(
+\emph on
+Arg1
+\emph default
+,
+\family default
+...
+\family typewriter
+) {
+\family default
+ ...
+
+\family typewriter
+}
+\family default
+ se puede usar para crear una clase anónima que herede de
+\family typewriter
+\emph on
+Clase
+\family default
+\emph default
+.
+ Una
+\series bold
+interfaz funcional
+\series default
+ es una que se declara con la anotación (opcional)
+\family typewriter
+@FunctionalInterface
+\family default
+ encima de la definición y que contienen un sólo método abstracto.
+\end_layout
+
+\begin_layout Standard
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+begin{sloppypar}
+\end_layout
+
+\end_inset
+
+Las
+\series bold
+expresiones lambda
+\series default
+ tienen sintaxis (
+\family typewriter
+(
+\family default
+[
+\family typewriter
+\emph on
+Tipo
+\family default
+\emph default
+]
+\family typewriter
+
+\emph on
+var
+\emph default
+,
+\family default
+...
+\family typewriter
+)
+\family default
+|
+\family typewriter
+\emph on
+var
+\family default
+\emph default
+)
+\family typewriter
+ ->
+\family default
+(
+\family typewriter
+{
+\emph on
+cuerpo
+\emph default
+ }
+\family default
+|
+\family typewriter
+\emph on
+expresión
+\family default
+\emph default
+), donde
+\family typewriter
+\emph on
+cuerpo
+\family default
+\emph default
+ es el cuerpo de una función,
+\family typewriter
+\emph on
+expresión
+\family default
+\emph default
+ es una única expresión que equivale a
+\family typewriter
+{ return
+\emph on
+expresión
+\emph default
+; }
+\family default
+ y el
+\family typewriter
+\emph on
+Tipo
+\family default
+\emph default
+ de los argumentos normalmente se puede inferir.
+ Internamente son clases compatibles con las interfaces funcionales que
+ se requieran siempre que su signatura sea compatible con la de su único
+ método abstracto.
+ Si la expresión lambda se refiere a variables de su entorno léxico (variables
+ locales o elementos de la clase), las instancias de su clase asociada se
+ denominan
+\series bold
+clausuras
+\series default
+ (
+\emph on
+closures
+\emph default
+).
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+end{sloppypar}
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Salvo que se indique lo contrario, las siguientes interfaces se definen
+ en
+\family typewriter
+java.util.function
+\family default
+.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+@FunctionalInterface
+\begin_inset space ~
+\end_inset
+
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+Predicate<T>
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+boolean
+\begin_inset space ~
+\end_inset
+
+test(T)
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+@FunctionalInterface
+\begin_inset space ~
+\end_inset
+
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+Function<T,R>
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+R
+\begin_inset space ~
+\end_inset
+
+apply(T)
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+@FunctionalInterface
+\series default
+
+\begin_inset space ~
+\end_inset
+
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+Supplier<T>
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+T
+\begin_inset space ~
+\end_inset
+
+get()
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+@FunctionalInterface
+\begin_inset space ~
+\end_inset
+
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+Consumer<T>
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+void
+\begin_inset space ~
+\end_inset
+
+accept(T)
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+El paquete
+\family typewriter
+java.util.stream
+\family default
+ contiene clases para soportar operaciones funcionales en flujos de elementos.
+ Las operaciones con flujos se dividen en operaciones
+\series bold
+intermedias
+\series default
+ y
+\series bold
+terminales
+\series default
+.
+ Las operaciones intermedias devuelven un nuevo flujo.
+ Las operaciones terminales pueden atravesar el flujo para producir un resultado
+ o un efecto colateral.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\series default
+
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+java.util.stream.Stream<T>
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+extends BaseStream<T,Stream<T>>
+\end_layout
+
+\end_inset
+
+Secuencia de elementos que soporta o
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+pe
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+ra
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+cio
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+nes secuenciales y paralelas en agregado.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+<R,A> R collect(Collector<? super T,A,R>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+<R> R collect(Supplier<R>, BiConsumer<R, ? super T>, BiConsumer<R,R>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Stream<T> distinct()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Optional<T> findAny()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Optional<T> findFirst()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+<R> Stream<R> flatMap(Function<? super T,? extends Stream<? extends R>>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+DoubleStream flatMapToDouble(Function<? super T,? extends DoubleStream>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+IntStream flatMapToInt(Function<? super T,? extends IntStream>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+LongStream flatMapToLong(Function<? super T,? extends LongStream>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+void forEachOrdered(Consumer<? super T>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Stream<T> limit(long)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+DoubleStream mapToDouble(ToDoubleFunction<? super T>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+IntStream mapToInt(ToIntFunction<? super T>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+LongStream mapToLong(ToLongFunction<? super T>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Optional<T> max(Comparator<? super T>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Optional<T> min(Comparator<? super T>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+boolean noneMatch(Predicate<? super T>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Stream<T> peek(Consumer<? super T>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Optional<T> reduce(BinaryOperator<T>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+T reduce(T, BinaryOperator<T>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+<U> U reduce(U, BiFunction<U,? super T,U>, BinaryOperator<U>)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Stream<T> skip(long)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Object[] toArray()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+<A> A[] toArray(IntFunction<A[]>)
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+Stream<T>
+\series default
+
+\begin_inset space ~
+\end_inset
+
+filter(Predicate<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+T>)
+\family default
+ Devuelve un flujo con los elementos de este para los que se cumple el predicado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+<R>
+\series default
+
+\begin_inset space ~
+\end_inset
+
+Stream<R>
+\begin_inset space ~
+\end_inset
+
+map(Function<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+T,?
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+R>)
+\family default
+ Devuelve un flujo con el resultado de aplicar la función dada a los elementos
+ de este.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+Stream<T>
+\begin_inset space ~
+\end_inset
+
+sorted()
+\family default
+ Devuelve un flujo con los elementos de este, ordenados según su orden natural.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+Stream<T>
+\series default
+
+\begin_inset space ~
+\end_inset
+
+sorted(Comparator<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+T>)
+\family default
+ Devuelve un flujo con los elementos de este, ordenados según el comparador
+ dado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+void
+\begin_inset space ~
+\end_inset
+
+forEach(Consumer<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+T>)
+\family default
+ Realiza una acción en cada elemento.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+long
+\series default
+
+\begin_inset space ~
+\end_inset
+
+count()
+\family default
+ Devuelve el número de elementos en el flujo.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+boolean
+\begin_inset space ~
+\end_inset
+
+anyMatch(Predicate<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+T>)
+\family default
+ Indica si algún elemento de este flujo cum
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+ple el predicado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+boolean
+\begin_inset space ~
+\end_inset
+
+allMatch(Predicate<?
+\begin_inset space ~
+\end_inset
+
+super
+\begin_inset space ~
+\end_inset
+
+T>)
+\family default
+ Indica si todos los elementos de este flujo cumplen el predicado.
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+Donde sea aceptable una expresión lambda también es aceptable una referencia
+ a un método:
+\end_layout
+
+\begin_layout Itemize
+
+\family typewriter
+\emph on
+Clase
+\emph default
+::
+\emph on
+métodoDeClase
+\family default
+\emph default
+ equivale a
+\family typewriter
+e ->
+\emph on
+Clase
+\emph default
+.
+\emph on
+métodoDeClase
+\emph default
+(e)
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+
+\family typewriter
+\emph on
+Clase
+\emph default
+::
+\emph on
+métodoDeInstancia
+\family default
+\emph default
+ equivale a
+\family typewriter
+(
+\emph on
+Clase
+\emph default
+ e) -> e.
+\emph on
+métodoDeInstancia
+\emph default
+()
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+
+\family typewriter
+\emph on
+objeto
+\emph default
+::
+\emph on
+método
+\family default
+\emph default
+ equivale a
+\family typewriter
+e ->
+\emph on
+objeto
+\emph default
+.
+\emph on
+método
+\emph default
+(e)
+\family default
+.
+\end_layout
+
+\begin_layout Itemize
+
+\family typewriter
+\emph on
+Clase
+\emph default
+::new
+\family default
+ equivale a
+\family typewriter
+e -> new
+\emph on
+Clase
+\emph default
+(e)
+\family default
+.
+\end_layout
+
+\end_body
+\end_document
diff --git a/poo/n6.lyx b/poo/n6.lyx
new file mode 100644
index 0000000..7a65f35
--- /dev/null
+++ b/poo/n6.lyx
@@ -0,0 +1,771 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+La
+\series bold
+corrección
+\series default
+ es la capacidad del software de cumplir con su especificación, de modo
+ que el incumplimiento de los requisitos de uso implica la finalización
+ de la ejecución.
+ La
+\series bold
+robustez
+\series default
+ es la capacidad del software de reaccionar adecuadamente a situaciones
+ excepcionales (fallos de disco, red, etc.).
+ En Java, para esto se usan excepciones.
+\end_layout
+
+\begin_layout Standard
+Una excepción es un objeto de clase compatible con
+\family typewriter
+java.lang.Exception
+\family default
+, que podemos lanzar con la cláusula
+\family typewriter
+throw
+\emph on
+objeto
+\emph default
+;
+\family default
+.
+ Para capturar una excepción usamos la construcción
+\family typewriter
+try
+\family default
+–
+\family typewriter
+catch
+\family default
+, con la sintaxis:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+try {
+\emph on
+stmt
+\family default
+\emph default
+...
+
+\family typewriter
+ }
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+catch (
+\emph on
+Tipo var
+\emph default
+) {
+\emph on
+stmt
+\family default
+\emph default
+...
+
+\family typewriter
+ }
+\family default
+...
+\end_layout
+
+\begin_layout Plain Layout
+[
+\family typewriter
+finally {
+\emph on
+stmt
+\family default
+\emph default
+...
+
+\family typewriter
+ }
+\family default
+]
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Si se lanza una excepción en el bloque
+\family typewriter
+try
+\family default
+, se comprueba el
+\family typewriter
+\emph on
+Tipo
+\family default
+\emph default
+ en cada bloque
+\family typewriter
+catch
+\family default
+ (que debería ser compatible con
+\family typewriter
+java.lang.Exception
+\family default
+) en orden y, si se encuentra uno compatible con el tipo dinámico de la
+ excepción, se ejecuta el interior de dicho bloque con la variable
+\family typewriter
+\emph on
+var
+\family default
+\emph default
+ (de tipo estático
+\family typewriter
+\emph on
+Tipo
+\family default
+\emph default
+) asociada al objeto excepción, y decimos que la excepción ha sido capturada.
+ El bloque
+\family typewriter
+finally
+\family default
+, si existe, se ejecuta tanto si la excepción es capturada como si no.
+ Finalmente, si la excepción no es capturada, el resultado es como si la
+ propia construcción lanzara la excepción.
+\end_layout
+
+\begin_layout Standard
+Las siguientes clases se definen en
+\family typewriter
+java.lang
+\family default
+.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+Throwable
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+implements Serializable
+\end_layout
+
+\end_inset
+
+Superclase de todos los errores y excepciones en el lenguaje.
+ Sólo instancias de esta clase (o compatibles) son lanzadas por la máquina
+ virtual de Java o la cláusula
+\family typewriter
+throw
+\family default
+.
+ Solo esta clase o compatibles pueden ser el tipo de argumento de una cláusula
+
+\family typewriter
+catch
+\family default
+.
+
+\family typewriter
+Throwable
+\family default
+ y cualquier clase compatible con
+\family typewriter
+Throwable
+\family default
+ que no lo es también con
+\family typewriter
+RuntimeException
+\family default
+ o
+\family typewriter
+Error
+\family default
+ se consideran excepciones comprobadas.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+String
+\begin_inset space ~
+\end_inset
+
+getMessage()
+\family default
+ Deuvuelve la cadena de mensaje de este lanzable.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+void
+\begin_inset space ~
+\end_inset
+
+printStackTrace()
+\family default
+ Imprime este lanzable y su
+\emph on
+backtrace
+\emph default
+ (estado de la pila de llamadas en el momento de crear la excepción) al
+ flujo de error estándar.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+Exception
+\family default
+ Forma de
+\family typewriter
+Throwable
+\family default
+ que indica condiciones que una aplicación razonable querría capturar.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+Exception(String)
+\family default
+ Construye una excepción con el mensaje especificado.
+\end_layout
+
+\end_deeper
+\begin_layout Standard
+Si se lanza una excepción fuera de un bloque
+\family typewriter
+try
+\family default
+, se termina la ejecución del método y el resultado es como si la llamada
+ a dicho método lanzara la excepción, y decimos que el método produce la
+ excepción.
+ Si un método puede producir una excepción comprobada, debemos escribir
+
+\family typewriter
+throws
+\emph on
+Tipo1
+\emph default
+,
+\family default
+...
+ detrás de la lista de parámetros (
+\family typewriter
+(
+\family default
+...
+\family typewriter
+)
+\family default
+) y antes de la implementación (
+\family typewriter
+{
+\family default
+...
+\family typewriter
+}
+\family default
+) o el
+\family typewriter
+;
+\family default
+ para métodos abstractos, siendo
+\family typewriter
+\emph on
+Tipo1
+\emph default
+,
+\family default
+...
+ una lista de excepciones tales que cualquier excepción comprobada que pueda
+ producir el método sea de tipo compatible con uno de la lista.
+ Entonces se considera que el método puede producir un error de cualquier
+ tipo de la lista.
+ Si el método
+\family typewriter
+\series bold
+main
+\family default
+\series default
+ de la aplicación produce una excepción, el programa termina con error.
+\end_layout
+
+\begin_layout Standard
+Si bien las excepciones permiten aportar robustez, también permiten controlar
+ el uso correcto de operaciones, notificando de errores de programación.
+ Para ello se usan las
+\series bold
+excepciones en tiempo de ejecución
+\series default
+, compatibles con
+\family typewriter
+java.lang.RuntimeException
+\family default
+, y que en general no se tratan.
+ La máquina virtual también puede lanzar excepciones de este tipo.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+RuntimeException
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+Exception
+\family default
+\series default
+ Superclase de las excepciones que pue
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+den ser lanzadas durante la operación normal de la máquina virtual de Java.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+NullPointerException
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+RuntimeException
+\family default
+ Lanzada cuando una a
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+pli
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+ca
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+ción intenta usar
+\family typewriter
+null
+\family default
+ cuando se requiere un objeto.
+ Las aplicaciones deberían lanzar instancias de esta clase para otros usos
+ no permitidos de
+\family typewriter
+null
+\family default
+.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+IllegalArgumentException
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+RuntimeException
+\family default
+ Lanzada para in
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+di
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+car que a un método se le ha pasado un argumento inapropiado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+IllegalStateException
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+RuntimeException
+\family default
+ Señala que el entorno o la aplicación no está en un estado apropiado para
+ la operación solicitada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+NoSuchElementException
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+RuntimeException
+\family default
+ Lanzada por algunos métodos accesores para indicar que el elemento solicitado
+ no existe.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+ClassCastException
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+RuntimeException
+\family default
+ Lanzada para indicar que el código ha intentado hacer
+\emph on
+casting
+\emph default
+ a un objeto hacia una subclase a la que no pertenece.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+IndexOutOfBoundsException
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+RuntimeException
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+\series bold
+public class ArrayIndexOutOfBoundsException extends IndexOutOfBoundsException
+\end_layout
+
+\end_inset
+
+
+\family default
+\series default
+ Lanzada para indicar que se ha accedido a un
+\emph on
+array
+\emph default
+ con un índice no permitido.
+\end_layout
+
+\begin_layout Standard
+El
+\series bold
+diseño por contrato
+\series default
+ es un modo de proceder ante los errores de programación basado en que las
+ operaciones tienen requisitos de uso o
+\series bold
+precondiciones
+\series default
+ con los que se considera un error no cumplir, y si no se cumplen el programa
+ no debe continuar.
+\end_layout
+
+\end_body
+\end_document
diff --git a/poo/na.lyx b/poo/na.lyx
new file mode 100644
index 0000000..9b4af57
--- /dev/null
+++ b/poo/na.lyx
@@ -0,0 +1,1500 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Section*
+
+\family typewriter
+java.io
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+Closeable
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+extends AutoCloseable
+\end_layout
+
+\end_inset
+
+ Fuente o destino de datos que puede ser cerrado.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+void
+\begin_inset space ~
+\end_inset
+
+close()
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws IOException
+\end_layout
+
+\end_inset
+
+Cierra este flujo y libera cualquier recurso asociado con él.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+FileNotFoundException
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+IOException
+\family default
+\series default
+ Indica que ha fallado un intento de abrir el fichero con nombre especificado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+IOException
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+Exception
+\family default
+\series default
+ Señaliza una excepción de E/S.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+IOException(String)
+\family default
+ Construye una
+\family typewriter
+IOException
+\family default
+ con el mensaje especificado.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+abstract
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+InputStream
+\begin_inset space ~
+\end_inset
+
+
+\series default
+implements
+\begin_inset space ~
+\end_inset
+
+Closeable
+\family default
+ Representa un flujo de entrada de bytes.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+abstract int read()
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+PrintStream
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+extends FilterOutputStream
+\end_layout
+
+\end_inset
+
+
+\family default
+ Añade a otro flujo de salida la habilidad de imprimir representaciones
+ de datos convenientemente.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+void
+\begin_inset space ~
+\end_inset
+
+println(String)
+\family default
+ Imprime una cadena y termina la línea.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+abstract
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+PrintWriter
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+extends Writer
+\end_layout
+
+\end_inset
+
+Imprime representaciones de objetos con formato a un flujo de salida de
+ texto.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+public abstract class Writer()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+public abstract void close() throws IOException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+public abstract void flush() throws IOException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+public abstract void write(char[],int,int)
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+PrintWriter(String)
+\begin_inset space ~
+\end_inset
+
+throws
+\begin_inset space ~
+\end_inset
+
+FileNotFoundException
+\family default
+\series default
+ Construye un nuevo
+\family typewriter
+PrintWriter
+\family default
+ con el nombre de fichero indicado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+boolean
+\begin_inset space ~
+\end_inset
+
+checkError()
+\family default
+\series default
+ Comprueba su estado de error.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+void
+\begin_inset space ~
+\end_inset
+
+println(String)
+\family default
+ Imprime una cadena y termina la línea.
+\end_layout
+
+\end_deeper
+\begin_layout Section*
+
+\family typewriter
+java.lang
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+Integer
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+String
+\begin_inset space ~
+\end_inset
+
+toHexString(int)
+\family default
+ Devuelve una representación textual del argumento entero como entero sin
+ signo en base 16, una cadena de dígitos ASCII en hexadecimal sin
+\family typewriter
+0
+\family default
+s extra a la izquierda.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+Math
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+double
+\begin_inset space ~
+\end_inset
+
+PI
+\family default
+\series default
+ El valor de doble precisión más cerca que cualquier otro a
+\begin_inset Formula $\pi$
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+double
+\begin_inset space ~
+\end_inset
+
+sqrt(double)
+\family default
+ Devuelve la raíz cuadrada positiva de un valor correctamente redondeada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+double
+\begin_inset space ~
+\end_inset
+
+pow(double,
+\begin_inset space ~
+\end_inset
+
+double)
+\family default
+\series default
+ Devuelve el primer argumento elevado a la potencia del segundo.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+String
+\begin_inset space ~
+\end_inset
+
+implements
+\begin_inset space ~
+\end_inset
+
+CharSequence
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+, Serializable, Comparable<String>
+\end_layout
+
+\end_inset
+
+Representa cadenas inmutables de caracteres.
+ Todos los literales de cadena en programas Java, como
+\family typewriter
+"
+\emph on
+abc
+\emph default
+"
+\family default
+, son instancias de esta clase.
+ El lenguaje proporciona soporte especial para el operador de concatenación
+ (
+\family typewriter
++
+\family default
+), y para conversión de otros objetos a cadenas al concatenar.
+ Las conversiones se implementan mediante el método
+\family typewriter
+toString
+\family default
+.
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+public interface CharSequence
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+char charAt(int)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+int length()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+CharSequence subSequence(int, int)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+String toString()
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+boolean
+\begin_inset space ~
+\end_inset
+
+contains(CharSequence)
+\family default
+ Indica si esta cadena contiene la secuencia de caracteres especificada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+int
+\begin_inset space ~
+\end_inset
+
+length()
+\family default
+ Devuelve el número de unidades de código Unicode en la cadena.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+System
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+InputStream
+\begin_inset space ~
+\end_inset
+
+in
+\family default
+\series default
+ El flujo de entrada estándar.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+PrintStream
+\begin_inset space ~
+\end_inset
+
+out
+\family default
+ El flujo de salida estándar.
+\end_layout
+
+\end_deeper
+\begin_layout Section*
+
+\family typewriter
+java.net
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+MalformedURLException
+\begin_inset space ~
+\end_inset
+
+extends
+\begin_inset space ~
+\end_inset
+
+IOException
+\family default
+\series default
+ Indica una URL mal formada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+URL
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+implements Serializable
+\end_layout
+
+\end_inset
+
+Representa una URL.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+URL(String)
+\begin_inset space ~
+\end_inset
+
+throws
+\begin_inset space ~
+\end_inset
+
+MalformedURLException
+\family default
+ Construye una URL a partir de su representación como cadena.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+InputStream
+\begin_inset space ~
+\end_inset
+
+openStream()
+\begin_inset space ~
+\end_inset
+
+throws
+\begin_inset space ~
+\end_inset
+
+IOException
+\family default
+\series default
+ Abre una conexión a la URL y devuelve un
+\family typewriter
+InputStream
+\family default
+ para leer de esta.
+\end_layout
+
+\end_deeper
+\begin_layout Section*
+
+\family typewriter
+java.time
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+LocalTime
+\begin_inset space ~
+\end_inset
+
+implements
+\begin_inset space ~
+\end_inset
+
+ChronoLocalDate
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+, Temporal, TemporalAdjuster, Serializable
+\end_layout
+
+\end_inset
+
+Fecha sin zona horaria.
+ Inmutable.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+LocalDate
+\begin_inset space ~
+\end_inset
+
+now()
+\family default
+ Obtiene la fecha actual del reloj del sistema en la zona horaria por defecto.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+LocalDate
+\begin_inset space ~
+\end_inset
+
+of(int,
+\begin_inset space ~
+\end_inset
+
+int,
+\begin_inset space ~
+\end_inset
+
+int)
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws DateTimeException
+\end_layout
+
+\end_inset
+
+Obtiene una instancia de
+\family typewriter
+LocalDate
+\family default
+ desde un año, mes y día, respectivamente.
+\end_layout
+
+\end_deeper
+\begin_layout Section*
+
+\family typewriter
+java.time.chrono
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+interface
+\begin_inset space ~
+\end_inset
+
+ChronoLocalDate
+\family default
+\series medium
+
+\begin_inset Note Greyedout
+status open
+
+\begin_layout Plain Layout
+
+\end_layout
+
+\end_inset
+
+
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+extends Temporal, TemporalAdjuster, Comparable<ChronoLocalDate>
+\end_layout
+
+\end_inset
+
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+public interface Temporal extends TemporalAccessor
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+boolean isSupported(TemporalUnit)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+Temporal plus(long,TemporalUnit) throws DateTimeException, UnsupportedTemporalEx
+ception, ArithmeticException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+long until(Temporal, TemporalUnit) throws DateTimeException, UnsupportedTemporal
+TypeException, ArithmeticException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+
+\begin_inset space ~
+\end_inset
+
+Temporal with(TemporalField, long) throws DateTimeException, UnsupportedTemporal
+TypeException, ArithmeticException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+default boolean isSupported(TemporalUnit)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+default Temporal plus(long,TemporalUnit) throws DateTimeException, ArithmeticExc
+eption
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+default Temporal with(TemporalField, long) throws DateTimeException, Unsupported
+TemporalTypeException, ArithmeticException
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+boolean equals(Object)
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Chronology getChronology()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+int hashCode()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+int lengthOfMonth()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+String toString()
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+ChronoPeriod until(ChronoLocalDate) throws DateTimeException, ArithmeticExceptio
+n
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+default
+\begin_inset space ~
+\end_inset
+
+boolean
+\begin_inset space ~
+\end_inset
+
+isAfter(ChronoLocalDate)
+\family default
+ Comprueba si esta fecha es posterior a la especificada.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+default
+\begin_inset space ~
+\end_inset
+
+boolean
+\begin_inset space ~
+\end_inset
+
+isBefore(ChronoLocalDate)
+\family default
+ Comprueba si es anterior.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+default
+\begin_inset space ~
+\end_inset
+
+boolean
+\begin_inset space ~
+\end_inset
+
+isEqual(ChronoLocalDate)
+\family default
+ Comprueba si es igual.
+\end_layout
+
+\end_deeper
+\begin_layout Section*
+
+\family typewriter
+java.util
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+Random
+\family default
+\series default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+implements Serializable
+\end_layout
+
+\end_inset
+
+Genera números pseudoaleatorios.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+\series bold
+public
+\series default
+
+\begin_inset space ~
+\end_inset
+
+Random()
+\family default
+ Construye un generador de números aleatorios.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+int
+\begin_inset space ~
+\end_inset
+
+nextInt(int)
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+throws IllegalArgumentException
+\end_layout
+
+\end_inset
+
+Devuelve un valor entero pseudoaleatorio distribuido uniformemente entre
+ 0 (inclusive) y el valor especificado (exclusive), extraído de la secuencia
+ del generador.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+Scanner
+\begin_inset space ~
+\end_inset
+
+implements
+\begin_inset space ~
+\end_inset
+
+Closeable
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+, Iterator<String>
+\end_layout
+
+\end_inset
+
+Escáner de texto simple.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+Scanner(InputStream)
+\family default
+ Construye un escáner que produce valores del flujo de entrada especificado.
+\end_layout
+
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+String
+\begin_inset space ~
+\end_inset
+
+nextLine()
+\family default
+ Devuelve el resto de la línea actual, excluyendo cualquier separador de
+ línea al final.
+ La posición se establece al principio de la siguiente línea.
+\end_layout
+
+\end_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+final
+\begin_inset space ~
+\end_inset
+
+class
+\begin_inset space ~
+\end_inset
+
+UUID
+\family default
+
+\begin_inset Note Comment
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+implements Serializable, Comparable<UUID>
+\end_layout
+
+\end_inset
+
+Representa unn identificador único universal.
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\family typewriter
+public
+\begin_inset space ~
+\end_inset
+
+static
+\begin_inset space ~
+\end_inset
+
+UUID
+\begin_inset space ~
+\end_inset
+
+randomUUID()
+\family default
+ Obtiene un UUID usando un generador de números pseudoaleatorios.
+\end_layout
+
+\end_deeper
+\end_body
+\end_document
diff --git a/poo/nb.lyx b/poo/nb.lyx
new file mode 100644
index 0000000..19478fe
--- /dev/null
+++ b/poo/nb.lyx
@@ -0,0 +1,743 @@
+#LyX 2.3 created this file. For more info see http://www.lyx.org/
+\lyxformat 544
+\begin_document
+\begin_header
+\save_transient_properties true
+\origin unavailable
+\textclass book
+\use_default_options true
+\maintain_unincluded_children false
+\language spanish
+\language_package default
+\inputencoding auto
+\fontencoding global
+\font_roman "default" "default"
+\font_sans "default" "default"
+\font_typewriter "default" "default"
+\font_math "auto" "auto"
+\font_default_family default
+\use_non_tex_fonts false
+\font_sc false
+\font_osf false
+\font_sf_scale 100 100
+\font_tt_scale 100 100
+\use_microtype false
+\use_dash_ligatures true
+\graphics default
+\default_output_format default
+\output_sync 0
+\bibtex_command default
+\index_command default
+\paperfontsize default
+\spacing single
+\use_hyperref false
+\papersize default
+\use_geometry false
+\use_package amsmath 1
+\use_package amssymb 1
+\use_package cancel 1
+\use_package esint 1
+\use_package mathdots 1
+\use_package mathtools 1
+\use_package mhchem 1
+\use_package stackrel 1
+\use_package stmaryrd 1
+\use_package undertilde 1
+\cite_engine basic
+\cite_engine_type default
+\biblio_style plain
+\use_bibtopic false
+\use_indices false
+\paperorientation portrait
+\suppress_date false
+\justification true
+\use_refstyle 1
+\use_minted 0
+\index Index
+\shortcut idx
+\color #008000
+\end_index
+\secnumdepth 3
+\tocdepth 3
+\paragraph_separation indent
+\paragraph_indentation default
+\is_math_indent 0
+\math_numbering_side default
+\quotes_style french
+\dynamic_quotes 0
+\papercolumns 1
+\papersides 1
+\paperpagestyle default
+\tracking_changes false
+\output_changes false
+\html_math_output 0
+\html_css_as_file 0
+\html_be_strict false
+\end_header
+
+\begin_body
+
+\begin_layout Standard
+En Eclipse, todo el código fuente o compilado se encuentra en un directorio
+ llamado
+\series bold
+espacio de trabajo
+\series default
+.
+ Para importar un proyecto, movemos su directorio al espacio de trabajo
+ y, desde Eclipse, usamos
+\begin_inset Quotes fld
+\end_inset
+
+Archivo
+\begin_inset Formula $\rightarrow$
+\end_inset
+
+Importar
+\begin_inset Formula $\rightarrow$
+\end_inset
+
+General
+\begin_inset Formula $\rightarrow$
+\end_inset
+
+Proyectos existentes en el espacio de trabajo
+\begin_inset Quotes frd
+\end_inset
+
+, donde nos pide el directorio raíz introducimos la ruta del espacio de
+ trabajo, pulsamos
+\begin_inset Quotes fld
+\end_inset
+
+Examinar
+\begin_inset Quotes frd
+\end_inset
+
+ y, en el panel inferior
+\begin_inset Quotes fld
+\end_inset
+
+Proyectos
+\begin_inset Quotes frd
+\end_inset
+
+, seleccionamos el que deseamos importar, y pulsamos
+\begin_inset Quotes fld
+\end_inset
+
+Finalizar
+\begin_inset Quotes frd
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+El código fuente Java se guarda en ficheros
+\family typewriter
+\emph on
+Clase
+\emph default
+.java
+\family default
+ que, al compilarlos, se convierten en ficheros compilados o de
+\emph on
+bytecode
+\emph default
+
+\family typewriter
+\emph on
+Clase
+\emph default
+.class
+\family default
+, uno por clase.
+ Para ejecutar un programa usamos el comando
+\family typewriter
+java [
+\emph on
+OPCIÓN
+\emph default
+]...
+
+\emph on
+CLASE
+\family default
+\emph default
+, donde
+\family typewriter
+\emph on
+CLASE
+\family default
+\emph default
+ es la ruta completa de la clase principal.
+ Las clases se buscan según un
+\emph on
+classpath
+\emph default
+, una lista de directorios (o ficheros com
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+pri
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+mi
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+dos) separados por
+\family typewriter
+;
+\family default
+, de forma que en uno de ellos debe haber un fichero de
+\emph on
+bytecode
+\emph default
+ cuya ruta relativa al directorio debe ser el resultado de cambiar los separador
+es
+\family typewriter
+.
+
+\family default
+ en la ruta completa de la clase por
+\family typewriter
+/
+\family default
+ y añadir al final la extensión
+\family typewriter
+.class
+\family default
+.
+ El
+\emph on
+classpath
+\emph default
+ se indica al comando con la opción
+\family typewriter
+-cp
+\emph on
+CLASSPATH
+\family default
+\emph default
+; si no aparece, se toma de la variable de entorno
+\family typewriter
+CLASSPATH
+\family default
+, y si esta tampoco existe, se asume que es
+\begin_inset Quotes fld
+\end_inset
+
+
+\family typewriter
+.
+\family default
+
+\begin_inset Quotes frd
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+Un fichero JAR es un comprimido con extensión (normalmente)
+\family typewriter
+.jar
+\family default
+ que contiene los ficheros compilados y un
+\series bold
+manifiesto
+\series default
+ que describe el contenido.
+ El manifiesto se encuentra en
+\family typewriter
+META-INF/MANIFEST.MF
+\family default
+ dentro del comprimido, y suele tener el siguiente aspecto:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+Class-Path:
+\emph on
+ELEMENTO
+\emph default
+
+\family default
+...
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+Main-Class:
+\emph on
+RUTA_CLASE
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Donde la entrada
+\family typewriter
+Class-Path
+\family default
+ indica el
+\emph on
+classpath
+\emph default
+ como lista separada por espacios en la que
+\family typewriter
+.
+
+\family default
+ indica el propio fichero y las rutas relativas que no comienzan con
+\family typewriter
+.
+
+\family default
+ lo son respecto al directorio donde se encuentra el comprimido.
+
+\family typewriter
+Main-Class
+\family default
+ indica el nombre completo de la clase principal.
+ Esto permite ejecutar un programa en Java con el comando
+\family typewriter
+java -jar
+\emph on
+fichero.jar
+\family default
+\emph default
+, o abriendo el fichero desde un explorador de ficheros.
+\end_layout
+
+\begin_layout Standard
+Si tenemos una biblioteca en un fichero JAR que queremos usar en nuestro
+ proyecto, creamos dentro una carpeta
+\family typewriter
+lib
+\family default
+, copiamos el comprimido dentro junto con su documentación JavaDoc (descomprimid
+a) y, dentro de Eclipse, pulsamos F5 para actualizar el contenido de
+\family typewriter
+lib
+\family default
+.
+ Pulsamos el fichero de la biblioteca con el botón derecho del ratón, usamos
+
+\begin_inset Quotes fld
+\end_inset
+
+Vía de acceso de construcción
+\begin_inset Formula $\rightarrow$
+\end_inset
+
+Añadir a la vía de construcción
+\begin_inset Quotes frd
+\end_inset
+
+ y aparece una sección
+\begin_inset Quotes fld
+\end_inset
+
+Li
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+bre
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+rí
+\begin_inset ERT
+status open
+
+\begin_layout Plain Layout
+
+
+\backslash
+-
+\end_layout
+
+\end_inset
+
+as referidas
+\begin_inset Quotes frd
+\end_inset
+
+ con la biblioteca añadida.
+ Pulsamos aquí con el botón derecho del ratón, en
+\begin_inset Quotes fld
+\end_inset
+
+Propiedades
+\begin_inset Formula $\rightarrow$
+\end_inset
+
+Ubicación del JavaDoc
+\begin_inset Formula $\rightarrow$
+\end_inset
+
+Vía de acceso de ubicación JavaDoc
+\begin_inset Formula $\rightarrow$
+\end_inset
+
+Examinar
+\begin_inset Quotes frd
+\end_inset
+
+ seleccionamos el directorio con la documentación, y pulsamos
+\begin_inset Quotes fld
+\end_inset
+
+Validar
+\begin_inset Quotes frd
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Standard
+Para generar un archivo JAR de nuestro proyecto, usamos
+\begin_inset Quotes fld
+\end_inset
+
+Archivo
+\begin_inset Formula $\rightarrow$
+\end_inset
+
+Exportar
+\begin_inset Formula $\rightarrow$
+\end_inset
+
+Java
+\begin_inset Quotes frd
+\end_inset
+
+ y podemos elegir
+\begin_inset Quotes fld
+\end_inset
+
+Archivo JAR
+\begin_inset Quotes frd
+\end_inset
+
+ para empaquetar una biblioteca (sin clase principal),
+\begin_inset Quotes fld
+\end_inset
+
+Archivo JAR ejecutable
+\begin_inset Quotes frd
+\end_inset
+
+ para un ejecutable o
+\begin_inset Quotes fld
+\end_inset
+
+JavaDoc
+\begin_inset Quotes frd
+\end_inset
+
+ para extraer la documentación JavaDoc.
+\end_layout
+
+\begin_layout Standard
+Si elegimos la segunda opción, tenemos las opciones:
+\end_layout
+
+\begin_layout Itemize
+
+\emph on
+Launch configuration
+\emph default
+: Para elegir la clase principal de entre las posibles.
+\end_layout
+
+\begin_layout Itemize
+
+\emph on
+Export destination
+\emph default
+: Dónde queremos que se guarde el fichero JAR.
+\end_layout
+
+\begin_layout Itemize
+
+\emph on
+Library handling
+\emph default
+:
+\begin_inset Quotes fld
+\end_inset
+
+
+\emph on
+Extract required libraries into generated JAR
+\emph default
+
+\begin_inset Quotes frd
+\end_inset
+
+ descomprime los ficheros JAR de las bibliotecas e introduce las clases
+ en el JAR de salida.
+
+\begin_inset Quotes fld
+\end_inset
+
+
+\emph on
+Package required libraries into generated JAR
+\emph default
+
+\begin_inset Quotes frd
+\end_inset
+
+ guarda los propios ficheros JAR de las bibliotecas dentro del nuestro.
+
+\begin_inset Quotes fld
+\end_inset
+
+
+\emph on
+Copy required libraries into a sub-folder next to the generated JAR
+\emph default
+
+\begin_inset Quotes frd
+\end_inset
+
+ crea un directorio junto al fichero JAR donde mete las bibliotecas, que
+ añade como dependencias en el
+\family typewriter
+Class-Path
+\family default
+ del manifiesto.
+\end_layout
+
+\begin_layout Standard
+JavaDoc es una forma de generar documentación de código Java a partir de
+ comentarios.
+ Para ello, encima de cada clase, interfaz, etc., método o incluso paquete,
+ creamos un comentario como el siguiente:
+\end_layout
+
+\begin_layout Standard
+\begin_inset Box Frameless
+position "t"
+hor_pos "c"
+has_inner_box 1
+inner_pos "t"
+use_parbox 0
+use_makebox 0
+width "100col%"
+special "none"
+height "1in"
+height_special "totalheight"
+thickness "0.4pt"
+separation "3pt"
+shadowsize "4pt"
+framecolor "black"
+backgroundcolor "none"
+status open
+
+\begin_layout Plain Layout
+
+\family typewriter
+/**
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+*
+\emph on
+Descripción.
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+*
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+* @param
+\emph on
+nombre
+\emph default
+
+\emph on
+Descripción del parámetro
+\begin_inset Quotes fld
+\end_inset
+
+nombre
+\begin_inset Quotes frd
+\end_inset
+
+.
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+*
+\family default
+...
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+* @return
+\emph on
+Valor devuelto.
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+* @throws
+\emph on
+Tipo Significado si el método lanza una excepción del Tipo dado.
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+*
+\family default
+...
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+* @seeAlso
+\emph on
+Clase,método,etc.
+\end_layout
+
+\begin_layout Plain Layout
+
+\family typewriter
+\begin_inset space ~
+\end_inset
+
+*/
+\end_layout
+
+\end_inset
+
+
+\end_layout
+
+\begin_layout Standard
+Cualquier parte puede omitirse (de hecho muchas son específicas para métodos),
+ y puede usarse código HTML o marcadores propios de JavaDoc (por ejemplo,
+ para enlazar a otra clase o método).
+ Si un método redefine a otro sin cambiar la semántica, podemos usar
+\family typewriter
+/** {@inheritDoc} */
+\family default
+ para heredar la documentación.
+\end_layout
+
+\end_body
+\end_document