Programación
Orientada a Objetos
con Java
POO con Java
1. Introducción a Java
2. Programación Orientada a Objetos en Java
3. Manejo de excepciones
4. Entrada/Salida en Java
5. Estructuras de datos. Colecciones
6. Gestión de bases de datos
7. Servlets – JSP – EL – JSTL
1. Introducción a Java
Fundamentos del lenguaje Java
Java se creó como parte de un proyecto de investigación para el
desarrollo de software avanzado para una amplia variedad de
dispositivos de red y sistemas embebidos. La meta era diseñar una
plataforma operativa sencilla, segura, portable, distribuida y de
tiempo real.
1. Introducción a Java
Java es un lenguaje desarrollado por Sun, apareciendo la primera
versión en 1991.
Java nace como un lenguaje ideado en sus comienzos para
programar electrodomésticos!
En sus primeras versiones, se llamó OAK (roble en inglés)
Es un lenguaje orientado a objetos, siendo un OBJETO un
conjunto de variables y de métodos relacionados con esas
variables.
1. Introducción a Java
Compilación. “Compilar” significa traducir el código escrito
en “Lenguaje entendible por humanos” (por ejemplo Java,
C, Pascal, Fortran), a un código en “Lenguaje Máquina”,
que entienden las máquinas, pero no entendible por
nosotros.
La creación de programas en muchos lenguajes se basa en
el proceso: escribir código fuente --> compilar y obtener
programa ejecutable. El compilador se encarga de evitar
que se pueda traducir un programa con código fuente mal
escrito y de hacer otras verificaciones previas, de modo que
el código máquina tiene ciertas garantías de que cumple
cuando menos con los estándares de sintaxis obligatorios
de un lenguaje.
1. Introducción a Java
1. Introducción a Java
Java incluye dos elementos:
Compilador: traduce a un código intermedio denominado
bytecode que se almacena en un fichero (Lenguaje
Precompilado).
Intérprete: utiliza las clases compiladas y las ejecuta. Es
lo que se conoce como Máquina Virtual (Lenguaje
interpretado).
1. Introducción a Java
Una máquina virtual Java (en inglés Java Virtual
Machine, JVM) es una máquina virtual de proceso
nativo, es decir, ejecutable en una plataforma
específica, capaz de interpretar y ejecutar
instrucciones expresadas en un código binario especial
(el bytecode Java), el cual es generado por el
compilador del lenguaje Java.
1. Introducción a Java
Lenguaje simple: resulta sencillo y rápido el aprendizaje desde el
principio.
Orientado a objetos: agrupa información de forma estructurada.
Además incorpora mecanismos que facilitan la extensibilidad y
reutilización del código: herencia, polimorfismo, …
Robusto: proporciona numerosas comprobaciones en
compilación y en tiempo de ejecución. Además la recolección de
basura elimina la necesidad de liberación explícita de memoria.
1. Introducción a Java
Seguro: tanto el lenguaje como el sistema de ejecución en tiempo
real, no afectan al terminal sobre el que se ejecuta el código.
Distribuido: proporciona una colección de clases para su uso en
aplicaciones de red, por ejemplo: RMI, CORBA.
Interpretado: su código fuente se transforma en un código
llamado bytecodes
1. Introducción a Java
Indiferente a la arquitectura: el compilador de Java genera
bytecodes: un formato intermedio indiferente a la
arquitectura, diseñado para transportar el código
eficientemente a múltiples plataformas hardware y software.
Portable: la indiferencia a la arquitectura representa sólo
una parte de su portabilidad. Además, Java especifica los
tamaños de sus tipos de datos básicos y el comportamiento
de sus operadores aritméticos, de manera que los
programas son iguales en todas las plataformas.
* Estas dos últimas características se deben a la Máquina Virtual
Java (JVM).
1. Introducción a Java
Multitarea: soporta sincronización de múltiples hilos de ejecución
a nivel de lenguaje, especialmente útiles en la creación de
aplicaciones de red distribuidas.
Dinámico: el lenguaje Java y su sistema de ejecución en tiempo
real son dinámicos en la fase de enlazado, ya que las clases son
creadas a medida que son necesitadas.
1. Introducción a Java
¿Qué es una aplicación Java?
Es un conjunto de clases que desempeñan una
función específica.
Los pasos para crear una aplicación Java son:
Editar: se generan archivos .java
Compilar: se generan archivos .class
Ejecutar: se obtiene la salida de la aplicación.
1. Introducción a Java
Entorno de Desarrollo Integrado (IDE) – Eclipse
Última versión Eclipse Mars.1 (4.5.1)
1. Introducción a Java
Entorno de Desarrollo Integrado (IDE) – NetBeans
NetBeans: última versión NetBeans 8.1
2.Programación Orientada a
Objetos en Java
Junto con el paradigma de la orientación a procedimientos, son las dos
filosofías generales de diseño más importantes. A diferencia de la orientación
a procedimientos (OP), la orientación a objetos (OO) no concibe los
procesos como una secuencia de procedimientos con su entrada y salida
sino que se basa en un conjunto de objetos interactuando:
2.Programación Orientada a
Objetos en Java
Es importante distinguir entre los conceptos de clase y objeto:
Clase: Es un modelo abstracto de un tipo de objeto. Define sus métodos y atributos.
Objeto: Es una instancia de una clase, es decir, la implementación con valores de un modelo
abstracto.
Las clases no son entidades independientes sino que se agrupan jerárquicamente heredando
características y atributos. Cada instancia o implementación real de una clase constituirá un nuevo
objeto por lo que se pueden crear infinitos objetos distintos a partir de una sola clase.
2.Programación Orientada a
Objetos en Java
Inicialización y finalización
La iniciación de los atributos de la clase se realiza en Java
mediante el uso de constructores cuyo nombre coincide con el de
la clase.
2.Programación Orientada a
Objetos en Java
Java permite la sobrecarga de operaciones, por tanto se pueden
definir varios constructores posible para una clase siempre que se
diferencien en la lista de argumentos
2.Programación Orientada a
Objetos en Java
Si no se proporciona ningún constructor, Java
proporciona automáticamente un constructor por
defecto, que no recibe argumentos y realiza una
inicialización por defecto de los atributos
Una vez implementado un constructor propio por parte
del programador, Java elimina dicho constructor,
aunque puede ser definido nuevamente de manera
explícita
2.Programación Orientada a
Objetos en Java
Cuando finaliza el uso de un objeto, es frecuente la
realización de ciertas tareas antes de su destrucción,
principalmente la liberación de la memoria solicitada
durante su ejecución.
En Java la liberación de memoria se realiza de manera
automática por parte del recolector de basura, por
tanto la necesidad de este tipo de operaciones no
existe en la mayor parte de los casos
2.Programación Orientada a
Objetos en Java
Sin embargo sí puede ser necesario realizar alguna
tarea no relacionada con la liberación de memoria
antes de la destrucción del objeto, como por ejemplo
salvar el estado de la clase en un fichero o base de
datos
Java permite introducir código para este fin
implementando una operación pública especial
denominada finalize. Esta operación es invocada
automáticamente antes de la destrucción del objeto por
parte del recolector de basura
2.Programación Orientada a
Objetos en Java
Problema: no es posible saber con seguridad en qué
momento será invocada finalize, puesto que el
recolector de basura puede decidir su eliminación en
un momento indeterminado, e incluso no ser eliminado
hasta el final de la ejecución de la aplicación
Una posible solución es ordenar al recolector de
basura que realice una limpieza de memoria inmediata,
para asegurar la finalización de los objetos. Esto se
realiza mediante Runtime.getRuntime().gc()
Por motivos de eficiencia, lo anterior es poco
recomendable, sobre todo si se hace con frecuencia
2.Programación Orientada a
Objetos en Java
Relaciones entre objetos
Un conjunto de objetos aislados tiene escasa capacidad para
resolver un problema. En una aplicación real los objetos colaboran
e intercambian información, existiendo distintos tipos de
relaciones entre ellos
A nivel de diseño, podemos distinguir entre 5 tipos de relaciones
básicas entre clases de objetos: dependencia, asociación,
agregación, composición y herencia
2.Programación Orientada a
Objetos en Java
La dependencia es la relación menos importante. Simplemente
refleja que la implementación de una clase depende de otra
Una dependencia puede indicar la utilización de un objeto de una
clase como argumento de una operación de otra o en su
implementación
2.Programación Orientada a
Objetos en Java
En cambio, la asociación es la relación más importante y común.
Refleja una relación entre dos clases independientes que se
mantiene durante la vida de los objetos de dichas clases o al
menos durante un tiempo prolongado
Una asociación se implementa en Java introduciendo referencias
a objetos una clase como atributos en la otra
2.Programación Orientada a
Objetos en Java
2.Programación Orientada a
Objetos en Java
La agregación es un tipo especial de asociación donde se añade
el matiz semántico de que la clase de donde parte la relación
representa el “todo” y las clases relacionadas “las partes”
Realmente Java y la mayoría de lenguajes orientados a objetos no
disponen de una implementación especial para este tipo de
relaciones. Básicamente se tratan como las asociaciones
ordinarias
2.Programación Orientada a
Objetos en Java
La composición es un tipo de agregación que añade el matiz de
que la clase “todo” controla la existencia de las clases “parte”. Es
decir, normalmente la clase “todo” creará al principio las clases
“parte” y al final se encargará de su destrucción
Supongamos que añadimos un registro de movimientos a la clase Cuenta, de
forma que quede constancia tras cada ingreso o reintegro
2.Programación Orientada a
Objetos en Java
Las composiciones tienen una implementación similar
a las asociaciones, con la diferencia de que el objeto
principal realizará en algún momento la construcción
de los objetos compuestos
2.Programación Orientada a
Objetos en Java
Clases anidadas e interiores
Java y algunos otros lenguajes OOP permiten la definición de una
clase de objetos dentro de otra, con una doble utilidad:
Organizar mejor el código. Empaquetar en una clase principal
otras que no tienen utilidad o sentido fuera del contexto de ésta
Evitar colisiones de nombres. La clase principal define un
espacio de nombres al que pertenecen las anidadas
2.Programación Orientada a
Objetos en Java
Al igual que cualquier otro miembro de una clase, una clase
anidada puede ser estática o no estática y utilizar los niveles de
protección public, private y protected
El tipo de clase anidamiento más sencillo es aquel en que la clase
contenida se declara como estática
Desde el punto de vista de la organización del código, tendría
mucho más sentido introducir la clase Movimiento en el interior de
Cuenta. Al ser declarada como privada, se impediría su utilización
desde el exterior
2.Programación Orientada a
Objetos en Java
2.Programación Orientada a
Objetos en Java
Cuando la clase anidada no es estática, se denomina clase
interior y tiene características especiales:
Pueden ser creadas únicamente dentro de la clase continente
Tiene acceso completo y directo a todos los atributos y
operaciones del objeto que realiza su creación
Los objetos de la clase interior quedan ligados permanentemente
al objeto concreto de la clase continente que realizó su creación
No debe confundirse este elemento con la relación de
composición, aunque en muchos casos es posible utilizar clases
interiores para la implementación de este tipo de relaciones
2.Programación Orientada a
Objetos en Java
Implementando la clase Movimiento como una clase interior es
posible copiar el valor del saldo actual de la cuenta que realiza el
movimiento de manera directa
2.Programación Orientada a
Objetos en Java
2.Programación Orientada a
Objetos en Java
Aplicaciones orientadas a objetos
En una aplicación orientada a objetos debe existir una clase que
represente la propia aplicación. Este sería el punto donde
comenzaría la ejecución de la misma
La máquina virtual Java se encarga de instanciar esta clase y
llamar a una operación especial con nombre main. La existencia
de esta operación especial es lo que caracteriza a la clase de
aplicación
La clase de aplicación debe ser pública y no tener ningún
constructor o un constructor por defecto
Al menos debe implementar la operación main, con la siguiente
declaración: public static main(String[] args)
2.Programación Orientada a
Objetos en Java
Encapsulamiento
Se define como el proceso de empaquetar juntos los métodos y los datos en un
objeto. El objeto se encarga de ocultar sus datos al resto de objetos.
La encapsulación permite una seguridad mayor en el acceso a los datos ya que
este acceso depende directamente de cada objeto. Asimismo, permite abstraer
los detalles internos de funcionamiento del objeto.
2.Programación Orientada a
Objetos en Java
Intercambio de mensajes
Los objetos se comunican entre sí mediante mensajes de
invocación a métodos:
2.Programación Orientada a
Objetos en Java
Herencia
Es el concepto que define la adopción de todas las características
de una clase por parte de otra clase que es definida como
descendiente o heredera de la primera.
2.Programación Orientada a
Objetos en Java
La herencia es un mecanismo de la OOP que permite construir
una clase incorporando de manera implícita todas las
características de una clase previamente existente. Las razones
que justifican su necesidad son variadas:
Modelado de la realidad. Son frecuentes las relaciones de
especialización/generalización entre las entidades del mundo real, por tanto es
lógico que dispongamos de un mecanismo similar entre las clases de objetos
Evitar redundancias. Toda la funcionalidad que aporta una clase de objetos es
adoptada de manera inmediata por la clase que hereda, por tanto evitamos la
repetición de código entre clases semejantes
Facilitar la reutilización. Una clase no tiene por qué limitarse a recibir una serie
de características de otra clase por herencia de forma pasiva. También disponen
de cierto margen de adaptación de estas características
Soporte al polimorfismo
2.Programación Orientada a
Objetos en Java
Sea una clase A. Si una segunda clase B hereda de A entonces
decimos:
A es un ascendiente o superclase de B. Si la herencia entre A y
B es directa decimos además que A es la clase padre de B
B es un descendiente o subclase de A. Si la herencia entre A y B
es directa decimos además que B es una clase hija de A
2.Programación Orientada a
Objetos en Java
Todas las clases heredan automáticamente de una superclase
universal. En Java esta superclase se denomina Object
Existen diferentes situaciones en las que puede aplicarse
herencia:
Especialización. Dado un concepto B y otro concepto A que
representa una especialización de A, entonces puede
establecerse una relación de herencia entre las clases de objetos
que representan a A y B. En estas situaciones, el enunciado “A es
un B” suele ser aplicable
2.Programación Orientada a
Objetos en Java
Extensión. Una clase puede servir para extender la funcionalidad
de una superclase sin que represente necesariamente un
concepto más específico
2.Programación Orientada a
Objetos en Java
Especificación. Una superclase puede servir para especificar la
funcionalidad mínima común de un conjunto de descendientes.
Existen mecanismos para obligara la implementación de una serie
de operaciones en estos descendientes
2.Programación Orientada a
Objetos en Java
Construcción. Una clase puede construirse a partir de otra,
simplemente porque la hija puede aprovechar internamente parte
o toda la funcionalidad del padre, aunque representen entidades
sin conexión alguna
2.Programación Orientada a
Objetos en Java
Ejemplos de Herencia
Distintos tipos de cuentas bancarias
2.Programación Orientada a
Objetos en Java
Elementos de una interfaz de usuario
2.Programación Orientada a
Objetos en Java
Hemos visto anteriormente como los distintos niveles de
protección limitan el acceso a los miembros de la clase desde el
exterior. ¿Pero como afectan estos niveles de protección a los
miembros heredados?
Miembros públicos. Son accesibles desde los descendientes, y se
heredan como públicos
Miembros privados. No son accesibles desde los descendientes
Miembros con acceso a nivel de paquete. Son accesibles desde
los descendientes siempre y cuando pertenezcan al mismo
paquete que el ascendiente. Se heredan con el mismo nivel de
protección
2.Programación Orientada a
Objetos en Java
Un nuevo nivel de protección es el de miembros protegidos
(protected). Un miembro protegido es accesible únicamente desde
los descendientes
Además, un miembro protegido mantiene en las subclases el nivel
de acceso protegido
El sentido del polimorfismo es realizar una generalización, olvidar
los detalles concretos de uno o varios objetos de distintas clases y
buscar un punto común a todos ellos en un ancestro
2.Programación Orientada a
Objetos en Java
Polimorfismo
Son dos mecanismos relacionados que otorgan a la OOP una
gran potencia frente a otros paradigmas de programación
Únicamente tienen sentido por la existencia de la herencia
El polimorfismo (o upcasting) consiste en la posibilidad de que una
referencia a objetos de una clase pueda conectarse también con
objetos de descendientes de ésta
2.Programación Orientada a
Objetos en Java
Ligadura dinámica
Entendemos por resolución de una llamada el proceso por el cual
se sustituye una llamada a una función por un salto a la dirección
que contiene el código de esta función
Normalmente, la resolución de llamadas se realiza en en tiempo
de compilación, porque resulta más sencillo y sobre todo más
eficiente. Cuando la aplicación se está ejecutando, las llamadas
ya están “preparadas”. Este enfoque se denomina ligadura
estática
2.Programación Orientada a
Objetos en Java
El problema aparece en OOP cuando realizamos una
conexión polimorfa y llamamos a una operación
redefinida
2.Programación Orientada a
Objetos en Java
La solución consiste en esperar a resolver la llamada al tiempo de
ejecución, cuando se conoce realmente los objetos conectados a
r, y cuál es la versión de f() apropiada. Este enfoque de resolución
de llamadas se denomina ligadura dinámica y es mucho más lenta
y compleja que la estática
La ligadura dinámica, por defecto en Java, garantiza siempre la
llamada a la versión correcta de cada función, con independencia
del uso de conexiones polimorfas o no
2.Programación Orientada a
Objetos en Java
2.Programación Orientada a
Objetos en Java
3.1. Comentarios
// Comentarios de una línea
/* Comentarios de una o
más líneas */
2.Programación Orientada a
Objetos en Java
3.2. Identificadores
Son los nombres unívocos que se le dan a las clases, métodos y
variables.
Hay que tener en cuenta que:
• Deben empezar por una letra, subrayado (_) o dólar ($)
• Después del primer carácter pueden usar números.
• Distinguen las mayúsculas y minúsculas.
• Nunca pueden coincidir con una „keyword‟ o palabra reservada
del lenguaje Java
2.Programación Orientada a
Objetos en Java
2.Programación Orientada a
Objetos en Java
Estos identificadores serían válidos:
nombre_usuario
_sys_var2
$cambio
if2
nombreUsuario
Identificador
Estos no:
2013Presupuestos
*CodigoCuenta
-numeroCliente
2.Programación Orientada a
Objetos en Java
3.3. Variables
Una variable es un contenedor de datos identificado mediante un
nombre (identificador). Dicho identificador se utilizará para
referenciar el dato que contiene.
Toda variable debe llevar asociado un tipo que describe el tipo
de dato que guarda. Por tanto, una variable tiene:
• Un tipo
• Un identificador
• Un dato (o valor)
2.Programación Orientada a
Objetos en Java
Declaración de variables
Es la sentencia mediante la cual se define una variable,
asignándole un tipo y un identificador:
tipo identificador;
int cont;
Adicionalmente se le puede asignar un valor inicial
mediante una asignación:
tipo identificador = valor;
int cont = 10;
Si no se le asigna un valor, se inicializará con el valor por
defecto para ese tipo.
2.Programación Orientada a
Objetos en Java
3.4. Tipos de datos
En Java existen dos tipos de datos genéricos:
Tipos primitivos.
Tipos complejos: clases.
Existen ocho tipos de datos primitivos clasificados en
cuatro grupos diferentes:
Carácter: char
Lógico: boolean
Números enteros: byte, short, int y long
Números reales: double y float
2.Programación Orientada a
Objetos en Java
Tipo de dato lógico
La „keyword‟ es: boolean
Sus posibles valores son:
true
false
Su valor por defecto es:
false
Ejemplos:
boolean switch1 = true;
boolean switch2; // se inicializará con su valor por defecto (false)
2.Programación Orientada a
Objetos en Java
Tipo de dato carácter
La „keyword‟ es: char
Representa un carácter UNICODE.
Su tamaño es: 16 bits (2 bytes).
Sus posibles valores son:
Un carácter entre comillas simples: „a‟.
Un carácter especial con \ por delante: „\n‟, „\t‟, etc.
Un código UNICODE: „\uxxxx‟ (donde xxxx es un valor en
hexadecimal).
2.Programación Orientada a
Objetos en Java
Tipos de datos enteros
Las „keywords‟ son: byte, short, int y long
Sus tamaños son:
byte: 8 bits (1 byte), por tanto: -128 a 127.
short: 16 bits (2 bytes), por tanto: -32768 a 32767
int: 32 bits (4 bytes), por tanto: -2147483468 a 2147483467
long: 64 bits (8 bytes), por tanto: -enorme a enorme
Sus posibles valores son:
Un valor decimal entero: 2 (por defecto int) o 2L (long).
Un valor octal: 077.
Un valor hexadecimal: 0xBAAC
2.Programación Orientada a
Objetos en Java
Tipos de datos reales
Las „keywords‟ son: float y double
Sus tamaños son:
float: 32 bits (4 bytes). Su precisión varía según plataforma.
double: 64 bits (8 bytes). Su precisión también varía.
Sus posibles valores son:
Un valor decimal entero: 2 (por defecto int).
Un valor decimal real: 0.17 o 6.02E23 (por defecto double).
Un valor decimal real: 0.17F o 0.17D (redundante).
2.Programación Orientada a
Objetos en Java
Tipos de datos reales
Su valor por defecto es: 0.0 (cero)
Ejemplos:
float unFloat = 0.17F;
double unDouble;
double otroDouble = -12.01E30;
2.Programación Orientada a
Objetos en Java
Tipo de dato complejo
La „keyword‟ es el nombre de la clase del objeto que va
a contener la variable.
Posibles valores:
Referencias a objetos (o instancias) en memoria.
Su valor por defecto es: null
Ejemplos:
String unString = new String(“Hola”);
String otroString;
2.Programación Orientada a
Objetos en Java
Ámbito de las variables
El ámbito de una variable es la zona de código donde se
puede referenciar dicha variable a través de su identificador.
El lugar de definición de una variable establece su ámbito.
Ámbitos:
Atributos (o variables miembro).
Parámetros de método.
Variables locales: siempre hay que inicializarlas.
Variables de bloque: siempre hay que inicializarlas.
2.Programación Orientada a
Objetos en Java
2.Programación Orientada a
Objetos en Java
Conversiones entre tipos
Se realizan de forma automática:
las conversiones implícitas de un tipo a otro de más
precisión.
byte short int long float double
conversiones a clases ascendentes en línea de herencia
Coche Vehículo
2.Programación Orientada a
Objetos en Java
También se permiten conversiones explicitas a través
del Casting.
Estas conversiones se comprueban en tiempo de
ejecución. Son conversiones inseguras, pueden lanzar
excepciones.
byte b = (byte)127
2.Programación Orientada a
Objetos en Java
Operadores
Los operadores se pueden dividir en las siguientes
categorías:
Aritméticos
Relacionales
Condicionales
De desplazamiento
Lógicos
De asignación
Otros
2.Programación Orientada a
Objetos en Java
Operadores aritméticos
Tenemos los siguientes operadores aritméticos:
+: suma dos operandos (op1 + op2). Nota: en el caso de
Strings concatena.
- : resta dos operandos (op1 – op2).
*: multiplica dos operandos (op1 * op2).
/: divide dos operandos (op1 / op2).
%: calcula el resto de la división (op1 % op2).
2.Programación Orientada a
Objetos en Java
Operadores aritméticos
También existen operadores aritméticos unarios:
+op: convierten a op en int en caso de que fuese byte, short o char.
-op: cambia el signo a op.
++op: incrementa op en 1 (evaluando op después de
incrementarse).
op++: incrementa op en 1 (evaluando op antes de
incrementarse)
--op: decrementa op en 1 (evaluando op después de
decrementarse).
op--: decrementa op en 1 (evaluando op antes de
decrementarse)
2.Programación Orientada a
Objetos en Java
Ejemplo
2.Programación Orientada a
Objetos en Java
Operadores relacionales
Tenemos los siguientes operadores relacionales:
>: compara si un operando es mayor que otro
(op1 > op2)
<: compara si un operando es menor que otro
(op1 < op2)
==: compara si un operando es igual que otro
(op1 == op2)
!=: compara si un operando es distinto que otro
(op1 != op2)
>=: compara si un operando es mayor o igual que otro
(op1 >= op2)
<=: compara si un operando es menor o igual que otro
(op1 <= op2)
2.Programación Orientada a
Objetos en Java
Operadores condicionales
Suelen combinarse con los relacionales para crear expresiones mas complejas.
Tenemos los siguientes operadores condicionales:
&&: AND lógico. Chequea si ambos operandos son verdaderos
(op1 && op2)
||: OR lógico. Chequea si uno de los dos operandos es verdadero
(op1 || op2)
!: NOT lógico. Niega al operador
(!op)
2.Programación Orientada a
Objetos en Java
Precedencia Operador Precedencia Operador
1 ++ , -- 5 instanceof
1 + , - unarios 6 ==, !=
1 ~ 7 &
1 ! 8 ^
1 (tipo) 9 |
2 *, /, % 10 &&
3 +, - 11 ||
3 + 12 ?:
4 << 13 =
4 >> 13 *=, /=, %=, +=, -=,
<<=, >>=, >>>=,
4 >>>
&=, ^=, |=
5 <, <=, >, >=
2.Programación Orientada a
Objetos en Java
Ejercicio:
25>20&&13>5
10+4<15-3||2*5+1>14-2*2
4*2<=8||2*2<5&&4>3+1
10<=2*5&&3<4||(8>7)&&3*2<=4*2-1
2.Programación Orientada a
Objetos en Java
Soluciones
25>20 && 13>5
true && 13>5
true
10+4<15-3 || 2*5+1>14-2*2
10+4 < 15-3 || 2*5+1 > 14-2*2
14 < 12 || 11 > 10
false || true
true
2.Programación Orientada a
Objetos en Java
Soluciones
4*2<=8||2*2<5&&4>3+1
4*2<=8||2*2<5 && 4>3+1
4*2<=8 || 2*2<5 && 4>3+1
8<=8 || 2*2<5 && 4>3+1
true || 2*2<5 && 4>3+1
true
2.Programación Orientada a
Objetos en Java
Soluciones
10<=2*5&&3<4||(8>7)&&3*2<=4*2-1
10<=2*5&&3<4 || (8>7)&&3*2<=4*2-1
10<=2*5 && 3<4 || (8>7) && 3*2<=4*2-1
true && 3<4 || (8>7) && 3*2<=4*2-1
true && true || (8>7) && 3*2<=4*2-1
true || (8>7) && 3*2<=4*2-1
true
2.Programación Orientada a
Objetos en Java
Operadores de desplazamiento
Tenemos los siguientes operadores:
>>: desplaza los bits del primer operando hacia la derecha tantas
veces como indique el segundo operando
(op1 >> op2)
<<: desplaza los bits del primer operando hacia la izquierda tantas
veces como indique el segundo operando
(op1 << op2)
>>>: desplaza los bits del primer operando hacia la derecha tantas
veces como indique el segundo operando pero sin signo
(op1 >>> op2)
2.Programación Orientada a
Objetos en Java
Operadores lógicos
Tenemos los siguientes operadores lógicos:
&: AND lógico a nivel de bit (op1 & op2).
2.Programación Orientada a
Objetos en Java
Operadores lógicos
|: OR lógico a nivel de bit (op1 | op2).
2.Programación Orientada a
Objetos en Java
Operadores lógicos
^: XOR lógico a nivel de bit (op1 ^ op2).
~: complemento a nivel de bit (~op1).
2.Programación Orientada a
Objetos en Java
Operadores de asignación
Tenemos los siguientes operadores de asignación:
= : guarda el valor del segundo operando en el primero
(op1 = op2)
+= : guarda la suma de los dos operandos en el primero
(op1 += op2)
-= : guarda la resta de los dos operandos en el primero
(op1 -= op2)
*= : guarda la multiplicación resta de los dos operandos en el
primero
(op1 *= op2)
/=, %=, &=, |=, ^=, <<=, >>=, >>>=
2.Programación Orientada a
Objetos en Java
Otros operadores
Existen otros operadores en Java como:
?: : se trata de una abreviatura de la estructura if-then-else
(op1?op2:op3).
[] : utilizado para declarar, crear y acceder a arrays.
. : utilizado para acceder a atributos y métodos de objetos.
(parámetros) : utilizado para pasar parámetros a un método.
(tipo) : utilizado para realizar castings (conversiones).
new : utilizado para crear objetos nuevos.
instanceof : chequea si el primer operando es una instancia del
segundo operando.
2.Programación Orientada a
Objetos en Java
Estructuras de control
Sin las estructuras de control de flujo, el código java se
ejecutaría linealmente desde la primera línea hasta la
última.
Tipos:
Bucles: while, do-while y for
Bifurcaciones: if-then-else y switch-case
Gestión de excepciones: try-catch
De ruptura: break, continue y return
2.Programación Orientada a
Objetos en Java
Sentencias while y do-while
La sentencia while se utiliza para ejecutar continuamente un bloque de
código mientras que la condición del while sea true.
while(expresión){
sentencias;
}
La sentencia do-while es parecida a la sentencia while pero asegura que
como mínimo el bloque de código se ejecuta una vez.
do{
sentencias;
} while(expresión);
2.Programación Orientada a
Objetos en Java
Sentencia for
La sentencia for facilita la ejecución de un bloque de
código un número determinado de veces.
for(inicialización; terminación; incremento){
sentencias;
}
Nota: las variables definidas en la sentencia de inicialización son locales al bloque. Por
tanto dejan de existir una vez se haya terminado el bucle.
2.Programación Orientada a
Objetos en Java
Ejemplo
2.Programación Orientada a
Objetos en Java
Sentencia if-then-else
La sentencia if-then-else permite elegir qué bloque de código
ejecutar entre dos posibilidades.
if(expresión) { if(expresión) { if(expresión) {
sentencias; sentencias; sentencias;
} }else { } else if (expresion) {
sentencias; sentencias;
} } else {
sentencias;
}
2.Programación Orientada a
Objetos en Java
Ejemplo de uso de sentencias condicionales
2.Programación Orientada a
Objetos en Java
Sentencias de ruptura
break: sirve para detener la ejecución tanto de los bucles
como de la sentencia switch. Y por tanto saltar a la siguiente
línea de código después del bucle o switch.
continue: sirve para detener la ejecución del bloque de
código de un bucle y volver a evaluar la condición de este.
return: sirve para finalizar la ejecución de un método.
2.Programación Orientada a
Objetos en Java
Ejercicio
Identificar si este código compila bien. Si no compila solucionarlo. Si compila
decir cuál sería la salida.
public class Temp{
public static void main(String[] args){
int x=1;
while(x<10){
if(x>3){
System.out.println("Hola");
}
}
}
}
2.Programación Orientada a
Objetos en Java
Ejercicio (solución)
El código compila bien. Pero entra en un bucle infinito. Habría que modificarlo
con la línea azul y saldría la palabra “Hola” siete veces por pantalla.
public class Temp{
public static void main(String[] args){
int x=1;
while(x<10){
x = x + 1;
if(x>3){
System.out.println("Hola");
}
}
}
}
2.Programación Orientada a
Objetos en Java
Ejercicio
Identificar si este código compila bien. Si no compila solucionarlo. Si compila
decir cuál sería la salida.
public class Temp{
public static void main(String[] args){
int x=5;
while(x>1){
x = x - 1;
if(x<3){
System.out.println("Hola");
}
}
}
}
2.Programación Orientada a
Objetos en Java
Ejercicio (solución)
El código compila y saldría la palabra “Hola” dos veces por pantalla.
2.Programación Orientada a
Objetos en Java
Sentencia switch – case
Se utiliza para realizar sentencias condicionalmente basadas en alguna
expresión.
switch(expresion) {
case valor1:
instrucciones();
break;
case valor2:
instrucciones();
break;
.
.
.
case valorN:
instrucciones();
break;
default:
instrucciones();
}
2.Programación Orientada a
Objetos en Java
Ejemplo
int mes;
…
switch (mes) {
case 1: System.out.println("Enero"); break;
case 2: System.out.println("Febrero"); break;
case 3: System.out.println("Marzo"); break;
case 4: System.out.println("Abril"); break;
case 5: System.out.println("May0"); break;
case 6: System.out.println("Junio"); break;
case 7: System.out.println("Julio"); break;
case 8: System.out.println("Agosto"); break;
case 9: System.out.println("Septiembre"); break;
case 10: System.out.println("Octubre"); break;
case 11: System.out.println("Noviembre"); break;
case 12: System.out.println("Diciembre"); break;
default: ;
}
2.Programación Orientada a
Objetos en Java
Ejercicio
Implementar una clase que proporcione la siguiente salida por pantalla:
0,
0,1,
0,1,2,
0,1,2,3,
0,1,2,3,4,
0,1,2,3,4,5,
0,1,2,3,4,5,6,
0,1,2,3,4,5,6,7,
0,1,2,3,4,5,6,7,8,
0,1,2,3,4,5,6,7,8,9,
2.Programación Orientada a
Objetos en Java
Ejercicio
Implementar una clase que proporcione la siguiente salida por pantalla:
0,1,2,3,4,5,6,7,8,9,
1,2,3,4,5,6,7,8,9,
2,3,4,5,6,7,8,9,
3,4,5,6,7,8,9,
4,5,6,7,8,9,
5,6,7,8,9,
6,7,8,9,
7,8,9,
8,9,
9,
2.Programación Orientada a
Objetos en Java
Ejercicio
Implementar una clase que proporcione la siguiente salida por pantalla:
1,
2,2,
3,3,3,
4,4,4,4,
5,5,5,5,5,
6,6,6,6,6,6,
7,7,7,7,7,7,7,
8,8,8,8,8,8,8,8,
9,9,9,9,9,9,9,9,9,
2.Programación Orientada a
Objetos en Java
Ejercicio
Implementar una clase que nos diga cuántos días tiene cada mes del año,
utilizando sentencias switch – case.
Ejemplo de salida por pantalla:
Enero tiene 31 días
Febrero tiene 28 ó 29 días
Marzo tiene 31 días
Abril tiene 30 días
Mayo tiene 31 días
.
.
.
Diciembre tiene 31 días
2.Programación Orientada a
Objetos en Java
Ejercicio
Implementar una clase que muestre por pantalla los números que son primos
del 1 al 100 y el número total que hay hasta 100.
1 es primo
2 es primo
3 es primo
5 es primo
…
En total hay xx números primos