#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 \begin_modules algorithm2e \end_modules \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 Clases anidadas \end_layout \begin_layout Standard Algunos lenguajes orientados a objetos \begin_inset Foot status open \begin_layout Plain Layout En esta asignatura, cuando hablamos de programación orientada a objetos nos referimos al sentido actual con lenguajes como Java y C#, centrados en clases, interfaces y patrones de diseño, en vez de al sentido original con lenguajes como Smalltalk, centrados en el intercambio de mensajes. \end_layout \end_inset como C++ \begin_inset Foot status open \begin_layout Plain Layout Alan Kay: \emph on \lang english \begin_inset Quotes cld \end_inset I made up the term object-oriented and I can tell you I did not have C++ in mind. \begin_inset Quotes crd \end_inset \end_layout \end_inset , C# y Java permiten definir una clase dentro de otra cuando esta solo es necesaria dentro de la otra. En Java tenemos: \end_layout \begin_layout Itemize \series bold Clases anidadas estáticas \series default , definidas con el modificador \family typewriter \lang english static \family default \lang spanish en el cuerpo de otra clase. La clase anidada puede ver todos los miembros de la que la contiene y de sus instancias, y viceversa. \end_layout \begin_layout Itemize \series bold Clases internas \series default , cuyas instancias existen en el contexto de una instancia de la \series bold clase externa \series default y que pueden ver todos los miembros de dicha instancia. Pueden implementar interfaces, por lo que son útiles para crear \emph on \lang english callbacks \emph default \lang spanish . Tipos: \end_layout \begin_deeper \begin_layout Itemize \series bold Clases miembro \series default , definidas en el cuerpo de la clase externa sin \family typewriter \lang english static \family default \lang spanish . Las instancias son creadas por la clase externa mediante \end_layout \begin_deeper \begin_layout Standard \align center \family typewriter this.new \emph on Clase \family default \emph default [ \family typewriter < \family default [ \family typewriter \emph on T \emph default , \family default ...] \family typewriter > \family default ] \family typewriter ( \family default [ \family typewriter \emph on parámetro \emph default , \family default ...] \family typewriter ) \family default . \end_layout \end_deeper \begin_layout Itemize \series bold Clases locales \series default , definidas en el cuerpo de un método. Tienen en su ámbito las variables locales del método definidas previamente y pueden usar las que son \family typewriter \lang english final \family default \lang spanish . Las instancias son creadas por el método con la sintaxis habitual ( \family typewriter new \family default ). \end_layout \begin_layout Itemize \series bold Clases anónimas \series default , como las locales pero definidas e instanciadas a la vez con una expresión \end_layout \begin_deeper \begin_layout Standard \align center \family typewriter new \emph on Superclase \emph default ( \family default [ \family typewriter \emph on parámetro \emph default , \family default ...] \family typewriter ) { \emph on cuerpo de la clase \emph default } \family default , \end_layout \begin_layout Standard donde \family typewriter \emph on Superclase \family default \emph default es la clase o interfaz de la que deriva la clase anónima y los parámetros se pasan a un constructor de la \family typewriter \emph on Superclase \family default \emph default , de modo que si esta es una interfaz no hay parámetros. Se usan cuando se necesita un objeto de una clase que implemente una cierta interfaz y la definición es pequeña, de unas 10 líneas. \end_layout \end_deeper \end_deeper \begin_layout Section Objetos función \end_layout \begin_layout Standard En lenguajes como Smalltalk, Python, Ruby y Javascript, las funciones se pueden tratar como valores y pueden capturar variables del ámbito de su definición. \end_layout \begin_layout Standard A partir de Java 8, una \series bold expresión lambda \series default es una de la forma \family typewriter ( \family default [[ \family typewriter \emph on tipo \family default \emph default ] \family typewriter \emph on parámetro \emph default , \family default ...] \family typewriter ) -> { \emph on cuerpo \emph default } \family default , que si se esperaba un objeto de una \family typewriter \emph on Interfaz \family default \emph default que solo tiene un \family typewriter \emph on método \family default \emph default , equivale a \family typewriter \lang english new \lang spanish \emph on Interfaz \emph default { \lang english public \lang spanish \emph on método \emph default ( \family default [ \family typewriter \emph on parámetro \emph default , \family default ...] \family typewriter ) { \emph on cuerpo \emph default } \family default . \end_layout \begin_layout Standard Además, \family typewriter { \lang english return \emph on expr \emph default \lang spanish ; } \family default se puede abreviar como \family typewriter \emph on expr \family default \emph default , y si hay solo un parámetro se puede cambiar \family typewriter ( \emph on parámetro \emph default ) \family default por \family typewriter \emph on parámetro \family default \emph default . \family typewriter \emph on Clase \emph default :: \emph on método \family default \emph default equivale a \family typewriter \emph on Clase \emph default o -> o. \emph on método \emph default () \family default , y \family typewriter \emph on Clase \emph default ::new \family default equivale a \family typewriter ( \family default [ \family typewriter \emph on parámetro \emph default , \family default ...] \family typewriter ) -> new \emph on Clase \emph default ( \emph on parámetro \emph default , \family default ... \family typewriter ) \family default , donde el constructor tomado depende de la interfaz de cuyo tipo se esperaba un objeto. \end_layout \begin_layout Standard Una \series bold interfaz funcional \series default es una con un solo método usada como tipo de una expresión lambda. Se puede anotar con \family typewriter @ \lang english FunctionalInterface \family default \lang spanish encima de la interfaz. \end_layout \begin_layout Description \family typewriter package \begin_inset space ~ \end_inset java.awt.event \family default Interfaces y clases de eventos lanzados por componentes AWT. \begin_inset Foot status open \begin_layout Plain Layout En adelante los tipos de datos y métodos cuya visibilidad no se especifique tienen visibilidad pública. \end_layout \end_inset \end_layout \begin_deeper \begin_layout Description \family typewriter interface \begin_inset space ~ \end_inset ActionListener \begin_inset space ~ \end_inset extends \begin_inset space ~ \end_inset EventListener \end_layout \begin_deeper \begin_layout Description \family typewriter void \begin_inset space ~ \end_inset actionPerformed(ActionEvent) \family default Recibe una acción y actúa en consecuencia. \end_layout \end_deeper \end_deeper \begin_layout Description \family typewriter package \begin_inset space ~ \end_inset java.util \end_layout \begin_deeper \begin_layout Description \family typewriter \series bold interface \begin_inset space ~ \end_inset EventListener \family default \series default Marcador para interfaces que reciben eventos. \end_layout \end_deeper \begin_layout Description \family typewriter package \begin_inset space ~ \end_inset java.util.function \family default Interfaces funcionales genéricas. \end_layout \begin_deeper \begin_layout Description \family typewriter \series bold @FunctionalInterface \begin_inset space ~ \end_inset interface \begin_inset space ~ \end_inset BiFunction \end_layout \begin_deeper \begin_layout Description \family typewriter R \begin_inset space ~ \end_inset apply(T,U) \family default Aplica cierta función a los argumentos. \end_layout \end_deeper \begin_layout Description \family typewriter \series bold @FunctionalInterface \begin_inset space ~ \end_inset interface \begin_inset space ~ \end_inset BinaryOperator \begin_inset space ~ \end_inset extends \begin_inset space ~ \end_inset BiFunction \end_layout \begin_layout Description \family typewriter @FunctionalInterface \begin_inset space ~ \end_inset interface \begin_inset space ~ \end_inset Consumer \end_layout \begin_deeper \begin_layout Description \family typewriter void \begin_inset space ~ \end_inset Accept(T) \family default Acepta un argumento y hace algo con él. \end_layout \end_deeper \begin_layout Description \family typewriter @FunctionalInterface \begin_inset space ~ \end_inset interface \begin_inset space ~ \end_inset Function \end_layout \begin_deeper \begin_layout Description \family typewriter R \begin_inset space ~ \end_inset apply(T) \family default Aplica cierta función al argumento. \end_layout \end_deeper \begin_layout Description \family typewriter @FunctionalInterface \begin_inset space ~ \end_inset interface \begin_inset space ~ \end_inset Predicate \end_layout \begin_deeper \begin_layout Description \family typewriter boolean \begin_inset space ~ \end_inset test(T) \family default Comprueba si el argumento cumple cierta condición. \end_layout \end_deeper \begin_layout Description \family typewriter @FunctionalInterface \begin_inset space ~ \end_inset interface \begin_inset space ~ \end_inset Supplier \end_layout \begin_deeper \begin_layout Description \family typewriter T \begin_inset space ~ \end_inset get() \family default Suministra un objeto. No tiene por qué ser siempre el mismo o distinto. \end_layout \end_deeper \begin_layout Description \family typewriter @FunctionalInterface \begin_inset space ~ \end_inset interface \begin_inset space ~ \end_inset ToIntFunction \end_layout \begin_deeper \begin_layout Description \family typewriter int \begin_inset space ~ \end_inset applyAsInt(T) \family default Aplica una función entera al argumento. \end_layout \end_deeper \end_deeper \begin_layout Description \family typewriter package \begin_inset space ~ \end_inset javax.swing \family default Biblioteca de interfaz gráfica multiplataforma. \end_layout \begin_deeper \begin_layout Description \family typewriter \series bold abstract \begin_inset space ~ \end_inset class \begin_inset space ~ \end_inset AbstractButton \family default \series default Código común a varios tipos de botones. \end_layout \begin_deeper \begin_layout Description \family typewriter void \begin_inset space ~ \end_inset addActionListener(ActionListener) \family default Añade un \family typewriter ActionListener \family default para llamarlo al pulsar el botón. \end_layout \end_deeper \begin_layout Description \family typewriter \series bold class \begin_inset space ~ \end_inset JButton \series default \begin_inset space ~ \end_inset extends \begin_inset space ~ \end_inset AbstractButton \family default Botón estándar. \end_layout \begin_deeper \begin_layout Description \family typewriter @ConstructorProperties(value= \begin_inset Quotes qrd \end_inset text \begin_inset Quotes qrd \end_inset ) \begin_inset space ~ \end_inset JButton(String) \family default Crea un botón con el texto dado. \end_layout \end_deeper \begin_layout Description \family typewriter class \begin_inset space ~ \end_inset JLabel \family default Área para mostrar un texto corto, una imagen o ambos. \end_layout \begin_deeper \begin_layout Description \family typewriter JLabel() \family default Crea un \family typewriter JLabel \family default sin imagen ni texto. \end_layout \begin_layout Description \family typewriter void \begin_inset space ~ \end_inset setText(String) \family default Establece el texto. \end_layout \end_deeper \end_deeper \begin_layout Section Objetos nulos \end_layout \begin_layout Standard La mayoría de lenguajes de programación desde Algol \begin_inset space ~ \end_inset W representan la falta de un valor como un valor especial \family typewriter null \family default o \family typewriter nil \family default . Esto hace el código menos legible por las comprobaciones, es fuente de errores y rompe con la idea de ocultar los punteros, por lo que Scala \begin_inset Foot status open \begin_layout Plain Layout Y en general los lenguajes funcionales. \end_layout \end_inset usa en su lugar un tipo \family typewriter Option[T] \family default (que puede contener un valor de tipo \family typewriter T \family default o ninguno) y Groovy usa un operador de navegación segura (que sale de la función si el operando es nulo). \end_layout \begin_layout Standard En Java, el patrón \emph on \lang english Null Object \emph default \lang spanish consiste en sustituir \family typewriter null \family default para una interfaz por un valor de una clase que implemente la interfaz con una implementación apropiada para la ausencia de valor. \end_layout \begin_layout Description \family typewriter final \begin_inset space ~ \end_inset class \begin_inset space ~ \end_inset java.util.Optional \family default Valor de \family typewriter T \family default no nulo o ausencia de valor. \end_layout \begin_deeper \begin_layout Description \family typewriter static \begin_inset space ~ \end_inset \begin_inset space ~ \end_inset Optional \begin_inset space ~ \end_inset empty() \family default Devuelve un \family typewriter Optional \family default vacío. \end_layout \begin_layout Description \family typewriter \series bold T \begin_inset space ~ \end_inset get() \family default \series default Si tiene un valor lo devuelve. \end_layout \begin_layout Description \family typewriter boolean \begin_inset space ~ \end_inset isPresent() \family default Indica si tiene un valor. \end_layout \begin_layout Description \family typewriter static \begin_inset space ~ \end_inset \begin_inset space ~ \end_inset Optional \begin_inset space ~ \end_inset of(T) \family default Devuelve un \family typewriter Optional \family default con el valor no nulo dado. \end_layout \begin_layout Description \family typewriter static \begin_inset space ~ \end_inset \begin_inset space ~ \end_inset Optional \begin_inset space ~ \end_inset ofNullable(T) \family default Devuelve un \family typewriter Optional \family default con el valor dado si es no nulo o vacío en otro caso. \end_layout \begin_layout Description \family typewriter T \begin_inset space ~ \end_inset orElse(T) \family default Si tiene un valor lo devuelve, y si no devuelve el parámetro. \end_layout \end_deeper \begin_layout Section \emph on \lang english Streams \end_layout \begin_layout Description \family typewriter \series bold package \begin_inset space ~ \end_inset java.lang \end_layout \begin_deeper \begin_layout Description \family typewriter final \begin_inset space ~ \end_inset class \begin_inset space ~ \end_inset String \family default Tipo de los literales de cadena de caracteres, inmutable. \end_layout \begin_deeper \begin_layout Description \family typewriter boolean \begin_inset space ~ \end_inset endsWith(String) \family default Indica si la cadena tiene el sufijo indicado. \end_layout \begin_layout Description \family typewriter String \begin_inset space ~ \end_inset toUpperCase() \family default Convierte la cadena a mayúsculas con la localización por defecto. \end_layout \end_deeper \end_deeper \begin_layout Description \family typewriter \series bold package \begin_inset space ~ \end_inset java.util \end_layout \begin_deeper \begin_layout Description \family typewriter interface \begin_inset space ~ \end_inset Collection \family default Colección de elementos de un tipo \family typewriter E \family default . \end_layout \begin_deeper \begin_layout Description \family typewriter \series bold default \begin_inset space ~ \end_inset Stream \begin_inset space ~ \end_inset parallelStream() \family default \series default Devuelve un \emph on \lang english stream \emph default \lang spanish posiblemente paralelo con los elementos de la colección. \end_layout \begin_layout Description \family typewriter default \begin_inset space ~ \end_inset Stream \begin_inset space ~ \end_inset stream() \family default Devuelve un \emph on \lang english stream \emph default \lang spanish secuencial sobre los elementos de la colección. \end_layout \begin_layout Description ... \end_layout \end_deeper \end_deeper \begin_layout Description \family typewriter package \begin_inset space ~ \end_inset java.util.stream \end_layout \begin_deeper \begin_layout Description \family typewriter \series bold interface \begin_inset space ~ \end_inset Collector \family default \series default Operación de reducción de elementos de tipo \family typewriter T \family default al tipo \family typewriter A \family default con representación final de tipo \family typewriter R \family default . \end_layout \begin_deeper \begin_layout Description ... \end_layout \end_deeper \begin_layout Description \family typewriter class \begin_inset space ~ \end_inset Collectors \family default Colectores útiles. \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 static Collector>> groupingBy( \begin_inset Newline newline \end_inset Function) \end_layout \end_inset \family default \series default Aplica la función a todos los elementos y devuelve un diccionario cuyas claves son los valores devueltos por la función y cuyos valores son listas con los elementos a los que la función asocia la clave. \end_layout \begin_layout Description \family typewriter \series bold static \begin_inset space ~ \end_inset \begin_inset space ~ \end_inset Collector \begin_inset space ~ \end_inset summingInt(ToIntFunction) \family default \series default Aplica la función a cada elemento y devuelve la suma. \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 static > Collector toCollection( \begin_inset Newline newline \end_inset Supplier) \end_layout \end_inset \family default \series default Almacena los elementos en una colección proporcionada por el parámetro. \end_layout \begin_layout Description \family typewriter static \begin_inset space ~ \end_inset \begin_inset space ~ \end_inset Collector> \begin_inset space ~ \end_inset toList() \family default Almacena los elementos en una nueva lista. \end_layout \begin_layout Description \family typewriter static \begin_inset space ~ \end_inset \begin_inset space ~ \end_inset Collector> \begin_inset space ~ \end_inset toSet() \family default Almacena los elementos en un nuevo conjunto. \end_layout \end_deeper \begin_layout Description \family typewriter interface \begin_inset space ~ \end_inset java.util.stream.Stream \family default Secuencia de elementos que soporta operaciones secuenciales y paralelas. En general los métodos que devuelven (siempre) otro \emph on \lang english stream \emph default \lang spanish son perezosas; no procesan los elementos hasta que sea necesario. \end_layout \begin_deeper \begin_layout Description \family typewriter \series bold bool \begin_inset space ~ \end_inset allMatch(Predicate) \family default \series default Indica si todos los elementos del \emph on \lang english stream \emph default \lang spanish cumplen la condición. \end_layout \begin_layout Description \family typewriter \series bold bool \begin_inset space ~ \end_inset anyMatch(Predicate) \family default \series default Indica si alguno cumple la condición. \end_layout \begin_layout Description \family typewriter \begin_inset space ~ \end_inset R \begin_inset space ~ \end_inset collect(Collector) \family default Reduce los elementos con el colector dado. \end_layout \begin_layout Description \family typewriter long \begin_inset space ~ \end_inset count() \family default Devuelve el número de elementos en el \emph on \lang english stream \emph default \lang spanish . \end_layout \begin_layout Description \family typewriter \series bold Stream \begin_inset space ~ \end_inset filter(Predicate) \family default \series default Devuelve un \emph on \lang english stream \emph default \lang spanish con los elementos de este que cumplen la condición. \end_layout \begin_layout Description \family typewriter Optional \begin_inset space ~ \end_inset findAny() \family default Devuelve un elemento cualquiera del \emph on \lang english stream \emph default \lang spanish si lo hay. \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 \series bold Stream flatMap( \begin_inset Newline newline \end_inset Function>) \end_layout \end_inset \family default Devuelve un \emph on \lang english stream \emph default \lang spanish con los elementos de los \emph on \lang english streams \emph default \lang spanish resultantes de aplicar la función a cada elemento del \emph on \lang english stream \emph default \lang spanish . \end_layout \begin_layout Description \family typewriter void \begin_inset space ~ \end_inset forEach(Consumer) \family default Aplica la acción con cada elemento. \end_layout \begin_layout Description \family typewriter static \begin_inset space ~ \end_inset \begin_inset space ~ \end_inset Stream \begin_inset space ~ \end_inset of(T...) \family default Devuelve un \emph on \lang english stream \emph default \lang spanish secuencial con los elementos dados. \end_layout \begin_layout Description \family typewriter \begin_inset space ~ \end_inset Stream \begin_inset space ~ \end_inset map(Function) \family default Devuelve un \emph on \lang english stream \emph default \lang spanish resultante de aplicar la función dada a cada elemento de este. \end_layout \begin_layout Description \family typewriter Optional \begin_inset space ~ \end_inset max(Comparator) \family default Devuelve el máximo del \emph on \lang english stream \emph default \lang spanish según el comparador, salvo que esté vacío. \end_layout \begin_layout Description \family typewriter Optional \begin_inset space ~ \end_inset min(Comparator) \family default Devuelve el mínimo del \emph on \lang english stream \emph default \lang spanish según el comparador, salvo que esté vacío. \end_layout \begin_layout Description \family typewriter boolean \begin_inset space ~ \end_inset noneMatch(Predicate) \family default Indica si ningún elemento cumple la condición. \end_layout \begin_layout Description \family typewriter Optional \begin_inset space ~ \end_inset reduce(BinaryOperator) \family default Reduce los elementos del \emph on \lang english stream \emph default \lang spanish con una función de acumulación asociativa, salvo que esté vacío. \end_layout \begin_layout Description \family typewriter Stream \begin_inset space ~ \end_inset sorted() \family default Devuelve un \emph on \lang english stream \emph default \lang spanish con los elementos de este ordenados por su orden natural. \end_layout \begin_layout Description \family typewriter Stream \begin_inset space ~ \end_inset sorted(Comparator) \family default Como \family typewriter sorted() \family default pero usa el comparador indicado. \end_layout \end_deeper \end_deeper \begin_layout Section Introspección \end_layout \begin_layout Standard Una clase puede considerarse un objeto, y una \series bold metaclase \series default es una clase cuyas instancias son clases. La \series bold introspección \series default o \series bold reflexión \series default es la posibilidad de analizar el código del programa en tiempo de ejecución, y la \series bold metaprogramación \series default es la posibilidad de modificarlo o generarlo desde el propio lenguaje. \end_layout \begin_layout Standard Smalltalk, Python y Ruby proporcionan metaprogramación, y Java proporciona introspección. Los objetos clase tienen atributos con las propiedades de una clase y métodos para su acceso y, en el caso de metaprogramación, su modificación. \end_layout \begin_layout Standard La introspección es útil en inspectores de código, navegadores de clases, creadores de interfaces de usuario, lenguajes específicos de dominio ( \series bold DSLs \series default , \emph on \lang english Domain-Specific Languages \emph default \lang spanish ), etc., pero \begin_inset Quotes cld \end_inset convierte \begin_inset Quotes crd \end_inset errores en tiempo de compilación en errores en tiempo de ejecución y el código suele ser largo y tedioso, por lo que se recomienda solo usarlo para instanciar objetos y acceder a ellos con alguna interfaz o superclase conocida en tiempo de ejecución. \end_layout \begin_layout Description \family typewriter \series bold package \begin_inset space ~ \end_inset java.lang \end_layout \begin_deeper \begin_layout Description \family typewriter final \begin_inset space ~ \end_inset class \begin_inset space ~ \end_inset Class \family default El único objeto es la entidad \family typewriter T \family default , que es devuelto por la expresión \family typewriter T.class \family default . \end_layout \begin_deeper \begin_layout Description \family typewriter \series medium \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 static \begin_inset space ~ \end_inset Class \begin_inset space ~ \end_inset forName(String) \begin_inset space ~ \end_inset throws \begin_inset space ~ \end_inset ClassNotFoundException \end_layout \end_inset \family default \series default Clase con el nombre indicado. \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 \series bold Constructor[] \begin_inset space ~ \end_inset getConstructors() \begin_inset space ~ \end_inset throws \begin_inset space ~ \end_inset SecurityException \end_layout \end_inset \family default Constructores públicos de la clase. \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 \series bold Field[] \begin_inset space ~ \end_inset getFields() \begin_inset space ~ \end_inset throws \begin_inset space ~ \end_inset SecurityException \end_layout \end_inset \family default Atributos públicos de la clase. \end_layout \begin_layout Description \family typewriter Class[] \begin_inset space ~ \end_inset getInterfaces() \family default Interfaces que implementa la clase o interfaz. \end_layout \begin_layout Description \family typewriter Method[] \begin_inset space ~ \end_inset getMethods() \begin_inset space ~ \end_inset throws \begin_inset space ~ \end_inset SecurityException \family default Métodos públicos de la clase o interfaz, incluyendo los de las superclases. \end_layout \begin_layout Description \family typewriter String \begin_inset space ~ \end_inset getName() \family default Nombre de la entidad. \end_layout \begin_layout Description \family typewriter Package \begin_inset space ~ \end_inset getPackage() \family default Paquete en que se encuentra la entidad. \end_layout \begin_layout Description \family typewriter Class \begin_inset space ~ \end_inset getSuperClass() \family default Superclase de la clase, salvo de \family typewriter Object \family default . \end_layout \begin_layout Description \family typewriter T \begin_inset space ~ \end_inset newInstance() \begin_inset space ~ \end_inset throws \begin_inset space ~ \end_inset InstantiationException, \begin_inset space ~ \end_inset IllegalAccessException \family default Crea una instancia de la clase con el constructor por defecto, si existe. \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 class \begin_inset space ~ \end_inset ClassNotFoundException \end_layout \end_inset \family default \series default No se ha encontrado una definición de la clase indicada. \end_layout \begin_layout Description \family typewriter \series bold class \begin_inset space ~ \end_inset IllegalAccessException \family default \series default El método actualmente en ejecución no tiene acceso a la definición de la entidad o el miembro indicado. \end_layout \begin_layout Description \family typewriter class \begin_inset space ~ \end_inset InstantiationException \family default La clase no tiene constructor por defecto. \end_layout \begin_layout Description \family typewriter class \begin_inset space ~ \end_inset Object \end_layout \begin_deeper \begin_layout Description \family typewriter Class \begin_inset space ~ \end_inset getClass() \family default Devuelve la clase en tiempo de ejecución del objeto. \end_layout \end_deeper \begin_layout Description \family typewriter \series bold class \begin_inset space ~ \end_inset Package \family default \series default Paquete de código. \end_layout \begin_layout Description \family typewriter class \begin_inset space ~ \end_inset SecurityException \family default Violación de seguridad. \end_layout \end_deeper \begin_layout Description \family typewriter \series bold package \begin_inset space ~ \end_inset java.lang.reflect \end_layout \begin_deeper \begin_layout Description \family typewriter \series bold final \begin_inset space ~ \end_inset class \begin_inset space ~ \end_inset Constructor \begin_inset space ~ \end_inset extends \begin_inset space ~ \end_inset Executable \family default \series default Constructor de la clase \family typewriter T \family default . \end_layout \begin_layout Description \family typewriter abstract \begin_inset space ~ \end_inset class \begin_inset space ~ \end_inset Executable \begin_inset space ~ \end_inset extends \begin_inset space ~ \end_inset AccessibleObject \begin_inset space ~ \end_inset implements \begin_inset space ~ \end_inset Member \family default \end_layout \begin_layout Description \family typewriter final \begin_inset space ~ \end_inset class \begin_inset space ~ \end_inset Field \begin_inset space ~ \end_inset implements \begin_inset space ~ \end_inset Member \family default Atributo de una clase. \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 Object get(Object) throws IllegalArgumentException, \begin_inset Newline newline \end_inset IllegalAccessException \end_layout \end_inset \family default \series default Valor del atributo en el objeto indicado. \end_layout \end_deeper \begin_layout Description \family typewriter public \begin_inset space ~ \end_inset Class \begin_inset space ~ \end_inset getType() \family default Tipo del atributo. \end_layout \begin_deeper \begin_layout Description \family typewriter public \begin_inset space ~ \end_inset void \begin_inset space ~ \end_inset set(Object,Object) \family default Establece el valor del atributo en el primer objeto como el segundo objeto. \end_layout \end_deeper \begin_layout Description \family typewriter interface \begin_inset space ~ \end_inset Member \family default Miembro de una clase. \end_layout \begin_deeper \begin_layout Description \family typewriter Class \begin_inset space ~ \end_inset getDeclaringClass() \family default Clase que declara el miembro. \end_layout \begin_layout Description \family typewriter String \begin_inset space ~ \end_inset getName() \family default Nombre del miembro. \end_layout \begin_layout Description ... \end_layout \end_deeper \begin_layout Description \family typewriter final \begin_inset space ~ \end_inset class \begin_inset space ~ \end_inset Method \begin_inset space ~ \end_inset extends \begin_inset space ~ \end_inset Executable \family default Método de una clase. \end_layout \begin_deeper \begin_layout Description \family typewriter Class[] \begin_inset space ~ \end_inset getParameterTypes() \family default Tipos de los parámetros del método. \end_layout \begin_layout Description \family typewriter \series bold Class \begin_inset space ~ \end_inset getReturnType() \family default \series default Tipo de retorno del método. \end_layout \begin_layout Description \family typewriter Object \begin_inset space ~ \end_inset invoke(Object,Object...) \family default Invoca el método sobre el objeto indicado con los parámetros indicados. Si el método es estático, el objeto es ignorado y puede ser \family typewriter null \family default . \end_layout \end_deeper \end_deeper \begin_layout Section Anotaciones \end_layout \begin_layout Standard La anotaciones en Java permiten adjuntar metadatos al código que pueden ser leídos por el compilador, herramientas como de generación de código o el propio programa con introspección. \end_layout \begin_layout Standard Estas se declaran con un tipo introspección, de la forma [ \family typewriter \emph on visibilidad \family default \emph default ] \family typewriter @interface \emph on Nombre \emph default { \emph on campo \family default \emph default * \family typewriter } \family default , donde los campos tienen forma \family typewriter \emph on Tipo \emph default \emph on nombre \emph default () \family default [ \family typewriter default \emph on valor \family default \emph default ] \family typewriter ; \family default , siendo \family typewriter \emph on valor \family default \emph default del \family typewriter \emph on Tipo \family default \emph default indicado. Para anotar un tipo, método, etc., se coloca \family typewriter @ \emph on Anotación \emph default ( \family default [ \family typewriter \emph on valor \emph default , \family default ...] \family typewriter ) \family default o \family typewriter @ \emph on Anotación \emph default ( \emph on nombre \emph default = \emph on valor \emph default , \family default ... \family typewriter ) \family default como un modificador de este, normalmente antes del resto de modificadores. \end_layout \begin_layout Standard Si el valor es de tipo \family typewriter T[] \family default , se puede indicar una lista de un solo elemento indicando simplemente el elemento. Si es un enumerado \family typewriter \emph on Enum \family default \emph default , se puede usar \family typewriter \emph on VAL \family default \emph default en vez de \family typewriter \emph on Enum \emph default . \emph on VAL \family default \emph default . \end_layout \begin_layout Description \family typewriter package \begin_inset space ~ \end_inset java.lang \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 @Documented @Target(TYPE) @Retention(RUNTIME) @interface \begin_inset Newline newline \end_inset FunctionalInterface \end_layout \end_inset \family default \series default Indica que lo anotado es una interfaz funcional. \end_layout \begin_layout Description \family typewriter @Target(METHOD) \begin_inset space ~ \end_inset @Retention(SOURCE) \begin_inset space ~ \end_inset @interface \begin_inset space ~ \end_inset Override \family default Indica que el método sobrescribe a un método de una superclase. Genera un error si no es así. \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 \series bold @Target({TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE}) \begin_inset Newline newline \end_inset @Retention(SOURCE) @interface SuppressWarnings \end_layout \end_inset \family default Suprime las alertas del compilador en el elemento anotado. \end_layout \begin_deeper \begin_layout Description \family typewriter String[] \begin_inset space ~ \end_inset value \family default Conjunto de alertas a suprimir. \end_layout \end_deeper \end_deeper \begin_layout Description \family typewriter package \begin_inset space ~ \end_inset java.lang.annotation \end_layout \begin_deeper \begin_layout Description \family typewriter \series bold interface \begin_inset space ~ \end_inset Annotation \family default \series default Interfaz implementada por todos los tipos de anotación. \end_layout \begin_deeper \begin_layout Description ... \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 @Documented @Retention(RUNTIME) @Target(ANNOTATION_TYPE) @interface \begin_inset Newline newline \end_inset Documented \end_layout \end_inset \family default \series default Indica a javadoc que documente la anotación cuando la encuentre en la definició n de un tipo. \end_layout \begin_layout Description \family typewriter \series bold enum \begin_inset space ~ \end_inset ElementType \family default \series default Tipo de elemento del programa. \end_layout \begin_deeper \begin_layout Description \family typewriter ANNOTATION_TYPE \family default Anotación. \end_layout \begin_layout Description \family typewriter CONSTRUCTOR \family default Constructor. \end_layout \begin_layout Description \family typewriter FIELD \family default Atributo. \end_layout \begin_layout Description \family typewriter LOCAL_VARIABLE \family default Variable local. \end_layout \begin_layout Description \family typewriter METHOD \family default Método. \end_layout \begin_layout Description \family typewriter PARAMETER \family default Parámetro formal. \end_layout \begin_layout Description \family typewriter TYPE \family default Clase, interfaz, enumerado o anotación. \end_layout \begin_layout Description \family typewriter TYPE_PARAMETER \family default Parámetro de tipo. \end_layout \begin_layout Description ... \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 @Documented @Retention(RUNTIME) @Target(ANNOTATION_TYPE) @interface \begin_inset Newline newline \end_inset Retention \end_layout \end_inset \family default \series default Indica hasta cuándo se debe retener una anotación. \end_layout \begin_deeper \begin_layout Description \family typewriter RetentionPolicy \begin_inset space ~ \end_inset value \family default Política de retención. \end_layout \end_deeper \begin_layout Description \family typewriter enum \begin_inset space ~ \end_inset RetentionPolicy \end_layout \begin_deeper \begin_layout Description \family typewriter RUNTIME \family default La anotación se guarda en el fichero \family typewriter .class \family default y la JVM la carga para ser leída con introspección. \end_layout \begin_layout Description \family typewriter SOURCE \family default El compilador descarta la anotación. \end_layout \end_deeper \begin_layout Description \family typewriter @Documented \begin_inset space ~ \end_inset @Retention(RUNTIME) \begin_inset space ~ \end_inset @Target(ANNOTATION_TYPE) \begin_inset space ~ \end_inset @interface \begin_inset space ~ \end_inset Target \family default Indica los contextos en que se puede aplicar una anotación. \end_layout \begin_deeper \begin_layout Description \family typewriter ElementType[] \begin_inset space ~ \end_inset value \family default Cuándo es la anotación aplicable. \end_layout \end_deeper \end_deeper \begin_layout Description \family typewriter package \begin_inset space ~ \end_inset java.lang.reflect \end_layout \begin_deeper \begin_layout Description \family typewriter class \begin_inset space ~ \end_inset AccessibleObject \begin_inset space ~ \end_inset implements \begin_inset space ~ \end_inset AnnotatedElement \end_layout \begin_layout Description \family typewriter interface \begin_inset space ~ \end_inset AnnotatedElement \end_layout \begin_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 \series bold default boolean isAnnotationPresent(Class) \end_layout \end_inset \family default Indica si el elemento incluye alguna anotación del tipo especificado. \end_layout \begin_layout Description ... \end_layout \end_deeper \end_deeper \begin_layout Standard \begin_inset Note Comment status open \begin_layout Section Inyección de dependencias \end_layout \begin_layout Plain Layout No entra en el examen. \end_layout \end_inset \end_layout \end_body \end_document