SlideShare una empresa de Scribd logo
1 de 50
Julio Medina
José M. Drake
G80 - Advanced Computing
Object oriented programming with Java
LA CRISIS DEL SOFTWARE.
El proceso de diseño en cascada que se había utilizado en ingeniería
no es apropiado para el desarrollo de software:
=>Proceso en espiral
La modularización estructurada hace que el software sea fácil de diseñar
pero inflexible y costoso de mantener:
=> Programación OO=> Programación basada en componentes => MDE
La programación secuencial tradicional, derivada del diseño de los
procesadores con arquitectura Von Newmann conduce al alejamiento entre
la solución software y el problema que se resuelve:
=> Programación concurrente
La estrategia constructiva funcional para el desarrollo del software a la
escala que la industria lo necesita hoy es la ingeniería.
2
Complejidad de los problemas
Las aplicaciones software pueden ser extremadamente complejas:
 Puede estar constituidas por miles, millones de elementos diferentes.
 Los elementos corresponder a miles de tipos diferentes de elementos.
 Tienen una estructura discreta de estados, por lo que un error en un
elemento conduce al sistema a un comportamiento radicalmente diferente.
El desarrollo de las aplicaciones software requiere hacer uso de todos los
recursos de gestión de la complejidad que ha desarrollado el ser humano:
 Modularización: Capacidad para descomponer los componentes complejos
en otros mas simples.
 Abstracción: Capacidad de reducir la información de un componente a la
estrictamente necesaria para manejarlo en un nivel o aspecto de su desarrollo.
 Herencia: Capacidad de jerarquizar los componentes del dominio de acuerdo
con las características comunes que presentan.
3
Complejidad del proceso
Hay que satisfacer y dar coherencia a miles de requisitos.
La especificación del problema la realiza el usuario y suele ser
informal. A lo largo de la vida del producto puede ser revisada
muchas veces.
Hay que satisfacer requisitos funcionales y no funcionales:
Fiabilidad, robustez, facilidad de uso, comportamiento temporal,
tiempo de vida útil, seguridad, …
Un proyecto software complejo debe ser desarrollado por un
equipo, o un grupo de equipos, por lo que requiere estrategias de
ingeniería avanzadas. Y entornos de desarrollo automatizados.
Un programa debe ser verificado para que se satisfagan todos los
requisitos de su especificación. Dado que en un sistema complejo,
es imposible asegurar la ausencia absoluta de errores, se trata de
delimitar su efecto.
4
La abstracción matemática no es una buena solución
5
Problema del
mundo real
Resultados
del problema
Formulación
matemática
Datos de salida
Solución en el
mundo real
Dominio del problema
Representación
abstracta del
problema
Interpretación
de los datos
salida
Solución en el
computador
Dominio matemático
El efecto de la abstracción matemática
Las aplicaciones son fáciles de diseñar pero muy difíciles de
mantener
6
Costo de las fases del desarrollo de una aplicación
Mantenimiento 67%
Pruebas de integración 7º
Pruebas de módulos 8%
Codificación 7%
Diseño 5%
Especificación 3º
Análisis 3º
Paradigma de programación orientada a objetos
Las bases del paradigma de desarrollo del software denominado
orientación a objetos son:
 Se utiliza como criterio de modularización la identificación de los
objetos del dominio del problema.
 Cada módulo de la aplicación software corresponde a un objeto
existente en el dominio del problema y en él se incluyen todos los
aspectos (funcionalidad, estados, datos, etc.) que son propios del
objeto.
Cuando se aborda una aplicación utilizando el paradigma orientado
a objetos la pregunta clave es:
¿Qué objetos constituyen el sistema?
Y no lo que era propio de la programación estructurada, que es:
¿Qué hace la aplicación?
7
Modularización basada en el dominio del problema
8
Solución en el
computador
Problema del
mundo real
Resultados
del problema
Formulación
en objetos
Datos de salida
Solución en el
mundo real
Dominio del problema
Representación
abstracta del
problema
Interpretación
de los datos
salida
Dominio de modelado orientado a objetos
Ejemplo de aplicación del paradigma OO.
Diseño de la aplicación de control de la puerta de un garaje:
 La puerta se abre cuando desde un coche se pulsa un mando.
 El motor mueve la puerta para abrirla o cerrarla.
 Cuando han transcurrido 10 segundos sin eventos la puerta se cierra.
 Si mientras que se está cerrando ocurre un evento de mando u
obstáculo se vuelve a abrir
 El sistema se apaga coherentemente con un interruptor.
9
Ejemplo Garaje:Diseño OO
10
Claves de las metodología orientadas a objetos.
Abstracción: Busca una definición conceptual común a muchos objetos,
tratando de identificar sus características esenciales y agrupándolos por
clases.
Encapsulación: define de forma independiente la abstracción o interfaz
del módulo y su implementación y estructura interna.
Modularidad: Describe el sistema como conjunto de módulos(objetos)
descentralizados y débilmente acoplados.
Herencia: Jerarquiza las clases de acuerdo con afinidades de sus
abstracciones.
Tipado: Clasifica los objetos de forma estricta, restringiendo las
interacciones a solo aquellas que son coherentes.
Concurrencia: Enfatiza la naturaleza independiente de cada objeto,
adjudicándole si procede líneas de control de flujo independientes.
Persistencia: Enfatiza la naturaleza independiente de los objetos,
adjudicándole una existencia que sobrepasa a quien lo creó.
11
Beneficios de la programación orientada a objetos
Descomponibilidad : Se consigue de forma natural al problema.
Componibilidad y Reusabilidad: Los objetos son reales y se comparten
con cualquier otra aplicación del mismo dominio.
Comprensibilidad y consistencia con el dominio del problema: La
función y abstracción de un objeto es obvia ya que coincide con la del
objeto del dominio real que representa.
Continuidad y estabilidad frente a cambios: La evolución de una
aplicación es consecuencia de cambios en los objetos que la componen, y
solo afecta a un módulo.
Robustez y protección frente a fallos: Cada objeto se implementa como
un ente independiente y los estados de excepción que se puedan generar,
pueden ser tratados dentro del propio objeto.
Soporte inherente de la concurrencia: La concurrencia propia de los
dominios reales se transfiere de forma natural a la aplicación.
Escalabilidad: La complejidad de la aplicación crece linealmente con la
complejidad del problema que se aborda.
12
Ambitos de aplicación de la orientación a objetos.
Los métodos orientados a objetos son aplicables a todas las fases
de desarrollo de una aplicación software.
 (OOA) Análisis orientado a objetos: Es un método de análisis que
examina los requerimientos desde el punto de vista de las clases y objetos
encontrados en el vocabulario del dominio (problema).
 (OOD) Diseño orientado a objetos: Es un método de diseñar un
programa basado en identificar los módulos de que se compone, mediante
componentes que representan conjuntamente los datos y las operaciones de
una abstracción.
 (OOP) Programación orientada a objetos: Es una forma de expresar
un programa basada en construcciones léxicas que se denominan clases y
que describen los datos y el comportamiento común de conjuntos de
objetos, que cada uno de ellos representa una instancia independiente de la
clase.
13
Clases y objetos
Las clases son los módulos de diseño que describen el estado y el
comportamiento de algún tipo de elemento que constituyen la aplicación
(y en OO también algún elemento del problema).
Una clase contiene;
 Los atributos que describen la información relativa al objeto que describe la
clase.
 Los métodos u operaciones que describen el comportamiento de los objetos
que describe la clase.
Los objetos o instancias son los módulos de ejecución que constituyen un
escenario de análisis o el programa de la aplicación que se ejecuta en un
computador.
Los objetos se instancian (construyen) a partir de una clase:
 La clase constituyen la plantilla que describe los tipos de datos y la
funcionalidad (comportamiento)de los objetos que son instancias suyas.
 Los objetos definen los valores concretos de la propiedades definidas en las
