Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Daw M03B 2101 Qa03
Daw M03B 2101 Qa03
Ilerna
ILERNA, centro autorizado con código 25002775 (Lleida), 28077294 (Madrid) y 41023090 (Sevilla) www.ilerna.es
© Ilerna Online S.L., 2021
© Imágenes: Shutterstock
Reservado todos los derechos. No se permite la reproducción total o parcial de esta obra, ni su incorporación a un
sistema informático, ni su transmisión en cualquier forma o por cualquier medio (electrónico, mecánico, fotoco-
pia, grabación u otros) sin autorización previa y por escrito de los titulares del copyright. La infracción de dichos
derechos puede constituir un delito contra la propiedad intelectual.
Ilerna Online S.L. ha puesto todos los recursos necesarios para reconocer los derechos de terceros en esta obra
y se excusa con antelación por posibles errores u omisiones y queda a disposición de corregirlos en posteriores
ediciones.
Bibliografía / webgrafía.....................................................................183
Solucionario .......................................................................................184
6
PROGRAMACIÓN ORIENTADA A OBJETOS (POO).
FUNDAMENTOS
Programación - B
7
Tema 6: Programación orientada a objetos (POO). Fundamentos
BUSCA EN LA WEB
JDK
www.oracle.com/java/technologies/javase/javase-
jdk8-downloads.html
8
Programación - B
9
Tema 6: Programación orientada a objetos (POO). Fundamentos
10
Programación - B
src
package1 package2
11
Tema 6: Programación orientada a objetos (POO). Fundamentos
}
}
Código
package ejemplo;
/**
*@author ilerna
*/
public class Ejemplo {
public static void main (String [] args){
/** Código de las aplicaciones*/
//Estoesunaimpresiónenconsola:
System.out.println(“Hola Mundo!”);
}
}
12
Programación - B
6.1. Introducción a la
programación orientada a objetos
“A medida que se van desarrollando los lenguajes, se va de-
sarrollando también la posibilidad de resolver problemas
cada vez más complejos. En la evolución de cada lenguaje,
llega un momento en el que los programadores comienzan
a tener dificultades a la hora de manejar programas que
sean de un cierto tamaño y sofisticación”. (Bruce Eckel,
“Aplique C++”, p. 5 Ed. McGraw- Hill).
13
Tema 6: Programación orientada a objetos (POO). Fundamentos
BUSCA EN LA WEB
Java Community
Visita la página de la comunidad a través del
siguiente enlace:
http://www.jcp.org/en/home/index
14
Programación - B
Variables
Código
15
Tema 6: Programación orientada a objetos (POO). Fundamentos
Constantes
Código
short 16
int 32
16
Programación - B
long 64
Código
Código
17
Tema 6: Programación orientada a objetos (POO). Fundamentos
Operador Significado
% Módulo (enteros)
float 32
double 64
18
Programación - B
Código
Código
19
Tema 6: Programación orientada a objetos (POO). Fundamentos
Código
int num1;
Código
num1 = 2;
• Tipo char:
El tipo primitivo denominado char se utiliza cuando te-
nemos que representar un carácter que sigue el formato
Unicode. En Java existen varias clases para el manejo de
estas cadenas de caracteres y hay métodos que nos faci-
litan el trabajo con cadenas.
Tratamiento de caracteres
Código
Código
• Tipo boolean:
Es el equivalente al tipo de dato bool en C#. El tipo de
dato boolean solo almacena valores lógicos (true o false).
Código
20
Programación - B
Código
BUSCA EN LA WEB
docs.oracle.com/javase/tutorial/java/nutsandbolts/
arrays.html
21
Tema 6: Programación orientada a objetos (POO). Fundamentos
Código
Tipo[] lista;
lista = new tipo[tamaño];
Código
• En Java, el primer índice siempre va a ser 0, no 1. Los valores van desde 0 hasta el
último, n-1. Hay que tener en cuenta que la referencia no es circular y, por tanto, el
valor -1 no corresponde al último elemento del array.
• Java hace una comprobación de índices, de forma que, si se quiere acceder a uno que
no está, lanza una excepción llamada IndexOutOfBoundException.
• Solo se puede dar valor a un array de forma completa en el momento de su decla-
ración. Una vez que ya esté declarado, solo se pueden asignar valores al array de
forma individual.
• En Java es posible hacer una copia de un array por asignación, aunque con limita-
ciones.
Boolean -*
char 16
byte 8
short 16
int 32
long 64
double 64
* No definido, pero debemos saber que ocupa 1 bit.
22
Programación - B
ponte a prueba
23
Tema 6: Programación orientada a objetos (POO). Fundamentos
Código
ponte a prueba
24
Programación - B
RANGO
NOMBRE TIPO OCUPA
APROXIMADO
-32768 a
short Entero 2 bytes
32767
Decimal
double 8 bytes Muy grande
doble
Carácter
chart 2 bytes
simple
Valor true
boolean 1 byte
o false
TIPOS DE
DATOS EN JAVA String (cadenas de texto)
Tipos de la biblioteca Muchos otros (p.ej.
estándar de java Scanner, TreeSet,
ArrayList...)
Serie de elementos
o formación tipo
TIPOS vector o matriz. Lo
Arrays
OBJETOS consideraremos un objeto
especial que carece de
métodos
Byte
Short
Integer
25
Tema 6: Programación orientada a objetos (POO). Fundamentos
26
Programación - B
Métodos de acceso:
Código
//Clase alumno que nos servirá para crear objetos tipo alumno
public class Alumno {
//Atributos
private String nombre;
private String ciclo;
//Constructor
public Alumno(String nombre, String ciclo){ … }
//Métodos
public void evaluar(){//código del método}
}
---------------------------------------------------------------------
//Clase Aula donde utilizaremos los objetos alumnos
public class Aula {
public static void main(String[] args){
//Creación de objetos Alumno
Alumno alumno_1 = new Alumno(“Antonio”,”DAW”);
//Sintaxis de utilización de los métodos del objeto
alumno_1.evaluar();
}
}
27
Tema 6: Programación orientada a objetos (POO). Fundamentos
ponte a prueba
6.7. Constructores
Los constructores son unas funciones especiales que nos
permiten crear objetos de la clase en la que se encuentran.
28
Programación - B
Código
//Clase alumno que nos servirá para crear objetos tipo alumno
//Atributos
private String nombre;
private String ciclo;
ponte a prueba
29
Tema 6: Programación orientada a objetos (POO). Fundamentos
30
Programación - B
Código
ponte a prueba
31
7
DESARROLLO DE PROGRAMAS ORGANIZADOS
CLASES
EN
Programación - B
Código
33
Tema 7: Desarrollo de programas organizados en clases
Código
34
Programación - B
Misma clase x x x x
Mismo package x x x x
Diferente package x
35
Tema 7: Desarrollo de programas organizados en clases
Código
Donde:
La instrucción While en • Modificador_de_acceso: se utiliza para definir el nivel de
Java ocultación o visibilidad de los miembros de la clase (atri-
youtu.be/cD1WLp8Kf_M butos y métodos). Estos pueden ser default, protected,
private o public, como los más utilizados. También tene-
mos otros valores como final, static, volatile y transient.
• Tipo_dato: un atributo puede ser de cualquier tipo de
datos que exista, como int, doublé, char o algunos más
complejos, como estructuras o incluso objetos.
• Nombre_atributo: identificador que vamos a utilizar
para esa variable.
36
Programación - B
Código
Código
Donde:
37
Tema 7: Desarrollo de programas organizados en clases
Código
38
Programación - B
Código
39
Tema 7: Desarrollo de programas organizados en clases
Código
ponte a prueba
40
Programación - B
Código
41
Tema 7: Desarrollo de programas organizados en clases
Código
//Declaración
nombre_clase nombre_variable;
//Creación
nombre_variable = new nombre_clase ();
//Declaración creación
nombre_clase nombre_variable = new nombre_
clase ();
Código
42
Programación - B
Código
ponte a prueba
43
Tema 7: Desarrollo de programas organizados en clases
Código
System.out.metodo();
//Donde método puede ser cualquier método de
impresión//de información la salida estándar.
//En el siguiente ejemplo podemos verlo de
una forma más clara:
System.out.println(“Este es el texto”);
//Esto muestra por pantalla el texto escrito
entre comillas
44
Programación - B
Método Descripción
println (boolean)
println (char)
println (double)
println (int)
println (long)
println (java.lang.Object)
println (java.lang.String)
45
Tema 7: Desarrollo de programas organizados en clases
Caracteres
Significa
especiales
%b Booleano
%c Carácter Unicode
%d Entero decimal
%f Real decimal
%h Hashcode
%n Separador de línea
%o Entero octal
%s Cadena
%t Fecha y hora
%x Entero hexadecimal
Caracteres
Significa Resultado
especiales
jue feb 01
Fecha y hora con formato “%ta %tb %td %tT
%tc 13:31:41 CET
%tZ %tY”
2018
46
Programación - B
47
Tema 7: Desarrollo de programas organizados en clases
Código
Clase System
Código
Código
System.out.println(System.getProperty(“user.
dir”));
System.out.println(System.getProperty(“java.
home”));
System.out.println(System.getProperty(“java.
specification.version”));
48
Programación - B
Clase Console
Código
AVI S O
49
Tema 7: Desarrollo de programas organizados en clases
50
Programación - B
Código
javac nombre_programa.java
Código
java nombre_programa
Código
import java.io.Console;
public class consoleEx {
public static void main(String[] args){
Console c = System.console();
String name = c.readLine(“Nombre usuario:”);
char pwd[]= c.readPassword(“Contraseña”);
String upwd =new String(pwd);
//El usuario es Ilerna y la contraseña Online
if(name.equals(“Ilerna”)&& upwd.equals(“Online”)){
System.out.println(“Usuario y contraseña validos”);
else{
System.out.println(“Usuario o contraseña no validos”);
}
}
}
Clase Scanner
51
Tema 7: Desarrollo de programas organizados en clases
Código
52
Programación - B
Código
//Clase alumno que nos servirá para crear objetos tipo alumno
public class Alumno {
//Atributos
private String nombre;
private String curso;
//Constructor vacío
public Alumno(){
this.nombre = ”Ilerna”;
this.curso = ”Online”;
}
//Constructor con parámetros
public Alumno(String nombre, String curso){
this.nombre = nombre;
this.curso = curso;
}
//Métodos GET y SET
public String getNombre(){return nombre;}
public void setNombre(String nombre){this.nombre = nombre;}
public String getCurso(){return curso;}
public void setCurso(String nombre){this.curso = curso;}
//Métodos creados por el programador
public double evaluar(double nota){
nota = nota * 0.7;
return nota;
}
}
Código
53
8
UTILIZACIÓN AVANZADA DE CLASES EN EL
DISEÑO DE APLICACIONES
Programación - B
La composición crea una relación, de forma que la clase contenida debe coincidir con la vida
de la clase contenedor. La composición y la herencia son las dos formas que existen para
llevar a cabo la reutilización de código.
Para formalizar este concepto de composición de clases vamos a utilizar un ejemplo para
verlo de una manera más práctica. En este caso, haremos una clase Empleado que será la
clase contenida en la clase Empresa, la cual actuará como clase contenedora.
import java.util.Date;
public class Empleado {
//atributos
private String dni;
private String nombre;
private double sueldo;
private Date fechaNac;
//Constructores
public Empleado(){
this.dni = “00000000I”;
this.nombre = “Ilerna Online”;
this.sueldo = 1000;
this.fechaNac = new Date();
}
public Empleado(String dni, String nombre,double sueldo, Date fn){
this.dni = dni;
this.nombre = nombre;
this.sueldo = sueldo;
this.fechaNac = fn;
}
//Métodos
public double horasExtras(double horas){
double PrecioHora = 11;
double extras;
extras = horas * PrecioHora;
return extras;
}
}
55
Tema 8: Utilización avanzada de clases en el diseño de aplicaciones
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Empresa {
private Empleado emp;
private int telefono;
privateString direccion;
//Constructores
public Empresa(){
emp = new Empleado();
telefono = 900730222;
direccion = «Turó Gardeny 25003 Lleida»;
}
public Empresa(Empleado e){
this(e,900730222,»Turó Gardeny 25003 Lleida»);
}
public Empresa(int tel, String dir){
this(new Empleado(), tel, dir);
}
public Empresa(Empleado e,int tel, String dir){
emp = e;
telefono = tel;
direccion = dir;
}
//Método cálculo horas extras Empleado
public double horasExtras(double horas){
emp.horasExtras(horas);
return horas;
}
//Método que da formato a la fecha
public Date fechaNac(String fecha)throws ParseException {
SimpleDateFormat formato = new SimpleDateFormat(“dd/MM/yyyy”);
Date data = formato.parse(fecha);
return data;
}
}
56
Programación - B
8.2. Herencia
La herencia es uno de los términos más importantes en la
POO. Podemos definir la herencia entre diferentes clases
de la misma forma que lo hacemos en la vida real. Es decir,
un hijo puede heredar de un padre el color de sus ojos, los
gestos, la constitución, etc.
Código
class Base {
//Código clase Base
}
class Derivada extends Base {
//Código clase Derivada
}
57
Tema 8: Utilización avanzada de clases en el diseño de aplicaciones
Código
class Empleado {
protected String nombre, apellidos;
protected Double sueldo;
protected String DNI;
58
Programación - B
ponte a prueba
59
Tema 8: Utilización avanzada de clases en el diseño de aplicaciones
Código
modificador_de_accesoabstractclass
NombreClase {}
Código
60
Programación - B
Código
Notas
61
Tema 8: Utilización avanzada de clases en el diseño de aplicaciones
Código
62
Programación - B
Código
//Atributos
protected String nombre;
protected String dni;
protected int edad;
//Métodos
63
Tema 8: Utilización avanzada de clases en el diseño de aplicaciones
Código
ponte a prueba
64
Programación - B
8.7. Interfaces
Las interfaces están formadas por un conjunto de mé-
todos que no necesitan ser implementados. Se podría
decir que son clases 100% abstractas. Es decir, que están
compuestas por un conjunto de métodos abstractos.
65
Tema 8: Utilización avanzada de clases en el diseño de aplicaciones
Código
Dónde:
66
Programación - B
Código
Código
ponte a prueba
67
9
APLICACIÓN DE ESTRUCTURAS DE
ALMACENAMIENTO EN LA PROGRAMACIÓN
ORIENTADA A OBJETOS
Programación - B
• Conjuntos
Un conjunto es un grupo de elementos no duplicados,
es decir, un grupo de valores únicos que, dependiendo
del caso en cuestión, pueden estar ordenados o no.
• Listas
Las listas podemos definirlas como una secuencia de
elementos que ocupan una posición determinada. Sa-
biendo la posición que ocupa cada uno, podemos insertar
o eliminar un elemento en una posición determinada.
• Pilas
Las pilas son similares a las listas, pero añadiendo algu-
nas restricciones. Pueden definirse como una sucesión de
varios elementos del mismo tipo, cuya forma para poder
acceder a ellos sigue el método de acceder siempre por
un único lugar: la cima.
69
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
EJEMPLO
• Colas
Las colas son similares a las listas, pero añadiendo algu-
nas restricciones. Pueden definirse como una sucesión
de varios elementos del mismo tipo, cuya forma de poder
acceder a ellos sigue el método siguiente:
EJEMPLO
70
Programación - B
Código
Código
Código
array[0];
71
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Código
array[4];
Código
import java.util.Scanner;
public class Ejemplo {
public static void main(String[] args){
//Declaramos el array
int[] array = new int[3];
int num = 0;
Scanner sc = new Scanner(System.in);
//Inicializamos el primer elemento
System.out.println (“Introduzca el primer número”);
num = sc.nextInt();
array [0] = num;
//Inicializamos el segundo elemento del array
System.out.println (“Introduzca el segundo número”);
num = sc.nextInt();
array [1] = num;
//Realiza la suma de dos posiciones
array[2] = array[0] + array[1];
//Mostramos el resultado
System.out.println (array[0]+” + “+ array[1]+” = “+array[2]);
}
}
Código
Código
72
Programación - B
Método Descripción
Código
73
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Código
Código
0 1 2 3 4
0 1 2 3 4 5
Primera dimensión
1 1 1 1 1 1
74
Programación - B
Código
Código
75
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Segunda dimensi
ón
e n sión
ra dim
e
Terc
Primera dimensión
ponte a prueba
76
Programación - B
Código
77
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
78
Programación - B
Collection
SortedSet SortedMap
List
79
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
AbtractList
AbstractSequentialList
ArrayList
AtributeList
LinkedList
List
Vector
CopyOnWriteArrayList
Stack
RoleList
RoleUnresolvedList
ArrayList
Código
80
Programación - B
Código
import java.util.ArrayList;
public class Ejemplo {
public static void main(String[] args){
LinkedList
81
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Código
Código
import java.util.LinkedList;
public class Ejemplo {
public static void main(String[] args){
//Instancia de tipo Genérico
LinkedList listaEnlazada = new LinkedList();
listaEnlazada.add(3);
listaEnlazada.add(4.52);
listaEnlazada.add(“Amaia”);
System.out.println(listaEnlazada);
listaEnlazada.removeFirst();
listaEnlazada.addFirst(“Laura”);
listaEnlazada.addLast(72);
System.out.println(listaEnlazada);
//Instancia de tipo específico
LinkedList<String> listaEnl = new LinkedList<String>();
listaEnl.add(“Pablo”);
listaEnl.add(“Carlos”);
listaEnl.add(“Ruben”);
System.out.print(listaEnl.getFirst() + “ “);
System.out.println(listaEnl.getLast());
}
}
82
Programación - B
Vector
Código
Código
import java.util.Vector;
public class Ejemplo {
public static void main(String[] args){
//Instancia de tipo genérico
Vector vector = new Vector();
vector.add(3);
vector.add(5.8);
vector.add(“Ilerna”);
//Mostramos el contenido con el método elementAt()
System.out.println(vector.elementAt(0));
System.out.println(vector.elementAt(1));
System.out.println(vector.elementAt(2));
//Instancia de tipo específico
Vector <String> vectorCadenas = new Vector<>();
vectorCadenas.add(“Ilerna”);
vectorCadenas.add(“Online”);
//Mostramos el contenido con firstElement y lastElement
System.out.print(vectorCadenas.firstElement() + “ “);
System.out.print(vectorCadenas.lastElement());
}
}
83
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
BUSCA EN LA WEB
https://docs.oracle.com/javase/8/docs/api/java/util/
List.html
Set
AbstractSet
ConcurrentSkipSet
CopyOnWriteArraySet
EnumSet
List
HashSet
JobStateReasons
LinkedHashSet
TreeSet
84
Programación - B
HashSet
Código
85
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Código
import java.util.HashSet;
public class Ejemplo {
public static void main(String[] args){
//Instancia de tipo Genérico
HashSet colSet = new HashSet();
colSet.add(3);
colSet.add(5.8);
colSet.add(“Ilerna”);
//Como utilizar los métodos isEmpty() y el método clear()
while(!colSet.isEmpty()){
System.out.println(colSet);
colSet.clear();
}
//Instancia de tipo específico
HashSet<Double> colSetInt =new HashSet<Double>();
colSetInt.add(23.10);
colSetInt.add(32.00);
colSetInt.add(83.24);
//Recorrer la colección con un bucle for each
for(Double s : colSetInt){
System.out.println(s);
}
}
}
TreeSet
Código
86
Programación - B
Código
import java.util.TreeSet;
public class Ejemplo {
public static void main(String[] args){
//Instancia de tipo Genérico
TreeSet arbolPersonas =newTreeSet();
arbolPersonas.add(3);
arbolPersonas.add(45);
arbolPersonas.add(72);
//Vemos el funcionamiento del método tailSet()
System.out.println(arbolPersonas.tailSet(1));
System.out.println(arbolPersonas.tailSet(20));
System.out.println(arbolPersonas.tailSet(50));
//Instancia de tipo específico
TreeSet<String> arbolPer =new TreeSet<String>();
arbolPer.add(“Sandra”);
arbolPer.add(“Amanda”);
arbolPer.add(“Diana”);
//Recorremos los resultados con un bucle for each
for(String s : arbolPer){
System.out.println(s);
}
}
}
BUSCA EN LA WEB
En este apartado hemos comentado las colecciones y métodos más utilizados. Para
obtener más información de todas las colecciones, adjuntamos el enlace web a la
plataforma de Java, donde explica la colección List y contiene los enlaces a todas las
clases que hemos visto en el esquema anterior:
https://docs.oracle.com/javase/8/docs/api/java/util/List.html
87
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Queue
AbstractQueue
ArrayBlockingQueue
ArrayDeque
ConcurrentLinkedDeque
ConcurrentLinkedQueue
DelayQueue
Queue LinkedBlockingDeque
LinkedBlockingQueue
LinkedList
LinkedTransferQueue
PriorityBlockingQueue
PriorityQueue
SynchronousQueue
88
Programación - B
ArrayDeque
Código
89
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Código
import java.util.ArrayDeque;
public class Ejemplo {
public static void main(String[] args){
//Instancia de tipo Genérico
ArrayDeque cola = new ArrayDeque();
cola.add(“primer elemento”);
cola.add(2);
cola.add(“tercer elemento”);
cola.add(4);
System.out.println(cola);
cola.pollFirst();
System.out.println(cola);
cola.pollLast();
System.out.println(cola);
//Instancia de tipo específico
ArrayDeque<Integer> pila = new ArrayDeque<Integer>();
pila.add(1);
pila.add(2);
pila.add(3);
pila.add(4);
System.out.println(pila);
pila.push(0);
System.out.println(pila);
pila.pop();
System.out.println(pila);
}
}
BUSCA EN LA WEB
https://docs.oracle.com/javase/8/docs/api/java/util/
Queue.html
90
Programación - B
Map
CLAVES VALORES
María
Julio
Víctor
Lucía
91
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
AbstractMap
Attributes
AuthProvider
ConcurrentHashMap
ConcurrentSkipListMap
EnumMap
HashMap
Hashtable
IdentityHashMap
Map
PrinterStateReasons
Propierties
Provider
RenderingHints
SimpleBindings
TabularDataSupport
TreeMap
IUDefaults
WeakHashMap
92
Programación - B
Código
coloresPreferidos.put(ILERNA, Color.AZUL);
Código
coloresPreferidos.put(ILERNA, Color.AZUL);
Código
Código
ColoresPreferidos.remove(ILERNA);
HashMap
Código
93
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Código
import java.util.Map;
import java.util.HashMap;
public class Ejemplo{
public static void main(String[]args){
//Instancia de tipo genérico
HashMap alumno = new HashMap();
alumno.put(1,15.55);
alumno.put(2.2,19);
alumno.put(“3”,”María”);
System.out.println(alumno);
//Eliminar un elemento
alumno.remove(“3”);
System.out.println(alumno);
//Sustituir un elemento
alumno.put(“1”,”Marc”);
System.out.println(alumno);
//Instancia de tipo específico
HashMap<Integer,String> alum;
alum = new HashMap<Integer,String>();
alum.put(1,”Joan”);
alum.put(2,”Sara”);
alum.put(3,”Lola”);
//Recorremos la colección con entrySet()
for(Map.Entry<Integer,String>ent:alum.entrySet()){
System.out.print(“Clave: “+ ent.getKey() + “”);
System.out.println(“Valor: “+ ent.getValue());
}
}
}
BUSCA EN LA WEB
Cuando trabajamos con
En este apartado, comentamos las colecciones y
cualquiera de las colecciones
algunos de los métodos más utilizados. Para más
comentadas, tendremos
información de todas las colecciones adjunta-
que importar su librería
mos el enlace web a la plataforma de Java donde
correspondiente en el
explica Map y contiene los enlaces a todas las
archivo .java, tal y como
clases que hemos visto en el esquema de Map:
vemos en los ejemplos.
https://docs.oracle.com/javase/8/docs/api/java/ import java.util.*;
util/Map.html
94
Programación - B
Iterator
Código
95
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Código
import java.util.LinkedList;
public class Ejemplo {
public static void main(String[] args){
//Instancia de tipo específico
LinkedList<String> listaEn = new LinkedList<>();
listaEn.add(“Maria”);
listaEn.add(“Carlos”);
listaEn.add(“Marc”);
listaEn.add(“Lucia”);
Iterator<String> it = listaEn.iterator();
while(it.hasNext()){
System.out.println(it.next().toString());
}
}
}
BUSCA EN LA WEB
https://docs.oracle.com/javase/7/docs/api/java/util/
Iterator.html
96
Programación - B
97
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Código
Código
Código
Código
98
Programación - B
Código
Código
Código
claseDelMetodoGenerico.<TipoConcreto> método(ParametroReal);
Código
ClasedelMetodoGenerico.metodo (parametroReal);
Tipos de comodín
Cuando utilizamos un tipo concreto como parámetro (tanto
en clases genéricas como en métodos genéricos) se produce
mucha restricción. Por eso es conveniente indicar el tipo que
se va a utilizar como parámetro para implementar la interfaz.
99
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
Código
Number Object
100
Programación - B
Collection<String>
List<String>
ArrayList<String>
Código
101
Tema 9: Aplicación de estructuras de almacenamiento en la programación orientada a objetos
.< $, ^, ., *, +, ?, [, ], . >
Código
Código
102
Programación - B
Código
Código
BUSCA EN LA WEB
https://docs.oracle.com/javase/8/docs/api/java/util/
regex/Pattern.html
ponte a prueba
Los tipos genéricos se usan para disminuir
las restricciones de un tipo, lo que posibi-
lita que un método pueda funcionar con una
Lista de List<Tipo>, donde el tipo puede ser
Integer, Double o Number.
a) Verdadero
b) Falso
103
10
CONTROL DE EXCEPCIONES
Programación - B
105
Tema 10: Control de excepciones
Código
try{
//Código que puede lanzar una excepción
}catch(Exception error){
//Código que se ejecutará en caso de error
}
Código
try{
//Código que puede lanzar una excepción
}catch(Exception error){
//Código que se ejecutará en caso de error
}
finally{
//Código que se ejecutará siempre
}
106
Programación - B
ponte a prueba
Código
107
Tema 10: Control de excepciones
Código
try{
//código que se va a ejecutar
}catch(clase_de_error){
108
Programación - B
Código
Podemos lanzar cualquier tipo de excepción siempre que sigamos la sintaxis anterior,
bien sea creada por el usuario o no.
Código
109
Tema 10: Control de excepciones
Throwable
Error Exception
IOException: Excepciones
comprobadas, errores que no son
generados por el programador.
IOException RunTimeException
RunTimeException: Excepciones no
comprobadas, errores por parte del
programador.
110
Programación - B
Código
111
Tema 10: Control de excepciones
Código
import java.util.Scanner;
public class Ejemplo {
static boolean login (String user, String pass){
if(user.equals(“Ilerna”)&& pass.equals(“Online”)){
return true;
}else{
return false;
}
}
public static void main (String [] args){
//Inicializar las variables
Scanner sc = new Scanner(System.in);
String nombre =””;
String passwd =””;
boolean valido =true;
try{
//Pedir los datos para el loguin
System.out.println (“Introduzca el usuario:”);
nombre = sc.nextLine();
System.out.println (“Introduzca la contraseña:”);
passwd = sc.nextLine();
//Lanzar el método loguin
if(!loguin(nombre, passwd)){
valido =false;
throw new ErrorLoginException ();
}
}catch(ErrorLoginException error){
//Código que se ejecutará si el código del bloque try lanza una excepción
System.out.println(error.getMessage());
}finally{
//Código que se va ejecutar siempre (aunque se entre en el catch)
if(valido){
System.out.println(“Bienvenido “+ nombre);
}else{
System.out.println(“Vuelva a reiniciar el programa para registrarse como usuario”);
}
}
}
}
class ErrorLoginException extends Exception {
String sms;
public ErrorLoginException (){
this.sms =”El usuario o contraseña no son válidos”;
}
public ErrorLoginException (String sms){
this.sms = sms;
}
@Override
public String getMessage (){
return sms;
}
}
112
Programación - B
ponte a prueba
113
11
LECTURA Y ESCRITURA DE INFORMACIÓN
Programación - B
AudioInputStream
BufferedInputStream
ByteArrayInputStream
DataInputStream
FIleInputStream
LineNumberInputStream
InputStream
InputStream PushbankInputStream
ObjectInputStream
PipedInputStream
SequenceInputStream
StringBufferInputStream
115
Tema 11: Lectura y escritura de información
ByteArrayOutputStream BufferedOutputStream
FileOutputStream DataoutputStream
FilterOutputStream PrintStream
ObjectOutputStream
OutputStream
OutputStream
PipedOutputStream
116
Programación - B
Código
117
Tema 11: Lectura y escritura de información
FileInputStream y FileOutputStream
FileInputStream
Código
Código
Código
FileOutputStream
Escribe un byte:
Código
118
Programación - B
Código
Código
Flujos de texto
BufferedReader y PrintWriter
Unix LF ‘\n’
Clase Scanner
119
Tema 11: Lectura y escritura de información
Constructores
Métodos
120
Programación - B
Clase BufferedReader
Constructores
• BufferedReader (Reader in)
• BufferedReader (Reader in, int tamaño)
Métodos
Método Descripción
Clase BufferedWriter
121
Tema 11: Lectura y escritura de información
Clase PrintWriter
Clase File
Constructores
Pueden aportar una cadena cuyo contenido sea la ruta (ab-
soluta/relativa), o una ruta del directorio padre y el nombre
de un objeto hijo. También existe la opción de aportar un
identificador uniforme de recursos (URI).
Métodos
Método Descripción
122
Programación - B
boolean lastModified ()
123
Tema 11: Lectura y escritura de información
Flujos binarios
La interfaz DataInput
Se puede implementar en las clases que detallamos a con-
tinuación:
DataInputStream MemoryCacheImageInputStream
FileImageInputStream RandomAccessFile
ImageOutputStreamImpl FileCacheImageOutputStream
ObjectInputStream ImageInputStreamImpl
FileCacheImageInputStream MemoryCacheImageOutputStream
FileImageOutputStream
124
Programación - B
MÉTODO () DESCRIPCIÓN
void readFully (byte [] t) Lee todos los bytes y los almacena en “t”.
void readFully (byte [] t, int off, int Lee un máximo de leng bytes y los
leng) almacena en t a partir de la posición leng.
La interfaz DataOutput
DataOutputStream MemoryCacheImageOutputStream
ImageOutputStreamImpl FileImageOutputStream
RandomAccessFile ObjectOutputStream
FileCacheImageOutputStream
125
Tema 11: Lectura y escritura de información
Vamos a detallar los métodos con los que cuenta esta in-
terfaz:
MÉTODO () DESCRIPCIÓN
void write (byte [] t, int pos, int leng) Escribe, como mucho, leng bytes de “t” a
partir de la posición pos.
void writeChars (String s) Escribe todos los chars (a 2 bytes por char).
126
Programación - B
Código
Por ejemplo:
Código
class Persona {
String nombre;
int edad;
Persona();
};
class Fichero_Persona implements Serializable {
//Operaciones para tratar el fichero de Personas
}
ponte a prueba
128
Programación - B
• Secuenciales
• Aleatorios o directos
• Secuenciales indexados
Ficheros secuenciales
Posición de lectura
Posición de escritura
Ficheros aleatorios
Posición de lectura/escritura
129
Tema 11: Lectura y escritura de información
1 Registro 1
2 Registro 2
3 Registro 3
Campos clave
4 Registro 4
... ...
N Registro N
Operaciones
Apertura
130
Programación - B
Lectura/escritura
Cierre
Apertura de ficheros
Lectura secuencial
Código
131
Tema 11: Lectura y escritura de información
Código
Escritura secuencial
Código
Código
133
Tema 11: Lectura y escritura de información
Código
try {
RandomAccessFile randomAccess = new RandomAccessFile(random, “rw”);
Cierre de ficheros
Código
f1.Cerrar();//cerramos fichero
ponte a prueba
135
12
INTERFACES GRÁFICAS DE USUARIO
Programación - B
Entorno de trabajo
137
Tema 12: Interfaces gráficas de usuario
BUSCA EN LA WEB
www.eclipse.org/windowbuilder/download.php
138
Programación - B
139
Tema 12: Interfaces gráficas de usuario
Código
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
HolaMundoSwing window = new HolaMundoSwing();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public HolaMundoSwing() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
140
Programación - B
141
Tema 12: Interfaces gráficas de usuario
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
HolaMundoSwing window = new HolaMundoSwing();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public HolaMundoSwing() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.NORTH);
JLabel lblEstoEsUn = new JLabel(“Esto es un label”);
panel.add(lblEstoEsUn);
JButton btnBotn = new JButton(“Bot\u00F3n 1”);
panel.add(btnBotn);
Choice choice = new Choice();
choice.setBackground(Color.DARK_GRAY);
choice.setEnabled(false);
choice.setFont(new Font(“Bauhaus 93”, Font.PLAIN, 12));
choice.setForeground(Color.PINK);
frame.getContentPane().add(choice, BorderLayout.CENTER);
Label label = new Label(“Esto es otro texto...”);
frame.getContentPane().add(label, BorderLayout.SOUTH);
142
Programación - B
ponte a prueba
Controles
Los controles son cada uno de los elementos o componen-
tes que podemos añadir a nuestra interfaz. Los diferentes
controles que tenemos disponible en Java para hacer un
proyecto gráfico son:
AWT SWING
144
Programación - B
Código
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Ejemplo {
public static void main (String [] args){
//Creamos un JFrame que nos hará de ventana
JFrame ventana =new JFrame(“Titulo_ventana”);
//Ponemos la ventana visible
ventana.setVisible(true);
//Le damos untamaño a nuestra ventana
ventana.setSize(600,400);
//Creamos un panel
JPanel panel = new JPanel();
panel.setLayout(null);
ventana.add(panel);
//Creamos un Label para mostrar un texto
JLabel etiqueta = new JLabel();
etiqueta.setText(“Primera prueba con JFrames de Java”);
//Le asignamos una posición y un tamaño
etiqueta.setBounds(100,100,400,35);
//Añadimos la etiqueta al panel
panel.add(etiqueta);
}
}
Contenedores en Java
145
Tema 12: Interfaces gráficas de usuario
146
Programación - B
12.3. Acontecimientos
(eventos). Creación y propiedades
Existen una serie de propiedades que tiene cada compo-
nente (lista desplegable, cuadros de texto, botones, etc.) y
que pueden ser de bastante utilidad.
Propiedades Java
• name: nos permite identificar el objeto. Si queremos
cambiar el nombre de un objeto solo tenemos que hacer
clic en el botón derecho y seleccionar la opción “Change
Variable Name …”.
• Location: desde el cuadro de propiedades no podemos
sustituir la localización. Mediante el modificador set-
Location (int x, int y), podemos establecer una nueva
posición.
• Visible: visible.
• BackColor: background.
• Font: podemos modificar tipo, tamaño y estilo de letra.
• ForeCore: foreground.
• Text: la propiedad de los cuadros de texto se denomina
text.
• Enabled: muestra una casilla de verificación en la que
podemos activar propiedades de tipo booleanas.
• Size: utiliza las propiedades para el tamaño horizontal y
vertical.
• Icon: iconImage.
147
Tema 12: Interfaces gráficas de usuario
148
Programación - B
Eventos Java
actionPerformed
componentMoved
componentResized
focusGained
focusLost
propertyChange
mousePressed
mouseReleased
mouseEntered
mouseExited
mouseMoved
keyPressed
KeyReleased
149
Tema 12: Interfaces gráficas de usuario
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Ejemplo {
public static void main (String [] args){
150
Programación - B
Menús en Java
151
13
DISEÑO DE PROGRAMAS CON LENGUAJES
DE POO PARA GESTIONAR BASES DE
DATOS RELACIONALES
Programación - B
153
Tema 13: Diseño de programas con lenguajes de POO para gestionar bases de datos relacionales
13.1. Establecimiento de
conexiones
Para poder llevar a cabo la conexión desde un código fuen-
te Java hasta una base de datos debemos utilizar una serie
de colecciones dentro de la API de SQL de Java, incluida en
la versión 7 de dicho compilador.
Código
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
Ejemplo:
import java.sql.*;
154
Programación - B
Código
Código
Estos son los pasos que tenemos que seguir para poder
establecer la conexión a una base de datos. Ahora nos falta
indicar la finalización de dicha conexión cuando ya no sea
necesaria (cuando finalicemos nuestro programa).
155
Tema 13: Diseño de programas con lenguajes de POO para gestionar bases de datos relacionales
Código
ponte a prueba
156
Programación - B
13.2. Recuperación y
manipulación de información
Para poder recuperar y manipular información debemos
diseñar funciones que combinen el lenguaje SQL de re-
cuperación o manipulación de datos, con las diferentes
instrucciones o consultas de SQL.
Código
157
Tema 13: Diseño de programas con lenguajes de POO para gestionar bases de datos relacionales
Método Descripción
158
Programación - B
Código
ponte a prueba
159
14
DISEÑO DE PROGRAMAS CON LENGUAJES
DE POO PARA GESTIONAR BASES DE
DATOS OBJETO-RELACIONALES
Programación - B
161
Tema 14: Diseño de programas con lenguajes de POO para gestionar bases de datos objeto-relacionales
14.1. Establecimiento de
conexiones
Las conexiones y la recuperación y/o manipulación de la
información se van a llevar a cabo de la misma forma en
el caso de las bases de datos objeto-relacionales. Esto se
debe a que el código en Java no cambia, sino que lo hace la
base de datos desde su SGBD correspondiente.
14.2. Recuperación y
manipulación de la información
En el ejemplo anterior hemos visto la introducción de infor-
mación en la base de datos. En este apartado vamos a ver
la consulta de la información almacenada en tablas. Para
poder realizar consultas y manipular la información debe-
remos seguir estos pasos:
1. Primero creamos la sentencia de conexión (Statement).
2. Después, obtenemos en resulSet los datos de la con-
sulta correspondiente (que la lanzamos mediante el
método executeQuery).
162
Programación - B
Código
ponte a prueba
163
15
DISEÑO DE PROGRAMAS CON
LENGUAJES DE POO PARA GESTIONAR
LAS BASES DE DATOS ORIENTADAS A
OBJETOS (BBDDOO)
Programación - B
165
Tema 15: Diseño de programas con lenguajes de POO para gestionar las bases de datos orientadas a objetos (BBDDOO)
BUSCA EN LA WEB
https://www.oracle.com/database/technologies/
xe-downloads.html
166
Programación - B
BUSCA EN LA WEB
https://www.oracle.com/database/technologies/
appdev/sql-developer.html
167
Tema 15: Diseño de programas con lenguajes de POO para gestionar las bases de datos orientadas a objetos (BBDDOO)
168
Programación - B
169
Tema 15: Diseño de programas con lenguajes de POO para gestionar las bases de datos orientadas a objetos (BBDDOO)
BUSCA EN LA WEB
https://download.oracle.com/otn-pub/otn_software/
jdbc/ojdbc8.jar
170
Programación - B
Driver thin Es igual que el driver thin, pero se ejecuta dentro de thin
servidor un servidor de oracle con acceso remoto.
171
Tema 15: Diseño de programas con lenguajes de POO para gestionar las bases de datos orientadas a objetos (BBDDOO)
Código
jdbc:oracle:<tipodriver>:@<basededatos>
o
Código
jdbc:oracle:<tipodriver>:<nombreusuario>/<contraseña>@<basededatos>
Para el tipo de driver puede ser: thin, oci o kprb. Para nues-
tra aplicación Java, utilizaremos el tipo de driver thin, ya
que tenemos una instalación Oracle y para que funcione la
aplicación debemos arrancarla en un servidor.
Código
jdbc:oracle:thin:ilerna/contrasena@localhost:1521:xe
Código
oracle.jdbc.OracleDriver
Código
Class.forName(“oracle.jdbc.OracleDriver”);
172
Programación - B
Código
Código
173
Tema 15: Diseño de programas con lenguajes de POO para gestionar las bases de datos orientadas a objetos (BBDDOO)
Código
ponte a prueba
174
Programación - B
Código
175
Tema 15: Diseño de programas con lenguajes de POO para gestionar las bases de datos orientadas a objetos (BBDDOO)
Subtipo Descripción
176
Programación - B
ponte a prueba
177
Tema 15: Diseño de programas con lenguajes de POO para gestionar las bases de datos orientadas a objetos (BBDDOO)
15.8. Relaciones
Las relaciones se pueden representar mediante claves
ajenas. No existe una estructura de datos en sí que forme
parte de las bases de datos para la representación de los
enlaces entre las diferentes tablas.
• Atributos multivaluados.
178
Programación - B
15.10. UML
UML (unified modeling language) es un lenguaje mo-
delado unificado que visualiza, especifica y documenta
todas las partes necesarias para desarrollar el software.
Aunque se puede utilizar para modelar tanto sistemas de
software como de hardware.
179
Tema 15: Diseño de programas con lenguajes de POO para gestionar las bases de datos orientadas a objetos (BBDDOO)
180
Programación - B
ponte a prueba
181
Tema 15: Diseño de programas con lenguajes de POO para gestionar las bases de datos orientadas a objetos (BBDDOO)
182
BIBLIOGRAFÍA / WEBGRAFÍA
” Jiménez, I. M. (2013b). Programación (1ª ed.). Madrid, España: Garceta.
” Moreno, J. C. (2011). Programación. Madrid, España: Ra-Ma.
” Sznajdleder, P. A. (2015). El gran libro de Java a fondo (3ª ed.). Buenos Aires, Argentina:
Marcombo.
„ Oracle Help Center. (s.f.). Java Documentation. Recuperado 24 agosto, 2018, de https://
docs.oracle.com/en/java/
solucionario
6.1.1. Tipos primitivos de datos 7.7. Uso de clases y objetos. Visibilidad
¿Cuál de los siguientes elementos es un tipo ¿Cómo pueden ser las visibilidades?
primitivo de datos?
e) Todas las opciones son correctas.
e) B y C son correctas.
7.8. Conjuntos y librerías de clases
6.2. Definición de objetos
¿Para qué nos proporciona métodos la clase
Un objeto es una estructura cargada en Scanner?
memoria con unos atributos de valor
e) Todas las opciones son correctas.
modificable definidos y unas funciones que
puede realizar.
8.2. Herencia
a) Verdadero.
Todos los objetos son unas estructuras de datos Una clase puede heredar de dos clases
basadas en clases, estos están cargados en diferentes.
memoria y tienes unos atributos definidos que b) Falso.
se pueden modificar. En Java no está permitida la herencia múltiple,
la simulación de herencia múltiple se realiza con
6.6. Utilización de métodos estáticos interfaces.
Un método estático es aquel que se puede
invocar sin crear un objeto de la clase. 8.5. Sobreescritura de métodos
a) Verdadero. ¿Qué nos permite la sobreescritura de métodos?
Los métodos estáticos nos permiten acceder al d) Todas las respuestas son correctas.
método de una clase sin tener que inicializar la
misma. 8.7. Interfaces
¿Qué características tiene el conjunto de
6.7. Constructores métodos que componen las interfaces?
¿Cuál de las siguientes afirmaciones sobre los a) Necesitan ser implementadas.
constructores es cierta?
e) Todas las opciones son correctas. 9.3. Arrays multidimensionales
¿Cuántas dimensiones pueden tener los arrays?
6.9. Destrucción de objetos y liberación de
d) Todas las dimensiones que se deseen pero
memoria
aumentará su complejidad.
En Java estamos obligados a crear destructores.
b) Falso. 9.6. Clases y métodos genéricos
Java se encarga él mismo de utilizar un elemen-
to llamado Garbage Collector, el cual limpiará la Los métodos genéricos permiten crear
memoria de aquellos objetos no utilizados. funciones que reciban varios tipos de
parámetros.
a) Verdadero.
7.3. Creación de métodos
Permiten recibir un tipo por ejemplo “T” que
¿Cuál de las siguientes opciones es un tipo de está será reemplazada en tiempo de ejecución
método en Java? por el tipo recibido.
f) Todas la opciones son correctas.
9.9. Expresiones regulares de búsqueda
7.4. Sobrecarga de métodos Los tipos genéricos se usan para disminuir las
La sobrecarga de métodos nos permite crear un restricciones de un tipo, lo que posibilita que
método con el mismo nombre, pero diferentes un método pueda funcionar con una Lista de
argumentos. List<Tipo>, donde el tipo puede ser Integer,
Double o Number.
a) Verdadero.
a) Verdadero.
solucionario
10.1. Control de excepciones 14.2. Recuperación y manipulación de la
información
En el bloque try/catch/finally, ¿qué ocurre con la
parte correspondiente al finally? Indica qué propiedad no se aplica a las bases de
c) Siempre se ejecuta se produzca o NO se datos objeto relacionales.
produzca la excepción. c) Recursividad.