Sei sulla pagina 1di 592

Unidad I

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.

➢ Se base en ¿Qué hace este programa?

➢ Para pequeños programas no se necesita ningún principio de


organización.

➢ Para grandes programas la cantidad de código se vuelve


inmanejable por lo que este se divide en funciones o subrutinas.

➢ Si se utiliza correctamente, nos ayuda a mejorar la claridad y el


mantenimiento de los programas.
Introducción a la POO

1. Introducción
Tópicos de la Programación Estructurada:
➢ Cada función tienen un propósito bien definido.

➢ Bajo este principio las funciones se agrupan en módulos.

➢ Utiliza fundamentalmente estructuras secuenciales, selectivas y


repetitivas.

➢ Lenguajes de programación estructurada: Pascal, C, Fortran, Visual


Basic, Cobol, etc.
Introducción a la POO

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.

➢ Modelo deficiente del mundo real.


Maneja datos y funciones separadas; no es como el mundo
real donde existen objetos, características y comportamientos
de c/u de ellos. Esto lo modela la POO.
Las funciones no modelan el mundo real. La POO si lo hace
combinando las características de los objetos con las acciones
que se realizan sobre ellos.
Introducción a la POO

2. POO
Es un enfoque conceptual para diseñar programas, utilizando un
lenguaje de programación orientado a objetos.

Sus propiedades más importantes son:


➢ Abstracción.
➢ Encapsulación y ocultación de datos.
➢ Polimorfismo.
➢ Herencia.
➢ Reusabilidad o reutilización de código.
Este paradigma de programación supera las limitaciones de la
programación tradicional o procedimental. Es otra forma de pensar….
Otra forma de programar.!!!
Introducción a la POO

2. POO
➢ Su objetivo es modelar el mundo real.

➢ Se basa en ¿Qué objetos del mundo real puedo modelar? Es decir


que objetos del dominio del problema debo modelar.

➢ No divide el programa en tareas, sino que abstrae objetos físicos:


autos, libros, biblioteca, cuenta bancaria, equipo de futbol,
jugador, etc.

➢ Los objetos se pueden agrupar en categorías.

➢ Las clases describen de forma abstracta a un conjunto de objetos


del mismo tipo o categoría. Es decir los objetos se crean a partir de
una clase determinada.
Introducción a la POO

2. POO

➢ El paradigma de la POO es encapsular los atributos(características)


y los métodos(operaciones) en cada objeto.

➢ Un objeto es una cosa del mundo real el cual contiene atributos y


métodos. Ejemplo: Auto

➢ Un atributo es una característica del objeto. Si hacemos el símil con


la programación estructurada; estos serían las variables. Por lo
tanto tienen un tipo de datos que los respalde. Ejemplo: color
Introducción a la 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.

➢ Pero lo interesante es que atributos y métodos están encapsulados


en el objeto como tal.

Ejemplo de Objeto: Auto


Atributos: color, marca, #de placa, cantidad de asientos, etc.
Métodos: acelerar, poner gasolina, encender luces, etc.
Introducción a la POO

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.

➢ Un sistema orientado a objetos, contiene un número finito de


objetos cada uno con sus propios atributos y métodos.

➢ Se ayuda de la reusabilidad de código. Programas ya construidos


que puedo utilizar simplemente invocándolos.
Introducción a la POO

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.

Mundo Real: Cosa Programa: objeto

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.

➢ En POO un TAD es una Clase. Es decir una clase describe los


atributos y métodos de un objeto.
Introducción a la POO

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.

Creación de Objetos Instancias


Molde(Clase Auto)
Introducción a la POO

3. Fundamentos de la POO
Métodos:
➢ Es una operación(función) sobre un objeto.

➢ Para llamar un método de un objeto se le envía un mensaje al


objeto.

➢ En la practica un programa orientado a objetos es una secuencia


de operaciones de los objetos que actúan sobre sus propios datos.
Introducción a la POO

3. Fundamentos de la POO
Ventajas:
➢ Modela los sistemas de acuerdo al mundo real.

➢ Comprende todas las etapas de proceso solucionador de


problemas.

➢ Se ha convertido en el estándar a nivel mundial en desarrollo de


SW.

➢ Imprescindible para gestionar programas complejos.

➢ Los lenguajes de programación modernos son orientados a


objetos: Java, PHP, Python, Visual Basic.NET, entre otros.
Introducción a la POO

4. Lenguaje de Modelado UML


➢ El lenguaje unificado de modelado(Unified Modeling Language),
es el estándar de modelado para desarrollo de sistemas y de SW.

➢ Un modelo es una abstracción de cosas reales.

➢ Tiene diagramas de propósitos específicos(diagramas de tiempo) y


otros genéricos(diagramas de clases).
Introducción a la POO

4. Lenguaje de Modelado UML


Ventajas:
➢ Mejora notablemente el diseño de SW.

➢ Modela de forma real los diversos proceso de negocios.

➢ Captura de detalles acerca de un sistema, proceso u organización


en análisis de requisitos.

➢ Nos provee gran cantidad de herramientas para la documentación


de Sistemas.
Introducción a la POO

4. Lenguaje de Modelado UML


Ámbitos de Aplicación:
➢ Banca

➢ Salud

➢ Defensa

➢ Computación Distribuida.

➢ Sistemas en Tiempo Real, etc.


Introducción a la POO

4. Lenguaje de Modelado UML


Modelo
➢ Un modelo simplifica la realidad a través de abstracción.
➢ El modelo trata de capturar las partes esenciales del sistema.
➢ El modelo se representa por notación gráfica.
➢ Un modelo consta de notación(símbolos) y reglas(como utilizar los
símbolos)
➢ Las reglas pueden ser Sintácticas(como se utilizan los símbolos),
Semánticas(que significan los símbolos) y Pragmáticas(intención
de los símbolos).
➢ Tienen dos características importantes. Una estructura
estática(descripción de objetos) y estructura dinámica(ciclo de
vida e interacción de los objetos).
Introducción a la POO

4. Lenguaje de Modelado UML


Más ventajas de UML:
➢ UML es independiente del lenguaje de programación.
➢ Es formal.
➢ Es conciso.
➢ Es comprensible y completo.
➢ Es escalable.
➢ Esta construido en la filosofía de “lecciones aprendidas”, a traves
de las mejores practicas en la orientación a objetos.
➢ Esta avalado por la OMG(Object Management Group) una
organización reconocida a nivel mundial.
Introducción a la POO

4. Lenguaje de Modelado UML


Diagramas Estructurados:
Se utilizan para capturar la organización física de los objetos y el envío
de mensajes entre ellos. Podemos mencionar:
➢ Diagramas de Clases.
➢ Diagramas de Componentes.
➢ Diagramas de Despliegue.
➢ Diagramas de Objetos.
Introducción a la POO

4. Lenguaje de Modelado UML


Diagramas de Comportamiento:
Describe el comportamiento de los diversos objetos del sistema que
se modela. Podemos mencionar:
➢ Diagramas de Casos de Uso.
➢ Diagramas de Actividad.
➢ Diagramas de Comunicación.
➢ Diagramas de Interacción.
➢ Diagramas de Secuencia.
➢ Diagramas de Estado.
➢ Diagramas de Tiempo.
Introducción a la POO

4. Lenguaje de Modelado UML


Simbología:

Nombre del objeto auto

- Color
atributos
- # placa
- # asientos

métodos - Acelerar
- Poner gasolina
- Encender luces
Introducción a la POO

4. Lenguaje de Modelado UML autoDeJuan


Simbología: - Color: rojo
Instancia 1
- # de placa: P236
- # asientos: 6
Creación de Objetos
Molde: Clase Auto - Acelerar
- Poner gasolina
- Encender luces

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

 Proporciona una relación de encapsulamiento que asegura una fuerte


cohesión interna y un débil acoplamiento con el exterior.

 Un objeto revela su rol verdadero y su responsabilidad cuando al enviar


mensajes se convierte en parte de un escenario de comunicaciones.

 Un objeto contiene su propio estado interno y un comportamiento


accesible a otros objetos.
Terminología básica

1 Objeto (Cont.)
 Los objetos pueden ser:
 Tangibles o entidades físicas: una montaña, un grano de arena.

 Conceptos (no tienen masa): una cuenta corriente, una póliza


de seguros, los datos personales de un alumno de una
universidad.

 Pertenecientes a mundos virtuales: asociados con internet.

 De software: abstracciones de las entidades del mundo real con


el fin de controlarlo o simularlo; listas enlazadas, árboles, etc.
Terminología básica

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.

 La información almacenada en un objeto empleado, puede


ser:
 información de identificación (nombre, dirección, edad, titulación)
 información laboral (titulo del trabajo, salario, antigüedad), etc.

 Las operaciones realizadas pueden incluir


 la creación del sueldo o
 la promoción de un empleado.
Terminología básica

1 Objeto (Cont.)
 Los objetos tienen propiedades específicas, tales como
posición, tamaño, color, forma, etc. que definen su
estado.

 Los objetos también tienen ciertoscomportamientos


que los hacen diferentes de otros objetos.

 Booch define un objeto como “algo que tiene un estado,


un comportamiento y una identidad”.
Terminología básica

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.

 Su comportamiento puede incluir acciones para arrancar y


parar la maquina, obtener su temperatura, activar o desactivar
otras máquinas, cambiar velocidad.

 Su identidad se basa en el hecho de que cada instancia de una


máquina es única, tal vez identificada por un número de serie.
Terminología básica

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.

 En el diseño de un programa orientado a objetos, se crea una


abstracción (un modelo simplificado) de la máquina basado en las
propiedades y comportamiento que son útiles en el tiempo.

 Cualquier programa orientado a objetos puede manejar muchos


objetos.
Terminología básica

2.1 Objeto (Cont.)


 Ejemplo: un programa que maneja el inventario de un almacén de
ventas al por menor, utiliza un objeto de cada producto
manipulado en el almacén.

 El programa manipula los mismos datos de cada objeto,


incluyendo el número de producto, la descripción, el precio, el
número de artículos en existencia y el momento para hacer
nuevos pedidos.
Terminología básica

1 Objeto (Cont.)
 Cada objeto sabe también cómo ejecutar acciones con sus
propios datos.

 El objeto producto del programa de inventario, por ejemplo,


