You are on page 1of 71

UNIVERSIDAD NACIONAL DE LOJA

REA DE LA EDUCACN, EL ARTE Y LA COMUNCACN


CARRERA DE INFORMTICA EDUCATIVA
NIVEL DE PREGRADO
TALLER
LA PROGRAMACIN Y SU APLICACIN EN LA
EDUCACIN
DOCENTES: ng. Laura Amparo Guachizaca
Dra. Mara sabel Vivanco
PERIODO: Septiembre 2010 Febrero 2011
LOJA-ECUADOR
2010
La programacin y su Aplicacin en la Educacin 2
UNIVERSIDAD NACIONAL DE LOJA

Dr. Gustavo Enrique Villac s Rivas Mg. Sc.
RECTOR
Dr. Ernesto Rafael Gonz lez Pesantes Mg. Sc.
VICERRECTOR

REA DE LA EDUCACIN, EL ARTE Y LA COMUNICACIN

Dr. Yovany Salazar Estrada Mg. Sc.
DIRECTOR DEL AREA

Dra. Enriqueta Andrade Maldonado Mg. Sc.
COORDINADOR DEL NIVEL DE FORMACIN O PREGRADO

CARRERA DE INFORMTICA EDUCATIVA

Ing. eovanny Es!inoza Ro"as
COORDINADOR DE CARRERA
Ing. #aura A. Guac$izaca Sarango
Dra. Mar a Isa%el Vivanco
DOCENTES DEL TALLER
Telfono: 2545558 Ext. 112
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 3
1. PRESENTACIN:
Una vez que se ha concluido el taller del mdulo 2, producto del cual los
estudiantes poseen una concepcin clara de la programacin estructurada, la
manera como plantear un problema y los pasos involucrados para dar una solucin
computacional al problema.

El presente taller, se propone continuar el proceso de desarrollo de capacidades
estudiantiles para la planificacin y programacin orientada a objetos, y como
efecto de ello, disear y elaborar programas computacionales que apliquen
programacin orientada a objetos, en el marco del paradigma orientado a objetos.
La estructura y funcionalidad del taller de , estn direccionadas para asegurar que
los estudiantes se prevean las estrategias necesarias para que el proceso de
instalacin, uso de herramientas que faciliten el aprendizaje de los conceptos
involucrados en la orientacin a objetos y su ejemplificacin en un lenguaje de
programacin orientado a objetos, garantice la habilitacin para las prcticas
profesionales respectivas.
2. JUSTIFICACIN
La programacin orientada a objetos, como partes estructurantes del plan de
estudio del paradigma orientado a objetos, de las ciencias de la computacin,
recurrentemente se ha basado en las metodologas de programacin estructurada
y en raros casos utilizando herramientas que faciliten un mejor aprendizaje. No
obstante, en algunas tcnicas de programacin se han "basado individualmente,
excluyendo la participacin consciente y comprometida de los dicentes
responsables del desarrollo del mdulo. Esta forma de aplicar la teora en los
talleres no ha logrado enriquecer el compromiso y apropiacin de todos los
dicentes responsables de su ejecucin, prevaleciendo el cumplimiento formal.
3. OBJETIVOS
Fortalecer las capacidades de los dicentes relacionadas con la elaboracin de
programas orientado a objetos, a partir de problemas
Disponer de herramientas que apliquen los referentes teoricos metodolgicos
de la Orientacin a Objetos y del lenguaje de Modelado Unificado.
dentificar las necesidades de formacin de los dicentes, as como los recursos
de apoyo: didcticos, bibliogrficos, aulas de computo, que demanda el
desarrollo de la programacin orientada a objetos, en la perpectiva de
potencias el proceso de aprendizaje.
4. CONTENIDOS
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 4
Estimado(a) estudiante, iniciamos el estudio de la asignatura abordando temas
fundamentales que se requiere conocer dentro de la programacin; teniendo claro
que la actividad de crear programas es un ejercicio mental que se debe cultivar a
travs de la prctica. Apoyado, en etapas iniciales, de estrategias adicionales
como: diagramas de flujo.
La estrategia utilizada para aprender a programar es resolver problemas a travs
de la implementacin de programas usando Java y NetBeans
PRIMERA UNIDAD:
1. La Orientacin a Objetos
2. Objeto
3. Clase
4. Herencia
5. nterfaz
6. Lenguaje Unificado de Modelado (UML)
7. Relaciones
8. Diagramas
9. Casos de Uso
10. Diagramas de Secuencia, Estado y Colaboracin
SEGUNDA UNIDAD:
1. Herramienta para UML
2. Area de trabajo
3. Creacin de diagramas
4. Lenguaje de POO
5. Java
6. nstalacin JDK
7. Netbeans
8. Sintaxis
TERCERA UNIDAD:
1. Sentencias de Control
2. Bucles
3. Arrays
4. Clases en Java
5. Constructor
6. Clases String
7. Clase Math
8. /O de datos
5. ACTIVIDADES Y METODOLOGIA
ACTIVIDADES:
Encuadre: Acuerdos y compromisos
Conformacin de grupos de trabajo para analizar el contenido del mdulo
Plenaria y socializacin de los trabajos grupales
Refuerzo de los contenidos analizados
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 5
Contestacin a preguntas e inquietudes de los estudiantes.
Prueba escrita u oral sobre los contenido del taller
Exposicin de los trabajos de investigacin, (de acuerdo a los compromisos
establecidos) y el refuerzo de la investigacin, con una duracin mxima de 30
minutos por alumno.
Evaluacin, esta actividad se la realizar con el propsito de evaluar lo
referente a: contenidos, puntualidad, claridad, pertinencia, conocimientos,
asesora y tutora del docente, el cumplimiento de acuerdos y compromisos, y
aspectos administrativos.
METODOLOGA
Para el desarrollo del taller se prioriza el empleo del mtodo cientfico, trabajo
grupal utilizando mtodos, tcnicas y estrategias derivadas de las teoras de
aprendizaje que fundamentan el Sistema Acadmico Modular por Objetos de
Transformacin (SAMOT), considerando como eje dinamizador que interrelaciona
la formacin de profesionales.
6. RESULTADOS ESPERADOS
Conocimiento teoricos de la programacin Orientada a Objetos y del Lenguaje
de Modelado Unificado
Manejo de Herramientas para UML, instalacin del JDK, NEetbeans, e
ntroduccin al Lenguaje Java.
Sintaxis y codificacin de programas en Netbeans, libreras de Java.
7. EVALUACION Y CALIFICACIN
La evaluacin estar presente durante su desarrollo en todas y cada una de las
actividades que se lleven a cabo y durante cada unidad del taller.
La calificacin final del taller ser el promedio de los parmetros expuestos. Para
acreditar el mdulo y los talleres se obtendr una nota mnima de 7/10 puntos,
segn lo indica el Art. 51 del Reglamento de Rgimen Acadmico.
Dominio de los conocimientos terico-prcticos:
Manejo de los contenidos terico-prcticos estudiados en las unidades o
temticas del taller.
Participacin activa: referida a la contribucin individual oportuna,
pertinente y fundamentada del estudiante a lo largo del desarrollo de la
temtica de estudio en las conferencias-foros, talleres, lecturas
comentadas, entre otras actividades.
Para evaluar los trabajos desarrollados por el estudiante, se tomarn en cuenta los
siguientes criterios:
Pertinencia con las Guas de Estudio
Claridad en redaccin, ortografa y presentacin.
Coherencia del proceso.
Aporte individual crtico y fundamentado.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 6
Puntualidad en la entrega.
1. Participacin en clase
2. Desarrollo de actividades:
3. Trabajos y ejercicios en clase
4. Trabajos y ejercicios extraclase
5. Pruebas escrita o prcticas
10
10
10
10
10
PROMEDIO 10
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 7
PRIMERA UNIDAD:
1.1.- Introduccin
En los tiempos que corren, el software tiene la tendencia de ser grande y complejo.
Los usuarios demandan interfaces cada vez ms completas y funcionalidades ms
elaboradas, todo ello influyendo en el tamao y la complejidad del producto final. Por
ello, los programas deben ser estructurados de manera que puedan ser revisados,
corregidos y mantenidos, rpida y eficazmente, por gente que no necesariamente ha
colaborado en su diseo y construccin, permitiendo acomodar nueva funcionalidad,
mayor seguridad y robustez, funcionando en todas las situaciones que puedan surgir,
de manera previsible y reproducible.
Ante problemas de gran complejidad, la mejor forma de abordar la solucin es
modelar. Modelar es disear y estructurar el software antes de lanzarse a programar y
es la nica forma de visualizar un diseo y comprobar que cumple todos los requisitos
para l estipulados, antes de que la flotilla de programadores comience a generar
cdigo. Modelando, los responsables del xito del producto pueden estar seguros de
que su funcionalidad es completa y correcta, que todas las expectativas de los
usuarios finales se cumplen, que las posibles futuras ampliaciones pueden ser
acomodadas, todo ello mucho antes de que la implementacin haga que los cambios
sean difciles o imposibles de acomodar. Modelando, se abstraen los detalles
esenciales de un problema complejo y se obtiene diseos estructurados que, adems,
permiten la reutilizacin de cdigo, reduciendo los tiempos de produccin y
minimizando las posibilidades de introducir errores.

