Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introducción a la POO
Introducción a la POO
1. Introducción
Tópicos de la Programación Estructurada:
➢ En un lenguaje procedimental, un programa es un conjunto de
instrucciones o sentencias.
1. Introducción
Tópicos de la Programación Estructurada:
➢ Cada función tienen un propósito bien definido.
1. Introducción
Limitaciones de la Programación Estructurada:
➢ Acceso ilimitado de las funciones a datos globales.
Gran cantidad de funciones o subrutinas relacionándose entre
si y accediendo a datos globales. Esto sucede básicamente
cuando el programa es extenso en líneas de código, módulos y
funciones.
2. POO
Es un enfoque conceptual para diseñar programas, utilizando un
lenguaje de programación orientado a objetos.
2. POO
➢ Su objetivo es modelar el mundo real.
2. POO
2. POO
➢ Los métodos son las operaciones que se pueden efectuar sobre los
atributos de un objeto. Si hacemos el símil con la programación
estructurada, estos son las funciones.
3. Fundamentos de la POO
➢ Un aspecto importante es la ocultación de datos; es decir, se
accede a ellos a través de un método del objeto y nunca
directamente.
3. Fundamentos de la POO
Objeto:
➢ Compuesto por atributos y métodos.
➢ No necesariamente es tangible. Puede ser un auto o un equipo de
fútbol entre otros.
Representa
Introducción a la POO
3. Fundamentos de la POO
TAD: Clases
➢ Un avance en la programación, se dio cuando en una sola
estructura se pudieron almacenar una serie de datos. Si embargo
siempre estaban independientes de las operaciones que actúan
sobre ellos (no se modela mundo real).
➢ Sin embargo los TAD no solo describen los atributos de los objetos,
sino que también las operaciones que actúan sobre ellos.
3. Fundamentos de la POO
Instancias:
¿Pero entonces objeto es lo mismo que clase?
Para que nos quede claro:
➢ Una clase describe un objeto, pero en la practica describe múltiples
objetos del mismo tipo.
➢ ¿Porque? En POO una clase es un Tipo de Dato.
➢ Y las variables de este tipo se denominan instancias.
3. Fundamentos de la POO
Métodos:
➢ Es una operación(función) sobre un objeto.
3. Fundamentos de la POO
Ventajas:
➢ Modela los sistemas de acuerdo al mundo real.
➢ Salud
➢ Defensa
➢ Computación Distribuida.
- Color
atributos
- # placa
- # asientos
métodos - Acelerar
- Poner gasolina
- Encender luces
Introducción a la POO
autoDeMaria
- Color: amarillo
- # de placa: P564
- # asientos: 4
Instancia 2
- Acelerar
- Poner gasolina
- Encender luces
Unidad II. Terminología básica.
Primera parte.
Terminología básica
INDICE
OBJETO
MENSAJE
CLASE
Terminología básica
1 Objeto
Un objeto (compuesto por atributos y métodos) es la
instancia de una clase.
- El señor Pérez es un objeto de la clase Persona.
Un objeto es simplemente una colección de información
relacionada con cierta funcionalidad.
Un objeto puede ser:
- algo que tenga una manifestación o correspondencia en el
mundo real (tal como un objeto empleado),
- algo que tenga algún significado virtual (tal como una
ventana en la pantalla), o
- alguna abstracción adecuada dentro de un programa (una
lista de trabajos a realizar)
Terminología básica
1 Objeto (Cont.)
Un objeto es una entidad atómica formada por la unión del estado y del
comportamiento.
Estado: atributos
Comportamiento: métodos
1 Objeto (Cont.)
Los objetos pueden ser:
Tangibles o entidades físicas: una montaña, un grano de arena.
1 Objeto (Cont.)
En síntesis, un objeto se compone de datos que describen el
objeto y las operaciones que se pueden ejecutar sobre ese
objeto.
1 Objeto (Cont.)
Los objetos tienen propiedades específicas, tales como
posición, tamaño, color, forma, etc. que definen su
estado.
1 Objeto (Cont.)
Supongamos una máquina de una fábrica.
El estado de la máquina puede ser encendido/apagado, y
trabajar a su potencia, velocidad máxima, velocidad actual,
temperatura, etc.
1 Objeto (Cont.)
Las características que se eligen para enfatizar en el estado y el
comportamiento se apoyarán en como un objeto máquina se
utilizará en una aplicación o programa.
1 Objeto (Cont.)
Cada objeto sabe también cómo ejecutar acciones con sus
propios datos.
Las líneas que conectan los objetos representan los enlaces que
existen entre el cliente y sus cuentas.
Terminología básica
Estado
El estado de un objeto, en un momento dado se corresponde con
una selección determinada de valores a partir de valores posibles
de los diversos atributos.
Estado
Una clase podrá contener varios atributos o ninguno.
Los atributos de una clase son las partes de información que
representan el estado de un objeto. Así, los detalles de la clase
Carro son atributos: color, numero de puertas, potencia, etc.
Los atributos pueden ser tipos primitivos (enteros, reales, …),
compuestos (cadena, complejo, …) o relaciones con otros objetos
complejos.
Un auto
Azul marino
1 800 centímetros cúbicos
Audi A3
150 CV
Terminología básica
Estado
Un nombre de un atributo puede ser cualquier conjunto de
caracteres, pero dos atributos de la misma clase no pueden tener
el mismo nombre.
Estado
Si el nombre es de mas de una palabra, las palabras se unen y
cada palabra, excepto la primera, comienza con una letra
mayúscula.
Estado
Se puede indicar también un valor por defecto (en forma
predeterminada) para un atributo.
miLavadora : Lavadora
Vuelo
Terminología básica
Evolución de un objeto
En un objeto, hay atributos cuyos valores van variando, tal como
la capacidad (cantidad de gasolina en el tanque), ya que a medida
que avance, disminuirá la cantidad que contiene el depósito.
Hay otros atributos que no cambian, como el color o la marca del
vehículo.
Terminología básica
Comportamiento
Cada componente del comportamiento individual de un objeto se
denomina operación.
Una operación de una clase describe qué hace una clase pero no
necesariamente cómo lo hace.
Terminología básica
Comportamiento
Cada componente del comportamiento individual de un objeto se
denomina operación.
Comportamiento
Sintaxis operaciones
1. nombre (parámetros) : tipo_retorno
2. nombre ( )
CuentaCorriente
nombre: String
tipo : String
número: float
ingresar() : float
retirar() : float
Terminología básica
Comportamiento
Al igual que sucede con los nombres de atributos, el nombre de
una operación se pone en minúsculas si es una palabra; en el caso
de que el nombre conste de más de una palabra se unen ambas y
comienzan todas las palabras reservadas después de la primera
con una letra mayúscula.
2 Mensaje.
Un mensaje es una instrucción que se envía a un objeto y que
cuando se recibe ejecuta sus acciones.
2. Mensaje.
Los mensajes se pueden mostrar en UML mediante un diagrama
de secuencia.
1. Visualizar
Terminología básica
2. Mensaje.
El mensaje puede ser reflexivo: un objeto se envía un mensaje a si
mismo.
Objeto 1
Mensaje 1
Terminología básica
2. Mensaje.
La noción de un mensaje es un concepto abstracto que se puede
implementar de varias formas, tales como una llamada a una
función, un evento o suceso directo, una interrupción, una
búsqueda dinámica, etc.
Un mensaje combina flujos de control y flujos de datos en una
única entidad. Las flechas simples indican el flujo de control y las
flechas con un pequeño círculo en el origen son flujos de datos.
Mensaje
Objeto 1 Objeto 2
Datos #
Datos @
Terminología básica
2. Mensaje.
Tipos de mensaje.
Existen diferentes categorías de mensajes:
Constructores (crean objetos)
Destructores (destruyen objetos)
Selectores (devuelven todo o parte del estado de un objeto)
Modificadores (cambian todo o parte del estado de un objeto)
Iteradores (visitan el estado de un objeto o el contenido de una estructura
de datos que incluye varios objetos).
Terminología básica
3 Clase
Una clase es un tipo definido por el usuario.
3. Clase (Cont.)
Una clase incluye también todos los datos necesarios para
describir los objetos creados a partir de una clase. Estos datos se
conocen como atributos o variables.
3. Clase (Cont.)
Este proceso de abstracción suele comenzar con la identificación
de características comunes a un conjunto de elementos y prosigue
con la descripción concisa de estas características en lo que
convencionalmente se ha venido en llamar clase.
3. Clase (Cont.)
Los objetos software se construyen a partir de las clases, vía un
proceso conocido como instanciación. De este modo un objeto es
una instancia (ejemplar o caso) de una clase.
Los métodos son los que determinan cómo se pueden utilizar los
datos de la clase.
3. Clase (Cont.)
Representación gráfica de una clase.
En UML 2.0 una clase se representa con una caja rectangular
dividida en compartimentos, secciones o bandas.
El primer compartimento contiene el nombre de la clase.
El segundo compartimento contiene los atributos.
El tercero se utiliza para las operaciones.
Se puede ocultar o quitar cualquier compartimento de la clase
para aumentar la legibilidad del diagrama.
Cuando no existe un compartimento no significa que esté vacío.
Se pueden añadir compartimentos a una clase para mostrar
información adicional, tal como excepciones o eventos, aunque
no es normal incluir estas propiedades.
Terminología básica
3. Clase (Cont.)
Representación gráfica de una clase.
UML propone que el nombre de una clase:
Comience con una letra mayúscula
Esté centrado en el compartimento superior.
Sea escrito en un tipo de letra negrita.
Sea escrito en cursivas cuando la clase sea abstracta.
Los atributos y operaciones son opcionales, aunque eso no
significa que si no se muestran estén vacíos.
Empleado Empleado
Terminología básica
3. Clase (Cont.)
Representación gráfica de una clase.
Ejemplo: La clase Auto contiene los atributos color, motor y
velocidadMaxima. La clase puede agrupar las operaciones
arrancar, acelerar y frenar.
color
motor
velocidadMaxima
arrancar()
acelerar()
frenar()
Unidad III
Técnicas de POO
Técnicas de POO
Técnicas de la POO
• Abstracción
• Encapsulamiento y ocultación de datos
• Herencia
• Polimorfismo
• Reusabilidad o reutilización de código
Abstracción
Técnicas de POO
La abstracción en SW:
Técnicas de POO
Abstracción
• En el análisis de un auto, sólo interesa conocer qué servicios que
presta (operaciones), no cómo hace para ejecutarlos.
Auto
- numeroPlaca
- color
- estadoLuces
+ acelerar()
+ ponerGasolina()
+ encenderLuces()
Técnicas de POO
Encapsulamiento y Ocultación de Datos
• La encapsulación es la reunión en una estructura, de todos los
elementos que en un nivel de abstracción se consideran parte de
una misma entidad (categoría o clase).
Herencia
• Trata de modelar la herencia como en la vida real.
Herencia
• Las clases hijas también se les conoce como: subclase o derivada.
• Las técnicas de herencia se representan con la relación “es-un”.
En nuestro ejemplo podemos decir: un mono “es-un” animal.
Herencia
• Y también comparten características heredadas de la clase
animal:
altura, peso, número de patas, etc
Herencia
Técnicas de POO
Herencia
• Ejemplo 2
Rectangulo y Circulo
heredan el atributo color y
los métodos para modificar y
obtener el color.
Herencia
• Las clases modelan la
realidad en base a que los
objetos de esta contienen
Técnicas de POO
atributos y comportamiento.
Herencia
• Cada clase derivada hereda las características (atributos y
operaciones) de la clases base; y además, agrega sus propias
características.
Superclases y Subclases
• Las clases con propiedades comunes se organizan en superclases.
Herencia… continuación
Clases Abstractas
Clases Abstractas
• Deja algunos aspectos del funcionamiento de la clase a las
subclases concretas.
Clases Abstractas
• Una operación abstracta
no tiene implementación
de métodos, solo la
signatura o el prototipo.
Clases Abstractas
• La clase que hereda de una clase abstracta (la cual tiene uno o más
operaciones abstractas) debe implementar esas operaciones
abstractas que han sido heredadas.
Clases Abstractas y
Clases Concretas
Técnicas de POO
Herencia Simple
Técnicas de POO
Herencia Simple
• La clase padre es más general que la clase hija.
• Una clase hija puede ser a su vez clase padre de otra clase hija.
• En UML, la relación que une una clase padre con una hija, es una
línea que termina con una punta de flecha apuntando a la clase
padre, y representa la herencia.
• Si una clase no tiene padre es una clase base o raíz. Sino tiene hijas
se denomina clase terminal o clase hija.
Herencia Múltiple
Técnicas de POO
Herencia Múltiple
• Es llamada también generalización múltiple.
Herencia Múltiple
• Imaginemos si quisiéramos modelar que la clase Delfín hereda de
la clase Mamífero y de la clase Pez. Y sus clases padres(ambas)
tienen la operación «comer».
¿De quien va heredar?
Técnicas de POO
Herencia Múltiple
• C++ admite este tipo de herencia, pero debe utilizar un conjunto
propio de reglas de ese lenguaje para resolver esos conflictos.
Nivel 1
Nivel 2
Técnicas de POO
• Ejemplo:
En el caso de unos trabajadores o empleados de una empresa. Se
pueden clasificar según:
•el modo de pago (sueldo fijo, por horas, comisión);
•dedicación a la empresa (plena o parcial) o
•estado de su relación laboral con la empresa (fijo o temporal).
Técnicas de POO
Polimorfismo.
• En POO cada clase “conoce” cómo realizar esa operación.
Polimorfismo.
• Importancia.
• En el modelado, se usan palabras iguales con comportamientos distintos.
• En el software, el polimorfismo toma ventaja de la herencia.
• En Java, el polimorfismo permite que un objeto determine en
tiempo de ejecución la operación a realizar.
• Ejemplo:
Técnicas de POO
Polimorfismo.
• Si se desea calcular la superficie, cada figura tiene un método
distinto para hacerlo.
Polimorfismo.
• Ejemplos.
No importa que tipo de Vehiculo sea, ya que si llamamos al método
“getNumeroRuedas()” llamará al propio método dependiendo de
cada subclase, pero el objeto no deja de ser Vehículo también.
Técnicas de POO
Polimorfismo.
• Ejemplos.
No importa que tipo de objeto sea, puede ser Persona, Alumno o
Empleado, cuando invoque el método “getNombre()” llamará al
propio de cada subclase, pero el objeto no deja de ser Persona
también, y puede estar almacenado en una variable de tipo Persona.
Técnicas de POO
• Forma de declarar que todos los métodos de una clase son públicos
y abstractos; con ello se especifica el comportamiento común de
todas las clases que implementen la interfaz.
Técnicas de POO
Ejemplo de Interfaces.
• Una tienda tiene el día de hoy las siguientes políticas de descuento:
•20% para las personas mayores
•Descontar una cantidad fija ($50)
•Aplicar 20% a personas mayores y además descontar $50
Técnicas de POO
Reusabilidad o reutilización de código.
• Una vez que se ha creado, escrito y depurado una clase, se puede
poner a disposición de otros programadores.
•Debe diseñar sus programas de modo que pueda reutilizar sus clases,
sus algoritmos y sus estructuras de datos.
JAVA
Contenido
1. Entorno de programación en Java
– Características Principales
1
JAVA
– Compilador e Interprete de Java
– Usos actuales de Java
– Tecnologías del entorno de desarrollo
2. Elementos Básicos de Java
– Caracteres especiales
– Tipos de dato
• Simples o primitivos
• Orientados a Objetos o Referenciados (Clases)
– Literales o constantes
…..
2
JAVA
Contenido
2. Elementos Básicos de Java
– Identificadores
– Comentarios
– Operadores
• Aritméticos
• Relacionales
• Lógicos
• Operador de asignación
• Conversión de tipo de asignación
• Operador condicional
3
JAVA
• Jerarquía de Operadores
1. Entorno de Programación en Java
• Java es un lenguaje de programación de alto nivel.
• Se pueden escribir programas convencionales (para
intranet) y para la Internet.
• Es independiente de la plataforma, tanto en código
fuente como en binario.
• Java incluye dos elementos: un compilador y un
intérprete.
4
JAVA
• El compilador produce un código de bytes que se
almacena en un archivo para ser ejecutado por el
intérprete Java.
Programa Compilador Código de Máquina
escrito en bytes virtual de
Java Java
6
JAVA
– Reutilización.
– Polimorfismo.
• Otras características: Interpretado, Robusto, y de
Arquitectura Neutra
• Compilador tradicional y Máquina Virtual de Java
7
JAVA
• Compilador Java
• Traslada
sentencias alto-nivel a
múltiples
instrucciones.Traduce código
• Creación de librerías fuente a código como resultado de intermedio. compilaciones
previas.• Interprete de Java
• Juntando, se crea programa
8
JAVA
ejecutable.Virtual
Machine(JVM)
(ByteCodes interpretados (ejecutados))
Usos Actuales de Java
• Preferido para implementar aplicaciones basadas en
Internet e intranets, y para desarrollar SW para
dispositivos que se comunican a través de una red (por
ejemplo móviles).
10
JAVA
Sun Microsystems proporciona también el Netbeans IDE
(versión más reciente 7.3) que es un entorno de
desarrollo integrado (Integrated Development
Environment), el cual se ofrece por separado.
2. Elementos Básicos de JAVA
Caracteres de Java
• Estos caracteres son usados para formar constantes,
identificadores y palabras clave de Java.
• Pueden agruparse en:
• Letras
– Letras mayúsculas de los alfabetos internacionales:
A - Z (son válidas las letras acentuadas y la Ñ)
11
JAVA
– Letras minúsculas de los alfabetos internacionales: a
- z (son válidas las letras acentuadas y la ñ)
• Las letras mayúsculas y minúsculas son caracteres diferentes.
Caracteres de Java
• Dígitos
• Dígitos de los alfabetos internacionales, entre los que se
encuentran: 0 1 2 3 4 5 6 7 8 9
• caracteres especiales
• Caracteres: “_”, “$” y cualquier carácter del Unicode por encima
de 00C0.
• espacios en blanco • signos de puntuación y • secuencias de
escape.
12
JAVA
Espacios en Blanco
Los siguientes caracteres son considerados como uno solo:
\n, se denominan espacio en blanco, porque esa es su
labor separar elementos de un programa.
• Espacio en blanco (ASCII SP)
• tabulador horizontal (ASCII HT)
• avance de página (ASCII FF)
• nueva línea (ASCII LF)
• retorno de carro (ASCII CR) o CR LF
13
JAVA
• Los espacios en blanco en exceso son ignorados por el
compilador.
Signos de Puntuación
• Son los siguientes:
, . ; : ? ‘ “ ( ) [ ] { } < !
| / \ ~ + % & ^ * - = >
• Se usan para:
– indicar que un identificador es una función o un array
– especificar una determinada operación aritmética, lógica o de
relación, etc.
• Ciertos caracteres como las comillas sencillas y dobles tienen
significado especial en Java, así que no pueden ser utilizados
14
JAVA
directamente. Por esto, Java proporciona secuencias de escape
especiales, algunas veces mencionadas como constantes de
caracteres (de barra invertida). Estas secuencias son utilizadas en
lugar de los caracteres que ellas representan.
Secuencias de Escape
16
JAVA
• Todos los otros tipos de datos de Java son construidos desde estos
tipos simples.
Tipo Significado
boolean Representa valores true/false
byte Enteros de 8 bits
char Carácter (Unicode de 16 bits) double Con
punto flotante de doble precisión float Con punto
flotante de precisión simple
17
JAVA
int Entero
long Entero largo
short Entero corto
Tipos de Datos Enteros
18
JAVA
• Java no soporta enteros sin signo.
• Tipo de entero mas comúnmente utilizado es int.
Primer ejemplo de programa en Java
1 /* Calcula el número de pulgadas cúbicas en 2
una milla cúbica.
3 */
4 class CalcularPulgadas {
5 public static void main(String args[]) {
6 long ci;
7 long im;
8 im = 5280 * 12;
9 ci = im * im * im;
10 System.out.println("Hay " + ci +
19
JAVA
11 "pulgadas cúbicas en una milla cúbica.");12
} 13 }
IMPORTANTE: El nombre del archivo “CalcularPulgadas.java” de la
aplicación debe ser exactamente el mismo nombre de la clase pública
(incluyendo mayúsculas).
20
JAVA
Explicación del primer programa en Java
• El programa anterior calcula el número de pulgadas cúbicas en
una milla cúbica y despliega el resultado.
21
JAVA
Explicación del primer programa en Java
• Todo programa en Java consiste de, cuando menos, una
declaración de clase que el programador debe definir.
• Por convención, todos los nombres de clases en Java comienzan
con una letra mayúscula, y la primera letra de cada palabra en el
nombre de la clase debe ir en mayúscula (por ejemplo:
EjemploDeNombreDeClase).
22
JAVA
Explicación del primer programa en Java
• En una aplicación en Java, sólo uno de los métodos debe llamarse
main y debe definirse como se muestra en la línea 5; de no ser
así, el interprete java no ejecutará la aplicación.
• La llave izquierda ({) al final de la línea 5 comienza el cuerpo de la
declaración del método.
24
JAVA
Tipos de Datos con Punto Flotante
25
JAVA
*/ class
CalcularHipotenusa {
public static void main(String args[])
{ double x,y,z; x=3; y=4;
z=Math.sqrt(x*x + y*y);
System.out.println("La Hipotenusa es: " + z);
}
}
Tipos de Datos de Caracteres
• Java utiliza Unicode.
• Unicode define un conjunto de caracteres amplio, incluye los
caracteres de todos los idiomas y lenguas humanas.
• char es un tipo sin signo, de 16 bits con un rango de 0 a 65,536.
26
JAVA
• Los caracteres ASCII de 8 bits son un subconjunto de Unicode con
un rango de 0 a 127.
• Ejemplo de asignación: char ch;
ch = ‘x’;
• Operaciones aritméticas posibles sobre una variable char: ch++;
// incrementar ch en su valor ASCII (y Unicode)
// y tomaría el valor ‘y’ ch = 90; // un
valor entero, que corresponde a ´z´ Tipos de
Datos Booleanos
• Java define los valores verdadero y falso usando las palabras
reservadas true y false.
• Ejemplos: boolean x, y;
x=true; y=false;
27
JAVA
println(x); …. Imprime true if (! y)
// ! y es un valor boolean
println(y); …. Imprime false
if ( x != y ) // x != y es un valor boolean
println(“Son diferentes”);
28
JAVA Literales (Constantes)
29
JAVA Literales (Constantes)
30
JAVA Literales (Constantes)
34
JAVA
Identificadores
• Son nombres dados a tipos, literales, variables, clases, interfaces,
métodos, paquetes y sentencias de un programa.
• Consta de uno o más caracteres.
• El primer carácter debe ser una letra, el carácter de subrayado o el
carácter dólar.
• Ejemplos:
− acumular()
− Auto
− _acumular()
− $acumulador
• No puede comenzar con un dígito ni pueden contener caracteres
especiales.
35
JAVA
• Las letras pueden ser mayúsculas o minúsculas.
• Para Java una letra minúscula es diferente a una mayúscula.
Comentarios
• Es un mensaje a cualquiera que lea el código fuente.
• Java soporta 3 tipos de comentarios:
Tradicional.
• Empieza con los caracteres /* y termina con los
caracteres */.
• Pueden ocupar mas de una línea, pero no pueden
anidarse.
/*
* La ejecución del programa comienza con el método main().
36
JAVA
* La llamada al constructor de la clase no tiene lugar a menos
* que se cree un objeto del tipo ‘CElementosJava’
* en el método main(). */
Comentarios
De una sola línea. Comienza con una doble barra (//) y se extiende
hasta el final de la línea.
// agregar aquí el código de iniciación
Operador Significado
== Igual a
!= No es igual a
42
JAVA
> Mayor que
< Menor que
>= Mayor o igual
<= Menor o igual
Operadores Lógicos
Operador Significado
&& AND lógico
|| OR lógico
^ XOR lógico (OR exclusivo)
43
JAVA
| OR en cortocircuito
& AND en cortocircuito
¡! NOT unario lógico
Operadores Lógicos
• Los operadores relacionales pueden ser aplicados a todos los tipos
numéricos y al tipo char.
• Sin embargo, los valores de tipo booleano solo pueden ser
comparados por los operadores de igualdad o desigualdad, ya
que los valores verdadero y falso no están ordenados.
• Tablas de Verdad
p q p&q p|q p^q !q
44
JAVA
falso falso falso falso falso verdad verdad
falso falso verdad verdad falso falso verdad
falso verdad verdad verdad verdad verdad
verdad verdad falso falso
Tercer Programa en Java
/* Muestra el funcionamiento de los operadores relacionales y lógicos.
*/
class RelLogOps {
public static void main( String arg[]) {
int i,j;
boolean b1, b2;
i=10; j=11; if (i<j)
System.out.println("i < j"); if (i<=j)
45
JAVA
System.out.println("i <= j"); if (i!=j)
System.out.println("i != j"); if (i==j)
System.out.println("i == j"); if
(i>=j) System.out.println("i >= j");
…..
Continuación del Tercer Programa en Java
50
JAVA
• La línea 4 es una declaración import. Las declaraciones
import ayudan al compilador a localizar las clases que se
utilizan en el programa.
• Por cada nueva clase que se utilice del API de Java, se debe
indicar el paquete en el que se encuentra esa clase.
Paquetes de Java
• La línea 4 indica al compilador que el programa utiliza la
clase JOptionPane del paquete javax.swing
• En el método main, en la línea 12 se llama al método
showMessageDialog de la clase JOptionPane para mostrar
un cuadro de diálogo que contiene un mensaje.
51
JAVA
• Este método requiere dos argumentos.
– El primer argumento ayuda a la aplicación a determinar
en dónde se va a colocar el cuadro de diálogo; cuando
es null, el cuadro de diálogo aparece en el centro de la
pantalla de la computadora.
– El segundo argumento es la cadena a mostrar.
Operadores Lógicos de Corto Circuito
• Son una segunda versión de AND y OR que producen un
código mas eficiente.
52
JAVA
• En una operación AND, si el primer operando es falso el
resultado es falso, sin importar qué valor tiene el segundo
operando.
• En una operación OR, si el primer operando es verdadero
el resultado de la operación es verdadero sin importar el
valor del segundo operando.
• Estos operadores, evalúan el segundo operando solo
cuando es necesario.
Operador de Asignación
• El operador de asignación es un signo igual (=).
53
JAVA
• En Java funciona igual que en el resto de lenguajes. var =
expresión;
• El tipo de var tiene que ser compatible con el tipo de
expresión.
• Permite crear una cadena de asignaciones.
Ejemplo: int x, y, z; x = y
= z = 100;
// asigna x, y, y z al valor de 100
Operador de Asignación: Asignaciones Taquigráficas •
Funciona para todos los operadores binarios en Java.
54
JAVA
• Los operadores son:
+= -= *= /=
%= &= |= ^=
• Ejemplo:
x -= y; // equivalente a x = x - y;
55
JAVA
• Cuando se mezclan tipos compatibles en una asignación, el
valor del lado derecho es automáticamente convertido al
tipo del lado izquierdo.
• No todos los tipos son compatibles.
• boolean e int no son compatibles.
• Cuando un tipo de datos se destina a otro tipo de
variables, se realiza una conversión automática si se
producen las condiciones siguientes:
– Los dos tipos son compatibles
– El tipo destino es más grande que el tipo de origen.
56
JAVA
Cuando se cumplen estas dos condiciones, tiene lugar una
conversión extendida.
Conversión de Tipo en Asignaciones
• Un cast es una instrucción al compilador para convertir un
tipo en otro.
• De modo que cast solicita una conversión de tipo explícito.
• Formato general del cast:
var destino = (tipo destino) expresión
Ejemplo:
int a;
double x, y;
57
JAVA
// ....
a = (int) (x / y); /* no existe conversión automática de
double a int.*/
Operador Condicional
• Llamado también operador ternario, se utiliza en
expresiones condicionales, que tienen la forma siguiente:
operando1 ? operando2 : operando3;
• La expresión operando1 debe ser una expresión booleana.
• La ejecución se realiza de la siguiente forma:
– Si el resultado de la evaluación de operando1 es true, el resultado
de la expresión condicional es operando2.
58
JAVA
– Si el resultado de la evaluación de operando1 es false, el
resultado de la expresión condicional es operando3.
• Ejemplo: double a = 10.2, b = 20.5, mayor = 0; mayor = (a >
b) ? a : b;
Jerarquía de los Operadores
Mayor (Precedencia más alta)
() [] .
++ -- ~ !
* / %
+ -
> >= < <=
== !=
&
^
59
JAVA
|
&&
||
?:
= += -= *= /= etc.
menor (Precedencia más baja)
60
UNIDAD IV
Lenguaje de Programación
Orientado a Objetos JAVA
Parte 2
Contenido
• Estructura de una aplicación Java
• Paquetes de la biblioteca de clases de Java
• Paquetes en una aplicación Java
1
• Variables de tipo numéricos primitivos
• Declaración y creación de objetos
• Cadenas de caracteres y clase String
• Flujos de entrada y salida
• Clase Math y sus características
• Excepciones
• Clases Byte, Character, Short, Integer, Long, Float,
Double y Boolean
Estructura de una Aplicación Java
• Se compone sólo de objetos.
• Objeto: Concreción de una Clase
2
• Clase: Generalización Tipo Específico de Objetos
• Toda aplicación Java está formada por al menos
una clase que define un método nombrado main:
public class CMiAplicacion
{ public static void main(String [] args)
{
// escriba aquí el código que quiere
}
}
Estructura de una Aplicación Java
• Una clase que contiene un método main es una plantilla para
crear lo que se denomina objeto aplicación, objeto que tiene
como misión iniciar y finalizar la ejecución de la aplicación.
3
• El método main es el punto de entrada y de salida de la
aplicación.
5
Ejemplo: Tabla de equivalencias de
temperaturas
class Temperatura {
private float gradosCentigrados; //grados
centigrados public void asignarCentigrados(float gC) {
// establecer el atributo grados centigrados
gradosCentigrados = gC;
} public float obtenerFahrenheit()
{
// retornar los grados fahrenheit equivalentes a Centígrados
return 9F/5F * gradosCentigrados + 32;
} public float obtenerCentigrados()
{
6
return gradosCentigrados; //retornar grados centígrados
}
}
Ejemplo: Convertir grados centígrados a
fahrenheit
7
import java.lang.System; // importar la clase System
public class AplicacionTemperaturas {
//definición de constantes final
static int limInferior = -30; final
static int limSuperior = 100; final
static int incremento = 6;
public static void main( String[ ] args) {
// declaración de variables
Temperatura grados = new Temperatura();
int gradosCentigrados = limInferior; float
gradosFahrenheit = 0; …..
8
Ejemplo: Convertir grados centígrados a fahrenheit
…..
while (gradosCentigrados <= limSuperior) {
// asignar al objeto grados el valor en centigrados
grados.asignarCentigrados(gradosCentigrados); //
obtener del objeto grados los grados fahrenheit
gradosFahrenheit = grados.obtenerFahrenheit();
// escribir la siguiente linea de la tabla
System.out.println(gradosCentigrados + “ C” + “\t”
+gradosFahrenheit + “ F”);
// siguiente valor
gradosCentigrados += incremento; }
10
} // fin del método main
} //fin de la clase 8
11
Estructura de la aplicación del ejemplo
• En el ejemplo se puede observar:
– Sentencias import (para establecer vínculos con otras
clases de la biblioteca Java o realizadas por nosotros).
– Una clase aplicación pública (la que incluye el
método main).
– Otras clases no públicas.
• En un archivo se pueden incluir tantas definiciones de clase como
se desee, pero solo una de ellas puede ser declarada como
pública (public).
• Cada clase pública debe ser guardada en un archivo con su mismo
nombre y “extensión .java”.
12
Paquetes de la biblioteca de clases de Java
• Un paquete es un conjunto de clases, lógicamente relacionadas
entre sí, agrupadas bajo un nombre (por ejemplo, el paquete
java.io agrupa las clases que permiten a un programa realizar la
entrada y salida de información); incluso, un paquete puede
contener a otros paquetes.
• La propia biblioteca de clases de Java está organizada en paquetes
dispuestos jerárquicamente.
• Un paquete puede contener:
• Clases
• Interfaces. (Interfaz: clase en la que todos sus métodos son abstractos)
• Tipos Enumerados
• Anotaciones
13
– Anotación Java es una forma de añadir metadatos al código
fuente Java que están disponibles para la aplicación en
tiempo de ejecución.
14
• Diagrama
de
paquetes
incomple
to de la
bibliotec
a de
clases
de Java.
• Los
paquetes
verdes
son los
más
15
importantes.
16
java.awt Contiene clases para crear interfaces de usuario con ventanas.
System.out.println(gradosFahrenheit); // ya no se escribe el
// nombre completo del paquete
Ejemplo: Usar clase JOptionPane.showMessageDialog
sin importar el paquete que contiene la clase
• Usar JOptionPane.showMessageDialog con y sin
declarar Paquete
18
public class SinPaquete { public static void main(String[] args) {
javax.swing.JOptionPane.showMessageDialog ( null, “Sin
Paquete ”);
}
}
Si se prueba quitando la ruta del paquete swing, no
funcionaria el programa correctamente como aparece
en la lamina siguiente.
19
Resultado de no usar el import
20
Ejercicio
• Hacer una aplicación Java que calcule la
distancia entre 2 puntos, dados como
datos las coordenadas P1(3.17,4.78) y
P2(4.99,7.88).
D = √ ( x1 – x2 )2 + ( y1 – y2 )2
VARIABLES DE TIPOS NUMERICO PRIMITIVO
• Dos números enteros X e Y, se declaran así:
21
int x, y;
• Cuando se hace esta declaración se asignan las
posiciones de memoria para almacenar los
valores de datos x e y. Estas posiciones de
memoria se llaman Variables.
• Una variable tiene 3 propiedades:
– Una posición de memoria para almacenar el valor
– El tipo de datos almacenado en la posición de
memoria
– Y el nombre asociado a esa posición de memoria
22
VARIABLES DE TIPOS NUMERICO PRIMITIVO
• Una variable puede ser iniciada cuando se declara.
int contador = 10;
• Antes de usar una variable, es necesario declararla y
asignarle un valor en primer lugar.
Declaración de un Objeto
• Al declarar un objeto solamente se asigna una variable
cuyo contenido será una dirección, la cual hará
referencia a un objeto, por eso se llaman tipos de
23
datos por referencia (Un objeto se crea con el
operador new)
Declaración de un Objeto
De la misma forma que se pueden iniciar las variables
cuando se declaran, se puede declarar y crear un objeto al
mismo tiempo.
Cliente cliente = new Cliente();
Creación de un Objeto
• Se crea con el operador new. Ejemplo:
Suponiendo se tiene la clase Cliente
24
Cliente cliente; //declaración
cliente = new Cliente();
OBJETO
//creación CLIENTE
cliente cliente
Cadenas de Caracteres
• Secuencia de caracteres que se tratan como una sola unidad.
• Puede incluir letras, dígitos y varios caracteres especiales como +, -,
*, / y $.
25
• Las literales de cadena, que se almacenan en memoria como objetos
String anónimo, se escriben como secuencias de caracteres entre
comillas dobles.
26
Clase String
• La clase String que pertenece a java.lang, proporciona métodos para
examinar caracteres individuales de una cadena de caracteres,
comparar cadenas, buscar y extraer subcadenas, copiar cadenas y
convertir cadenas a mayúsculas o a minúsculas.
27
• La concatenación de objetos String está implementada a través de la
clase StringBuffer y la conversión, a través del método toString
heredado de la clase Object.
28
• String toString()
El resultado es que las dos variables, str1 y str2,
permiten acceder al mismo objeto String. String str1 =
“abc”, str2;
str2 = str1.toString(); //equivalente a str2 = str1
• String concat(String str) Ejemplo:
System.out.println(“Ayer”.concat(“ llovio”));
System.out.println(“Ayer”.concat(“ llovio”.concat(“mucho”)));
32
if (resultado > 0) strtemp = "mayor
que "; else if (resultado < 0)
strtemp = "menor que ";
else
strtemp = "igual a ";
System.out.println(str1 + "es " + strtemp + str2);
}
}
int length()
Devuelve la longitud o número de caracteres Unicode
del objeto String que recibe el mensaje length.
String toLowerCase()
33
Métodos de la Clase String
Este método convierte a minúsculas las letras
mayúsculas del objeto String que recibe el mensaje
toLowerCase. El resultado es un nuevo objeto String en
minúsculas.
String toUpperCase()
Este método convierte a mayúsculas las letras
minúsculas del objeto String que recibe el mensaje
toUpperCase. El resultado es un nuevo objeto String en
mayúsculas.
34
Métodos de la Clase String
• String trim()
Este método devuelve un objeto String resultado de
eliminar los espacios en blanco que pueda haber al
principio y al final del objeto String que recibe el
mensaje trim.
• boolean startsWith(String prefijo)
Este método devuelve un valor true si el prefijo
especificado coincide con el principio del objeto String
que recibe el mensaje startsWith.
• boolean endsWith(String sufijo)
35
Métodos de la Clase String
Este método devuelve un valor true si el sufijo
especificado coincide con el final del objeto String que
recibe el mensaje endsWith.
• String substring(int IndiceInicial, int IndiceFinal)
Este método retorna un nuevo String que encapsula una
subcadena de la cadena almacenada por el objeto String
que recibe el mensaje substring. La subcadena empieza
en IndiceInicial y se extiende hasta IndiceFinal -1, o hasta
el final si IndiceFinal no se especifica.
char charAt(int índice)
36
Métodos de la Clase String
Este método devuelve el carácter que esta en la
posición especificada en el objeto String que recibe el
mensaje charAt. El índice del primer carácter es 0. El
parámetro índice debe estar entre 0 y length()-1, de lo
contrario java lanzará una excepción.
int indexOf(int car)
Este método devuelve el índice de la primera ocurrencia
del carácter especificado por car en el objeto String que
recibe el mensaje indexOf. Si car no existe el método
IndexOf devuelve el valor -1. Puede comenzar la
búsqueda por el final en lugar de hacerlo por el principio
usando el método lastIndexOf.
37
Métodos de la Clase String
final boolean regionMatches(int toffset, String other, int ooffset, int len)
• Este método verifica si las regiones de dos String son iguales. Un
substring del objeto String se compara a un substring del String
argumento other. El resultado es cierto si estos substrings
representan secuencias de caracteres iguales.
• El substring del objeto String a comparar comienza en el índice
toffset y tiene longitud len. El substring del otro String other
comienza con el índice ooffset y tiene longitud len.
38
Métodos de la Clase String
• ooffset + len es más grande de la longitud del otro String.
39
• char [] toCharArray()
Devuelve un arreglo de caracteres creado a partir del objeto
String que recibe el mensaje toCharArray.
• String replace(char car, char nuevoCar)
Devuelve un nuevo String resultado de reemplazar todas las
ocurrencias car por nuevoCar en el objeto String que recibe el
mensaje replace. Si el carácter car no existiera, entonces
devuelve el objeto String original.
• static String valueOf(tipo dato)
Devuelve un nuevo String creado a partir del dato pasado como
argumento. Puesto que el método es static no necesita ser
invocado para un objeto String. El argumento puede ser de los
tipos boolean, char, char[], int, long, float, double y Object.
40
Ejemplo 1
• byte[] getBytes()
Devuelve un arreglo de bytes creado a partir del objeto String que
recibe el mensaje getBytes.
//Comparar Strings import
javax.swing.JOptionPane; public
class CompararString {
public static void main(String args[]) {
String s1 = new String("hola");
String s2 = "adios";
String s3 = "Feliz Cumpleaños";
String s4 = "feliz Cumpleaños";
String salida="s1 =
41
Ejemplo 1
"+s1+"\ns2="+s2+"\ns3="+s3+"\ns4="+s4+"\n\n"
; if ( s1.equals ( "hola" ) ) salida += "s1 es igual a
\"hola\"\n";
else salida += "s1 es distinta de
\"hola\"\n";
if ( s1 == "hola" ) salida += "s1 es igual a
\"hola\"\n";
else salida += "s1 es distinta de
\"hola\"\n";
if ( s3.equalsIgnoreCase ( s4 ) )
salida += "s3 es igual a s4\n";
else salida += "s3 es distinta de s4\n“;
salida += "\ns1.compareTo(s2) es " + s1.compareTo( s2 ) +
42
Ejemplo 1
"\ns2.compareTo( s1 ) es " + s2.compareTo( s1 ) +
"\ns1.compareTo( s1 ) es " + s1.compareTo( s1 ) +
"\ns3.compareTo( s4 ) es " + s3.compareTo( s4 ) +
"\ns4.compareTo( s3 ) es " + s4.compareTo( s3 ) + "\n\n";
43
Ejemplo 1
//Probar regionMatches ( ignorar mayúsculas) if (
s3.regionMatches( true, 0, s4, 0, 5) ) salida += "Los primeros 5
caracteres de s3 y s4 concuerdan\n";
else salida += "Los primeros 5 caracteres de s3 y s4 no
concuerdan\n";
} //fin de main
}//fin de la aplicación
44
Flujos de E/S
• La comunicación entre el origen de cierta
información y el destino, se realiza mediante un
flujo de información (stream).
Flujo desde el origen
ORIGEN
PROGRAMA
47
• System.out. Referencia a la salida estándar del sistema, que
normalmente es el monitor. Se utiliza para mostrar datos al usuario.
• Una vez hecho esto sólo se tiene que utilizar la función .next , para
leer por consola hasta que encuentre un retorno de carro y salto
de línea. El valor se guarda en un String.
52
Métodos Matemáticos
• La biblioteca de clases java incluye una clase Math en
su paquete java.lang, la cual define un conjunto de
operaciones matemáticas de uso común que pueden
ser utilizadas por cualquier programa.
• La clase Math contiene métodos para ejecutar
operaciones numéricas elementales como raíz
cuadrada, exponencial, logaritmo, etc.
MÉTODO DESCRIPCION
double exp(double a) Valor de ea
double log(double a) Logaritmo natural de a.
double acos(double a) Arco cuyo coseno es a.
53
Métodos Matemáticos
double asin(double a) Arco cuyo seno es a.
MÉTODO DESCRIPCION
static double E Valor del número e (base de log natural)
double PI Valor del número
tipo abs(tipo a) Valor absoluto de a. El tipo, igual en
todos
los casos, puede ser: double, float, int o long.
double ceil(double a) Valor double sin decimales más pequeño que
es mayor o igual que a.
double floor(double a) Valor double sin decimales más grande
que es menor o igual que a.
tipo max(tipo a, tipo b) Valor mayor de a y b. El tipo puede ser double,
float, int o long.
54
Métodos Matemáticos
tipo min(tipo a, tipo b) Valor menor de a y b.
MÉTODO DESCRIPCION
double random() Valor aleatorio mayor o igual que
0.0 y menor que 1.0
double rint(double a) Valor double sin decimales más
cercano a a (redondeo de a)
long round(double a) Valor long más cercano a a.
int round(float a) Valor int más cercano a a.
double sqrt(double a) Raíz cuadrada de a (a no es
negativo)
double pow(double a, double b) Valor de “a” elevado a “b”.
double atan(double a) Arco cuya tangente es
55
Métodos Matemáticos
a
double sin(double a) Seno de a radianes
double cos(double a) Coseno de a radianes
double tan(double a) Tangente de a radianes
56
Excepciones
• Cuando durante la ejecución de un programa ocurre un error que
impide su continuación, por ejemplo, una división por cero, Java lanza
una excepción, que cuando no se captura da lugar a un mensaje acerca
de lo ocurrido y detiene su ejecución.
57
Excepciones
• Puesto que en java hay muchas clases de excepciones, un método
puede indicar los tipos de excepciones que posiblemente puede lanzar.
Por ejemplo, el método read lanza excepción del tipo IOException.
Para capturar una excepción hay que hacer dos cosas:
1. poner a prueba el código que puede lanzar excepciones dentro
de un bloque try;
2. manejar la excepción cuando se lance, en un bloque catch. Por
ejemplo:
try { …
// codigo que puede lanzar una excepcion
Scanner s = new Scanner(System.in);
System.out.println(s.nextLine());
//puede lanzar una excepción IOException
58
Excepciones
}
catch (IOException e)
{
// manejar una excepcion de la clase IOException
System.out.println(“Error: “ + e.getMessage());
}
• Es un error de sintaxis colocar código entre un bloque try y sus
correspondientes cláusulas catch.
59
Excepciones
• También existe la posibilidad de no capturar la excepción. Esto se
hace utilizando throws Nombre_excepcion a continuación de la
declaración de main.
60
Excepciones – Cláusula finally
• La cláusula finally es opcional. try {
instrucciones
}
catch ( UnTipoDeExcepcion excepcion1) {
instrucciones para manejar excepciones
}
catch ( UnTipoDeExcepcion excepcion1) {
instrucciones para manejar excepciones
} finally {
instrucciones
}
61
Excepciones – Cláusula finally
• Java garantiza que la cláusula finally (si hay una) se
ejecutará, se lance o no una excepción en el bloque try
correspondiente, o en cualquiera de sus cláusulas catch
correspondientes.
62
Ejercicio Resuelto
• Realizar una aplicación que dé como resultado los
intereses producidos y el capital total acumulado de una
cantidad c, invertida a un interés r durante t días.
• Siendo:
I=Total de intereses producidos;
c=Capital;
r=tasa de interés nominal en %;
t=período de cálculo en días.
63
Ejercicio Resuelto
import java.io.*;
public class CalculaIntereses {
public static void main(String[] args)
{ double c, intereses, capital;
float r; int t,ncars; try {
System.out.print("Capital invertido: ");
c = System.in.read();
// available devuelve el numero de caracteres disponibles en el flujo
ncars = System.in.available(); // saltar los caracteres CR LF
System.in.skip(ncars);
System.out.print("\nA un % anual del: "); r = System.in.read();
// available devuelve el numero de caracteres disponibles en el flujo
64
Ejercicio Resuelto
ncars = System.in.available(); // saltar los caracteres CR LF
System.in.skip(ncars);
System.out.print("\nDurante cuantos dias:
"); t = System.in.read();
intereses = c * r * t / (360 * 100);
capital = c + intereses;
System.out.println("Intereses producidos... " + intereses);
System.out.println("Capital acumulado...... " + capital);
}
catch(IOException e) {
System.err.println("Error");
65
} //fin de excepción
} // fin del try
}} // fin del main y de la clase
CARACTERES \r\n
• Cuando se están introduciendo datos a través del teclado y se pulsa
la tecla Entrar, se introducen también los caracteres \r\n,
correspondientes a los caracteres ASCII CR LF.
• Cuando por ejemplo, al ejecutar el método read(), se teclea la
opción b y se pulsa la tecla Entrar, se tendría:
B \r \n
y después de la lectura:
\r
66
\n
• Ya que read() lee un solo carácter, estos caracteres sobrantes
pueden ocasionar problemas si a continuación se ejecuta otra
sentencia de entrada.
• La solución al problema planteado es limpiar los caracteres
indeseables del buffer de entrada.
CARACTERES \r\n
• Hay 2 maneras de hacerlo:
– Hacer una lectura en falso con el mismo método read().
– Utilizar los métodos skip y available.
67
• Método skip permite saltar n caracteres en el flujo
de entrada para que no estén presentes en la
próxima operación de lectura;
• Método available devuelve el número de
caracteres que hay disponibles en el flujo de
entrada.
• Un buffer se limpia automáticamente cuando está
lleno, cuando se cierra el flujo, o bien cuando el
programa finaliza normalmente.
68
Clases que Encapsulan los Tipos Primitivos
• Cuando se lee un valor numérico en una cadena de caracteres,
hay que convertirla a un valor de alguno de los tipos primitivos.
69
Clases que Encapsulan los Tipos Primitivos
• Atributo Descripción
MIN_VALUE Valor más pequeño de tipo int.
MAX_VALUE Valor más grande de tipo int.
• Método Descripción
doubleValue() Devuelve el objeto Integer como un valor double.
Devuelve el objeto Integer como un valor
floatValue()
float.
intValue() Devuelve el objeto Integer como un valor int.
longValue() Devuelve el objeto Integer como un valor long.
parseInt(String) Convierte una cadena a un valor int.
toString(int) Convierte un valor int en una cadena (objeto String)
valueOf(String) Crea un objeto Integer a partir de una cadena.
70
El resto de las clases tienen métodos análogos. Las clases Float y
Double no tenian método parse. En la versión 1.4.0 de JDK ya tienen
estos métodos.
Clases que Encapsulan los Tipos Primitivos
• Para obtener un entero a partir de una cadena de caracteres
proporcionada por un flujo de entrada, habrá que convertir
el objeto String en un entero o real.
71
Ejemplo (para leer enteros)
Scanner sc = new Scanner(System.in);
// Usamos como delimitador el dos puntos, o bien
//cualquier espacio/fin de línea (el \\s)
sc.useDelimiter("[:\\s]");
try {
// Leemos los tres enteros
System.out.println(“Escriba tres enteros separados por dos
puntos”); int a = sc.nextInt(); int b = sc.nextInt(); int c =
sc.nextInt();
// Obtendremos 3 enteros separados, 11-33-44 de salida.
System.out.println(a +"-"+ b +"-"+ c);
}
72
catch (IOException ignorada) { }
73
= sc.nextInt(); c =
sc.nextInt();
// De 55 77 22, obtendremos 55-77-22 de salida.
System.out.println(a +"-"+ b +"-"+ c); }
catch (IOException ignorada) { }
} } // fin del main y de la clase
75
Import java.util.*; public class
CEcuacion{ public static void
main(String[] args)
{
double a,b,c,d,x1,x2;
Scanner entrada=new Scanner(System.in);
System.out.print("Coeficiente a: ");
a=entrada.nextDouble();
System.out.print("\nCoeficiente b: ");
b=entrada.nextDouble();
System.out.print("\nCoeficiente c: ");
c=entrada.nextDouble();
System.out.println("a= "+a+"b= "+b+"c= "+c);
d = b*b - 4*a*c;
System.out.println("valor de d:" + d);
76
Ejercicio: Solución Cuadrática
// si d es menor que 0
if (d<0) {
System.out.println("Las raices son complejas ");
// salir sin hacer nada mas en la aplicacion
}
else
{ // si d es mayor o igual a 0
System.out.println("Las raíces reales son:
"); d = Math.sqrt(d); x1 = (-b +
d) / (2 * a);
x2 = (-b - d) / (2 * a);
System.out.println("x1 = " + x1 + ", x2 = " + x2);
}
77
} // fin del main
80
• Luego es necesario convertir el objeto String al tipo de dato primitivo
o simple que se necesite para hacer cálculos: double d =
Double.parseDouble( var_String );
Leer Tipos de Datos Primitivos con
Ventanas de Diálogo
• Al final del programa se usa la instrucción: System.exit( 0 );
Ejercicios Propuestos
1. Realizar una aplicación que calcule el volumen de una
esfera, que viene dado por la fórmula:
v r3
83
UNIDAD IV
Lenguaje de Programación
Orientado a Objetos JAVA
Parte 3
CONTENIDO
• Introducción a los arreglos
• Arreglos numéricos unidimensionales
– Declarar un arreglo
1
– Crear un arreglo
– Iniciar un arreglo
• Cadenas de caracteres como un arreglo
• La clase Arrays y sus métodos
• Arreglos multidimensionales
• Un arreglo es una estructura homogénea, compuesta
por varios elementos, todos del mismo tipo y
almacenados consecutivamente en memoria. Cada
elemento puede ser accedido directamente por el
nombre de la variable arreglo seguido de uno o más
subíndices encerrados entre corchetes.
2
Introducción a los arreglos
Arreglo m
3
Introducción a los arreglos
Vector m m[0] m[1] m[2] m[3] m[4] m[5] m[6] m[7] m[8]
5
• Para crear y utilizar un vector hay que realizar 3
operaciones:
– declararla,
– crearla e –
iniciarla.
• Declarar un vector.
Se hace indistintamente así:
tipo[] nombre;
tipo nombre[];
Donde:
tipo: tipo de elementos del vector, que pueden ser de
6
Introducción a los arreglos
cualquier tipo primitivo o referenciado; nombre:
es un identificador que nombra al vector.
7
•
Notar que las declaraciones no especifican el tamaño del vector.
• El tamaño será especificado cuando se cree el vector, operación
que se hará durante la ejecución del programa.
Crear un vector.
• Significa reservar la cantidad de memoria necesaria para contener
todos sus elementos y asignar al nombre del vector una
referencia a ese bloque.
• El hecho de usar el operador new significa que Java implementa
los vectores como objetos.
• Ejemplos: m = new int[10];
temperatura = new float[31];
ordenador = new Cordenador[25];
8
•
Es bastante común declarar y crear un vector en una misma línea.
•Ejemplos: int[] m = new
int[10];
Iniciar un vector
•Un vector es un objeto; por lo tanto, cuando es creado, sus
elementos son iniciados automáticamente.
•Si el vector es numérico, sus elementos son iniciados a 0 y si no es
numérico a un valor análogo al 0.
•Ejemplos:
char[] c= new char[10]; // iniciados al valor ‘\u0000’
boolean[] b= new boolean[10]; //iniciados a false
9
•
Cliente[] clientes=new Cliente[10];
//las referencias a objetos, iniciados a null.
Para iniciar un vector con otros valores diferentes a los
predeterminados, se hace de la siguiente forma:
float[] temperaturas = {10.2F, 12.3F, 3.4F, 14.5F, 15.6F,
16.7F};
Este ejemplo crea un vector temperatura de tipo float con tantos
elementos como valores se hayan especificado entre llaves.
10
•
A = m[1] +
m[99]; k = 50;
m[k]++; m[k+1] =
m[k];
11
Observe:
• Como subíndice se puede usar una constante, una variable o una
expresión de tipo entero.
• La primera posición es la 0.
• Si se intenta acceder a un elemento con subíndice fuera del
rango, Java lanzará una excepción de tipo
ArrayIndexOutOfBoundsException, indicando que el subíndice
está fuera de los límites establecidos cuando se creó el vector.
13
• Ejemplo: Crea e inicializa un vector de enteros, crea una
copia del vector y luego las compara.
System.out.println("Escriba 5 nombres:");
for (int i=0; i<5; i++)
nombres[i]=miEntrada.nextLine();
class BusquedaArreglo
{ public static void main ( String []
args )
{ int arreglo[],
num;
String numero, result, busq;
boolean respuesta=true;
//crear arreglo y llenarlo con enteros
16
// pares de 0 a 198
arreglo = new
int[100];
17
//busquedaLineal
int elemento = busquedaLineal( arreglo, num );
18
respuesta = true;
else
respuesta = false;
} //fin del while
System.exit(
0); } //fin de
main public
static int
busquedaLineal
( int arreglo2[],
int clave ) {
//iterar a traves de los elementos del
arreglo for ( int c=0; c <
arreglo2.length; c++ )
//si el elemento del arreglo es igual al valor
19
//de la clase, devolver
ubicacion if ( arreglo2 [c]
== clave ) return c;
return -1; //clave no encontrada
} //fin de
busquedaLineal } //fin de
aplicacion
Cadenas de caracteres
• Las cadenas de caracteres en Java son objetos de la
clase String.
20
• Básicamente, una cadena de caracteres se almacena
como un arreglo unidimensional de elementos de tipo
char:
char[ ] cadena = new char[10]; //iniciados // con el
valor ‘\0’
21
Cadenas de caracteres
• Ya que que cada carácter es un entero, el ejemplo
podría escribirse como: char[ ] cadena = {97, 98, 99,
100};
22
Ejercicio
• Realizar un programa que lea una cadena de n
caracteres e imprima el resultado que se
obtiene cada vez que se realice una rotación
de un carácter a la derecha sobre dicha
cadena. El proceso finalizará cuando se haya
obtenido nuevamente la cadena de caracteres
original. Ejemplo:
HOLA AHOL LAHO OLAH HOLA
23
Clase Arrays y sus métodos
25
static int binarySearch(byte[] a, byte key);
27
Clase Arrays: método hashCode
Arreglos Multidimensionales
• Java no soporta directamente el uso de arreglos
multidimensionales, pero sí permite al
programador especificar arreglos
31
unidimensionales cuyos elementos sean
también arreglos unidimensionales.
012 01
0
012 1 012
32
2 0 12
0 00
012 3
012 012
1
1
2
23
3
33
Tomado de: Deitel y Deitel, Java
Como Programar.
34
Arreglos de arreglos unidimensionales
35
Arreglos de arreglos unidimensionales
36
Arreglos de arreglos unidimensionales
37
Arreglos de arreglos unidimensionales
38
Ejemplo: Arreglo bidimencional de enteros
import java.io.*;
public class MatrizEnteros { public static void main (String []
args) throws IOException {
InputStreamReader isr = new
InputStreamReader(System.in);
BufferedReader MiFlujo = new BufferedReader(isr);
String Dato; int [ ][ ] Números =
new int[5][3];
System.out.println("digite los números: ");
for (int i=0; i<5; i++) {
System.out.println("Fila "+(i+1)+" : ");
for (int j=0; j<3;j++) {
Dato = MiFlujo.readLine();
39
Números[i][j] =
Integer.parseInt(Dato); } //fin de for j } //fin de for i
for (int i=0; i<5; i++)
{
System.out.println();
for (int j=0; j<3;j++)
System.out.print(Números[i][j]+" " );
}
} //fin de main
} //fin de la clase
Ejemplo: Inicializa dos matrices de enteros y las
imprime por filas
import javax.swing.*;
40
public class IniciaArreglo
{ public static void main( String [] args
)
{ int arreglo1[ ][ ] = {{1,2,3},{4,5,6}};
int arreglo2[ ][ ] = {{1,2}, {3}, {4,5,6}};
String mensaje;
System.exit( 0 );
}
public static void crearSalida (int arreglo[ ][ ], String s )
{
41
//iterar a traves de las filas del arreglo for (
int fila = 0; fila < arreglo.length; fila ++ )
{ for (int col = 0; col < arreglo[fila].length; col ++ )
{ s = s+arreglo[fila][col];
s = s+" ";
} s = s+"\n";
}
JOptionPane.showMessageDialog(null, s,
"Impresion Arreglo",
JOptionPane.INFORMATION_MESSAGE);
} //fin del método crearSalida
} //fin de la aplicacion
42
Unidad V
Parte 1
1
Metodología para resolver problemas
aplicando la POO
• Fases
I.Definición de requisitos
II.Análisis del problema
III.Diseño de solución
IV.Codificación
2
FASE I. Definición de Requisitos
• Incluye la descripción del problema en términos
de los usuarios de la aplicación a elaborar.
• Debe mencionar:
– las entradas disponibles,
– las salidas esperadas y
– los métodos o fórmulas específicas a utilizar
3
FASE II. Análisis del problema
• Se debe contemplar exactamente lo que debe hacer
el programa y el resultado o solución deseada.
– ¿Qué entradas se requieren?
7
Modelo de Casos de Uso
Un caso de uso debe:
9
Modelo de Casos de Uso
• Conjunto de todos los casos de uso en un modelo de la
funcionalidad y entorno del sistema
• Describe requisitos funcionales en el contexto del
sistema
10
Caso de Uso
Caso de Uso
Caso ------------
de Uso
--------
Cas Coam --d-----------
e Uso
biar PIN--- --------
---------- ------
CaCso
amde Uso
bi-------------
ar PIN ---
--------------- -------
--
Ca--mbi ar PIN
------------------
----------------- ---
--------------------
--------------------
--------------------
Casos de Uso
Objetivos del cliente = Necesidades/requisitos del y
los usuarios cliente y los usuarios
11
• Describen requisitos de manera simple y entendible
para clientes y usuarios finales.
Actor
• Posee comportamiento
• Puede ser una persona (identificada por un rol), un
sistema informático o una organización
13
<<Actor>>
Sistema Administrador de
Cuentas
<<Actor>>
Banco de Crédito
Actor
• Tres tipos de actores con relación al sistema bajo
estudio:
14
▬Actor principal: solicita servicios al sistema bajo
estudio
▬Actor de apoyo: Proporciona servicios al sistema bajo
estudio
▬Actor pasivo: Esta interesado en el comportamiento
del sistema bajo estudio, pero no es principal, ni de
apoyo.
• Actores principales y de apoyo aparecen en los
pasos de acción del texto de los casos de uso
Diagrama Incompleto de Casos de Uso de la
Caja de Venta
15
16
Escenario
• Secuencia específica de acciones e interacciones entre
los actores y el sistema objeto de estudio
• Instancia de un caso de uso
• Historia particular del uso de un sistema • Camino a
través del caso de uso
• Ejemplos:
• Éxito en la compra de artículos con pago en efectivo
• Fallo al comprar debido al rechazo de la transacción de pago con
la tarjeta de crédito
17
Caso de Uso
• Colección de escenarios con éxito y fallo
relacionados, que describe a los actores
utilizando un sistema para lograr un objetivo
18
• Escenario Principal de Éxito:
• Un Cliente llega a una caja con artículos para
devolver
• El Cajero utiliza el Sistema para registrar cada
uno de los artículo devueltos
•…
Caso de Uso:
Administrar devoluciones (Informal)
• Escenarios Alternativos:
19
• Si se pagó con tarjeta de crédito, y se rechaza la
transacción de reembolso a su cuenta, informar al
Cliente y pagarle en efectivo
21
Grados de Formalidad de
los Casos de Uso
• Breve:
• Resumen conciso de un párrafo. Normalmente sólo el escenario
principal de éxito
• Informal:
• Múltiples párrafos que comprenden varios escenarios
• Completo:
• Escribir con detalle todos los pasos y variaciones, incluye
secciones de apoyo como precondiciones y post-condiciones
Contenido de
22
Casos de Uso Completos
• Actor Principal
• Personal Involucrado e Intereses
• Precondiciones
• Post-condiciones (garantías de éxito)
• Escenario Principal de Éxito (o flujo básico)
• Extensiones (ó flujos alternativos)
• Requisitos Especiales
• Lista de Tecnología y Variaciones de Datos
• Frecuencia
24
Caso de Uso: Procesar venta (2)
5. El Sistema presenta el total con los impuestos calculados.
6. El Cajero le dice al Cliente el total y pide que le pague.
7. El Cliente paga y el Sistema gestiona el pago.
8. El Sistema registra la venta completa y envía la información
de la venta y el pago al sistema de Contabilidad externo
(para la contabilidad y las comisiones) y al sistema de
inventario (para actualizar el inventario).
9. El Sistema presenta el recibo.
10.El Cliente se va con el recibo y las mercancías (si es el
caso).
25
• La identificación de los Casos de Uso debe
basarse en los procesos y objetivos elementales
del negocio (EBP)
• ¿Cuáles son Casos de Uso?
• Negociar contrato con proveedor
• Administrar devoluciones
• Iniciar sesión
• Todos son casos de uso a diferente nivel
dependiendo de los límites del sistema, actores
y objetivos
26
Guía: El Caso de Uso EBP
• EBP: Procesos Elementales del Negocio
• Procesos EBP:
• Tarea realizada por una persona en un lugar, en un
instante, como respuesta a un evento del negocio,
que agrega un valor cuantificable para el negocio y
deja los datos en un estado consistente
Guía: El Caso de Uso EBP
• Ejemplos de Casos de Uso EBP:
• Autorizar créditos
• Solicitar precio
27
• Características de los Casos de Uso EBP
• Incluye de 5 a 10 pasos
• Pueden involucrar más de una persona
• Se realiza en pocos minutos o hasta una hora
• Se realiza en una sesión
Casos de Uso y
Objetivos del Usuario
• Los actores (usuarios) tienen objetivos
29
• Los casos de uso que representan objetivos de
subfunción, agregan complejidad al modelo de casos
de uso.
• El número y granularidad de los casos de uso
influyen en el tiempo y la dificultad para entender,
mantener y gestionar los requisitos.
• La razón válida más común para representar un
objetivo de subfunción como un caso de uso es:
“Cuando la subfunción se repite o es una
precondición de muchos casos de uso de nivel de
objetivos de usuario”
Objetivos y Casos de Uso Compuestos
30
• Un objetivo de alto nivel o nivel de empresa (por ej. ser
rentable) incluye muchos objetivos de nivel intermedio o
nivel de usuario (por ej. Procesar ventas, procesar
devoluciones, analizar actividad de ventas, etc.) que a su
vez incluyen objetivos de subfunción dentro de las
aplicaciones (por ej. Validar entrada)
• Los diferentes niveles de objetivos pueden generar
confusión en la identificación del nivel adecuado de los
casos de uso de una aplicación.
• La guía EBP orienta para eliminar casos de uso de nivel
excesivamente bajo.
31
Aplicación de Guía EBP
• Se puede aplicar la Guía EBP para decidir si un
objetivo o caso de uso se encuentra a un nivel
adecuado.
• Preguntar a los usuarios:
• Qué hace?
• Cuáles son sus objetivos?
• Cuál es el objetivo de más alto nivel de X objetivo
mencionado?
32
Ejemplo de Aplicación de Guía EBP
Conversación entre Analista de Sistemas (A) y
Cajero (C)
34
Ejemplo de Aplicación
de Guía EBP
(Conclusión)
• “Evitar robos” es un objetivo a nivel de la
empresa y no es un EBP
• “Identificarme en el sistema y ser validado” se
acerca más a un objetivo de usuario, pero...
• No agrega valor observable o cuantificable al
negocio. Si el dueño pregunta ¿Qué hiciste
hoy?, no va ha responder “Inicie la sesión 20
veces”. No es un EBP
35
• Identificación y validación es un objetivo
secundario; no así, capturar las ventas, que es
un EBP
Descubrir Actores principales, objetivos y
casos de uso
• Casos de uso se definen para satisfacer los
objetivos de usuario (actores principales).
• El procedimiento básico es:
1) Elegir límites del sistema
2) Identificar los actores principales
3) Identificar objetivos de usuario (Lista actor-objetivo)
36
4) Definir un caso de uso por cada objetivo de usuario y
nombrarlo de acuerdo con el objetivo
• La lista Actor-Objetivo, presenta los actores
principales y sus objetivos de usuario
37
Ejemplo de Lista Actor-Objetivo
Actor Objetivo
Cajero Procesar ventas
Procesar alquileres
Administrar las devoluciones
Abrir caja
Cerrar caja, …
Director Poner en marcha
Suspender operación, …
… …
36
39
40
Excepción de un Caso de
Uso por Objetivo
• Agrupar objetivos separados CRUD
• CRUD: Create, Retrieve, Update, Delete; es
decir, crear, recuperar, actualizar y borrar una
entidad; implica “Gestionar Entidad”.
• Por ejemplo, los siguientes casos de uso se
agrupan en el caso de uso “Gestionar cliente”:
• Editar cliente
• Eliminar cliente
41
• Consultar cliente
• Agregar nuevo cliente
42
Diagrama de Casos de Uso (DCU)
43
• Elaborar diagrama de casos de uso (DCU) y
relaciones entre casos de uso es secundario en
el trabajo con los casos de uso
• Casos de uso son documentos de texto
• El DCU es un conciso diagrama de contexto
visual del sistema, que muestra actores externos
y como utilizan el sistema
• SUGERENCIA: dibujar un DCU sencillo con la lista
Actor-Objetivo.
44
Sugerencias para la realización
de los Diagramas de Casos de Uso
• Utilizar el estilo de caja para representar actores externos que
son otros sistemas de información, y agregar el estereotipo
«actor»
• Para un diagrama de contexto, limitar los casos de uso a casos de
uso de nivel de objetivos de usuario
• Actores principales a la izquierda, y actores de apoyo a la
derecha
45
Casos de Uso
no son Orientados a Objetos (OO)
• Al escribir casos de uso, no se está realizando un análisis OO
• Los casos de uso constituyen una herramienta para el análisis de
requisitos
• No todos los casos de uso se escriben en formato completo
durante la fase de Definición de Requisitos
• Pasos para construir un DCU:
46
1. Identificar objetivos y personal involucrado, y estimar lo
que queda dentro y fuera del alcance del sistema bajo
estudio
2. Escribir lista Actor-Objetivo
3. Elaborar DCU
• La mayor parte de Casos de Uso interesantes, complejos o
arriesgados se escriben en formato breve
47
Unidad V
Parte 2
FASE II. Análisis del problema
1
Incluye:
• Modelo de casos de uso
–Tareas:
•Identificar casos de uso
•Elaborar diagrama de casos de uso
•Describir los casos de uso
• Identificar operaciones del sistema
• Modelo del dominio
2
Fase: Análisis de Requisitos
Describe el Comportamiento del Sistema
Interacciones entre actores externos y el sistema objeto
Incluye:
de estudio
Modelo de Casos de Uso
•Diagrama de Casos de Uso
•Casos de Uso en formato completo
•Diagramas de Secuencia del Sistema
Modelo del Dominio
•Diagrama de Clases Conceptuales
Casos de Uso en formato completo
3
Incluyen interacciones entre actores externos y el sistema objeto de
estudio (Aplicación de Software)
Escenario simple de Procesar Venta para el pago en efectivo
1. El Cliente llega a la caja.
2. El Cajero inicia una nueva venta.
3. El Cajero inserta el identificador del articulo y la cantidad.
4. El Sistema registra la línea de venta y presenta la descripción del artículo,
precio y la suma parcial.
El Cajero repite los pasos 3 y 4 hasta que se indique.
5. El Sistema muestra el total con los impuestos calculados.
6. El Cajero le dice al Cliente el total, y pide que le pague.
7. El Cliente paga y el Cajerogestiona el pago.
8....
• Normalmente, un
formulario por cada
caso de uso.
4
Diagramas de Secuencia del
6
DSS
describe el
sistema
como caja
negra
Describe parte del
comportamiento
del Sistema como
“Caja negra”; es
decir, qué hace el
sistema, sin
explicar cómo lo
hace
7
Diagrama de casos de uso
Los casos de uso describen como interactúan los actores
externos con el Sistema de SW que se pretende crear
8
Eventos y operaciones de un DSS
9
Durante una interacción, el actor genera un
evento sobre el Sistema, solicitando alguna
operación como respuesta. Por ejemplo:
Cajero solicita al Sistema que registre la venta de un
artículo
Ese evento inició una operación en el Sistema
10
DSS
muestra
eventos
y su
orden
Dibujo que
muestra, para
un escenario
específico de
un caso de
uso, los
eventos que
11
generan los Actores principales, el orden y los eventos entre los
sistemas
12
Sistemas externos en un DSS
Todos los sistemas se tratan como Caja Negra
¿Cómo lo
hace?
Se desconoce
en un DSS
Nota: Sistema
de Inventario
es actor de
apoyo. 13
14
Un DSS, por cada
escenario del caso
de uso.
Caso de Uso: Procesar venta
Actor Principal: Cajero
...
Escenario Principal de éxito
1. El cliente...
Escenarios Alternativos
- Si pago es con Tarjeta de Crédito
- Si pago es con Cheque
15
DSS y Diagrama de Secuencia
DSS muestra Sistemas como caja negra (análisis)
Diagrama de Secuencia ilustra la interacción entre
objetos de SW dentro del Sistema (diseño)
16
DSS Diagrama de Secuencia
Significado de un DSS
Un DSS muestra, para un curso de eventos
específico en un caso de uso:
Actores externos que interactúan directamente con el
Sistema
El Sistema (como una caja negra)
17
Los eventos del Sistema que genera el Actor principal
Los eventos entre Sistemas
Tiempo avanza hacia abajo
Orden de eventos de acuerdo con la descripción
del Caso de Uso
Eventos del Sistema pueden contener
parámetros
18
Ejemplo: Caso de uso “Procesar
venta”,
escenario
de éxito
Escenario
Principal de éxito
del Caso de Uso
“Procesar venta”
Indica que el
Cajero genera los
siguientes eventos
19
Ejemplo: Caso de uso “Procesar
del Sistema: crearNuevaVenta introducirArticulo
finalizarVenta realizarPago
20
Ejemplo: Caso de uso “Procesar
venta”, escenario alternativo 1
Escenario Alternativo de Pago con Tarjeta de Crédito del
21
Ejemplo: Caso de uso “Procesar
Caso de Uso “Procesar venta”
22
Ejemplo: Caso de uso “Procesar
venta”, escenario alternativo 2
Escenario Alternativo de Pago con Cheque del Caso de Uso
“Procesar venta”
23
Eventos del Sistema y
los límites del
Sistema
Para identificar los eventos
del Sistema, es necesario
tener claros los límites del
Sistema
En desarrollo de SW, el límite
del Sistema se elige que sea
el propio Sistema de SW
(incluyendo HW)
24
Un evento del Sistema de SW es un evento externo que lanza
un estímulo directamente al SW
Asignación de nombres a los
eventos y operaciones (en DSS)
25
Los eventos del Sistema (y sus operaciones asociadas)
deben expresarse a nivel de intenciones en lugar de en
términos de entrada del medio físico o a nivel de
elementos de interfaz de usuario
26
Mostrar el texto del caso de uso
A veces, es deseable mostrar al menos fragmentos del
Caso de Uso del Escenario, para aclarar o enriquecer las
dos vistas
Texto proporciona detalles y contexto
27
Diagrama resume visualmente la interacción
Escenario Simple de Procesar venta para
el pago en efectivo
1. El cliente llega al terminal de caja de
venta
2. El cajero inicia una nueva venta
3. El Cajero inserta el identificador del
artículo
4. El Sistema registra...
28
Unidad V
Parte 3
Análisis del Problema
Modelo del Dominio FASE
II. Análisis del problema
1
Incluye:
• Modelo de casos de uso
• Modelo del dominio
–Tareas:
• Identificar clases conceptuales
•Agregar asociaciones
•Agregar atributos
–Resultado: Modelo del dominio o
diagrama de clases del análisis (sin
métodos)
2
Fase II: Análisis de Requisitos
Incluye:
Modelo de Casos de Uso
•Diagrama de Casos de Uso
•Casos de Uso en formato completo
•Diagramas de Secuencia del Sistema
Modelo del Dominio
•Diagrama de Clases Conceptuales
Modelo del Dominio
En la fase de análisis orientado a objetos, es la
descomposición del dominio de interés en
3
clases conceptuales individuales u objetos
(cosas de las que somos conscientes)
5
... Modelo del Dominio
Muestra:
Objetos del Dominio o Clases Conceptuales
Asociaciones entre clases
Atributos de las clases conceptuales
6
7
Modelo del Dominio y Diagrama de Clases
Modelo del
Dominio es la
fuente para el
diseño de
Objetos de SW
8
Ejemplo de Modelo del Dominio del Caso de Uso
9
“Procesar venta” del sistema de la “Caja de Venta”
10
Modelo del Dominio
No son modelos de componentes de SW
11
Dominio: Una tienda del mundo real
12
Identificación de Clases
Conceptuales
Objetivo:
Crear un modelo del dominio de clases conceptuales
interesantes o significativas del dominio de interés (por
ejemplo, ventas, alquiler de videos, renta de vehículos)
Tarea:
Identificar las clases conceptuales relacionadas con los
escenarios de los casos de uso que se estén estudiando
13
Técnicas para identificar Clases
Conceptuales
1. Utilizar la Lista de Categorías de Clases
Conceptuales
2. Identificar Frases Nominales
3. Aplicar patrones de análisis o modelos de
dominios incompletos existentes y creados por
expertos. Por ejemplo:
1. Analysis Patterns (Fowler, 1996)
2. Data Model Patterns (Hay, 1996)
16
Lista de Categorías de Clases
Conceptuales
Categoría de Clase Ejemplos del dominio de ventas
Conceptual y reserva de vuelos
Otros sistemas informáticos o SistemaAutorizacionPagoCredito,
electromagnéticos externos al ControlDeTraficoAereo
sistema
Conceptos abstractos Ansia
Organizaciones DepartamentoDeVenta,
CompañiaAerea
Hechos Venta, Pago, Reunion, Vuelo,
Colision, Aterrizaje
Procesos (normalmente no se
representan como conceptos, VentaDeUnProducto,
pero podría ocurrir) Reglas y ReservarUnAsiento
políticas PoliticaDeReintegro,
17
PoliticaDeCancelacion
18
Lista de Categorías de Clases
Conceptuales
Categoría de Clase Ejemplos del dominio de
Conceptual ventas y reserva de vuelos
Catálogos CatalogoDeProductos,
CatalogoDePiezas
Registros de finanzas,
trabajo, contratos, cuestiones Recibo, LibroMayor,
legales ContratoEmpleo,
RegistroMantenimiento
Instrumentos y servicios LineaDeCredito, Stock
financieros
Manuales, documentos, ListaDeCambiosDePreciosDia
artículos de referencia, rios, ManualReparaciones
19
libros
2. Identificación de Frases
Nominales
Técnica: Análisis lingüístico
20
Identificación de Frases Nominales:
Ejemplo de Caso de Uso “Procesar venta”
Escenario principal de éxito (o flujo básico):
1. El Cliente llega a una terminal de Caja de Ventas con
productos y/o servicios que comprar.
2. El Cajero comienza una nueva venta.
3. El Cajero introduce el identificador del artículo.
4. El Sistema registra la línea de la venta y presenta la
descripción del artículo, precio y suma parcial. El
precio se calcula a partir de un conjunto de reglas de
precios.
El Cajero repite los pasos 3 y 4 hasta que se indique.
21
Identificación de Frases Nominales:
Ejemplo de Caso de Uso “Procesar venta”
5. El Sistema presenta el total con los impuestos
calculados.
6. El Cajero le dice al Cliente el total y pide que le pague.
7. El Cliente paga y el Cajero gestiona el pago.
8. El Sistema registra la venta completa y envía la
información de la venta y el pago al sistema de
Contabilidad externo (para la contabilidad y las
comisiones) y al sistema de inventario (para
actualizar el inventario).
9. El Sistema presenta el recibo.
22
10. El Cliente se va con el recibo y los productos (si es el
caso).
23
Registro EspecificacionDelProducto
Articulo LineaDeVenta
Tienda Cajero
Venta Cliente
Pago Encargado
CatalogoDeProductos
25
Objetos de Informes: Recibo
¿Incluir recibo en el modelo del dominio?
Pero...
26
Objetos de Informes: Recibo
Duplica información en venta y pago
27
Objetos de Informes: Recibo
El recibo da derecho al portador a devolver los artículos
comprados; por lo tanto, debería ser una clase conceptual
del caso de uso “Gestionar devoluciones”
28
Objetos de Informes: Recibo
29
Nombrar y Modelar cosas:
Estrategia del Cartógrafo
Estrategia del cartógrafo:
Utilizar los nombres existentes en el territorio
Excluir las características irrelevantes
No agregar cosas que no están en el territorio
30
Error típico al identificar clases
conceptuales candidatas
31
Tienda, ¿es un atributo de Venta o un concepto
separado?
32
Error típico al identificar clases
conceptuales candidatas
Regla empírica:
“Si no se considera alguna clase conceptual X
que sea un número o texto en el mundo real , X
es probablemente una clase conceptual y no un
atributo”
34
Error típico al identificar clases
conceptuales candidatas
El Aeropuerto de destino es texto y/o un número
en Vuelo, pero es una cosa grande que ocupa
35
espacio; por lo tanto, debe ser una clase
conceptual candidata separada
En caso de duda...
Representar el concepto separadamente
Los atributos son raros en el modelo del dominio
Resolución de clases conceptuales
similares: ¿Registro ó CajaDeVenta?
Regla Empírica: Un modelo del dominio no es
absolutamente correcto o equivocado, sino más o menos
útil; ya que es una herramienta de comunicación
36
Clases Conceptuales de
Especificación o Descripción
37
Los objetos de descripción o especificación están
fuertemente relacionados con las cosas que describen.
Son comunes en los dominios de ventas, fabricación y
productos
38
39
Especificación sobre otras cosas
40
La descripción del vuelo describe un vuelo
(número) y su ruta, aún cuando no se ha
planificado ningún vuelo para una hora y fecha
específica.
41
Modelo del Dominio del Caso de uso:
Procesar venta (Caja de Venta)
Este modelo del dominio presenta las clases
42
conceptuales identificadas usando las técnicas
estudiadas
43
FASE II. Análisis del problema
Incluye:
• Modelo de casos de uso
• Modelo del dominio
–Tareas:
•Identificar clases conceptuales
• Agregar asociaciones
•Agregar atributos
44
–Resultado: Modelo del dominio o
diagrama de clases del análisis (sin
métodos)
45
Ejemplo de Modelo del Dominio del Caso de Uso
..*
46
“Procesar venta” del sistema de la “Caja de Venta”
47
Pasos para elaborar el
Modelo del Dominio
1. Listar clases conceptuales candidatas
• Aplicando las técnicas para identificar clases
conceptuales:
• Lista de Categorías de Clases Conceptuales
• Identificación de Frases Nominales
• Aplicando las estrategias:
• Usar vocabulario del dominio (Cartógrafo)
• Representar abstracciones del dominio
48
Pasos para el Modelado del Dominio
1. Listar clases conceptuales candidatas
2. Representar las clases conceptuales en un modelo
del dominio
49
Pasos para el Modelado del Dominio
1. Listar clases conceptuales candidatas
2. Representar las clases conceptuales en un
modelo del dominio
3. Agregar asociaciones (Manteniendo relaciones
que deberían estar en la memoria del
modelador)
4. Agregar atributos necesarios (depende de los
requisitos)
Modelo del Dominio:
50
Agregar Asociaciones
Asociación: es una relación entre tipos (o más bien instancias de tipos)
que indican alguna conexión significativa e interesante
51
Asociaciones posibles en un
modelo del dominio
Modelo del dominio con N clases conceptuales,
puede tener N (N-1) asociaciones posibles
Provoca “ruido visual”, lo hace inconmprensible
Ejemplo:
3 clases conceptuales
52
6
asociaciones bidireccionales
53
Criterio para identificar asociaciones
útiles (necesito-conocer)
Relación que es necesaria conservar durante algún
tiempo (milisegundos o años, dependiendo del
contexto)
Es decir, mantener en memoria una relación
entre objetos. Ejemplo:
54
55
Tipos de asociaciones a incluir
en el Modelo del Dominio
1. Asociaciones útiles (ó necesito-conocer)
57
Lista de Asociaciones Comunes
Categoría Ejemplo
1. A es una parte física de B 1. Cajon-Registro (o más
concretamente, Caja de
Venta), Ala-Avion
2. A es una parte lógica de 2. LineaDeVenta-Venta,
B EtapaVuelo-RutaVuelo
58
Lista de Asociaciones Comunes
4. DescripcionDelArticuloCat 7. A se conoce/registra/
alago, recoge/informa /captura
en B
VueloPlanificacionVuelo 8. A es miembro de B
Categoría Ejemplo
5. A es una descripción de B 5. DescripcionDelArticuloArti
culo,
DescripcionDelVuelo-
6. A es una línea de una Vuelo
transacción o informe de 6. LineaDeVenta-Venta,
B TrabajoMantenimiento-
59
Lista de Asociaciones Comunes
RegistroDeMantenimiento 11.A se comunica con B
7. Venta-Registro,
ReservaListaPasajeros 12.A está relacionado con
8. Cajero-Tienda, una transacción B
PilotoCompañiaAerea
Categoría Ejemplo
9. A es una sub-unidad 9. Departamento-Tienda,
organizativa de B Mantenimiento-
CompañíaAerea
10.A utiliza o gestiona B
60
Lista de Asociaciones Comunes
10.Cajero-Registro, Categoría
PilotoAvion 13.A es una transacción
11.Cliente-Cajero, relacionada con otra
AgenteDeReservas- transacción B
Pasajero 14.A está al lado de B
12.Cliente-Pago,
PasajeroBillete 15
.A
es propiedad de B
61
Lista de Asociaciones Comunes
16.A es un evento 16.Venta-Cliente,
relacionado con B VentaTienda, Salida-
Ejemplo Vuelo
13.Pago-Venta,
ReservaCancelacion
14.LineaDeVenta-
LineaDeVenta, Ciudad-
Ciudad
15.Registro-Tienda,
AvionCompañíaAerea
62
EjemploS: Asociaciones del Dominio
del caso de uso “Procesar venta”
1. Asociaciones “necesito-conocer” según los
requisitos (asociaciones evidentes)
Registro RegistraVenta
Venta Pagada-mediantePago
CatalogoDeProductos Registra
EspecificacionDelProducto
63
2. Lista de Asociaciones comunes
en el dominio de Ventas
Categoría Sistema
1. A es una parte física de B 1. Registro-Caja
2. A es una parte lógica de B 2. LineaDeVenta-Venta
3. A está contenido físicamente 3. Registro-Tienda,
en B ArticuloTienda
4. A está contenido lógicamente 4. EspecificacionDelProducto
en B -CatalagoDeProductos
5. A es una descripción de B 5. EspecificacionDelProducto
-Articulo
6. LineaDeVenta-Venta
64
2. Lista de Asociaciones comunes
en el dominio de Ventas
6. A es una línea de una transacción
o informe de B
65
2. Lista de Asociaciones comunes
en el dominio de Ventas
Categoría Sistema
7. A se conoce/registra/7. (Completa) Venta-Tienda,
recoge/informa /captura en (Actual) Venta-Registro
B 8. Cajero-Tienda
8. A es miembro de B 9. No aplica
9. A es una sub-unidad10.Cajero-Registro,
organizativa de B Encargado-Registro,
10.A utiliza o gestiona B Encargado-Cajero (talvez
no aplicable)
11.A se comunica con B 11.Cliente-Cajero
66
2. Lista de Asociaciones comunes
en el dominio de Ventas
Categoría Sistema
12.A está relacionado con 12.Cliente-Pago, Cajero-Pago
una transacción B
13.A es una transacción 13.Pago-Venta
relacionada con otra
transacción B 14.LineaDeVentaLineaDeVenta
14.A está al lado de B
15.Registro-Tienda
15.A es propiedad de B
67
68
FASE II. Análisis del problema
Incluye:
• Modelo de casos de uso
• Modelo del dominio
–Tareas:
•Identificar clases conceptuales
•Agregar asociaciones
• Agregar atributos necesarios
69
–Resultado: Modelo del dominio o
diagrama de clases del análisis (sin
métodos)
Pasos para el Modelado del Dominio
1. Listar clases conceptuales candidatas
2. Representar las clases conceptuales en un
modelo del dominio
3. Agregar asociaciones (Manteniendo relaciones
que deberían estar en la memoria del
modelador)
70
4. Agregar atributos necesarios (depende de
los requisitos)
71
72
Modelo del Dominio:
Agregar atributos
necesarios
Atributo: valor de datos lógico de un objeto
Atributos a incluir en el Modelo del Dominio
Aquellos que los requisitos de información sugieren
la necesidad de registrar Ejemplo:
Recibo recopila la información de una venta, e incluye:
• Fecha
• Hora de inicio
Información necesaria para:
• Realizar devoluciones (necesario conocer el período)
73
• Estadísticas de venta en un período
• Decidir el número de cajeros durante horas pico
75
1..*
76
Aeropuerto es un concepto complejo
77
Tipos de atributos en el Modelo del
Dominio y el Diagrama de Clases
Atributos en el Modelo del Dominio son tipos de datos
78
simples (primitivos)
Atributos en el Diagrama de Clases, pueden ser tipos de
datos complejos o clases
79
Tipos de Datos de los Atributos
Conjunto de valores para los cuales no es
significativa una identidad única
Ejemplos:
No es significativo distinguir entre
• Diferentes instancias del número 5
• Diferentes instancias del String “cereal”
• Diferentes instancias de un Número de teléfono con
el mismo número
Si es significativo distinguir entre dos instancias
de “Alumno” que tienen el nombre “Juan
80
Pérez”, ya que podrían ser dos diferentes
alumnos con el mismo nombre
Regla empírica
“Hacerlo atributo si se considera de manera
natural como un número, String, booleano, fecha
u hora”
82
¿Cuándo definir tipos de datos
primitivos como una clase no
primitiva?
Está compuesto por secciones separadas
Nombre de persona (nombre, apellido)
Dirección (calle, avenida, número, municipio)
83
¿Cuándo definir tipos de datos
primitivos como una clase no
primitiva?
84
¿Cuándo definir tipos de datos
primitivos como una clase no
primitiva?
Tiene operaciones asociadas al tipo de dato
Validar las dos letras del carné de un alumno
Determinar el fabricante de un producto
Tiene atributos
85
¿Cuándo definir tipos de datos
primitivos como una clase no
primitiva?
Precio de oferta, tiene una fecha de inicio y otra de fin
86
¿Cuándo definir tipos de datos
primitivos como una clase no
primitiva?
Pago posee una cantidad con una unidad monetaria
LineaDeVenta posee una cantidad con una unidad de
medida (libras, kilogramos, onzas, etc.)
87
¿Cuándo definir tipos de datos
primitivos como una clase no
primitiva?
Es una abstracción de uno o más tipos con estas
cualidades
88
¿Cuándo definir tipos de datos
primitivos como una clase no
primitiva?
articuloID es una generalización de los tipos de
productos UPC y EAN
89
Representaci
ón de las
clases de
tipos de dato
Depende de
cómo se este
utilizando el
modelo del
dominio, como
una herramienta
de
90
comunicación, y de la importancia de los
conceptos en el dominio
91
92
unidades de medida
93
Atributos de las clases conceptuales del Modelo del
Dominio del caso de uso “Procesar Venta”
Pago LineaDeVenta cantidad cantidad
EspecificacionDelProducto Tienda
descripcion direccion
id nombre precio
Venta
fecha
hora
94
Modelo del Dominio
95
96
Ejemplo de Creación del Modelo
del Dominio: Jugar Dados
Pasos para elaborar el Modelo del Dominio:
1. Listar clases conceptuales candidatas
2. Representar las clases conceptuales en un
modelo del dominio
3. Agregar asociaciones
4. Agregar atributos necesarios
97
Ejemplo de Análisis OO
“Jugar Dados”
Fase II. Análisis del problema
Modelo de Casos de Uso
Diagrama de casos de uso incluye: casos de
uso, actores y sistema.
Descripción de los Casos de uso: procesos
del dominio relacionados
98
Caso de uso: Jugar Dados
• En un juego de dados, un jugador toma dos dados y
los lanza. Luego, se suman los valores de las caras
superiores de los dados. Si el valor es 7 gana el
juego, de lo contrario pierde.
99
2. El sistema solicita al jugador lanzar los dados
3. El jugador lanza los dados
4. El sistema muestra el resultado de sumar las caras de los
dados (si el resultado es siete gana, sino pierde), y el
mensaje de si ganó o perdió
100
101
Modelo del Dominio
102
Pasos para Modelo del dominio
1. Listar clases conceptuales
Utilizando la identificación de frase nominales en
la descripción del juego
Juego de Dados - clase conceptual Jugador -
clase conceptual
Dado - clase conceptual
Valor de la cara - atributo de cada dado
Resultado - Es la suma de las caras
103
1. Listar clases conceptuales
Utilizando la lista de categorías de clases
conceptuales
Dado → objeto físico
Jugador → rol
Lanzamiento de Dados → proceso
→ reglamento
Reglas del Juego de
operación
Analizando conceptos...
Valor de la cara es un atributo de “Dado”
Resultado se obtiene a partir de los valores de cara
104
Lanzamiento de dados es un proceso (opcional)
Conocer las Reglas del Juego no son requisito
105
3. Agregar asociaciones
Asociaciones “necesito-conocer”
Jugador lanza Dados
106
4. Agregar atributos
• Clase Dado: valor de la cara
107
Unidad V Diseño
de Solución
Notación de los
Diagramas de Interacción
Parte 4
Diagramas de Interacción
Son el lenguaje utilizado para ilustrar el modelo de
diseño
1
Ilustran el modo en que los objetos interactúan
por medio de mensajes Pueden ser:
Diagramas de Colaboración
Diagramas de Secuencia
Diagramas de Colaboración
2
Ilustran interacciones entre objetos en un formato
de gráfico o red, en el cual los objetos se pueden
colocar en cualquier lugar del diagrama
3
Diagra
mas de
Secuen
cia
Ilustran las
interacciones
en un tipo de
4
formato con el aspecto de valla, en el que cada objeto se
agrega a la
derecha
Diagrama de colaboración
Economiza espacio
Ilustra mejor las condiciones complejas e iteraciones
5
Ejemplo de Diagrama de
Colaboración
Evento del sistema: “realizarPago” del dominio de
6
Ventas
7
Ejemplo de Diagrama de Secuencia
Evento del sistema: “realizarPago” del dominio de
Ventas
8
Notación General de los
Diagramas de Interacción
Representación de clases e instancias
Una instancia utiliza el mismo símbolo gráfico de las
clases, pero la cadena de texto que lo designa está
9
subrayada.
10
Notación General de los
Diagramas de Interacción
Sintaxis básica de la expresión de mensaje
return=mensaje(parametro:tipoParametro):tipoRetorno
11
Notación básica de los diagramas
de colaboración Enlaces
Un enlace es un camino de conexión entre dos
objetos, indica navegación y visibilidad entre los
objetos
12
Mensajes
Representado por una expresión de mensaje y
una pequeña flecha que indica la dirección del
mensaje
13
Mensajes a “self” o “this”
Un objeto se puede enviar mensajes a él mismo
objeto
14
Creación de instancias
Un mensaje se puede utilizar para crear una instancia
Se puede utilizar el mensaje “create()” o el estereotipo
<<create>>
Opcionalmente se agrega la propiedad {new}
15
Secuencia de números de mensaje
El orden de los mensajes se representa mediante números
de secuencia, cuyo esquema es:
No se numera el primer mensaje, es decir msj1()
El orden y anidamiento se representan con un esquema de
numeración válido, en el que los mensajes anidados tienen un
número adjunto.
Secuencia de números de
16
mensaje (otro ejemplo)
Secuencia de numeración compleja
17
Mensajes condicionales
Se muestra con una cláusula condicional entre
corchetes, a continuación del número de
secuencia
18
Caminos condicionales
mutuamente excluyentes
Se necesita modificar las expresiones de secuencia
con una letra de camino condicional. Por convenio
19
la primera letra es la “a”
20
Iteración o bucle
Los detalles de la cláusula entre corchetes son
opcionales, se puede utilizar sólo el asterisco
21
Iteración o bucle sobre una
colección
Un ejemplo es la iteración sobre todos los
22
miembros de una colección
23
Mensaje a un objeto clase
Los mensajes se pueden enviar a las propias clases, en
lugar de a una instancia de la clase Los mensajes
deben ser estáticos
Ejemplo de redondeo: n = Math.rint(n)
24
Diagra
mas de
Secuen
cia
Ilustran las
interacciones
25
en un tipo de formato con el aspecto de valla, en el que cada
objeto se agrega a la
derecha
26
Un enlace es un camino de conexión entre dos
objetos, indica navegación y visibilidad entre los
objetos.
Los diagramas de Secuencia NO presentan enlaces
Mensajes
Representado por una expresión de mensaje
sobre una línea con punta de flecha entre los
27
objetos
Orden de tiempo es de arriba hacia abajo
Focos de
control, cajas
de activación
y Retornos
Focos de control se
usan en un pila de
llamadas.
Cajas de activación,
son opcionales,
28
pueden ser anidadas en una pila de llamadas
Retornos son la línea punteada opcional, donde se coloca lo
que devuelve la operación
29
Creación de instancias y
líneas de vida del objeto
30
Destrucción de Objetos
31
Mensajes condicionales
Formato: [condición] mensaje
32
Caminos condicionales
mutuamente excluyentes
En el ejemplo, si (x < 10) se ejecuta b.calcular(),
33
y si (x>15) se ejecuta c.calcular()
34
Iteración para un único mensaje
Un mismo mensaje siguienteEnt()se itera desde
i =1 hasta i = N
35
Iteración de una serie de mensajes
En el ejemplo, siguienteEnt() y trabajar()se iteran
36
37
Iteración sobre una
colección (multiobjeto en
UML)
En los diagramas de secuencia no es posible
38
representar el envío de un mensaje a cada
elemento de la colección
39
Mensaje a un objeto clase
Se aplica a métodos estáticos o de clase
Ejemplo de redondeo: n = Math.rint(n)
40
Unidad V Diseño
de Solución
Diseño de Objetos con Responsabilidad
Parte 5
Patrones GRASP
Son patrones de principios generales para asignar
responsabilidades
1
Los primeros cinco patrones son:
Experto en Información (Experto)
Creador
Alta Cohesión
Bajo Acoplamiento
Controlador
(Experto en Información)
Problema: ¿Cuál es el principio general para
asignar responsabilidades a los objetos?
2
Patrón: Experto
Solución: asignar una responsabilidad al experto
en la información, es decir, la clase que tiene la
información necesaria para realizar esa
responsabilidad
3
Patrón: Experto
Ejemplo de Aplicación
Responsabilidad: “Conocer el total de la venta”
1. Iniciar la asignación de responsabilidades
estableciendo claramente la responsabilidad
¿Quién debería ser el responsable de conocer el
total de una venta?
2. Determinar que información se necesita para
determinar el total
1. Conocer todas las instancias de “LineaDeVenta”
4
Patrón: Experto
2. Sumar los subtotales de cada línea de venta
Ejemplo de Aplicación
3. Siguiendo el patrón “Experto en información”
buscar las clases de objetos que contengan la
información necesaria para determinar el total
5
Patrón: Experto
Ejemplo de Aplicación
Sino, observar el Modelo del Dominio
Al iniciar el trabajo de diseño, el Modelo de
Diseño (Diagrama de Clases) es mínimo,
por lo que se buscan los Expertos en
Información en el Modelo del Dominio
6
7
Patrón: Experto
Ejemplo de Aplicación
“Venta” contiene todas sus líneas de venta, por lo
tanto, la clase “Venta” es adecuada para esta
responsabilidad
8
Patrón: Experto
Ejemplo de Aplicación
“Venta” es un experto en información para el
trabajo
9
Patrón: Experto
Ejemplo de Aplicación
4. Agregar una clase de SW al modelo de diseño con
el mismo nombre “Venta”, y se le asigna la
10
Patrón: Experto
Ejemplo de Aplicación
responsabilidad de conocer su total (getTotal)
11
Patrón: Experto
Ejemplo de Aplicación
¿Qué información se necesita para obtener el
subtotal de cada línea de venta?
LineaDeVenta.cantidad
EspecificacionDelProducto.precio
“LineaDeVenta” conoce su cantidad y la
especificación del producto asociada
Siguiendo el patrón “Experto en Información”,
“LineaDeVenta” debería determinar el subtotal
12
Patrón: Experto
Ejemplo de Aplicación
*
En un diagrama de interacción,
“Venta” necesita enviar un
mensaje “getSubtotal” a cada
una de sus líneas de venta y
sumar el resultado
13
Patrón: Experto
Ejemplo de Aplicación
¿Qué información necesita conocer
“LineaDeVenta” para proporcionar el subtotal?
Su cantidad
El precio del producto
“EspecificacionDelProducto” es el Experto en
Información que proporciona su precio
14
Patrón: Experto
Ejemplo de Aplicación
Se le debe enviar un mensaje solicitando su
precio
15
Patrón: Experto
Ejemplo de Aplicación
*
16
Patrón: Experto
Ejemplo de Aplicación
Responsabilidad: “Conocer el total de una venta”
17
Patrón: Experto
Ejemplo de Aplicación
Principio aplicado: “Experto en Información”
18
Patrón: Creador
Problema: ¿Quién debería ser el responsable de la
creación de una nueva instancia de alguna clase?
19
Patrón: Creador
Ejemplo de Aplicación
B tiene los datos de inicialización que se pasarán a un
objeto A cuando sea creado (B es un Experto con
respecto a la creación de A)
B es creador de objetos de A
20
Patrón: Creador
Ejemplo de Aplicación
1. Siguiendo el patrón creador, buscar clases que
agregan, contienen, registran, etc.; objetos de la
“LineaDeVenta”
21
Patrón: Creador
Ejemplo de Aplicación
22
Patrón: Creador
Ejemplo de Aplicación
“Venta” contiene (agrega) muchos objetos de
“LineaDeVenta”
23
Patrón: Creador
Ejemplo de Aplicación
2. Diseñar interacciones
24
Patrón: Bajo Acoplamiento
Problema: ¿Cómo soportar bajas dependencias,
bajo impacto del cambio e incremento de la
reutilización?
25
Es una medida de la fuerza con que un elemento está
conectado a, tiene conocimiento de, confía en, otros
elementos
Tipos
Bajo (o débil) acoplamiento no depende de
demasiados otros elementos (clases, subsistemas,
sistemas, etc.) Alto (o fuerte) acoplamiento confía en
muchas otras clases. Problemas que surgen:
• Cambios a clases relacionadas fuerzan cambios locales
• Difíciles de entender de manera aislada
• Difíciles de reutilizar puesto que su uso requiere la
presencia adicional de las clases de las que depende
26
Patrón: Bajo Acoplamiento
Ejemplo de Aplicación
Responsabilidad: “crear una instancia de Pagoy
asociarla con la Venta”
¿Qué clase debería ser la responsable de esto?
Patrón Creador sugiere que sea Registro, ya que
Registroregistra un Pago.
27
1ª Opción: Registro acopla Pago
Patrón: Bajo Acoplamiento
Ejemplo de Aplicación
Asignar a Registrola responsabilidad anterior,
acopla la clase Registrocon el conocimiento de la
clase Pago.
Solución alternativa:
Ambos casos asumen que la Ventadebe acoplarse al
conocimiento del Pago
28
2ª. Opción, Registrono acopla el conocimiento del
Pago
30
focalización de las responsabilidades de un
elemento
Patrón: Alta Cohesión
Clase con Baja Cohesión: hace muchas cosas no
relacionadas, o demasiado trabajo
31
Alta Cohesión.
Ejemplo de Aplicación
Responsabilidad: “crear una instancia de
Pagoy asociarla con la Venta”
32
Alta Cohesión.
Ejemplo de Aplicación
33
Alta Cohesión.
Ejemplo de Aplicación
La asignación de responsabilidad anterior sitúa la
responsabilidad de “realizar un pago” en el
Registro
34
Alta Cohesión.
Ejemplo de Aplicación
Crear pago no hace el Registrocohesivo, pero se
sobrecargará incrementalmente con tareas y llegará
a perder cohesión
Solución alternativa:
Responsabilidad asignada a la clase Venta
35
Alta Cohesión.
Ejemplo de Aplicación
Soporta Alta Cohesión y Bajo Acoplamiento
36
Diferentes grados de
cohesión funcional
Muy baja cohesión:
Una clase es responsable de muchas cosas en áreas
funcionales muy diferentes
Ejemplo: Interfaz_BDR_RPC, responsable de acceso a
DB y administrar las llamadas de procedimiento
remotos
Baja cohesión:
Una clase tienen la responsabilidad de una tarea
compleja en un área funcional
37
Patrón: Controlador
Ejemplo: Interfaz_BDR, implementa muchas métodos
relacionados pero similares
Diferentes grados de
cohesión funcional
Alta cohesión:
Una clase tiene una responsabilidad moderada en un
área funcional y colabora con otras clases para llevar a
cabo las tareas
Ejemplo: Interfaz_BDRinteractúa con todas las clases
persistentes
38
Moderada cohesión:
Una clase tiene responsabilidades ligeras y únicas en
unas pocas áreas diferentes que están lógicamente
relacionadas con el concepto de la clase, pero no entre
ellas
Ejemplo: Compañía, responsable de conocer a sus
empleados y conocer su información financiera
Problema: ¿Quién debe ser el responsable de
gestionar un evento de entrada al sistema?
39
Patrón: Controlador
“Documento”; no abordan las tareas relacionadas
con los eventos del sistema, sólo reciben los
eventos y los delegan a un Controlador
40
Patrón: Controlador
Solución: Asignar la responsabilidad de recibir o
manejar un mensaje de evento del sistema a una
clase que representa una de las siguientes
opciones:
El sistema global, dispositivo o subsistema
(Controlador de Fachada)
Un escenario de caso de uso en el que tiene lugar el
evento del sistema, se denomina con el nombre del
caso de uso, por ej. “ProcesarVentaManejador”,
(Controlador de sesión o caso de uso)
Controlador: Objeto que no pertenece a la interfaz
41
Patrón: Controlador
de usuario, responsable de recibir o manejar un
evento del sistema.
42
Controlador.
Ejemplo de Aplicación
- representa el “sistema” Registro, SistemaCDV
global, dispositivo o
subsistema
- representa un receptor ProcesarVentaManejador,
o manejador de todos ProcesarVentaSesion
los eventos del sistema
de un escenario de caso
de uso
43
Controlador.
Ejemplo de Aplicación
44
Controlador.
Ejemplo de Aplicación
Dos alternativas posibles son:
45
46
Puede existir
Controlador. uno o más
Ejemplo de Aplicación controladores
47
Detalle de
métodos/operaciones
48
Controlador Saturado
(demasiadas
responsabilidades)
Opciones para evitar un controlador saturado:
1. Agregar más controladores, por ej.:
1. RealizarReservaManejador
2. GestionarHorariosManejador
49
3. GestionarTarifasManejador
50
Controlador.
51
Ejemplo de Aplicación
52