clases que se asignan a un elemento específico del problema o aplicación.
14
Ejemplo de clases y objetos
15
Clases
Objetos
Atributos de una clase
Son las variables que define la clase para contener la información que
requiere cada objetos descritos por ella para describir:
 El estado en que se encuentran como consecuencia de su evolución.
 Las propiedades de configuración cuando se crean.
Cada atributo tienen definido el tipo de dato, esto es la información que se
le puede asignar. Los tipos pueden ser un tipo primitivo (Integer, Float,
Boolean, etc.) o la referencia a una clase.
Se puede cualificar la visibilidad (quien puede leer o modificar el valor
asignado) de los atributos como públicos o privados:
 El valor de un atributos privado sólo puede ser accedido por los métodos del
propio objeto.
 El valor de los atributos públicos pueden ser también leídos por los métodos
de cualquier objetos que tenga la referencia al objeto.
Un buen criterio es declarar los atributos de las clases como privados y
definir funciones de acceso si deben ser accedidos externamente. Cuando
la clase es sólo un tipo complejo de dato, suelen ser públicos.
16
Atributos estáticos
Son variable que contienen información relativa a la clase, o a alguna
propiedad relativa al conjunto de las instancias de la clase.
Para acceder a los atributos estáticos, hay que hacer referencia a la clase
o a cualquier instancia de la misma.
En la representación UML, los atributos estáticos se representan
subrayados, los públicos con un prefijo + y los privados con un prefijo -.
17
Métodos (1)
Son funciones y operaciones definidas con referencia a los objetos de una clase.
Los métodos definidos en una clase definen su comportamiento:
 Proporcionan información deducible del estado de la instancia a la que se aplica.
 Produce cambios del estado de las instancia.
 Define operaciones básica, que sirven para construir otras mas complejas.
 Crear y construir nuevas instancias.
Cuando se invoca un método puede retornar o no, un valor. Los valores retornados
tienen un tipo definido:
 Si el tipo retornado es un tipo primitivo, retorna un valor.
 Si el tipo retornado es una clase, retorna una referencia a un objeto de la clase.
Los métodos pueden definir parámetros con tipo, a los que se asignan valores cuando
se invocan. Los valores de los parámetros son visibles en la implementación del
método.
 Si el tipo del parámetro es primitivo el valor se pasa por valor.
 Si el tipo de parámetro es una clase el valor se pasa por referencia.
Los métodos pueden definirse con visibilidad privada o pública. Los métodos privados
sólo pueden ser invocados por métodos del mismo objeto.
18
Métodos (2)
El conjunto de métodos públicos ofertados por una clase
constituyen la interfaz pública de los objetos de las clases y
definen su comportamiento como caja negra.
Los cambios internos de una clase no afecta a las aplicaciones que
las usan, siempre que mantenga su interfaz pública.
19
Métodos estáticos
Son métodos que tienen acceso sólo a la información estática de la
clase y/o a la que recibe a través de los parámetros de invocación, y
no al estado propio de cualquier instancia de la clase.
Pueden utilizarse para construir librerías de funciones que procesan
la información de los parámetros sin referencia a ningún objeto.
En UML se representan subrayadas.
20
Herencia
La herencia es el mecanismo por el que se especializan o extienden la
funcionalidad de una clase, diseñando a partir de ella nuevas clases.
La clase A es una extensión de la clase B si es cierto que A es-un B,
Cuando una clase extiende a otra, significa que hereda todo lo definido en ella
(atributos y métodos).
La clase que resulta de la extensión puede añadir nuevos elementos (atributos y
métodos) a los heredados (Extensión), o modificar su comportamiento
(Refinamiento).
Principales usos de la herencia:
 Herencia de implementación: La herencia como reutilización de código. Una clase
derivada puede heredar comportamiento de una clase base, por tanto, el código no
necesita volver a ser escrito para la derivada.
 Herencia de interfaz: La herencia como reutilización de conceptos: Esto ocurre cuando
una clase derivada sobrescribe el comportamiento definido por la clase base. Aunque no
se comparte ese código entre ambas clases, ambas comparten el prototipo del método
(comparten el concepto).
La herencia puede ser Simple o Múltiple.
21
Ejemplo de herencia
22
Clase abstracta e interface
Una clase abstracta es la que representa la parte común de la
clases que se derivan de ellas, pero que no representan ningún
objeto existente.
Una clase abstracta puede utilizarse como base de herencia, pero no
para instanciar objetos.
Una interfaz definen una interfaz pública (conjunto de métodos)
sin especificar su implementación.
Cuando una clase implementa una interfaz tiene que incluir en su
interfaz pública la declaración de todos los métodos definidos en
ella.
23
Organización del diseño
El diseño de una aplicación puede requerir la definición de muchas
clases. Estas clases se organizan en contenedores que se denominan
paquetes.
Algunos paquetes son desarrollados como parte del diseño, pero
la mayoría de los paquetes y de las clases son legados (previamente
diseñados) e importados en el proyecto de la aplicación.
24
Aplicación orientada a objetos
Una aplicación orientada a objetos se ejecuta invocando desde el
entorno un método estático <<main>> de una clase definida en el
proyecto. Normalmente, se reciben como parámetros del método
los datos de configuración
En la ejecución del método <<main>>, y organizada en base al
thread que lo invoca:
 Se crean recursivamente los objetos que participan en la aplicación
haciendo uso de los datos de configuración.
 Se invocan los métodos públicos de los objetos creados, de acuerdo
con la lógica del problema
 La aplicación termina cuando finaliza la ejecución del
método<<main>> ya sea por el fin de su lógica, o por alcanzar una
situación de excepción no atendida.
25
Lenguaje Java
El lenguaje de programación Java fue originalmente desarrollado
por James Gosling de Sun Microsystems(actualmente adquirida
por la compañía Oracle) y publicado en el 1995.
Las aplicaciones de Java son normalmente compiladas a bytecode
que puede ejecutarse en cualquier máquina virtual Java (JVM)
sin importar la arquitectura de la computadora subyacente.
Su objetivo era independizar los desarrolladores de aplicaciones del
la plataforma en la que se ejecuta ("write once, run anywhere").
Es un lenguaje muy sencillo pero muy moderno, que además de
ser OO de propósito general es concurrente, está pensado para
programar en base a patrones de diseño y tiene extensiones para
sistemas basados en componente (EJB), sistemas distribuidos
(RMI) y da soporte a la tecnología WEB, MDE, etc.
Por su productividad posiblemente sea actualmente el lenguaje de
mayor uso.
26
Programación OO con Java
Java es un lenguaje orientado a objetos puro, por lo que todo
problema diseñado como OO, tiene una implementación directa y
en gran parte automática con Java.
En esta asignatura los programas los diseñamos utilizando el
modelado UML gráfico OO y luego los trasladamos directamente a
Java.
Aspectos que hay que desarrollar:
1. Restricciones que introduce Java: Modelo OO de Java.
2. Tipos primitivos de Java y operaciones básicas
3. Sentencias de control del flujo de Java.
4. Librerías Java.
27
Restricciones de Java
Java introduce un conjunto de restricciones sobre el modelo
conceptual general OO de programación:
 Herencia de implementación simple y herencia de interface múltiple.
 Gestión de memoria basada en Heap y recolector de basura.
 Representación física de la información no específicada.
 Modelo de concurrencia basada en secciones críticas y monitores.
 …….
La mayoría de las restricción han sido impuestas para incrementar
la sencillez y la produtividad de la programación.
28
Tipos primitivos de Java (Tipos enteros)
Tipos enteros:
 byte: Es un entero de 8 bits complemento a dos. Su rango es -128 a
127 (ambos inclusivos). Es muy importante en las interfaces de I/O.
 short: Es un entero de 16 bits complemento a dos. Su rango es -32,768