conoce cómo crearse a sí mismo y establecer los valores
iniciales de todos sus datos, cómo modificarlos y cómo
evaluar si hay artículos suficientes en existencia para cumplir
una petición de compra.

 En esencia, lo más importante de un objeto es reconocer que


consta de datos y las acciones que puede ejecutar.
Terminología básica
1 Objeto (Cont.)
 Un objeto de un programa de computadora no es algo que se
pueda tocar. Cuando un programa se ejecuta, la mayoría
existe en memoria principal.

 Los objetos se crean por un programa para su uso mientras


el programa se está ejecutando.

 A menos que se guarden los datos de un objeto en un disco,


el objeto se pierde cuando el programa termina (este objeto
se llama transitorio, para diferenciarlo del objeto
permanente que se mantiene después de la terminación del
programa).
Terminología básica

Representación gráfica en UML


 Un objeto se representa por un rectángulo en cuyo interior se
escribe su nombre subrayado.
 El diagrama de representación tiene tres modelos válidos.
Terminología básica

Representación gráfica en UML


 En el siguiente diagrama se representa un cliente de un banco y
las cuentas asociadas con él.

 Las líneas que conectan los objetos representan los enlaces que
existen entre el cliente y sus cuentas.
Terminología básica

Representación gráfica en UML


 El rectángulo con un doblete en la esquina superior derecha
representa un comentario.
 Las líneas punteadas implementan la conexión de cualquier
elemento del modelo a una nota descriptiva o comentario.
 Es más común usar un nombre genérico para los objetos.

:Estudiante : Profesor Estudiante

 La ausencia de cualquier texto precedente delante de los dos


puntos significa que se esta hablando de tipo de objetos genéricos
o anónimos de tipos Estudiante y Profesor.
Terminología básica
Características de los objetos
 Todos los objetos tienen tres características o propiedades
fundamentales, que sirven para definirlos de modo inequívoco:
 Un estado,
 un comportamiento y
 una identidad.

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.

 Un atributo es una propiedad o característica de una clase y


describe un rango de valores que la propiedad podrá contener en
los objetos de una clase.
Terminología básica

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.

 Un atributo se puede mostrar utilizando dos notaciones


diferentes: en línea o en relaciones entre clases.

 Por convenio el nombre de un atributo puede ser de una palabra o


varias palabras unidas.

 Si el nombre es de una palabra se escribe en minúsculas.


Terminología básica

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.

 Ejemplos de nombres de atributos: marca, númeroSerie.

 UML proporciona la opción de indicar información adicional para


los atributos.

 Se puede especificar un tipo para cada valor de atributo. Para


indicar el tipo se usan dos puntos (:) que separan el nombre del
atributo del tipo.
Terminología básica

Estado
 Se puede indicar también un valor por defecto (en forma
predeterminada) para un atributo.

nombre: tipo = valor_por_defecto

miLavadora : Lavadora

marca : String = «Braun»


nombreModelo : String = «OroXC»
numeroSerie : String = «GL235F»
Capacidad : integer = 30
Terminología básica

Multiples instancias de un objeto


 En un diagrama de clases se pueden representar múltiples
instancias de un objeto mediante íconos múltiples.
 Ejemplo: si se necesita representar una lista de vuelos de Iberia
para su representación en un diagrama de clases u objetos, se
puede utilizar un ícono con múltiples instancias para mostrar la
lista de vuelos. La notación UML para representar instancias
múltiples es:

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 es algo que la clase puede realizar o que se puede


hacer a una clase.

 Las operaciones de un objeto se disparan (activan) como resultado


de un estímulo externo representado en la forma de un mensaje
enviado a otro objeto.

 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.

 UML hace una diferencia clara entre la especificación de la


manera de invocar un comportamiento (una operación) y la
implementación real de ese comportamiento (método o función).

 Las operaciones en UML se especifican en un diagrama de clase


con una estructura compuesta por nombre, un par de paréntesis
(vacíos o con la lista de parámetros que necesita la operación) y
un tipo de retorno.
Terminología básica

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.

 Ejem: aceptarRopa ( r: String )


ingresar ()

 El estado y el comportamiento están enlazados; realmente, el


comportamiento en un momento dado depende del estado actual
y el estado puede ser modificado por el comportamiento.
Terminología básica
Identidad
 Es la propiedad que diferencia un objeto de otro objeto similar.

 Hace posible distinguir cualquier objeto sin ambigüedad, e


independientemente de su estado.

 No se representa de manera específica en la fase de modelado de


un problema. Cada objeto tiene en forma implícita una identidad.

 Durante la fase de implementación, la identidad se crea por lo


general utilizando un identificador que viene naturalmente del
dominio del problema.

 Los autos tienen un número de placa, los teléfonos celulares


tienen un número a donde se pueden llamar, una persona tiene
un número de DUI o de pasaporte.
Terminología básica

2 Mensaje.
 Un mensaje es una instrucción que se envía a un objeto y que
cuando se recibe ejecuta sus acciones.

 Un mensaje es una comunicación entre objetos en la que un


objeto (el cliente) solicita al otro objeto (el proveedor o servidor)
hacer o ejecutar alguna acción.

 El usuario de un objeto se comunica con el objeto mediante su


interfaz, un conjunto de operaciones definidas por la clase del
objeto de modo que sean todas visibles al programa.
Terminología básica

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.

 Las clases son los bloques de construcción fundamentales de los


programas orientados a objetos.

 Booch denomina a una clase como “un conjunto de objetos que


comparten una estructura y comportamiento comunes”.

 Una clase contiene la especificación de los datos que describen un


objeto junto con la descripción de las acciones que un objeto
conoce cómo ha de ejecutar. Estas acciones se conocen como
servicios, métodos o funciones miembro (este ultimo se usa
específicamente, en C++).
Terminología básica

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.

 El término atributo se utiliza en análisis y diseño orientado a


objetos, y el término variable se suele utilizar en programas
orientados a objetos.

 Se suelen agrupar juntos elementos similares y con características


comunes en función de las propiedades más sobresalientes e
ignorando otras propiedades no tan relevantes. Este es el proceso
de abstracción.
Terminología básica

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.

 Una clase describe el dominio de definición de un conjunto de


objetos. Cada objeto pertenece a una clase.

 Las características generales están contenidas dentro de la clase y


las características especializadas están contenidas en los objetos.
Terminología básica

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.

 Una clase define la estructura y el comportamiento (datos y


código) que serán compartidos por un conjunto de objetos. Cada
objeto de una clase dada contiene la estructura (el estado) y el
comportamiento definido por la clase.

 Los objetos suelen conocerse como instancias de una clase. Por


consiguiente, una clase es una construcción lógica; un objeto tiene
realidad física.
Terminología básica
3. Clase (Cont.)
 Cuando se cree una clase, se especificará el código y los datos que
constituyen esa clase. De modo general, estos elementos se
llaman miembros de la clase. De modo específico, los datos
definidos en la clase se denominan variables miembro o variables
de instancia. El código que opera sobre los datos se conoce como
métodos miembro o simplemente métodos.

 Los métodos son los que determinan cómo se pueden utilizar los
datos de la clase.

 Las variables definidas en el interior de una clase se llaman


variables de instancia debido a que cada instancia de la clase
contiene su propia copia de estas variables.
Terminología básica
3. Clase (Cont.)
 Existen mecanismos para ocultar la complejidad de la
implementación dentro de la clase.

 Cada método o variable de una clase se puede señalar como


público o privado.

 La interfaz pública de una clase representa todo lo que los


usuarios externos de la clase necesitan conocer o pueden conocer.
Esta interfaz debe ser diseñada de manera cuidadosa para no
exponer en forma innecesaria a la clase.

 Los métodos privados y los datos privados solo pueden ser


accedidos por el código que es miembro de la clase.
Terminología básica

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.

Auto Auto Auto

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

Nivel general(Interfaz) Nivel detallado(implementación)

• Propiedad que considera los aspectos más notables del problema


y expresa la solución en esos términos.
• Representa la información de la interfaz con el usuario.
• La abstracción se representa con una clase que implementa la
interfaz correspondiente.
• Los grados de la abstracción se denominan niveles de abstracción.
Abstracción
• La interfaz será una clase que nos diga como utilizar los servicios
que nos provee (comportamientos).
Técnicas de POO

• La clase también implementa la interfaz, donde se detalla como


realmente se construye el servicio, pero es desconocido por los
usuarios (otras clases) de los servicios.
• Las demás clases (usuarios) ocuparan simplemente los servicios
de la interfaz, nunca sabrán como se implementan.

Ejemplo: El auto me permite acelerar “eso me interesa….QUE HACE”

Y como funciona realmente ese mecanismo “eso no me


interesa….COMO LO HACE”

La abstracción en SW:
Técnicas de POO

• Se puede utilizar código sin tener conocimiento de la


implementación fundamental.
Ejemplo: cuando en C utilizamos la función sqrt (de la librería
“Math.h”), no conocemos su algoritmo real. Este puede ser mejorado
y no nos daríamos cuenta ya que siempre seguiremos teniendo un
resultado.

• La abstracción es el principio fundamental, tras la reutilización.

• Solo se pueden reutilizar elementos en los cuales se haya


abstraído su esencia del mundo real.
Técnicas de POO

• Es decir en el análisis del sistema hay que concentrarse en “qué


hace” y no en “cómo lo hace”.
Introducción a la 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).

• También es agrupar los datos y operaciones relacionados bajo una


misma unidad de programación (cohesión alta, o bien, las
características están fuertemente relacionadas).

• La encapsulación oculta lo que hace un objeto de lo que hacen


otros objetos; por eso se le llama también ocultación de datos.
Técnicas de POO
• La interfaz (operaciones o métodos) de una clase es como un
contrato en la que ofrece sus servicios a otros componentes
externos (por ejemplo, otras clases).
Encapsulamiento y Ocultación de Datos
• De este modo los clientes de un componente (clase) solo
necesitan conocer cuales son los servicios de su interfaz (métodos)
y como utilizarlos(necesita parámetros o no). No necesitan
conocer como se implementan.

• Así, se puede modificar la implementación de la interfaz en una


clase sin afectar a las restantes clases relacionadas con ella, solo
es necesario mantener o conservar la interfaz.
Técnicas de POO
• Por lo que, la interfaz indica que se puede hacer con el objeto
(caja negra).

