diff options
| author | Juan Marín Noguera <juan.marinn@um.es> | 2020-02-24 11:22:00 +0100 |
|---|---|---|
| committer | Juan Marín Noguera <juan.marinn@um.es> | 2020-02-24 11:22:00 +0100 |
| commit | 79e1a51eb55d0df43323c0fe77a7d55b2c2bd17d (patch) | |
| tree | 89bd93a329f9deb72efce8fed205b69918c3d9b9 /poo/n2.lyx | |
| parent | 1f7f9bcc7660fba0827a62c3068d5c7082f025d7 (diff) | |
POO
Diffstat (limited to 'poo/n2.lyx')
| -rw-r--r-- | poo/n2.lyx | 1168 |
1 files changed, 1168 insertions, 0 deletions
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 |
