|
|
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
|
|
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 y Métodos Estáticos
Atributos estáticos | Métodos estáticos |
---|---|
|
|
|
|
|
|
Código estático
Sintaxis | Ejemplos | |
---|---|---|
|
|
|
Clases de Utilidad
En librerías y proyectos | Clase System |
---|---|
|
|
Clase Math | |
---|---|
|
|
Cadenas de Caracteres
Definición | Constantes, inmutables | Variables, mutables |
---|---|---|
|
|
|
Clase String
Clase String | |
---|---|
|
|
|
|
|
|
Clase StringBuffer y StringBuilder
Clase StringBuffer | Clase StringBuilder |
---|---|
|
|
Literales String
Ejemplos | |
---|---|
"<caracter>..."
|
|
Aplicaciones | ||
---|---|---|
|
Clases de Recubrimiento
Clases de Recubrimiento | Clase Character |
---|---|
|
Clase Integer | |
---|---|
|
|
Clase Boolean | Ejemplos |
---|---|
|
|
Enumerados
Enumerados | Ejemplos |
---|---|
|
|
Enumerado | Clase con static |
---|---|
|
|
Métodos implícitos | Sintaxis |
---|---|
|
|
|
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 |
---|---|
|
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 |
||
|
|
|
|
|
Especialización por redefinición
|
Referencia super
|
Clase Object
|
|
Clases Abstractas
Clases Concretas | Clases Abstractas | |
---|---|---|
|
|
-
donde los métodos abstractos no pueden ser private.
Ejemplos | |
---|---|
En un dispensador NO acotado se pueden meter o sacar elementos sin limitación para el número de elementos; una pila es un dispensador con política LIFO; una cola es una dispensador con política FIFO |
Ejemplos | |
---|---|
|
|
|
|
Ejemplo: | |
---|---|
|
|
|
Herencia por Implementación
Interfaces | Ejemplo |
---|---|
|
|
-
donde todos los métodos del interfaz son públicos.
Ejemplo | |
---|---|
Un dispensador NO acotado es un dispensador implantado con listas dinámicas; un dispensador acotado es un dispensador implantado con vectores |
Ejemplos |
|
|
|
|
Ejemplo | |
---|---|
|
|
Limitaciones de la Herencia
|
|
|
Beneficios de la Herencia
|
|
Polimorfismo
Definició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 |
|
Ejemplo: | ||
---|---|---|
|
A lo largo de la historia, en este mundo existe la jerarquía de personas: mujeres y hombres. Pero en ciertos momento y en ciertos países, no existe polimorfismo: el lugar de una mujer no lo puede ocupar un hombre y el de un hombre no lo puede ocupar una mujer. Mientras que, en otros momentos u otros países, el lugar de una persona es indiferentemente ocupado por una mujer o un hombre. |
|
|
Comportamiento: | Limitación: | |
---|---|---|
|
cuando se lanza un mensaje a un objeto a travéz de una referencia polimorfica se ejecuta el método prescrito en la clase del objeto que recibe el mensaje
En un punto dado, existen listas, en otro punto,existen conjuntos y, en otro punto, pueden existir indiferentemente listas o conjuntos
|
cuando se lanza un mensaje a un objeto a travéz de una referencia polimorfica, éste debe estar contemplando en el interfaz de clase de la que se declaró la referencia sin contemplar los posibles métodos añadidos en la clase del objeto apuntado.
En un punto dado, existen listas, en otro punto,existen conjuntos y, en otro punto, pueden existir indiferentemente listas o conjuntos
|
Formalización
Enlace: | Ejemplo: |
---|---|
|
|
Tipo de Enlaces: | Ejemplo: |
---|---|
Enlace estático: aquel enlace que se puede resolver analizando el código, o sea, en tiempo de compilación; |
una variable y su nombre, su tipo,…; una constante y su nombre su valor, su tipo,…;una expreción y su número de operadores, su tipo,… |
Enlase dinámico: aquel enlace que NO se puede resolver analizando el código sino que se resuelve en tiempo de ejecución; |
una varuiable y su valor,…; una expreción y su valor evaluado |
Polimorfizmo: | 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 |
|
Converció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 | |
---|---|
|
|
Programación Modular
Modularidad | Niveles |
---|---|
|
|
|
|
|
|
|
Beneficios | |
---|---|
|
|
Jerarquía de Paquetes
Nombres de paquetes | Ejemplos |
---|---|
|
|
|
|
|
|
Clasificadores en paquetes | 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 | |
---|---|
|
|
Importación explícita | Ejemplo |
---|---|
|
|
|
Importación bajo demanda | Ejemplo |
---|---|
|
|
Importación implícita | Ejemplo |
---|---|
|
|
Colisión de nombres | Ejemplo | |
---|---|---|
|
|
|
Resolución de Colisión de nombres | Ejemplo |
---|---|
|
|
Visibilidad de Miembros
|
|
|||
|
|
|
|
|
Paquetes y Herencia
|
|
Ejemplo | |
---|---|
|
|
|
|
API de J2SE
Biblioteca estandar (Application Programming Interface) | |
---|---|
|
|
Aplicaciones | ||
---|---|---|
Programación con Excepciones
|
|
Excepciones
|
|
|
|
|
Gestión de excepciones |
|
|
|
Elevación de Excepciones
Sentencia throw | |
---|---|
|
throw <expresión>;
|
Ejemplo | Fraction.java |
---|---|
|
|
|
|
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
|
|
Clasificación de 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 | |
---|---|
|
|
|
|
|
|
|
|
|
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
|
|
|