• La interfaz pública es estable, pero la implementación se puede


modificar.
Herencia
• Clase Padre: Animal.
• Clases hijas: Mono, Jirafa, Leon, Elefante.
• Las clases se dividen en subclases.
Técnicas de POO
Técnicas de POO

Herencia
• Trata de modelar la herencia como en la vida real.

• La idea es que las clases hijas (subclases) comparten


características con la clase padre (superclase o clase principal).

• Además de las características compartidas, cada subclase tiene


sus propias características.

• La clase padre también se le conoce como: principal, superclase o


base.
Técnicas de POO

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.

• Un mono tiene sus propios comportamientos: sube a los árboles,


salta de un árbol a otro, etc.

• Comparte comportamientos con la jirafa y el león: comen,


duermen, ser reproducen, etc.
Técnicas de POO

Herencia
• Y también comparten características heredadas de la clase
animal:
altura, peso, número de patas, etc

• Ejemplo 1: Camion hereda Motor, Rueda y Freno.


Técnicas de POO

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.

• La herencia modela en base a que los objetos se organizan en


jerarquías.

• La jerarquía en base al modelo se define como relación de


generalización o “es un”.

• En POO la relación de generalización se denomina herencia.


Técnicas de POO

Herencia
• Cada clase derivada hereda las características (atributos y
operaciones) de la clases base; y además, agrega sus propias
características.

• La clase base puede a su vez ser clase derivada de otra clase


Técnicas de POO

Jerarquía de Clases: Generalización / Especialización


• La jerarquía de clases gestiona la complejidad ordenando objetos
en árboles de clases con niveles crecientes de abstracción.

• Las jerarquías de clases más conocidas son la generalización y la


especialización.

• La relación de generalización es un concepto fundamental de la


POO y consiste en relacionar una superclase “padre” con una o
varias subclases “hijas”.

• Se le llama también extensión o herencia.


Técnicas de POO

Jerarquía de Clases: Generalización / Especialización


• La relación de generalización se representa con una flecha que
comienza en la subclase y termina en la superclase.
• En UML esta relación se conoce como generalización y en POO
como herencia.
• Estas relaciones no tienen nombre ni multiplicidad.
• Hay que tomar en cuenta que la herencia es transitiva: una clase
hereda de todas las clases antecesoras.
Técnicas de POO

Jerarquía de Clases: Generalización / Especialización

• La generalización es una relación de herencia entre dos clases; es


decir una clase hereda atributos y métodos de la otra.

• La especialización captura características específicas de un


conjunto de objetos que no han sido distinguidas por las clases de
nivel superior.
Técnicas de POO

Jerarquía de Clases: Generalización / Especialización


• La generalización es un relación “no reflexiva” es decir una clase
no se deriva de ella misma.

• La generalización es asimétrica, es decir si B se deriva de A, A no


se puede derivar de B.
Técnicas de POO
Jerarquía de Clases: Generalización / Especialización
• Ejemplo 1
Técnicas de POO

Superclases y Subclases
• Las clases con propiedades comunes se organizan en superclases.

• Una superclase es una generalización de las subclases.

• Una subclase representa una especialización de la superclase.

• La subclase hereda atributos y comportamientos de la


superclase.

• Subclase: hija, derivada


Técnicas de POO
• Superclase: padre, base
Unidad III
Técnicas de POO
Parte 2
Técnicas de POO: Herencia

Herencia… continuación
Clases Abstractas

Edward Munch ¿Qué nos quiso expresar?

• Son clases que podrían no existir en la realidad, pero que es útil


construirlas (por ejemplo, para agrupar características comunes de las
subclases)

• No se pueden crear instancias de una clase abstracta.

• Describe atributos y comportamientos comunes a otras clases.


Técnicas de POO

Clases Abstractas
• Deja algunos aspectos del funcionamiento de la clase a las
subclases concretas.

• Se representa poniendo su nombre en cursiva o agregando la


palabra abstract dentro del símbolo de la clase y debajo del
nombre de la clase.
Técnicas de POO

Clases Abstractas
• Una operación abstracta
no tiene implementación
de métodos, solo la
signatura o el prototipo.

• Si la clase tiene al menos


una operación abstracta,
entonces es una clase
abstracta.
Técnicas de POO

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.

• Las operaciones abstractas se muestran con la cadena {abstract}


luego del prototipo.
+acelerar() {abstract}

• Las operaciones abstractas se definen en las clases abstractas para


especificar el comportamiento que deben de tener todas las
subclases.
Técnicas de POO

Clases Abstractas: Hablemos de Clases Concretas


• Una clase vehículo debe tener operaciones abstractas que
identifiquen el comportamiento de todos los vehículos (acelerar,
frenar, arrancar, etc.).

• Una clase concreta es lo contrario a una clase abstracta. No tiene


métodos abstractos, por lo tanto, puede instanciarse o crear
objetos de ella.

• Las subclases heredan operaciones de una superclase común, pero


dichas operaciones se implementan de modo diferente en cada
una de ellas.

• Unas subclase puede redefinir las operaciones de la superclase o


bien la implementan tal y como esta definida.
Técnicas de POO

Clases Abstractas: Hablemos de Clases Concretas


• Una operación redefinida debe tener la misma signatura (tipo de
retorno, nombre y parámetros) que en la superclase.

• La operación que se redefine puede ser abstracta(no tiene


implementación en la superclase) o concreta(tiene implementación
en la superclase).

• Se pueden incluir a la subclase nuevas operaciones, atributos y


asociaciones.
• Un objeto de una subclase se puede utilizar en cualquier situación
donde sea posible utilizar objetos de la superclase.
• En ese caso, la subclase tendrá una implementación diferente
dependiendo del objeto implicado.
Técnicas de POO

Clases Abstractas y
Clases Concretas
Técnicas de POO

Clases Abstractas y Clases Concretas


Técnicas de POO

Clases Base y Clases Derivadas


• En la herencia, una clase derivada se crea a partir de otra ya
existente denominada clase base.

• Por ejemplo si se necesita crear una clase Triángulo; esta puede


derivarse de otra clase ya existente llamada Figura.

• Tendrán estados y comportamientos comunes,


aunque luego a la clase Triángulo podrán
agregársele características propias.
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.

• Si una clase tiene solo un padre, eso es herencia simple.


• Si una clase tiene más de un padre, tiene herencia múltiple.
Técnicas de POO

Herencia Múltiple
Técnicas de POO

Herencia Múltiple
• Es llamada también generalización múltiple.

• Se da cuando una clase hereda de dos o más clases padres.

• Aunque se admite en UML y en C++, esta no se considera una


buena practica; por lo que JAVA no la implementa.

• ¿Pero cuál es el problema?


• Conflictos entre atributos y comportamientos.
Técnicas de POO

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.

• Como dijimos anteriormente esto nos lleva a malas practicas de


diseño (no modelan el mundo real), por eso JAVA y C# no la
implementan.

• Pero como C++ lo admite, UML lo incluye en su representación de


herencia.
Técnicas de POO

Herencia. Niveles de herencia.


• La jerarquía de herencia puede tener mas de dos niveles.
• Una clase hija puede ser una clase padre, a su vez, de otra clase
hija.
Nivel 0

Nivel 1

Nivel 2
Técnicas de POO

Herencia. Consideraciones de diseño.


• A veces es difícil decidir cual es la relación de herencia más
optima entre clases en el diseño de un programa.

• 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

Herencia. Consideraciones de diseño.


•Según el modo de pago:

•Estado de dedicación a la empresa:


Técnicas de POO

Herencia. Consideraciones de diseño.


•Estado laboral del empleado.

• Dificultad: en los casos anteriores un mismo empleado puede


pertenecer a diferentes grupos de trabajadores.
• ¿Cuál es la relación de herencia que describe la mayor cantidad de
variación en los atributos de las clases y operaciones? ¿esta relación
ha de ser el fundamento del diseño de clases? La respuesta adecuada
depende de la aplicación real a desarrollar.
Técnicas de POO

Accesibilidad y visibilidad en los atributos y operaciones


