|
|
Códigos disponibles en git |
¿Por qué?
Lenguajes Compilados | Lenguajes Interpretados | ||
---|---|---|---|
>compiladorXA prog.ext >prog.exe |
>prog.exe ERROR!!! |
>interpreteXA prog.ext |
>interpreteYA prog.ext |
|
|
¿Qué?
Plataforma de Desarrollo de Sun MicroSystems y Oracle | ||
---|---|---|
|
|
|
|
|
¿Para qué?
|
¿Cómo?
Multi-paradigma | Elementos de Programación | Capacitación |
---|---|---|
Programación Imperativa |
|
|
Programación Estructurada |
|
|
Programación basada en Objetos |
|
|
Programación Orientada a Objetos |
|
|
Programación Modular |
|
|
Programación con Excepciones |
|
|
Programación Parametrizada |
|
|
Programación Recursiva |
|
|
Programación Funcional |
|
|
Programación Concurrente |
|
|
Programación Reactiva |
|
|
Programa
|
|
|
|
Programa | java |
---|---|
|
|
Comentarios | java |
---|---|
|
|
Programación Imperativa
Tipos Primitivos | Sentencias simples | Operadores | Expresiones |
---|---|---|---|
Tipo numericos, valores y operadores aritméticos unarios y binarios |
Salida de datos por consola |
Operadores de de bits, unario y binarios |
Precedencia y asociatividad de operadores |
Tipo char y literales String, valores y operadores de concatenación |
Entrada de datos por consola |
Operadores y conversión de tipos |
Operador paréntesis |
Tipo boolean, valores y operadores lógicos unario y binarios |
Sentencias de declaración de variables y constantes |
Operadores de ternario |
|
Operadores relacionales, operadores de igualdad, desigualdad y ordenacion |
Sentencia de asignación |
Operadores con efectos laterales: acumulación e incremento/decremente y coma |
Tipos Primitivos
|
|
Tipos numéricos
Literales
|
|
Operadores unarios
|
|
Operadores binarios
|
|
Tipo boolean
Valores de tipo boolean
boolean | java |
---|---|
|
|
Operadores unarios
operador unario prefijo | java |
---|---|
|
|
Operadores binarios
operadores binarios infijos | java |
---|---|
|
|
Tipo char
Literales de tipo char
char | java |
---|---|
|
|
Literales String
Literales de tipo string
string | java |
---|---|
|
|
Operador de Concatenación
Concatenación | java |
---|---|
|
|
Operadores Relacionales
Tipo numerico
Operadores binarios infijos | java |
---|---|
|
|
Tipo char
Operadores binarios infijos, | java |
---|---|
|
|
Tipo boolean
Operadores binarios infijos | java |
---|---|
|
|
Tipo string
Operadores binarios infijos, | java |
---|---|
|
|
Sentencias Simples
Salida de Datos
Salida de Datos | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
|
||
Entrada de Datos
Entrada de datos | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Sentencia de Declaración de Variable
Sentencia de Declaración de Variable | java |
---|---|
|
|
Palabras Reservadas |
|
Aplicaciones | ||
---|---|---|
Sentencia de Asignación
Operador de asignación | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Sentencia de Declaración de Constante
Sentencia de Declaración de Constante | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
|
||
Operadores
Operadores de Bits
Sintaxis | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Operador Ternario
Operador ternario | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Operadores de Acumulación
Operador de acumulación | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Operadores de Incremento y Decremento
Operador de incremento/decremento | java |
---|---|
|
|
Aplicaciones |
---|
Operador Coma
Operador coma | java |
---|---|
|
|
Conversión de Tipos
|
|
- Conversión explícita: | java |
---|---|
|
|
Expresiones
Precedencia y asociatividad
Expresiones | java |
---|---|
|
|
Operador Paréntesis
Operador paréntesis | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Programación Estructurada
Sentencias alternativas | Sentencias iterativas | Sentencia secuencial | Arrays |
---|---|---|---|
Sentencias if y switch |
Sentencias while, do/while, for (ni "break" ni continue) |
Sentencia con ámbitos de bloque y colisión y ocultación de identificadores |
Colección homogénea de datos, creación, modificaciones y consultas |
Sentencias Alternativas
Sentencia Alternativa | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
|
Sentencias Iterativas
Sentencia Iterativa | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Sentencia Secuencial
Sentencia Secuencial | java |
---|---|
|
|
Ámbito de bloque | java |
---|---|
|
|
Ámbito de bloque | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
|
||
Tablas
Creación | java |
---|---|
|
|
Acceso a elementos | java |
---|---|
|
|
Referencias | java |
---|---|
|
|
Modificación de elementos | java |
---|---|
|
|
Valor null | java |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Programación Basada a Objetos
|
|
Vista Pública de las Clases
Nombre de la Clase
Sintaxis | Ejemplo | |
---|---|---|
|
|
|
Cabecera de Métodos de la Clase
Sintaxis |
Ejemplo |
|
|
Sobrecarga de Métodos de la Clase
Descripción | Ejemplo |
---|---|
|
|
Constructores de la Clase
Descripción | Ejemplo |
---|---|
|
|
Destructores de la Clase
Descripción | Ejemplo |
---|---|
Son métodos que reúnen las tareas de liberación de recursos (no destruyen) y se lanzan automáticamente en la destrucción de objetos. Además: |
|
Vista Pública de los Objetos
Creación de objetos
Sintaxis f |
Ejemplo |
|
new es un operador unario prefijo cuyo operando es una clase de objetos y devuelve la dirección de memoria donde se ha reservado el espacio para dicho objeto; |
|
|
Referencia a un objeto
Sintaxis | Ejemplo | |
---|---|---|
Es una variable puntero que alberga la dirección de un objeto de una clase. |
|
Operadores | Ejemplo: |
---|---|
|
|
Paso de mensajes
Sintaxis | Ejemplo |
---|---|
|
|
Creación de vectores de objetos
Sintaxis g | Ejemplo | |
---|---|---|
new es operador unario prefijo cuyo operando es un vector de referencias a objetos de una clase y devuelve la dirección de memoria donde se ha reservado el espacio para dicho vector; |
|
|
Sintaxis h | Ejemplo |
---|---|
|
|
Referencia a un vector de referencias a objetos
Definición | Sintaxis | Ejemplo | ||
---|---|---|---|---|
Es una variable puntero que alberga la dirección de un vector de referencias a objetos de una clase. |
|
|
Vista Privada de las Clases
Definición de Atributos | Definición de Constructores | Definición de Métodos | Referencia this | Métodos privados |
---|---|---|---|---|
|
|
|
|
|
Aserciones | Objetos valor |
---|---|
|
|
Definición de atributos
|
|
|
Definición de constructores
|
|
Definición de metodos
|
|
|
|
Referencia this
|
|
|
|
|
|
Métodos privados
|
|
Resumen de Implantación de Clases | |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Aserciones
|
|
|
|
|
|
Tipos de Errores | ||
---|---|---|
|
|
|
|
|
Contexto | Aplicación | Biblioteca |
---|---|---|
|
|
|
Ej. la función factorial contemplará: |
||
|
||
|
|
|
|
|
|
Programación defensiva | |
---|---|
|
|
|
|
Falta de cohesión | Validación de datos | |
---|---|---|
|
|
|
Sentencia assert | Ejemplo |
---|---|
|
|
|
|
|
Aplicaciones | ||
---|---|---|
Objetos Valor
|
|
Aplicaciones | ||
---|---|---|
|
Vista Privada de los Objetos
Desencadenamiento de instanciaciones | Desencadenamiento de mensajes |
---|---|
|
|
|
|
|
|
|
Aplicaciones | ||
---|---|---|
Miembros de Clase
Miembros de instancia | Miembros de clase o estáticos |
---|---|
|
|
|
|
|
|
Atributos estáticos | Métodos estáticos |
---|---|
|
|
|
|
Aplicaciones | ||
---|---|---|
Código estático | Sintaxis | Ejemplo |
---|---|---|
|
|
|
Método main | Ejemplo | ||
---|---|---|---|
public static void main(String[] args) { (1) ... }
|
|
||
c:\>java Clase param1 param2 (1)
|
Clases de Utilidad | Clase System | ||||
---|---|---|---|---|---|
|
|
Clase Math | |
---|---|
|
|
Clases de Recubrimiento
Clases de Recubrimiento | Clase Character |
---|---|
|
Clase Integer | |
---|---|
|
|
Clase Boolean | Ejemplos |
---|---|
|
|
Cadenas de Caracteres
Definición | Constantes, inmutables | Variables, mutables |
---|---|---|
|
|
|
Clase String | |
---|---|
|
|
|
|
|
|
Clases StringBuffer y StringBuilder | |
---|---|
|
|
Literales String | Ejemplos |
---|---|
"<caracter>..."
|
|
Aplicaciones | ||
---|---|---|
|
Enumerados
Enumerados | Ejemplos |
---|---|
|
|
Enumerado | Clase con static |
---|---|
|
|
Métodos implícitos | Sintaxis |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Programación Orientada a Objetos
Relación de Herencia
Transmisión | |
---|---|
|
Colaboración entre objetos | Ejemplo | |
---|---|---|
|
|
|
Tipos de Relación de Herencia | Ejemplos | |
---|---|---|
|
Jerarquías de Clasificación
Definición | Ejemplos |
---|---|
|
Herencia por extensión
Sintaxis | Ejemplo | |
---|---|---|
|
|
Especialización por adición
Atributos | Métodos | Constructores |
---|---|---|
|
|
|
Implicaciones sobre los objetos | Ejemplo |
---|---|
|
Aplicaciones | ||
---|---|---|
|
Miembros protegidos
Cuando la clase padre no transmite los métodos públicos necesarios para manipular los atributos privados transmitidos desde la clase padre en los métodos añadidos en la clase hija |
||
|
|
|
|
|
Aplicaciones | ||
---|---|---|
|
Especialización por redefinición
|
Aplicaciones | ||
---|---|---|
|
Referencia super
|
Aplicaciones | ||
---|---|---|
|
Clases Abstractas
Clases Concretas | Clases Abstractas | |
---|---|---|
|
|
|
Aplicaciones | ||
---|---|---|
|
- Posibilidades: | |
---|---|
|
|
- Posibilidades: | |
---|---|
|
|
|
Herencia por Implementación
Interfaces | Ejemplo |
---|---|
|
|
Aplicaciones | ||
---|---|---|
|
|
|
Limitaciones de la Herencia
Clases final | Enumerados | Metodos final |
---|---|---|
|
|
|
Beneficios de la Herencia
Integridad de la Arquitectura del Software |
Reusabilidad del código |
|
|
|
Polimorfismo
Introducción | Ejemplo |
---|---|
|
|
|
|
|
|
|
Definición | Ejemplo | |
---|---|---|
|
En un punto dado, existen listas, en otro punto, existen conjuntos y, en otro punto, pueden existir indiferentemente listas o conjuntos
|
|
- Comportamiento: | - Limitación: |
---|---|
|
|
|
|
Formalización
Enlace: | Ejemplo |
---|---|
|
|
Tipos de Enlace | Ejemplo |
---|---|
|
|
|
|
Polimorfismo | Ejemplos | |
---|---|---|
|
|
|
Polimorfismo vs sobrecarga
Sobrecarga | Ejemplos | |
---|---|---|
es un enlace estático entre un mensaje y el método que se ejecuta; |
|
|
Beneficios del Polimorfismo
Abstracción | Extensibilidad |
---|---|
“Entonces es el receptor del mensaje el que determina cómo se interpretará el mensaje y no lo hará el emisor. El emisor sólo necesita conocer qué comportamiento puede desarrollar el otro objeto, no qué clase de objeto cree que es y, por tanto, qué método realiza en cada instante el comportamiento. Esto es una herramienta extremadamente importante para permitirnos desarrollar sistemas flexibles. De esta manera, sólo tenemos especificado qué ocurre pero no cómo ocurrirá. Mediante esta forma de delegar qué ocurrirá, se obtiene un sistema flexible y resistente a las modificaciones”
— Jacobson (creador de los Casos de Uso)
1992 |
“Emplear las consultas de tipo durante la ejecución para implantar un enunciado de conmutación – estructura de control de flujo CASE o IF-THEN-ELSE encadenados – en un campo de tipo destruye toda la modularidad de un programa y anula los objetivos de la programación orientada a objetos. También es propensa a errores; […] La experiencia demuestra que los programadores que se formaron con lenguajes como Pascal o C encuentran esta trampa muy difícil de resistir. Una razón es que este estilo requiere menos premeditación […]; en este contexto, semejante falta de premeditación muchas veces no es más que una chapuza.”
— Stroustrup (creador de C++)
1993 |
|
Conversión de Tipos
Conversión ascendente (upcast) | Conversión descendente (downcast) |
---|---|
cuando se transforma una dirección de un objeto de una clase a una dirección del objeto pero de una clase ascedente (padre, abuela, …) ; |
cuando se transforma una dirección de un objeto de una clase a una dirección del objeto pero de una clase derivada (hija, nieta, …) ; |
Ejemplo | |
---|---|
|
|
Clase Object
|
|
Herencia y Enumerados
Sin enumerados | Con enumerados |
---|---|
|
|
Aplicaciones | ||
---|---|---|
|
|
Programación Modular
Modularidad | Niveles |
---|---|
|
|
|
|
|
|
|
Beneficios | |
---|---|
|
|
Jerarquía de Paquetes
Nombres de paquetes | Ejemplos |
---|---|
|
|
|
|
Declaración de paquete | Ejemplo |
---|---|
|
|
|
Visibilidad de Clasificadores
|
package pooa.ter.modelos; public class MTablero { ... }
package pooa.ter.controladores; public class CAbrir { ... } class CPoner { ... } class CMover { ... } |
Importación de Clasificadores
Acceso a las clases | Prohibido acceso a las clases |
---|---|
|
|
Importación | Ejemplo |
---|---|
|
|
|
|
|
|
Colisión de nombres | Ejemplo | |
---|---|---|
|
|
|
|
|
Visibilidad de Miembros
|
|
|||
|
|
|
|
|
Paquetes y Herencia
|
|
Ejemplo | |
---|---|
|
|
|
|
Aplicaciones | ||
---|---|---|
API de J2SE
Biblioteca estandar (Application Programming Interface) | |
---|---|
|
|
Clase java.util.Random | Ejemplo | ||||
---|---|---|---|---|---|
Random() {} Random(long seed) {} int nextInt(int top)(1) int nextInt() long nextLong() float nextFloat() double nextDouble() double nextGaussian() boolean nextBoolean() void nextBytes(byte[] bytes) void setSeed(long seed)(2)
|
|
Clases de Expresiones Regulares | Ejemplo |
---|---|
static Pattern compile(String expReg) Matcher matcher(String text) boolean find() String group() int start() int end() String replaceAll(String text) |
|
Clases de Calendario | Ejemplo |
---|---|
int getYear() LocalDateTime plusYears(long years) LocalDateTime minusYears(long years) LocalDateTime withYear(int year) Month getMonth() int getMonthValue() LocalDateTime plusMonths(long months) LocalDateTime minusMonths(long months) LocalDateTime withDayOfMonth(int dayOfMonth) LocalDateTime withMonth(int month) LocalDateTime plusWeeks(long weeks) LocalDateTime minusWeeks(long weeks) int getDayOfMonth() DayOfWeek getDayOfWeek() int getDayOfYear() LocalDateTime plusDays(long days) LocalDateTime minusDays(long days) LocalDateTime withDayOfYear(int dayOfYear) int getHour() LocalDateTime plusHours(long hours) LocalDateTime minusHours(long hours) LocalDateTime withHour(int hour) int getMinute() LocalDateTime plusMinutes(long minutes) LocalDateTime minusMinutes(long minutes) LocalDateTime withMinute(int minute) int getSecond() LocalDateTime plusSeconds(long seconds) LocalDateTime minusSeconds(long seconds) LocalDateTime withSecond(int second) int getNano() LocalDateTime plusNanos(long nanos) LocalDateTime minusNanos(long nanos) LocalDateTime withNano(int nanoOfSecond) LocalDateTime plus(long amountToAdd, TemporalUnit unit) LocalDateTime minus(long amountToSubtract, TemporalUnit unit) LocalDateTime plus(TemporalAmount amountToAdd) LocalDateTime minus(TemporalAmount amountToSubtract) LocalDateTime with(TemporalAdjuster adjuster) LocalDateTime with(TemporalField field, long newValue) long getLong(TemporalField field) boolean isAfter(LocalDateTime other) boolean isBefore(LocalDateTime other) LocalDate toLocalDate() LocalTime toLocalTime() static LocalDateTime now() static LocalDateTime now(Clock clock) static LocalDateTime now(ZoneId zone) static LocalDateTime of(LocalDate date, LocalTime time) static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute) static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute) static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second) static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second) static LocalDateTime of(int year, Month month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond) static LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond) static LocalDateTime parse(CharSequence text) static LocalDateTime parse(CharSequence text, DateTimeFormatter formatter) ... } class LocalDate { public int getYear() ... } class LocalTime { public int getHour() ... } JANUARY ... int maxLength() |
|
Programación con Excepciones
|
|
|
|
|
|
|
Gestión de excepciones |
|
|
|
Elevación de Excepciones
Sentencia throw | |||
---|---|---|---|
|
throw <expresión>(1)
|
|
|
|
|
Cláusula throws | |
---|---|
|
|
|
|
Captura de Excepciones
Excepciones no comprobadas | Excepciones comprobadas | |
---|---|---|
|
|
|
Sentencia try/catch/finally | |
---|---|
|
|
Ejemplo | Ejecución |
---|---|
|
|
|
|
|
|
Delegación de Excepciones
Delegación | Ejemplo |
---|---|
|
|
Excepciones Polimorficas
|
|
|
|
|
|
Clasificación de Excepciones
Ejemplo: dispensers | ||
---|---|---|
|
|
Flujos
|
|
Flujos de Bytes
|
|
Flujos de Caracteres
|
|
Otros Flujos
Flujos de conversión | |
---|---|
|
|
Flujos de Datos | ||
---|---|---|
|
|
|
Varios flujos | |
---|---|
|
|
|
|
|
|
Ficheros
Ejemplo: | |
---|---|
|
|
Ficheros de texto | |
---|---|
|
|
|
|
Ficheros binarios | |
---|---|
|
|
|
|
Serialización de Objetos
Serialización de Objetos | |
---|---|
|
Flujos de Objetos | |
---|---|
|
|
|
|
|
|
|
|
|
Serilización por defecto
|
|
|
|
Serialización personalizadas
Ejemplos | |
---|---|
|
|
|
|
|
|
Programación Parametrizada
Genericos | |
---|---|
|
|
- Dispensers : fractions - objects | |
---|---|
|
|
Clases Genéricas
Sintaxis | Ejemplo |
---|---|
|
|
|
|
|
|
|
|
Clases genéricas y herencia
Ejemplo | |
---|---|
|
|
|
|
|
|
Limitaciones de las clases genéricas
Ejemplo | |
---|---|
|
|
|
|
|
|
|
|
Parámetros Limitados
Sintaxis: | Ejemplo |
---|---|
|
|
Parámetros Comodines
|
|
La razón es que si fuera así, entonces las siguientes sentencias, harían que pudiéramos copiar una referencia a un entero en una referencia a un doble, lo cual es incorrecto |
|
|
|
|
Métodos Genéricos
|
|
Aplicaciones | ||
---|---|---|
|
Colecciones
Java proporciona en el paquete java.util un conjunto de clases para representar y manejar estructuras de datos. |
|
|
|
|
|
|
|
Listas
|
|
|
|
-
donde el método remove() debe llamarse sólo después de next() o previous(), y elimina de la colección el último elemento devuelto por éstos;
-
donde add() inserta justo antes del elemento que se obtendría con next() y justo después del elemento que se obtendría con previous();
-
set() reemplaza el último elemento devuelto por next() o previous(), y sólo puede invocarse si después de estas operaciones no se ha invocado add() o set();
-
Las clases que implementan el interfaz List<E> son:
-
|
|
|
|
|
|
|
|
Colas
|
|
Excepción | No excepción | |
---|---|---|
Inserción |
add() |
offer() |
Extracción |
remove() |
poll() |
Consulta |
element() |
peek() |
-
La única clase que implementa el interfaz Queue<E> es:
|
|
|
|
-
Las clases que implementan el interfaz Deque<E> son:
|
|
|
|
Conjuntos
-
Representa una colección de elementos no repetidos. No añade ningún método nuevo a Collection<E>, sólo estipula ciertas restricciones en sus métodos;
-
Las clases que implementan este interfaz son:
|
|
|
|
|
|
|
|
|
|
-
La única clase que implementa el interfaz NavigableSet<E> es:
|
|
Mapas
|
|
-
Las clases que implementan este interfaz son:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
La única clase que implementa el interfaz NavigableMap<K,V> es:
|
|
Aplicaciones | ||
---|---|---|
|
Sintesis
Bibliografía
Obra, Autor y Edición | Portada | Obra, Autor y Edición | Portada |
---|---|---|---|
Ponente
|
|
|