a 32,767 (ambos inclusivos). Es muy importante en las interfaces de
I/O y en sistemas con restricciones de memoria.
 int: El el entero genérico de 32 bits complemento a dos. Su rango es -
2,147,483,648 a 2,147,483,647 (ambos inclusive). Generalmente este
tipo es la elección predeterminada para valores enteros.
 long: Es un entero de 64 bits complemento a dos. Su rango es -
9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (ambos
inclusivos). Lo utilizaremos frecuentemente para codificar información
temporal.
29
Tipos primitivos en Java (Tipos reales)
float: Es un real en coma flotante IEEE 754 de 32 bits y precisión
simple. Se suele utilizar en problemas que no requieren excesiva
resolución.
double: Es un real en coma flotante IEEE 754 de 64 bits y
precisión doble. Normalmente este tipo de dato es la elección
predeterminada para valores reales.
30
Tipos primitivos en Java (Tipos discretos)
boolean: El tipo de dato booleano con sólo dos valores
posibles: true (verdadero) y false (falso). Se utiliza en relaciones
lógicas. Su «tamaño» no está definido en la especificación Java.
char: El tipo de dato char es un solo carácter Unicode de 16 bits.
Tiene un valor mínimo de 'u0000' (o «0») y un máximo
de 'uffff' (o 65.535 inclusive).
31
Literales
Los tipos primitivos no se crean sino se especifican como un literal.
Literales boolean: true y false.
Literales Enteros: Se pueden expresar su tipo y con codificación decimal,
octal y hexadecimal: Ej.:
decimal: 26 decimal: 26L octal: 032 hexadecimal: 0x1A
Literales Reales: Con formulación punto fijo y punto flotante. Ej.:
123.4F 123.4D 1.234E2
Literales char: Como un carácter o por su código Unicode de 16 bits,
mediante . Ej:
‘a’ u0108
b (retroceso de carácter), t (tabulación), n (cambio de línea), f (salto de
página), r (retorno de carro), " (comillas dobles), ' (comillas simples) y  (barra
invertida).
32
Tipos básicos no primitivos
Tipo String es definido a través de la clase predefinida
java.lang.String.
Tipos enumerados: Se definen mediante clases derivadas de la clase
predefinida java.lang.enum
enum DiaSemana {LUNES, MARTES, MIÉRCOLES,
JUEVES, VIERNES, SABADO, DOMINGO}
Arrays: Son también clases y se pueden definir de tipos primitivos
o de clases. Ej.:
int[] elArray1= new int[4];
int[] elArray2={100,200,302,400};
33
Operaciones sobre tipo primitivos (Aritméticos)
Binarios
 + suma
 - resta
 * multiplicación
 / división
 % módulo .
Unarios
 + No modifica el signo
 - Invierte el signo
34
Operaciones sobre tipo primitivos (Relacionales)
35
Operador Expresión Resultado
> A > B true si A es mayor que B
>= A >= B false si A es mayor o igual que B
< A < B true si A es menor que B
<= A <= B true si A es menor o igual que B
== A == B true si A es igual a B
!= A != B true si A es distinto de B
Operaciones sobre tipo primitivos (Booleanos)
36
Nombre Operador Expresión Resultado
AND && A && B verdadero cuando A y B son verdaderos. Evaluación condicional.
OR || A || B verdadero cuando A o B son verdaderos. Evaluación condicional.
NOT ! !A verdadero si A es falso.
AND & A & B verdadero cuando A y B son verdaderos. Siempre evalúa ambos operandos.
OR | A | B verdadero cuando A o B son verdaderos. Siempre evalúa ambos operandos.
XOR ^ A ^ B verdadero cuando A y B son diferentes
Operaciones sobre tipo primitivos (Bits)
37
Operador Expresión Resultado
<< A << B Desplazamiento de A a la izquierda en B posiciones
>> A >> B
Desplazamiento de A a la derecha en B posiciones, tiene en cuenta el
signo.
>>> A >>> B
Desplazamiento de A a la derecha en B posiciones, no tiene en
cuenta el signo.
& A & B Operación AND a nivel de bits
| A | B Operación OR a nivel de bits
^ A ^ B Operación XOR a nivel de bits
~ ~A Complemento de A a nivel de bits
Operaciones sobre tipo primitivos (Asignación)
38
Operación Operador Expresión Operación equivalente
Asignación = A=B El valor de A toma el valor de B
Suma += A += B A = A + B
Resta -= A -= B A = A - B
Multiplicación *= A *= B A = A * B
División /= A /= B A = A / B
Resto de división %= A %= B A = A % B
Desplazamiento a la izquierda <<= A <<= B A = A << B
Desplazamiento a la derecha >>= A >>= B A = A >> B
Desplazamiento a la derecha
sin signo
>>>= A >>>= B A = A >>> B
AND de bits &= A &= B A = A & B
OR de bits |= A |= B A = A | B
XOR de bits ^= A ^= B A = A ^ B
Operación cast (asignación explícita de tipo)
Permite cambiar explícitamente el tipo de un dato.
Este operador aparece como el nombre del tipo a obtener entre
paréntesis; siempre antepuesto al resultado que se debe modificar.
Ej: byte a=(byte)(22+15);
39
Precedencia de las operaciones
40
Descripción Operadores
operadores posfijos op++ op--
operadores unarios ++op --op +op -op ~ !
multiplicación y división * / %
suma y resta + -
desplazamiento << >> >>>
operadores relacionales < > <= =>
equivalencia == !=
operador AND &
operador XOR ^
operador OR |
AND booleano &&
OR booleano ||
condicional ?:
operadores de asignación
= += -= *= /= %= &= ^= |= <<=
>>= >>>=
Mayor precedencia
Menor precedencia
Sentencias de control de flujo
Como regla general las sentencias de un programa se ejecutan
secuencialmente en el orden en que se han escrito.
Las sentencias de control de flujo permiten cambiar el orden de ejecución
de las sentencias dentro de la ejecución de un programa.
Tipos de sentencias:
 Sentencias de selección: Nos permite ejecutar diferentes segmentos de código
a partir del estado de la clase.
 Sentencia if-else
 Sentencia switch
 Sentencia ?
 Sentencias de iteración: Nos permite ejecutar repetidamente una sección de
código:
 Sentencia while
 Sentencia do-while
 Sentencia for
 Sentencia try-catch-finally