de una clase.
•Aplicando la técnica de ocultación de datos, los objetos no deberían
acceder directamente a los datos de otro objeto.
•El mecanismo para ocultar datos es declarar los atributos de la clase
de tipo privado (-).
•Para controlar el acceso a los atributos y operaciones de una clase, se
utilizan tres especificadores de acceso:
•Público (+): accesible por todas las operaciones de la clase en
cual se ha definido y desde otros objetos,
•Privado (-): accesibles solo por las operaciones de la clase en cual
se ha definido,
•Protegido (#): pueden ser accedidos por las operaciones de las
clases derivadas (subclases o hijas en la herencia).
Técnicas de POO

Accesibilidad y visibilidad en la herencia.


• En una clase existen secciones:
•Públicas : accesibles a todas las funciones,
•Privadas: accesibles solo a los miembros de la clase en que están
definidos y
•Protegidas: pueden ser accedidos por clases derivadas.

• Por lo que, hay 3 tipos de herencia: publica, privada y protegida.

• Para ocultar los detalles de la clase base y de clases y funciones


externas a la jerarquía de clases, una clase base utiliza normalmente
elementos protegidos en lugar de elementos privados.
Técnicas de POO

Accesibilidad y visibilidad en la herencia.


• Acceso a variables y funciones según tipo de herencia.
Tipo de herencia Tipo de elemento ¿Accesible a clase
derivada?
Publica publica si
protegida si
privada no
Privada publica si
protegida si
privada no

•Por defecto, la herencia es privada.


Técnicas de POO

Accesibilidad y visibilidad en la herencia.


• Herencia pública: Una clase derivada tiene acceso a los
elementos públicos y protegidos de su clase base.
•Los elementos públicos se heredan como elementos públicos, los
elementos protegidos permanecen protegidos.

•Herencia privada: una clase derivada hereda los miembros


públicos y protegidos de la clase base de forma privada.
•Los miembros públicos y protegidos de la clase base se vuelven
miembros privados de la clase derivada. Los miembros privados de
la clase base son inaccesibles a las funciones miembro de la clase
derivada.
Técnicas de POO

Accesibilidad y visibilidad en la herencia.


• Herencia protegida: Los miembros públicos y protegidos de la
clase base se convierten en miembros protegidos de la clase
derivada y los miembros privados de la clase base son inaccesibles.

•Esta herencia es apropiada cuando las facilidades o aptitudes de la


clase base son útiles en la implementación de la clase derivada,
pero no son parte de la interfaz que el usuario de la clase puede ver.

•La herencia protegida es todavía menos frecuente que la herencia


privada.
Técnicas de POO

Accesibilidad y visibilidad en la herencia.


• Tipos de herencia y acceso que permiten.
Tipo de herencia Acceso a miembro Acceso a miembro
de clase base a clase derivada
Publica publica publica
protegida protegida
privada inaccesible
protegida publica protegida
protegida protegida
privada inaccesible
Privada publica privada
protegida privada
privada inaccesible
Ejercicios:
• Crear una clase base denominada Rectangulo que contenga
como miembros datos, longitud y anchura. De esta clase,
derivar una clase denominada Caja que tenga un miembro
adicional denominado profundidad y otra función miembro
que permita calcular su volumen.
• Implementar una jerarquía Librería que tenga al menos una
docena de clases. Considérese una librería que tenga
colecciones de libros de literatura, humanidades, tecnología,
etc.
Técnicas de POO
Polimorfismo.
• Es la propiedad que permite a una operación (función) tener el
mismo nombre en clases diferentes y actuar de modo distinto en
cada una de ellas.
• Una misma operación puede realizar diferentes acciones
dependiendo del objeto sobre el que se aplique.
• Ejemplos. Abrir una puerta, abrir una ventana, abrir un libro, abrir
una cuenta de ahorros.
• En cada caso se realiza una operación diferente.
Técnicas de POO

Polimorfismo.
• En POO cada clase “conoce” cómo realizar esa operación.

• En la práctica, el polimorfismo significa la capacidad de una


operación de ser interpretada solo por el propio objeto que la
invoca.

• Desde un punto de vista práctico de ejecución del programa, el


polimorfismo se realiza en tiempo de ejecución, ya que durante la
compilación no se conoce qué tipo de objeto y por consiguiente
que operación ha sido invocada.
Técnicas de POO

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.

• Entonces, el polimorfismo permite definir una única función


calcularSuperficie, cuya implementación es diferente en las clases
Triángulo, Rectángulo, Circunferencia; y en tiempo de ejecución se
selecciona la función correspondiente al objeto seleccionado.
Técnicas de POO

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

Sobrecarga de operadores y funciones.


• Es un tipo especial de polimorfismo.

• La sobrecarga básica de operadores existe siempre.

• El operador + sirve para sumar números enteros o reales, y


concatenar cadenas; pero si desea sumar números complejos, hay
que sobrecargar el operador + para que permita realizar esta suma.

• El uso de operadores o funciones en forma diferente, dependiendo


de los objetos sobre los que esta actuando se denomina
polimorfismo (una cosa con distintas formas).
Técnicas de POO

Sobrecarga de operadores y funciones.


• Operador sobrecargado. Cuando a un operador existente se le
permite operar con diferentes tipos de datos.

• La sobrecarga es una característica sobresaliente de los lenguajes


de POO.
• Ejemplo de sobrecarga de métodos
• La clase Calculadora realiza las siguientes operaciones:
– Sqrt: aplicado en el atributo x
– Ln: aplicado en el atributo x
– Potencia: aplicado así, atributo x elevado al atributo y
• Dependiendo de la operación a realizar se crea un
obj:Calculadora con 1 o 2 parámetros
Técnicas de POO

Uso del polimorfismo.


• La forma de usar el polimorfismo es a través de referencias a la
clase base.
• En Java se deben seguir las siguientes reglas:
• Crear una jerarquía de clases con las operaciones importantes definidas por
los métodos miembro declaradas como abstractos en la clase base.
• Las implementaciones específicas de los métodos abstractos se deben hacer
en las clases derivadas. Cada clase derivada puede tener su propia versión
del método.
• Las instancias de esta clase se manejan a través de una referencia a la clase
base. Este mecanismo es la ligadura dinámica y es la esencia de
polimorfismo en Java.
Técnicas de POO
Ventajas del polimorfismo.
• En Java, el polimorfismo hace su sistema más flexible, sin perder
ninguna ventaja de la compilación estática de tipos que tienen
lugar en tiempo de compilación.
•Aplicaciones del polimorfismo.
•Las más frecuentes:
•Especialización de clases derivadas. Uso más común: derivar clases
especializadas de clases que han sido definidas. Aumenta la eficiencia de la
subclase, mientras conserva un alto grado de flexibilidad.
•Estructuras de datos heterogéneos. Estas estructuras son fáciles de
diseñar y dibujar, sin perder la comprobación de tipos de los elementos
utilizados.
•Gestión de una jerarquía de clases. Las jerarquías son colecciones de clases
altamente estructuradas, con relaciones de herencia que se pueden
extender fácilmente.
Técnicas de POO
Interfaces.
• Permite declarar un conjunto de constantes y de cabeceras de
métodos abstractos. Estos deben implementarse en las clases y
constituyen su interfaz.

• 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.

•La herencia amplía a la reusabilidad. A una clase existente se le


pueden añadir nuevas características, derivando una nueva clase
de la clase existente.

•Esta técnica es uno de los grandes beneficios de la POO.

•¿Cuáles son las ventajas de la herencia?


1º. Reducción de código.
2º. Admitir el concepto de abstracción de la funcionalidad común.
Técnicas de POO
Reusabilidad o reutilización de código.
• La escritura de código reusable es importante en el diseño de un
código.

•Debe diseñar sus programas de modo que pueda reutilizar sus clases,
sus algoritmos y sus estructuras de datos.

•Se debe evitar diseñar código en exceso o específico para casos


puntuales: siempre que sea posible reutilice código existente.
UNIDAD IV
Lenguaje de Programación
Orientado a Objetos

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

• El interprete de Java se denomina: máquina virtual de


Java (JVM: Java Virtual Machine).

• Los códigos de bytes de Java son un conjunto de


instrucciones correspondientes a un lenguaje máquina
5
JAVA
que no es específico de ningún procesador, sino de la
máquina virtual de Java.
Características Principales
• Java trabaja con sus datos como objetos y con
interfaces a esos objetos.
• Implementa:
– Encapsulación. -
Interfaces.
– Herencia simple. - Paquetes.
– Abstracción.

6
JAVA
– Reutilización.
– Polimorfismo.
• Otras características: Interpretado, Robusto, y de
Arquitectura Neutra
• Compilador tradicional y Máquina Virtual de Java

• Compilador tradicional • Intérprete de ByteCodes

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).

Realización de un Programa en Java


• Pasos para desarrollar un programa:
1. editar el programa
9
JAVA
2. compilarlo
3. ejecutarlo
4. depurarlo
Tecnologías de SW para el entorno de desarrollo
• Entorno de desarrollo: el Java Development Kit (JDK). Sun
Microsystems, propietario de Java, lo proporciona de
forma gratuita, el Java Development Kit (JDK).
http:\\www.java.sun.com

• Entorno de desarrollo integrado (IDE): Netbeans IDE.

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

Secuencias de Escape Descripción


\’ Comillas sencillas
\” Comillas dobles
\\ Barra invertida
\r Retorno de carro
\n Nueva línea
\f Alimentación de
15
JAVA
página
\t Tabulador horizontal
\b Retroceso
\ddd Constante octal
\uxxxx Constante hexadecimal
Tipos de datos de Java
• Dos categorías:
– orientado a objetos
– no orientados a objetos (simples o primitivos)

• En el núcleo de Java hay 8 tipos de datos simples.

16
JAVA
• Todos los otros tipos de datos de Java son construidos desde estos
tipos simples.

• Para lograr portabilidad, Java es intransigente en cuanto al (tamaño)


rango y comportamiento de estos tipos de datos.
Tipos Simples de Java

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

Tipo ancho en bits Rango


byte 8 -128 a 127
short 16 -32.768 a 32.767
-2.147.483.648 a
int 32
2.147.483.647
long 64 -9.223.372.036.854.775.808 a
9.223.372.036.854.775.807

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.

• Se han utilizado números de línea solamente para una mejor


comprensión de las siguientes consideraciones.

• En este programa se ha utilizado un comentario (líneas 1 a 3)


delimitado con /* y */ como en el lenguaje C.

• En la línea 4 comienza la declaración de clase para la clase


CalcularPulgadas.

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).

• En la línea 5 se tiene el punto de inicio de toda aplicación en


Java.

• Los paréntesis después de main indican que éste es un bloque de


construcción del programa, al cual se le llama método.

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.

• Su correspondiente llave derecha debe terminar el cuerpo de la


declaración del método (línea 12 del programa).

• En la línea 10 se le indica a la computadora que imprima la


primera cadena de caracteres contenida entre comillas dobles
concatenándola con el valor de la variable ci y concatenándola
luego con la segunda cadena de caracteres.
23
JAVA
Explicación del primer programa en Java
• System.out se conoce como el objeto de salida estándar.

• System.out permite a las aplicaciones en Java mostrar conjuntos


de caracteres en la ventana de comandos, desde la cual se
ejecuta la aplicación en Java.

• En Microsoft Windows 95/98/ME, la ventana de comandos es el


símbolo de MS-DOS. En Microsoft Windows NT/2000/XP, la
ventana de comandos es el Símbolo del sistema.

• En UNIX/Linux/Mac Os X, la ventana de comandos se llama


ventana de terminal o shell.

24
JAVA
Tipos de Datos con Punto Flotante

Tipo Tamaño en bits Rango


