Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1'
A
UE\AS
Este libro es el resultado de varios años de experiencias donde se
DÁCTICAS
[
retroalimentan carencias y éxitos en busca de buenas prácticas
de la programación orientada a objetos (P00); para tal efecto se
utiliza Java como lenguaje de programación de alto nivel. Está
DE PROGRAMACIÓN
diseñado para cualquier estudiante que desea hacer inmersión
[ en la programación de computadores, independientemente del
área o disciplina del conocimiento, pero eso sí, cambiando el pa-
ORIENTADA A OBJETOS EN
radigma de la programación estructurada al de los objetos como
E en la vida real.
r
ISa 7 9 4- 6 -5
LUIS EDUARDO BAQUERO REY
E
Sl. ¿
MIGUEL ARMANDO HERNÁNDEZ BEJARANO
LOS LIBERTADORES 789589 6682
005.117
FUNDACIÓN UNIVEDSIt&RIA
B222b
E 2017
Ej.3
E LOS LIBERTADORES
FUNDACIÓN UNIVERSITARIA
e:
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
L3222L
201;?
jJ
Prólogo 10
Luis Eduardo Baquero Rey, Miguel Armando Hernández Bejarano.
Buenas prácticas de programación orientada a objetos en Java /
Bogotá: Fundación Universitaria Los Libertadores. Facultad de Ingeniería y Ciencias
Básicas, 2017. Fundamentos de la Programación Orientada a Objetos 15
350 págInas. ISBN: 978-958-9145-68-2
1 .1 Temática a desarrollar 17
1. Programación orientada a objetos (Computadores). 1 .2 Introducción 17
2. Java (Lenguaje de programación de computadores). 1. Título. II. Autores. 1 .3 Programación Orientada a Objetos 18
005.117 B222b 1 .4 Principios de la Programación Orientada a Objetos 18
1 .5 Ventajas del uso de la programación orientada a objetos 19
Fundación Universitaria Los Libertadores. CRAI-Biblioteca "Hernando Santos Castillo"
1 .6 Desventajas del uso de la programación orientada a objetos 20
1 .7 Lenguajes de programación orientada a objetos 20
1 .8 Clases y objetos 20
1 .9 Visibilidad en atributos y métodos 28
1.10 Paquetes 28
COLECCIÓN Ingeniería 1.11 Lecturas recomendadas 29
uHAHUN UND/ERSiTI,' .05 LIBEITADOBES
1 .12 Preguntas revisión de conceptos 30
AUTORES .ANOO SANTC' c5TL_O 1.13 Ejercicios 30
© Luis Eduardo Baquera Rey PRECIO tEGISTI1O 458 7
-0
. 1.14 Referencias bibliográficas 31
© Miguel Hernández Bejarano DONACIÓN
COMEllA CANJE
Primera edición
Bogotá D.C., junio 2016
PROVEEDOR:
FECHA
2 Componentes de un Programa 32
ISBN: 978-958-9146-68-2 (impreso)
2.1 Temática a desarrollar 35
COORDINACIÓN EDITORIAL 2.2 Introducción 35
Diego Martínez Cárdenas 2.3 Características de un programa Java 36
2.4 Estructura de un programa en Java 36
DISEÑO Y DIAGRAMACIÓN 2.5 Presentación del programa 39
Amarillo Magenta Estudio Gráfico
2.6 Construcción de un programa en Java 40
2.7 Palabras reservadas 41
IMPRESIÓN
Fundación Cultural Javeriana 2.8 Los identificadores 41
de Artes Gráficas - JAVEGRAF 2.9 Tipos de datos 42
2.10 Variables 44
2.11 Constantes 44
Esta obra cumplió con Depósito Legal de acuerdo con el Decreto 460 de 1995.
2.12 Comentarios 45
Se prohíbe cualquier tipo de reproducción parcial o completa de este contenido sin
autorización expresa de la Editorial de la Fundación Universitaria Los Libertadores.
uVA 1
Condicionales 111
Herramientas para el desarrollo de la Programación Orientada a Objetos 51
5.1 Temática a desarrollar 113
3.1 Temática a desarrollar 53 5.2 Introducción 113
3.2 Introducción 53 5.3 Estructuras de control condicionales 114
3.3 Entornas Integrados de esarrolIo (IDE) 54 5.4 Operadores relacionales 115
[
3.4 Herramientas de modelamiento 58 5.5 Operadores lógicos 116
3.5 Java como lenguaje de programación 59 5.6 Tipos de condicionales 117
3.6 Lecturas recomendadas 61 5.7 Selección múltiple 135
3.7 Preguntas de revisión de conceptos 62 5.8 Operador condicional (?) 139 E
3.8 Ejercicios 62 5.9 Preguntas de revisión de conceptos 143
3.9 Referencias bibliográficas 63 5.10 Lecturas recomendadas 143
5.11 Ejercicios 143 [
L
Fundación Universitaria Los Libertadores 1 1
E,
BIJENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN 1
r
/ i Ciclos 175 10. Herencia 231
-- a Polimorfismo 253
'a Relaciones entre Clases 201
11.1 Temática a desarrollar 255
8.1 Temática a desarrollar 203 11.2 Introducción 255
8.2 Introducción 203 11 .3 Polimorfismo 256
8.3 Elementos entre las relaciones de clases 204 11 .4 Sobrecarga de métodos 257
8.4 La relación de Especialización/Generalización 210 11.5 Sobrecarga de constructores 260
8.5 Dependencia 211 11 .6 Sobreescritura de métodos 262
8.6 Lecturas recomendadas 212 11.7 Enlace dinámico 269
r
8.7 Preguntas de evaluacón 212 11 .8 Lecturas recomendadas 272
8.8 Ejercicios 213 11 .9 Preguntas de revisión de conceptos 272
8.9 Referencias bibliográficas 217 11 .10 Ejercicios 272
11.11 Referencias bibliográficas 275
Documentación
337
Figura 9. Pantalla de carga de Eclipse LUNA
ANA
Figura 21. Concepto de relaciones en clases Tabla 1. Ejemplos de objetos asociados a su correspondiente clase
Figura 30. Generacion Javadoc en Netbeans Tabla 10. Apoyo implementación del método
Figura 31. Documentación Javadoc en Netbeans Tabla 11. Apoyo parte de análisis
IIVII
c
t
En el quehacer diario de la docencia, y más concretamente en el área de la progra-
mación, surgen muchos temas, talleres y ejercicios a trabajar con los estudiantes. En
tal sentido, este libro es el resultado de varios años de experiencias donde se retroa-
En el capitulo 5 se todo lo relacionado con los condicionales, en su orden, las es-
tructuras de control, los condicionales simple, compuesto y anidado, los operadores
lógicos, selección múltiple y el operador condicional ?.
E
limentan carencias y éxitos en busca de buenas prácticas de la Programación Orien-
tada a Objetos (P00), para tal efecto se utiliza Java como lenguaje de programación En el capítulo 6 se estudia el tema relacionado con el manejo de cadenas en Java,
£
de alto nivel. Está diseñado para cualquier estudiante que desea hacer inmersión en incluyendo los métodos asociados a la clase String.
la programación de computadores, independientemente del área o disciplina del co-
E
nocimiento, pero eso sí, cambiando el paradigma de la programación estructurada El capítulo 7 hace referencia a los ciclos o instrucciones repetitivas que se pueden
a la de los objetos como en a vida real. trabajar en un programa Java.
Se tienen en cuenta elementos de buenas prácticas de la programación con la fi- En el capítulo 8 se estudian las diferentes relaciones entre clases, como la cardinali-
nalidad de hacer fácil la lectura del código, así como su mantenimiento, facilitando
la escalabilidad del mismo, la reutilización y la integración de manera homogénea,
estandarizando el desarrollo, basado en convenios y reglas sencillas, y aportando
dad, asociación, agregación, composidón, generalización y dependencia.
Con el propósito de lograr lo anterior, esta obra se divide en catorce capítulos, cada En el capítulo 10 se estudia e! concepto de herencia y la terminología asociada a r
uno distribuido de la siguiente manera: relación general de la temática a desarro- este concepto, como lo que es una superclase, subclase, protected, extends y super.
llar, una introducción al tema central donde se complementa con un Concepto de,
el desarrollo de la temática respectiva incluyendo ejemplos, se recomiendan unas
lecturas que posibilitan ampliar e! tema, unas preguntas de revisión de conceptos,
En e! capítulo 11 el mecanismo de la programación orientada a objetos denomina-
do polimorfismo, incluyendo, polimorfismo de subtipado, sobrecarga de métodos y
1
ejercicios propuestos y finalmente se propone una bibliografía complementaria. sobreescritura de métodos.
CAPÍTULO 1
Fundamentos de Ja Programación
ORIENTADA A OBJETOS
UN/ \
BIBLIOTECA
CENTR,
HERNANDO
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJOS E FUNDAMENTOS DE PROGRAMACIÓN ORIENTADA A OBJETOS
-
1-
c
c
1.1 TEMÁTICA A DESARROLLAR
» Clase
t
» Objeto
» Atributo
Método
1.2 INTRODUCCIÓN
E
16 Fundación Universitaria Los Libertadores u CAPITULO 1 U 17
BUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
'IVA u
FUNDAMENTOS DE PROGRAMACIÓN ORIENTADA A OBJETOS
Figura 1. Concepto de Programación Orientada a Objetos. EncapSUlamiefltO: es la capacidad de agrupar en una sola unidad datos y métodos.
Por ejemplo para calcular el área de un triángulo se debe tener la base y la altura;
o cuando se ve televisión no hay preocupación del modo como este funciona, lo
enH Delos Utiliza - L-_como Proceso
Subclases 4- métodos 4-diversos metodologias unificado único que se realiza es manipular el control y disfrutar del programa, película, entre
Estado Comportamientos 4 otros ejemplos.
de los 4-el—Ocultar 4 Identifica sus como
objetos + Objetos
corresponde elementos
4-para i Herencia: proceso en el que un objeto adquiere las propiedades de otro a partir de
Encapsulamiento Polimorfimo una clase base, de la cual seheredan todas sus propiedades, métodos y eventos;
Tiene Cvi-
porque ----3 soporte estos, a su vez, pueden o no ser implementados yio modificados, por ejemplo la
Clases 4-entre — Relación
tecnológico
Java
CII
herencia de bienes que se transmite de padre a hijo, pero el padre tiene la potestad
es
coq PROGRAMACIÓN
de desheredar.
Herencia .4-- caractensticas ORIENTADA A que
como OBJETOS
crean
Reutilizar utiliza Polimorfismo: es una propiedad que permite enviar el mismo mensaje a objetos
código .4---- permite — Objetos Sistemas
Modularidad
de diferentes clases de forma que cada uno de ellos responde al mismo mensaje de
l
Crear otras /
•que para definidos basados
diferente modo; por ejemplo, el acto de comer para proveer nutrientes al organis-
ciases Propiedades
tienE en en
permite mo, es diferente en los siguiente animales el león (carnívoro), el canario (alpiste) y el
perro (todo tipo de alimento).
a partir
Dividir raplicacionesj
Construir
Aplicaciones Comportamientos Clases
De otra
en que
Modularidad: es la propiedad que permite dividir una aplicación de software en
clase
unidades o partes más pequeñas, denominados módulos, donde cada una de ellas
Módulos Brindan
soluciones puede ser independiente de la aplicación y de los restantes módulos. Por ejemplo,
el software institucional de una empresa que puede ser dividido en subprogramas
como contabilidad, presupuesto, facturación entre otras.
1.3 PROGRAMACIÓN ORIENTADA A OBJETOS
La Programación Orientada a Objetos (P00) es un paradigma o modelo de progra- 1.5 VENTAJAS DEL USO DE LA PROGRAMACIÓN ORIENTADA A OBJETOS
mación, esto indica que no es un lenguaje de programación específico, o una tec-
nología, sino una forma de programar donde lo que se intenta es levar o modelar » Simula el sistema del mundo real.
el mundo real a un conjunto de entidades u objetos que están relacionados y se
comunican entre ellos como elementos constitutivos del software, dando solución a » Facilita el mantenimiento del software.
un problema en términos de programación.
Facilita el trabajo en equipo.
En síntesis, el elemento básico de este paradigma es el objeto, el cual contiene toda
la información necesaria que se abstrae del mundo del problema, los datos que Modela proceso de la realidad.
describen su estado y las operaciones que pueden modificar dicho estado, determi-
nando las capacidades del objeto. Genera independencia e interoperabilidad de la tecnología.
E
Ejemplos
1.6 DESVENTAJAS DEL USO DE LA PROGRAMACIÓN ORIENTADA A
OBJETOS Tabla 1. Ejemplos de objetos asociados a su correspondiente clase E
» Complejidad para adaptarse.
» Mayor cantidad de código (aunque se tiene la posibilidad de volver de ser reutilizable). Mazdá -626 sdk23, rojo
Ford; capacidad 32 persona
OBJETOS
Auto
CLASE
E
1.7 LENGUAJES DE PROGRAMACIÓN ORIENTADA A OBJETOS
Estudiánte
E
• Garfield, (Felino)
como conjuntos de objetos que se ayudan entre ellos para realizar acciones.
• Snoopy, (Perro)
Mamifero
• Simba (Rey Leon) o
Ejemplos • Willy (Cetáceo)
• Código 1478 Estructura de Datos
» Asignatura
Código 1816 Matemáticas discretas
[
» ADA
La Figura 2, amplía el concepto de clase. -
a Java
»
C#
como
Persona
o
1.8 CLASES Y OBJETOS Criticas Abstractas
Datos
Tipo de3 abstractos
Obletos entidades
Las palabras "clase" y "objeto" son utilizadas en la programación orientada a obje-
tos, la cual planea simular u organizar datos en conjuntos modulares de elementos
de información del mundo real.
los
Definir,
Representar
/
Objetos -airtijiaea
E
1.8.1 CIases
Asumida como un molde o plantilla empleada para crear objetos, lo que permite
Asociaciones
E
considerar que las clases agrupan a un conjunto de objetos similares.
/
Jerarquización
Representan
conformada
Categoria
Mundo del-* Problemas 1 E
Diagramas
/
con
UML de--
Clases - - Atributos Acciones o
- métodos
o
Nombre
Atributos
Métodos (servicios)
1.8.2 Objeto
acelerar O
frenar O Es cualquier cosa real (tangible o intangible) del mundo que nos rodea; por ejemplo,
retroceder O un auto, una casa, un árbol, un reloj, una estrel!a, cuenta de ahorro. Uno objeto se
puede considerar como una entidad compleja provista de propiedades o caracte-
rísticas y de comportamientosoesta os. Lajigura4deta11&eLconcepto de objeto
de una manera máófffra.
fl 1-
FUNDAMENTOS DE PROGRAMACIÓN ORIENTADA A OBJETOS
Almacenan
el estado
del
La representan ono
—*[Clase 1 De un objeto está relacionado con la funcionalidad y determina las operaciones
que este puede realizar, responder o ejecutar alguna acción ante mensajes envia-
abstracción
Lal
dos por otros objetos, por ejemplo, actualizar el teléfono de un cliente, realizar la
qu\
es instancia
suma de dos números.
L Atributos Sort
confomsados
Cualquier
L. b5tracta
Identidad
Caracterizan —1 Métodos 4— OBiETOSr
/ /
que
Tangíble Corresponde a la propiedad de un objeto que le distingue de todos los demás,
se se
comportamiento sede
comunican representa
ser Mundo
como es el caso del ejemplo del cliente Luis Eduardo Baquero Rey, que tiene un
/ /
qse lo
Entre sI
Intangible del 3 del número de documento que lo identifica, una dirección y un teléfono.
Diagramas problema
tJML de
por Objetos Simple //
L medio compleja 1.8.2.1 Representación gráfica de los objetos
L njaes] Los objetos se pueden representar con diagramas UML de Objeto, que es un rec-
_J conformado1
Real
imaginario
tángulo con tres divisiones.
Objeto Parámetros]
L destino --
Método que
ol Nombre obiéto: Nombre Clase
se ejecuta -
1 ju j 3 Estado
A un objeto lo identifican las siguientes características:
Comportamientos
Estado
Conformado por el conjunto de propiedades o atributos de un objeto correspon- Se puede confundir lOS términos clase y objetos; en general, una clase es una re-
diente a los valores que pueden tomar cada uno de esos atributos. presentación abstracta de algo, mientras que un objeto es un represtación de ese
algo conformado por la clase.
Ejemplo:
Ejemplo. Se tienen cuatro objetos correspondientes a relojes (de pared, arena, di-
El objeto cliente tiene las siguientes características: documento, nombres, apellidos, gital de pulsera). La clase Reloj tiene las características que agrupa a esa colección
dirección y teléfono. de objetos.
1: ATRIBUTO ESTADO
Documento: 10.265.254
A continuación se modela a clase Reloj y un objeto reloj; mediante los diagramas. Otros ejemplos de objetos son:
correspondientes.
Objetos físicos
Relij:
» Barcos, aviones, perros, computadores.
hora
minuto miReioj : Reloj
Objetos de interfaces gráficos de usuarios:
hora = 3
reloj minuto= 49
fijarHora () » Etiquetas, cajas de texto, botones
adelantarHora ()
Objetos intangibles:
Para el ejemplo, un objeto miReloj es una entidad que tiene un conjunto de propie- » Cuenta de ahorros, cuenta corriente, CDT
dades o atributos, como el color, marca, forma, estilo, precio y dentro de los com-
portamientos están el dar la horas, minutos, adelantarse, atrasarse. Ejemplos de no objetos:
Se tiene dos ejemplos donde se modelan los objetos (computador portátil y teléfono El amor, la felicidad, la nostalgia.
celular) mediante el correspondiente diagrama de objetos.
OBJETO ESTADO
celular : TelefonoMovil edad = 20
estudiante
estatura 1:80
Público (public). Representado por el signo más (+) indica que el método o atri-
buto está visible dentro o fuera de la clase, es decir es accesible desde todos lados.
Privado (private). Representado por el signo menos (-) indica que el atributo o
método solamente será accesible dentro de la misma clase (sólo sus métodos lo
pueden acceder).
La figura 7 ilustra un diagrama de paquetes, conformado por dos clases comunes
Protegido (protected). Representado por el símbolo numeral (#) indica que el atri- al modelo de un sistema.
buto o método no es accesible desde fuera de la clase, pero se podrá acceder por
métodos de la clase, además de las subclases que se deriven como es el caso de la
herencia. Figura 7. Diagrama de paquetes con dos clases comunes.
modelo
Cliente Producto
Los tres vehículos son objetos que se pueden agrupar en la clase Auto. 1.11 LECTURAS RECOMENDADAS
» Qué es UML.
1.10 PAQUETES
a Historia de UML.
Permiten agrupar los elementos de comportamientos similares que se modelan con
UML, La figura 6 representa un diagrama de paquete, similar a una carpeta o fólder. Paradigma de Programación Orientada a Objetos.
1
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN FUNDAMENTOS DE PROGRAMACIÓN ORIENTADA A OBJETOS
• 0
1
» ¿Dónde utilizar UML?
Mamífero
1.13 EJERCICiOS
1. Construir la clase llamada Proveedor, que está conformada por siguientes atributos:
» NIT.
4. Completar la información de la siguiente tabla:
» Nombre de la empresa o razón social.
» Teléfono.
1.14 REFERENCIAS BIBLIOGRÁFICAS
» E-mail.
Aguilar, L. i. (2004). Fundamentos de programación algoritmos y estructura de da-
tos. Tercera Edición. Ciudad: México: McGraw Hill.
2. Crear una clase denominada Cubo, conformada por los siguientes atributos: Booch, G. (1996). Análisis y diseño orientado a objetos con aplicaciones. Ciudad:
ancho, alto y largo. México Addison Wesley.
Deitel y Deitel. (2012). Cómo programar eh Java. Ciudad: México Editorial Pearson
(Prentice Hall).
Fowler, M., y Scott, K. UML. (1999). Gota a gota. Ciudad: México Editorial Pearson.
u
E
E
__ CAPÍTULO 2 E
E
- Componentes de un'
PROGRAMA E
E
E
E
£
BIJEN/\5 PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN COMPONENTES DE UN PROGRAMA
u.
» Identificadores.
» Tipos de datos.
» palabras reservadas.
» Comentarios.
» Variables.
» Constantes.
» Expresiones.
» Operadores aritméticos.
2.2 INTRODUCCIÓN
BIBLIOTECA
CENTR 1 1
1 HERfII4J0 )
\\\ SANrOyY
E
2.3 CARACTERST!CA5 DE UN PROGRAMA JAVA EjemP(05:
£
» El nombre de la clase debe ser igual al nombre del archivo. » import nombrePaquet e. *;
Se usa la indentacián, sangrado o tabulación para obtener un código más legi- public class <NombreClase> {
ble empleando cuatro espacios como unidad de tabulación. II Declaración de atributos
<tipo> <variable>
Se debe evitar las líneas de más de 80 caracteres. II Declaración de métodos
>)
[
Java e-s un lenguaje orientado, a .objetos Así que un programa en este lenguaje es Ejempio
una colección de clases, donde cada clase es en un archivo diferente y el nombre
del archivo debe ser el mismo que. el de la clase. public class ClaseUno {
II atributos y declaraciones de métodos
El programa más sencillo utiliza una clase e incluye, el método mamo (es el método }
Un programa Java consta de una colección de archivos o unidades de compilación, public class Fecha { E
que se describen en los apartados siguientes. fi Atributos
mt dia ;
2.4.1 Declaración de importaciones (import) mt mes ;
mt año ; E
Nombra un elemento de otro paquete que se utilizará en las declaraciones pos- fi Métodos
teriores de interfaces o clases. Se puede utilizar un asterisco para incluir todos los void asignarDia ( mt d ) {...}
elementos de un paquete. String darFormato {. .
}
Programa que imprime un mensaje Hola Mundo, como estas, en pantalla. static: el método pertenece a la clase (no a los objetos de la clase).
Un diagrama de clases en UML permite especificar a estructura de un sistema en out: es un objeto de la clase System, definida que representa la pantalla.
función de las clases que lo componen.
println: método para poner un texto en la pantalla.
public class HolaMundo {
/'' este es el método principal *7 Los métodos de salida print( ) y println. Son utilizados en los programas cuya salida
public static void main(String[ ] args) { está basada en texto y la impresión se realiza desde la consola.
System.out.println("Hola Mundo, como estas?");
}
} 1 2.5 PRESENTACION DEL PROGRAMA
public Es una palabra rcservada que indica que la clase o el método pueden ser Tabulación o sangrado: margen del texto, que se usa para-remarcar la estructura -
usados por cualquier otra clase. del programa.
class Es la palabra que indica que a continuación de ellas se va a declarar una » comentarios:
clase.
• de documentación (/**
Toda clase en Java -que sea una aplicación debe tener un método mainQ, ya que es
la entrada para la ejecución del programa. • normales, hasta fin de línea (II).
{ } Permiten delimitar el alcance de la clase, determinando donde inicia y donde » Uso del punto y coma(; ) para finalizar declaraciones e instrucciones.
fina liza.
Se utilizan {} para definir los contenidos de clases y métodos.
public class HolaMundo se define la clase HolaMundo, que corresponde al
nombre del programa, los bloques del programa van entre llaves { } que abren y
cierran el bloque del programa ya sea el de la clase o el del método.
u
La construcción de un programa en Java se realiza en varias etapas: Como cualquier lenguaje de programación, Java tiene un conjunto de palabras re-
servadas incorporada, para identificar definiciones, condiciones, ciclos entre otros,
Primera etapa términos que no se pueden utilizar como nombres de los identificadores.
r
Creación del proyecto en cualquier entorno de desarrollo. La tabla 4 se relacionan las palabras reservadas:
Byvalue '.
doubis
elsa
implements
import
private
protected
threadsafe
throw
E
» Se generan el código intermedio bytcode, al compilar el programa creando los
case extends instanceof public transient
archivos punto class por ejemplo HolaMundo.class, Calculadora.class, Cuadra-
do. class Catch false nt return true
cist
finally
float
Long.
native
static
supes
. void
whiie
E
terpreta las instrucciones bytecode, presentado el resultado del programa en
pantalla o realiza alguna tarea, calculo o proceso.
2.8 LOS IDENTIFICADORES
E
Un identificador corresponde a un nombre de variables, constantes, clases, objetos,
métodos los cuales están conformados por una secuencia letras y dígitos de longi-
class
-
Compilador
java
001 0
11 01 - JVM tud limitada, que permite identificar los elementos de un programa en java. E
Los nombres de los identificadores en java cumplen algunas reglas como el de co-
HoiaMundo.java HolaMundo.class Programa en menzar con una letra, un signo pesos ($), o el guión bajo O; no pueden iniciar con
(bytecode) ejecución un número. Después del primer carácter, los identificadores pueden ir seguidos de
cualquier combinación de letras, signo de moneda, números, guion al piso.
E
40 Fundación Universitaria Los Libertadores -I CAPlTULO 2 41
BUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN COMPONENTES DE UN PROGRAMA
a---------
2.9 TIPOS DE DATOS En la tabla 5 se presentan los tipos de datos de java, que se utilizan en los programas
de este lenguaje de programación.
En el lenguaje de programación Java, tiene dos tipos de categorías de datos, tipos
primitivos, que se caracterizan por tener un único valor, y los de tipo referencia se
utilizan para referirse o acceso a un objeto. La figura 8 muestra el concepto de tipo Tabla 5. Tipos de datos de Java.
de datos.
bjetos Double
ue
con Enteros.. Tamaño 64-bits. Entre
Es valor Puede ser /\
lógico true/false
long .8 -9223372OB68547738O8y .: .• OL
Valores Valores
positivos ,92233720368547758O7. (-263 ;.263-1)
decimales
negativos
E
2.10 VARIABLES 2.12 COMENTARIOS
Son los valores que se pueden cambiar durante la ejecución de un programa corres- Se utilizan para hacer descripciones de código y facilitar información adicional que
E
ponde a nombres que representan un valor de cierto tipo mt, char, float, double. no es legible en el programa. Los comentarios deben contener sólo información que
es relevante para la lectura y entendimiento de la aplicación.
Características de las variables E
En Java hay tres tipos de comentarios, empleados para documentar un programa
» Es una unidad básica de almacenamiento de valores o datos. o para cancelar líneas que no sean tenidas en cuenta al momento de compilar el
La forma para declarar las variables es: tipo de dato y nombre de a variable. // Programa que suma dos números
E
/7 x variable que almacena un dato de tipo entero
Los nombre de las variables
Comentarios de bloque E
Deben iniciar con una letra del alfabeto, guion de subrayado.
Un comentario de bloque debe ir precedido por una línea en blanco que lo separe
» Los siguientes caracteres pueden ser dígitos. del resto del código; estos se usan para dar descripciones del programa utilizados
r
o antes de cada clase, métodos, atributos. También .se pueden utilizar al interior de
» No se puede usar palabras reservadas como nombres de las variable los métodos y deben estar al mismo nivel que el código del método que describen.
El estándar para nombrar variables es iniciar con minúscula, para el caso cuando
el nombre está compuesto por dos o más la letra inicial a partir de la segunda
Ejemplo:
E
palabra va en mayúscula. 1*
* Aquí hay un comentario de bloque.
Ejemplos: * comentarios para varias líneas £
*1
costo, iva, x, xl, x2, costoltemFacturado, nombreEmpleado.
E
2.11 CONSTANTES UN /
E
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN COMPONENTES DE UN PROGRAMA
a
Describen clases Java, interfaces, constructores, métodos y atributos. Cada comen- TIPO DE DATO NOMBRE
tario de documentación se encierra con los delimitadores de comentarios /**,• *1
#nal double PI = 3.1416;
Ejempfos: Final mt IVA = 16;
Final mt VALOR MÁXIMO = lee;
/**
Final char LETRA ='S';
* La clase que modela la información de un cliente
*1
/**
2.15 OPERADORES ARITMÉTICOS
* La clase que modela las transacciones de una cuenta corriente.
*1 Permiten la realización de las operaciones aritméticas básicas, que trabajan sobre
variables numéricas, en la tabla 6 se presentan estos operadores.
Se puede observar que al final de cada sentencia se coloca un punto y coma, que
forma parte de la sintaxis de java y el doble slash /1 corresponde a comentarios que división / z='y; a=b/4;
ayudan a documentar el programa en cuanto a su contenido y funcionalidad.
Ser realiza anteponiéndole la palabra final al tipo de dato y una vez inicializadas no Incremento ++ x++;
se puede cambiar su valor, Las constantes se escriben en mayúscula sostenida todo
el nombre:
Decremento . y--;
E
Ejemplos Coma (,) permite separar dentificadores consecutivos en una declaración de varia-
bles, también es utilizada para encadenar sentencias dentro de una sentencia de un c
mt a; ciclo for.
mt b;
111tc; punto (.) permite separar nombres de paquete de subpaquetes; clases de atributo,
mt d; objetos de nombre del método. E
a = 2 + 2; // adición
b = a * 3; 1/ multiplicación
c = b - 2; // substracción 2.17 LECTURAS RECOMENDADAS
d = b / 2; // división
e = b % 2; 1/ resto de la división (módulo) Precedencia de los operadores aritméticos.
Llaves {}, son utilizadas para definir un bloque de código, para clases, métodos » Definir los tipos de datos para el radio, área y longitud de una circuferencia. E
ámbitos locales y para inicializar arreglos en forma automática.
» Definir cinco tipos de constantes distintas.
Corchetes [], Utilizados para declarar tipos de los arreglos o cuando se referencian
valores de los arreglos.
1 E
Punto y coma (;) usados para separar sentencias.
E
48 Fundación Universitaria Los Libertadores a CAPITULO 2 n 49
E
BUENAS PBACflCAs DE PROGRAMACÓN
Deitel y Deitel. (2012). Cómo programaren Java. Ciudad: México Editorial Pearson
(Prentice Hall).
Fowler M., y Scott, K. UML. (1999). Gota a gota. Ciudad: México Editorial Pear-
son. Rumbaugh, J., Jacobson, 1., y; Booch, G.: (2005). The Unified Modeling Lan-
guaye User Guido, San Francisco: Addison-Wesley, Reading, Mass. lSBN-13: 078-
5342267976 ISBN-lO: 0321267974
__ CAPÍTULO 3
E
3.1 TEMÁTICA A DESARROLLAR
Herramientas de modelamiento.
3.2 INTRODUCCIÓN
[
Las herramientas de modelado UML se convierten en partes fundamentales en
el desarrollo de todo sistema de información orientado a objetos, permitiendo
representar los requerimientos del sistema, la funcionalidad y la interacción con
otros módulos o sistemas.
E
Java como herramienta de Programación Orientada a Objetos, es utilizado para
la construcción de las aplicaciones de software, donde los programas se ela-
boran a partir de módulos independientes, los cuales se pueden modificar o [
complementar.
3.3 ENTORNOS INTEGRADOS DE DESARROLLO (!DE) Se descarga del sitio http://www.eclipse.org/, seleccione la opción downloads, o
digite directamente http://www.eclipse.org/downloads/ y elegir Eclipse Classic,
Son aplicaciones de software que integran herramientas, componen un entorno de para 32 o 64 bits, según arquitectura del computador a trabajar.
desarrollo integrado por: un editor de texto, un compilador, un intérprete, elemen-
tos para la documentación, un depurador, un sistema de ayuda para la construcción Figura 9. Pantalla de carga de Eclipse LUNA.
de interfaces gráficas de usuario y un generador de control de versiones.
Los IDE pueden ser utilizados para un único lenguaje de programación, pero algu-
nas de estas herramientas como Eclipse o NetBeans. Soportan más de un lenguaje
de programación dentro de los que estan java, c++, ruby, php entre otros, ya que
incluyen plugins (programa que incrementa las funcionalidades del IDE).
» BiueJ: desarrollado como un proyecto de investigación universitaria, es libre. La figura 9 corresponde a la versión LUNA de eclipse, versión 4.4 cuyo lanzamiento
oficial fue el mes de junio del 2014.
» Eclipse: desarrollado por la Fundación Eclipse, es libre y de código abierto.
3.3.2 NetBeans
lntellii IDEA: desarrollado por JetBrains, es comercial.
Es otro entorno integrado de desarrollo para los programadores que les permiten digi-
» Jbuilder: desarrollado por Borland, es comercial pero también existe la versión tar, compilar, depurar y ejecutar programas. Está construido en Java, pero puede ser-
gratuita. -. vir para cualquier otro lenguaje de programación. Netbeans facilita la construcción de
aplicaciones a partir de un conjunto de componentes de software llamados módulos.
» JCreator: desarrollado por Xinox, es comercial pero también existe la versión
gratuita. La figura 10 corresponde a la pantalla de inicio de la versión 8.0.2 lanzada al mer-
cado en noviembre del 2014.
» iDeveloper: desarrollado por Oracle Corporation, es gratuito.
Figura 10. Pantalla inicio en Netbeans.
» NetBeans: es gratuito y de código abierto.
3.11 Eclipse
UNí.
Entorno de desarrollo integrado de código abierto y multiplataforma (Windows, NeI8eausffl 8.0.2
Linux), es una herramienta para la programación, desarrollo y compilación de apli- II BIBLIOTECA
1 CENTRAL
caciones en C++, Java, php, entre otros. :
HERNANDO
SANTOS
AT
Se descarga del sitio http:/fnetbeans.org/ o http://netbeans.org/downloads/ Figura 12. Pantalla inicio de GreeFoot.
y puede seleccionar entre las Tecnologías: Java SE, JavaFX, Java, Ruby, C/C++, PH
Ah (todo el paquete completo).
3.3.3 BIueJ
Es uno de los mejores IDE utilizado para Java, de la mano de JetBrains que siempre
tubo características que no se encuentran en otros (Eclipse, NetBeans, etc) como el
guardado y compilado automático, control de sugerencias y resaltado de código
dentro incluso de cadenas, el mas inteligente auto-completado de código y mucho
mas. La versión 1 5 salió eL m,es de noviembre de 2015 y traen varias novedades y
características especiales para los desarrolladores Android. En esta publicación se
citan las nuevas características y lenguajes, tecnologías frameworks soportados.
Caracteristicas:
3.3.4 GreenFoot » Existen dos ediciones Comunity Edition que es de código abierto y Ultimate
de pago, que se puede descargarla gratis para probarla libremente 30 días esta
Es un entorno integrado desarrollado especialmente para programadores novatos. edición tiene más características que la Comunity Edition.
Si bien soporta el lenguaje Java en su totalidad, es especialmente útil para progra-
mar ejercicios que tengan contenido visual. En GreenFoot la interacción y visualiza- » Mejor compilación, rendimiento mejorado que redujo requisitos de la memoria.
ción de objetos son los elementos fundamentales. El sitio web oficial del proyecto
es http://www.greenfoot.org/door » Soporte para Java 8, la nueva generación de la plataforma Java y con su nueva
sintaxis de las expresiones lambda.
La figura 12 corresponde a la pantalla de inicio de la GreeFoot.
» Actualización de las herramientas del framework Spring, con mejoras en rendi-
miento y asistencia.
» Entre los lenguajes soportados están: Java, Groovy, XML, Regexp, Scala, Clojure, Soporte para el diseño de diagramas UML.
Ruby/JRuby, Python, PHP, entre otros
Construir los planos para una aplicación de software.
» Sitio oficial de descarga https://www.jetbrains.com/idea/
Generar código a partir de los diagramas y viceversa, actualmente funcionando
,) La siguiente imagen visualiza el entorno de jetbrains, con una aplicación en Java. para los lenguajes c++, c# y java.
programa que está desarrollado para la construcción de diagramas UML, como todo
producto de software libre es gratuito y de código abierto.
e
Día para Linux, presenta una interfaz amigable de fácil manejo, para elaborar diferentes
tipos de diagramas como, los diagramas de UML, diagramas de flujo, diagramas de red.
3.4.3 ArgoUML
UML es un lenguaje visual para modelar las partes esenciales de un sistema de sof- 3.5 JAVA COMO LENGUAJE DE PROGRAMACIÓN
tware. Es una herramienta útil para las etapas de diseño e implementación de apli-
caciones de software y también para la documentación de un proyecto de software. Un lenguaje de programación está construido a partir de un conjunto de expresio-
nes, símbolos y reglas sintácticas y gramaticales que permiten escribir instrucciones
El desarrollo de aplicaciones de Software puede llegar a ser un proceso complejo y o sentencias válidas, para ser ejecutadas en un computador.
a menudo difícil que en algunos casos requiere la integración de muchos sistemas.
Desde el modelado y diseño hasta el código, administración del proyecto, pruebas, Dentro de algunos lenguajes de programación orientada a objetos están C++, java,
despliegue, administración de cambios y más, el modelado basado en UML se ha C#, php a partir versión 5.0, entre otros. Para efectos del desarrollo de proyectos y
convertido en una parte esencial para administrar esa complejidad. la codificación de los programas de este documento se utilizará Java como lenguaje
de programación.
3.4.1 StarUML
Figura 14. Concepto de Java. Java permite desarrollo de aplicaciones o soluciones para:
Netbeans
» Desarrollo empresarial.
Compilar y
ejecutar
/I permite
Programas 4—los
-7
Dispositivos móviles
Generar
pruebas.
\7°
Entorno
JCreator
Objetos y sus Figura 15. Concepto de plataformas de Java.
Documentar Desarrollo instrucciones
Integrado
Lenguaje ¡
Programación por que
Herramientas de
/ Orientado a Objetos incluye
Aplicaciones de
Standard Edition L oara
Palabras modelamiento '4— utit'za (JSE) deairllar propósito general
Reservadas
Abastracción
/ Encapsulamiento
Aplicaciones
tipos de
dato 4-.- por
JI
Modularidad
Herencia __________ integra -* Plataformas de —+
EnterPrise Edition
(JEE)
L desarrollar
para orientadas
Servidores
tiene Polimorfismo 1
Conformada Empresariales
4-- sintaxis
La figura 13 detalla, mediante un Concepto de, los fundamentos del lenguaje de e ¿Qué son Eclipse, NetBeans y BlueJ? Mencionar sus principales características
programación Java y la figura 14, describe las plataformas.
» Importancia del modelamiento
E
3.7 PREGUNTAS DE REVISiÓN DE CONCEPTOS
E » ¿Importancia de os IDE?
3.9 REFERENCIAS BIBLIOGRÁFICAS
Las siguientes referencias corresponden a los sitios web donde se puede obtener
información complementaria de los temas tratados en este capítulo, así como la
»
E Diferencias entre IDE
» http://docs.oracle.com/javase/7/docs/api/
E 3.8 EJERCICIOS
a https://docs. oracle.com/javase/8/docs/api/
» https://netbeans.org/
» Descargar Java del sitio web oficial e instalarlo
» http://www.bluej.org/
• Eclipse,
c » https://www.jetbrains.com/idea/
• NetBeans,
E •
•
JBlue, y
lntelliJ IDEA.
E StarUML.
• ArgoUML.
r • Dia.
E u
E
62 Fundación Universitaria Los Libertadores . CAPÍTULO 3 i 63
UENA5 PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
"vn
E
E
E
E
CAPÍTULO 4 c
E
Métodos Constructores,
SETY GET
E
E
E
E
E
MÉTODOS CONSTRUCTORES. SET Y GET
SUENAS PEACTICAS DE PROGRAMACIÓN
u
» Métodos constructores.
» Métodos set.
» Métodos get.
» Modificadores.
Requerimientos.
Stream.
4.2 INTRODUCCIÓN
El segundo tema a tratar y que se quiere resaltar, son los métodos accesores y modi-
ficadores (setiget), el método set, es utilizado para actualizar el valor de una variable
y el método get para obtener el valor de la variable, son la forma de acceder a los
atributos de la clase definidos como tipo privado, haciendo necesario implementar
los métodos setters y getters para cada atributo de la clase definida; su impiementa-
ción corresponden a una buena práctica de programación o técnicas para desarro-
llar y mantener software de calidad.
CAPITULO 4 . 67
66 Fundación Universitaria Los Libertadores
SUENAS PRACTICAS DE PROGRAMACIÓN MÉTODOS CONSTRUCTORES. SET Y GET
Corresponden a a lógica de Fa clase, son serie de instrucciones que realizan alguna Es un método más de la clase que presenta las siguientes características:
tarea en específica; en las clases, se pueden identificar diferentes tipos de métodos:
» Un constructor es un método miembro público con el mismo nombre de la
a Métodos inicializadores, inicializan los atributos de la clase. clase.
Métodos selectores, devuelven el valor de los atributos. No está Indicado ningún tipo de retorno mt, double, String, ni siquiera void.
» Métodos modificadores, permiten cambiar el valor de los atributos. » El objetivo del constructor es reservar memoria e inicializar el valor de las varia-
bles miembro de la clase.
» Métodos visualizadores, imprimen el objeto, es decir, el valor de los atributos.
r> Es un método que se llama automáticamente cada vez que se crea un objeto
Métodos operadores, realizan cálculos y generan resultados. de una clase.
Constructores, inicializan los atributos del obleto. La figura 17 detalla el concepto método constructor.
Tipo de dato
L _!rb0..F de los -* Objetos 1 i— de los de retorno
Nonilue
método
tnicializar Instancias
de 4 Con diferentes valores
en de Objetos
números de
conformada
parámetros
en las
Lista
son ) L Definidos
/
L parametros
irma Sobrecarga de
/ no tiene
LoS SereiCios /
constructores 4generando se oseden
en iss impiementar permite
Constructor
tienen Los
algoritmos
Oases
Accesores
Sin El mismo
de Método '9 4 Clases
4 paederr '. •_"determinan -3 Comportamientos parámetros tiene nombre - de la
Modificadores Constructor
Objetos
Rurtivos para conformados
solucionarLo se
se elecuta
Analizadores
1
Se debe Tipo dato 1 Nombre Cuerpo
i determinar método
retornado
1 método Invoca Al crear
automáticamente un objeto
donde
Entrada Descripción
1 Se desarrolla la Utilizando
del
Salida problema parte lógica
El operador new
La sintaxis para la definición de los constructores es como la de cualquier otro mé- Los modificadores son elementos del lenguaje que se colocan delante de la defi-
todo, conformado por el mismo nombre de la clase, una lista de parámetros sepa- nición de los atributos, métodoso clases, alteran o condicionan el significado del
rados por coma y no puede haber ningún otro método que comparta el nombre de elemento y brindan la posibilidad de poder establecer la visibilidad o manera de dar
la clase. los permisos que tendrán otros objetos para acceder a los métodos y/o atributos de
la clase.
class <NombreClase>
11 Los modificadores de acceso permiten al diseñador de una clase determinar quién
puede acceder a los datos y métodos miembros de una clase. Tiene la siguiente
public <NombreClase> ( ) { } representación sintáctica.
} Aplicado a un atributo o método, significa que estos pueden ser vistos y utilizados
Llamada a un constructor por objetos de clases siendo accesibles por cualquier referencia (objeto) que los in-
voque. Se representa con el signo más ( ~).
Al constructor de una clase se le invoca en el momento de crear el objeto utilizando Modificador private
el operador new. La forma de uso de este operador es:
Es el nivel más restrictivo de todos los modificadores, se puede utilizar en atributos
new <llamadaConstructor> como en métodos, sólo se puede acceder al elemento desde métodos de la clase,
new unaClaculadora( ); o sólo puede invocarse el método desde otro método de la clase. Se representa con
el signo menos ( -).
new es una palabra reservada, que se utiliza para construir un objeto de una clase, Palabra reservada para acceder a variables de instancia de una clase, this se utiliza
permitiendo ejecutar el constructor e inicializando los campos del objeto. siempre que se quiere hacer referencia al objeto actual de la clase o cuando hay
ambigüedad entre los nombres de los campos del objeto.
public class Punto { El signo "-" delante de las propiedades identificación, nombre y apellido y edad,
/,* indica acceso privado
* atributos
E/signo '+" delante de los métodos indica acceso público.
private double x;
private double y;
Diagrama de Clases
CJiente
it UNlv
-identificacion: String Ç>Ç
-nombre: String
-apellido: String BIBUOTECA ;;
-edad: mt CENTRAL ;
HERNANDO
+Clierite(identificacion: Strinq, nombre: String, apellido: String, edad: nt) SANTOS
EH T
2. Clase que modela os datos de la información de un auto conformada por la publlC class Cliente {
placa, la marca, el modelo, el color; siendo estos los atributos del auto. private String identificacion;
private String nombre;
Diagrama de clases private String apellido;
private mt edad;
/**
Auto
*
primer constructor de la clase los atributos se in-
-placa: String cializan con los valores
-marca: String * por defecto
-modelo: String *1
-color: String
public Cliente() {
~Auto(placa: String, marca: String, modelo: String, color: String) this. identificacion
this.nombre =
this.apellido =
Codificación de la clase Auto this.edad = 0;
}
/**
public class Auto {
* Segundó constructor de la clase, con cuatro
private String placa;
* parámetros identificacion, nombre, apellido, edad
private String marca;
private String modelo; *1
private String color; public Cliente(String identificacion, String nombre,
String apellido,
mt edad) {
* constructor con los parámetros placa, marca, modelo, this.identifjcacion = identificacion;
color this.nomhre = nombre;
*1 this.apellido = apellido;
public Auto(String placa, String marca, String modelo, this.edad = edad;
String color) { }
this.placa = placa; }
this.marca = marca; public class PruebaCliente {
this.modelo = modelo; public static void main(String[] args) {
this.color = color; Cliente unCliente = new ClienteQ;
} Cliente otroCliente = new Cliente("123456", "Alan",
} "Brito", 30);
}
Una clase puede definir varios constructores con distintos bpos de argumentos lo }
que se conoce como sobrecarga de constructores.
3. Se construye una aplicación con dos clases: La clase cliente con dos constructo-
res el primero sin parámetro y el segundo con una lista de parámetro, separados
por comas. Y la segunda clase denominada pruebaCliente, se crean dos objetos
de la clase Cliente.
/**
Cliente unCliente = new ClienteO, se crea el objeto unCliente y se nvoca la cons-
* Segundo Constructor
tructor sin parámetros.
* @param dia, el dia del mes a almacenar
"Brito", 30); se crea el obje- * @param mes, el mes del anho a almacenar
Cliente otroCliente = new Cliente("123456", 'Alan
to otroCliente y se invaca el constructor con parámetros, el cual inicializa los valores 'K @param año, el año a almacenar
*7
del objeto.
u
76 Fundación Universitaria Los Libertadores CAPITULO 4 . 77
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN MÉTODOS CONSTRUCTORES, SETY GET
1 u.
Los objetos encapsulan (estado y comportamiento), el estado definido por los datos 1. De la clase que modela el cliente, se ha definido el atributo nombre, para el cual
o atributos del objeto y el comportamiento u operación del objeto definido por los se implementan los métodos: setNombre que tiene como parámetro el nuevo
métodos. dato a cambiar en el atributo y getNombre retorna el valor actual del atributo
nombre.
Con la finalidad de crear una puerta de entrada y de salida para modificar y obtener
los atributos del objeto, se implementan los métodos set y get respectivamente para public class Cliente f
cada atributo de la clase. private String nombre;
public String getNombre() {
Los métodos set se utilizan para inicializar o cambiar el valor de los atributos, set, al return nombre;
traducirlo podría corresponder a establecer, actualizar siendo método que cambia el }
valor del atributo, ya que este método tiene parámetro. public void setNombre(String nombre) {
this.nombre = nombre;
Los métodos qet se emp1ean cuando se requiere obtener el valor de algún atributo, }
get, al traducirlo es conseguir, obtener y retorna el valor del atributo, por lo general }
no tiene ningún parámetro.
La figura 18 representa los conceptos relacionados con los métodos set y get. 2. Aplicación conformada por la clase Cliente en la que se definen los atributos
nombre, apellidos y edad, además se implementa un constructor y los métodos
set y get para cada atributo. En la segunda clase denominada Prueba Cliente,
se define el objeto, unCliente de la clase Cliente.
Figura 18. Concepto de métodos Set y Get.
Diagrama de dases
Confgura Propiedad
o modifca
una —3 especifica
1
Método
modificador
-nombre: String
que /
conocido Método -apellido: String
setter
corno -edad: mt
/
Método Propiedad «create»+Cliente(nombre: String, apellido: String, edad: mt)
set especfff ca
+getNombrei): String
/
Atributos-de Acceder 4— +setNombre(nombre: String)
4— aios - permite
de una
lo clase- -- -i-getApellido: String
/
Método +setApellido(apellido: String)
get
1- obtiene -* El vaior
~getEdad: mt
+setEdad(edad: mt)
conomdo —4 Método +toString(): String
actesOr 1
Método
getter
--'a
Para garantizar la reutilización de las clases es una buena práctica de programación public Cliente(string nombre, String apellido, mt edad)
crear las clases en archivos diferentes. {
this.nombre nombre;
public class pruebaCliente { this.apellido = apellido;
public static void main(String[] args) { this.edad = edad;
Cliente unCliente = new Cliente("Oscar","Hernández",12); }
//impresion de los datos del objeto al ser denido
System.out.println('Oatos Cliente" +unCliente.toStringO); /**
1/se cambian los datos del objeto unCliente * metodo que retorna el nombre
unCliente.setNombre("Mario"); * @return nombre
unCliente. setApellido("Cabrera"); *1
unCliente. setEdad(41); public String getNombre() {
return nombre;
/1 se imprimen los datos en forma individual del }
objeto /**
System.out.println("Nonihre: "+unCliente.getNombreO); * método que actualiza o cambia el nombre
System.out.println("Apellidos: "-i-unCliente.getApe @param nombre
*/
llidoO);
System.out.println("Edad: "+unCliente.getEdadQ); public void setNombre(String nombre) {
this.nombre = nombre;
//impresion de los datos del objeto }
System.cut.println("Datos del cliente "+unCliente.
/**
toString() );
* método que retorna el apellido
* (return nombre
}
*1
public String getApellido() {
return apellido;
}
Clase que modela los datos del cliente
/**
* metodo que actualiza el apellido
public class Cliente { * @Param apellido
private String nombre; *1
private String apellido; public void setApellido(string apellido)
{
private mt edad; this.apellido = apellido;
}
/** /**
* constructor de la clase, con cuatro parametros nom * método que retorna la edad
bre, apellido, edad * @return edad
*1 *1
public mt getEdad() { Existen diferentes tipos de métodos dentro de los que están Constructor, Accesores
return edad; y modificadores (setlget).
En Java, la manera de representar las entradas y las salidas es por medio de los
streams o flujos de datos, que corresponden a una conexión entre el programa y la
método que actualiza o cambia la edad fuente o destino de los datos, para lo cual Java tiene implementadas una serie de
k
@param edad clases dentro de las que están: Scanner, BufferedReader entre otras.
/ ,
La Declaración o firma del método está conformada por el tio de retorno; el nom-
bre, que debe ser una expresión verbal que indica una acción y una lista de paráme-
4.6 MÉTODOS DE INSTANCIAS tros o argumentos (opcional).
Un método proporciona a implementación del comportamiento dinámico de los El cuerpo del método está construido por las sentencias que van a realizar una tarea
objetos y puede cambiar el estado de los objetos que llama. También son los algorit- específica, como por ejemplo, calcular el valor del IVA de un producto, multiplicar
mos de las clases, correspondientes a las operaciones que puede realizar un objeto dos números, obtener el promedio de ventas al año, ente otros.
siendo la mejor forma de crear y mantener un programa, construido por piezas o
módulos denominados métodos. La sintaxis general de un método se puede definir así:
Los métodos se declaran en las clases y su implementación está integrada por el tipo Tipo dato devuelto nombre del método (lista argumentos o pará-
de retorno, el nombre y un listado de parámetros que puede expresar así: metros) {
Bloque o conjunto de instrucciones;
tipoRetorno nombreMetodo( [lista_de_argumentos] ) { }
cuerpoMetodo
}
E Tipo de dato devuelto, puede ser mt, long, float, double, char, String, entre
otros; dependiendo del requerimiento.
Los métodos se pueden considerar como máquinas que realizan tareas específicas, A partir de las entradas, se realizan los correspondientes procesos de forma
los cuales pueden tener una o más entradas y una salida. lógica para obtener el resultado.
1. Se requiere sumar dos números. Para realizar este proceso se deben ingresar
dos valores, por ejemplo 9 y 5; a salida generada es 14, como se puede ob- 4.8 PRUEBA DE ESCRITORIO
servar en el siguiente gráfico
Una prueba de escritorio es la comprobación lógica de un algoritmo (método), que
Entradas Salida brinda una alternativa de solución al problema.
El programa para hallar la multiplicación de dos números e imprimir el resultado, método que se ejecuta cuando se invoca a la máquina virtual de Java (JVM).
está representado en el Diagrama de clases, que modela el producto de dos valores
operados, y tiene implementados los métodos obtenerProducto() y mamO. En el método mamO se define el objeto unaMultiplicacion de la clase Producto,
objeto que invoca al método obtenerProducto, el cual retorna el resultado que es
almacenado en la variable producto para ser impreso en pantalla.
ProdUcto
Como se puede observar el nombre de la clase (Producto) la primera letra esta en
mayúscula, los métodos (obtenerProducto) y el objeto (unaMultiplicacion) inician
+obtenerProducto(x: double, y: double) : double con letras minúsculas, como tienen más de una palabra las demás inician con letra
+main(args: Strn mayúscula.
El método mamo es el punto de entrada de un programa en Java, siendo el primer Los requerimientos pueden ser:
Nc
» Depositar dinero.
E
tado de requerimientos):
,
»
Hacer retiros.
REQUERIMIENTO EJEMPLO [
Información de entradas Valores de entrada Descripción Realizar la apertura de la cuenta con. un valor de $0 es una
U
operación que se realiza una sola vez.
E
Fundación iJniver5itaria Los libertadores u CAPITULO 4 i 89
í
88
r u
BUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN MÉTODOS CONSTRUCTORES, SET Y GET
t
-
El siguiente gráfico corresponde al diagrama de clase la cual identificada y asocia-
[
R2 apertura de cuentas con una determinada cantidad de ción de las características de la clase (atributos) y las operaciones que se van realizar
Nombre
dinero. (métodos).
Descripción Se hace abre una cuenta con etvalor determinado.
Cantidad de dinero, determinada por el cliente para abrir Cuenta Nombre Clase
[
Entradas......
a cuenta.
El saldo de la cuenta se inicializa con el valor de la cuantia -saldo: double Atributos
Salidas
... . ';: que el usuario determina.
£
+Cuenta()
+Cuenta(cantidad: double):void
E Nombre R3 Consignar.
Descripcion
valor del saldo.
NOMBRE NOMBRE
R4 Retirar. DELA NOMBRE
Nombre DEL OBJETIVO:
CLASE : ATRIB1ITO. CODIFIÇACIÓN
Valor que el cliente retira del banco disminuyendo el valor:
Descrlpcion Atributo que permite conocer
del saldo.
E Entradas
-
Valor del retiro
El nuevo valor del saldo disminuido con la cuantia de
Cuenta saldo saldo
el estado actual del saldo de
la cuenta, y que se actua liza
según sea el tipo de transacción
(consignación o retiro).
Salidas
. ...............dinero retirada.
ç
r
Métodos
E: Nombre
Descripción
R5 Conocer saldo. actual.
E Entradas
Salidas
Solicitud del saldo.
O-:;.
E
90 Fundación Universitaria Los Libertadores u CAPITULO 4 u 91
,a1
.
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
fi r
E
E
cuenta(double cantidad). Constructor que permite la apertura de la cuenta con : implementación del método
un saldo o valor inicial; correspondiente a clientes del banco.
publiC void consignar(double cantidad) {
» consignar(double cantidad); método que aumenta el valor del saldo cada vez saldo = saldo + cantidad;
que se realiza una consignación o en otras palabras cuando es invocado el
método.
}
double obtenerSaldoQ; método que retorna el valor del saldo actual existente NOMBRE METODO PARAMETROS RESUlTADOS
EJ
en la cuenta.
Documentación Métodos
double cantidad
Suponga que se tiene
un saldo = $0 E
consignar Candad sdo
Análisis Entrada Salida
Cantidad .- saldo
cantidad 250 350
Proceso
c
Solucion planteada
El valor del saldo se aumenta según
cantidad consignada.
1) entrada corresponde al valor del retiro
E
Firma del Método consignar(double cantidad). no hay retorno de datos ya que el valor de la cantidad se resta al valor del saldo
E
92 Fundación Universitaria Los Libertadores u CAPíTULO 4 . 93— —
—
BUENAS PRÁCTTCAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN MÉTODOS CONSTRUCTORES, SET Y GET
u
public void retirar(double cantidad) {
saldo = saldo - cantidad;
}
E
4.13 ENTRADA Y SALIDA ESTÁNDAR
' Método que retorna el valor del saldo de la cuenta En Java, la entrada por teclado y la salida en pantalla se establece a partir de la clase
E
@return saldo System. Esta clase agrupa y define métodos y objetos que tienen relación con el
sistema local, para la lectura e impresión de datos.
public double obtenerSaldo()
{ System.in: Objeto de la clase lnrutStream definido para tomar datos desde la en-
return saldos trada estándar del sistema, que habitualmente es el teclado.
Origen de la Destino de la
a Scanner mileclado = new Scanner(System.in);
Información información
E
96 Fundación Universitaria Los Libertadores 1 CAPITULO 4 . 97
u - - 1
-
IIUENAS PRÁCTICAS DE PROGRAMACIÓN
MÉTODOS CONSTRUCTORES, SET Y GET
Creación de un objeto de la clase Scanner siguiendo el mismo modelo del programa anterior, lo que se de realizar es:
Una vez definido el objeto, se puede invocar cualquiera de los métodos de la clase Ejemplo
Scanner dentro de los que están:
El siguiente código de java corresponde a una clase que modela operaciones básicas
» nextlnt(): obtiene un número entero. de suma, resta, producto y división.
No existen métodos para obtener datos de tipo boolean, ni para datos de tipo chafl public Calculadora(double x, double y) {
para este último caso se puede utilizar nextLineQ.charAt(0). this.x = x;
this.y = y;
Ejemplo }
Programa que calcula el producto de dos números enteros o reales (números que public double getX() {
pueden o no tener fracción decimal), donde los valores son ingresados por teclado. return x;
1
}
c
E
public double getY() {
return y;
public void obtenerOperacionesO{
double a;
double b;
E
} Scanner J.2.L' = new Scanner(System.Ln);
"~resultado);
U
} resultado=cassio obtenerProductoO;
System.out.println("ResultadO Producto "+resultado);
public double obtenerDivisionO{ y resultado=cassio obtenerDivisionQ;
return x/y; System.out println("Resultado División : "~resultado);
}
}
}
public PruebaCalculadora() {
E
4:
//se instancia el objeto cassio de la clase operación
this.cassio=new CalculadoraO;
E
100 Fundación Universitaria Los Libertadores a CAPITULO 4 a 101
E
-
RUENAS PRÁCTICAS DE PROGRAMACIÓN
MÉTODOS CONSTRUCTORES, SETY GET
!!L , f
La clase BuiferedReader Cuando se requiere leer valores numericos (enteros o con fracción decimal), se debe
realizar una "conversión" de la cadena leída a número, por ejemplo si nosotros in-
Es una clase derivada que permite la lectura o introducción de datos por medio del troducimos por teclado 123, el programa lo tomará como texto y no como número,
teclado, para utilizar esta clase se debe importar los paquetes: por lo que si queremos hacer operaciones con esos números debemos convertir la
lectura a entero con el método "parse" y almacenaría en una variable del mismo
» BuiferedReader. tipo, por ejemplo:
» lnputStreamReader. mt datos
dato = Integer.parseInt(br.readLine);
» lOException.
La estructura para realizar el proceso de entrada de datos por teclado es
Definición de un objeto de la clase BuiferedReader:
•
E La clase lnputStreamReader establece el paso del flujo de bytes a flujos de
caracteres.
Programa que a partir del radio, calcula el diámetro, longitud y área de la circun-
ferencia. Con el objeto de facilitar su implementación y mantenimiento, las aplica-
ciones se dividen en módulos, para este ejercicio se diseñan cuatro métodos, tres
• El uso del BufferedReader requiere forzosamente del manejo de excepcio- para cumplir con los requerimientos; de obtener el diámetro, obtener la longitud,
nes por ello también es necesario importar la clase lOException. (el tema de obtener área y el método main de la clase.
r excepciones será abordado en un próximo curso).
Método para calcular la longitud de la circunferencia, a partir del radio.
Ejemplo
Definición de un objeto
E (Systerti. in));
Entrada (lista de Parámetros) ninguno
Lectura de datos por teclado y almacenado en una variable. Se multiplica el valor del radio por
Solución plánteada 2; por la constante PI y se retorna el
String valor = br.readLineO; resultado
E La lectura de datos por teclado corresponde a cadenas de texto, por lo tanto valor
Firma del Método obtenerLongitud( mt radio)
u
E
102 Fundación Universitaria Los Libertadores
E CAPITULO 4 i 103
a BUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJEÍOS EN MÉTODOS CONSTRUCTORES, SET Y GET
0 £
E
Entradas Salida public void setRadio(double radio) {
1
this.radio = radio; c
3.1416
Proceso
* método que calcula y devuelve el diámetro
*7
public double obtenerDiametro() {
return 2 * radio;
public double obtenerLongitud() {
return 2 * Math.PT * radio; 1
E
/*5
Math es una clase de java y * método que calcula y retorna longitud de la circunferencia
*7
» Pl, corresponde al valor de la constante de pi public double obtenerLongitud() {
return 2* Math.PI * radio;
Diagrama de clases 1 E
/**
Circunferencia * método que calcula y returna el area de la circunferencia
-radio: double *7
~Circunferencia()
~Circunferencia(radio: double) -unaCircunferencia: Circunferencia public double obtenerArea() {
return Math.PI * Math.pow(radio,2) ;
+getRadioQ: double
~setRadio(radio: double) +pruebaCircunferencia()
+procesarDatos()
1
E
~obtenerDiametro: double
+obtenerLongitud(j: double ~main(args: String)
1 UN/
~obtenerArea: double
E
SUENaS PRÁCTICaS DE PROGRAMACIÓN MÉTODOS CONSTRUCTORES. SET Y GET
/ Métodos
Metodo que realiza la lectura e isipresion de los re
sultados » Math.abS( x) para mt, long, floal y double.
@throws lOException
,/ » Math.sifl( double ) Calcula el seno de un dato tipo double.
public void procesarDatos() throws lOException { » Math.coS( double ) Calcula el coseno de un double.
double radio = 0;
String numero = Math.tan( double ) Calcula la tangente.
U Buf-FeredReader teclado = new Bu-fferedReader(new
»
"\nLongitud Circunferencia: » Math.sqrt( double) Devuelve el redonde de la raíz cuadrada del valor.
t "+unaCircunferencia obtenerLongitud)+
"\nArea Circunferencia: "+ unaCircunferencia.obte Constantes
nerAreaO);
} » Math.E para la base exponencial.
r public static void main(String[] args) throws IOFxception . » Math.Pl para Pl.
{
PruebaCircunferencia prueba new PruebaCircunfe Ejemplo
E renciaQ;
prueba. procesarDatosQ; Método que a partir de la base y el exponente, retorna el resultado de la potencia.
U
106 Fundación Universitaria Los Libertadores 1 CAPÍTULO 4 u 107
c
'5
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADAAOBJETOS EN MÉTODOS CONSTRUCTORES, SET Y GET
' ja
Método del objeto. • Modelar la información correspondiente al teléfono, conformada por la re-
[
ferencia, costo, marca, modelo.
» Sentencia return.
Construir la clase Docente, la cual estará integrada por los siguientes atributos:
» Sentencia void. c
Clase String.
NOMBRE
:»VISIBILÍDADH ATRIBUTO
» • Sobrecarga de constructores.
private nombre String
L
» Sentencias this y return.
private documento long
Encapsulamiento.
private teléfono String
¿Cuántos valores puede retornar un método? » Diseñar una clase que provee los métodos para las funciones trigonométricas de
seno, coseno y tangente; expresados en radianes.
¿Cómo realizar la lectura de un dato de tipo char?
Deitel y Deitel. (201 2). Cómo programar en Java. Ciudad: México Editorial Pearson
(Prentice Hall).
CONDICIONALES
E
51 TEMÁTICA A DESARROLLAR
» Estructuras de control.
E
Condicionales.
» Operadores relacionales.
» Operadores lógicos.
[
» if -. else.
» switch-case.
E
» Operador condicional ( ? ).
5.2 INTRODUCCIÓN
E
Las estructuras de control condicionales permiten realizar la comparación de un atri-
buto o variable con otro u otros valores, y con base en el resultado de esa evaluación E
se siguen determinadas acciones dentro del programa.
Las instrucciones que definen los condicionales en Java son, el if — else, el switch
- case y el operador condicional (7 o alternativa). -
E
a
a BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
iiiVII CONDICIONALES
Tipo
Son símbolos que se usan para establecer una relación para evaluar dos o más ex-
boolean presiones yio valores (combinación de operadores y variables) donde el resultado de
t
es de
la comparación puede ser verdadero o falso.
1
Una estructura
Resultado de
La tabla 7 presenta los operadores relacionales utilizados en Java:
de control
comparar Operadores — como
relacionales 1=
» (X >= Y) e 14 = = 14 / true /
: 1
(A 1= 0)11 (A l= 5)
Permiten construir expresiones lógicas, Java tiene los operadores lógicos definidos Y, » (true II false) && true II true
O, NO, los argumentos y resultados de estos operadores son de tipo booleano. En la
tabla 8 se detallan estos operadores y se complementa con un ejemplo. (false II false) && (ltrue) //false
r
ltrue && false //false
Tabla 8. Operadores lógicos.
» l(4 > 8) 11(9 > 0) && (4 == 2) //false
E
Los operadores relacionales y lógicos son fundamentales para implementar las con-
6RADOR. NOMBRE DESCRIpCIÓN EJEMPLO REIORNA diciones de las sentencias de control.
Retorna true si
r
&& AND (y) Conjunción c>7&&c<=1O ambos operandos
son verdaderos 5.6 TIPOS DE CONDICIONALES
(true).
08(o) Disyunción
Retorna true si
alguno de los
5.6.1 Condicionales simple E
x == 1 y == 2
operandos es Las sentencias condicionales permiten comparar el valor de una variable con otra,
verdadero (true).
con valores numéricos y con base en el resultado de esta comparación, se sigue un
NOT (no) Negación Niega el operando curso de acción dentro del programa. La sentencia que permite llevar a cabo la eje- r
que se le pasa. cución condicional es la palabra reservada if.
--tç-
Si al evaluar la expresión el resultado es verdadero entonces se ejecuta(n) las senten-
cias u operación(es) del .bloque del if.
E
Estos se conocen con el nombre de conjunción, disyunción y negación. En la tabla 9
se presentan los resultados de aplicar los operadores lógicos para los posibles valores La flotación para esta sentencia es la siguiente:
de entrada.
if ( Expresion boolean ){
E
instrucciones;
Tabla 9. Resultado operadores lógicos.
}
UI
Por ejemplo
Suponga que a vale 8, la expresión interna de comparar es verdadera ya que 8 es Si la variable numero es mayor e igual que cero, se ejecuta la sentencia, raiz = Math.
mayor que 1 y menor que 10; al negar esta expresión queda falsa. sqrt( numero); en caso contrario se imprime el mensaje raíz imaginaria.
La clase Descuento, permite modelar los cálculos del descuento y el total a pagar.
2. Otra forma de realizar el anterior proceso se da al cambiar el operador de la
condición en vez de igual, se utiliza el operador diferente ( divisor l = O ) al ser En Java, se recomienda definir constantes en vez de utilizar valores dentro de los
verdadera la condición se ejecuta la sentencia cociente = dividendo! divisor; en programas como por ejemplo.
caso contrario se imprime el mensaje error dividir por cero.
final double VALOR_COMPRA_DESCUENTO = 108000;
final double VALOR_DESCUENTO = 0.05;
E
Diagrama de clases
Descuento
De la anterior tabla se puede construir la cabecera del método:
Entradas
Compra
Salida
Descuento
La comparación compra >= VALOR_COMPRA_DESCUENTO es una expresión booleana.
Diagrama de Clases
E
Si la compra es menor que cien mil no tiene descuento, en caso contrario se calcula
el descuento, como apoyo para la impiementación del método, se utiliza la tabla 10. Compra
-valorCompra: double
'-
PruebaCompra
-unaComØra: Compra
[
+Compra() +PruebaCompra()
Tabla 10. Apoyo implementación del método.
~getValorCompraO: double
+setValorCompra(valorCompra: double): double
+obtenerDescuento: double
+imprimirResultados()
~main(args: StrinoJ E
Nombre del Método
ninguno
Codificación en Java del modelado del problema, a partir del diagrama de clases: E
public class Compra {
Resultado (tipo de dato de retorno) double valorCompra private double valorCompra;
\ N 1Vk
Se evalúa si la compra es mayor o public Compra() {
Solución del problema igual que cien mil, para calcular el this.valorCompra = 8;
descuento
}
Firma del Método obtenerDescuento ()
public double getValorCompra() {
return valorCompra;
}
fi CONDICIONALES
Están conformadas por un if y un else que permiten optar entre dos opciones o al- if ( edad >= 18 ) {
ternativas posibles en función del cumplimiento o no de una determinada condición. resultado = "Es una persona mayor de Edad";
} else {
La sintaxis de una sentencia condicional if else es la siguiente: resultado = "Es una persona menor de edad';
}
if (expresionbooleana) {
sentencia de verdadero;
} » Si la condición ( edad >= 18 ) es verdadera se ejecuta la sentencia; resultado
else { "Es una persona mayor de edad"; en caso contrario se ejecuta la sentencia
sentencia_de_falso; resultado = "Es una persona menor de edad";
» Ambas sentencias (if o else) no se ejeçutaran al mismo tiempo, esto quiere decir
que son excluyentes.
Ejemplos
E
Codificación en Java del modelado del problema, a partir del diagrama de clases: import java.util.Scanner;
£
/< publiC class PruebaPersona {
' Clase que modela la edad de la persona public static void main (String arg[]) {
}
}
this.edad = 8;
5.6.3 Condicionales anidadas E
Consisten en que dentro de una sentencia if, se pueden colocar otra sentencia if, en
public mt getEdad() {
}
return edad;
ocasiones se requiere anexar un if a continuación de otro if, o un if - else. En otras
palabras un condicional anidado es un bloque condicional dentro de otro como lo
señala la siguiente notación:
E
public void setEdad(int edad) {
}
this.edad = edad; mf (condiciónl) {
instrucciónl;
E
} mf (condición2) {
public String evaluarEdad () { instrucción2;
[
String resultado = } i-f (condición3) {
//Este es un condicional que compara números instrucción3;
if ( edad >= 18 ) { }
}elsef
resultado = "Es una persona mayor de Edad"; E
else {
resultado = "Es una persona menor de edad"; instrucciones del else
} }
return resultado;
}
}
}
Ir
E
u
RUENAS PRÁCTICAS DE PROGRAMACIÓN CONDICIONALES
Dentro del bloque de sentencias del if (o de los bloques de if-else) puede encon.. jagrama de Clases
trarse otra sentencia if.
flisiesto •j
Las llaves ((}) son necesarias para agrupar las sentencias múltiples.
-annio: mt -unBisiesto: Bisiesto
» Es conveniente minimizar el número de anidaciones.
~Bisiesto() +pruebaBisiestdl)
+getAnnioO: mt +imprimirResultados()
» Se debe revisar el código de las condiciones para evitar errores +setAnnio(annio: nt) +main(args: Strinct)
+esBisiesto : boolean
-
E
9
import lava util. Scanner; 12
12
public class PruebaBisiesto { r
private Bisiesto unBisiesto;
5
public PruebaBisiesto() {
this.unBisiesto = new BisiestoQ; para que el ejercicio sea más general y pueda ser aplicado a diferentes valores se
E
} utilizan tres variables x, y, z de tipo entero que corresponden a las entradas de datos.
}
} E
La firma del método sería:
2. Método que evalúa tres números enteros diferentes y retorna el mayor de estos.
Nombre del Método Lista parámetros
Etapa de análisis, son tres datos de entrada y una salida; por ejemplo ingresa el 9, obtenerMayor ()
12, 5; la salida es 12, que corresponde al número mayor.
E
c
public mt obtnerMayor( ) {
mt mayor = e;
mf ( x >=y&& x
mayor = x;
} else iF( y >= x &&
mayor = y;
} i-F( z >= x && z >=
mayor=z;
} /*'Sea x,y,z variables enteras las cuales se van
return mayor; para ir devolviendo el numero mayor en cada
comparando
} * caso de la instrucción condicional
*1
public mt obtnerMayor( ) {
En la prueba de escritorio de este método se realiza el seguimiento para determinar if( x >= y )
si el método es correcto, o sino para realizar los ajustes correspondientes. if( x >= z )
return x;
Suponiendo que x = 12; y = 9; z = 5, la primera condición a evaluar es si x es mayor else
que y, como es verdadero, evalúa si x es mayor que z; esto lo realiza la sentencia if returfl z;
x >= y && x>=z) como x es el número mayor, entonces la variable mayor almacena else if( y >= z )
el número 12, tal como se indica a continuación: return y;
else
return z;
}
Si x = 9; y 12; z = 5, evalúa if (x >= y && x>=z) si x es mayor que y, como es falso Aplicación diseñada .con dos clases: La clase NumeroDias, tiene la responsabilidad
no evalúa si x es mayor que z; continua con la siguiente comparación, else if (y >= de evaluar el número de días y determinar si el año es bisiesto, para fo cual se imple-
x && y >= z) y es el mayor que x; y es mayor que z, entonces la variable y tiene
mentaron dos métodos y la clase PruebaNumeroDias, que tiene la responsabilidad
almacenado el número mayor que es 12.
de leer el número del mes y año e imprimir el número de días.
E
Diagrama de Clases public mt getAa() {
return am;
NumeroDias. }
-aa: mt
-mm: mt public void setAa(int aa) {
+NumeroDias()
+NumeroDias(aa: nt, mm: nt)
this.aa = am; E
-i-getAa(): nt
}
+setAa(aa: nt) +main(args: String)
+getMm): nt
+setMm(mm: mt)
public mt getMm() {
return mm;
E
+obtenerNumeroDias(): mt }
+esBisiesto(): boolean
public void setMm(int mm) { r
this.rnm = mm;
}
public mt obtenerNumeroDias( ){
E!
mt numeroDias = 8;
if ((rwi==1) 1 (ni==3) II @ml==5) (mm==7) II (rmi==8) II
Codificación en Java del modelado del problema, a partir del diagrama de clases: (mm==10) II (mm==12)) {
numeroDias = 31;
} else if (mm==2){
1
if ( esBisiestoQ) •{
/.
Clase que rnodela el número de días del mes y }else{
numeroDias = 29;
E
evalúa si el año es bisiesto numeroDias = 28;
'7 }
E
132 Fundación Universitaria Los Libertadores a........................................................ —a CAPITULO 5 • 133
I3UENAS PRÁCTICAS DE PROGRAMACIÓN CONDICIONALES
/**
.5.7 SELECCIÓN MÚLTIPLE
Metodo que evaula si el año es bisiesto
@return true si es año bisiesto; False en caso contrario Cuando se requiere comparar una variable con una serie de datos diferentes, es
*1 recomendable utilizar la sentencia switch, en cual se indican os posibles valores que
puede tomar la variable y las sentencias que se tienen que eecutar cuando el valor
private boolean esBisiestoQ{ de la variable coincide con alguno de estos.
boolean bisiesto = false;
if ((aa%4==S) 8& ((aa%lgg
'=Ø)IJ (aa%400 == 0))) { La estructura switch case permite resumir los if-else-if o if anidados
bisiesto=true;
} else { La sintaxis de la instrucción switch, case. En java es:
bisiesto=false;
}
return bisiesto; switch (expression o variable de control) switch ( expresión ) {
} case valorl:
{
} case exp 1: break;
sentencia 1; case va1or2:
sentencia 2; break;
/ break; case valorN:
* Clase que modela la lectura del año y mes e imprime el número break;
de días del mes case exp 2: default:
case exp N: }
impOrt java.util.Scanner; sentencia N;
break;
public class PruebaNumeroDias { default:
public static void main(String[] args) { sentencia O;
1/definición objeto unBisiesto de la clase Bisiesto
}
Scanner lea = new Scanner(Sys-tem.Ln);
NumeroDias numeroDias = new NumeroDias();
mt aa = 8;
mt mm = 8; La instrucción switch toma el valor de la variable que se le pasa como argumen-
System.out.print("Digite el año ); to, el cual se compara con cada uno de los valores literales de las sentencias case,
aa = lea.nextlntQ; como se explica a continuación.
System.out.print("Digite el mes
mm = lea.nextlntQ; La palabra reservada switch, debe ir en el encabezado del bloque.
numeroDias . setAa(aa);
numeroDias . setMm(mm); La variable de control, puede ser de tipo: byte, char, short o mt.
Systern.out. println("El Mes "i-numeroDjas .gett4n+", del año
+runieroDias.getAaQ+" es de Los paréntesis que contienen la variable de control son obligatorios.
+numerooias.obtenerNumeroo:jasQ+" días ");
u
System.exit(8); La palabra reservada case, ejecutará las sentencias correspondientes, con base
} en el valor de la variable de control, que deberá de evaluarse.
}
-E
E
La cláusula default es opcional, para el caso que e! dato de la variable no coin-
cide con ningún valor, entonces se ejecutan las sentencias por default cuando
a haya.
-aa: mt
MumerODiasMeS
£
-mm: nt
Programa que determina el número de días del mes, teniendo en cuenta si e! año es Codificación en lava del modelado del problema, a partir del diagrama de clases.
bisiesto, haciendo uso de la séñtencia sitch.
El metodo esBisiesto( )
private mt mm;
fi VR CONDICIONALES
public mt obtenerNumeroDjasO{
mt numeroDias = 8;
* Clase que modela la lectura del año y mes e impresión del numero
switch(rnes) {
e días del mes
case 1: case 3: case 5: case 7: case le: case 12: *7
case 8:
jmport java.util.Scanner;
nunieroDias 31; publiC class PruebaNumeroDiasMes {
break;
public static void main(String[] args) {
case 2:
//definición objeto numeroDias de la clase NumeroDiasMes
if ( esBisiesto(año)) { new Scanner(System.in);
Scanner lea =
numeroDias = 29; NumeroDiasMes numeroDias = new NumeroDiasMes O;
}else{
mt aa = e;
numeroDias = 28; mt mm = 8;
} System.out.print(Digite el año ");
break;
aa = lea.nextlntO;
case 4: case 6: case 9: case 11: System.out.print("Digite el mes
numeroDias = 38; lea.nextlntO;
mm =
break;
numeroDias setAa(aa);
de-Fault:
numeroDias setMm(sim);
System.out. println(rMes no contemplado"); System.out.println("El Mes "~numeroDias.getMii-i-", del año
J. "~numeroDias.getAa+" es de
return numeroDias;
+numeroDias .obtenerNunieroDias ( )+" días ");
} Systeni.exit(e);
}
/* }
1etodo que evaula si el año es bisiesto
*
@return true si es Año bisiesto; false en CaSO Contrario
*7
5.8 OPERADOR CONDICIONAL (?)
private boolean esBisiestoQ{
En Java el operador (?) denominado alternativa es un operador ternario, confor-
boolean bisiesto = false; mado por tres operandos, el cual permite bifurcar el flujo del programa a partir del
if ((aa%4 =8) && ((aa %l =8) (aa %4 8))) {
= valor de una variable boolean:
bisiesto=true;
} else { expresiónl ? expresión2 : expresión3; cuando el resultado de evaluar la
bisiesto=false; expresión lógica es verdadero, retorna el valor de la segunda expresión y en caso
} contrario, devuelve el valor de la tercera expresión.
return bisiesto;
}
} u
resultado = (expresión lógica ? expresión2 : expresión3);
t
El operador condicional ? es similar a un if else, por ejemplo:
Clase que modela un número evaluando si es par o impar E.
r
Si x es igual a cero, entonces a es Si x es igual a cero, entonces a es igual a *1
igual a 1; en caso contrario a igual 2 1; en caso contrario a igual 2
}
a = 2; }
public mt getNumero() {
return numero;
r
}
+NumeroPar()
+getNumerot: mt
+setNumero(numero: mt)
public String evaluarNumero()
E
~evaluarNumero(): String
+esParlmpar( ): String
{
}
Stririg respuesta=( (numero
return respuesta;
2 == e)?'par":"impar");
r
E
E
140 Fundación Universitaria Los Libertadores CAPÍTULO 5 u 141
BUEN5 PRÁCTICM DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
, fiVR CONDICIONALES
/.i*
59 PREGUNTAS DE REVISIÓN DE CONCEPTOS
Metodo que evalua sí el número es par o impar
utilizando la sentencias if-else lmpoanc1a de los condicionales en Java.
@return
» Semejanzas entre los condicionales anidados y la sentencia switch.
Clase que modela lectura e impresion de un numero 1. Hallar el mayor de dos números enteros diferentes.
E
u
r = a + b > c;
s = a - b < c;
t= a - b == c;
u a*b
System.out.println(r + " " + s + « + t + " « + u);
Cuál será el resultado de r UN /
BIBLIOTECA
CENTRAL
E
HERNANDO
SANTOS
J
8E R T
7. Suponga que: a = 15; b = 18; c=28; io. Para comparación de cadenas de la siguiente información
d=7;
11. Implementar un método que permita determinar si un número es múltiplo de 3 5.12 REFERENCIAS BIBLIOGRÁFICAS
if
Aguilar L. J. (2004).
Fundamentos de programación algoritmos y estructura de da-
E.
tos Tercera Edición. Ciudad: México: McGraw Hill.
12. Diseñar el método que permita determinar si dos números son iguales o diferentes
Booch, G. (1996). Análisis y diseño orientado a objetos con aplicaciones. Ciudad: E
México Addison Wesley.
Fowler, M., y Scott, K. UML. (1999). Gota a gota. Ciudad: México Editorial Pearson.
13. Elaborar una clase que implemente los métodos para las operaciones básicas:
suma, resta, producto y división. [
Villalobos, J., y Casallas, R. (2006). Fundamentos de programación, aprendizaje ac-
tivo basado en casos. Ciudad: México Editorial Pearson.
E
14. Diseñar una clase que provea los métodos para determinar el mayor de dos
números enteros diferentes y el número menor
E
15. Implementar un método para obtener el menor de tres números
E
£
16. Construir una aplicación en Java, que a partir de la obtención de una fecha
cualquiera (dd/mm/aaaa), imprima la fecha del día siguiente.
E
tJENAS PRÁCTICAS DE PROGRAMACIÓN
CADENAS
tURNAS PRÁCTICAS DE PROGRAMACIÓN
CADENAS
6.2 INTRODUCCIÓN
Un String es una secuencia finita de caracteres, que pueden ser letras, dígitos, sím-
bolos especiales; en Java existen varias clases para manipular cadenas de caracteres,
una de estas es la clase String definida en la API de Java. Esta clase proporciona al-
gunos métodos dentro de los que permiten convertir el objeto cadena en caracteres,
convertir números en cadenas, buscar palabras en una cadenas, crear substrings,
cambiar la cadena de caracteres mayúsculas a minúsculas o viceversa, obtener la
longitud de la cadena, comparar cadenas, entre otros. La figura 20 detalla el con-
cepto de la clase String.
Letras
Símbolos
Tamaño
cadena de java 14—esina
/ cOmO \
ToLowerCase() Substring(ini.fin)
ToUpperCase()
CADENAS
6.3 CLASE STRING métodos básicos incluidos en la clase String se citan y se describe su fun-
. IgUfl05
ciona1idad en la tabla 13.
Un String en Java representa una cadena de caracteres no modificable. Así Por
ejemplo la instrucción Strrng str =" Universidad'; define el String str y cada una de
las letras que lo integran (U, n, i, y, e, ç s, i, d, a, d) esta palabra no se puede mo. Tabla 13. Métodos básicos.
dificar (inmutable).
El API de java proporciona, para la clase String los constructores y una amplia gama
de métodos, para el manejo de cadenas, la cadena debe estar entre comillas dobles. METODO FUNCIONALIDAD
Dos de los constructores incorporados en la clase String
En la tabla 12 se contemplan algunos ejemplos de cadenas. -irgO permiten crear una cadena vacía y una cadena a partir de
e
string(Striflg str)
otra existente.
En la tabla 12 se contemplan algunos ejemplos de cadenas.
5 Este método devuelve el carácter presente en la cadena en la
char charAt(int index) posicion dada por el parametro.
Tabla 12. Ejemplo de cadenas. -!nt lengthO Este método devuelve la longitud de la cadena.
Inicialización.
String strl = "Hola"
String str2 = " Mundo"
Asignación.
String salida = strl+str2
» Acceso.
El objeto salida almacena "Hola Mundo".
String cadenal="Teleconiunicaciones";
string parametro = "ip = 192.168.100.2";
if (parametro.startSWith("iP")) {
E
String cadena2=new String("Telecomunicaciones"); System.out.println("La direccion "+parametro);
if(cadenal equals(cadenal) ){ } else {
System.out.println("cadenas de igual contenido"); System.out.println("El parámetro no es una ip");
} else {
}
System.out.println("Cadenas Diferentes");
} boolean endsWth(String str) método que retorna true si el String termina en los
caracteres indicados, false si esto no ocurre.
1
Rutinas que realizan la comparación de una cadena que conforma una clave de
acceso, utilizando el método equals( ): Líneas de código que evalúa, si la cadena termina con .co:
Se imprime clave errada, ya que hay diferencias entre las minúsculas y mayúsculas char charAt(int indke), método que retorna el carácter en la posición indic r
índice. El rango de indice va de O a length() - 1. cadena.charAt(i). UN /
boolean equalslgnoreCase(String str) método que evalúa si dos String tienen -.
los mismos caracteres y en el mismo orden sin tener en cuenta las mayúsculas. Si es BIBLIOTECA
así devuelve true y si no false. CENTRAL ;
HERNANDO
tí SANTOS
E
SUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS
E&HJ CADENAS
Ejemplos
Ejemplos
1. Ubicar un carácter mediante un índice. Se almacena una cadena de caracteres en el objeto cadena 1 y se imprime en
letras minúsculas:
String nombre = "Miguel Hernández";
char c = nombre.charAt(e); 5tring cadenal="lelecomunicaciones";
system .out .println(cadenal .toUpperCaseO);
Se imprime la M, correspondiente al primer carácter.
La impre5i es telecomunicaciones.
2. Impresión de todos los caracteres de una cadena.
2. Se almacena en el objeto titulo una cadena de caracteres y se realiza la conver-
for ( mt i = 0; ± < cadena.length;i~~ sión a mayúsculas, asignando el resultado a la cadena minúscula:
) {
Systeni.out.printin(" °+cadena[i]);
string titulo = "Fundación Universitaria";
string minuscula = titulo.toLowerCaseO;
String toLowerCaseO, método que convierte un cadena a letras minúsculas. minuscUla = "Fundación Universitaria";
1. Se almacena una cadena de caracteres en el objeto cadena 1 y se imprime en minuscula = "Fundación Universitaria";
letras mayúsculas:
String substring( mt inicial, mt fin ) Método que retorna una parte o subcadeba
String cadenal="Telecomunicaciones"; (substring) de un string dado.
System. out. println(cadena .toLowerCaseO);
Ejemplos
La impresión es TELECOMUNICACIONES.
1. Se extrae una subcadena a partir de la posición inicial y una final:
2. Se almacena en el objeto titulo una cadena de caracteres y se realiza la conver-
sión a mayúsculas, asignando el resultado a la cadena mayúscula. String nombre = "Oscar Alejandro";
String subCadena = nombre.substring(6,14);
String titulo = "Fundación Universitaria";
String mayuscula = titulo.toUpperCaseQ; La variable subCadena almacena "Alejandro", ya que corresponde al sexto carácter
yva hasta el 14
El resultado es:
2. Se extrae de un substring especificando la posición de comienzo y la del final.
mayuscula = "FUNDACIÓN UNIVERSITARIA";
String str = "El lenguaje java";
String toUpperCase() Método que convierte una cadena a letras mayúsculas. String subStr=str.substr±ng(3, 11);
String trim() método que retorna la cadena (String) que se le pasa al argumento,
pero sin espacios en blanco al principio ni al final. No elimina los espacios en blanco
situados entre las palabras.
String autores = " Baquero & Hernández "; para esto se utilizan los métodos de las clases Integer y Float.
String resaltar = ""~autores . trimQ+"";
5triflg dato = "2011";
*Baquero & Herná ndez* elimina el espacio al inicio y le agrega asterisco, al inicio y
final de la cadena.
jrit lfaIflteger = Integer.parselnt(dato);
striflg beta = "20.11";
float betaFlOat = Float.parseFloat(beta);
c
String replace (char anteriorChar, char nuevoChar): método que permite cam-
biar el carácter asociado al primer argumento por el segundo argumentos, de la om pareTo(Strun1g str) método que realiza una comparación entre un String (en
cadena (String) del método, generando una nueva cadena. La cadena (String) sobre este caso) y otro objeto de tipo String, retornando un número entero menor que o
la que se aplica el método replace no cambia, simplemente se crea otra cadena en si la cadena argumento es lexicográficamente mayor que la cadena a comparar, o si
base a la String sobre la que se aplica el método, tal como se puede observar en los
líneas de código presentadas a continuación.
son iguales y será mayor que O si es menor.
Ejemplos
L
/7 Cadena sobre la que realizaremos la sustitución
String cadenal = "Institucion Universitaria Los Libertadores";
=
"a";
IZ
String cadena2 = null; systeni.out.println(strl. conipareTo(5tr2)); 7/ -1
str2 = "aa";
r
System. out. println(cadena2);
/7 Fundación universitaria los Libertadores System .out. println(strl. compareTo(str2)); 7/ -1
System.out . println(str2. compareTo(strlfl; 1/ 1.
U
System.out. println(cadenal);
/" Al ejecutar el método
replace no afecta a la cadena original *7
str2 =
System.out.println(strl. compareTo(str2fl; 7/ -2
L
System. out . printlri(str2 .compareTo(strl)); 7/ 2
6.4 OBTENER CADENAS DESDE LAS PRIMITIVAS
La clase String tiene métodos, implementados para transformar valores de otros tipos
strl = r
de datos a su representación como cadena. Todas estas funciones tienen el nombre System.out. println(strl .compareTo(str2)); /7 8
de valueOf, estando el método sobrecargado para todos los tipos de datos básicos.
Ejemplos
System .out. println(str2 .compareTo(strl)); /7 0 cadena iguales
c
Rutina que convierten datos numéricos a cadenas (String):
fi CADENAS
Programas de ejemplo
* Constructor que permite crear cadenas
1. Aplicación, que a partir de una cadena ingresada por teclado imprime: los ca- * @param cadena
racteres que la conforman; el tamaño de la cadena, y la conversión a mayúscu *1
las y minúsculas. public OperacionesCadena(Striflg cadena) {
this.cadena = cadena;
El Siguiente diagrama de clases define unas operaciones básicas de Strings. }
/**
OperacionesCaden * Método que actualiza el contenido de la cadena
-cadena: String * pararn cadena
+OperacionesCadena() *1
+OperacionesCadena(cadena: String)
TestOperacionesCadena public void setCadena(String cadena) {
+setCadena(cadena: String) -unaCadena: OperacionesCadena this.cadena = cadena;
+getCadena: String < +TestOperacionesCadena() }
•+obtenerLongitudcadena: mt +leerCadena()
+convertirMayusculas( ):String +main(args: String) /**
+convertirMinusculas( ):String
* Método que retorna el valor de la cadena
4-imprimirCaracteres()
+listarCadena( * @return cadena
*1
publiC String getCadena( ) {
/** return cadena;
clase que modela las operaciones de una cadena como: }
* tacaño de la cadena, convertir a mayúsculas y minúsculas.
@author Ing. Miguel Hernández 8ejarano /**
@version l.@ * Método que retorna el tamaño o longitud de la cadena
'.7 * @return tamaño cadena
public Cadena(){
this.cadena=" ";
this.operacion= new OperacionesCadenaQ;
}
import java.util. Scanner; 2. Aplicación que, a partir de dos cadenas ingresadas por teclado, efectúa la com-
/,*
paración de las dos cadenas utilizando los métodos compareloQ, y equalsO, así
clase que codela las operaciones la lectura de la cadena e como la impresión del segundo carácter de la cadena2.
impresion de los resultados de las operaciones de la cadena
@ File Nace : TestOperacionesCadena.java
@author : Miguel Hernández
ComrlaracKrncadefla
@version l.@
cadenal Strtng
cadena2 String
public class TestOperacionescadena { PruebaComparacionCadena
private OperacionesCadena unaCadena; +Comparaci0nCadena()
-unaCadena: ComparacionCadena
public TestOperacionesCadena() { ~getCadena1O String
+setCadenal(cadenal: String) +PruebaComparacionCadena()
this.unaCadena= new OperacionesCadencO; +leerCadenas()
+getCadena2O String
} +setCadena2(cadena2 Stnng) +main(Args: String)
public void leerCadena(String cadena){ +obtenerCaracter(P05iCi0n nt): char
unaCadena . setCadena (cadena); +obtenerCOmPareTOO String
Systern.out.println( "\nLa Longitud de la cadena: +obtenerCOmParaci0flO boolean
+unaCadena.obtenerLongitudcadenaQ+" caracteres a');
System.out.println( "\nLa cadena texto en niayusculas:
~unaCadena .convertirMayusculasQ); public class ComparacionCadena {
System.out.println( "La cadena texto en minusculas: " +
unaCadena. convertirMinusculasQ); private String cadenal;
unaCadena . imprinhirCaracterescadena O; private String cadena2;
unaCadena . imprimirCadena O;
} pUblic ComparacionCadena( ) {
this.cadenal = "Hola';
public static void niain(String[] args) { this.cadena2 = "olas';
Scanner in = new Scanner(Systern.in); }
TestOperacionesCadena prueba = new TestOperaciones
Cadena O; public String getCadenal() {
String cadena=" "; return cadenal;
//se lee la cadeena por teclado }
System.out.println ("Digite Cadena ");
cadena=in .nextLineO; public void setCadenal(String cadenal) {
prueba. leerCadena (cadena); this.cadenal = cadenal;
} }
}
public String getCadena2() {
return cadena2;
}
/**
java. util . Scanner;
E
metodo que retorna el caracter de la segunda posición
la cadena publiC 1a55 PruebaComparacionCadena {
*1
public char obtenerCaracter(int posicion){ private ComparacionCadena unaCadena;
char caracter=cadena2.charAt(posjcjofl);
return caracter; /**
} * contructor E
*7
/* public PruebaComparacionCadefla() {
* metodo que compara dos cadenas
@return retorna cero si son Iguales
this.unaCadena = new comparacionCadenaO;
E
*1
}
E
168 Fundación Universitaria los Libertadores CAPITULO 6 . 169
E
Í3UENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN CADENAS
caracter=unaCadena obtenerCaracter(l);
. 6.6 LECTURAS RECOMENDADAS
/ * '
Crear una clase que incluya los elementos incorporados a partir del siguiente String
* método principal donde se elecuta el proyecto definido: String cadena = "Universidad".
@param Args
EjCadena =
-cadena: String
±EjCadena()
+imprimirPrimerElementoCadena()
+imprimirTercerElementoCadena ()
+imprimirUltimoElementoCadena()
+imprirnirPosicioneslmpareS ()
~imprimirElementoMitad ()
~ imprimirUltimoElemento ()
-i- imprimirCadena ()
Imprimir los caracteres que hay en la cadena de la última posi- Rumbaugh, J., Jacobson, 1., y; Booch, G.: (2005). The Unified Modeling Langua- r
cián a la primera. ge User Guide, San Francisco: Addison-Wesley, Reading, Mass. lSBN-13: 078-
public void imprimirUltimoplemento
}
E
El
1:
BUENAS PRAcTICAS DE PROGRAMACIÓN
CAPÍTULO 7
CICLOS
UN
BIBUOTECA
CENTRAL
E HERNANDO ;i
SANTOS
&ER T
1 5JENA5 PCÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN OCLOS [
E
7.1 TEMÁTICA A DESARROLLAR
c
» Estructuras de control repetitivas.
7.2 INTRODUCCIÓN E
Los ciclos se encuentran entre las estructuras más comunes y utilizadas en progra-
mación, permitiendo que una o más instrucciones se repitan sin tener que volver a
digitar el mismo código. £
Ciclo while, se utiliza para ejecutar una serie de instrucciones (o una sola) mien-
E
tras se cumpla una condición, cuando esta se deje de cumplir, las instrucciones
que están dentro del ciclo dejarán de ejecutarse.
Ciclo do-while es bastante similar al ciclo while, con la única diferencia en que
el ciclo while si no se cumple la condición desde la entrada no realizarán la ins-
trucciones, pero en el caso del do-while siempre se ejecutan las instrucciones de
su bloque como mínimo una vez.
Ciclo for mejorado (for-each), es la estructura iterativa ideal para recorrer colec-
ciones de objetos o de cualquier otro tipo de valor desde el inicio hasta el final.
c
El uso de una u otra de estas estructuras de control depende de las preferencias del
programador y en muy pocos casos, del enunciado del problema; teniendo como
presente, que unas pueden tener mejor ventaja que otra.
E
176 Fundación Universitaria Los Libertadores CAPlTULO1 i 177
E
I3LIENAS PRÁCTICAS DE PROGRAMACIÓN
CICLOS
Figura 21. Concepto de Ciclos. Los tipos de ciclos que se pueden utilizar en un programa Java son:
» While.
Repetir Ayudar
[sentencias validar datos
» do while.
Estructura
de control
repetitiva pra
for.
Utilizados] Operadores
como >, 5=, 5,
relacionales 1=
es una
foreach o for mejorado.
Entre Operadores
paréntesis 1—esta--- Expresión
booleana
— utilizan -4 lógicos como 4
(x<y)
while (expresiónBooleana) {
Instruccióni;
7.3 ESTRUCTURAS DE CONTROL REPETITIVAS O CICLOS }
Son estructuras iterativas que permiten repetir una o varias sentencias un número
determinado de veces utilizadas cuando se hace necesario iterar el mismo conjunto Se recomienda utilizar las llaves 1 cuando es una sola sentencia, para el caso en que
de Instrucciones una cantidad específica de veces, determinada por una expresión se tengan más de una instrucción es obligatorio.
booleana en programa o método.
Para el funcionamiento del ciclo while, se plantea la siguiente situación: se requiere while(c0nccón o expresión boolena)
generar la impresión de los cinco primeros números naturales.
L
Número de interadones
Acción Proceso Impresión del número r
lnicializacjón numero = 1;
impresión System.out.println(n); 1
incremento numero ++; Lo ideal es utilizar el ciclo while cuando se conoce previamente el número de iteraciones.
Impresión System.out.println(n);
E
4
El comportamiento de la anterior rutina es:
incremento numero ++;
Mientras la condición(numero <= 5), se cumpla se realizarán las sentencias
impresión System.out.println(n); 5 definidas entre el bloque de las llaves { ... }: System.out.println ('"' +numero); y
numero++;.
incremento numero ++;
c
Cada vez que se termina de ejecutar el bloque de instrucciones se vuelve a eva-
luar la condición, si es verdadera, nuevamente se vuelven a realizar el bloque de
instrucciones que están entre las llaves.
Como se puede observar, las instrucciones que se repiten son la impresión y el in-
cremento de la variable numero, para este caso estas serían las instrucciones que se Se termina a ejecución cuando la condición pasa a ser falsa, que para el caso
E
incluirían dentro del ciclo while. es cuando la variable número es mayor que cinco.
inicializacion;
Inicializacián mt numero 1;
while(condjcion) ( Condición o expresión booleana, numero <= 5
instrucciones a repetir; expresiones a repetir; System.out.println(n);
incremento o incremento numero++;
decremento
E
180 Fundación Universitaria Los Libertadores CAPITULO 7 s 181
1......................................................
CICLOS
NumeroNatural
lruebaNumeroNaturaI
-n: nt import java. util Scanner;
.
public NumeroNatural(int n) {
this.n = n; 2. Programa que cuenta el número de veces que aparece la vocal e en una cadena
} determinada.
public mt getN() {
return n; Diagrama de clases.
}
E
Codificaoón en Java del modelado del enunciado, a partir del diagrama de clases }
return cantidad; c
E
Método que retorna el valor de la cadena
@return cadena
*7
public String getCadena( ) {
Sentencias break y continue L
return cadena; Estas sentencias cambian el flujo de control especialmente en los ciclos o estructuras
} repetitivas.
E
/ break permite que un programa se salga de los ciclos while, for, do.. .while y de la
Método que cuenta el número de apariciones de la vocal e sentencia de selección switch en el cual se encuentra.
public mt obtenerCantidadVocal( ){ La sentencia break permite salir de las estructuras de control anidadas, pasando el
mt 1 = 0; control del programa a la instrucción que se encuentra luego de la llave de cierre
mt cantidad = 0; del bloque.
while (1 < cadena.lengthQ) {
if(cadena.charAt(i)='e') {
'E
cantidad ++;
}
i++;
E
184 Fundación Universitaria Los Libertadores 1.............................................. CAPITULO 7 185
CICLOS
continue: procede con la siguiente iteración (repetición) del ciclo while, foro do-whi. mt numero = 1;
le saltándose las sentencias que se encuentran luego de la sentencia continue. do{
Ejemp'o lo
Número de Iteraciones
while ( expressionBoolean) {
if(expresiónBoolean ) {
continue; } while (numero < 11);
}
}
}
}
/5* E
* Método que cuenta el número de apariciones de la vocal e
*1
r
2. Programa que cuenta el número de veces que apareçe la vocal e en una cadena public mt obtenercantidadVocal( ) {
determinada, haciendo uso del ciclo do while. mt i = e;
mt cantidad = e;
*1
atributo de la clases i++;
} while (1 < cadena.lengthO);
E
private String cadena; return cantidad;
}
/**
}
constructor que inicializa la cadena con un espacio en blanco
E
188 Fundación Universitaria LBS Libertadores 1------------------------------------------------------ CAPITULO 7 . 189
5IJEN5S PtÁCTICAS DE PROGRAMACIÓN CICLOS
a
Utilizada para repetir una instrucción o un conjunto de instrucciones, hasta que una La estructura repetitiva del ciclo for está conformada por tres partes y un grupo de
condición se cumpla. La sintaxis de la sentencia for es: instrucciones que están entre las llaves U.
instruccionn;
For (inicialización; condición; incremento) {
instrucciones
for instrucción condición instrucción) {
instruccioni;
for (inicialización variable ; expresiónBooleana; incremento o decremento) i, - instruccion2
{
Instrucción (es) o acciones;
instruccionN
t
Inicialización de la Condición Incremento
variable mt n = 1 ; n<=1O
Ejemplos
for(intn=1;n<=18;n+~)
for(intx=io; n>=1;n--) //instruccion
system.out.println(""~n);
1
E
for (mt n = 1; n <= 10; n -H- ) { Ejecución de las instrucciones j public void setN(int n) {
bloque de instrucciones que están this.n = n; E
dentro de las llaves. }
} 7* 4<
4< En el ciclo for se evalúa x mientras que x <= n
u
La inicialización (mt n = 1 ;), se realiza una única vez, antes de la primera iteracián. *1
for (mt x = 1; x <= n; x-i-+) {
» La condición (n < = 10;), se revisa antes de comenzar una iteración. System.out.println(" "+ x);
r
» El incremento o decremento de la variable de control (n ++), se realiza cada vez }
}
}
L
La clase PruebaNumeroNatural es idéntica al ejemplo anterior, nótese la clase Nume-
Ejemplos roNatural los métodos constructor, set y get son idénticos.
1. Programa que imprime los diez primeros números naturales, utilizando el ciclo
for.
2. Programa que cuenta el número de veces que aparece la vocal e en una cadena E
/ 1' determinada, haciendo uso del ciclo for.
4< Clase que implemen-ta la impresión de los n primeros números naturales
utilizando el ciclo Por public class ContarVocal {
/4<4< atributo de la clases 4<!
4< '
}
public void setCadena(String cadena) {
public mt getN() { this.cadena = cadena;
BIBLIOTECA
}
return n; } CENTRAL
HERNANDO
E
r SANTOS ,c,
T
E
CAPITULO 7 u 193
192 Fundación Universitaria Los Libertadores
E
1
nJErAs PRÁCTICAS DE PROGRAMACIÓN CICLOS
/ Ciclo while
Método que retorna el valor de la cadena
public String getCadena( ) { public class NumeroNaturalWhile{
return cadena; publiC void imprimirNumero ()
} {
Método que cuenta el numero de apariciones de la vocal e mt numero = 1;
*1 do{
public mt obtenerCantidadVocal( ) {
mt cantidad = e; System.out. println("+numero);
For (mt i = e; i < cadena.lengthQ; i-i---) { numero++;
if(cadena.charAt(i)=='e') { } while (numero <= le);
cantidad ++; }
}
}
return cantidad; Ciclo do-while
}
public class NumeroNaturalDoWhile{
} public void imprimirNumero ()
{
mt numero = 1;
La clase PruebaContarVocal es idéntica al ejemplo anterior, nótese la clase do{
ContarVocal los métodos constructor, set y get son iguales a la del ejemplo del System .out. println(""+numero);
ciclo while. numero++;
} while (numero <= le);
}
7.4 COMPARACIÓN DE LOS CICLOS WHILE, DO-WHILE, FOR }
Los tres ciclos son estructuras repetitivas, como se puede observar en el ejemplo
del programa que imprime los diez primeros números naturales.
Diagrama de Clases
Ciclo for Se puede utilizar el mismo nombre de la clase, ya que los nombres del método son
diferentes.
public class NunieroNaturalFor {
public void imprimirNuniero() { Los métodos imprimen los diez primeros números naturales 1, 2, 3..... 10.
//inicialiación; condición; incremento
for(int numero = 1; numero <= le; numero+~) { Todos tienen:
//intrucción que se repite
System.out.println(numero); //impresión lnicialización (numero = 1) 1
}
} » Condición (numero <=10)
En el ciclo while se evalúa la condición y después se ejecutan las instrucciones de 7.6 USO DE LOS CICLOS REPETITIVOS
impresión e incremento.
Determinar cuándo utilizar uno u otro ciclo repetitivo es un proceso complejo, por-
E
En el ciclo do while se ejecutan las instrucciones de impresión e incremento, y des- que existen equivalencias entre los ciclos, lo que hay son recomendaciones y nocio-
pués se evalúa la condición. nes generales de cuando usar alguno de ellos:
7.5 CICLO FOR EACH (FOR MEJORADO) El ciclo while, cuando la variable de control de ciclo debe incrementarse/decre-
mentarse según una o varias condiciones.
Es un ciclo repetitivo que no utiliza un contador. Su uso es indicado para colecciones
[
de objetos, como por ejemplo: arreglos, matrices, listas, entre otras estructuras, que » Un ciclo do.. .while, cuando necesita ejecutar las sentencias del ciclo repetitivo,
no se incluyen en este texto. por lo menos una vez.
EjempI » El for each para realizar tareas de consulta de datos y no para asignación de £
valores.
Programa que imprime los días de la semana
}
Lmpri!wLrDiasSemanaO; inicializadores;
for( ; condiciones; ){
E
} instrucciones;
incrementos;
} o
inicializadores;
for( ; ; ) {
II debe tener un break para romper el ciclo
instrucciones;
incrementos;
}
o
E
BUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN CICLOS
Importancia de los ciclos en java. Aguilar, L. J. (2004). Fundamentos de programación algoritmos y estructura de da-
tos. Tercera Edición. Ciudad: México: McGraw Hill.
» Realizar cuadro comparativo con las semejanzas y deferencias de los ciclos.
BarneS D., Kólling M. (2007), Programación orientada a objetos con Java. Ciudad
Cómo identificar que se debe aplicar un ciclo para resolver un problema. Madrid, Prentice Hall.
Establezca la diferencia entre contador y acumulador. Booch, G. (1996). Análisis y diseño orientado a objetos con aplicaciones. Ciudad:
México Addison Wesley.
Aplicación que genera la impresión de los 10 primeros números pares.
Deitel y Deitel. (201 2). Cómo programar en Java. Ciudad: México Editorial Pearson
Implementar un método que imprima los n primeros múltiplos del 7. (Prentice Hall).
,) Diseñar el método que imprima la sumatoria de los n primeros números impares. Fowler, M., y Scott, K. UML. (1999). Gota a gota. Ciudad: México Editorial Pearson.
» Generar la impresión de cualquier tabla de multiplicaç donde el multiplicador Graig, L. (2003). UML y Patrones: Una introducción al análisis y diseño orientado a
vaya hasta 12. objetos ya! proceso unificado (2 edición) Ciudad: México Prentice Hall.
Implementar una aplicación que permita contar el número de vocales de una Rumbaugh, J., Jacobson, 1., y; Booch, G.: (2005). The Unified Modeling Langua-
cadena. ge User Guide, San Francisco: Addison-Wesley, Reading, Mass. ISBN-13: 078-
5342267976 ISBN-lO: 0321267974
» Las claves de acceso son la barrera más común, para evitar el acceso no auto-
rizado a un sistema, son un recurso informático de gran importancia para el Villalobos, J., y Casallas, R. (2006). Fundamentos de programación, aprendizaje ac-
acceso a una aplicación, para realizar transacciones en un cajero electrónico. tivo basado en casos. Ciudad: México Editorial Pearson.
Se requiere de una aplicación que implemente una clave de acceso, para iden-
tificar si la clave digitada corresponde con la clave que se tiene con antelación
almacenada en un atributo.
E
r
E
£
__ CAPÍTULO 8 r
E
Relaciones entre
CLASES
E
BUENAS PRACÍICAS DE PROGRAMACIÓN ORIENTADAAOBJETOSEN ¡
RELACIONES ENTRE CLASES
u
IL
Cardinalidad.
Asociación.
Agregación
Composición.
» Generalización.
» Dependencia.
8.2 INTRODUCCIÓN
En una aplicación de software, lo más normal es que se involucren dos o más clases,
estas clases de alguna manera deben relacionarse entre sí; en la construcción de un
proyecto de software están presentes los diagrama de clases los cuales representan
la estructura estática de un sistema en términos de clases y de relaciones entre estas.
En el modelado orientado a objetos las relaciones entre clases más importante son:
» Asodadón: es una conexión entre clases, que implica la existencia de una rela-
ción estructural entre objetos de esas clases.
Generalizadón: es una relación entre una clase más general y una más espe-
cífica o especializada.
E
o
El concepto de la figura 22 describe un poco más pormenorizado el concepto d La tabla 14 muestra las diferentes notaciones para la lectura de los tipos de cardi-
relación entre clases.
nalidad
Figura 22. Concepto de relaciones en Clases. Tabla 14. Tipos de cardinalidad. (Pág 190)
E
Las clases
NaTACIÓN 1 LECTURA
E
t
entre
La comunicación
1 Exactamente Uno
o
Asociación
describen * Muchos
E
Agregación
Fundamentales
en el
Multiplicidad — es
(Cardinalidad) .3 La asociación — que—. Establece
ei
Número de
0... *
1... *
Cero a muchos
Este capitulo pretende introducir, hacia el tema de modelado de clases que serán [
La cardinalidad es una restricción a una asociack5n, que limita el número de objetos
aplicados en las temáticas de los capítulos subsiguientes. relacionados de una clase como, por ejemplo:
• Uno a Muchos. • Con un asterisco (*) En este caso indica que puede tomar cualquier valor
(cero o más).
• Muchos a Muchos.
E
E
204 Fundación Universitaria Los Libertadores CAPITULO 8 205
BUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN' RELACIONES ENTRE CLASES
Ejemplos: cardinalidad: permite definir el número de objetos de ambos tipos. Por ejem-
plo en una empresa laboran muchos trabajadores.
1. La universidad tiene un rector y el rector dirige la universidad (relación uno a
uno).
— Cardinalidad —
1 Dirige— 1
Rector Universidad
Labora en —
2. La universidad tiene muchos estudiantes. 1.. *_ — 1
Trabajador E- —> Empleador
Las asociaciones tienen algunos elementos o atributos, que están presentes, como
lo son:
public class Cliente { public class CuentaAhorros {
Nombre: describe de una forma más específica la naturaleza de la relación private String nombre; private String nurrierocuenta;
entre los objetos. No suele ser necesario, salvo que haya varias asociaciones, private String apellido; private double saldo;
por ejemplo, 'trabaja en' o 'dirige' para una asociación entre empleados y de- private CuenteAhorros private Cliente unCliente;
partamentos. unaC u ent a OmAha r ros; }
}
Roles: define el nombre de un objeto desde el otro. Por ejemplo, trabajador y
empleador para una relación entre varias Personas y Empresa.
ir E
E
2. Asociación direccional con cardinalidad 1-1. Clientj4t +O..
Relación direccional que indica que el Usuario tiene un Login. Conformado por un
login y una clave. E
Un computador es el resultado de agregación, ya que está integrado por
-nombre: String una serie de dispositivos, como la Unidad Central de Proceso' (CPU), un r
-apellido: String monitor o pantalla un teclado, un mouse, una cámara, dos parlantes, mi-
crófono, unidad óptica (CD, DVD, Blu Ray), entre otros. En otras palabras se
puede aplicar una prueba a un objeto de la clase computador ya que está
publlc class cliente { conformado o tiene una CPU, un teclado, un mouse, una cámara, dos par-
private String nombre; public c].ass Login { lantes, un micrófono unidad óptica. El modelo de clases sería el siguiente:
private String apellido; private String Login;
private Login unLogin; private String clave;
un ecu e nt aDeh o r ro a } :Carnara
}
E
8.3.3 Agregación
P*tteS:
Es una relación del tipo todo-partes, donde los objetos de una clase están compues-
tos por objetos de otra clase. Por ejemplo, un automóvil está compuesto por motot [
E
La ClaseB está conformada por objetos de tipo A (uno-muchos). 8.3.4 La composición
Ejemplos La composición es un tipo especial de agregación, que denota una fuerte depen-
dencia de la Clase "Todo", a la Clase "Parte". Se grafica con una flecha rombo de
• Un automóvil tiene llantas. diamante relleno, desde la parte hacia el todo.
Se tienen las clases cliente y empresa donde una empresa reúne a varios clientes.
E
208 Fundación Universitaria Los Libertadores CAPÍTULO 8 209
RELACIONES ENTRE CLASES
-
Ejemplo La notación UML para la generalización es una flecha que conecta la superclase
con sus subclases, apuntando a la superclase.
jemPlO
Esta relación indica que una clase (clase derivada) hereda los métodos y atributos
especificados por una clase (clase base), por lo cual una clase derivada además de 8.5 DEPENDENCIA
tener sus propios métodos y atributos, podrá acceder a las características y atributos
visibles de su clase base (public y protected). Cuando objetos de una clase utilizan objetos de otra clase, existe una relación de
dependencia entre las respectivas clases.
Características
En UML esta relación se representa en el diagrama de clases con una flecha y trazo
La generalización es la relación entre una clase (superclase) y una o más versio- discontinuo en el sentido de las clases, cuyos objetos usan los de otra clase, depen-
nes especializadas (subclases). den de la especificación de la clase usada. Si cambia la especificación, habrá que
hacer cambios en las clases que la usan.
»
Los atributos y métodos comunes a un grupo de subclases se asocian a la super-
clase y son compartidos por las subclases.
»
Se dice que cada subclase hereda las características de la superclase, aunque
también puede agregar, es decir, incluir sus propios atributos y operaciones
específicas.
-----------
»
La ClaseA usa a la ClaseB.
Las dependencias generalmente se utilizan para indicar que una clase utiliza a otra
Un vuelo tiene muchas reservaciones. [
como argumento en alguna operación o sus objetos utilizan alguna de las operacio- Un vuelo tiene un horario.
nes de la otra clase.
Ejemplo
Un vuelo tiene un origen. E
Un vuelo pertenece a una aerolínea.
Se tiene la clase Documento la cual incluye al atributo texto y la clase ImpresoraLas-
ser se encarga de imprimir los Documentos: Un pasajero compra un tiquete. c
Un pasajero compra muchos tiquetes.
Grado de la asociación.
[
2. Plantear tres ejemplos para cada uno de los siguientes enunciados y los corres-
» Técnicas comunes del modelamiento. pondientes diagramas de clases.
E
SUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
RELACIONES ENTRE CLASES
Agregación
2. Construir el diagrama de clases y el código en java para una relación en donde
un cliente puede tener asociadas muchas órdenes de compra y una orden de
1. Completar la información de la siguiente tabla que resume algunas diferencia compra solo puede tener asociado un cliente.
entre agregación y composición. s
Representación Rombo sin color Rombo relleno 4. Consultar los tipos de asociación que existen y navegabilidad.
Puede tener varias
asociaciones que comparte Si 5. Elaborar el diagrama de clases donde un gerente dirige un departamento, y un
los componentes departamento tiene varios empleados y varios empleados trabajan en varios
Destrucción de los proyectos.
componentes al destruir el
compuesto Agregación
Cardinalidad a nivel del
compuesto Construir el modelo de clases en donde se tienen las clases Agenda y Contacto,
donde una Agenda agrupa varios Contactos.
Elaborar un diagrama de clases que modele la relación entre un avión y sus dos
alas.
2. Construir un diagrama de clases en donde se identifique que un auto está inte-
grado por ruedas, caja de cambios, puerta y motor. Diseñe un diagrama de clases que permita modelar las relaciones dadas entre la
universidad, cursos, estudiantes y maestros que describen una universidad con
3. Modelar en un diagrama de clases un Computador conformado por la CPU, el muchos estudiantes, estos asisten a diferentes cursos, que son orientados por
teclado, el monitor y el mouse.
diferentes maestros.
4. Construir una relación de clases que permita modelar la relación: dada por la Generalización
frase "la universidad tiene varias facultades".
Se requiere construir el modelo de diagrama de clases para el siguiente enun-
• Elaborar el diagrama de clases de la relación que existe entre un texto o libro y ciado: Una colección de autos, conformada por autos deportivos, ambulancias,
sus páginas.
camiones. Todas estas clases podrían derivar de una clase Automóvil, de manera
que se aprovechase la definición común de parte de la implementación. Cada
Asociación
clase añadiría los detalles relativos a esa clase particular. Así la clase ambulancia
añadiría el método encenderSirenaO, o la clase camión podría tener la propie-
1. Construir el diagrama de clases de la asociación Juego Participante, donde el
dad booleana estaCargado.
juego:
2. Una compañía editorial produce una serie libros impresos como audio-libros en 8.9 REFERENCIAS BIBLIOGRÁFICAS
discos compactos. Se requiere construir el modelo de clases conformado por:
Weitzenfeld, A. (2005). Ingeniería de software orientada a objetos con UML, Java en
Una clase denominada Publicación que registra el título del libro y el precio Internet. Ciudad: México, Thomson.
de una publicación. A partir de esta clase, derive dos clases:
con aplicaciones. Ciudad:
Booch, G. (1996). Análisis y diseño orientado a objetos
• La clase Libro a la cual le agregue el número de páginas (numero México Addison Wesley.
entero) y
Cada una de las clases debe tener propiedades para acceder a sus respectivos datos.
Elabore un diagrama de clases UML indicando las relaciones de herencia y codifique
un sistema mediante el cual se generen instancias de las clases Libro y CD, donde el
usuario capture sus datos y se inserten en los respectivos objetos.
Dependencia
CAPITULO 8 i 217
216 Fundación Universitaria Los Libertadores
UENA5 PRÁCTICAS DE PROGRAMACIÓN
__ CAPÍTULO 9
'Atracción y
ENCAPSULAMIENTO
SUENAS PRÁCTiCAS DE PROGRAMACIÓN ORIENTADAA OBJETOS ABSTRACCIÓN Y ENCAPSULAMIENTO
: -
rl
Abstracción.
» Encapsulamiento.
E
9.2 INTRODUCCIÓN
Para las estructuras de datos el programador puede contar con una serie de recursos
Figura 23. Concepto de Abstracción.
de software y en tal caso, se tiene el tipo de dato abstracto (TAD), el TAD Pila, el
TAD Cola y otras estructuras de uso común en una aplicación con manejo dinámico
de memoria.
Separar
Del objeto — para -9 Comportamiento
Las API de Java brindan un conjunto de clases útiles para realizar toda clase de del t
problema No es
externa
tareas necesarias dentro de un programa. La API proporciona una interfaz de Java relevante
Complejidad
con un conjunto de métodos y clases de utilidad que se puede utilizar para escribir y entorno
En la visión
t
que
aplicaciones en Java (java.lang, Java.io, java.sql); esto es otra forma de abstracción. t
7trada Aísla
Trar
/que —* información
La abstracción es un principio de la programación orientada a objetos y una es una
..íri-- es__* Un principio
herramienta que permite tratar la complejidad y el entorno del problema. En ge- permiten LI
Pro9ramación
neral, una aplicación de software es una descripción abstracta de una actividad o Y, de ia Orientada a
Objetos
procedimiento que sucede en el mundo real. Tomar Fundamental
para
Características y
comportamiento
Ejemplos El diseño
» Un automóvil es una entidad del que se identifican características como el color, Un objeto
marca, el modelo, el precio, la placa, entre otros. Y algunos de sus métodos o
funciones típicas de esta entidad son el girar a la derecha, girar a la izquierda,
E
ingresan a sus instalaciones. En este caso, dentro las características de la clase Vehí- El encapsulamiento significa reunir a todos los elementos bajo un mismo nombre,
culo están: la marca, el modelo, el modelo, el propietario: número de documento, esto es atributos y operaciones que pueden considerarse pertenecientes a una mis-
nombres y apellidas, dirección, teléfono y correo. ma entidad.
E,
E 222 Fundación Universitaria Los Libertadores CAPITULO 9 i 223
BUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
E
si Ufl módulo cambia internamente sin modificar su interfaz, el cambio no Supondrá
ninguna modificación del sistema.
EjemPlos
public representado con el signo más (+), tanto para atributos como métodos
entre otros; el usuario utiliza el DVD por lo que ofrece y no ingresa en el interior
para hacer nuevas acciones o realizar alguna de ellas. E
lo cuales son accesibles dentro y fuera de la clase pudiendo ser llamados por 2. La clase Persona encapsula los atributos del nombre, la edad, el método cons-
cualquier clase. tructor y los métodos set y get.
[
» private representado con el signo menos (-), ya sean atributos o métodos los
»
cuales solo son accesibles dentro de la misma clase.
protected representado con el signo numeral (#) para los atributos o los mé-
todos que son accesibles dentro de la implementación de la misma clase y sus
clams Persona {
private String nombre;
private mt edad;
U
clases derivadas o subclases (clases hijas).
la
e— Definen
los
Mecanismo — que--* Agrupa —los
Comportamientos
L
o métodos
en— Clases
}
this.edad = edad;
E
Public_J
Complejidad 4, 7>!
Niveles
por medio — csmo-3 Private
de acceso
[
SUENAS PRÁCTICAS DE PROGRAMACIÓN IENTADA A OBJETOS EN
1;1VIL ABSTRACCIÓN Y ENCAPSUIAMIENTO
- -
ABSTRACCIÓN ENCAPSULAMIENTO Abstracción
Exige que sus características y métodos Determinar las características que se pueden abstraer de los estudiantes de la
La abstraccion resalta los aspectos importantes -
A través de la abstracción conseguimos extraer » Liste siete elementos que usted emplea normalmente sin conocer como es el
las cualidades principales sin detenernos en los Especifica los datos y comportamiento
-
...............................................................
..c
R
E
Completar la información de la siguiente gráfica en base a los modificadores de
acceso y que elementos involucran: 4 98 REFERENCIAS BIBLIOGRÁFICAS
Barnes D., Kólling M. (2007), Programación orientada a objetos con java. Ciudad
Madrid, Prentice Hall.
E
c
MODIFICADORES DE ACCEDO
protected
No ,7°
II
BIBLIOTECA
CENTRAL
default \\- HERNANDO
No SANTOS
private No EH T
E
228 Fundación Universitaria Los Libertadores CAPlTULO 9 a 229
E
BUENA5 PRÁCTICAS DE PROGRAMACIÓN
__ CAPÍTULO]O
HERENCIA
SUENAS PRACTICAS DE PROGRAMACIÓN
HERENCIA
» superclase.
Subclase.
» Protected.
E
» Extends.
E
Super.
10.2 INTRODUCCIÓN
LI
E.
232 Fundación Universitaria Los Libertadores CAPITULO 10 1 233
E.
BUENAS PRÁCTICAS DE PROGRAMACIÓN HERENCIA
Un
estudiante
es una
persona
por 4--ai
ejemplo encontrar
Un mecanismo — para-4 Definir
clases — a partir-3
El perro De- otres
es un / clase
mamífero tdentifica / Color co1or color
Atributos
tamaño tamaño tamaño
Las que
Una Relación Hentr
La dase 4- es La superciase
clases comparte
peso peso peso
existente o clase base edad
Métodos edad edad
1
La herencia permite implementar las relaciones en las cuales un objeto pertenece a Mamífero
una clase que es hija de otra clase, lo que significa que, la clase hija hereda de su
clase padre, la estructura y el comportamiento de esta.
E
234 Fundación Universitaria Los Libertadores a......................................................... CAPIIULO 10 a 235
BUENAS PRÁCTICAS DE PROGRAMACIÓN HERENCIA
1 '!1WWW1
E
1 UD
00
marca marca marca marca
nombre nombre modelo
modelo modelo modelo
apellido apellido
edad
sexo
edad
sexo
color
velocidad
color
velocidad
color
velocidad
color
velocidad E
» Avión es un Transporte » Bus es un Transporte [
Se puede observar que se hay características comunes y propias de cada uno (es-
tudiante, profesor y médico). Los atributos comunes permiten agrupar en una sola » Barco es un Transporte » Tren es un Transporte
entidad denominada Persona.
Es un(a)
Cuando se declara una clase, se definen las características o variables y los métodos
Estudiante. Profesor Médico o comportamientos que pueden tener los objetos que pueden ser creados a partir E
de la clase.
Por ejemplo, a partir de la clase Persona, se define nombre, apellido y el genero, con
sus respectivos constructores y métodos de acceso y modificación de las variables
La herencia propende por utilizar una clase ya creada como la clase mamífero para de instancia.
tomar las características (color, tamaño, peso, edad), en clases más especializadas
o derivadas, para el caso, perro, ballena, delfín, y a partir de la clase base reutilizar
el código que sea común con la clase base y solamente definir nuevos métodos o
redefinir algunos de los existentes.
E
236 Fundación universitaria Los Libertadores 1-------------------------------------------------------- CAPITULO 10 m 237
SUENAS PR,CTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
Mviii' HERENCIA
Persona para el ejemplo la clase Persona es la superclase, la cual agrupa las clases con pro-
piedades y comportamientos comunes y la clase Estudiante es la clase derivada o
-nombre: String
clase hija.
-apellido: String
-genero: char
+Estudiante(
+Estudiante(matricula: long)
A
+setMatricula(matricula: long)
-i-getMatricula: long Estudiante
+toStringO: String
-matricula: long
+Estudiante()
Las relaciones de herencia se establecen entre clases, puesto que, cubren a todos los +Estudiante(matricula: long)
objetos que se crearán como instancias de esas clases. La clase Padre se denomina +setMatricula(matricula: long)
superclase, es deciç la clase de la cual heredan o se derivan otras clases y las clases +getMatriculaO: long
hilas, o las que heredan se denominan subclases. ~toStringQ: String
[
BUENA5'RACTICAS DE PROGRAMACIÓN ORIENTADAA OBJETOS EN HERENCIA
Java solo maneja herencia simple, en el ejemplo la subclase Estudiante, comparte la Un DVD es una unidad de almacenamiento, que a su vez es un tipo de com-
E
estructura y el comportamiento de una sola superclase Persona, en otras palabras, ponente de un computador.
una subclase puede heredar datos y métodos de una única clase.
Al decir que un elemento es un tipo de otro, se establece una especialización: E
El símbolo # que se antecede a los atributos nombre, apellido y género corresponde
al modificador protected, que puede ser utilizado para un atributo o un método, a Donde elemento tiene las características generales compartidas y otras propias.
indicando que es accesible en la clase en donde se define y en cualquiera de sus
subclases en otras palabras al heredar si se puede usar desde la clase derivada. Para » La herencia es una manera de representar las características que se reciben del E
indicar que una clase deriva de otra, heredando sus propiedades (métodos y atri- nivel más general.
butos), en java se usa la palabra extends. Codificando las clases del ejemplo sería:
Codificación de las ciases Persona y Estudiante del ejemplo
La superciase, clase base o clase Padre:
Ejemplos
public Persona(String nombre, String apellido, char genero) { public void setMatricula(long matricula) {
this.nombre = nombre; this.matricula = matricula;
this.apellido = apellido; }
this.genero = genero;
} public long getMatricula() {
return matriculo;
public String getNombre() { }
return nombre;
} @Override
public String toString() {
public void setNombre(String nombre) { return ""~matricula
this.nombre = nombre; }
E
Al heredar de una clase base, se hereda tanto los atributos como los métodos, mien-
c
tras que los constructores son utilizados, pero no heredados. -largo: double
E
su perclase.
Ejenipo 1riñilóIwscéIes. E
Programa que calcula el área del rectángulo, de los triángulos rectángulo e isósceles, ~Triangulolsosceles(color: String, base double, altura: double)
a partir de la base y la altura e imprimiendo el color de cada figura geométrica. +areaTriangulolsoscelesO: double
L
El modelamiento de las clases se realiza a partir de:
E
• Supercfase Poligono con las Subclases: Triángulo y Rectángulo.
Un rectángulo es un polígono,
o SuperClase Triangulo con las subclases: Triangulolsoscefes y TnanguloRec-
Un triangulo es un polígono tangulo.
}
this. color=color; E
public String getColor() {
}
return color;
E
}
'E
E
244 Fundación Universitaria Los Libertadores CAPITULO 10 245
E
BUENAS psÁcTics DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
HERENCIA
246 Fundación Universitaria Los Libertadores 1-------------------- - ----------------------------- ------- CAPÍTULO 10 1 247
BUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJEEOS EN HERENCIA
-c
10.7 PRE5UNTAS DE REV5ÓN DE CONCEPTOS 3. Codificar en Java que a partir del siguiente diagrama de clases:
E
Objetivos de la herencia.
Como identificar que se debe aplicar herencia para resolver un problema #nombre: String
Persona. - :
E
#apellido: String
#edad: mt
»
Tipos de herencia.
E
+getCarrera( ): String
entre otros.
+getSemestreO: mt
~toStringO: String
Crear subclases de las creadas anteriormente, como Perro, León, Delfín.
El banco El Ahorrador Feliz, requiere la construcción de un sistema que le 10.9 REFERENCIAS B1BLIOGRÁFICAS
permita controlar las cuentas de sus clientes y para ello las clasifica en dos:
Cuentas de ahorros y Cuentas corriente. Todas las cuentas del Banco tienen Aguila L. J. (2004). Fundamentos de programación algoritmos y estructura de da-
los siguientes datos: tos. Tercera Edición. Ciudad: México: McGraw Hill.
• Número de cuenta (dato numérico). Barnes D., Kólling M. (2007), Programción orientada a objetos con Java. Ciudad
Madrid, Prentice Hall.
• Nombre del cliente (cadena).
Bertrand M. (1999). Construcción de software orientado a objetos(2a edición) Ciu-
• Saldo (dato numérico con fracción decimal). dad: Madrid, Prentice Hall.
Con Cada Cuenta se pueden realizar las siguientes operaciones: Booch, G. (1996). Análisis y diseño orientado a objetos con aplicaciones. Ciudad:
México Addison Wesley.
• Consultar datos: a través de sus propiedades.
Deitel y Deitel. (201 2). Cómo programar en Java. Ciudad: México Editorial Pearson
• Depositar: Incrementa el saldo con la cantidad de dinero que se deposita. (Prentice Hall).
• Retirar: antes de hacer el retiro, se debe verificar la suficiencia de saldo y en Fowler, M., y Scott, K. UML. (1999). Gota a gota. Ciudad: México Editorial Pearson.
caso de aprobarlo, se disminuye el saldo.
Graig, L. (2003). UML y Patrones: Una introducción al análisis y diseño orientado a
Las cuentas de ahorros presentan las siguientes características: objetos ya! proceso unificado (2d edición) Ciudad: México Prentice Hall.
e Porcentaje de interés mensual. Rumbaugh, i., iacobson, 1., y; Booch, G.: (2005). The Unified Modeling Langua-
ge User Guide, San Francisco: Addison-Wesley, Reading, Mass. lSBN-13: 078-
• Método para depositar los intereses el primer día de cada mes. 5342267976 ISBN-lO: 0321267974
• Solamente se puede retirar un monto menor o gualai saldo Villalobos, i., y Casallas, R. (7006). Fundamentos de programación, aprendizaje ac-
tivo basado en casos. Ciudad: México Editorial Pearson.
Las cuentas corrientes presentan las siguientes características:
E
E
E
E
E
E
CAPITULO 11 c
E
POLIMORFISMO
U
BUENAS PRÁCTICAS DE PROGRAMACIÓN
POLIMORFISMO
u-
Polimorfismo.
» Polimorfismo de subtipado.
» Sobrecarga de métodos.
» Sobreescribir métodos.
11.2 INTRODUCCIÓN
El término polimorfismo hace referencia a que una característica de una clase puede
tomar varias formas; y en Programación Orientada a Objetos es una propiedad que
hace referencia que más de un objeto puede crearse usando a misma clase base,
por ejemplo, se tiene un teléfono base, con la capacidad de timbrar y tener un au-
ricular; para luego óbtener un teléfono digital, inalámbrico, con botones para mar-
car; y posteriormente un teléfono celular, entonces polimorfismo es la capacidad del
código de un programa para ser utilizado con diferentes tipos de datos u objetos.
/ç\ UNI- 1
- HER4A O0
-) S.WT ,c
1"
E
Para el caso de los métodos, una clase de polimorfismo que se denomina sobre-
Figura 26. Concepto de Polimorfismo. carga, específicamente sobrecarga de métodos, se define como el uso de varios
métodos con el mismo nombre y cuyo contenido es diferente.
La información
11.4 SOBRECARGA DE MÉTODOS £
/ de Capacidad --- de tener -3 Distintas
formas
Pide el
servicio 4-- se— A que objeto]
La sobrecarga consiste en implementar dos o más métodos que compartan el mis-
es
Consecuencia
de la —+ encia
mo nombre dentro de la misma clase, pero con parámetros diferentes. Los métodos
directa
perndoresJ F- se diferencian por su firma. r
Mismo
COfl4 Métodos V
de
I
Sobrecarga
LsbuIdad
que Variable
K tomen Java permite la sobrecarga de métodos e identifica entre métodos con diferentes
nombre una
Referencia " - firmas, evitando la necesidad de crear métodos diferentes que en esencia hacen lo
[
Métodos apiicado— Sobreescritura 4—puede rPoIirnorfietno L mismo. También hace posible que los métodos se comporten de manera distinta
ser de
Valores
relacionados
basados en los argumentos que reciben.
/ 1 Diferentes
permite de
Enlace dinámico enviar L?itos
Con herenciaj
Ejempios
1 el mismo para
Diferentes
tipos
£
significa forma L mensaje
/ \
1 implementar Actuar de 1. Sobrecarga del método actualizarDato.
1
Receptor
del mensaje Loe unir forma distinta
el
Polimorfismo 1 según
Método
Identifica en
public class Act-ualizacion {
la ejecución con El mensaje
Diferente
void actualizarDato(int x) {
El código clase
que r
1
Ejecutará
un objeto
void actualizarDato (String x) {
[
}
1L3 POLIMORRSrv1O
void actualizarDato (long x) {
Es la propiedad que Indica que un elemento puede tomar diferentes formas. Para la
£
programación orientada a objetos, el elemento puede ser un atributo, un método
}
o un operador.
Por ejemplo, en Java un caso muy común es el del operador más '-1-', el cual se pue- void actualizarDato (float x) { r
de utilizar para sumar números y para concatenar cadenas, ya que el operador está
sobrecargado de tal manera que cuando se utiliza Java reconoce el tipo de opera-
1
cIón suma o concatenación respectivamente.
[
void actualizarDato (double x) {
1 E
256 Fundación Universitaria Los Libertadores 257
CAPÍTULO 11
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN POLIMORFISMO
á.
Se puede observar que el tipo de parámetro, es diferente en cada método imp1e publiC class SobreCargaProducto {
mentado, como por ejemplo: mt, long, String, float, double. public mt obtenerProducto(int x, mt y){
return x*y;
}
public mt obtenerProducto(int x, mt y, mt z){
2. Sobrecarga del método obtenerSuma el cual cambia el número y tipo de pará- return x*y*z;
metros: }
public mt obtenerProducto(String strl,String str2){
mt x=convertirEntero(strl);
public class Sunia{ mt y=convertirEntero(str2);
/* Métodos sobrecargados *7 return x*y;
}
double obtenerSuma (String x, String y) { private mt convertirEntero(String numero){
return Integer.parselnt(riumero);
} }
}
double obtenerSunia(double x, double y) {
}
* clase que modela los datos para la sobrecarga de los métodos
double obtenerSuma (double x, double y, double z) { -* @version 1.8
*7
} public class MainSobrecarga {
} public static void mairi (String []args){
mt a = 2;
intb=4;
En la clase suma, se definen tres métodos con el mismo nombre obtenerSuma, pero mt c = 5;
con listas de argumentos diferente. La diferencia está en el número y el tipo de String strl = "8";
argumentos en cada método. String str2 = "7";
SobreCargaProducto sp= new SobreCargaProducto;
System.out.println("Nlétodo con dos parámetros: "~
a+" x "~b+" = "+sp.obtenerProducto(a,b));
Programas de ejemplo System.out.println("Método con tres parámetros: "+
a+" x "+b+" x "+c~" "+sp.obtenerProducto(a,b,c));
Sobrecarga de métodos para calcular producto, el cual cambia el número y tipo de SystBii .out println( todo con parámetros de ti String:
.
E
11.5 SOBRECARGI\ DE CONSTRUCTORES
Una clase puede tener más de un constructor y los constructores se diferencian por
/* *
clase que modela la sobrecaraga de constructores para calcular el
volumen del cuboide
E
la cantidad, el tipo y el orden de los parámetros. *7
Ejemplo
publiC class Cuboide {
private double ancho;
private double alto;
E
Sobrecarga del constructor de la clase Cuboide, la cual está conformada por tres
constructores, con un número de diferentes parámetros:
Diagrama de clases
private double profundo;
uboide
*7
public Cuboide() {
E
this.ancho = 0;
SobreCargaConstructor
~maintargs; String)
-ancho; double
-alto; double
-profundo: double
+Cuboide() }
this.alto = 0;
this.profundo = 0; c
+Cuboide(medida: double)
~Cuboide(ancho: double, alto: double, profundo: double)
~obtenerVolumen( ): double
/**
}
System.out.print1n('El volumen de cubo3 es " + volumen); public Cuboide(double ancho, double alto, double profundo) {
this.ancho = ancho;
this.alto = alto;
E
}
this.profundo = profundo;
} c
260 Fundación Universitaria Los Libertadores CAPÍTULO 11 . 261
1
/ Ejemplos
netodo que retorna el volumen del cuholde
@return volumen 1. Ejercicio conformado por las clases, Persona, Estudiante, que implementa el
*1 método obtenerDatos, método que es heredado de la clase Persona y sobre
public double obtenerVolunien() { escrito en la clase Estudiante.
return ancho * alto * profundo;
}
}
-id: String
-nombre: String
Que al ejecutar el programa imprimen: +Estudiante(id: String, nombre: String, carrera: String)
~obtenerDatos( ): String
El volumen de cubo 1 es: 0.0.
+main(args: 5trinq
11.6 SOBREESCRITURA DE MÉTODOS
E
public String getNombrej){
}
return nombre;
La clase Persona sobreescribe el método toString indicando que devuelve el nombre
de la persona: E
public String obtenerDatos(){
}
}
return id ~" "+ nombre; pub]-iC class Prueba {
public static void main(String[] args) {
Persona p = new persona("Mercedes");
E
System.out.println("Nombre a partir del método
public class Estudiante extends Persona {
private String carrera;
public Estudiante(s-tring id, Stringnornbre, String carrera){
+p .toStringO);
System.out.println("Nombre a partir del objeto "+p); E
r
}
super(id, nombre);
}
this.carrera = carrera;
} Se crea objeto p de la clase Persona, al imprimir el objeto, por medio de la sentencia
public String obtenerDatosO{ system.out.println("Nombre a partir del objeto "+p); se envía, como
}
}
return getld() + getNombre() + carrera; parámetro un objeto que llama al método toString e imprime "Mercedes', el pro-
ceso es el mismo cuando se invoca con el objeto p.toString( ). E
public class PruebaEstudiante {
public static void main(String[ 1 args) {
Persona unEstudiante = new Estudiante("1@2","Car1os
3. A partir de la relación de herencia de la clase base Cuadrilatero que definen los
métodos calcularArea y calcylarPerimetro; las subclases Cuadrado y Rectángulo
E
Rodriguez', "Ingenieria de Sistemas"); que redefinen estos métodos ya que el cálculo del área y el perímetro de cada
System.our.println( unEstudiante.obtenerDatos());
}
de estas dos figuras geométricas es diferente.
E
}
Cuadrilatero
tarea: doubie
#perimetro: doubie
~cuadruatero( 1
1PrúebaSobreEsritrI
~obtenercalcuioscuadradO(
[
2. Cada clase de java hereda de la clase Object, y la clase Object tiene varios mé- +obtenerArea( 1: doubie ~obtenercaicuiosRectanguio( 1
~obtenerPeriroetrol 1: double
E
todos dentro de los que está el método toString( ). +main(args: string)
-i-calcuiarArea( 1
+caicuiarPerimetro()
public class Persona{
private String nombre;
public Persona(String n){
}
this.nombre = n;
Cuadrado
-lado: double -base: doubie
-altura: double
E
+cuadrado()
//aqui se sobreescribe el metodo ~Rectangulo()
4
~getLado( 1: doubie
Override ~setLado(Iado: double) +gettase( 1: doubie
+caicularArea( 1 +setBase(base: doubie)
public String toString(){
~calcuiarperimetro( 1 -i-getAltura(1: doubie
return nombre; ~set,Aitura(aitura: doubiel
} ~calcuiarArea( 1
}
+calcuiarPerimetro()
E
E
264 Fundación Universitaria Los Libertadores 1---------------------- - -- -------------------------- -------- CAPiTULO 11 1 265
POLIMORFISMO
E
System.out.println("Lado "+unCuadrado.getLadoQ) 11.7 ENLACE DINÁMICO
System.out.println("Perímetro del cuadrado: £
r+unCUadrado . obtenerPerimetroQ); Un mensaje con una determinada firma puede enviarse a cualquier objeto que lo
System.out.println("Área del cuadrado: incluya en su interfaz. Pero como diferentes objetos pueden implementar un mismo
"i-unCuadrado . obtenerArea () ) método de manera distinta, el resultado del mensaje no depende en sí del mismo
} mensaje, sino de su receptor. E
El enlace dinámico significa que el receptor del mensaje se determina durante la
public void obtenerCalculosRectangulo{ ejecución del programa.
System.out.println('\nEl Rectangulo\n");
Rectangulo unRectangulo = new RectanguloQ; polimorfismo y enlace dinámico no son exactamente lo mismo: el enlace dinámico
unRectangulo. setBase(3); es el mecanismo que hace posible implementar el polimorfismo.
unRectangulo. setAltura(4);
unRectangulo. calcularPerimetroO; Los métodos polimórficos se utilizan cuando adoptan diferentes formas de imple-
unRectangulo. calcularArea o, mentación según el tipo de objetos, cumpliendo el mismo objetivo. Por ejemplo,
System.out.println("Base: "+unRectangulo.getBase); lanzar puede ser implementado para una objeto balón de: fútbol, baloncesto, volei-
System.out.println("Altura: "+unRectangulo.getAlturaQ);
System.out. println("Perímetro del rectángulo:
bol; mover una cualquier ficha de un tablero de ajedrez.
E
"+unRectangulo. obtenerPerimetro()); Ejemplos
System.out.println("Área del rectángulo:
"+unRectangulo. obtenerArea()) El lenguaje C es uno de los lenguajes de programación más populares que existen
hoy en día. El lenguaje C++ Es un lenguaje derivado del C, pero mucho más comple-
E
}
jo, ya que incluye la programación orientada al objeto; y el lenguaje de Programa-
ción Java, es un lenguaje orientado a objetos, con una sintaxis similar a C++, pero
public static void maln(String[] args) { algunos conceptos de diseño diferentes. E
//se dene el objeto pse de la clase
PruebaSobreEscritura a Lenguaje C, es un Lenguaje de Programación, que tiene características genera-
PruebaSobreEscritura pse = new PruebaSobreEscrituraQ;
1/el objeto pse invoca los métodos
les como un nombre, grado de dificultad y no es orientado a objetos.
E
pse. obtenerCalculosCuadrado; » C++ es un Lenguaje de Programación Orientada a Objetos.
pse.obtenerCalculosRectanguloQ;
}
} C++ es una derivación de Lenguaje C. E
» Java es un Lenguaje de Programación Orientada a Objetos.
E
268 Fundación Universitaria Los Libertadores CAPÍTULO 11 269
BUENAS PRACTICAS DE PROGRAMACIÓN
POLIMORFISMO
«create»-i-Cuadrado() «create»-i-Triangulo(
» Como identificar que se debe aplicar polimorfismo para resolver un problema. ~getLadoO: double +getBaseO: double
+settado(lado: double) +setBase(base: double)
+calcularArea() +getAlturaO: double
~calcularPerimetro( ~setAltura(altura: double)
11.10 EJERCICIOS
+calcularArea()
+calcularPerimetro(
1. Construir a aplicación en Java a partir de la relación de herencia de la superclase
pruebaSobreEscritúra
Figura que define los métodos calcularArea y calcularPerinietro, las
subclases Circunferencia, Cuadrado, Triángulo y Rectangulo; rede-
finen estos métodos ya que el cálculo del área y el perímetro de cada de estas ~obtenerCalculosCircunferencia()
figuras geométricas es diferente. +obtenerCalculosCuadrado()
+obtenerCalculosRectangulo()
+obtenerCalculosTriangulo()
+main(args: String)
2. Construir una aplicación en Java que aplique los conceptos de sobrecarga de 11.11 REFERENCIAS BIBLIOGRÁFICAS
constructores para inicializar las dimensiones de un rectángulo, teniendo en
cuenta los siguientes indicaciones: Bertrand M. (1999). Construcción de software orientado a objetos (2 edición) Ciu-
dad: Madrid, Prentice Hall.
a. El primer constructor de Rectangulo inicializa un nuevo Rectangulo con
valores por defecto (por ejemplo altura = 0.0, ancho = 0.0). Booch, G. (1996). Análisis y diseño orientado a objetos con aplicaciones. Ciudad:
México Addison Wesley.
b. El segundo constructor inicializa el nuevo Rectangulo con la altura y ancho
a partir de datos ingresados por teclado. Deitel y Deitel. (2012). Cómo programaren Java. Ciudad: México Editorial Pearson
(Prentice Hall).
Fowler, M., y Scott, K. UML. (1999). Gota a gota. Ciudad: México Editorial Pearson.
Buses.
» Camiones.
» Helicópteros. U Ni
Aviones.
q; BIBLIOTECA
CENTRAL
\\ HERNANDO
C
\\e' SANTOS
Rin
, CAPÍTULO 12
lnterfacey
CLASES ABSTRACTAS
BUENAS PRÁCTICAS DE PROGRAMACIÓN
INTERFACE Y CLASES ABSTRACTAS
» Interface.
» Clases abstractas.
12.2 INTRODUCCIÓN
En este capítulo se abordan los temas de interfaz y clase abstracta, donde una in-
E terfaz es una plantilla para la construcción de clases la cual está conformada por la
declaración de métodos sin implementar, que especifican un protocolo de compor-
tamiento para una o varias clases. Lo anterior permite organizar la programación y
a su vez obliga a que ciertas clases utilicen los mismos métodos (nombres y paráme-
E tros) y establecen relaciones entre clases que no estén relacionadas.
En Java una clase puede implementar una o varias interfaces, en ese caso, la clase
debe proporcionar la declaración y definición de todos los métodos de cada una
de las interfaces o bien declararse como clase abstract. Por otro lado, una interfaz
puede emplearse támbién para declarar constantes que luego puedan ser utilizadas
por otras clases.
E Las clases abstractas son un tipo de clases que permiten crear métodos vacíos, es
decir, no tienen cuerpo de declaración, no tienen las llaves (} ni código dentro de
ellos y deben estar precedidos por la palabra clave abstract. Si una clases contiene
uno o más métodos abstractos, está clase debe es abstracta.
ir
Cualquier clase que declare que implementa una determinada interface, debe com-
}
}
E
«interface»
prometerse a implementar todos y cada uno de los métodos que esa interfaz define.
ISaludo
Esa clase, además, pasará a pertenecer a un nuevo tipo de datos extra que es el tipo
de la interface que implementa. E
public class Viale implements Transporteereo {
public void despegar( ) {
System. out . println("despegar");
E
}
public void aterrizarO{
}
System . out . printlnÇ'aterrizar"); E
}
Las interfaces actúan, por tanto, como tipos de clases. Se pueden declarar variables
En este ejemplo se define la interface Saludo que tiene un atributo y dos métodos que pertenezcan al tipo de la interfaz, se pueden declarar métodos cuyos argumen-
y la clase Herencia que mplementa los métodos de la interface. tos sean del tipo de la interface.
Una clase puede implementar tantas interfaces como desee, pudiendo, por tanto,
pertenecer a tantos tipos de datos diferentes como interfaces implemente. En este
sentido, las interfaces suplen la carencia de herencia múltiple de Java (y además
corrigen o evitan todos los inconvenientes que del uso de esta se derivan).
E
RIJENAS PRACTICAS DE PROGRAMACIÓN INTERFACE Y CLASES ABSTRACTAS
Un interface es una lista de métodos donde solo están las cabeceras de métodos » Permite simular herencia múltiple.
sin implementación, que define un comportamiento especifico para un conjunto de
objetos. Algunas de sus características son: publiC interface lUno {
public abstract void imprimirMensaielO
La Interfaz es public o deFault. Tal como se observa a continuación: public abstract void mniprirnirMensaie2O;
}
public interface Identificadorin-ter-Faz {
II Cuerpo de la interfaz public interface IDos {
} public abstract void mniprimirMensaie3O
public abstract void imprimirMensaie4O
» Los atributos de la interface son public static final, así como se presenta }
el siguiente ejemplo:
public class pruebalnterfaces implements lUno, IDos {
public ínter-Face PuntosCardinales {
public statjc final mt NORTE = 1; @Override
public statjc final mt SUR = 2; public void imprimirMenSajel() {
public static final mt ORIENTE = 3; System.out . prmntln("Mensaie
public static final mt OCCIDENTE = 4; }
} @Overridé
public void imprimirMensale2() {
Una rnterfaz puede contener identificadores de variables constantes; estas variables system.out.println("MeflSaie 2");
cnstantes se heredan por cualquier clase que implemente la interface. El siguiente }
código muestra un ejemplo:
@Override
public interface IdentificadorIn-terfaz { public void imprimirMensaje3() {
public static final mt VALOR MAXIMO = 10; System.out println("Mensale 3');
} }
Todos los métodos de una interíace son métodos public abstract. Y las fir- @Override
mas de métodos sin implementación, como se observa en las siguientes líneas public void imprimirMenSaie4() {
de código: system.out.println("MeflSaie 4");
}
public inter-Face Figura {
public static void main(String[] args) {
public abstract double calcularArea( ); pruebalnterfaces prueba = new PruebalnterfacesO;
public abstrac-t double calcularPerinietro( ); prueba. imprimirMensaielO
prueba. imprinhirMensaje2O
} prueba. imprimirMensaje3O;
prueba. imprimirMensaie4O;
}
Diagrama de clases. Es necesario crear una clase que extienda la clase abstracta e implemente todos los
c
métodos que en la clase abstracta hayan sido declarados abstract. Por ejemplo:
lUno
public abstract class ClaseAbstracta {
public abstract void metodoUno;
E
public String toString() {
return "Clase Abstracta";
\ }
\
+imprimirMensajel()
+imprimirMensaje2()
~imprimirMensaie3()
Pruebaínterfaces El metodoUnoQ, es un método abstracto que incluye la implementación (no tiene
código), sólo se define la firma del método (nombre y parámetros). E
+imprimirMensaje4()
+main(arqs: Strrng) El método toStringQ, en cambio, no es un método abstracto y sí incluye imple-
mentación.
[
El USO de las interfaces se puede aplicar en: class SubClase extends ClaseAbstracta {
» El modelado de herencia múltiple, imponiendo conjuntos múltiples de compor- En la ClaseAbstracta, se define el método abstracto despedir que es implementado
tamientos a la clase. en la clase HerenciaAbstracta.
[
E
284 Fundación Universitaria Los Libertadores a------------------------------------------------------------- CAPÍTULO 12 a 285
1 BUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN INTERFACE Y CLASES ABSTRACTAS
u-
im
public void obtenerNombre(String nombre){ 2. Construir una aplicación a partir del siguiente diagrama de clases en UML rea-
super.nombre = nombre; lizando la codificación Java de una aplicación que permita dar respuesta a los
} siguientes requerimientos:
@Override
public void despedir() { Que permita calcular el área, el volumen y obtener el nombre de la figura para
System.ou-t.println("Hasta pronto "+super.nornbre); lo cual se recomienda implementar la Interfaz Figura.
}
public static void main(String. . args){
HerenciaAbstracta ha = new HerenciaAbstractaO; Figura
r
}
}
Cuando una clase implementa varias interfaces, ¿se puede considerar que es
herencia múltiple?
Punto
-o: nt
12.6 EJERCICIOS -y: mt
*yunto()
*Punto)valoíX: mt, nalorY: nt)
1. Construir una aplicación con el respectivo diagrama de clases en UML y la co- establecerX)vaIorX: nt)
+obtenerXO: nt
dificación Java de una aplicación que permita dar respuesta a los siguientes Figura O +establecerY)valorY: nt)
requerimientos: ,obtenerYO: nt
uobtenerArea)): double
~obtenerVolumeoQ: double
*obtenerNorobreo: Oong
Que permita calcular el área y el perímetro para las siguientes figuras geométri- -..toStongQ: Str=g
cas: (para lo cual se recomienda implementar la Interfaz IFigura).
Cilindro
public inter-Face IFigura { -radio: double
-altura: double
public double calcularArea( ); ~c:rculo))
a-Circulo)n: lot, y: mt, valorRadio: double) +cmrculo))
public double calcularPerimetro( ); nestablecerRadio)nalorRadio; double) ~circu)n(x: nt, y: nt, radio: double, nalorAltura: Anuble)
*obtenerRadioO: double +ettablecerAltura)valorAitura: doubl)
} nobtenerDiametroO: double *obtenerA)turaO: double
+obtenercircunferenciao: double *obtenerArea) ): double
nobtenerAreaO: dauble *obteoerVoluoienO: double
Las Clases que irnplementa esta interfaz son: +obtenerNombreO: Stíing *obtenerNombreO: String
ntoStringo: String +toString) ): String
» La circunferencia. a
PruebaInteraz
» El rectángulo.
*main)Brgt Strrnq)
» El triángulo equilátero.
286 Fundación Universitaria Los Libertadores 1------------------------------------- --- ----------------------- CAPITULO 12 1 287
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJOS EN INTERFACE Y CLASES ABSTRACTAS
u----------------------------------------------------------
3. Construir una aplicación a partir del siguiente diagrama de clases en UML rea-
izando la codificación Java de una aplicación que permita dar respuesta a los
Puñto
siguientes requerimientos:
-x:mt
Que permita calcular el área, el volumen y obtener el nombre de la figura para -y:mt
lo cual se recomienda implementar la clase abstracta Figura
+Punto() <abstract>Figura.
public abstraCt class Figura { +Punto(valorX: mt,
valorY: mt)
~establecerX(valorX: mt)
// retorna el área de la figura; 0.0 de manera predeterminada
+obtenerXQ: mt +obtenerAreaQ: double
+establecerY(valorY: mt) +obtenerVolumenQ: double
public double obtenerí\rea()
return 0.8;
{
~obtenerYQ: mt +obtenerNomóreQ: String
+obtenerNombreO: String
} +toStringQ: String
// método abstracto, sobrescrito por las subclases -radio: double -altura: double
public abstract String obtenerNombreO;
-i-Circulo(
+Circulo(x: y: mt, mt,
valorRadio: double) +Circulo()
} ~establecerRadio(valorRadiO double) +Circulo(x:mt, y: nt, radio: double,
+obtenerRadioO: double valorAltura: double)
-i-obtenerDiametroO: double +establecerAltura(valorAltura:
+obtenerCircunferenciaO: double double)
«abstract» +obtenerAlturaQ: doubie
Figura -4-obtenerAreaO: double
+obtenerNombreO: String +obtenerAreaQ: double
+toStringQ: String +obtenerVolumenQ: double
+obtenerNombreQ: String
+toStringO: String
PruebaHéreflciáAbstracta
+main(args: String)
CAPITULO 12 289
288 Fundación Universitaria Los Libertadores
12.7 REFERENCIAS BIBUOGRÁFICAS
Deitel y Deitel. (2012). Cómo programaren Java. Ciudad: México Editorial Pearson
(Prentice Hall).
Fowler, M., y Scott, K. UML. (1999). Gota a gota. Ciudad: México Editorial Pearson
Rumbaugh, J., Jacobson, 1., y; Booch, G.: (2005). The Unified Modeling Langua
CAPÍTULO 13
E
Modelado Orientado a Objetos y
E
E
[
»
Diseño Orientado a Objetos.
Diagramas UML.
E:
Aplicaciones de Software.
[
13.2 INTRODUCCIÓN
Identificar Objetos
[
/
permfte
Representación real
Fde4
Análisis
Orientado
Sistema
E:
/ a Objetos
Modelado Orientado
Induye
a0bjet0s
Diseño
utifizan —9.
Diagramas
UML sE:
Orientado /
a Objetos
292
fndaCiófl Universitaria Los Libertadores
CAPÍTULO 13 a 293
r
r BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS ENfi
- --
a-
MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
E
13.3 ANÁLISIS ORIENTADO A OBJETOS
E Es un método de análisis que examina los requisitos desde la perspectiva de las clases
13.4 ESCENARIOS
» Configuración (setting). Por ejemplo, una oficina con un empleado enfrente del
Escenarios y subescenarios. Agentes o actores. El auxiliar contable es el único agente en el escenario que se
r
describe, pero es normal en las actividades humanas participen más de un actor,
» Prototipos y su evaluación. cada uno con sus objetivos.
E » Diagramas de casos de uso. » Cada escenario implica por lo menos un agente y al menos un objetivo. En el
caso de que haya más de un actor y objetivo, se define un agente como actor
La especificación de requisitos o requerimientos comprende las tareas relacionadas principal.
con la determinación de las necesidades o de las condiciones a satisfacer para un
r software nuevn o modificado, tomando en cuenta los diversos requerimientos de
los clientes. El propósito es hacer que los mismos alcancen un estado óptimo antes 13.5 PROTOTIPO
de obtener la fase de diseño en el proyecto. Los requerimientos deben ser medibles,
comprobables, sin ambigüedades o contradicciones. Un prototipo puede ser un esquema en papel de una pantalla o pantallas, una ima-
gen electrónica, una simulación en video de una tarea, una representación de una
Para la especificación de requerimientos se debe: red de computadores, entre otras; de hecho un prototipo puede ser cualquier cosa,
desde una representación basada en papel hasta un artefacto o pieza de software.
Identificar las necesidades del usuario (del negocio).
[
Son características de los prototipos:
Describir los objetivos de la aplicación.
Una representación de aquellos aspectos del software que serán visibles para el
» Definir características y funciones generales de la aplicación. cliente (por ejemplo, la configuración de la interfaz con el usuario y el formato
[
de los despliegues de salida).
El equipo de ingeniería de sistemas y los clientes deben establecer en conjunto
las metas y objetivos de la aplicación. El prototipo es evaluado por el cliente para una retroalimentación; gracias a esta
se refinan los requisitos del software que se desarrollará.
E
294 Fundación Universitaria Los Libertadores 1............................................................. CAPÍTULO 13 . 295
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJEFOS EN MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
u
IIIII
Actores. Asociación. Es el tipo de relación más básica que indica la invocación, desde un
actor o caso de uso a otra operación (caso de uso). Esta relación se representa
E
» Casos de uso. con una línea simple.
Relaciones. c
Generalización. Este tipo de relación es uno de los más utilizados, cumple una
doble función dependiendo de su estereotipo, que puede ser de Uso («uses»)
E:
o de Herencia («extends»).
E.
5 Extends. Se utiliza cuando un caso de uso es similar a otro en sus características.
í
Se denota por una figura humana plana.
» Uses. Utilizado cuando se tiene un conjunto de características que son similares
en más de un caso de uso y no se desea mantener copiada la descripción de la
característica.
E
[
[1
BUENAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
IiiVII u
MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
Ejemplos
Actor
ier correo
(E
Usuario 2
Usuario
Las principales actividades que realiza el usuario en su cuenta de correo son:
3. Leer correo,
4. Responder correo,
(Jardar borrado
correo
5. Reenviar comunicación a un determinado grupo,
8. Borrar correos Describen qué es lo que debe hacer el sistema, pero no como.
E:
Ejemplo 2 Para la documentación de los casos de uso se debe tener en cuenta:
La administradora de la cafetería de la universidad requiere de una aplicación que » Nombre del caso de uso: se expresa mediante el uso de un verbo en infinitivo,
le permita automatizar el proceso de compra de las gaseosas de una determina- por ejemplo consultar información del cliente, imprimir documento, generar
reporte, crear usuario.
da marca para una máquina expendedora, donde cada gaseosa tiene un costo de
$2.500 y para que la persona interesada pueda adquirir el producto debe ingresarle
» Entradas: datos de entrada proporcionados por el actor.
E
el valor en monedas, cuyas denominaciones pueden ser de $100, $200, $500; a
continuación el cliente podrá seleccionar la gaseosa donde todas tienen costos igua-
les disponibles en la máquina, además de eso el sistema debe permitir retirar el pro-
ducto cuando el valor ingresado sea mayor o igual a $2.500, el retiro de cambio se
Resultados: parcial o final según sea el requerimiento.
U
realiza para los casos en que haya ingresado un valor superior al costo del producto. » Descripción: resumen que expresa de manera puntual, el requerimiento o la
funcionalidad del sistema, y el resultado que se espera que el sistema genere
El actor: es el cliente. una vez ejecutada su función.
E
El nombre del caso de uso corresponde con el objetivo del acto que es normalmen- » Precondición condiciones: describen en qué situación se debe encontrar el
te el que comienza el caso de uso, como por ejemplo ingresar dinero. sistema y su entorno para poder comenzar el caso de uso.
El diagrame de casos de uso de la máquina expendedora de gaseosas sería: » Postcondición: condiciones que describen en qué situación debe quedar el
E
sistema y su entorno una vez que el caso de uso haya finalizado con éxito.
System Flujo normal: secuencia de interacciones entre los actores y el sistema que lleva
a la finalización con éxito del caso de uso.
'gresar dinero
«i.nclude»
Flujo alternativo o excepciones: situaciones eventuales y su tratamiento, que
pueden darse durante la secuencia normal. E
Los diagramas de casos de uso describen las relaciones y las dependencias entre un
grupo de casos de uso y los actores participantes en el proceso. El siguiente formato
presenta uno de los items de cómo podría ser una de las formas de representar la
documentación de los casos de uso:
<d.nclude»
E
Cliente
Retirar gaseosa
«include»,1
Máquina
dispensadora
E:
4:
300 Fundación Universitaria Los Libertadores a........................................................... -.1 CAPÍTULO 13 a 301
fi
a
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN MODELADO ORIENTADO A OBJETOS Y APLICACIONES DESOFARE
Según las necesidades, los casos de uso pueden especificarse con distinto detalle.
Nombre: Como un requisito funcional clásico: se especifica el servicio que debe proporcionar
el sistema a los usuarios en texto libre. Por ejemplo:
Descripción:
Entradas:
Resultados:
Resultados:
E Actores:
Total valor dinero depositado con base a las monedas que han sido ingresadas
Precondidones: Precondiciones:
U Flujo alternativo:
4. El sistema deshabilita opciones cuando se ha ingresado el valor del
producto o un valor superior
Flujo alternativo:
E Pos condiciones:
E
302 Fundación universitaria Los Libertadores CAPITULO 13 i 303
E
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN IIv1 . MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
1------------------------------------------------------------------------------------------------------------------------------------------------------------------
E
13.7 DISEÑO ORIENTADO A OBJETOS
Nombre: R2 — Retirar gaseosa £
Es una fase de la metodología orientada a objetos para el desarrollo de Software.
Su uso induce a los programadores a pensar en términos de objetos, en vez de pro-
Descripción: Permitir reclamar producto
cedimientos cuando planifican su código. Un objeto agrupa datos encapsulados y
Entradas:
procedimientos para representar una entidad. E
El diseño orientado a objetos es la disciplina que define los objetos y sus interac-
ciones para resolver un problema de negocio que fue identificado y documentado
Solicitud producto
durante el análisis orientado a objetos. E,
Res u Ita dos:
» Tarjetas CRC (CRC: Clase, Responsabilidades, Colaboradores). Es una herra-
mienta que por su sencillez permite centrarse en la importancia del objeto y sus
operaciones en el sistema.
Total valor dinero depositado en base a las monedas que han sido ingresadas
Como una extensión informal a UML, la técnica de las tarjetas CRC se puede
Precondiciones:
usar para guiar el sistema a través de análisis guiados por la responsabilidad. Las
clases se examinan; se filtran y se refinan en base a sus responsabilidades con
E
respecto al sistema, y las clases con las que necesitan colaborar para completar
El usuario ingreso monedas sus responsabilidades.
Flujo alternativo:
• Conocimiento interno de la clase.
E
• Servicios brindados por la clase.
Pos condiciones: E
El usuario recibe el producto
El usuario recibe el mensaje de error
E (operaciones y atributos)
(relaciones de las clases)
Elementos con los que va »
Aplicación.
Permita automatizar.
Entregar cambio.
Ingresado.
a interactuar la abstracción.
E » Compra.
» Gaseosas.
Disponible.
Mensajes de error.
»
Productos.
Costo.
» Usuario.
E » Producto.
terminada marca para una máquina expendedora, donde cada gaseosa tiene un » Costo.
tente retirar cambio cuando se ingresa el valor completo del producto. • Ingresar monedas
• Seleccionar producto • Máquina
• Retirar productos • Monedas
u
• Tomar el producto
E
306 Fundación Universitaria Los Libertadores u.............................................................. CAPITULO 13 u 307
r
MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
8UENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
E
Listado tentativo de Clases:
» Denominaciones.
Responsabilidades Colaboradores
» Producto.
» Usuario.
E
13.8 DIAGRAMAS UML (UNIFIED MODELING LANGIJAGE)
UML es un lenguaje que permite modelar construir y documentar los elementos que
forman un sistema software orientado a objetos. Se ha convertido en el estándar
Responsabilidades Colaboradores de la industria del software, debido a que ha sido impulsado por los autores de los
• Contabilizar ¿antidad de
tres métodos más usados de orientación a objetos: Grady Booch, lvar Jacobson y
Jim Rumbaugh.
1
monedas por denominación y
Máquina
sus correspondientes totales. El lenguaje UML nace de la necesidad de un lenguaje preciso de especificación
• Mostrar total de dinero que permitiera la comunicación entre los que diseñan el software y de los que lo
ingresado
construyen.
Vista estructural:
Responsabilidades Colaboradores
» Diagrama de clases: muestra las clases y sus asociaciones.
E
Diagrama de objetos: corresponde a una instancia particular del Diagrama
de clases.
•
•
•
Entregar producto
Entregar Cambio
Presentar total dinero
• Usuario
• Monedas
Vista de usuario
U
'e Producto
• Presentar total cambio
• Presentar Mensaje de Error » Diagrama de casos de uso
Vista de comportamiento
» Diagrama de actividades
CAPITULO 13 309
308 Fundación Universitaria Los Libertadores
fi
u
CIJENAS PRÁCTIC,S DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
1
á1
Diagrama de actividades para la máquina de gaseosas del enunciado anterior: 1 139 APLICACIONES DE SOFTWARE
11V I I
MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
para
Realizar tareas
especificas —en Los
computadores
Delgadez severa <16,00 E
1 Programas
diseñados
1 Detemtinación
Delgadez moderada 16,00 - 16,99
E
son
1 de Delgadez ligera 17,00 - 18,49
equerimientos
ApIicadaneg
desoftware.
para -* Construcción Diseño
Rango normal 18,50 - 24,99 n
son
1 Realizar —
Programación
[
actividades
Pruebas
L ector financiero
L Construidas
Documentaciój
para
Pre-Obeso 25,00 29,99
-
L. Mantenimiento
Educación
Matemáticas
Satisfacer
necesidades Obeso ~30,00
[
Obeso Clase 1 30,00 34-99
Otroscampos
j
Obeso Clase II 35,00 - 3999
r
Ejemplo
El Centro Médico El Buen Samaritano, cuya misión es velar por el buen estado nu-
Obeso Clase III ~40,00
U
tricional de sus pacientes, requiere la implementación de un aplicativo de software
para que su personal médico pueda calcular el Índice de Masa Corporal (IMC) de
cada paciente que es atendido. Para lo cual se apoya en la siguiente tabla desarro-
llada por la Organización Mundial de a Salud:
Fuente: Organización Mundial de la Salud. E
Lo recomendado para un estado nutricional bueno, es aquel valor personal que se
encuentre dentro del rango específico como normal, en valores que van de 18,50 a
24,99. La Organización Mundial de la Salud (OMS) define el sobrepeso cuando el IMC
es mayor o igual a 25 kg/m2 y obesidad cuando el lMC es mayor o igual a 30 kg/m2.
Los valores registrados en la anterior tabla son independientes de la edad y son para U.0
ambos sexos.
E
El MC de una persona se define de una relación entre el peso y la estatura aplicando a. Definición de requerimientos funcionales:
la siguiente formula:
[
Ingresar información del paciente.
índice de Masa Corporal (lMC, Kg/ m2) = Peso(Kg) / Estatura(m2)
» Validar datos.
E A partir de a anterior información se requiere la construcción e implementación de
una aplicación de software que permitan calcular: » Calcular el índice de masa corporal.
• kilogramos y metros2
E Ingresar peso
Actividades propuestas y altura
CAPITULO 13 1 315
314 Fundación Universitaria Los Libertadores ...............................................................
1
BuENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJEFOS EN MODELADO ORIENTADO A OBJETOS Y APliCACIONES DE SOFTWARE
a.
E
Documentación casos de uso Documentación casos de uso
E
Nombre: (Rl) Ingresar peso y estatura Nombre: (R2) calcular Índice de Masa Corporal (lMC)
[
Descripción: Ingreso de datos correspondientes al peso y estatura como
Descripción: Se realiza proceso para obtener el IMC a partir del peso y la masa
elementos para calcular el índice de masa corporal.
Entradas:
Resultados: Resultados: U
Registro de los datos correspondientes al peso y la estatura en el sistema.
Actores
Obtener el cálculo del IMC.
Actores
1
Usuario y el centro médico.
Precondiciones:
Sistema (centro médico).
Precondiciones:
E
Ninguna. (Rl)
E
Flujo normal:
Flujo normal:
Actor Sistema
Actor Sistema
E
316 Fundación Universitaria Los Libertadores ...............................................................-
1 CAPÍTULO 13 317
E
r B[JENA5 PRÁCTIO\S DE PROGRAMACIÓN ORIENTADA A OBJETOS EN MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
Entradas:
c. Enunciado del problema subrayando palabras clave.
El Centro Médico El Buen Samaritano, cuya misión es velar por el buen estado
nutricional de sus pacientes, requiere la implementación de un aplicativo de sof-
Tomados del (R2) MC calculado. tware para que su personal médico pueda calcular el Índice de Masa Corporal
£
(IMC), de cada paciente que es atendido.
Resultados:
E
Para lo cual se apoya en la siguiente tabla desarrollada por La Organización Mundial
de la Salud.
Obtener el estado nutricional del paciente.
Lo recomendado para un estado nutricional bueno, es aquel valor personal se en-
E Actores
E Flujo alternativo:
estado nutricional del paciente.
El estado nutricional de una persona.
E Pos condiciones:
Centro médico, paciente, médico, estado, aplicativo, índice de masa corporal, ran-
go, normal, kilogramos y metros, libras y pulgadas
E
318 Fundación Universitaria Los Libertadores 4................................................................. CAPITULO 13 i 319
BIJENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
[
r
Listado de posibles clases del sistema
Persona
-documento: 5trinq
-nombre: Stong
d. Elaboración de las Tarjetas CRC lnteraz
-apeflido: 5tring
-edad: nt
-peso: doubie
-estatura: doubie
:lfldjceMasacorporal
-unaPersona: Persona
«create»+IndiceMasaCoíporailunaPersofla: Persona)
rl
Nombre de la clase: CentroMedico ~caicuiotndiceMasaCorporaiAmericaflOO double
RESPONSABILIDAD COLABORACIÓN.
icalculoindiceMasacorporalIngIesO: doubie
-convertirMetrosPuigadasü: double
-convertirKilogramaLibrasO: doubie
+caicuioEstadoNutncionaiü: string
E
Lectura y visualización de información. IndiceMasaCorporal
u
Validar datos ingreso de datos numéricos
E
320 Fundación Universitaria Los Libertadores . CAPITULO 13 1 321
BUENAS PRACTICAS DE PROGRAMACIÓN MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
a
Documentación métodos de la clase Índice Masa Corporal Documentación Métodos de la clase Índice Masa Corporal
E Método para calcular el Índice Masa Corporal expresado en kilogramos y metros
(Sistema Americano).
Método que calcularEstadoNutricronal
E Análisis.
Análisis.
E ingresados
E Índice de Masa Corporal (lMC, kg/ m2) = Peso (kg) / Estatura (m2).
Resultado (tipo de dato de retorno) double Índice de masa corporal Resultado (tipo de dato de retorno) double Indice de masa corporal
Calculo a partir aplicar a formula
Soluclon planteada
MC = peso/estatura *estatura;
RVII 1-
MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
E:.
public String getDocumento() {
E return documento;
public void setEstatura(double estatura) {
}
this.estatura = estatura;
}
this.documento = documento;
{
t public mt getEdad() {
return edad;
public double calcularindiceMasaCorporalAmericanO()
return unaPersona.getPesoO/ (
} flaper5ona.getE5tatUra *unaPer5ona.getEStatura );
E
J {
return convertirMetrosPulgadas ( ) / (
public double getPeso() { convertirKilogramaLibras( ) *
return peso; convertirKilograniaLibras( ) );
} }
E }
}
return unaPersona.getEstatura() * CONVERSOR; 1
public double getEstatura() {
return estatura;
}
326
E
Fundación Universitaria Los Libertadores 1-------- ----------------------------------------------------------------- CAPITULO 13 • 327
R BUENAS PRACTiCAS DE PROGRAMACION ORIENTADA A OBJETOS EN
1-
MODELADO ORIENTADO A OBJETOS Y APLICACIONES DE SOFTWARE
'E
E
private double convertirKilogramaLibras( ) { /**
final double CONVERSOR = 2.2046; * clase que modela los procesos de lectura e impresión
return unaPersona.getPeso() * CONVERSOR; para calcular indice de masa corporal y el estado nutricional
} * @ Project : indice de masa corporal
* @ File Name : CentroMedio
public String calcularEstadoNutricional( ) { * @author : mhernandezb lebaqueror r
7* * @version 1.0
Clasificación Clase IMC (Kg/m2) *7
Balo Peso <18,50 import java.text.DecimalFormat;
import java.util.Scanner;
Delgadez severa <16,80
t
Delgadez moderada
Delgadez ligera
Rango normal
Sobrepeso
16,88 16)99
17,80 - 18,49
18,58 - 24,99
public class CentroMedico {
private IndiceMasaCorporal unIMC;
private Persona unaPersona;
E
>=25,08
Pre-Obeso
Obeso
Obeso Clase 1
25,00 - 29,99
>=30,00
30,80 - 34-99 }
public CentroMedico() {
this.unaPersona = new PersonaO; E
Obeso Clase II 35,00 - 39,99
Obeso Clase III >=40,00
*7 public void leerDatos() {
double imc = calcularindiceMasaCorporalAniericanoQ; String documento =
String estado = String nombre =
if (imc < 16) { String apellido =
[
estado = "Delgadez severa "; mt edad = 8;
else if (imc >=16 && imc <17) { double peso = 0.0;
estado = "Delgadez moderada";
} else if (imc >=17 && imc <18.5) {
estado = "Delgadez ligera";
} else i-F (imc >=18.5 && imc <25) {
double estatura = 0.0;
Scanner lea = new Scanner(System.in);
System.out.print("Documento re );
documento = 1ea.nextLine;
E
estado = "Peso Normal";
} else if (imc >=25 && imc <30) {
estado = "Pre-Obeso";
System.out.print("Nombre ");
nombre = lea.nextLine();
Systeni.out.print("Apellido ");
E
} else if (imc >=38 && imc <35) { apellido = lea.nextLine;
estado = "Obeso Clase 1"; System.out.print("Edad ");
} else if (imc >=35 && imc <40) { edad = lea.nextIriti; r
}
estado = "Obeso Clase III";
return estado;
System.out.print("Peso ");
peso = lea.nextDouble;
7/cargar los datos al objeto
E
}
E
328 Fundación Universitaria Las Libertadores 1 CAPITULO 13 1 329
BUEN,5 PR4CT1C.S DE
- - -
PROGRAMACIÓ
( 1-..................................................................................................................................
E Unapers
SetDoCument(
unaPersona setNombre (nombre)
uflaperso Mediante la utilización como eclipse o netbeans generar la respectiva docu-
g.
unaperso setApefljd(
mentación con a utilidad de javadoc.
°flCPers setEdad(edd)
setEstat(
uflapees
SetPeso(p)
£ } thisunIMC
new IndiceMaC
13.10 LECTURAS RECOMENDADAS
Publjc
vOid
Im PrimIrR
( '/formato decimal
DecifliF
) f
de dos Cifras
formatoe .
» UML.
Diagramas de UML.
= new
SYstem
£ SYStem
Diento0)
t
est0 de la
Persona\n").
r+unaPersOnagetD
» Principios del modelado.
SYStem
13.11 PREGUNTAS DE REVISIÓN DE CONCEPTOS
t SYStem outprintl(
doQ)
sYstenl.out prj » Importancia del modelamiento de una aplicación de software.
SYstem.
+unaPer5onatEdd
t re out. printlfl(E
"+unapersona getEst Qué es el modelado orientado a óbjetos.
.
sYstem.out.printinp
r ~p01 » Utilidad de documentar una aplicación de software.
SYstem.out. printin(
+formatoD
de MCs Corporal en Kg/M2
PoraL4meric 13.12 EJERCKIOS
format(uflIMC calcujarindjCeMC
SYstemout .
de Masa Para cada uno de los siguientes enunciados realizar las siguientes actividades.
lIng1esQ)). Corporal ]b/piilp.
format(uflIMC calcularindlM
Ytemout p . a. Determinar requerimientos.
calcule E Nutr :
b. Elaborar diagrame de casos de uso y documentarlos.
Public
statjc VOjd c. Elaborar listado depurado sustantivos y verbos del enunciado del ejercicio.
centroMed. main(strjngj args) {
uncentroMd. uncentroMed. d. (.oristruir las tarjetas CRC.
lee rDato5 ; new CentroMedjcoQ.
unCentrod. ImprjmjrR
1
O; e. Diseñar Diagrame de clases.
nd.ciÓ0 UfliFersit
Los Libertador
€
BiETOS
t
1. La a jlicación deberá: e Op0 de figura y solicitar única
El centro médico El Buen Samaritano cuya misión es velar por la salud y bienestar
de sus pacientes en a actualidad dentro de su políticas para brindar un mejor
servicio, necesita la implementación de un sistema automatizado que tomando >) ptr ier
C CIII
los datos por consola según sea
t
Imprimir los resultados de la figura seleccbona
»
la que el médico se basa para obtener el resultado es la siguiente:
50ware orientado a
objetos (2» edición) Ciu t
ConStruCciúfl
.:EDA.DESES).. Bertrand M (1 999)
NIVEL HEMOGLOBINA GÉNERO dad: Madrid, Prentice Hall. objetos con aplicaci0S Ciudad
1 < x<=5 11.5- 15g% Femenino o masculino
5 < x<=10 12.6 - 15.5 g% 1300(6, ti (1906). AnáliSis y diseño oríen1° a
Femenino o masculino
10 < x<=15
Mujeres >= 15
13- 15.5 g%
12-16 g%
Femenino o masculino
Femenino
México Addison Wesley.
¶1
(Prentice Hall).
Gota a gota.
Fowler, M., y Scott K. tiMl (1999).
1 (200 3) UML y Patr0ne5 3Jn, ¡r?troduc
CiudadnMéxico
al análisis Y diseño
Prentice orientado a
Hall.
2. Desarrollar un aplicación que permita realizar el modelado de la pantalla de
(iidiq,
un reloj digital e imprima las horas y minutos separadas por dos punto, por 'dO i()fl) flgU age User
objetos y al proceso unificado (7»
ejemplo, 02:35; 12:40; 1:53 p. m.; las 11:59 a. m. es un minuto antes de las Mass.
G: (2005) The ISB13
Unified 0785342267976
Mode0
doce 00:00. Rurnbaugh, j., iacobsofl 1 , y; l3ooli, Reading
lhui( i',(O' Aldi3OflWesl.
Guíde, San
La aplicación debe permitir adelantar o atrasar los minutos, las horas y fijar una ra rn ián, aprendizaje adiVO
ISBN-lO: 032 1 21)19/4 prog
hora inicial en el reloj; e imprimir además de las horas, los minutos y el meridia-
Fundamentos de
no (a. m., p. m.). Villalobos, i., y Casallas, R. (2006).
Ciudad: México Editorial pearS0n
basado en casos.
3. El departamento de ciencias básicas requiere una aplicación que permita al
usuario seleccionar una de las siguientes figuras geométricas: La circunferencia,
el cuadrado, el rectángulo, el rombo, el trapecio y el romboide para luego cal-
cular su área y perímetro. 333
CAPflULO 13
BUENAS PRACTICAS DE PROGRAMACIÓN
CAPÍTULO 14
DOCUMENTACIÓN
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN
MVII DOCUMENTACIÓN
E
14.1 TEMÁTICA A DESARROLLAR E
» JavaDoc.
l.a documentación de Java es muy completa para cada versión del JDK, esa docume-
nacion se puede consultar en línea o tenerla en un archivo aparte, previamente des-
t
cargado. El API presenta los packages, clases e interfaces con descripciones bastante
detalladas de las variables y métodos, así como sobre las relaciones jerárquicas.
1
143 JAVADOC
1;
336 Fundación Universitaria Los Libertadores CAPÍTULO 14 337
BURRAS PRACTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN DOCUMENTACIÓN
La sintaxis con la que tiene que ser invocada la herramieñta es: javadoc [opcionesl De algunas etiquetas:
Clase
@author
Aunque existe una gran variedad de opciones, estas son algunas de las que nos
pueden resultar útiles en el desarrollo de las prácticas: Muestra el autor de la clase en el argumento nombre. Un comentario de este tipo
puede tener más de un autor en cuyo caso se puede usar tantas etiquetas de este
javadoc -public Clase: presenta sólo las clases y los miembros públicos. tipo como autores hayan colaborado en la creación del código fuente o bien se
pueden ponerlos a todos en una sola etiqueta. En este último caso, Javadoc inserta
• )avadoc -protected Clase: presenta las clases y los miembros protegidos. una (,) y un espacio entre los diferentes nombres.
javadoc -package Clase: presenta las clases y los miembros con acceso de
* @author (your name)
paquete, los protegidos y los públicos. *1
/**
javadoc -private Clase: presenta todas las clases y todos los miembros, in- * liauthor Luis Eduardo Baquero, Miguel Hernández Bejaran
cluyendo los privados. *1
Aparte de los comentarios propios, la utilidad javadoc proporciona una serie de Esta etiqueta marca un identificador como desactualizado, es deciç inadecuado
etiquetas para completar la información que se necesite dar de una determinada para continuar con su uso. Es conveniente asegurarse de que la entidad desactuali-
clase o método. zada continúa funcionando de forma que no se dañe el código existente que no ha
sido actualizado. La desactualización ayuda a animar a los desarrolladores de código
La herramienta Javadoc escanea las etiquetas cuando están incluidas dentro del a actualizarse a la última versión, preservando la integridad del código existente.
progama en un comentario iavadoc.
Ejemplos
Estas etiquetas para documentación permiten generar una API en HTML a partir del
código fuente con los comentarios. Las etiquetas comienzan con el símbolo arroba @Deprecated Este método se eliminará en próximas versiones
(@)y son sensibles a mayúsculas y minúsculas.
public double obtenerVolumen() {
Una etiqueta se debe ubicar al inicio de una línea, o al menos sólo precedida por r'eturn 0.0;
espacio(s) y asterisco(s), o será tratada como texto normal por el compilador. }
Hay dos tipos de etiquetas: Deprecated: para marcar un método como desaprobado, no debe ser utilizado
en la programación ya que de seguro puede generar problemas, aunque esté dis-
• Etiquetas de bloque: solo se pueden utilizar en la sección de etiquetas ponible.
que sigue a la descripción principal. Son de la forma: @etiqueta
CAPiTULO 14 1 339
338 fundación Universitaria Las Libertadores u u
BUENAS PRÁCTICAS DE PROGRAMACIÓN ORIENTADA A OBJETOS EN DOCUMENTACIÓN
1-
@Deprecated
{@link}
public static void metodoEstaticoO{ Se debe crear un enlace con el texto "etiqueta" que apunta a la documentación del
System.out.println("Estatjco Desaprobado"); paquete, la clase o el miembro especificado.
}
Ejemplo
Para obtener mayor información al respecto esta el API de java, tal como se presenta
en la siguiente imagen del sitio oficial /** Método que invoca a {@link obtenerLectura(String)}. *1
oo tx
• i protected void obtenerLectura(Striflg aLine){
'07 oEP (o
—> C
Scanner scanner = new Scanner(aLine);
dscs.oracie.coma3eJ7/docs/api/depr,0c,,7eii7,tht,,i,me7i,od
}
O.oroeu Pao'ose cU U(o0 T,00 (o,o', I-(e(p
fi 1-
DOCUMENTACIÓN
@return
14.4 JAVADOC EN LOS IDE
Agrega una cabecera con un enlace que apunta a una referencia. Un comentario BIueJ
[ para documentación puede contener más de una de estas etiquetas; todos los enla-
ces de este tipo se agrupan bajo la misma cabecera. Soporte de BlueJ para javadoc.. Si un proyecto ha sido comentado haciendo uso
de iavadoc, BlueJ ofrece utilidades para generar la documentación HTML comple-
Ejemplos
ta. Para lo cual en a ventana principal se debe seleccionar la opción Tools/Project
Documentation del menú, leugo se generará la documentación y se visualiza en la
/ , *
ventana de un navegador.
* Método que retorna el objeto de la Fecha
E * /
E }
@version
Ejemplo
r
/*
@version 1.0
*1 Documenración ave doc
r
/K*.
DocLimentación en java 1
E
Figura 29. Generacion Javadoc en Eclipse. Soporte de Javadoc para Netbeans
E:
Oc..l,
4. iv..,,,, rl 43.450.11113.11411141111011
te
'TteFr-4.tnB-
..h 5.16
-r 11
11,411111..... 111121 er*.teoir3.. I' 1 .------....._._..---_.-. E
III
4 0414..4301111le k 1(4 54,4
__ 35
E:
5 r4M11llelc -..----'-.—'--.------ ..----- 1oa r,h*C.0niun4O'11Ce°4
!ldein. se P,04.0Ce201.15111
En la figura 30 se visualiza la documetación Javadoc, generada en eclipse. . 4(5444s.ps 041 oer.410 .. •*21,..;.,, .1....
E
M.nit.113
Figura 30. Documentación Javadoc en Eclipse. ci.44
0.ee_1l 00
Y chaUlor,w 114-46
11
04*400.211
r
cbl-F1l
il.1.a r
0-aso-
E:
1110116.1 — .__.._—_...----.------- It
rol w9OlOir1'14:l, 1,1' f6.3..l.114 CI - nl N 01100-44 11114I 4
1 i....,lrn ' sil c*oa.Oln-inv
lvct4S0 IILXTCLOS* 1111140 le14114(3 U4l1,111l '!0
le.NM0.140140111c04111111; 1400200 - TAt, 1111(044.041011110.200 23 U.ka.4111 - aol,:
o 111040
'20 1
CIas; Fecha
4l .40.1001:110 . 23
*11t 14I11.0111114 i. 4'c1•0
i•8lil0
1.0
Censtn,ctor 5umm.oy
111,4111r 0.6..tpd,,
u
FerIal)
CululiliCior 000.104 lo.:u)ores 30.12 Y2OtO 06 oalbli4.iç Ola, J1120
1nPeC*Vcn,nW
rerlaflnt .34.4. lii; . inc unnlol
StgIz0d0 cllnmi010r
CAPITULO 14 345
344 Fundación Universitaria Los Libertadores ......................................................................
a a
E
'5UENASPRÁCTICASDEPROGRAMACIÓN DOCUMENTACIÓN
OfliENTADAAOBiETOSENflVfl i a-
ti Figura 32. Documentación Javadoc en Netbeans. En la figura 33,se presenta en el API de Java 8, la clase Random.
E C rkvhnI
Figura 33. API Java 8.
asa.IaflÇ.0010r3
LS
Facha
Mi Catuoa Al Profcloa FUVCLW IXQ4S$ teA'NOFuSD- - -
i SI4DPY pQST0 IC0II51 1 ME7ltOO 00T00 FDI 0001*10*11400
Ptok.g..
paula cina Foco
r cocopacol. ootrrçaat2, conrpaco3
extrflOt Java.iaoq.ttjrcc
coati
CI tora acodoS onhutua do a codo 'ocho
Ciaos Random
Cnstnzcfroç hutlmar'/ ioog.00f eco
E 0a0 00t
>oo.oOl.Rotrdom
Alt ImpMant.0d
Sorratr.00bio
orpuo
Ditta Sastra It.00M004:
Raodan4cc.ra hecurofa,,dos. Threo4LocaiPondom
COoacrrcCtor roas Os VolOcor 30. 12 2010 u lora otrrburoa dio. usos y roo ocdiranoarto t.,rdoosttiettfi't
TIre ulgoncirmo uoplaroerncnd bv cian Raudo. oso a protected uniity motilad titar en erad, covocoraon ca,,
00000r.2Oflaot aopply op co 32 pnourloroualcotly gooetttod bara.
5001cgulacv0000
El API, incluye las clases de la versión correspondiente (6, 7, 8) con sus correspon- RbcWOV%cOOc0
Moayopplicottona rsvU bt'.d da. ns.cbod MatA. roodotl) soopior ro ato,
»
java.util Estructuras de datos implementadas para que sean usadas. Revisar la URL https:iidocs. oracle. cornija vase18/docsiapi/
El API de Java es una herramienta de apoyo de consulta, para los desarolladores de o> Convenciones de código para el lenguaje de programación.
aplicaciones en Java.
E
346 Fundación Universitaria Los Libertadores CAPITULO 14 347
1
BUENAS PR,CTICAS DEPROGRAMACION ORIENTADAAOBJETOSEN
IIVI [
14.3 EJERJOS E:
1. Realice una descripción breve de cada una de las siguientes etiquetas, dentro las
mas utilizadas para documentar una aplicación de software con javadoc.
E:
@author
DECRIPCiÓN E
@deprecated
u
@param
@see E
@since
@throws
E
@Vei siuri
E:
2. Utilizando javadoc, documente la aplicación de software del capítulo anterior
denominada Centro Médico El Buen Samaritano.
E:
348 Fundación Universitaria Los Libertadores