41
Sentencia de control if-else
La sentencia if-else permite ejecutar una de dos secciones de código
en base a una condición booleana.
if ( expresión booleana){
Bloque de código a ejecutar si la expresión es true
}else {
Bloque de código a ejecutar si la expresión es false
}
El bloque else es opcional.
42
Sentencia switch-case
Se ejecuta selectivamente una sentencia según el valor de cierta
expresión discreta.
switch ( expresionDiscreta ) {
case valor1 :
conjuntoDeSentencias1;
break;
case valor2 :
conjuntoDeSentencias2;
break;
case valor3:
conjuntoDeSentencias3;
break;
default:
conjuntoDeSentencias4;
}
43
Sentencia condicional ?
Es un tipo de estructura if-else que se puede utiliza como una
expresión dentro de una sentencia-
Expresión booleana1 ? SentenciaTrue : SentenciaFalse
Ejemplo de utilización
System.out.println((num%2)==0 ? "PAR" : "IMPAR");
44
Bucle while
Es el bucle básico de iteración que realizar una acción
sucesivamente mientras se cumpla una determinada condición.
while ( expresiónBooleana ) {
Bloque de sentencias;
};
45
Bucle do-while
Es un bucle while, pero en el que la expresión booleana se evalúa al
final del bucle.
do {
Bloque de sentencias;
} while ( ExpresiónBooleana );
46
Sentencia for
Sentencia de iteración sobre un conjunto discretos de valores.
for ( iniciación ; terminación ; incremento ){
Bloque de sentencias;
}
Ejemplo:
for( int i=1; i<10; i++ ){
System.out.print(" i="+i);
}
Otra forma más modernma de uso del for (versiones 1.5 o más):
int[] numbers = {1,2,3,4,5,6,7,8,9,10};
for (int item : numbers) System.out.println("Count is: " + item);
(esto funciona para arrays, colecciones y tipos enumerados)
for (Planet p : Planet.values())
{ System.out.printf("Your weight on %s is %f%n", p, p.surfaceWeight(mass)); }
(https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)
47
Sentencia intermedias para bucles de iteración
Sentencia break: Provoca que el flujo de control salga del bloque en curso.
int k= ....;
for ( int i = 0 ; i < 10 ; i++ ) {
if ( ( i >=k ) break;
System.out.print( " " + i );
}
Sentencia continue : Salta a ejecutar la siguiente iteración.
Ejemplo:
for ( int i = 0 ; i < 10 ; i++ ) {
if ( ( i % 3 ) == 0 ) continue;
System.out.print( " " + i );
}
(si hay varios Loops anidados se puede etiquetar el requerido y saltar a él)
Sentencia return: Sale del método en curso y retornar a la sentencia dentro
de la cual se realizó la llamada.
48
Gestión de excepciones
Las excepciones son una forma diferente de controlar el flujo de un programa. Con
ellas se podrán realizar acciones especiales en el momento que determinadas
condiciones o eventos asíncronos (Excepciones) se produzcan.
Existen varios tipos fundamentales de excepciones:
 Error: Excepciones que indican problemas muy graves, que suelen ser no recuperables
y no suelen casi nunca ser capturadas.
 Exception: Excepciones recuperables, pero que se prevén como posibles fuera del
tiempo de ejecución.
 RuntimeException: Excepciones que se dan durante la ejecución del programa a menudo
por errores en la lógica del programa o el uso del lenguaje.
Sentencia de atención de interrupciones
try {
Bloque de sentencias supervisado
} catch( Tipo de excepción e ) {
Bloque de sentencias si hay excepción
} catch( Tipo de excepción e ) {
Bloque de sentencias si hay excepción
} finally {
Bloque de sentencias que se ejecuta en cualquier caso
}
https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html 49
Paquetes predefinidos
Java tiene predefinidos una enorme cantidad de clase organizadas
por paquetes. Todos ellos bastante bien documentados.
Saber programar Java es en gran medida saber que esos paquetes
existen
The Java Language Specification, Java SE 7 Edition
Java API - Oracle Documentation
https://docs.oracle.com/javase/tutorial/
https://docs.oracle.com/javase/tutorial/java/index.html
50

Más contenido relacionado

La actualidad más candente

Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial   6 Polimorfismo, AbstraccióN E InterfacesCurso Java Inicial   6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial 6 Polimorfismo, AbstraccióN E InterfacesEmilio Aviles Avila
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidadElena Perz
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoAlvaro Enrique Ruano
 
Cuestionario
CuestionarioCuestionario
Cuestionariojpauly4
 
Curso de iniciacion a la programacion con visual basic net
Curso de iniciacion a la programacion con visual basic netCurso de iniciacion a la programacion con visual basic net
Curso de iniciacion a la programacion con visual basic netSauro Ortiz
 

La actualidad más candente (20)

Polimorfismo en Java
Polimorfismo en JavaPolimorfismo en Java
Polimorfismo en Java
 
10 Polimorfismo
10   Polimorfismo10   Polimorfismo
10 Polimorfismo
 
Poo3 java-0910
Poo3 java-0910Poo3 java-0910
Poo3 java-0910
 
Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial   6 Polimorfismo, AbstraccióN E InterfacesCurso Java Inicial   6 Polimorfismo, AbstraccióN E Interfaces
Curso Java Inicial 6 Polimorfismo, AbstraccióN E Interfaces
 
Presentacion de clases en c#
Presentacion de clases en c#Presentacion de clases en c#
Presentacion de clases en c#
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Herencia Y Polimorfismo
Herencia Y PolimorfismoHerencia Y Polimorfismo
Herencia Y Polimorfismo
 
JAVA 00 - TEMA 05 - HERENCIA
JAVA 00 - TEMA 05 - HERENCIAJAVA 00 - TEMA 05 - HERENCIA
JAVA 00 - TEMA 05 - HERENCIA
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidad
 
Manual de c#
Manual de c#Manual de c#
Manual de c#
 
Manual c# 2
Manual c# 2Manual c# 2
Manual c# 2
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismo
 
4 unidad polimorfismo
4 unidad polimorfismo4 unidad polimorfismo
4 unidad polimorfismo
 
Cuestionario
CuestionarioCuestionario
Cuestionario
 
Programacion Orientada a Objetos
Programacion Orientada a ObjetosProgramacion Orientada a Objetos
Programacion Orientada a Objetos
 
Java OO - Tema 06 - Interfaces
Java OO - Tema 06 -  InterfacesJava OO - Tema 06 -  Interfaces
Java OO - Tema 06 - Interfaces
 
JAVA OO - TEMA 01 - CLASES Y OBJETOS
JAVA OO - TEMA 01 - CLASES Y OBJETOSJAVA OO - TEMA 01 - CLASES Y OBJETOS
JAVA OO - TEMA 01 - CLASES Y OBJETOS
 
Laboratorio interfaces
Laboratorio interfacesLaboratorio interfaces
Laboratorio interfaces
 
Curso de iniciacion a la programacion con visual basic net
Curso de iniciacion a la programacion con visual basic netCurso de iniciacion a la programacion con visual basic net
Curso de iniciacion a la programacion con visual basic net
 
Laboratorio de polimorfismo
Laboratorio de  polimorfismoLaboratorio de  polimorfismo
Laboratorio de polimorfismo
 

Similar a Prog oo con_java

Fundamentos de POO
Fundamentos de POOFundamentos de POO
Fundamentos de POOgueritamala
 
Analisis y diseño orientado a odjetos
Analisis y diseño orientado a odjetosAnalisis y diseño orientado a odjetos
Analisis y diseño orientado a odjetosLex Marin
 
Fundamentos De ProgramacióN Unidad 1
Fundamentos De ProgramacióN Unidad 1Fundamentos De ProgramacióN Unidad 1
Fundamentos De ProgramacióN Unidad 1cesarmrl2
 
Semanas01y02
Semanas01y02Semanas01y02
Semanas01y02luisortiz
 
Fundamentos programacion poo
Fundamentos programacion pooFundamentos programacion poo
Fundamentos programacion pooRicardo Garcia
 
Metodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prevMetodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prevjtk1
 
Diseño+de..
Diseño+de..Diseño+de..
Diseño+de..jasped
 
Fundamentos del análisis orientado a objetos
Fundamentos del análisis orientado a objetosFundamentos del análisis orientado a objetos
Fundamentos del análisis orientado a objetosEduardo Galindo
 
Anon metodologia de la programacion orientada a objetos con c++
Anon   metodologia de la programacion orientada a objetos con c++Anon   metodologia de la programacion orientada a objetos con c++
Anon metodologia de la programacion orientada a objetos con c++ratasquerosaXX
 
Diseño de software y diseño orientado a objetos
Diseño de software y diseño orientado a objetosDiseño de software y diseño orientado a objetos
Diseño de software y diseño orientado a objetosFabiola Laguna
 
Elementos avanzados de poo
Elementos avanzados de pooElementos avanzados de poo
Elementos avanzados de pooLCA
 
Presentacion De La Primera Unidad 2
Presentacion De La Primera Unidad 2Presentacion De La Primera Unidad 2
Presentacion De La Primera Unidad 2warmab
 
Analisis Y DiseñO Orientado Objetos
Analisis Y DiseñO Orientado ObjetosAnalisis Y DiseñO Orientado Objetos
Analisis Y DiseñO Orientado ObjetosEliecer Suarez
 
Programacion Orientada a Objetos IE
Programacion Orientada a Objetos IEProgramacion Orientada a Objetos IE
Programacion Orientada a Objetos IEKaren Olan
 

Similar a Prog oo con_java (20)

Fundamentos de POO
Fundamentos de POOFundamentos de POO
Fundamentos de POO
 
Analisis y diseño orientado a odjetos
Analisis y diseño orientado a odjetosAnalisis y diseño orientado a odjetos
Analisis y diseño orientado a odjetos
 
Fundamentos De ProgramacióN Unidad 1
Fundamentos De ProgramacióN Unidad 1Fundamentos De ProgramacióN Unidad 1
Fundamentos De ProgramacióN Unidad 1
 
Introducción a UML
Introducción a UMLIntroducción a UML
Introducción a UML
 
Semanas01y02
Semanas01y02Semanas01y02
Semanas01y02
 
Semanas01y02
Semanas01y02Semanas01y02
Semanas01y02
 
Fundamentos programacion poo
Fundamentos programacion pooFundamentos programacion poo
Fundamentos programacion poo
 
Metodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prevMetodología de la programación orientada a objetos con c++ prev
Metodología de la programación orientada a objetos con c++ prev
 
Diseño+de..
Diseño+de..Diseño+de..
Diseño+de..
 
Fundamentos del análisis orientado a objetos
Fundamentos del análisis orientado a objetosFundamentos del análisis orientado a objetos
Fundamentos del análisis orientado a objetos
 
Anon metodologia de la programacion orientada a objetos con c++
Anon   metodologia de la programacion orientada a objetos con c++Anon   metodologia de la programacion orientada a objetos con c++
Anon metodologia de la programacion orientada a objetos con c++
 
Diseño de software y diseño orientado a objetos
Diseño de software y diseño orientado a objetosDiseño de software y diseño orientado a objetos
Diseño de software y diseño orientado a objetos
 
Elementos avanzados de poo
Elementos avanzados de pooElementos avanzados de poo
Elementos avanzados de poo
 
Deber analisis
Deber analisisDeber analisis
Deber analisis
 
0 todo
0 todo0 todo
0 todo
 
Presentacion De La Primera Unidad 2
Presentacion De La Primera Unidad 2Presentacion De La Primera Unidad 2
Presentacion De La Primera Unidad 2
 
Unidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a ObjetosUnidad 1_Programacion Orientada a Objetos
Unidad 1_Programacion Orientada a Objetos
 
Analisis Y DiseñO Orientado Objetos
Analisis Y DiseñO Orientado ObjetosAnalisis Y DiseñO Orientado Objetos
Analisis Y DiseñO Orientado Objetos
 
Programacion Orientada a Objetos IE
Programacion Orientada a Objetos IEProgramacion Orientada a Objetos IE
Programacion Orientada a Objetos IE
 
Entity framework
Entity frameworkEntity framework
Entity framework
 

Más de JoseEstebanTelloEstr

Ingeniería de Software y Usabilidad Web.
Ingeniería de Software y Usabilidad Web.Ingeniería de Software y Usabilidad Web.
Ingeniería de Software y Usabilidad Web.JoseEstebanTelloEstr
 
Informatica aplicada a los negocios y al ecommerce
Informatica aplicada a los negocios y al ecommerceInformatica aplicada a los negocios y al ecommerce
Informatica aplicada a los negocios y al ecommerceJoseEstebanTelloEstr
 
Abstracción y Encapsulación de en la programación Orientada a objetos
Abstracción y Encapsulación de en la programación Orientada a objetosAbstracción y Encapsulación de en la programación Orientada a objetos
Abstracción y Encapsulación de en la programación Orientada a objetosJoseEstebanTelloEstr
 
CRM implementación de un crm en comercio electrónico
CRM implementación de un crm en comercio electrónicoCRM implementación de un crm en comercio electrónico
CRM implementación de un crm en comercio electrónicoJoseEstebanTelloEstr
 
2-Estrategia-Digital-Nacional-2014.pdf
2-Estrategia-Digital-Nacional-2014.pdf2-Estrategia-Digital-Nacional-2014.pdf
2-Estrategia-Digital-Nacional-2014.pdfJoseEstebanTelloEstr
 
Calandra_Pedro_Conociendo_los_TIC.pdf
Calandra_Pedro_Conociendo_los_TIC.pdfCalandra_Pedro_Conociendo_los_TIC.pdf
Calandra_Pedro_Conociendo_los_TIC.pdfJoseEstebanTelloEstr
 

Más de JoseEstebanTelloEstr (7)

Ingeniería de Software y Usabilidad Web.
Ingeniería de Software y Usabilidad Web.Ingeniería de Software y Usabilidad Web.
Ingeniería de Software y Usabilidad Web.
 
Informatica aplicada a los negocios y al ecommerce
Informatica aplicada a los negocios y al ecommerceInformatica aplicada a los negocios y al ecommerce
Informatica aplicada a los negocios y al ecommerce
 
Abstracción y Encapsulación de en la programación Orientada a objetos
Abstracción y Encapsulación de en la programación Orientada a objetosAbstracción y Encapsulación de en la programación Orientada a objetos
Abstracción y Encapsulación de en la programación Orientada a objetos
 
CRM implementación de un crm en comercio electrónico
CRM implementación de un crm en comercio electrónicoCRM implementación de un crm en comercio electrónico
CRM implementación de un crm en comercio electrónico
 
4727404.ppt
4727404.ppt4727404.ppt
4727404.ppt
 
2-Estrategia-Digital-Nacional-2014.pdf
2-Estrategia-Digital-Nacional-2014.pdf2-Estrategia-Digital-Nacional-2014.pdf
2-Estrategia-Digital-Nacional-2014.pdf
 
Calandra_Pedro_Conociendo_los_TIC.pdf
Calandra_Pedro_Conociendo_los_TIC.pdfCalandra_Pedro_Conociendo_los_TIC.pdf
Calandra_Pedro_Conociendo_los_TIC.pdf
 

Prog oo con_java

  • 1. Julio Medina José M. Drake G80 - Advanced Computing Object oriented programming with Java
  • 2. LA CRISIS DEL SOFTWARE. El proceso de diseño en cascada que se había utilizado en ingeniería no es apropiado para el desarrollo de software: =>Proceso en espiral La modularización estructurada hace que el software sea fácil de diseñar pero inflexible y costoso de mantener: => Programación OO=> Programación basada en componentes => MDE La programación secuencial tradicional, derivada del diseño de los procesadores con arquitectura Von Newmann conduce al alejamiento entre la solución software y el problema que se resuelve: => Programación concurrente La estrategia constructiva funcional para el desarrollo del software a la escala que la industria lo necesita hoy es la ingeniería. 2
  • 3. Complejidad de los problemas Las aplicaciones software pueden ser extremadamente complejas:  Puede estar constituidas por miles, millones de elementos diferentes.  Los elementos corresponder a miles de tipos diferentes de elementos.  Tienen una estructura discreta de estados, por lo que un error en un elemento conduce al sistema a un comportamiento radicalmente diferente. El desarrollo de las aplicaciones software requiere hacer uso de todos los recursos de gestión de la complejidad que ha desarrollado el ser humano:  Modularización: Capacidad para descomponer los componentes complejos en otros mas simples.  Abstracción: Capacidad de reducir la información de un componente a la estrictamente necesaria para manejarlo en un nivel o aspecto de su desarrollo.  Herencia: Capacidad de jerarquizar los componentes del dominio de acuerdo con las características comunes que presentan. 3
  • 4. Complejidad del proceso Hay que satisfacer y dar coherencia a miles de requisitos. La especificación del problema la realiza el usuario y suele ser informal. A lo largo de la vida del producto puede ser revisada muchas veces. Hay que satisfacer requisitos funcionales y no funcionales: Fiabilidad, robustez, facilidad de uso, comportamiento temporal, tiempo de vida útil, seguridad, … Un proyecto software complejo debe ser desarrollado por un equipo, o un grupo de equipos, por lo que requiere estrategias de ingeniería avanzadas. Y entornos de desarrollo automatizados. Un programa debe ser verificado para que se satisfagan todos los requisitos de su especificación. Dado que en un sistema complejo, es imposible asegurar la ausencia absoluta de errores, se trata de delimitar su efecto. 4
  • 5. La abstracción matemática no es una buena solución 5 Problema del mundo real Resultados del problema Formulación matemática Datos de salida Solución en el mundo real Dominio del problema Representación abstracta del problema Interpretación de los datos salida Solución en el computador Dominio matemático
  • 6. El efecto de la abstracción matemática Las aplicaciones son fáciles de diseñar pero muy difíciles de mantener 6 Costo de las fases del desarrollo de una aplicación Mantenimiento 67% Pruebas de integración 7º Pruebas de módulos 8% Codificación 7% Diseño 5% Especificación 3º Análisis 3º
  • 7. Paradigma de programación orientada a objetos Las bases del paradigma de desarrollo del software denominado orientación a objetos son:  Se utiliza como criterio de modularización la identificación de los objetos del dominio del problema.  Cada módulo de la aplicación software corresponde a un objeto existente en el dominio del problema y en él se incluyen todos los aspectos (funcionalidad, estados, datos, etc.) que son propios del objeto. Cuando se aborda una aplicación utilizando el paradigma orientado a objetos la pregunta clave es: ¿Qué objetos constituyen el sistema? Y no lo que era propio de la programación estructurada, que es: ¿Qué hace la aplicación? 7
  • 8. Modularización basada en el dominio del problema 8 Solución en el computador Problema del mundo real Resultados del problema Formulación en objetos Datos de salida Solución en el mundo real Dominio del problema Representación abstracta del problema Interpretación de los datos salida Dominio de modelado orientado a objetos
  • 9. Ejemplo de aplicación del paradigma OO. Diseño de la aplicación de control de la puerta de un garaje:  La puerta se abre cuando desde un coche se pulsa un mando.  El motor mueve la puerta para abrirla o cerrarla.  Cuando han transcurrido 10 segundos sin eventos la puerta se cierra.  Si mientras que se está cerrando ocurre un evento de mando u obstáculo se vuelve a abrir  El sistema se apaga coherentemente con un interruptor. 9
  • 11. Claves de las metodología orientadas a objetos. Abstracción: Busca una definición conceptual común a muchos objetos, tratando de identificar sus características esenciales y agrupándolos por clases. Encapsulación: define de forma independiente la abstracción o interfaz del módulo y su implementación y estructura interna. Modularidad: Describe el sistema como conjunto de módulos(objetos) descentralizados y débilmente acoplados. Herencia: Jerarquiza las clases de acuerdo con afinidades de sus abstracciones. Tipado: Clasifica los objetos de forma estricta, restringiendo las interacciones a solo aquellas que son coherentes. Concurrencia: Enfatiza la naturaleza independiente de cada objeto, adjudicándole si procede líneas de control de flujo independientes. Persistencia: Enfatiza la naturaleza independiente de los objetos, adjudicándole una existencia que sobrepasa a quien lo creó. 11
  • 12. Beneficios de la programación orientada a objetos Descomponibilidad : Se consigue de forma natural al problema. Componibilidad y Reusabilidad: Los objetos son reales y se comparten con cualquier otra aplicación del mismo dominio. Comprensibilidad y consistencia con el dominio del problema: La función y abstracción de un objeto es obvia ya que coincide con la del objeto del dominio real que representa. Continuidad y estabilidad frente a cambios: La evolución de una aplicación es consecuencia de cambios en los objetos que la componen, y solo afecta a un módulo. Robustez y protección frente a fallos: Cada objeto se implementa como un ente independiente y los estados de excepción que se puedan generar, pueden ser tratados dentro del propio objeto. Soporte inherente de la concurrencia: La concurrencia propia de los dominios reales se transfiere de forma natural a la aplicación. Escalabilidad: La complejidad de la aplicación crece linealmente con la complejidad del problema que se aborda. 12
  • 13. Ambitos de aplicación de la orientación a objetos. Los métodos orientados a objetos son aplicables a todas las fases de desarrollo de una aplicación software.  (OOA) Análisis orientado a objetos: Es un método de análisis que examina los requerimientos desde el punto de vista de las clases y objetos encontrados en el vocabulario del dominio (problema).  (OOD) Diseño orientado a objetos: Es un método de diseñar un programa basado en identificar los módulos de que se compone, mediante componentes que representan conjuntamente los datos y las operaciones de una abstracción.  (OOP) Programación orientada a objetos: Es una forma de expresar un programa basada en construcciones léxicas que se denominan clases y que describen los datos y el comportamiento común de conjuntos de objetos, que cada uno de ellos representa una instancia independiente de la clase. 13
  • 14. Clases y objetos Las clases son los módulos de diseño que describen el estado y el comportamiento de algún tipo de elemento que constituyen la aplicación (y en OO también algún elemento del problema). Una clase contiene;  Los atributos que describen la información relativa al objeto que describe la clase.  Los métodos u operaciones que describen el comportamiento de los objetos que describe la clase. Los objetos o instancias son los módulos de ejecución que constituyen un escenario de análisis o el programa de la aplicación que se ejecuta en un computador. Los objetos se instancian (construyen) a partir de una clase:  La clase constituyen la plantilla que describe los tipos de datos y la funcionalidad (comportamiento)de los objetos que son instancias suyas.  Los objetos definen los valores concretos de la propiedades definidas en las clases que se asignan a un elemento específico del problema o aplicación. 14
  • 15. Ejemplo de clases y objetos 15 Clases Objetos
  • 16. Atributos de una clase Son las variables que define la clase para contener la información que requiere cada objetos descritos por ella para describir:  El estado en que se encuentran como consecuencia de su evolución.  Las propiedades de configuración cuando se crean. Cada atributo tienen definido el tipo de dato, esto es la información que se le puede asignar. Los tipos pueden ser un tipo primitivo (Integer, Float, Boolean, etc.) o la referencia a una clase. Se puede cualificar la visibilidad (quien puede leer o modificar el valor asignado) de los atributos como públicos o privados:  El valor de un atributos privado sólo puede ser accedido por los métodos del propio objeto.  El valor de los atributos públicos pueden ser también leídos por los métodos de cualquier objetos que tenga la referencia al objeto. Un buen criterio es declarar los atributos de las clases como privados y definir funciones de acceso si deben ser accedidos externamente. Cuando la clase es sólo un tipo complejo de dato, suelen ser públicos. 16
  • 17. Atributos estáticos Son variable que contienen información relativa a la clase, o a alguna propiedad relativa al conjunto de las instancias de la clase. Para acceder a los atributos estáticos, hay que hacer referencia a la clase o a cualquier instancia de la misma. En la representación UML, los atributos estáticos se representan subrayados, los públicos con un prefijo + y los privados con un prefijo -. 17
  • 18. Métodos (1) Son funciones y operaciones definidas con referencia a los objetos de una clase. Los métodos definidos en una clase definen su comportamiento:  Proporcionan información deducible del estado de la instancia a la que se aplica.  Produce cambios del estado de las instancia.  Define operaciones básica, que sirven para construir otras mas complejas.  Crear y construir nuevas instancias. Cuando se invoca un método puede retornar o no, un valor. Los valores retornados tienen un tipo definido:  Si el tipo retornado es un tipo primitivo, retorna un valor.  Si el tipo retornado es una clase, retorna una referencia a un objeto de la clase. Los métodos pueden definir parámetros con tipo, a los que se asignan valores cuando se invocan. Los valores de los parámetros son visibles en la implementación del método.  Si el tipo del parámetro es primitivo el valor se pasa por valor.  Si el tipo de parámetro es una clase el valor se pasa por referencia. Los métodos pueden definirse con visibilidad privada o pública. Los métodos privados sólo pueden ser invocados por métodos del mismo objeto. 18
  • 19. Métodos (2) El conjunto de métodos públicos ofertados por una clase constituyen la interfaz pública de los objetos de las clases y definen su comportamiento como caja negra. Los cambios internos de una clase no afecta a las aplicaciones que las usan, siempre que mantenga su interfaz pública. 19
  • 20. Métodos estáticos Son métodos que tienen acceso sólo a la información estática de la clase y/o a la que recibe a través de los parámetros de invocación, y no al estado propio de cualquier instancia de la clase. Pueden utilizarse para construir librerías de funciones que procesan la información de los parámetros sin referencia a ningún objeto. En UML se representan subrayadas. 20
  • 21. Herencia La herencia es el mecanismo por el que se especializan o extienden la funcionalidad de una clase, diseñando a partir de ella nuevas clases. La clase A es una extensión de la clase B si es cierto que A es-un B, Cuando una clase extiende a otra, significa que hereda todo lo definido en ella (atributos y métodos). La clase que resulta de la extensión puede añadir nuevos elementos (atributos y métodos) a los heredados (Extensión), o modificar su comportamiento (Refinamiento). Principales usos de la herencia:  Herencia de implementación: La herencia como reutilización de código. Una clase derivada puede heredar comportamiento de una clase base, por tanto, el código no necesita volver a ser escrito para la derivada.  Herencia de interfaz: La herencia como reutilización de conceptos: Esto ocurre cuando una clase derivada sobrescribe el comportamiento definido por la clase base. Aunque no se comparte ese código entre ambas clases, ambas comparten el prototipo del método (comparten el concepto). La herencia puede ser Simple o Múltiple. 21
  • 23. Clase abstracta e interface Una clase abstracta es la que representa la parte común de la clases que se derivan de ellas, pero que no representan ningún objeto existente. Una clase abstracta puede utilizarse como base de herencia, pero no para instanciar objetos. Una interfaz definen una interfaz pública (conjunto de métodos) sin especificar su implementación. Cuando una clase implementa una interfaz tiene que incluir en su interfaz pública la declaración de todos los métodos definidos en ella. 23
  • 24. Organización del diseño El diseño de una aplicación puede requerir la definición de muchas clases. Estas clases se organizan en contenedores que se denominan paquetes. Algunos paquetes son desarrollados como parte del diseño, pero la mayoría de los paquetes y de las clases son legados (previamente diseñados) e importados en el proyecto de la aplicación. 24
  • 25. Aplicación orientada a objetos Una aplicación orientada a objetos se ejecuta invocando desde el entorno un método estático <<main>> de una clase definida en el proyecto. Normalmente, se reciben como parámetros del método los datos de configuración En la ejecución del método <<main>>, y organizada en base al thread que lo invoca:  Se crean recursivamente los objetos que participan en la aplicación haciendo uso de los datos de configuración.  Se invocan los métodos públicos de los objetos creados, de acuerdo con la lógica del problema  La aplicación termina cuando finaliza la ejecución del método<<main>> ya sea por el fin de su lógica, o por alcanzar una situación de excepción no atendida. 25
  • 26. Lenguaje Java El lenguaje de programación Java fue originalmente desarrollado por James Gosling de Sun Microsystems(actualmente adquirida por la compañía Oracle) y publicado en el 1995. Las aplicaciones de Java son normalmente compiladas a bytecode que puede ejecutarse en cualquier máquina virtual Java (JVM) sin importar la arquitectura de la computadora subyacente. Su objetivo era independizar los desarrolladores de aplicaciones del la plataforma en la que se ejecuta ("write once, run anywhere"). Es un lenguaje muy sencillo pero muy moderno, que además de ser OO de propósito general es concurrente, está pensado para programar en base a patrones de diseño y tiene extensiones para sistemas basados en componente (EJB), sistemas distribuidos (RMI) y da soporte a la tecnología WEB, MDE, etc. Por su productividad posiblemente sea actualmente el lenguaje de mayor uso. 26
  • 27. Programación OO con Java Java es un lenguaje orientado a objetos puro, por lo que todo problema diseñado como OO, tiene una implementación directa y en gran parte automática con Java. En esta asignatura los programas los diseñamos utilizando el modelado UML gráfico OO y luego los trasladamos directamente a Java. Aspectos que hay que desarrollar: 1. Restricciones que introduce Java: Modelo OO de Java. 2. Tipos primitivos de Java y operaciones básicas 3. Sentencias de control del flujo de Java. 4. Librerías Java. 27
  • 28. Restricciones de Java Java introduce un conjunto de restricciones sobre el modelo conceptual general OO de programación:  Herencia de implementación simple y herencia de interface múltiple.  Gestión de memoria basada en Heap y recolector de basura.  Representación física de la información no específicada.  Modelo de concurrencia basada en secciones críticas y monitores.  ……. La mayoría de las restricción han sido impuestas para incrementar la sencillez y la produtividad de la programación. 28
  • 29. Tipos primitivos de Java (Tipos enteros) Tipos enteros:  byte: Es un entero de 8 bits complemento a dos. Su rango es -128 a 127 (ambos inclusivos). Es muy importante en las interfaces de I/O.  short: Es un entero de 16 bits complemento a dos. Su rango es -32,768 a 32,767 (ambos inclusivos). Es muy importante en las interfaces de I/O y en sistemas con restricciones de memoria.  int: El el entero genérico de 32 bits complemento a dos. Su rango es - 2,147,483,648 a 2,147,483,647 (ambos inclusive). Generalmente este tipo es la elección predeterminada para valores enteros.  long: Es un entero de 64 bits complemento a dos. Su rango es - 9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (ambos inclusivos). Lo utilizaremos frecuentemente para codificar información temporal. 29
  • 30. Tipos primitivos en Java (Tipos reales) float: Es un real en coma flotante IEEE 754 de 32 bits y precisión simple. Se suele utilizar en problemas que no requieren excesiva resolución. double: Es un real en coma flotante IEEE 754 de 64 bits y precisión doble. Normalmente este tipo de dato es la elección predeterminada para valores reales. 30
  • 31. Tipos primitivos en Java (Tipos discretos) boolean: El tipo de dato booleano con sólo dos valores posibles: true (verdadero) y false (falso). Se utiliza en relaciones lógicas. Su «tamaño» no está definido en la especificación Java. char: El tipo de dato char es un solo carácter Unicode de 16 bits. Tiene un valor mínimo de 'u0000' (o «0») y un máximo de 'uffff' (o 65.535 inclusive). 31
  • 32. Literales Los tipos primitivos no se crean sino se especifican como un literal. Literales boolean: true y false. Literales Enteros: Se pueden expresar su tipo y con codificación decimal, octal y hexadecimal: Ej.: decimal: 26 decimal: 26L octal: 032 hexadecimal: 0x1A Literales Reales: Con formulación punto fijo y punto flotante. Ej.: 123.4F 123.4D 1.234E2 Literales char: Como un carácter o por su código Unicode de 16 bits, mediante . Ej: ‘a’ u0108 b (retroceso de carácter), t (tabulación), n (cambio de línea), f (salto de página), r (retorno de carro), " (comillas dobles), ' (comillas simples) y (barra invertida). 32
  • 33. Tipos básicos no primitivos Tipo String es definido a través de la clase predefinida java.lang.String. Tipos enumerados: Se definen mediante clases derivadas de la clase predefinida java.lang.enum enum DiaSemana {LUNES, MARTES, MIÉRCOLES, JUEVES, VIERNES, SABADO, DOMINGO} Arrays: Son también clases y se pueden definir de tipos primitivos o de clases. Ej.: int[] elArray1= new int[4]; int[] elArray2={100,200,302,400}; 33
  • 34. Operaciones sobre tipo primitivos (Aritméticos) Binarios  + suma  - resta  * multiplicación  / división  % módulo . Unarios  + No modifica el signo  - Invierte el signo 34
  • 35. Operaciones sobre tipo primitivos (Relacionales) 35 Operador Expresión Resultado > A > B true si A es mayor que B >= A >= B false si A es mayor o igual que B < A < B true si A es menor que B <= A <= B true si A es menor o igual que B == A == B true si A es igual a B != A != B true si A es distinto de B
  • 36. Operaciones sobre tipo primitivos (Booleanos) 36 Nombre Operador Expresión Resultado AND && A && B verdadero cuando A y B son verdaderos. Evaluación condicional. OR || A || B verdadero cuando A o B son verdaderos. Evaluación condicional. NOT ! !A verdadero si A es falso. AND & A & B verdadero cuando A y B son verdaderos. Siempre evalúa ambos operandos. OR | A | B verdadero cuando A o B son verdaderos. Siempre evalúa ambos operandos. XOR ^ A ^ B verdadero cuando A y B son diferentes
  • 37. Operaciones sobre tipo primitivos (Bits) 37 Operador Expresión Resultado << A << B Desplazamiento de A a la izquierda en B posiciones >> A >> B Desplazamiento de A a la derecha en B posiciones, tiene en cuenta el signo. >>> A >>> B Desplazamiento de A a la derecha en B posiciones, no tiene en cuenta el signo. & A & B Operación AND a nivel de bits | A | B Operación OR a nivel de bits ^ A ^ B Operación XOR a nivel de bits ~ ~A Complemento de A a nivel de bits
  • 38. Operaciones sobre tipo primitivos (Asignación) 38 Operación Operador Expresión Operación equivalente Asignación = A=B El valor de A toma el valor de B Suma += A += B A = A + B Resta -= A -= B A = A - B Multiplicación *= A *= B A = A * B División /= A /= B A = A / B Resto de división %= A %= B A = A % B Desplazamiento a la izquierda <<= A <<= B A = A << B Desplazamiento a la derecha >>= A >>= B A = A >> B Desplazamiento a la derecha sin signo >>>= A >>>= B A = A >>> B AND de bits &= A &= B A = A & B OR de bits |= A |= B A = A | B XOR de bits ^= A ^= B A = A ^ B
  • 39. Operación cast (asignación explícita de tipo) Permite cambiar explícitamente el tipo de un dato. Este operador aparece como el nombre del tipo a obtener entre paréntesis; siempre antepuesto al resultado que se debe modificar. Ej: byte a=(byte)(22+15); 39
  • 40. Precedencia de las operaciones 40 Descripción Operadores operadores posfijos op++ op-- operadores unarios ++op --op +op -op ~ ! multiplicación y división * / % suma y resta + - desplazamiento << >> >>> operadores relacionales < > <= => equivalencia == != operador AND & operador XOR ^ operador OR | AND booleano && OR booleano || condicional ?: operadores de asignación = += -= *= /= %= &= ^= |= <<= >>= >>>= Mayor precedencia Menor precedencia
  • 41. Sentencias de control de flujo Como regla general las sentencias de un programa se ejecutan secuencialmente en el orden en que se han escrito. Las sentencias de control de flujo permiten cambiar el orden de ejecución de las sentencias dentro de la ejecución de un programa. Tipos de sentencias:  Sentencias de selección: Nos permite ejecutar diferentes segmentos de código a partir del estado de la clase.  Sentencia if-else  Sentencia switch  Sentencia ?  Sentencias de iteración: Nos permite ejecutar repetidamente una sección de código:  Sentencia while  Sentencia do-while  Sentencia for  Sentencia try-catch-finally 41
  • 42. Sentencia de control if-else La sentencia if-else permite ejecutar una de dos secciones de código en base a una condición booleana. if ( expresión booleana){ Bloque de código a ejecutar si la expresión es true }else { Bloque de código a ejecutar si la expresión es false } El bloque else es opcional. 42
  • 43. Sentencia switch-case Se ejecuta selectivamente una sentencia según el valor de cierta expresión discreta. switch ( expresionDiscreta ) { case valor1 : conjuntoDeSentencias1; break; case valor2 : conjuntoDeSentencias2; break; case valor3: conjuntoDeSentencias3; break; default: conjuntoDeSentencias4; } 43
  • 44. Sentencia condicional ? Es un tipo de estructura if-else que se puede utiliza como una expresión dentro de una sentencia- Expresión booleana1 ? SentenciaTrue : SentenciaFalse Ejemplo de utilización System.out.println((num%2)==0 ? "PAR" : "IMPAR"); 44
  • 45. Bucle while Es el bucle básico de iteración que realizar una acción sucesivamente mientras se cumpla una determinada condición. while ( expresiónBooleana ) { Bloque de sentencias; }; 45
  • 46. Bucle do-while Es un bucle while, pero en el que la expresión booleana se evalúa al final del bucle. do { Bloque de sentencias; } while ( ExpresiónBooleana ); 46
  • 47. Sentencia for Sentencia de iteración sobre un conjunto discretos de valores. for ( iniciación ; terminación ; incremento ){ Bloque de sentencias; } Ejemplo: for( int i=1; i<10; i++ ){ System.out.print(" i="+i); } Otra forma más modernma de uso del for (versiones 1.5 o más): int[] numbers = {1,2,3,4,5,6,7,8,9,10}; for (int item : numbers) System.out.println("Count is: " + item); (esto funciona para arrays, colecciones y tipos enumerados) for (Planet p : Planet.values()) { System.out.printf("Your weight on %s is %f%n", p, p.surfaceWeight(mass)); } (https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html) 47
  • 48. Sentencia intermedias para bucles de iteración Sentencia break: Provoca que el flujo de control salga del bloque en curso. int k= ....; for ( int i = 0 ; i < 10 ; i++ ) { if ( ( i >=k ) break; System.out.print( " " + i ); } Sentencia continue : Salta a ejecutar la siguiente iteración. Ejemplo: for ( int i = 0 ; i < 10 ; i++ ) { if ( ( i % 3 ) == 0 ) continue; System.out.print( " " + i ); } (si hay varios Loops anidados se puede etiquetar el requerido y saltar a él) Sentencia return: Sale del método en curso y retornar a la sentencia dentro de la cual se realizó la llamada. 48
  • 49. Gestión de excepciones Las excepciones son una forma diferente de controlar el flujo de un programa. Con ellas se podrán realizar acciones especiales en el momento que determinadas condiciones o eventos asíncronos (Excepciones) se produzcan. Existen varios tipos fundamentales de excepciones:  Error: Excepciones que indican problemas muy graves, que suelen ser no recuperables y no suelen casi nunca ser capturadas.  Exception: Excepciones recuperables, pero que se prevén como posibles fuera del tiempo de ejecución.  RuntimeException: Excepciones que se dan durante la ejecución del programa a menudo por errores en la lógica del programa o el uso del lenguaje. Sentencia de atención de interrupciones try { Bloque de sentencias supervisado } catch( Tipo de excepción e ) { Bloque de sentencias si hay excepción } catch( Tipo de excepción e ) { Bloque de sentencias si hay excepción } finally { Bloque de sentencias que se ejecuta en cualquier caso } https://docs.oracle.com/javase/tutorial/essential/exceptions/catch.html 49
  • 50. Paquetes predefinidos Java tiene predefinidos una enorme cantidad de clase organizadas por paquetes. Todos ellos bastante bien documentados. Saber programar Java es en gran medida saber que esos paquetes existen The Java Language Specification, Java SE 7 Edition Java API - Oracle Documentation https://docs.oracle.com/javase/tutorial/ https://docs.oracle.com/javase/tutorial/java/index.html 50