float 32 3,4e-38 a 3,4e+38 double 64 1,7e-308 a
1,7e+308
• double es el más frecuentemente utilizado, porque todas las
funciones matemáticas en la librería de clases Java utilizan
valores double.
Ejemplo: longitud de la hipotenusa dados sus lados
/* Por el Teorema de Pitágoras, encontrar la longitud de la
hipotenusa dadas las longitudes de los lados opuestos.

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”);

Tipos de Datos Orientados a Objetos o Referenciados


• Hay 3 tipos: Clases, Interfaces y Arrays

28
JAVA Literales (Constantes)

• Se refieren a valores fijos que son representados en su


forma legible para los humanos.
• Son llamados comúnmente constantes.
• Pueden ser de cualquier tipo de dato simple:
− Entero
− Real
− Booleano
− Carácter
− Cadena de caracteres
− Valor nulo (null)

29
JAVA Literales (Constantes)

• Constantes de carácter: encerradas en comillas simples.


‘a’ y ‘%’
•Constantes enteras: números sin componente decimal.
Ejemplos: 10 y -100

•Constantes con punto flotante: uso del punto decimal


seguido por los componentes fraccionarios del número.
Ejemplo 11.123.

•Java permite usar notación científica también.

30
JAVA Literales (Constantes)

•De manera predeterminada, los literales enteros son de tipo


int. Si quiere especificar un literal long, añada una l o una L.
Ejemplo: 12 es un int, pero 12L es un long.
•De manera predeterminada, los literales con punto flotante
son de tipo double.

•Para especificar un literal float adicione una f o una F a la


constante. 10.19F es de tipo float.

•Aunque los literales enteros crean un valor int


predeterminado, estos todavía pueden ser asignados a
31
JAVA Literales (Constantes)

variables de tipo char, byte o short siempre y cuando el


valor que esta siendo asignado pueda representarse por el
tipo objetivo. Un literal entero siempre puede ser asignado a
una variable long.
• Java le permite especificar constantes enteras en
hexadecimal u octal en vez de decimal.

• Una constante hexadecimal debe comenzar con 0x (un


cero seguido de una x).

• Una constante octal comienza con un 0 (cero).


32
JAVA Literales (Constantes)

Ejemplos: int hex = 0xFF; // 255 en decimal


int oct = 011; // 9 en decimal
De tipo cadena (String)
•Una cadena es un conjunto de caracteres encerrados por
comillas dobles.

Ejemplo: “esto es una prueba”

•Además de los caracteres normales, un literal de cadena


puede contener también una o más de las secuencias de
escape descritas.
33
JAVA Literales (Constantes)

Ejemplo: “Primera linea\nSegunda linea”

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

De documentación. Comienza con /** y termina con */.


•Son comentarios especiales que javadoc utiliza para generar la
documentación acerca del programa, aunque también se pueden
emplear de manera idéntica a los comentarios tradicionales. Ejemplo:
/**
37
JAVA
* Punto de entrada principal para la aplicación.
* Parámetros:
* args: Matriz de parámetros pasados a la aplicación a través de *
la línea de órdenes.
*/
Operadores
• Un operador indica al compilador que desarrolle una operación
matemática o lógica.
• Tipos de operadores: aritmético, a nivel de bit, relacional y lógico.
• Operadores Aritméticos: Operador Significado
+ Suma
- Resta (o signo menos)
38
JAVA
* Multiplicación
/ División
% Modulo
++ Incremento
-- Decremento
Operadores Aritméticos
• +, -, * y / trabajan como están definidos en álgebra.
• / cuando se aplica a un entero, cualquier residuo será
truncado. 10/3 será igual a 3 en división entera.
• El residuo de estas divisiones puede obtenerse con el operador
modulo %. 10%3 es igual a 1. En Java puede ser aplicado a
enteros y a punto flotante. 10%3.0 es también 1.
39
JAVA
• Incremento (++) suma 1 a su operando. Pueden preceder
(prefijo) o seguir (posfijo) al operando: x++ o ++x es lo
mismo que x = x + 1.
• Decremento (--) resta 1 a su operando. Pueden preceder
(prefijo) o seguir (posfijo) al operando: x-- o --x es lo
mismo que x=x – 1.
Operadores Aritméticos
• La diferencia entre prefijo o sufijo, se nota cuando se una en
una expresión más larga que los ejemplos anteriores.
• Cuando el operador de incremento o decremento precede su
operando, Java realizará la operación correspondiente antes de
obtener el valor del operando, que el resto de la operación
40
JAVA
utilizará. Si el operador sigue el operando Java obtendrá el
valor del operando antes de su incremento o decremento.
• Ejemplo de la diferencia entre prefijo o sufijo.
X = 10; Y = ++X; En este caso Y será actualizada a 11.
X = 10; Y = X++; Entonces Y es 10.
Ejemplo de Operadores Aritméticos
/* Este programa muestra la función del Operador Módulo (%).
*/
class ModuloDemo {
public static void main(String args[]) {
int iresult, irem;
double dresult,
drem; iresult = 10 /
41
JAVA
3; irem = 10 % 3;
dresult = 10.0 / 3.0;
drem = 10.0 % 3.0;
System.out.println("Resultado y residuo de 10/3: " +iresult + " " + irem);
System.out.println("Resultado y residuo de 10.0/3.0: " +dresult + " " + drem);
}
}
Operadores Relacionales

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

if (i>j) System.out.println("i > j");


b1 = true; b2 = false; if (b1&b2) System.out.println("Esto
no se ejecuta"); if (!(b1&b2))
System.out.println("!(b1&b2) es verdadero"); if (b1|b2)
System.out.println("b1|b2 es verdadero"); if (b1^b2)
System.out.println("b1^b2 es verdadero");
}
46
JAVA
}
Tercer Programa en Java (usando Cuadros de Diálogo)
1 /* Este programa muestra el funcionamiento de los operadores
2 relacionales y lógicos. */
3 //paquetes de Java
4 import javax.swing.JOptionPane;
5
6 public class OperandosRelacionalesLogicos {
7 public static void main( String arg[]) {
8 int i,j;
9 boolean b1, b2;
10 i=10; 11 j=11;
12 if (i<j) JOptionPane.showMessageDialog(null,"i < j");
47
JAVA
Tercer Programa en Java (usando Cuadros de Diálogo)
13 if (i<=j) JOptionPane.showMessageDialog(null,"i <= j");
14 if (i!=j) JOptionPane.showMessageDialog(null,"i != j");
15 if (i==j) JOptionPane.showMessageDialog(null,"i == j");
16 if (i>=j) JOptionPane.showMessageDialog(null,"i >= j");
17 if (i>j) JOptionPane.showMessageDialog(null,"i > j");
18 b1 = true;
19 b2 = false;
20 if (b1&b2) JOptionPane.showMessageDialog(null,"Esto no se ejecuta");
21 if (!(b1&b2)) JOptionPane.showMessageDialog(null,"!(b1&b2) es
verdadero");
22 if (b1|b2) JOptionPane.showMessageDialog(null,"b1|b2 es verdadero");
23 if (b1^b2) JOptionPane.showMessageDialog(null,"b1^b2 es verdadero");
24 } //fin del método main
48
JAVA
25} //fin de la clase
Paquetes de Java
• Muchas aplicaciones de Java utilizan cuadros de diálogo o
ventanas para mostrar la salida.

• Los cuadros de diálogo son ventanas en las que los


programas muestran mensajes importantes a los usuarios
del programa.
• La clase JOptionPane de Java proporciona cuadros de
diálogo previamente empaquetados, los cuales permiten a
los programas mostrar ventanas que tengan mensajes para
los usuarios.
49
JAVA
• Uno de los puntos fuertes de Java es su extenso conjunto
de clases predefinidas que los programadores pueden
usar.
Paquetes de Java
• Las numerosas clases predefinidas de Java se agrupan en
categorías de clases relacionadas, conocidas como
paquetes.
• Un paquete es una colección de clases con nombre; éstos
se conocen colectivamente como la biblioteca de clases de
Java, o la Interfaz de Programación de Aplicaciones de Java
(API).

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;

• Proveen dos beneficios:


– son más compactos que sus equivalentes “extensos”.
– se aplicarán más eficiente por el sistema en tiempo de ejecución.
Conversión de Tipo en Asignaciones

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.

• El método main, como ve, es público (public), estático


(static), no devuelve nada (void) y tiene un argumento de
tipo String que almacenará los argumentos pasados en la
línea de ejecución cuando se invoca a la aplicación para ser
ejecutada.

• La solución de cualquier problema debe considerar los objetos


naturales del problema. Análisis y diseño orientado a objetos.
Ejemplo: Tabla de equivalencias de
temperaturas
4
• Programa que presenta una tabla de equivalencia entre grados
centígrados y grados fahrenheit, así:
-30 C -22.00 F
-24 C -11.20 F
...
90 C 194.00 F
96 C 204.80 F
La relación entre los grados es: grados fahrenheit = 9/5
* grados centígrados + 32.

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.

Paquetes de la biblioteca de clases de Java


(Más importantes)
Paquete Descripción

java.lang Contiene clases variadas pero imprescindibles para el lenguaje,


como Object, Thread, Math...
java.io Contiene clases para manejar la entrada/salida.

java.util Contiene clases que permiten el acceso a recursos del sistema,


etc.
java.applet Contiene clases para la creación de applets.

java.net Contiene clases para soportar aplicaciones que acceden a redes


TCP/IP.

16
java.awt Contiene clases para crear interfaces de usuario con ventanas.

java.swing Contiene clases para crear interfaces de usuario mejorando la


AWT.

Paquetes en una Aplicación Java


• Las clases que se guardan en un archivo cuando escribimos un
programa, pertenecen al paquete predeterminado sin nombre.

• Una clase de un determinado paquete puede hacer uso de otra clase de


otro paquete de dos formas:
1. Utilizando su nombre completo en todas las partes del programa
donde haya que referirse a ella. Por ejemplo:
java.lang.System.out.println(gradosFahrenheit);
17
2. Importando la clase, lo que posibilita referirse a ella simplemente
por su nombre. Por ejemplo:
import java.lang.*; // importa todas las clases del paquete lang
import java.lang.System; // importa solo la clase System

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 $.

• Una cadena es un objeto de la clase String.

25
• Las literales de cadena, que se almacenan en memoria como objetos
String anónimo, se escriben como secuencias de caracteres entre
comillas dobles.

• Ejemplos: “Juan E. Perez” (un nombre)


“Calle Principal 999” (una dirección)
• Una cadena puede asignarse en una declaración a una referencia
String: String color = “azul”; inicializa la referencia String de nombre color
para que haga referencia a un objeto String anónimo que contiene la cadena
“azul”.

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.

• Un objeto String es una cadena de caracteres no modificable.

• Java proporciona el operador + para concatenar objetos String.

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”)));

Si alguno de los String tienen longitud cero, se