UML es un lenguaje grfico que sirve para modelar, disear, estructurar, visualizar,
especificar, construir y documentar software. UML proporciona un vocabulario comn
para toda la cadena de produccin, desde quien recaba los requisitos de los usuarios,
hasta el ltimo programador responsable del mantenimiento. Es un lenguaje estndar
para crear los planos de un sistema de forma completa y no ambigua.
1.2.- La Orientacin a Objetos, OO
Aunque UML puede emplearse en cualquier paradigma, como la programacin
estructurada o la lgica, est especialmente cerca del paradigma de la orientacin a
objetos. Por tanto, es precisa una familiarizacin con algunos detalles de este
paradigma antes de continuar con UML.
1.2.1.- Qu es un Objeto
En el mbito de la informtica, un objeto define una representacin abstracta de las
entidades del mundo, tangibles o no, con la intencin de emularlas. Existe pues, una
relacin directa entre los objetos del mundo y los objetos informticos, de modo que
puede emplearse el trmino objeto de manera indistinta.
Los objetos tienen dos caractersticas, que son su estado y su comportamiento. El
estado es una situacin en la que se encuentra el objeto, tal que cumple con alguna
condicin o condiciones particulares, realiza alguna actividad o espera que suceda un
acontecimiento. Una tostadora puede estar encendida y cargada de pan y, en cuanto a
su comportamiento, lo normal en este estado es tostar pan.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 8
Los objetos mantienen su estado en uno o ms atributos, que son simplemente datos
identificados por un nombre, y exhiben su comportamiento a travs de mtodos, que
son trozos de funcionalidad asociados al objeto. En este sentido, un objeto es
realmente un conjunto de atributos y mtodos. Pero un objeto slo revela su verdadera
utilidad cuando es integrado en un contexto de comunicacin con otros objetos, a
travs del envo de mensajes, para componer un sistema mucho mayor y demostrar
un comportamiento ms complejo. Una tostadora en un armario resulta de poca
utilidad, pero cuando interacta con otro objeto, como un ser humano, se convierte en
una herramienta til para tostar pan. El humano intercambiara con la tostadora el
mensaje "tuesta el pan que tienes en la bandeja a travs de la pulsacin del botn de
tostar.
A partir del ejemplo anterior, es fcil deducir que el envo de mensajes es la forma en
que se invocan los mtodos de un objeto y que la invocacin de mtodos es el
mecanismo a travs del cual un objeto puede cambiar su estado o el de otro objeto.
Los atributos y los mtodos de un objeto pueden tener un menor o mayor grado de
visibilidad, desde "privado hasta "pblico, lo que hace que aparezca un concepto
nuevo, la encapsulacin. La encapsulacin oculta los detalles del funcionamiento
interno del objeto, exponiendo slo aquello que pueda ser de inters.
Figura 1: Objetos comunicndose
1.2.2.- Qu es una CIase
Los objetos no son entidades que existan de modo nico. Hay muchos tipos de
tostadoras e, igualmente, muchas tostadoras del mismo tipo. Se puede entender
fcilmente el concepto de clase si nos permitimos emplear el trmino tipo como
equivalente. As, todos los objetos que son del mismo tipo, comparten el mismo juego
de atributos y mtodos (aunque cada objeto pueda tener un valor distinto asociado a
cada atributo) y por tanto pertenecen a una misma clase. Las clases son como
patrones que definen qu atributos y qu mtodos son comunes a todos los objetos de
un mismo tipo.
Cada objeto tiene sus atributos y su comportamiento, creados empleando una clase a
modo de patrn. Una vez creado el objeto, pasa a ser una instancia particular de la
clase a la que pertenece y sus atributos tienen unos valores concretos, que podrn
variar de un objeto a otro (dos objetos distintos pertenecientes a la misma clase,
pueden tener exactamente los mismos valores en todos sus atributos). A estos
atributos, que pueden variar de un objeto a otro, se les conoce tambin como
variables de instancia.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 9
Hay atributos que, sin embargo, no varan de un objeto a otro, es decir todas las
instancias de la clase a la que pertenecen, tienen el mismo valor para ese atributo.
Todas las tostadoras del mismo tipo consumen los mismos Watios y sus resistencias
son de los mismos Ohmios. A estos atributos se les conoce como variables de clase y
son compartidos por todas y cada una de las instancias de la clase. De manera
anloga al caso de los atributos, encontramos mtodos de instancia y mtodos de
clase.
1.2.3.- Qu es Ia Herencia
Los objetos se definen en funcin de clases, es decir, tomando una clase como patrn.
Se puede saber mucho acerca de un objeto sabiendo la clase a la que pertenece.
Las clases llegan un paso ms lejos, permitiendo su definicin en funcin de otras
clases, de modo que es posible establecer una jerarqua de especializacin. Una clase
que se define en funcin de otra, hereda todos los atributos y mtodos de aquella y
permite el aadido de nuevos o la sobre escritura de los heredados. La clase patrn se
conoce con el nombre de superclase o clase padre, mientras que la que hereda se
conoce como clase hija. La herencia no est limitada simplemente a padre-hija(s), la
jerarqua puede ser todo lo profunda que sea necesario, hablando en trminos de
nietas, biznietas, etc. De la misma manera, una clase puede heredar de varias clases
a la vez.
El siguiente ejemplo existe una jerarqua de dos niveles. La clase "Animal es la raz ,
la clase padre en la jerarqua. Especifica que los animales comen, como caracterstica
ms significativa de stos. En el primer nivel de especializacin encontramos las
clases "Carnvoro y "Herbvoro, ambas son sendos tipos de animal y por tanto
comen, slo que en el caso de los carnvoros se ha especializado el tipo de comida
que comen para indicar que se trata de carne. Aparece una nueva caracterstica de
este tipo de animal, que es el hecho de que los carnvoros cazan. En el caso de los
herbvoros, encontramos que comen plantas y pacen. En el segundo nivel de
especializacin, encontramos un animal que es a la vez "Herbvoro y "Carnvoro y,
como cabe esperar, este nuevo tipo de animal puede hacer todo lo que pueden hacer
sus ancestros, comer carne, comer plantas, cazar y pacer, no encontrando ninguna
caracterstica adicional en los "Omnvoros.
1.2.4.- Qu es una Interfaz
Una interfaz es un mecanismo que emplean dos objetos para interactuar. En nuestro
ejemplo de la tostadora, el humano emplea el botn de tostar a modo de interfaz para
pasar el mensaje "tuesta el pan que tienes en la bandeja.
Las interfaces definen un conjunto de mtodos para establecer el protocolo en base al
cual interactan dos objetos. En este sentido, existe una analoga entre interfaces y
protocolos. Para que el humano pueda tostar, debe seguir el protocolo establecido por
la interfaz botn de tostar, consistente en pulsar dicho botn.
Las interfaces capturan las similitudes entre clases no relacionaras, sin necesidad de
forzar una interrelacin y son a su vez clases.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 10
1.3.- EI Lenguaje Unificado de ModeIado, UML
El UML es un lenguaje de modelado cuyo vocabulario y sintaxis estn ideados para la
representacin conceptual y fsica de un sistema. Sus modelos son precisos, no
ambiguos, completos y pueden ser trasladados directamente a una gran variedad de
lenguajes de programacin, como Java, C++ o Visual Basic, pero tambin a tablas de
bases de datos relacionales y orientadas a objetos. Es posible generar cdigo a partir
de un modelo UML (ingeniera directa) y tambin puede construirse un modelo a partir
de la implementacin (ingeniera inversa), aunque en las dos situaciones debe
intervenir un mayor o menor grado de supervisin por parte del programador, en
funcin de lo buenas que sean las herramientas empleadas.
1.3.1.- BIoques bsicos de construccin de UML
Los bloques bsicos de construccin de UML son tres, los elementos, las relaciones y
los diagramas.
Los elementos son abstracciones que actan como unidades bsicas de
construccin. Hay cuatro tipos, los estructurales, los de comportamiento, los de
agrupacin y los de notacin. En cuanto a los elementos estructurales son las
partes estticas de los modelos y representan aspectos conceptuales o
materiales. Los elementos de comportamiento son las partes dinmicas de los
modelos y representan comportamientos en el tiempo y en el espacio. Los
elementos de agrupacin son las partes organizativas de UML, establecen las
divisiones en que se puede fraccionar un modelo. Slo hay un elemento de
agrupacin, el paquete, que se emplea para organizar otros elementos en
grupos. Los elementos de notacin son las partes explicativas de UML,
comentarios que pueden describir textualmente cualquier aspecto de un
modelo. Slo hay un elemento de notacin principal, la nota.
Las relaciones son abstracciones que actan como unin entre los distintos
elementos. Hay cuatro tipos, la dependencia, la asociacin, la generalizacin y
la realizacin.
Los diagramas son la disposicin de un conjunto de elementos, que
representan el sistema modelado desde diferentes perspectivas. UML tiene
nueve diagramas fundamentales, agrupados en dos grandes grupos, uno para
modelar la estructura esttica del sistema y otro para modelar el
comportamiento dinmico. Los diagramas estticos son: el de clases, de
objetos, de componentes y de despliegue. Los diagramas de
comportamiento son: el de Casos de Uso, de secuencia, de colaboracin, de
estados y de actividades.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 11
1.3.1.1.- EIementos
E
L
E
M
E
N
T
O
S
E
S
T
R
U
C
T
U
R
A
L
E
S
Clase
Describe un conjunto de
objetos que comparten los
mismos atributos, mtodos,
relaciones y semntica. Las
clases implementan una o
ms interfaces.
Clase activa
Se trata de una clase, en la
que existe procesos o hilos
de ejecucin concurrentes
con otros elementos. Las
lneas del contorno son ms
gruesas que en la clase
"normal
nterfaz
Agrupacin de mtodos u
operaciones que
especifican un servicio de
una clase o componente,
describiendo su
comportamiento, completo
o parcial, externamente
visible. UML permite
emplear un crculo para
representar las interfaces,
aunque lo ms normal es
emplear la clase con el
nombre en cursiva.
Colaboracin
Define una interaccin entre
elementos que cooperan
para proporcionar un
comportamiento mayor que
la suma de los
comportamientos de sus
elementos.
Caso de uso
Describe un conjunto de
secuencias de acciones que
un sistema ejecuta, para
producir un resultado
observable de inters. Se
emplea para estructurar los
aspectos de
comportamiento de un
modelo.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 12
Componente
Parte fsica y por tanto
reemplazable de un
modelo, que agrupa un
conjunto de interfaces,
archivos de cdigo fuente,
clases, colaboraciones y
proporciona la
implementacin de dichos
elementos.
Nodo
Elemento fsico que existe
en tiempo de ejecucin y
representa un recurso
computacional con
capacidad de procesar.
EIementos
de
comportamiento
nteraccin
Comprende un conjunto de
mensajes que se
intercambian entre un
conjunto de objetos, para
cumplir un objetivo
especifico.
Mquinas
de
estados
Especifica la secuencia de
estados por los que pasa un
objeto o una interaccin, en
respuesta a eventos.
EIementos
de
agrupacin
Paquete
Se emplea para organizar
otros elementos en grupos.
EIementos
de
notacin
Nota
Partes explicativa de UML,
que puede describir
textualmente cualquier
aspecto del modelo
TabIa 1: EIementos de construccin en UML
1.3.1.2.- ReIaciones
Dependencia
Es una relacin entre dos elementos, tal
que un cambio en uno puede afectar al
otro.
Asociacin
Es una relacin estructural que resume un
conjunto de enlaces que son conexiones
entre objetos.
Generalizacin
Es una relacin en la que el elemento
generalizado puede ser substituido por
cualquiera de los elementos hijos, ya que
comparten su estructura y
comportamiento.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 13
Realizacin
Es una relacin que implica que la parte
realizante cumple con una serie de
especificaciones propuestas por la clase
realizada (interfaces).
TabIa 2: EIementos de reIacin en UML
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 14
1.3.1.3.- Diagramas
M
O
D
E
L
A
N
E
S
T
R
U
C
T
U
R
A
Clases
Muestra un conjunto de clases,
interfaces y colaboraciones, as
como sus relaciones, cubriendo
la vista de diseo esttica del
sistema.
Objetos
Anlogo al diagrama de clases,
muestra un conjunto de objetos
y sus relaciones, pero a modo
de vista instantnea de
instancias de una clase en el
tiempo.
Componente
s
Muestra la organizacin y
dependencias de un conjunto
de componentes. Cubren la
vista de implementacin
esttica de un sistema. Un
componente es un mdulo de
cdigo, de modo que los
diagramas de componentes son
los anlogos fsicos a los
diagramas de clases.
Despliegue
Muestra la configuracin del
hardware del sistema, los
nodos de proceso y los
componentes empleados por
stos. Cubren la vista de
despliegue esttica de una
arquitectura.
M
O
D
E
L
A
N
Casos de
Uso
Muestra un conjunto de casos
de uso, los actores implicados y
sus relaciones. Son diagramas
fundamentales en el modelado
y organizacin del sistema.
Secuencia
Son diagramas de interaccin,
muestran un conjunto de
objetos y sus relaciones, as
como los mensajes que se
intercambian entre ellos.
Cubren la vista dinmica del
sistema. El diagrama de
secuencia resalta la ordenacin
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 15
C
O
M
P
O
R
T
A
M
I
E
N
T
O
temporal de los mensajes,
mientras que el de colaboracin
resalta la organizacin
estructural de los objetos,
ambos siendo equivalentes o
isomorfos.
En el diagrama de colaboracin
de la figura de la izquierda, se
puede ver que los elementos
grficos no son cajas
rectangulares, como cabra
esperar, y en su lugar
encontramos sus versiones
adornadas. Estas versiones
tienen como finalidad evidenciar
un rol especfico del objeto
siendo modelado. En la figura
encontramos de izquierda a
derecha y de arriba abajo un
Actor, una nterfaz, un Control
(modela un comportamiento) y
una nstancia (modela un objeto
de dato).
Colaboracin
Estados
Muestra una mquina de
estados, con sus estados,
transiciones, eventos y
actividades. Cubren la vista
dinmica de un sistema.
Modelan comportamientos
reactivos en base a eventos.
Actividades
Tipo especial de diagrama de
estados que muestra el flujo de
actividades dentro de un
sistema.
TabIa 3: Diagramas de UML
1.3.1.3.1.- Diagrama de CIases y Diagrama de Objetos
Los diagramas de clases muestran un resumen del sistema en trminos de sus clases
y las relaciones entre ellas. Son diagramas estticos que muestran qu es lo que
interacta, pero no cmo interacta o qu pasa cuando ocurre la interaccin.
El siguiente diagrama modela los pedidos de un cliente a una tienda de venta por
catlogo. La clase principal es "Pedido, asociada a un cliente, una forma de pago y un
conjunto de artculos.
La clase "Pago es abstracta, en UML los nombres de clases abstractas se
representan en Itlica. Las clases abstractas actan a modo de interfaz,
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 16
proporcionando nicamente un listado de mtodos a ser "realizados por las clases
que las implementan o realizan. "Pago es una superclase especializada, y a la vez
realizada, por sus formas ms comunes "Credito y "Efectivo. Un "Pedido tiene una
nica forma de pago, expresada por su multiplicidad, 1, mientras que una forma de
pago puede estar presente en uno o ms pedidos, como sugiere su multiplicidad, 1..*.
En cuanto a las asociaciones, observamos que algunas vienen representadas como
una flecha navegable, cuya orientacin expresa el sentido en que se consultan los
datos. Las asociaciones sin flecha son bi-direccionales. Las agregaciones expresan
"conjunto de; la relacin entre "Pedido y "Articulo es de conjunto. Un pedido es una
agregacin de una o ms lneas de pedido, donde cada una hace alusin a un artculo
concreto, as mismo una lnea de pedido puede estar presente en varios pedidos y un
artculo puede no haber sido solicitado nunca.
Figura 2: Diagrama de CIases
En cuanto a la multiplicidad, la siguiente tabla resume las ms comunes. Hay que
tener en cuenta que la multiplicidad se expresa "en el lado opuesto de la relacin y es
el nmero de posibles instancias de una clase asociadas con una nica instancia de la
clase en el otro extremo.
MuItipIicidad Significado
1 Una nica instancia
N / * N instancias
0..N / 0..* Entre ninguna y N instancias
1..N / 1..* Entre una y N instancias
0..1 Ninguna o una instancia
N..M Entre N y M instancias
TabIa 4: MuItipIicidad en Diagramas de CIases
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 17
El siguiente diagrama muestra una dependencia existente entre las clases "Pedido y
"Fecha. Cualquier cambio en la clase dependida, "Fecha, afectar la clase
dependiente, "Pedida.
As mismo se puede observar que las clases vienen representadas por cajas en las
que hay tres separaciones, o compartimentos. El primero se emplea siempre para
indicar el nombre de la clase, el segundo para mostrar los atributos y el tercero para
los mtodos. Tanto los atributos como los mtodos vienen precedidos por un smbolo
de acceso, que normalmente suele ser un "+" para el acceso pblico, un "-" para el
acceso privado, (slo por otros mtodos de la clase) y un "#" para el acceso protegido
(slo por clases hija), aunque la herramienta empleada en la elaboracin del tutorial
traduce estos elementos en iconos.
Los atributos tienen un tipo que puede mostrarse a continuacin de su nombre
separado por ":". De igual manera, los mtodos pueden devolver un elemento de un
tipo determinado y recibir parmetros, expresados entre parntesis mediante el
nombre del parmetro y el tipo, separados por ":". Para el caso de mltiples
parmetros, se separan por comas (p1:t1 p!:t! """ pn:tn). Los parmetros que tienen
un valor por defecto se expresan mediante un "=" y el valor, a continuacin del tipo
(p1:t1#v1) y si un parmetro en la posicin "i de la lista de parmetros tiene valor por
defecto, todos los parmetros que le sigan, es decir que ocupen posiciones sucesivas
a "i en la lista, debern tener tambin un valor por defecto.
Los atributos y mtodos estticos (de clase) se representan mediante un subrayado
(en el caso de los mtodos se puede emplear el estereotipo $$static%% los
estereotipos se ven ms adelante).
Figura 3: ReIacin de dependencia en Diagramas de CIase
El siguiente diagrama muestra una auto-relacin de agregacin. Un "Departamento
puede estar compuesto a su vez por ms sub-departamentos, o ninguno, con la
restriccin de que el mnimo nmero de personas en los sub-departamentos debe ser
dos. Las restricciones son condiciones que deben ser cumplidas siempre, se expresan
entre llaves "{condicin }.
Figura 4: Auto-agregacin
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 18
Los diagramas de objetos son anlogos a los de clases, con la particularidad de que
en lugar de encontrar clases, encontramos instancias de stas. Son tiles para
explicar partes pequeas del modelo en las que hay relaciones complejas.
1.3.1.3.2.- Diagrama de Componentes y Diagrama de DespIiegue
Los componentes son mdulos de cdigo, as que los diagramas de componentes
vienen a ser los anlogos fsicos a los diagramas de clases. Muestran como est
organizado un conjunto de componentes y las dependencias que existen entre ellos.
Figura 5: Diagrama de Componentes
Los diagramas de despliegue sirven para modelar la configuracin hardware del
sistema, mostrando qu nodos lo componen.
Figura 6: Diagrama de DespIiegue
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 19
1.3.1.3.3.- Diagrama de Casos de Uso
Los diagramas de Casos de Uso describen lo que hace un sistema desde el punto de
vista de un observador externo, enfatizando el qu ms que el cmo. Plantean
escenarios, es decir, lo que pasa cuando alguien interacta con el sistema,
proporcionando un resumen para una tarea u objetivo. El siguiente Caso de Uso
describe como Carlos va a desayunar (este es su objetivo), para lo que se plantea el
escenario de preparar su caf y el pan tostado
.
Figura 7: Diagrama de Casos de Uso niveI 1
En los Casos de Uso, los &ctores son papeles que determinadas personas u objetos
desempean. Se representan mediante un "hombre de palitos, de modo que en el
ejemplo, Carlos es un Actor. Los Casos de Uso se representan por medio de valos y
las lneas que unen Actores con Casos de Uso representan una asociacin de
comunicacin.
Por su puesto, un Caso de Uso puede ser descrito en mayor profundidad. Por ejemplo
si tomamos por separado "Preparar pan y "Preparar cafe, podemos bajar un nivel de
descripcin y llegar a los siguientes Casos de Uso.
Figura 8: Diagrama Casos de Uso niveI 2 A
'Carlos tuesta el pan en la tostadora despus lo unta con mante(uilla ) mermelada de
fresa ) se lo come posiblemente mojndolo en un caf"*
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 20
Figura 9: Diagrama Casos de Uso niveI 2 B
'Carlos calienta leche a+ade caf ) azcar al gusto ) se lo bebe"*
Los Casos de Uso suelen venir delimitados por fronteras o lmites, que definen una
separacin entre lo que es realmente la funcionalidad del sistema y los actores que la
usan o colaboran en su desempeo. En las figuras, esta separacin viene
representada por medio de la caja que encapsula los valos.
Los Casos de Uso son acompaados por una explicacin textual que clarifica las
posibles cadencias del lenguaje meramente grfico. De esta manera, combinando
Casos de Uso y explicacin textual, se puede obtener escenarios no ambiguos, que
resultan ideales en la captura de requisitos de usuario, dada su sencillez de
comprensin incluso por quien no est familiarizado con UML. Los Casos de Uso se
emplean tambin en la preparacin de escenarios de pruebas con que verificar el
software una vez ha sido construido.
El siguiente Caso de Uso es equivalente al primero, "Desayuno, slo que en l se ha
condensado la mxima cantidad posible de informacin. En l se muestra un nuevo
elemento que hasta ahora no se haba mostrado, el "estereotipo, que viene entre
sendos smbolos angulados "<< y ">> y concreta un paso ms all el tipo de relacin
existente entre dos Casos de Uso. Encontramos dos estereotipos $$include%% y
$$e,tend%%. El primero indica que el Caso de Uso "Tostar pan requiere de "Usar
tostadora para poder ser llevado a cabo. Esta es una forma muy adecuada de sacar
factor comn entre Casos de Uso, o incluso de fraccionar Casos de Uso muy grandes.
El segundo indica que el Caso de Uso "Untar pan es una variacin de "Untar.
Observamos tambin que "Comer pan y "Beber cafe son una generalizacin de
"Alimentarse.
Figura 10: Diagrama Casos de Uso niveI 1 detaIIado
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 21
"Carlos va a desayunar. Para ello debe hacer dos actividades distintas, pero
relacionadas. La primera consisten en tostar pan, para lo cual necesita emplear una
tostadora. Una vez tostado el pan, lo unta de mantequilla y mermelada de fresa (untar
pan no es muy distinto de untar otro tipo de alimentos). La segunda consiste en
preparar el caf, par lo cual necesita calentar leche y aadir caf y azuzar. Terminadas
ambas actividades, Carlos puede proceder a alimentarse, comiendo el pan tostado y
bebiendo el caf. El orden en que realice las actividades da igual y tambin da igual si
se realizan a la vez.
1.3.1.3.4.- Diagrama de Secuencia y Diagrama de CoIaboracin
Los diagramas de secuencia describen como los objetos del sistema colaboran. Se
trata de un diagrama de interaccin que detalla como las operaciones se llevan a
cabo, qu mensajes son enviados y cuando, organizado todo en torno al tiempo. El
tiempo avanza "hacia abajo en el diagrama. Los objetos involucrados en la operacin
se listan de izquierda a derecha de acuerdo a su orden de participacin dentro de la
secuencia de mensajes.
Figura 11: Diagrama de Secuencia
Las lneas verticales o "lneas de la vida representan el tiempo de vida del objeto. La
vida del objeto "carlos no termina en este diagrama, sin embargo la del objeto "tosty
s y esto viene representado mediante el aspa al final de su lnea de la vida.
Los rectngulos verticales son barras de activacin y representan la duracin de la
ejecucin del mensaje. El mensaje "Encender, posiblemente implementado mediante
la introduccin del enchufe en una toma de pared, tiene una duracin escasa y similar
a la de "Apagar. No ocurre lo mismo con la llamada al mtodo "tostar(), que dura
desde la pulsacin del botn de tostar hasta que el pan es retirado de la bandeja y
adems interviene la emisin de un aviso cuando el pan est lo suficientemente
caliente, a fin de evitar que se queme.
Como se puede observar, la accin tostar viene condicionada por la presencia de pan
en la bandeja de la tostadora. En UML los corchetes "[]" expresan condicin y si estn
precedidos de un asterisco indican interaccin mientras se cumpla la condicin.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 22
Los mensajes que son intercambiados entre los objetos de un diagrama de secuencia
pueden ser s-ncronos o as-ncronos. Los mensajes asncronos son aquellos tal que el
emisor puede enviar nuevos mensajes mientras el original est siendo procesado. El
mensaje asncrono ocurre en el tiempo de manera independiente a otros mensajes.
Los mensajes sncronos son todo lo contrario, el emisor debe esperar a que termine el
tiempo de proceso del mensaje antes de que pueda emitir nuevos mensajes. UML
emplea los siguientes convenios para representar el tipo de mensaje.
SmboIo Significado
Mensaje simple que
puede
ser sncrono o
asncrono.
Mensaje simple de
vuelta
(opcional).
Mensaje sncrono.
Mensaje asncrono.
TabIa 5: Tipos de mensaje en diagramas de interaccin
Los diagramas de colaboracin son otro tipo de diagramas de interaccin, que
contiene la misma informacin que los de secuencia, slo que se centran en las
responsabilidades de cada objeto, en lugar de en el tiempo en que los mensajes son
enviados. Cada mensaje de un diagrama de colaboracin tiene un nmero de
secuencia. El primer nivel de la secuencia es 1, y los mensajes que son enviados
durante la misma llamada a un mtodo se numeran 1.1, 1.2 y as sucesivamente para
tantos niveles como sea necesario.
Figura 12: Diagrama de CoIaboracin
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 23
1.3.1.3.5.- Diagrama de Estados y Diagrama de Actividades
Los diagramas de estados muestran los posibles estados en que puede encontrarse
un objeto y las transiciones que pueden causar un cambio de estado. El estado de un
objeto depende de la actividad que est llevando a cabo o de alguna condicin.
Las transiciones son las lneas que unen los diferentes estados. En ellas se representa
la condicin que provoca el cambio, seguida de la accin oportuna separada por "/".
En un estado en que el objeto esta pendiente de algn tipo de validacin que dependa
de un proceso en curso, no es necesario evento externo alguno para que se produzca
la transicin, ya que sta ocurrir cuando termine el proceso, en funcin del resultado
de ste. En estos casos es conveniente, por claridad, incluir la condicin que de la que
depende la transicin (entre corchetes).
Los estados inicial, a partir del que se "entra en la mquina de estados, y final, que
indica que la mquina de estados termina, no tienen otro significado adicional, son
elementos ornamentales y se representan mediante un circulo negro y un circulo negro
resaltado respectivamente.
Los estados de un diagrama de estados pueden anidarse, de forma que los estados
relacionados pueden ser agrupados en un estado compuesto. Esto puede ser
necesario cuando una actividad involucra sub-actividades asncronas o concurrentes.
Figura 13: Mquina de Estados, estados simpIes
Los diagramas de actividades son bsicamente diagramas de flujo adornados, que
guardan mucha similitud con los diagramas de estados. Mientras que los diagramas de
estados centran su atencin en el proceso que est llevando a cabo un objeto, los
diagramas de actividades muestran como las actividades fluyen y las dependencias
entre ellas.
Los diagramas de actividades pueden dividirse en "calles que determinan qu objeto
es responsable de qu actividad. Las actividades vienen unidas por transiciones, que
pueden separarse en ramas en funcin del resultado de una condicin expresada
entre corchetes. Cada rama muestra la condicin que debe ser satisfecha para que el
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 24
flujo opte por ese camino. gualmente, las transiciones se pueden bifurcarse en dos o
ms actividades paralelas.
Figura 14: Diagrama de Actividades
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 25
SEGUNDA UNIDA:
2.1. UtiIizacin de Herramienta para UmI
nstalacin y uso del rea de trabajo de la herramienta UML
2.1.1 Crear Nuevos diagramas con Ia Herramienta UML
Elaborar un diagrama de casos de uso para un cajero automatico
2.2. Lenguaje de POO
Se le llama as a cualquier lenguaje de programacin que implemente los
conceptos definidos por la programacin orientada a objetos.
Cabe notar que los conceptos definidos en la programacin orientada a objetos no
son una condicin sino que son para definir que un lenguaje es orientado a
objetos. Existen conceptos que pueden estar ausentes en un lenguaje dado y sin
embargo, no invalidar su definicin como lenguaje orientado a objetos.
Quizs las condiciones mnimas necesarias las provee el formalismo que modeliza
mejor las propiedades de un sistema orientado a objetos: los tipos de datos
abstractos.
Siguiendo esa idea, cualquier lenguaje que permita la definicin de tipos de datos,
de operaciones nuevas sobre esos tipos de datos, y de instanciar el tipo de datos
podra ser considerado orientado a objetos.
Esta definicin concuerda incluso con ciertos ejemplos prcticos, que no son
considerados dentro de la programacin orientada a objetos, pero que podran
serlo. Por ejemplo, la programacin de interfaces grficas de usuario para los
sistemas X-Window utilizando infraestructuras de funciones y APs como Motif,
Xview y Xlib, son realizadas usualmente en lenguaje C, pero organizando el cdigo
en una manera que "parecen objetos" (los Widgets).
2.2.1. Introduccin aI Ienguaje
El lenguaje Java se cre con cinco objetivos principales:
1. Debera usar la metodologa de la programacin orientada a objetos.
2. Debera permitir la ejecucin de un mismo programa en mltiples sistemas
operativos.
3. Debera incluir por defecto soporte para trabajo en red.
4. Debera disearse para ejecutar cdigo en sistemas remotos de forma
segura.
5. Debera ser fcil de usar y tomar lo mejor de otros lenguajes orientados a
objetos, como C++.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 26
Caracteristicas deI Lenguaje Java
Orientado a Objetos
("OO), se refiere a un mtodo de programacin y al diseo del lenguaje. Aunque
hay muchas interpretaciones para OO, una primera idea es disear el software de
forma que los distintos tipos de datos que use estn unidos a sus operaciones. As,
los datos y el cdigo (funciones o mtodos) se combinan en entidades llamadas
objetos. Un objeto puede verse como un paquete que contiene el
"comportamiento (el cdigo) y el "estado (datos). El principio es separar aquello
que cambia de las cosas que permanecen inalterables. Frecuentemente, cambiar
una estructura de datos implica un cambio en el cdigo que opera sobre los
mismos, o viceversa. Esta separacin en objetos coherentes e independientes
ofrece una base ms estable para el diseo de un sistema software. El objetivo es
hacer que grandes proyectos sean fciles de gestionar y manejar, mejorando como
consecuencia su calidad y reduciendo el nmero de proyectos fallidos. Otra de las
grandes promesas de la programacin orientada a objetos es la creacin de
entidades ms genricas (objetos) que permitan la reutilizacin del software entre
proyectos, una de las premisas fundamentales de la ngeniera del Software. Un
objeto genrico "cliente, por ejemplo, debera en teora tener el mismo conjunto de
comportamiento en diferentes proyectos, sobre todo cuando estos coinciden en
cierta medida, algo que suele suceder en las grandes organizaciones. En este
sentido, los objetos podran verse como piezas reutilizables que pueden emplearse
en mltiples proyectos distintos, posibilitando as a la industria del software a
construir proyectos de envergadura empleando componentes ya existentes y de
comprobada calidad; conduciendo esto finalmente a una reduccin drstica del
tiempo de desarrollo. Podemos usar como ejemplo de objeto el aluminio. Una vez
definidos datos (peso, maleabilidad, etc.), y su "comportamiento (soldar dos
piezas, etc.), el objeto "aluminio puede ser reutilizado en el campo de la
construccin, del automvil, de la aviacin, etc.
La reutilizacin del software ha experimentado resultados dispares, encontrando
dos dificultades principales: el diseo de objetos realmente genricos es
pobremente comprendido, y falta una metodologa para la amplia comunicacin de
oportunidades de reutilizacin. Algunas comunidades de "cdigo abierto (open
source) quieren ayudar en este problema dando medios a los desarrolladores para
diseminar la informacin sobre el uso y versatilidad de objetos reutilizables y
libreras de objetos.
Independencia de Ia pIataforma
Significa que programas escritos en el lenguaje Java pueden ejecutarse en
cualquier tipo de hardware. Es lo que significa ser capaz de escribir un programa
una vez y que pueda ejecutarse en cualquier dispositivo, tal como reza el axioma
de Java, '''write once, run everywhere'''.
Para ello, se compila el cdigo fuente escrito en lenguaje Java, para generar un
cdigo conocido como "bytecode (especficamente Java bytecode)instrucciones
mquina simplificadas especficas de la plataforma Java. Esta pieza est "a medio
camino entre el cdigo fuente y el cdigo mquina que entiende el dispositivo
destino. El bytecode es ejecutado entonces en la mquina virtual (VM), un
programa escrito en cdigo nativo de la plataforma destino (que es el que entiende
su hardware), que interpreta y ejecuta el cdigo. Adems, se suministran libreras
adicionales para acceder a las caractersticas de cada dispositivo (como los
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 27
grficos, ejecucin mediante hebras o threads, la interfaz de red) de forma
unificada. Se debe tener presente que, aunque hay una etapa explcita de
compilacin, el bytecode generado es interpretado o convertido a instrucciones
mquina del cdigo nativo por el compilador JT (Just n Time).
La portabilidad es tcnicamente difcil de lograr, y el xito de Java en ese campo
ha sido dispar. Aunque es de hecho posible escribir programas para la plataforma
Java que acten de forma correcta en mltiples plataformas de distinta
arquitectura, el gran nmero de estas con pequeos errores o inconsistencias
llevan a que a veces se parodie el eslogan de Sun, "Write once, run anywhere"
como "Write once, debug everywhere" (o "Escrbelo una vez, ejectalo en todas
partes por "Escrbelo una vez, depralo en todas partes)
EI recoIector de basura
Un argumento en contra de lenguajes como C++ es que los programadores se
encuentran con la carga aadida de tener que administrar la memoria solicitada
dinmicamente de forma manual:
En Java, este problema potencial es evitado en gran medida por el recolector
automtico de basura (o automatic garbage collector). El programador determina
cundo se crean los objetos y el entorno en tiempo de ejecucin de Java (Java
runtime) es el responsable de gestionar el ciclo de vida de los objetos. El
programa, u otros objetos pueden tener localizado un objeto mediante una
referencia a ste (que, desde un punto de vista de bajo nivel es una direccin de
memoria). Cuando no quedan referencias a un objeto, el recolector de basura de
Java borra el objeto, liberando as la memoria que ocupaba previniendo posibles
fugas (ejemplo: un objeto creado y nicamente usado dentro de un mtodo slo
tiene entidad dentro de ste; al salir del mtodo el objeto es eliminado).
La recoleccin de basura de Java es un proceso prcticamente invisible al
desarrollador. Es decir, el programador no tiene conciencia de cundo la
recoleccin de basura tendr lugar, ya que sta no tiene necesariamente que
guardar relacin con las acciones que realiza el cdigo fuente.
Debe tenerse en cuenta que la memoria es slo uno de los muchos recursos que
deben ser gestionados.
Apariencia
La apariencia externa (el '''look and feel''') de las aplicaciones GU (Graphical User
nterface) escritas en Java usando la plataforma Swing difiere a menudo de la que
muestran aplicaciones nativas. Aunque el programador puede usar el juego de
herramientas AWT (Abstract Windowing Toolkit) que genera objetos grficos de la
plataforma nativa, el AWT no es capaz de funciones grficas avanzadas sin
sacrificar la portabilidad entre plataformas; ya que cada una tiene un conjunto de
APs distinto, especialmente para objetos grficos de alto nivel. Las herramientas
de Swing, escritas completamente en Java, evitan este problema construyendo los
objetos grficos a partir de los mecanismos de dibujo bsicos que deben estar
disponibles en todas las plataformas. El inconveniente es el trabajo extra requerido
para conseguir la misma apariencia de la plataforma destino. Aunque esto es
posible (usando GTK+ y el Look-and-Feel de Windows), la mayora de los usuarios
no saben cmo cambiar la apariencia que se proporciona por defecto por aquella
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 28
que se adapta a la de la plataforma. Mencin merece la versin optimizada del
lenguaje.
Rendimiento
El rendimiento de una aplicacin est determinado por multitud de factores, por lo
que no es fcil hacer una comparacin que resulte totalmente objetiva. En tiempo
de ejecucin, el rendimiento de una aplicacin Java depende ms de la eficiencia
del compilador, o la JVM, que de las propiedades intrnsecas del lenguaje. El
bytecode de Java puede ser interpretado en tiempo de ejecucin por la mquina
virtual, o bien compilado al cargarse el programa, o durante la propia ejecucin,
para generar cdigo nativo que se ejecuta directamente sobre el hardware. Si es
interpretado, ser ms lento que usando el cdigo mquina intrnseco de la
plataforma destino. Si es compilado, durante la carga inicial o la ejecucin, la
penalizacin est en el tiempo necesario para llevar a cabo la compilacin.
Algunas caractersticas del propio lenguaje conllevan una penalizacin en tiempo,
aunque no son nicas de Java. Algunas de ellas son el chequeo de los lmites de
arrays, chequeo en tiempo de ejecucin de tipos, y la indireccin de funciones
virtuales.
El uso de un recolector de basura para eliminar de forma automtica aquellos
objetos no requeridos, aade una sobrecarga que puede afectar al rendimiento, o
ser apenas apreciable, dependiendo de la tecnologa del recolector y de la
aplicacin en concreto. Las JVM modernas usan recolectores de basura que
gracias a rpidos algoritmos de manejo de memoria, consiguen que algunas
aplicaciones puedan ejecutarse ms eficientemente.
El rendimiento entre un compilador JT y los compiladores nativos puede ser
parecido, aunque la distincin no est clara en este punto. La compilacin
mediante el JT puede consumir un tiempo apreciable, un inconveniente
principalmente para aplicaciones de corta duracin o con gran cantidad de cdigo.
Sin embargo, una vez compilado, el rendimiento del programa puede ser
comparable al que consiguen compiladores nativos de la plataforma destino,
inclusive en tareas numricas. Aunque Java no permite la expansin manual de
llamadas a mtodos, muchos compiladores JT realizan esta optimizacin durante
la carga de la aplicacin y pueden aprovechar informacin del entorno en tiempo
de ejecucin para llevar a cabo transformaciones eficientes durante la propia
ejecucin de la aplicacin. Esta recompilacin dinmica, como la que proporciona
la mquina virtual HotSpot de Sun, puede llegar a mejorar el resultado de
compiladores estticos tradicionales, gracias a los datos que slo estn
disponibles durante el tiempo de ejecucin.
Java fue diseado para ofrecer seguridad y portabilidad, y no ofrece acceso directo
al hardware de la arquitectura ni al espacio de direcciones. Java no soporta
expansin de cdigo ensamblador, aunque las aplicaciones pueden acceder a
caractersticas de bajo nivel usando libreras nativas (JN, Java Native nterfaces).
2.2.2. Introduccin aI Ienguaje JAVA.
EncapsuIado.- es como un envoltorio protector que evita que otro cdigo que esta
afuera pueda acceder arbitrariamente al cdigo o a los datos.
En java la base del encapsulado es la clase.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 29
Una clase define la estructura y el comportamiento (datos y cdigo) que sern
compartidos por un conjunto de objetos
Herencia.- Es el proceso mediante el cual un objeto adquiere las propiedades de otro.
Esto es importante ya que as se consigue la clasificacin jerrquica.
PoIimorfismo.- viene del griego (muchas formas) Es una caracterstica que le permite
a una interfaz ser utilizada por una clase general de acciones.
De forma general se puede expresar con la frase: una interfaz varios mtodos
Identificador.- Puede ser cualquier secuencia de letras con maysculas y minsculas,
nmeros o caracteres, subrayados y el signo $:
No pueden comenzar por un numero
Se diferencia de maysculas y minsculas
Ejemplo: correcto_es
2.2.3. Sintaxis y semntica
La sintaxis de Java se deriva en gran medida de C++. Pero a diferencia de ste,
que combina la sintaxis para programacin genrica, estructurada y orientada a
objetos, Java fue construido desde el principio para ser completamente orientado a
objetos. Todo en Java es un objeto (salvo algunas excepciones), y todo en Java
reside en alguna clase.
HoIa Mundo
Para conocer el origen del programa "Hola Mundo
ApIicaciones autnomas
// Hola.java
public class Hola
{
public static void main(String[] args) {
System.out.println("Hola, mundo!");
}
}
En Java existen 3 tipos de comentarios:
De una sola lnea
De varias lneas
Comentarios JavaDoc o de documentacin.
Los comentarios de una lnea se escriben con //. Ejemplo:
//esto es un comentario de una lnea
Los comentarios de varias lneas se escriben encerrados entre /* y */. Ejemplo:
/*
Esto es un comentario
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 30
de varias lneas.
*/
Los comentarios JavaDoc son un poco ms complejos. Se colocan justamente antes
de una declaracin de un mtodo o una variable. El texto de estos comentarios ha de
ir encerrado entre los smbolos /** y */. Ejemplo:
/**
Esto es un comentario de documentacin
y puede tener ms de una lnea
*/Parntesis ( ).- Para contener expresiones de sentencia de control y flujo en
conversiones de tipo
Las IIaves { }.- Para contener los valor de las veces inicializadas automticamente.
Los corchetes [ ] .-Para declarar tipos matriz
Punto y coma ; .-Para separar sentencias
Punto (.) .- Para separar nombres de paquetes, subpaquetes y clases
Qu son Ios objetos?
En informtica, un OBJETO es un conjunto de variables y de los mtodos relacionados
con esas variables.
Un poco ms sencillo: un objeto contiene en s mismo la informacin y los mtodos o
funciones necesarios para manipular esa informacin.
Lo ms importante de los objetos es que permiten tener un control total sobre 'quin' o
'qu' puede acceder a sus miembros, es decir, los objetos pueden tener miembros
pblicos a los que podrn acceder otros objetos o miembros privados a los que slo
puede acceder l. Estos miembros pueden ser tanto variables como funciones.
El gran beneficio de todo esto es la encapsulacin, el cdigo fuente de un objeto
puede escribirse y mantenerse de forma independiente a los otros objetos contenidos
en la aplicacin.
Qu son Ias cIases?
Una CLASE es un proyecto, o prototipo, que define las variables y los mtodos
comunes a un cierto tipo de objetos.
Un poco ms sencillo: las clases son las matrices de las que luego se pueden crear
mltiples objetos del mismo tipo. La clase define las variables y los mtodos comunes
a los objetos de ese tipo, pero luego, cada objeto tendr sus propios valores y
compartirn las mismas funciones.
Primero deberemos crear una clase antes de poder crear objetos o ejemplares de esa
clase.
Qu son Ios mensajes?
Para poder crear una aplicacin necesitars ms de un objeto, y estos objetos no
pueden estar aislados unos de otros, pues bien, para comunicarse esos objetos se
envan mensajes.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 31
Los mensajes son simples llamadas a las funciones o mtodos del objeto con el se
quiere comunicar para decirle que haga cualquier cosa.
Qu es Ia herencia?
Qu significa esto la herencia, quin hereda qu; bueno tranquilo, esto slo significa
que puedes crear una clase partiendo de otra que ya exista.
Es decir, puedes crear una clase a travs de una clase existente, y esta clase tendr
todas las variables y los mtodos de su 'superclase', y adems se le podrn aadir
otras variables y mtodos propios.
Se llama 'Superclase' a la clase de la que desciende una clase, puedes ver ms sobre
la declaracin de clases en la pgina Declarar Clases.
PaIabras CIave:
Son palabras reservadas del lenguaje y no se pueden usar como identificadores.
Algunas de ellas no estn en uso actualmente.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 32
abstract default goto operator synchronized
boolean do if outer this
break double implements package throw
byte else import private throws
byvalue extends inner protected transient
case false instanceof public true
cast final int rest try
catch finally interface return var
char float long short void
class for native static volatile
const future new super while
continue generic null switch
VariabIes y Tipos de Datos
Las variables son las partes importantes de un lenguaje de programacin: ellas son las
entidades (valores, datos) que actan y sobre las que se acta.
Una declaracin de variable siempre contiene dos componentes, el tipo de la variable
y su nombre.
tipoVariable nombre;
Tipos de VariabIes
Todas las variables en el lenguaje Java deben tener un tipo de dato. El tipo de la
variable determina los valores que la variable puede contener y las operaciones que se
pueden realizar con ella.
Existen dos categorias de datos principales en el lenguaje Java: los tipos primitivos y
los tipos referenciados.
Los tipos primitivos contienen un slo valor e incluyen los tipos como los enteros,
coma flotante, los caracteres, etc... La tabla siguiente muestra todos los tipos
primitivos soportados por el lenguaje Java, su formato, su tamao y una breve
descripcin de cada uno.
Tipo Tamao/Formato Descripcin
(Nmeros
enteros)
byte 8-bit complemento a 2 Entero de un Byte
short 16-bit complemento a 2 Entero corto
int 32-bit complemento a 2 Entero
Iong 64-bit complemento a 2 Entero largo
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 33
(Nmeros reaIes)
fIoat 32-bit EEE 754 Coma flotante de precisin simple
doubIe 64-bit EEE 754 Coma flotante de precisin doble
(otros tipos)
char 16-bit Caracter Un slo carcter
booIean true o false Un valor booleano (verdadero o falso)
Nombres de VariabIes
Un programa se refiere al valor de una variable por su nombre. Por convencin, en
Java, los nombres de las variables empiezan con una letra minscula (los nombres de
las clases empiezan con una letra mayscula).
Un nombre de variabIe Java.
1. debe ser un identificador legal de Java comprendido en una serie de caracteres
Unicode. Unicode es un sistema de codificacin que soporta texto escrito en
distintos lenguajes humanos. Unicode permite la codificacin de 34.168
caracteres. Esto le permite utilizar en sus programas Java varios alfabetos
como el Japons, el Griego, el Ruso o el Hebreo. Esto es importante para que
los programadores pueden escribir cdigo en su lenguaje nativo.
2. no puede ser el mismo que una palabra clave o el nombre de un valor
booleano (true or false)
3. no deben tener el mismo nombre que otras variables cuyas declaraciones
aparezcan en el mismo mbito.
La regla nmero 3 implica que podra existir el mismo nombre en otra variable que
aparezca en un mbito diferente.
Por convencin, los nombres de variables empiezan por un letra minscula. Si una
variable est compuesta de ms de una palabra, como 'nombreDato' las palabras se
ponen juntas y cada palabra despus de la primera empieza con una letra mayscula.
Operadores de Java
Los operadores realizan algunas funciones en uno o dos operandos. Los operadores
que requieren un operador se llaman operadores unarios. Por ejemplo, ++ es un
operador unario que incrementa el valor su operando en uno.
Los operadores que requieren dos operandos se llaman operadores binarios. El
operador = es un operador binario que asigna un valor del operando derecho al
operando izquierdo.
Los operadores unarios en Java pueden utilizar la notacin de prefijo o de sufijo. La
notacin de prefijo significa que el operador aparece antes de su operando.
operador operando
La notacin de sufijo significa que el operador aparece despus de su operando:
operando operador
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 34
Todos los operadores binarios de Java tienen la misma notacin, es decir aparecen
entre los dos operandos:
op1 operator op2
Adems de realizar una operacin tambin devuelve un valor. El valor y su tipo
dependen del tipo del operador y del tipo de sus operandos. Por ejemplo, los
operadores aritmticos (realizan las operaciones de aritmtica bsica como la suma o
la resta) devuelven nmeros, el resultado tpico de las operaciones aritmticas. El tipo
de datos devuelto por los operadores aritmticos depende del tipo de sus operandos:
si sumas dos enteros, obtendrs un entero. Se dice que una operacin evala su
resultado.
Es muy til dividir los operadores Java en las siguientes categoras: aritmticos,
relacionales y condicionales. Lgicos y de desplazamiento y de asignacin.
Operadores Aritmticos
El lenguaje Java soporta varios operadores aritticos - incluyendo + (suma), - (resta), *
(multiplicacin), / (divisin), y % (mdulo)-- en todos los nmeros enteros y de coma
flotante. Por ejemplo, puedes utilizar este cdigo Java para sumar dos nmeros:
sumaEsto + aEsto
O este cdigo para calcular el resto de una divisin:
divideEsto % porEsto
Esta tabla sumariza todas las operaciones aritmticas binarias en Java.
Operador Uso Descripcin
+ op1 + op2 Suma op1 y op2
- op1 - op2 Resta op2 de op1
* op1 * op2 Multiplica op1 y op2
/ op1 / op2 Divide op1 por op2
% op1 %
op2
Obtiene el resto de dividir op1 por op2
Nota: El lenguaje Java extiende la definicin del operador + para incluir la
concatenacin de cadenas.
Los operadores + y - tienen versiones unarias que seleccionan el signo del operando.
Operador Uso Descripcin
+ + op ndica un valor positivo
- - op Niega el operando
Adems, existen dos operadores de atajos aritmticos, ++ que incrementa en uno su
operando, y -- que decrementa en uno el valor de su operando.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 35
Operador Uso Descripcin
++ op ++ ncrementa op en 1; evala el valor antes de incrementar
++ ++ op ncrementa op en 1; evala el valor despus de incrementar
-- op -- Decrementa op en 1; evala el valor antes de decrementar
-- -- op Decrementa op en 1; evala el valor despus de decrementar
Operadores ReIacionaIes y CondicionaIes
Los valores relacionales comparan dos valores y determinan la relacin entre ellos.
Por ejemplo, != devuelve true si los dos operandos son distintos.
Esta tabla sumariza los operadores relacionales de Java.
Operador Uso DevueIve true si
&gt; op1 &gt; op2 op1 es mayor que op2
&gt;= op1 &gt;= op2 op1 es mayor o igual que op2
&It; op1 &lt; op2 op1 es menor que op2
&It;= op1 &lt;= op2 op1 es menor o igual que op2
== op1 == op2 op1 y op2 son iguales
!= op1 != op2 op1 y op2 son distintos
Frecuentemente los operadores relacionales se utilizan con otro juego de operadores,
los operadores condicionales, para construir expresiones de decisin ms complejas.
Uno de estos operadores es && que realiza la operacin Y booleana . Por ejemplo
puedes utilizar dos operadores relacionales diferentes junto con && para determinar si
ambas relaciones son ciertas. La siguiente lnea de cdigo utiliza esta tcnica para
determinar si un indice de un array est entre dos lmites- esto es, para determinar si
el indice es mayor que 0 o menor que NUM_ENTRES (que se ha definido
prviamente como un valor constante):
0 &lt; index && index &lt NUM_ENTRES
Observa que en algunas situaciones, el segundo operando de un operador relacional
no ser evaluado. Consideremos esta sentencia:
((count &gt; NUM_ENTRES) && (System.in.read() != -1))
Si count es menor que NUM_ENTRES, la parte izquierda del operando de && evala
a false. El operador && slo devuelve true si los dos operandos son verdaderos. Por
eso, en esta situacin se puede deteminar el valor de && sin evaluar el operador de la
derecha. En un caso como este, Java no evala el operando de la derecha. As no se
llamar a System.in.read() y no se leer un carcter de la entrada estandard.
Aqu tienes tres operadores condicionales.
Operador Uso DevueIve true si
&& op1 && op2 op1 y op2 son verdaderos
|| op1 || op2 uno de los dos es verdadero
! ! op op es falso
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 36
El operador & se puede utilizar como un sinnimo de && si ambos operadores son
booleanos. Similarmente, | es un sinonimo de || si ambos operandos son booleanos.
Operadores de DespIazamiento
Los operadores de desplazamiento permiten realizar una manipualcin de los bits de
los datos. Esta tabla sumariza los operadores lgicos y de desplazamiento disponibles
en el lenguaje Java.
Operador Uso Descripcin
&gt;&gt; op1 &gt;&gt; op2 desplaza a la derecha op2 bits de op1
&It;&It; op1 &lt;&lt; op2 desplaza a la izquierda op2 bits de op1
&gt;&gt;&gt; op1 &gt;&gt;&gt;
op2
desplaza a la derecha op2 bits de op1(sin
signo)
& op1 & op2 bitwise and
| op1 | op2 bitwise or
^ op1 ^ op2 bitwise xor
~ ~ op bitwise complemento
Los tres operadores de desplazamiento simplemente desplazan los bits del operando
de la izquierda el nmero de posiciones indicadas por el operador de la derecha. Los
desplazamientos ocurren en la direccin indicada por el propio operador. Por ejemplo:
desplaza los bits del entero 13 una posicin a la derecha. La representacin binaria del
nmero 13 es 1101. El resultado de la operacin de desplazamiento es 110 o el 6
decimal. Observe que el bit situado ms a la derecha desaparece. Un desplazamiento
a la derecha de un bit es equivalente, pero ms eficiente que, dividir el operando de la
izquierda por dos. Un desplazamiento a la izquierda es equivalente a multiplicar por
dos.
Los otros operadores realizan las funciones lgicas para cada uno de los pares de bits
de cada operando. La funcin "y" activa el bit resultante si los dos operandos son 1.
op1 op2 resuItado
0 0 0
0 1 0
1 0 0
1 1 1
Supon que quieres evaluar los valores 12 "and" 13:
12 & 13
El resultado de esta operacin es 12. Por qu? Bien, la representacin binaria de 12
es 1100 y la de 13 es 1101. La funcin "and" activa los bits resultantes cuando los bits
de los dos operandos son 1, de otra forma el resultado es 0. Entonces si colocas en
lnea los dos operandos y realizas la funcin "and", puedes ver que los dos bits de
mayor peso (los dos bits situados ms a la izquierda de cada nmero) son 1 as el bit
resultante de cada uno es 1. Los dos bits de menor peso se evalan a 0 poque al
menos uno de los dos operandos es 0:
1101
& 1100
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 37
------
1100
El operador | realiza la operacin O inclusiva y el operador ^ realiza la operacin O
exclusiva. O inclusiva significa que si uno de los dos operandos es 1 el resultado es 1.
op1 op2 resuItado
0 0 0
0 1 1
1 0 1
1 1 1
O exclusiva significa que si los dos operandos son diferentes el resultado es 1, de otra
forma el resultado es 0.
op1 op2 resuItado
0 0 0
0 1 1
1 0 1
1 1 0
Y finalmente el operador complemento invierte el valor de cada uno de los bites del
operando: si el bit del operando es 1 el resultado es 0 y si el bit del operando es 0 el
resultado es 1.
Operadores de Asignacin
Puedes utilizar el operador de asignacin =, para asignar un valor a otro. Adems del
operador de asignacin bsico, Java proporciona varios operadores de asignacin que
permiten realizar operaciones aritmtcias, lgicas o de bits y una operacin de
asignacin al mismo tiempo. Especificamente, supon que quieres a&ntilde;adir un
nmero a una variable y asignar el resultado dentro de la misma variable, como esto:
i = i + 2;
Puedes ordenar esta sentencia utilizando el operador +=.
i += 2;
Las dos lneas de cdigo anteriores son equivalentes.
Esta tabla lista los operadores de asignacin y sus equivalentes.
Operador Uso EquivaIe a
+= op1 += op2 op1 = op1 + op2
-= op1 -= op2 op1 = op1 - op2
*= op1 *= op2 op1 = op1 * op2
/= op1 /= op2 op1 = op1 / op2
%= op1 %= op2 op1 = op1 % op2
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 38
&= op1 &= op2 op1 = op1 & op2
|= op1 |= op2 op1 = op1 | op2
^= op1 ^= op2 op1 = op1 ^ op2
&It;&It;= op1 &lt;&lt;= op2 op1 = op1 &lt;&lt; op2
&gt;&gt;= op1 &gt;&gt;= op2 op1 = op1 &gt&gt; op2
&gt;&gt;&gt;= op1 &gt;&gt;&gt;= op2 op1 = op1 &gt;&gt;&gt; op2
CONVERSIONES
Es asignar un valor de un tipo a una variable de otro tipo. Si los dos tipos son
compatibles entonces la conversin es automtica, Por ejemplo si quiere convertir de
un tipo int a un tipo long no hay problema; sin embargo no todos los tipos son
compatibles y por lo tanto no todas las conversiones se realizan implcitamente.
Ejemplo de un tipo double a tipo byte
Para hacer esto se debe usar un cast.
CONVERSIONES AUTOMTICAS
Se producen si existen la conversiones siguientes:
Los dos tipos son compatibles
El tipo destino es mas grande que el tipo origen.
CONVERSIN INCOMPATIBLES
Se utiliza un cast que es simplemente una conversin de tipo explicita y tiene la
siguiente forma.
El tipo de dato y el valor al cual se lo va a convertir
Tipo: indica al tipo que se ha de convertir el valor indicado.
Ejemplo:
int a;
byte b;
b=(byte) a
EjempIo
class Conversion{
public static void main(String arg[]){
byte b;
int i=257;
double d=325.47;
b=(byte)i;
System.out.println("i y b:"+i+" "+b);
i=(int)d;
System.out.println("d e i:"+d+" "+i);
b=(byte)d;
System.out.println("d y b:"+d+" "+b);
}
}
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 39
TERCERA UNIDAD:
3.1. Sentencias de ControI
Sentencias de ControI de FIujo en Java
Las sentencias de control de flujo determinan el orden en que se ejecutarn las otras
sentencias dentro del programa. El lenguaje Java soporta varias sentencias de control
de flujo, incluyendo.
Sentencias paIabras cIave
toma de decisiones if-else, switch-case
bucles for, while, do-while
excepciones try-catch-finally, throw
miscelaneas break, continue, label:, return
Nota: Aunque goto es una palabra reservada, actualmente el lenguaje Java no la
soporta. Podemos utilizar las rupturas etiquetadas en su lugar.
La sentencia if-eIse
La sentencia if-eIse de java proporciona a los programas la posibilidad de ejecutar
selectivamente otras sentencias basndose en algn criterio.
Por ejemplo, supon que tu programa imprime informacin de depurado basndose en
el valor de una variable booleana llamada DEBUG. Si DEBUG fuera verdadera true, el
programa imprimira la informacin de depurado, como por ejemplo, el valor de una
variable como x. Si DEBUG es faIse el programa proceder normalmente. Un
segmento de cdigo que implemente esto se podra parecer a este.
. . .
if (DEBUG)
System.out.println("DEBUG: x = " + x);
. . .
Esta es la versin ms sencilla de la sentencia if: la sentencia gobernada por if se
ejecuta si alguna codicin es verdadera. Generalmente, la forma sencilla de if se
puede escribir as.
if (expresin)
sentencia
Pero, y si quieres ejecutar un juego diferente de sentencias si la expresin es falsa?
Bien, puedes utilizar la sentencia eIse. Echemos un vistazo a otro ejemplo. Supon que
tu programa necesita realizar diferentes acciones dependiendo de que el usuario pulse
el botn OK o el botn Cancel en un ventana de alarma. Se podra hacer esto
utilizando una sentencia if.
. . .
// Respuesta dependiente del boton que haya pulsado el usuario
// OK o Cancel
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 40
. . .
if (respuesta == OK) {
. . .
// Cdigo para la accin OK
. . .
} else {
. . .
// cdigo para la accin Cancel
. . .
}
Este uso particular de la sentencia eIse es la forma de capturarlo todo.
Existe otra forma de la sentecia eIse, eIse if que ejecuta una sentencia basada en otra
expresin. Por ejemplo, supon que has escrito un programa que asigna notas basadas
en la puntuacin de un examen, un Sobresaliente para una puntuacin del 90% o
superior, un Notable para el 80% o superior y dems. odras utilizar una sentencia if
con una serie de comparaciones eIse if y una setencia eIse para escribir este cdigo.
int puntuacion;
String nota;
if (puntuacion >= 90) {
nota = "Sobresaliente";
} else if (puntuacion >= 80) {
nota = "Notable";
} else if (puntuacion >= 70) {
nota = "Bien";
} else if (puntuacion >= 60) {
nota = "Suficiente";
} else {
nota = "nsuficiente";
}
Una sentencia if puede tener cualquier nmero de sentencias de acompaamiento
eIse if.
Podras haber observado que algunos valores de puntuacion pueden satisfacer ms
una de las expresiones que componen la sentencia if. Por ejemplo, una puntuacin de
76 podra evaluarse como true para dos expresiones de esta sentencia:puntuacion >=
70 y puntuacion >= 60.
Sin embargo, en el momento de ejecucin, el sistema procesa una sentencia if
compuesta como una sla; una vez que se ha satisfecho una condicin (76 >= 70), se
ejecuta la sentencia apropiada (nota = "Bien";), y el control sale fuera de la sentencia
if sin evaluar las condiciones restantes.
La sentencia switch
La sentencia switch se utiliza para realizar sentencias condicionalmente basadas en
alguna expresin. Por ejemplo, supon que tu programa contiene un entero llamado
mes cuyo valor indica el mes en alguna fecha. Supon que tambin quieres mostrar el
nombre del mes basndose en su nmero entero equivalente. Podras utilizar la
sentencia switch de Java para realizar esta tarea.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 41
int mes;
. . .
switch (mes) {
case 1: System.out.println("Enero"); break;
case 2: System.out.println("Febrero"); break;
case 3: System.out.println("Marzo"); break;
case 4: System.out.println("Abril"); break;
case 5: System.out.println("May0"); break;
case 6: System.out.println("Junio"); break;
case 7: System.out.println("Julio"); break;
case 8: System.out.println("Agosto"); break;
case 9: System.out.println("Septiembre"); break;
case 10: System.out.println("Octubre"); break;
case 11: System.out.println("Noviembre"); break;
case 12: System.out.println("Diciembre"); break;
}
La sentencia switch evala su expresin, en este caso el valor de mes, y ejecuta la
sentencia case apropiada.
Decidir cuando utilizar las sentencias if o switch dependen del juicio personal. Puedes
decidir cual utilizar basndose en la buena lectura del cdigo o en otros factores.
Cada sentencia case debe ser nica y el valor proporcionado a cada sentencia case
debe ser del mismo tipo que el tipo de dato devuelto por la expresin proporcionada a
la sentencia switch.
Otro punto de interes en la sentencia switch son las sentencias break despus de
cada case.
La sentencia break hace que el control salga de la sentencia switch y contine con la
siguiente lnea.
La sentencia break es necesaria porque las sentencias case se siguen ejecutando
hacia abajo. Esto es, sin un break explcito, el flujo de control seguira
secuencialmente a travs de las sentencias case siguientes.
En el ejemplo anterior, no se quiere que el flujo vaya de una sentencia case a otra, por
eso se han tenido que poner las sentencias break.
Sin embargo, hay ciertos escenario en los que querrs que el control proceda
secuencialmente a travs de las sentencias case. Como este cdigo que calcula el
nmero de das de un mes de acuerdo con el ritmico refrn que dice "Treinta das
tiene Septiembre...".
int mes;
int numeroDias;
. . .
switch (mes) {
case 1.
case 3.
case 5.
case 7.
case 8.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 42
case 10.
case 12.
numeroDias = 31;
break;
case 4.
case 6.
case 9.
case 11.
numeroDias = 30;
break;
case 2.
if ( ((ano % 4 == 0) && !(ano % 100 == 0)) || ano % 400 == 0) )
numeroDias = 29;
else
numeroDias = 28;
break;
}
Finalmente, puede utilizar la sentencia defauIt al final de la sentencia switch para
manejar los valores que no se han manejado explcitamente por una de las sentencias
case.
int mes;
. . .
switch (mes) {
case 1: System.out.println("Enero"); break;
case 2: System.out.println("Febrero"); break;
case 3: System.out.println("Marzo"); break;
case 4: System.out.println("Abril"); break;
case 5: System.out.println("Mayo"); break;
case 6: System.out.println("Junio"); break;
case 7: System.out.println("Julio"); break;
case 8: System.out.println("Agosto"); break;
case 9: System.out.println("Septiembre"); break;
case 10: System.out.println("Octubre"); break;
case 11: System.out.println("Noviembre"); break;
case 12: System.out.println("Diciembre"); break;
defauIt: System.out.printIn("Ee, no es un mes vIido!");
break;
}
Sentencias de BucIe
Generalmente hablando, una sentencia whiIe realiza una accin mientras se cumpla
una cierta condicin. La sintaxis general de la sentencia whiIe es.
while (expresin)
sentencia
Esto es, mientras la expresin sea verdadera, ejecutar la sentencia.
sentencia puede ser una sla sentencia o puede ser un bloque de sentencias. Un
bloque de sentencias es un juego de sentencias legales de java contenidas dentro de
corchetes('{'y '}').
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 43
Por ejemplo, supon que adems de incrementar contador dentro de un bucle whiIe
tambin quieres imprimir el contador cada vez que se lea un carcter. Podras escribir
esto en su lugar.
. . .
while (System.in.read() != -1) {
contador++;
System.out.println("Se ha leido un el carcter = " + contador);
}
. . .
Por convencin el corchete abierto '{' se coloca al final de la misma lnea donde se
encuentra la sentencia whiIe y el corchete cerrado '}' empieza una nueva lnea
indentada a la lnea en la que se encuentra el whiIe.
Adems de while Java tiene otros dos constructores de bucles que puedes utilizar en
tus programas.
El bucle for y el bucle do-whiIe.
Primero el bucle for. Puedes utilizar este bucle cuando conozcas los lmites del bucle
(su instruccin de inicializacin, su criterio de terminacin y su instruccin de
incremento). Por ejemplo, el bucle for se utiliza frecuentemente para iterar sobre los
elementos de un array, o los caracteres de una cadena.
// a es un array de cualquier tipo
. . .
int i;
int length = a.length;
for (i = 0; i < length; i++) {
. . .
// hace algo en el elemento i del array a
. . .
}
Si sabes cuando estas escribiendo el programa que quieres empezar en el inicio del
array, parar al final y utilizar cada uno de los elementos. Entonces la sentencia for es
una buena eleccin. La forma general del bucle for puede expresarse asi.
for (inicializacin; terminacin; incremento)
sentencias
inicializacin es la sentencia que inicializa el bucle -- se ejecuta una vez al iniciar el
bucle.
terminacin es una sentecia que determina cuando se termina el bucle. Esta expresin
se evala al principio de cada iteraccin en el bucle. Cuando la exprein se evala a
faIse el bucle se termina.
Finalmente, incremento es una expresin que se invoca en cada interaccin del bucle.
Cualquiera (o todos) de estos componentes puden ser una sentencia vaca (un punto y
coma).
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 44
Java proporciona otro bucle, el bucle do-whiIe,que es similar al bucle whiIe que se vi
al principio, excepto en que la expresin se aval al final del bucle.
do {
sentencias
} while (Expresin Booleana);
La sentencia do-whiIe se usa muy poco en la construccin de bucles pero tiene sus
usos. Por ejemplo, es conveniente utilizar la sentencia do-whiIe cuando el bucle debe
ejecutarse al menos una vez. Por ejemplo, para leer informacin de un fichero,
sabemos que al menos debe leer un carcter.
int c;
nputStream in;
. . .
do {
c = in.read();
. . .
} while (c != -1);
3.2.- Arrays
Un Arrays es un grupo de variables del mismo tipo a las que se hace referencia con el
mismo nombre. Se pueden crear arrays de cualquier tipo de datos, y pueden tener una
o mas dimensiones, o un elemento especifico de una matriz, se accede por su ndice.
Arrays Unidimensionales
Es una lista de variables de un mismo tipo
Sintaxis: tipo nombre de matriz [ ] ;
int mes [ ];
Se pueden declarar en Java arrays de cualquier tipo:
char s[];
int iArray[];
Para indicar el tamao de una matriz
nombre de matriz = new int [12];
mes = new [12]
ncluso se pueden construir arrays de arrays:
int tabla[][] = new int[4][5];
Los lmites de los arrays se comprueban en tiempo de ejecucin para evitar
desbordamientos y la corrupcin de memoria.
En Java un array es realmente un objeto, porque tiene redefinido el operador ./. Tiene
una funcin miembro: length. Se puede utilizar este mtodo para conocer la longitud
de cualquier array.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 45
int a[][] = new int[10][3];
a.length; /* 10 */
a[0].length; /* 3 */
Para crear un array en Java hay dos mtodos bsicos. Crear un array vaco:
int lista[] = new int[50];
o se puede crear ya el array con sus valores iniciales:
String nombres[] = {
"Juan","Pepe","Pedro","Maria"
};
Esto que es equivalente a:
String nombres[];
nombres = new String[4];
nombres[0] = new String( "Juan" );
nombres[1] = new String( "Pepe" );
nombres[2] = new String( "Pedro" );
nombres[3] = new String( "Maria" );
No se pueden crear arrays estticos en tiempo de compilacin:
int lista[50]; // generar un error en tiempo de compilacin
Tampoco se puede rellenar un array sin declarar el tamao con el operador ne0:
int lista[];
for( int i=0; i < 9; i++ )
lista[i] = i;
Es decir, todos los arrays en Java son estticos. Para convertir un array en el
equivalente a un array dinmico en C/C++, se usa la clase vector, que permite
operaciones de insercin, borrado, etc. en el array.
Arrays
Se pueden declarar en Java arrays de cualquier tipo:
char s[];
int iArray[];
ncluso se pueden construir arrays de arrays:
int tabla[][] = new int[4][5];
Los lmites de los arrays se comprueban en tiempo de ejecucin para evitar
desbordamientos y la corrupcin de memoria.
En Java un array es realmente un objeto, porque tiene redefinido el operador ./. Tiene
una funcin miembro: length. Se puede utilizar este mtodo para conocer la longitud
de cualquier array.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 46
int a[][] = new int[10][3];
a.length; /* 10 */
a[0].length; /* 3 */
Para crear un array en Java hay dos mtodos bsicos. Crear un array vaco:
int lista[] = new int[50];
o se puede crear ya el array con sus valores iniciales:
String nombres[] = {
"Juan","Pepe","Pedro","Maria"
};
Esto que es equivalente a:
String nombres[];
nombres = new String[4];
nombres[0] = new String( "Juan" );
nombres[1] = new String( "Pepe" );
nombres[2] = new String( "Pedro" );
nombres[3] = new String( "Maria" );
No se pueden crear arrays estticos en tiempo de compilacin:
int lista[50]; // generar un error en tiempo de compilacin
Tampoco se puede rellenar un array sin declarar el tamao con el operador ne0:
int lista[];
for( int i=0; i < 9; i++ )
lista[i] = i;
Es decir, todos los arrays en Java son estticos. Para convertir un array en el
equivalente a un array dinmico en C/C++, se usa la clase vector, que permite
operaciones de insercin, borrado, etc. en el array.
EjempIo 1.
public class matriz1{
public static void main(String arg[]){
int dia_mes[ ];
dia_mes= new int[12];
dia_mes[0]=31;
dia_mes[1]=28;
dia_mes[2]=31;
dia_mes[3]=30;
dia_mes[4]=31;
dia_mes[5]=30;
dia_mes[6]=31;
dia_mes[7]=30;
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 47
dia_mes[8]=31;
dia_mes[9]=30;
dia_mes[10]=31;
dia_mes[11]=30;
System.out.println("El mes de abril tiene:"+dia_mes[3]+"dias");
}
}
EjempIo 2
class promedio{
public static void main(String args[]){
double promedio[]={7.5,4.6,8.9,7.6,9.0};
double res,sum;
sum=0.0;
for(int x=0;x<5;x++){
sum=sum+promedio[x];
}
res=sum/5;
System.out.println("el promedio es:"+res);
}
}
Sentencias de Manejo de Excepciones
Cuando ocurre un error dentro de un mtodo Java, el mtodo puede lanzar una
excepcin para indicar a su llamador que ha ocurrido un error y que el error est
utilizando la sentencia throw.
El mtodo llamador puede utilizar las sentencias try, catch, y finaIIy para capturar y
manejar la excepcin.
Puedes ver Manejar Errores Utilizando Excepciones para obtener ms informacin
sobre el lanzamiento y manejo de excepciones.
Sentencias de Ruptura
Ya has visto la sentencia break en accin dentro de la sentencia switch
anteriormente. Como se observ anteriormente, la sentencia break hace que el control
del flujo salte a la sentencia siguiente a la actual.
Hay otra forma de break que hace que el flujo de control salte a una sentencia
etiquetada.
Se puede etiquetar una sentencia utilizando un identificador legal de Java (la etiqueta)
seguido por dos puntos (:) antes de la sentencia.
SaltaAqui: algunaSentenciaJava
Para saltar a la sentencia etiquetada utilice esta forma de la sentencia break.
break SaltaAqui;
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 48
Las rupturas etiquetadas son una alternativa a la sentencia goto que no est
soportada por el lenguaje Java.
Se puede utiliza la sentencia continue dentro de un bucle para saltar de la sentencia
actual hacia el principio del bucle o a una sentencia etiquetada.
Considera esta implementacin del mtodo indexOf() de la clase String que utiliza la
forma de continue que contina en una sentencia etiquetada.
public int indexOf(String str, int fromndex) {
char[] v1 = value;
char[] v2 = str.value;
int max = offset + (count - str.count);
test.
for (int i = offset + ((fromndex < 0) ? 0 : fromndex); i <= max ; i++) {
int n = str.count;
int j = i;
int k = str.offset;
while (n-- != 0) {
if (v1[j++] != v2[k++]) {
continue test;
}
}
return i - offset;
}
return -1;
}
Nota: Slo se puede llamar a la sentencia continue desde dentro de un bucle.
Y finalmente la sentencia return.
Esta sentencia se utiliza para salir del mtodo actual y volver a la sentencia siguiente a
la que origin la llamada en el mtodo original.
Existen dos formas de return: una que devuelve un valor y otra que no lo hace.
Para devolver un valor, simplemente se pone el valor (o una expresin que calcule el
valor) detrs de la palabra return.
return ++count;
El valor devuelto por return debe corresponder con el tipo del valor de retorno de la
declaracin del mtodo.
Cuando un mtodo se declara como void utiliza la forma de return que no devuelve
ningn valor.
return;
Ejercicio
Diagrama de flujo para hallar el mayor de 2 nmeros.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 49
En java:
int a=15, b=4;
if (a>b)
System.out.println("el mayor es: +a);
Else
System.out.println("el mayor es: +b);
Metodo Main
package practica;
public class Main {

public static void main(String[] args) {
System.out.println("este es el metodo main principal");

Saludo salu=new Saludo(); // para crear un objeto de la clase saludo
salu.Saludo(); // para llamar a la clase saludo con el objeto creado

area ar=new area(); // para crear un objeto de la clase area
ar.CalcuArea(); // para llamar a la clase area con el objeto creado
}

}
CIase SaIudo:
package practica;
public class Saludo {

public void Saludo() {
System.out.println("este es un saludo");
UNL-Informtica Educativa
Inicio
a=5, b=4
a>
b
b
a
f
La programacin y su Aplicacin en la Educacin 50
}
}
CIase area:
package practica;
public class area {
public void CalcuArea() {
int a=13, b=15,res=0;
res=a*b;
System.out.println("el area es:"+res);
}
}
If anidados
if(condicin){
if (condicin)
if (condicin)
Proceso
else
Proceso
1. Mayor de 3 nmeros
package practica;
public class Mayor3num {

public void Mayor3num() {
int a=15,b=4,c=7;
if(a>b){
if(a>c)
System.out.println("El mayor es:"+a);
} else
if(b>c)
System.out.println("El mayor es:"+b);
else
System.out.println("El mayor es:"+c);

}
}

2. Hacer un programa que asigne vaIores a 4 nmeros a, b, c, d, eI programa ha
de sumarnos si a/b >c/d; sino soIo ha de sumar b y d. En caso que b =0 o d=0, eI
programa a de mostrar un mensaje mostrando que no se puede dividir por 0 en
taI caso no ha de hacerse ninguna operacin.
Metodo principaI main
package practica;
public class Main {

UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 51
public static void main(String[] args) {
System.out.println("este es el metodo main principal");

Saludo salu=new Saludo(); // para crear un objeto de la clase saludo
salu.Saludo(); // para llamar a la clase saludo con el objeto creado

area ar=new area(); // para crear un objeto de la clase area
ar.CalcuArea(); // para llamar a la clase area con el objeto creado

Mayor m=new Mayor();
m.Mayor();
Mayor3num m3=new Mayor3num();
m3.Mayor3num();

Asignar asig=new Asignar();
asig.Asignar();
}

}
package practica;
public class Asignar {

public void Asignar() {
int a=4,b=2,c=9,d=3, sum=0;
double e=0.0,f=0.0;
if ((b==0)||(d==0))
System.out.println("No se p d p 0");
else
e=a/b;
f=c/d;
if(e>f){
sum=a+c;
System.out.println("La suma es:"+sum);
}else
sum=b+d;
System.out.println("La suma es:"+sum);
}
}
REALIZAR LOS SIGUIENTES EJERCICIOS
Resolver la siguiente ecuacin: ax
2
+bx+c.
Este Ejercicio se lo resuelve aplicando la formula general.
X= -b+- b2-4ac
2a
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 52
CODIFICACIN:
package practica;
public class ecuacion {
public void ecuacion() {
double a=2;
double b=4;
double c=3;
double r,x,num;
double x1=b*b;
double x2=4*a*c;
double x3=x1+x2;
r=Math.sqrt(x3);
double den=2*a;
double res1=((-b+r)/(den));
double res2=((-b-r)/(den));
System.out.println ("La ecuacin es la siguiente");
System.out.println ("x1="+res1);
System.out.println ("x2="+res2);
}
}
ReaIice Un Programa UtiIizando Las CIases Math Que ReaIice Las Siguientes
Operaciones.
Devuelva el mximo de a y b.
Devuelva el mnimo de a y b.
Redondee el valor ms cercano de un valor x el tipo de int.
Calcular la raz cuadrada de de x.
Devuelva la tangente del Angulo a en radiante.
Calcular el rea de un crculo. Formula: pi x r
2
CODIFICACIN:
package practica;
public class Maximo {

public void Maximo() {
double a=20.5;
double b=14;
double r=12.5;
System.out.println("PROGRAMA VAROS EJERCCOS");
double x=a+b;
double max=Math.max(a,b);
System.out.println(max);
double min = Math.min(a,b);
System.out.println(min);
double re =Math.round(x);
System.out.println(re);
double ra =Math.sqrt(x);
System.out.println(ra);
double tang = Math.tan(x);
System.out.println(tang);
double acir=Math.P*Math.pow(r,2);
System.out.println(acir);

UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 53
}
}
Ejemplo utilizando la sentencia Swithc, breack
Public static void main(....){
for(int i=0;i<6;i++){
swithc(i){
case 0:
System.o.p(i+es cero);
breack;
case 1:
System.o.p(i +es uno);
breack;
case 2:
System.o.p(i +es dos);
breack;
default:
System.o.p(i+es mayor a 2);
}
Ejemplo utilizando las sentencias nteraccin while.
Para imprimir en forma descendente los 10 primeros numero enteros.
Public static void main (String arg[ ] ){
int i=10;
while (i>0){
System.out.printl ( i );
i--;
}
}
ReaIizar un programa que me permita presentar Ia suma de Ios 20 primero
nmeros impares.
package practica;
public class mpar20 {

public void mpar20() {
System.out.println("PROGRAMA PARA SUMAR LOS 20 PRMOS");
int imp=1;
int sum=0;
while (imp<=40){
System.out.println(imp);
sum=sum+imp;
imp=imp+2;
}
System.out.println("la suma es:"+sum);
}

}
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 54
ReaIizar un programa que me permita sacar Ia potencia de un numero:
package practica;
public class Potencia {

public void Potencia() {
int b=5, exp=4;
int i=1;
int b1=b;
while(i<exp){
b=b1*b;
i++;
}
System.out.println("La potencia es:"+b);
}

}
Sentencia do-whiIe
Como hemos visto si expresin condicional de control de un bucle while es
inicialmente falsa, entonces el cuerpo del bucle no se ejecutara. Sin embargo algunas
veces en necesario ejecutar el cuerpo del bucle while al menos unas vez, incluso si la
expresin condicional tiene el valor falso la primera vez..
La forma general de esta sentencia es:
do
sentencia;
while (expresion);
sentencia se ejecutar mientras el valor de expresion sea verdadero.
sentencia siempre se ejecuta al menos una vez.
Si sentencia es compuesta se encierra entre { }.
Para la mayora de las aplicaciones es mejor y ms natural comprobar la condicin
antes de ejecutar el bucle, por ello se usa ms la sentencia whiIe.
Un ejemplo de uso de esta sentencia es el siguiente fragmento de programa, que pide
un nmero igual a 0:
int numero = 0;
do
{
printf("ntroduce el nmero 0:\n");
scanf("%d", &numero); /* Se lee el numero */
} while (numero != 0);
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 55
CLASES EN JAVA
Nota: Clase: Es una agrupacin de objetos de una misma clase
Class nombre_de_la_clase{
tipo variable;
tipo variable;
tipo metod1 (parmetro){
Sentencias;
}
tipo metodo2(parmetros){
Sentencias;
}
}
EjempIo:
Class Caja{
double largo;
double ancho;
double altura;
}
Objeto: instancia de una clase.
Caja micaja= new Caja( );
miCaja.Caja; //Declara la referencia a un objeto
miCaja=new miCaja( ); //reserva espacio de memoria
miCaja.largo=8;
ejemplo para una instancia de una clase
CIase Caja:
package segundomomento;
public class Caja {

double largo;
double ancho;
double altura;
}
Metodo PrincipaI Main:
package segundomomento;
public class Main {

public static void main(String[] args) {
Caja miCaja=new Caja();
double vol;
miCaja.largo=8;
miCaja.ancho=13.4;
UNL-Informtica Educativa
Nombre
Atributos
Mto!os
La programacin y su Aplicacin en la Educacin 56
miCaja.altura=6.8;
vol=miCaja.largo*miCaja.ancho*miCaja.altura;
System.out.println("El volumen es:"+vol);
}

}

CONSTRUCTORES.
Java permite que los objetos se inicialicen cuando son creados. Esta inicializacin
automtica se realiza a travs del constructor.
Un constructor inicializa un objeto inmediatamente despus de su creacin tiene
exactamente el mismo nombre que la clase en la que recibe y sintacticamente es
similar a un mtodo.
Clase Caja{
Double largo;
Double ancho;
Double alto;
Caja(double l, doble a, double al ){ //constructor, tiene el mismo nombre de la
clase residente
Largo=l, Ancho=a, Alto=al;
}
Caja (int j, int p){
J=m;
P=n;
}
Double volumen( ){
Return largo*ancho*altura;
}
}
0
Main
Caja c=new Caja( );
c.largo=0.35;
PROGRAMA PARA SUMAR 3 NUM REALES, RESTAR 2 INTEGER, Y
MULTIPLICAR 4 NUM (2 INT, Y 2 REALES).
CLASE
public class Operaciones {
double a;
double b;
double c;
double d;
double e;
int f;
int h;

public Operaciones(){
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 57
a=5.2;
b=2.0;
c=4.2;
}
double sum(){
return (a+b+c);
}
public Operaciones(nteger a, nteger b){
c=a;
d=b;
}
double res(){
return (c-d);
}
public Operaciones(double l, double o, int c, int d){
a=l;
b=o;
f=c;
h=d;
}
double mult(){
return (a*b*f*h);
}
}
public class Main {
public static void main(String[] args) {

Operaciones op= new Operaciones();
System.out.println("La suma es: "+op.sum());

Operaciones op1=new Operaciones(5,6);
System.out.println("La resta es: "+op1.res());

Operaciones op2=new Operaciones(2.5,2.5,2,2);
System.out.println("La multiplicacion es: "+op2.mult());
}
}
SOBRECARGA DE METODOS.
En java es posible definir 2 o mas mtodos dentro de la misma clase que tengan el
mismo nombre pero con sus listas de parmetros distintas. La sobrecarga de mtodo
la utiliza java para implementar el polimorfismo.
Los constructores son mtodos, con el mismo nombre de la clase, que sirven para
definir el valor de las variables de la clase cuando creas el objeto.
Un ejemplo sera este
class UnaClase {
byte unaVariable, otraVariable;
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 58
/*Ahora crearemos el constructor. Como veis, tiene el mismo nombre que la clase.*/
UnaClase(byte x, byte y) {
unaVariable = x; otraVariable = y;
}
}
Con este constructor ya definido, podremos asignar valores a las variables de la clase
justo en el momento en que creamos el objeto.
UnaClase objeto1 = new UnaClase(10,12)
Como podeis ver, en este caso la variable unaVariable del objeto objeto1 tendra el
valor 10, y objeto1.otraVariable valdra 12.
Por otro lado, es muy posible que diferentes objetos que se basan en la misma clase
no necesiten usar el mismo constructor. maginemos una clase Clientes, con su
nombre, su edad y el nombre de la empresa como variables. De algunos de los
objetos que creemos basandonos en esta base conoceremos todos los datos, pero
siempre habr alguno del que desconozcamos la edad, o incluso su nombre. Aqui
entra en juego la sobrecarga de constructores, que consiste en crear un constructor
para cada posibilidad (real[*]) que tengamos.
[*]Como estoy cansado de decir, se tiene que conseguir un equilibrio entre usabilidad
(muchos constructores) y codigo entendible (pocos constructores). El programador
eficiente debe ser capaz de declarar solo aquellos constructores que realmente se van
a usar, sin caer en la tentaci de crear constructores para todos los posibles casos,
por muy incoherentes que parezcan.
class Cliente {
String nombre, nombreEmpresa;
int edad;
/*El constructor que viene a continuacin se usar en el caso de que se conozcan
todas las variables*/
Cliente(String nombre, String nombreEmpresa, int edad) {
this.nombre = nombre;
this.nombreEmpresa = nombreEmpresa;
this.edad = edad;
}
/*Tambin es provable ue cono!camos el nombre del cliente" y el
nombre de su empresa" pero descono!camos su edad. #or esto vamos a
declarar un constructor asi. */
Cliente(String nombre, String nombreEmpresa) {
this.nombre = nombre;
this.nombreEmpresa = nombreEmpresa;
}
}
class $obrecar%a &
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 59
public static void main'$trin% () ar%s* &
$trin% nombre" empresa;
int edad;
/*+hora creamos un ob,eto basandonos en la clase cliente" ima%inando
ue conocemos todos los valores*/
-liente paco = ne. -liente'/#aco/"/Empresa0alsa/"11*;
/*+ui un ob,eto de la clase -liente del ue desconocemos la edad*/
-liente ,ulian = ne. -liente'/2ulian/"/Empresa0alsa/*;
nombre = paco.nombre;
empresa = paco.nombreEmpresa;
edad = paco.edad;
$ystem.out.println'nombre 3 /" de / 3 empresa 3 /" tiene / 3 edad*;
nombre = ,ulian.nombre;
empresa = ,ulian.nombreEmpresa;
edad = ,ulian.edad;
$ystem.out.println'nombre 3 / traba,a en / 3 empresa 3 /./*;
}
}
La sobrecarga de mtodos es justo lo mismo; creamos varios mtodos con el mismo
nombre que actuen diferente segun el tipo de los parmetros de entrada. Por ejemplo,
queremos hacer un mtodo que devuelva el resultado de la suma de los dos
parametros de entrada, pero no sabemos si ser un entero o si tendr decimales, as
que tendremos que hacer un mtodo para el caso de los decimales, y otro con el
mismo nombre para el caso de los enteros.
class -alculadora &
int suma'int 4" int y* &
return '4 3 y*;
}
5loat suma'5loat 4" 5loat y* &
return '4 3 y*;
}
}
class $ervo &
public static void main'$trin%() ar%s* &
int operacion6;
5loat operacion7;
-alculadora sumador = ne. -alculadora'*;
operacion6 = sumador.suma'7"8*;
operacion7 = sumador.suma'9.780" 67.180*;
$ystem.out.println'/:a suma de los enteros 7 y 8 es / 3
operacion6*;
$ystem.out.println'/$umando 9.78 y 67.18" se consi%ue / 3
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 60
operacion7*;
}
}
CIase ejempIo.
Class Presenta{
Void metodo( ){
System.out.println( );
}
Void metodo (int a){
System.out.println("a=+a);
}
Void metodo (double b, double c){
System.out.println("a+b=+a+b);
}
}
Presenta p=new Presenta( );
p.metodo( );
p.metodo ( 6 );
p.metodo( 4.8,5.7);
1. ReaIizar un programa que me permita que en una cIase, que tenga 4 mtodos:
Que me permita muItipIicar cuando pasa por parmetro 3 enteros y 5 enteros;
Mtodo
public class SobrecargaMet {
int metodo(int a, int b, int c){
int resp1=a*b*c;
System.out.println("La multiplicacion es="+resp1);
return resp1;
}
int metodo(int a, int b, int c, int d, int e){
int resp2=a*b*c*d*e;
System.out.println("La multiplicacin es="+resp2);
return resp2;
}
double metodo (double a, double b){
double resp3=a-b;
System.out.println("La resta es="+resp3);
return resp3;
}
double metodo (double a, double b, double c, double d){
double resp4=a-b-c-d;
System.out.println("La resta es="+resp4);
return resp4;
}
}
Main.
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 61
public class Main {
public static void main(String[] args) {
Presenta p=new Presenta( );
p.metodo( );
p.metodo ( 6 );
p.metodo( 4.8,5.7);

SobrecargaMet sm= new SobrecargaMet();
sm.metodo(2, 2, 2);
sm.metodo(2, 2, 2, 2, 2);
sm.metodo(5, 4);
sm.metodo(10.5, 4.2, 2.5, 1.5);
}
}
LA CLASE String
Java posee gran capacidad para el manejo de cadenas dentro de sus clases String y
StringBuffer. Un objeto 1tring representa una cadena alfanumrica de un valor
constante que no puede ser cambiada despus de haber sido creada. Un objeto
1tring2uffer representa una cadena cuyo tamao puede variar.
Los Strings son objetos constantes y por lo tanto muy baratos para el sistema. La
mayora de las funciones relacionadas con cadenas esperan valores String como
argumentos y devuelven valores String.
Hay que tener en cuenta que las funciones estticas no consumen memoria del objeto,
con lo cual es ms conveniente usar Character que char. No obstante, char se usa,
por ejemplo, para leer ficheros que estn escritos desde otro lenguaje.
Existen muchos constructores para crear nuevas cadenas:
String();
String( String str );
String( char val[] );
String( char val[],int offset,int count );
String( byte val[],int hibyte );
String( byte val[],int hibyte,int offset,int count );
Tal como uno puede imaginarse, las cadenas pueden ser muy complejas, existiendo
muchas funciones muy tiles para trabajar con ellas y, afortunadamente, la mayora
estn codificadas en la clase String.
Funciones Bsicas
La primera devuelve la longitud de la cadena y la segunda devuelve el carcter que se
encuentra en la posicin que se indica en indice:
int length();//Nos devuelve el tamao de la cadena
char charAt( int indice );
Funciones de Comparacin de trings
boolean equals( Object obj );
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 62
boolean equalsgnoreCase( Object obj );
Lo mismo que e(uals34 pero no tiene en cuenta maysculas o minsculas.
int compareTo( String str2 );
Devuelve un entero menor que cero si la cadena es lxicamente menor que str2.
Devuelve cero si las dos cadenas son lxicamente iguales y un entero mayor que cero
si la cadena es lxicamente mayor que str7.
5unciones de Comparacin de 1ubcadenas
boolean regionMatch( int thisoffset,String s2,int s2offset,int len );
boolean regionMatch( boolean ignoreCase,int thisoffset,String s2,
int s2offset,int 1 );
Comprueba si una regin de esta cadena es igual a una regin de otra cadena.
boolean startsWith( String prefix );
boolean startsWith( String prefix,int offset );
boolean endsWith( String suffix );
Devuelve si esta cadena comienza o termina con un cierto prefijo o sufijo comenzando
en un determinado desplazamiento.
int indexOf( int ch );
int indexOf( int ch,int fromindex );
int lastndexOf( int ch );
int lastndexOf( int ch,int fromindex );
int indexOf( String str );
int indexOf( String str,int fromindex );
int lastndexOf( String str );
int lastndexOf( String str,int fromindex );
Devuelve el primer/ltimo ndice de un carcter/cadena empezando la bsqueda a
partir de un determinado desplazamiento.
String substring( int beginindex );
String substring( int beginindex,int endindex );
String concat( String str );
String replace( char oldchar,char newchar );
String toLowerCase();
String toUpperCase();
String trim();
Ajusta los espacios en blanco al comienzo y al final de la cadena.
void getChars( int srcBegin,int srcEnd,char dst[],int dstBegin );
void getBytes( int srcBegin,int srcEnd,byte dst[],int dstBegin );
String toString();
char toCharArray();
int hashCode();
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 63
Funciones !alueO"
La clase String posee numerosas funciones para transformar valores de otros tipos de
datos a su representacin como cadena. Todas estas funciones tienen el nombre de
valueOf, estando el mtodo sobrecargado para todos los tipos de datos bsicos.
Veamos un ejemplo de su utilizacin:
String Uno = new String( "Hola Mundo" );
float f = 3.141592;
String P = Uno.valueOf( f );
String P = String.valueOf( f ); // Mucho ms correcto
Funciones de Con#ersin
String valueOf( boolean b );
String valueOf( int i );
String valueOf( long l );
String valueOf( float f );
String valueOf( double d );
String valueOf( Object obj );
String valueOf( char data[] );
String valueOf( char data[],int offset,int count );
Usa arrays de caracteres para Ia cadena.
String copyValueOf( char data[] );
String copyValueOf( char data[],int offset,int count );
Los mtodos de tring se pueden utilizar directamente sobre literals (cadenas entre
comillas),
Como por ejemplo: 67ola6"length34.
EjempIos:
Verificando si dos cadenas son iguales
En este ejemplo no da como resultado en la consola false ya que el mtodo toma
encuentra las maysculas y minsculas
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 64
En este ejemplo estamos utilizando el mtodo toUpperCase() de la clase String lo
cual nos permite cambiar la cadena hoIa a HOLA
En este ejemplo estamos utilizando el mtodo toLowerCase() de la clase String lo
cual nos permite cambiar la cadena HOLA a hoIa
En este ejemplo estamos utilizando el mtodo valueof (n) lo cual nos permite cambiar
la cadena 125 a un entero 125;
ACTIVIDAD:
1. Tarea realizar un programa en el cual nos permita verificar si dos Cadenas (String)
son iguales en la cual no tome en cuenta las maysculas ni minsculas
2. Realizar un programa que nos permita sumar dos nmeros que estn como String
ejemplo; String n= "25 , String m=10 y nos dar como resultado 35; (utilice los
mtodos de la clase String ).
3. Realizar un programa en el cual nos devuelva el tamao de una cadena
4. Realizar un programa en el cual nos permita remplazar un carcter de una
cadena "Utilice el mtodo replace(char biejoChar, char newChar)
5. Realizar un programa que nos permita dividir Esta cadena "Este es mi primera vez
utilizando los mtodos de la clase String en 3 partes puede utilizar el mtodo
substring()
6. Realizar el mismo ejercicio 5 el cual ser dividido en 12 parte para luego
concatenarlo el cual nos debe quedar de la siguiente forma
mi primera vez utiIizando mtodos de Ia cIase String
LA CLASE Math
La clase Math representa la librera matemtica de Java. Las funciones que contiene
son las de todos los lenguajes, parece que se han metido en una clase solamente a
propsito de agrupacin, por eso se encapsulan en Math, y lo mismo sucede con las
dems clases que corresponden a objetos que tienen un tipo equivalente (Character,
Float, etc.). El constructor de la clase es privado, por los que no se pueden crear
instancias de la clase. Sin embargo, Math es public para que se pueda llamar desde
cualquier sitio y static para que no haya que inicializarla.
UNL-Informtica Educativa
1
2
La programacin y su Aplicacin en la Educacin 65
Funciones matemticas
Si se importa la clase, se tiene acceso al conjunto de funciones matemticas estndar:
Math.abs( x ) para int, long, float y double
;ath.sin' double *
;ath.cos' double *
;ath.tan' double *
;ath.asin' double *
;ath.acos' double *
;ath.atan' double *
;ath.atan7' double"double *
;ath.e4p' double *
;ath.lo%' double *
;ath.srt' double *
;ath.ceil' double *
;ath.5loor' double *
;ath.rint' double *
;ath.po.' a"b *
;ath.round' 4 * para double y float
;ath.random'* devuelve un double
;ath.ma4' a"b * para int, long, float y double
;ath.min' a"b * para int, long, float y double
;ath.E para la base exponencial
;ath.#< para P
He aqu un ejemplo, ClaseMath.java, de uso de algunas funciones de la clase Math:
public class ClaseMath {
public static void main( String args[] ) {
int x;
double rand,y,z;
float max;

rand = Math.random();
x = Math.abs( -123 );
y = Math.round( 123.567 );
z = Math.pow( 2,4 );
max = Math.max( (float)1e10,(float)3e9 );

System.out.println( rand );
System.out.println( x );
System.out.println( y );
System.out.println( z );
System.out.println( max );
}
}
Ejercicios extractases
1. Realizar un arreglo de doubls llamado calificacion definir el tamao del arreglo
con un tamao de 10 e ingresar los valores aleatorios entre 0 a 10 y presente
solo los que tienen de 7 a 9.5;
ENTRADA/SALIDA DE DATOS EN JAVA
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 66
Los programas necesitan comunicarse con su entorno, tanto para recoger datos e
informacin que deben procesar, como para devolver los resultados obtenidos.
La manera de representar estas entradas y salidas en $a#a es a base de streams
(flujos de datos). Un stream es una conexin entre el programa y la fuente o destino
de los datos. La informacin se traslada en serie (un carcter a continuacin de otro) a
travs de esta conexin. Esto da lugar a una forma general de representar muchos
tipos de comunicaciones. Por ejemplo, cuando se quiere imprimir algo en pantalla, se
hace a travs de un stream que conecta el monitor al programa. Se da a ese stream
la orden de escribir algo y ste lo traslada a la pantalla. Este concepto es
suficientemente general para representar la lectura/escritura de archivos, la
comunicacin a travs de nternet o la lectura de la informacin de un sensor a travs
del puerto en serie.
CLASES DE JAVA PARA LECTURA Y ESCRITURA DE DATOS
El package ja#a.io contiene las clases necesarias para la comunicacin del programa
con el exterior. Dentro de este package existen dos familias de jerarquas distintas
para la entrada/salida de datos. La diferencia principal consiste en que una opera con
bytes y la otra con caracteres (el carcter de $a#a est formado por dos bytes porque
sigue el cdigo Unicode). En general, para el mismo fin hay dos clases que manejan
bytes (una clase de entrada y otra de salida) y otras dos que manejan caracteres.
Desde $a#a %.&, la entrada y salida de datos del programa se poda hacer con clases
derivadas de 'nputtream (para lectura) y Outputtream (para escritura). Estas
clases tienen los mtodos bsicos read() y *rite() que manejan bytes y que no se
suelen utilizar directamente. muestra las clases que derivan de 'nputtream y la
Figura 9.2 las que derivan de Outputtream.
En las cuatro ltimas figuras las clases con "ondo gris definen de dnde o a dnde se
estn enviando los datos, es decir, el dispositivo con que conecta el stream. Las
dems ("ondo blanco) aaden caractersticas particulares a la forma de enviarlos. La
intencin es que se combinen para obtener el comportamiento deseado. Por ejemplo:
BufferedReader in = new BufferedReader(new FileReader("autoexec.bat"));
Con esta lnea se ha creado un stream que permite leer del archivo autoe+ec.bat.
Adems, se ha creado a partir de l un objeto Bu""ered,eader (que aporta la
caracterstica de utilizar bu""er-). Los caracteres que lleguen a travs del File,eader
pasarn a travs del Bu""ered,eader, es decir utilizarn el bu""er. A la hora de definir
una comunicacin con un dispositivo siempre se comenzar determinando el origen o
destino de la comunicacin (clases en gris) y luego se le aadiran otras
caractersticas (clases en blanco). Se recomienda utilizar siempre que sea posible
las clases ,eader y .riter.
Los nombres de Ias cIases de java.io
Las clases de ja#a.io siguen una nomenclatura sistemtica que permite deducir su
funcin a partir de
Las palabras que componen el nombre, tal como se describe en la Tabla
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 67

ENTRADA Y SALIDA ESTNDAR (TECLADO Y PANTALLA)
En $a#a, la entrada desde teclado y la salida a pantalla estn reguladas a traves de la
clase ystem. Esta clase pertenece al package ja#a.lang y agrupa diversos mtodos
y objetos que tienen relacin con el sistema local. Contiene, entre otros, tres objetos
static que son: System.in: Objeto de la clase 'nputtream preparado para recibir
datos desde la entrada estndar del sistema (habitualmente el teclado).
System.out: Objeto de la clase /rinttream que imprimir los datos en la salida
estndar del sistema (normalmente asociado con la pantalla). System.err: Objeto de
la clase /rinttream. Utilizado para mensajes de error que salen tambin por pantalla
por defecto. Estas clases permiten la comunicacin alfanumrica con el programa a
travs de los mtodos incluidos en la Tabla 9.4. Son mtodos que permiten la
entrada/salida a un nivel muy elemental.
Lectura desde tecIado
Para leer desde teclado se puede utilizar el mtodo ystem.in.read() de la clase
'nputtream. Este mtodo lee un carcter por cada llamada. Su valor de retorno es un
int. Si se espera cualquier otro tipo hay que hacer una conversin explcita mediante
un cast
char c;
c=(char)System.in.read();
Este mtodo puede lanzar la excepcin ja#a.io.'OE+ception y siempre habr que
ocuparse de ella, por ejemplo en la forma:
try {
c=(char)System.in.read();
}
catch(java.io.OException ioex) {
// qu hacer cuando ocurra la excepcin
}
Para leer datos ms largos que un simple carcter es necesario emplear un bucle
*0ile o "or y unir los caracteres. Por ejemplo, para leer una lnea completa se podra
utilizar un bucle *0ile guardando los caracteres ledos en un tring o en un
tringBu""er (ms rpido que tring):
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 68
char c;
String frase = new String(""); // StringBuffer frase=new StringBuffer("");
try {
while((c=System.in.read()) != '\n')
frase = frase + c; // frase.append(c);
}
catch(java.io.OException ioex) {}
Una vez que se lee una lnea, sta puede contener nmeros de coma flotante, etc. Sin
embargo,
hay una manera ms fcil de conseguir lo mismo: utilizar adecuadamente la librera
ja#a.io
Mtodo prctico para Ieer desde tecIado
Para facilitar la lectura de teclado se puede conseguir que se lea una lnea entera con
una sola orden si se utiliza un objeto Bu""ered,eader. El mtodo tring read1ine()
perteneciente a Bu""er,eader lee todos los caracteres hasta encontrar un '\n' o '\r' y
los devuelve como un tring (sin incluir '\n' ni '\r'). Este mtodo tambin puede lanzar
ja#a.io.'OE+ception. ystem.in es un objeto de la clase 'nputtream.
Bu""ered,eader pide un ,eader en el constructor. El puente de unin necesario lo
dar 'nputtream,eader, que acepta un 'nputtream como argumento del
constructor y es una clase derivada de ,eader. Por lo tanto si se desea leer una lnea
completa desde la entrada estndar habr que utilizar el siguiente cdigo:
nputStreamReader isr = new nputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
// o en una lnea:
// BufferedReader br2 = new BufferedReader(new
nputStreamReader(System.in));
String frase = br2.readLine(); // Se lee la lnea con una llamada

As ya se ha leido una lnea del teclado. El thread que ejecute este cdigo estar
parado en esta lnea hasta que el usuario termine la lnea (pulse return). Es ms
sencillo y prctico que la posibilidad anterior. Y qu hacer con una lnea entera? La
clase ja#a.util.tring2o3eni4er da la posibilidad de separar una cadena de carcteres
en las "palabras (to3ens) que la forman (por defecto, conjuntos de caracteres
separados por un espacio, '\t', '\r', o por '\n'). Cuando sea preciso se pueden convertir
las "palabras en nmeros.
LECTURA Y ESCRITURA DE ARCHIVOS
Aunque el manejo de archivos tiene caractersticas especiales, se puede utilizar lo
dicho hasta ahora para las entradas y salidas estndar con pequeas variaciones.
$a#a ofrece las siguientes posibilidades: Existen las clases File'nputtream y
FileOutputtream (extendiendo 'nputtream y Outputtream) que permiten leer y
escribir bytes en archivos. Para archivos de texto son preferibles File,eader
(desciende de ,eader) y File.riter (desciende de .riter), que realizan las mismas
funciones. Se puede construir un objeto de cualquiera de estas cuatro clases a partir
de un tring que contenga el nombre o la direccin en disco del archivo o con un
objeto de la clase File que
Representa dicho archivo. Por ejemplo el cdigo
FileReader fr1 = new FileReader("archivo.txt");
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 69
es equivalente a:
File f = new File("archivo.txt");
FileReader fr2 = new FileReader(f);
Si no encuentran el archivo indicado, los constructores de File,eader y
File'nputtream pueden lanzar la excepcin ja#a.io.FileNotFoundE+ception.
Los constructores de File.riter y FileOutputtream pueden lanzar
ja#a.io.'OE+ception. Si no encuentran el archivo indicado, lo crean nuevo. Por
defecto, estas dos clases comienzan a escribir al comienzo del archivo. Para escribir
detrs de lo que ya existe en el archivo ("append), se utiliza un segundo argumento
de tipo boolean con valor true:
FileWriter fw = new FileWriter("archivo.txt", true);
Las clases que se explican a continuacin permiten un manejo ms fcil y eficiente
que las vistas hasta ahora.
CIases FiIe y FiIeDiaIog
Un objeto de la clase File puede representar un arc0i#o o un directorio. Tiene los
siguientes constructores:
File(String name)
File(String dir, String name)
File(File dir, String name).
Absoluto y como pat0 relativo al directorio actual. Para saber si el archivo existe se
puede llamar al mtodo boolean e+ists().
File f1 = new File("c:\\windows\\notepad.exe");//La barra'\'se escribe '\\'
File f2 = new File("c:\\windows"); // Un directorio
File f3 = new File(f2, "notepad.exe"); // Es igual a f1
Cdigo que nos permite ingresar por teclado
Este programa, Telefonos.java, pregunta al usuario una lista de nombres y nmeros de
telfono. Cada nombre y nmero se aade a un fichero situado en una localizacin fija.
Para indicar que se ha introducido toda la lista, el usuario especifica "Fin" ante la
solicitud de entrada del nombre.
class Telefonos {
static FileOutputStream fos;
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 70
public static final int longLinea = 81;
public static void main( String args[] ) throws OException {
byte tfno[] = new byte[longLinea];
byte nombre[] = new byte[longLinea];
fos = new FileOutputStream( "telefono.dat" );
while( true )
{
System.err.println( "Teclee un nombre ('Fin' termina)" );
leeLinea( nombre );
if( "fin".equalsgnoreCase( new String( nombre,0,0,3 ) ) )
break;
System.err.println( "Teclee el numero de telefono" );
leeLinea( tfno );
for( int i=0; tfno[i] != 0; i++ )
fos.write( tfno[i] );
fos.write( ',' );
for( int i=0; nombre[i] != 0; i++ )
fos.write( nombre[i] );
fos.write( '\n' );
}
fos.close();
}
Vamos a desarrollar una pequea aplicacin que muestra informacin sobre los
ficheros pasados como argumentos en la lnea de comandos, nfoFichero.java:
import java.io.*;
class nfoFichero {
public static void main( String args[] ) throws OException {
if( args.length > 0 )
{
for( int i=0; i < args.length; i++ )
{
File f = new File( args[i] );
System.out.println( "Nombre: "+f.getName() );
System.out.println( "Camino: "+f.getPath() );
if( f.exists() )
{
System.out.print( "Fichero existente " );
System.out.print( (f.canRead() ?
" y se puede Leer" : "" ) );
System.out.print( (f.canWrite() ?
" y se puese Escribir" : "" ) );
System.out.println( "." );
System.out.println( "La longitud del fichero son "+
f.length()+" bytes" );
}
else
System.out.println( "El fichero no existe." );
}
UNL-Informtica Educativa
La programacin y su Aplicacin en la Educacin 71
}
else
System.out.println( "Debe indicar un fichero." );
}
}
private static void leeLinea( byte linea[] ) throws OException {
int b = 0;
int i = 0;
while( (i < ( longLinea-1) ) &&
( ( b = System.in.read() ) != '\n' ) )
linea[i++] = (byte)b;
linea[i] = (byte)0;
}
}
Referencias BibIiogrficas.
CAY S. HORTSMAN GARY CORNELL, Diciembre, 2000, "Core Java:
Volumen -Fundamentals", 5ta. Edicin, Prentice Hall PTR
CAY S. HORTSMAN GARY CORNELL, Diciembre, 2000, "Core Java:
Volumen -Advanced Features", 5ta. Edicin, Prentice Hall PTR
DETEL, Julio, 2001, '8rogramacin en 9ava*, 5ta. Edicin, Prentice
Hall PTR.
MATTHEW ROBNSON PAVEL VOROBEV, "SWNG, 2da. Edicin,
MANNNG.
Grady Booch, James Rumbaugh, var Jacobson, (1996) El Lenguaje
Unificado de ModeladoAddison Wesley.
Schneider G., Winters J.P., (2001) Applying Use Cases: A Practical
Guide, Addison Wesley.
Apuntes Mdulo , (Sr. Jorge Pea, Sr. Clver Torres).
http://www.sun.com/java
http://www.netbeans.org
http://www.eclipse.org
http://www.omg.org
Durante el desarrollo del presente taller, en cada unidad encontrarn las diferentes
actividades a realizar, ya sea individual, de investigacin, trabajo prctico, las cuales
estn representadas mediante los grficos respectivos que se indican a continuacin.
Los trabajos deben realizarse aplicando la reflexin, el razonamiento y utilizando el
criterio propio.
UNL-Informtica Educativa

You might also like