concatena una cadena nula.
29
Métodos de la Clase String
Métodos de la Clase String
• int compareTo(String otroString)
Este método compara lexicográficamente el String
especificado, con el objeto String que recibe el mensaje
compareTo (el método equals realiza la misma
operación).

• El resultado devuelto es un entero:


<0 si el String que recibe el mensaje es menor que el otroString,
=0 si el String que recibe el mensaje es igual que el otroString y
30
>0 si el String que recibe el mensaje es mayor que el otroString.
• El método compareTo permite saber si una cadena está
en orden alfabético antes (menor) o después (mayor)
que otra y el proceso que sigue es comparar las cadenas
carácter a carácter. La comparación se realiza sobre los
valores Unicode de cada carácter.
String strl = “abcde”, str2 = “abcdefg”;
if (str1.compareTo(str2) < 0)
System.out.println(str1);

El método compareTo diferencia las mayúsculas de las


minúsculas. Las mayúsculas están antes por orden
alfabético. Si en vez de utilizar el método compareTo se
31
Métodos de la Clase String
utiliza el métoco compareToIgnoreCase no se hace la
diferencia.

public class Testcadena{ Ejemplo public static void


main(String[] args) {
String str1 = "Santander es bonito";
String str2 = "SANTANDER es muy
bonito"; String strtemp; int
resultado;
resultado = str1.compareToIgnoreCase(str2);

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.

• El resultado es falso solo si por lo menos uno de los siguientes es cierto:


• toffset es negativo
• ooffset es negativo
• toffset + len es más grande de la longitud del objeto String.

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";

//Probar regionMatches (susceptible a mayúsculas) if (


s3.regionMatches( 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";

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";

JOptionPane.showMessageDialog(null, salida, "Comparaciones


entre Cadenas", JOptionPane.INFORMATION_MESSAGE);
System.exit(0);

} //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

Flujo hacia el destino DESTINO


45
FLUJO
• Un flujo es un objeto que hace de intermediario entre el
programa y el origen o el destino de la información.

• El programa leerá o escribirá en el flujo sin importarle


desde dónde viene la información o a dónde va y
tampoco importa el tipo de datos que se leen o
escriben.

• Debido a que todas las clases relacionadas con flujos


pertenecen al paquete java.io de la biblioteca estándar
46
de Java, un programa que utilice flujos de E/S tendrá
que importar este paquete. import java.io.*;

Flujos Estándar de E/S


• La biblioteca de Java proporciona 3 flujos estándar, manipulados por
la clase System del paquete java.lang, que son automáticamente
abiertos cuando se inicia un programa y cerrados cuando éste
finaliza.

• System.in. Referencia a la entrada estándar del sistema, que


normalmente coincide con el teclado. Se utiliza para leer datos
introducidos por el usuario.

47
• System.out. Referencia a la salida estándar del sistema, que
normalmente es el monitor. Se utiliza para mostrar datos al usuario.

• System.err. Referencia a la salida estándar de error del sistema, que


normalmente es el monitor. Se utiliza para mostrar mensajes de
error al usuario.

Flujos de Entrada (Scanner)


• Esta clase que se encuentra disponible desde Java 1.5, permite
leer datos de una forma más sencilla que el clásico
InputStream con un BufferedReader.
• Para utilizarla tan sólo se tiene que crear un objeto de tipo
Scanner (importando previamente el paquete java.util.Scanner) e
indicándole a este que lea de la consola con System.in. Así:
48
Scanner pruebaScanner = new Scanner(System.in);

• 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.

String texto = pruebaScanner.next();


Flujos de Entrada (Scanner)
Interacción con un Archivo de Texto
• Crear un Archivo de Texto “Archivo.txt”, con el siguiente Kelvin
contenido: 30
• En el siguiente programa se recuperará línea por línea los 78,7
datos del Archivo y serán impresas. O si se desea, se Horario: 8am a 4pm
podrían capturar las líneas en variables.
49
import java.util.*; import
java.io.*; public class
Scan1 {
public static void main(String[] args) { try {
Scanner s = new Scanner(new File("archivo.txt"));
System.out.println(s.nextLine());
System.out.println(s.nextInt()); s.nextLine();
System.out.println(s.nextDouble()); s.nextLine();
System.out.println(s.nextLine());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (InputMismatchException e){
e.printStackTrace(); } } }

Flujos de Entrada (Scanner)


Interacción con un Archivo de Texto
/variable entera(i)
50
import java.util.*; import
java.io.*; public class
Scan2 {
public static void main(String[] args) { try
{ int i;
Scanner s = new Scanner(new File("archivo.txt"));
System.out.println(s.nextLine());
i=s.nextInt();
System.out.println("variable recuperada de archivo: ");
System.out.println(i); s.nextLine();
System.out.println(s.nextDouble()); s.nextLine();
System.out.println(s.nextLine());
// …. continuan las excepciones

Flujos de Entrada (Scanner)


51
Interacción con un Archivo de Texto
/variable entera(i)
// continuación del programa anterior
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (InputMismatchException e){
e.printStackTrace();
}
}
}

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.

• Si lo que se quiere es que la ejecución del programa no se detenga,


habrá que capturar la excepción y manejarla adecuadamente.

• Las excepciones en Java son objetos de subclases de Throwable. Por


ejemplo, el paquete java.io define una clase de excepción general
denominada IOException para excepciones de entrada salida.

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.

• Si usted sabe que un método podría lanzar una excepción, incluya


código apropiado para manejar excepciones en su programa. Esto
hará que su programa sea más robusto.

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.

public static void main(String[] args) throws IOException


{
}

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.

• Java también garantiza que una cláusula finally se


ejecutará si un bloque try se sale mediante el uso de una
instrucción return, break o continue.

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.

• La formula es: I = c*r*t / 360*100

• 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.

• El paquete java.lang proporciona las clases Byte, Character,


Short, Integer, Long, Float, Double y Boolean, que encapsulan
cada uno de los tipos primitivos.

• Un objeto de la clase Integer contiene un atributo de tipo int,


que es el objetivo de la clase. Además proporciona otros
atributos y métodos útiles para tratar con un entero.

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) { }

Ejemplo (para leer enteros)


import java.io.*;
class LeerInt {
public static void main(String []args) {
Scanner sc = new Scanner(System.in);
int a, b, c;
try {
// Usamos como delimitador el espacio en
blanco, // o bien cualquier espacio/fin de línea (el
\\s) sc.useDelimiter("[ \\s]");
// Leemos los tres
enteros a = sc.nextInt(); b

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

Ejemplo (para leer flotante y cadenas…)


import java.io.*;
class LeerFloatString {
public static void main(String []args) {
Scanner sc = new Scanner(System.in);
sc.useDelimiter("[ \\s]"); // delimitador – espacio en blanco
try {
System.out.println("Introduzca dos valores reales, un entero y
una cadena separados por un espacio en blanco:");
74
// Leemos los valores
float a = sc.nextFloat();
float b = sc.nextFloat();
int c = sc.nextInt();
String d = sc.next();
System.out.println(a +", "+ b +", "+ c +", "+ d);
}
catch (IOException ignorada) {
}
} } //fin del main y la clase

Ejercicio: Solución Cuadrática


// Soluciones reales de una ecuación de segundo grado.
import java.io.*;

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

}// fin de la clase

SOLUCION Usando Cuadros de Diálogo


import java.io.*; import javax.swing.*;
public class CEcuacion { public static
void main(String[] args){
double a,b,c,d,x1,x2;
String sdato;
String as, bs, cs;
as=JOptionPane.showInputDialog("Coeficiente a:"); a =
Double.parseDouble(as); //convertir String a double
bs=JOptionPane.showInputDialog("Coeficiente b:"); b =
Double.parseDouble(bs); //convertir String a double
78
cs=JOptionPane.showInputDialog("Coeficiente
c:"); c = Double.parseDouble(cs); d = b*b - 4*a*c;
SOLUCION Usando Cuadros de Diálogo
JOptionPane.showMessageDialog(null, "Valor de d:" + d);
if (d<0)
JOptionPane.showMessageDialog(null, "Raíces
Complejas"); else {
d=Math.sqrt(d);x1=(-b+d)/(2*a);x2=(-b-d)/(2*a);
JOptionPane.showMessageDialog(null,"Raíces:"+"x1="+x1+",x2="+x2);
}
System.exit( 0 ); // 0: si la ejecución del programa fue correcta
// otro valor: la ejecución no fue correcta
} // fin del main
79
} // fin de la clase
Leer Tipos de Datos Primitivos con
Ventanas de Diálogo
• Para leer cadenas de caracteres a través de ventanas de diálogo,
JOptionPane tiene también el método: showInputDialog.

• El método showInputDialog requiere un argumento: la cadena de


caracteres que se va a mostrar, indicando al usuario que tipo de dato
se espera. Este método devuelve la cadena de caracteres escrita por
el usuario en el cuadro de texto.
• Su uso entonces:
var_String = JOptionPane.showInputDialog( “cadena a mostrar” );

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 );

• El método static exit de la clase System termina la aplicación. Esto se


requiere para terminar cualquier aplicación que muestre una interfaz
gráfica de usuario.

• El argumento 0 para el método exit indica que el programa terminó


correctamente. Este valor se pasa a la ventana de comandos que
81
ejecutó el programa. El argumento es útil si el programa se ejecuta
desde un archivo por lotes (en sistemas Windows) o un script de shell
(en sistemas UNIX, Linux, Mac OS X).

Ejercicios Propuestos
1. Realizar una aplicación que calcule el volumen de una
esfera, que viene dado por la fórmula:

v r3

2. Realizar una aplicación que pregunte el nombre y el año


de nacimiento y dé como resultado:
82
Hola nombre, en el año 2015 tendrás n años.

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

• Ejemplo: Supongamos que tenemos un arreglo


unidimensional de enteros llamada m, el cual contiene
9 elementos. Estos elementos se identificarán de la
siguiente forma:

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]

• Observe que los subíndices son enteros consecutivos y


que el primer subíndice vale 0.

• Un subíndice puede ser cualquier expresión entera


positiva.
• El número máximo de dimensiones o el número
máximo de elementos, dentro de los límites
4
Introducción a los arreglos
establecidos por el compilador, para una matriz
depende de la memoria disponible.
• En Java, cada elemento de un arreglo unidimensional es
de un tipo primitivo, o bien una referencia a un objeto;
y cada elemento de un arreglo multidimensional es, a
su vez, una referencia a otro arreglo.

Arreglos numéricos unidimensionales


• Antes de usar un vector, hay que declararlo.

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.

• Ejemplos de declaración de un vector:


int[] m;
float[] temperaturas;
Computadora[] computadoras;

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.

•Acceder a los elementos de un vector.


int[] m = new int[100];
int k=0, a=0;
//....

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.

¿Como asegurarse de no exceder


accidentalmente el final de un vector?
• Verificando la longitud del vector mediante la variable estática
length, que puede ser accedida por cualquier vector.
12
int n = m.length; // n = cantidad de datos del vector m
Métodos de un vector.
•La clase genérica ‘Arrays’ proporciona un conjunto de métodos que
ha heredado de la clase Object del paquete java.lang.
•Métodos destacables: equals: permite verificar si dos
referencias se refieren a un mismo objeto y clone:
permite duplicar un objeto.

13
• Ejemplo: Crea e inicializa un vector de enteros, crea una
copia del vector y luego las compara.

public class ArregloEnteros { public


static void main(String []args) {
int[] m1 = {10, 20, 30, 40, 50};
int[] m2 = (int[])m1.clone(); //m2 será una copia de m1 if
(m1.equals(m2)) //equivale a: if (m1 == m2)
System.out.println("m1 y m2 se refieren a la misma
matriz");
else
System.out.println("m1 y m2 se refieren a matrices
diferentes");
14
}
}
Ejemplo: Lee 5 cadenas de caracteres, y las presenta en pantalla.

import java.util.Scanner; public class Cadenas{ public static


void main(String [] args) throws IOException{
Scanner miEntrada = new Scanner(System.in);
String [] nombres;
nombres = new String [5];

System.out.println("Escriba 5 nombres:");
for (int i=0; i<5; i++)
nombres[i]=miEntrada.nextLine();

System.out.println("Los nombres almacenados en \nel arreglo de


String son:");
15
for (int i=0; i<5; i++)
System.out.println(nombres[i]);
}
}
//Ejemplo de busqueda lineal de un arreglo
unidimensional import javax.swing.*;

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];

for ( int contador=0; contador < arreglo.length;


contador++)
arreglo[contador]= 2 * contador;
while ( respuesta )
{
//obteniendo del usuario el numero a buscar
numero=JOptionPane.showInputDialog("Numero a
buscar:"); num = Integer.parseInt(numero);

//pasar referencia a arreglo al método

17
//busquedaLineal
int elemento = busquedaLineal( arreglo, num );

//mostrar el resultado de la busqueda


if ( elemento != -1 ) result = "Valor encontrado en el
elemento "+elemento; else result = "Valor no
encontrado";
JOptionPane.showMessageDialog(null, result);
//verificar si hay otra busqueda
busq = JOptionPane.showInputDialog("Otra
busqueda Si/No ?"); if (busq.compareTo("SI")==0 ||
busq.compareTo("Si") ==0
|| busq.compareTo("si")==0 )

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’

• Puede ser iniciado en el momento de su definición:


char[ ] cadena = {‘a’,’b’,’c’,’d’};

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};

• Si se crea un vector de caracteres y se le asigna un


número de caracteres menor que su tamaño, el
resto de los elementos quedan con el valor ‘\0’ con
el que fueron iniciados.

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

• La clase Arrays está definida en el paquete


java.util y se deriva de la clase
java.lang.Object

• Esta clase incluye una serie de métodos para


manipular los arreglos.
static int binarySearch(byte[] a, byte key);
static boolean equals(boolean[] a, boolean[]
24
a2); static void fill(boolean [] a, boolean
val);
Clase Arrays: método binarySearch

• El método binarySearch busca en el arreglo al


valor key utilizando el algoritmo de búsqueda
binaria.

25
static int binarySearch(byte[] a, byte key);

Este método está sobrecargado con arreglos y


valores de los diferentes tipos simples de
datos de java.
Clase Arrays: métodos equals y fill

• El método equals regresa true si los dos


arreglos del tipo especificado son iguales uno
26
al otro. static boolean equals(boolean[] a,
boolean[] a2);

• El método fill asigna el valor especificado val


en todos los elementos del arreglo a
static void fill(boolean [] a, boolean val);

27
Clase Arrays: método hashCode

• El método hashCode devuelve un código hash


basado en el contenido del arreglo a.

static int hashCode(byte[] a);

• Este método está sobrecargado con arreglos y


valores de los diferentes tipos simples de
datos de java.
28
Clase Arrays: método sort

• El método sort ordena el arreglo especificado


en orden numérico ascendente.

static void sort(byte[] a);

• Esta otra versión de sort ordena el rango


especificado de elementos del arreglo en orden
numérico ascendente.
static void sort(byte[] a, int fromIndex, int toIndex);
29
import java.util.Arrays; import
javax.swing.JOptionPane; public class
AplicacionClaseArray { public static void
main(String []args) { int[] m1 = {20, 15, 8, 3,
30, 26, 42, 1, 50}; Arrays.sort(m1); for (int
cont=0; cont<9; cont++)
System.out.println(m1[cont]);
String a=JOptionPane.showInputDialog("Numero a
buscar en el arreglo");
int b=Integer.parseInt(a); int
y=Arrays.binarySearch(m1,b);
if (y<0)
JOptionPane.showMessageDialog(null,"El valor
"+b+" no se encuentra en el arreglo");
30
else
JOptionPane.showMessageDialog(null,"El valor "+b+"
se encuentra en la posición "+y+" del arreglo");
System.exit(0);
}
}

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.

• Los arregloss no tienen que ser rectangulares.


Arreglos Multidimensionales

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

• Al igual que los arreglos unidimensionales, los arreglos


multidimensionales pueden inicializarse mediante
inicializadores de arreglos en las declaraciones. int b[ ][ ] = { {
1, 2 }, { 3, 4 } };

• En el ejemplo, los valores inicializadores se agrupan por fila


entre corchetes.

• El arreglo b en realidad esta compuesto de dos arreglos


unidimensionales separados. El arreglo b en sí es un arreglo

35
Arreglos de arreglos unidimensionales

unidimensional que contiene dos elementos. Cada elemento


es una referencia a un arreglo unidimensional de variables
int.
• La forma en que Java representa los arreglos
multidimensionales los hace bastante flexibles. De
hecho las longitudes de las filas en el arreglo b no tienen
que ser iguales.
int b[ ][ ] = { { 1, 2 }, { 3, 4, 5 } };

36
Arreglos de arreglos unidimensionales

• Un arreglo multidimensional con el mismo número de


columnas en cada fila puede crearse mediante una
expresión de creación de arreglos. int b[ ][ ]; b = new int[
3 ][ 4 ];
• Un arreglo multidimensional, en el que cada fila tiene un
número distinto de columnas, puede crearse de la
siguiente manera: int b[ ][ ];
b = new int[ 2 ][ ]; //crear 2 filas
b [0] = new int [5]; //crear 5 cols para la fila 0
b[1] = new int[3]; //crear 3 cols para la fila 1

37
Arreglos de arreglos unidimensionales

• Estas instrucciones crean un arreglo bidimensional con


dos filas. La fila 0 tiene cinco columnas y la fila 1 tiene 3
columnas.

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;

mensaje = "Los valores en arreglo 1 por fila son:\n ";


crearSalida (arreglo1, mensaje);
mensaje = "\nLos valores en arreglo 2 por fila son:\n ";
crearSalida (arreglo2, 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

Metodología para resolver


problemas aplicando la POO

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.

• Puede considerarse como el enunciado del


problema a resolver.

• 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?

– ¿Cuál es la salida deseada?

– ¿Qué método produce la salida deseada?

• Se tiene en cuenta la especificación de los


requisitos dados por los usuarios del sistema.
FASE II. Análisis del problema
4
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


FASE II. Análisis del problema
5
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)
6
Modelo de Casos de Uso
¿Qué es un caso de uso?
• Es una técnica para la captura de requisitos potenciales para un
nuevo sistema o actualización.

• Cada caso de uso nos proporciona uno o más escenarios, que


nos indica como va interactuar el sistema con el usuario u otros
sistemas.

• Normalmente debemos evitar un lenguaje técnico y utilizar un


lenguajes más cercano al usuario.

• Es una secuencia de interacciones que se darán entre el


sistemas y los usuarios, en respuesta a un evento del actor
principal.

7
Modelo de Casos de Uso
Un caso de uso debe:

• Describir una tarea del negocio, que nos sirva para


alcanzar una meta de este. Por ejemplo:
– Inscribir asignaturas, agregar asignaturas, actualizar
asignatura, eliminar asignatura, etc.
– Registrar alumno, registrar empleado, agregar docente,
agregar producto, registrar cliente, procesar venta, etc.

• Tener un nivel apropiado de detalle.

• Ser bastante sencillo para que un programador lo


trabaje en un único desarrollo.
8
Modelo de Casos de Uso
Pasos para desarrollarlo:

1. Especificar la misión del sistema u objetivo.

2. Identificar quienes utilizaran el sistema (actores


primarios)

3. Averiguar que objetivos desean cumplir los actores al


usar el sistema.

4. Identificar los pasos o eventos de cada caso de uso.

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.

• Por ser objetivos, inician con verbo en infinitivo. Por


ejemplo: Agregar, Procesar, Registrar, Eliminar, Iniciar,
Inscribir, etc.
Ejemplo en formato Breve
• Caso de Uso: Procesar Venta

El Cliente llega a una caja con artículos para comprar. El


Cajero utiliza el Sistema para registrar cada artículo
comprado. El Sistema presenta la suma parcial y detalles de
cada línea de venta. El Cajero introduce los datos de pago. El
Sistema válida y registra el pago. El Sistema actualiza el
12
inventario. El Cajero recibe un recibo del Sistema. El Cajero
entrega el recibo al Cliente, quien luego se va con los
productos.

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

• Ejemplo de caso de uso en formato Informal:

Caso de Uso: Administrar devoluciones


Caso de Uso: Administrar devoluciones
(Formato Informal)

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

• Si el identificador del artículo no se encuentra en el


Sistema, notificar al Cajero y sugerir la entrada manual
del código de identificación

• Si el sistema detecta fallos en la comunicación con el


sistema de contabilidad externo…
Tipos de Casos de Uso según
su visibilidad
• Según su visibilidad pueden ser:
20
• De Caja negra (esencial)
• De Caja blanca (real)

• Casos de Uso de Caja negra describen el sistema en


base a responsabilidades, no describen el
funcionamiento interno del sistema
• Describen… ¿Qué debe hacer el sistema? Y no ¿Cómo lo
va ha hacer?
• Ejemplos:
• (Caja negra) El Sistema registra la venta
• (Caja blanca) El Sistema escribe la venta en una base de datos…
• (Caja blanca) El Sistema genera una instrucción SQL INSERT para
la venta…

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

Nota: Sólo se estudiarán las partes resaltadas


23
Ejemplo en formato completo
Caso de Uso: Procesar venta (1)
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.

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).

Cómo Identificar los Casos de Uso?

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

Casos de uso -> Casos de Uso


a nivel EBP a nivel de objetivo de
28
usuario

• Un Caso de Uso a nivel EBP sirve para satisfacer


un objetivo de un usuario del sistema o actor
principal
Objetivos y Casos de Uso de Subfunción
(subobjetivos)
• “Iniciar sesión”, no es un objetivo de usuario, es un
subobjetivo u objetivo de subfunción, que es parte
de un objetivo de usuario.

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)

• A: ¿Cuáles son sus objetivos en el contexto del


sistema de la Caja de Ventas?

• C: Uno, iniciar la sesión rápidamente. También


Capturar ventas

• A: ¿Cuál cree que es el objetivo de más alto nivel


que motiva el inicio de la sesión?
33
Ejemplo de Aplicación de Guía EBP
• C: ¿Intento identificarme en el sistema, de este
modo puede validar que estoy autorizado para
utilizar el sistema que captura ventas y otras
tareas?

• A: ¿Más alto que ese?

• C: Evitar robos, alteración de datos, y mostrar


información privada de la compañía.

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, …

Administrador del Agregar usuarios


Sistema Modificar usuarios
Eliminar usuarios
Gestionar seguridad
Gestionar las tablas del sistema, …
Sistema de Actividad de Analizar los datos de ventas y rendimiento,
Ventas (Sistema de Inf.) …

… …
36

Actor principal y objetivos de usuario


dependen del límite del sistema
• En el ejemplo de la Caja de Ventas, el límite del sistema determina si el actor
principal es el cliente o el cajero.
• Por ejemplo, la Caja de Ventas con diferentes límites del sistema...

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

Diagrama de Casos de Uso


• Son parte del UML
• Ilustran los nombres de los casos de uso y los actores; así como,
la relación entre ellos

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

Metodología para resolver


problemas aplicando la
POO

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

Muestra eventos de E/S


relacionados con el sistema
objeto de estudio 5
Sistema (DSS)

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

Metodología para resolver


problemas aplicando la POO

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)

Se puede comparar con la descomposición de


un sistema en subsistemas (o procesos,
funciones, procedimientos, etc.) del análisis
estructurado
Ejemplo: Jugar Dados
Análisis Estructurado
Seleccionar jugador
Iniciar juego
Lanzar los dados
Calcular el resultado
4
Evaluar el resultado (¿ganó o no?)
Análisis Orientado a Objetos
Jugador
Dados
JuegoDeDados

Modelo del Dominio (Concepto)


Es una representación visual de las clases
conceptuales u objetos del mundo real en un
dominio de interés (Fowler, 1996)

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

Clases Conceptuales del


Dominio de Ventas

11
Dominio: Una tienda del mundo real

Ejemplos de clases conceptuales: Tienda, Venta y


Registro

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

Guía: “Identificar en exceso”

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)

1. Lista de Categorías de Clases


14
Conceptuales Contenedores de otras
cosas
Categoría de Clase
Conceptual
Cosas en un contenedor
Ejemplos del dominio de
Objetos tangibles o físicos
ventas y reserva de vuelos
Especificaciones, diseños o
Registro, Avion
descripciones de las cosas
EspecificaciónDelProducto
Lugares
, DescripciónDelVuelo
Transacciones
Tienda, Aeropuerto
Líneas de transacción
Venta, Pago,Reserva
Roles de la gente
LineaDeVenta
Cajero, Piloto
15
Tienda, Avión Articulo, Pasajero

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

Precaución: Ambigüedad entre palabras del


lenguaje natural, por lo que no es posible una
correspondencia mecánica de nombres a clases

Fuente de las frases nominales: Casos de Uso en


formato completo

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).

Clases Conceptuales Candidatas


para el dominio de las ventas
Aplicando 2 técnicas:
• Lista de Categorías de Clases Conceptuales
• Identificación de frases nominales
Lista de Clases Conceptuales para el caso de
uso
“Procesar venta”

23
Registro EspecificacionDelProducto
Articulo LineaDeVenta
Tienda Cajero
Venta Cliente
Pago Encargado
CatalogoDeProductos

Lista de Clases conceptuales


candidatas
No existe una lista correcta

Es una lista arbitraria de abstracciones y


vocabulario del dominio
24
Diferentes modeladores siguiendo la técnica de
identificación de frases nominales podrían generar
listas de clases conceptuales candidatas similares

25
Objetos de Informes: Recibo
¿Incluir recibo en el modelo del dominio?

Recibo: es un informe de venta y pago (una clase


conceptual relativamente destacable)

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

Modelo del dominio es un mapa de conceptos y


cosas de un dominio

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”

Tienda es una entidad legal, organización o algo


que ocupa espacio; por lo tanto, debe
considerarse como un concepto separado
33
Error típico al identificar clases
conceptuales candidatas
En el dominio de Reserva de vuelos...
Destino (aeropuerto), ¿es un atributo de Vuelo o
una clase conceptual candidata separada?

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)

Ejemplo de asociación útil y no útil


56
2. Asociaciones derivadas de la lista de asociaciones
comunes

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

3. A está contenido 3. Registro-Tienda, Articulo-


físicamente en B Estantería, Pasajero-Avion
4. A está contenido
lógicamente en B

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

Tipos de Atributos Válidos


Atributos válidos son atributos simples
Tipos de Dato primitivos
• Numero
• String, Texto
• Boolean
• Fecha, Hora
Tipos de Dato definidos por el usuario (clases)
• Direccion
• NumeroDeTelefono
• Color
• NumeroDeSeguridadSocial
74
• CodigoDelProducto

Tipos de Datos No Primitivos (clases)


Registro es un tipo de dato complejo, ya que tiene
sus propios atributos. No debería ser un atributo.

75
1..*

Tipos de Datos No Primitivos (clases)


El Destino de un vuelo es un Aeropuerto
Aeropuerto es una clase conceptual independiente

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”

En caso de duda, definir una clase conceptual


Clases de Tipos de Dato No
Primitivos
81
Un tipo de atributo puede representarse como una
clase no
primitiva por
derecho
propio en el
Modelo
del
Domini
o

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?

Código del Producto (Fabricante, producto, país, etc.)

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

Es una cantidad con unidad de medida

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

Dominio: Caja de Venta


Caso de Uso: “Procesar venta”

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.

• Descripción del Caso de uso: Jugar Dados


1. El jugador inicia el juego de dados

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ó

Identificar operaciones del sistema


(DSS: Diagramas de Secuencia del Sistema)

Invocaciones del usuario sobre el sistema

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

2. Representar clases conceptuales


en un modelo del dominio
Clases conceptuales identificadas
Juego de Dados
Jugador
Dado

105
3. Agregar asociaciones
Asociaciones “necesito-conocer”
Jugador lanza Dados

De la lista de categorías comunes de asociación


Jugador es una parte lógica del Juego de Dados
Dado es una parte lógica del Juego de Dados
Dado esta contenido lógicamente en Juego de Dados
Jugador utiliza Dado

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

Ventajas de cada diagrama


Diagrama de Secuencia
Más claridad en la secuencia, ordenado en el tiempo
Notación simple

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

Se puede excluir la información de los tipos:

espec = getEspecProducto(id) espec =


getEspecProducto(id:ArticuloID)
espec =
getEspecProducto(id:ArticuloID):EspecificacionDelProducto

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

Notación básica de los diagramas


de secuencia
Enlaces

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

Mensajes a “self” o “this”


Un objeto se
puede enviar
mensajes a él
mismo,
opcionalmente
puede utilizar
una caja de
activación
anidada

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

Observar el Modelo del Dominio o el Modelo de


Diseño
Si hay clases relevantes en el Modelo de Diseño,
observar primero ahí

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”

Clases de diseño y responsabilidades asignadas al


elaborar el diagrama de interacción
Venta: conocer el total de la venta
LineaDeVenta: conocer el subtotal de la línea de
venta
EspecificacionDelProducto: conocer el precio del
artículo

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?

Solución: asignar a la clase B la responsabilidad


de crear instancias de la clase A si se cumple uno
o más de los casos siguientes:
B agrega objetos de A
B contiene objetos de A
B registra objetos de A
B utiliza más estrechamente objetos de A

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

Ejemplo: ¿Quién debería crear una “LineaDeVenta”?

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?

Solución: Asignar una responsabilidad de manera


que el acoplamiento permanezca bajo
Acoplamiento
Concepto

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

2ª. Opción: Registro no acopla Pago


29
Patrón: Alta Cohesión
Problema: ¿Cómo mantener la complejidad
manejable?

Solución: Asignar una responsabilidad de manera


que la cohesión permanezca alta

Cohesión funcional: es una medida de la fuerza


con la que se relacionan y del grado de

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

Clase con Alta Cohesión: tiene responsabilidades


altamente relacionadas, y no hace gran cantidad
de trabajo.

31
Alta Cohesión.
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.

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

Si el sistema posee 50 operaciones, todas recibidas


por Registro,y hace todo el trabajo relacionada con
cada una, se convertirá en un objeto saturado y sin
cohesión.

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?

Nota: Los elementos de la interfaz de usuario,


como por ej. “Ventana”, “Applet”, “Vista”,

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.

¿Quién debería ser el responsable de los eventos


de este 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

2. Diseñar un controlador que delegue la responsabilidad


de cumplir las tareas a otros objetos

50
Controlador.

51
Ejemplo de Aplicación

52

Potrebbero piacerti anche