Está en la página 1de 80

UTP

-1-

FACULTAD DE INGENIERIA INDUSTRIAL Y


DE SISTEMAS

Separata
Lenguaje de Programacin I
Parte I

Prof. Ing. Alberto Moreno

2008-1
Ing. Alberto Moreno

UTP

-2-

INDICE

1.- Introduccin
2.- Tipos de Datos Variables
3.- Instrucciones de Control
4.-Diagrama de actividades
5.- Funciones de Cadena
6.- Vectores y Matrices
7.- Mtodos de Usuarios
8.- Clases . Objetos, Constructores
9.- Herencias
10.- poliformismos

Ing. Alberto Moreno

UTP

-3-

1.- LENGUAJE DE PROGRAMACIN I(JAVA)


Un lenguaje de Programacin Orientada a Objetos nos permite organizar el cdigo en
entidades como las clases compuestas de datos y funciones, y a travs de la
caracterstica de la herencia podemos organizar las clases en jerarquas.
El objetivo es el de ensear al lector a traducir la descripcin de un problema o situacin
que se plantea a cdigo, a organizar el cdigo en funciones, a agrupar datos y funciones
en clases y las clases en jerarquas.
MARCO TEORICO

El lenguaje de programacin Java


Java es un lenguaje de programacin de alto nivel que tiene las siguientes
caractersticas:

Orientado a objetos

Distribuido y dinmico

Robusto

Seguro

Multitarea

Portable

La mayora de los lenguajes de programacin se caracterizan por ser interpretados o


compilados, lo que determina la manera en como sern ejecutados en una computadora.
Java tiene la caracterstica de ser al mismo tiempo compilado e interpretado. El
compilador es el encargado de convertir el cdigo fuente de un programa en un cdigo
intermedio llamado bytecode que es independiente de la plataforma en que se trabaje y
que es ejecutado por el intrprete de Java que forma parte de la Mquina Virtual de
Java.

Ing. Alberto Moreno

UTP

-4-

La plataforma Java
Una plataforma es el ambiente de hardware o software en el cual se ejecutan los
programas. En general, la mayora de las plataformas pueden ser descritas como una
combinacin de hardware y sistema operativo. Algunas de las plataformas ms
populares son Windows, Solaris, Linux y MacOS.
La plataforma Java difiere de las anteriores en que sta es una plataforma basada
nicamente en software que corre por encima de las plataformas basadas en hardware.
La plataforma Java consta de dos componentes:

La Mquina Virtual de Java (JVM)

La Interfaz de Programacin de Aplicaciones de Java (API Java)

A continuacin se muestra una representacin de los elementos que forman parte de la


plataforma Java.

javac. Es el compilador de Java. Se encarga de convertir el cdigo fuente escrito


en Java a bytecode.

java. Es el intrprete de Java. Ejecuta el bytecode a partir de los archivos class.

appletviewer. Es un visor de applets. En la mayora de las ocasiones puede


utilizarse en lugar de un Navegador Web.

javadoc. Se utiliza para crear documentacin en formato HTML a partir de el


cdigo fuente Java y los comentarios que contiene.

Ing. Alberto Moreno

UTP

-5-

javap. Es un desensamblador de Java.

jar. Es una herramienta utilizada para trabajar con los archivos JAR.

Compilacin y ejecucin de programas Java

Uso del JDK para construir aplicaciones

2.- Sintaxis de Java


La sintaxis de un lenguaje define cmo se usarn las palabras claves, los operadores y
las variables para construir y evaluar expresiones. La sintaxis de Java especifica como
se escribirn los siguientes elementos:

Comentarios.

Identificadores.

Palabras clave.

Literales.

Expresiones y operadores.

Variables y tipos de datos.

Bloques y sentencias.

Ing. Alberto Moreno

UTP

-6-

Comentarios
Java ofrece tres tipos de comentarios: dos para comentarios regulares en el cdigo
fuente y uno para la documentacin especial del sistema javadoc.

Comentarios de varias lneas.


Los comentarios de varias lneas se incluyen entre los smbolos /* y */, como en
C y C++.
/*
Este es un ejemplo de
un comentario de varias
lneas.
*/

Comentarios de una sola lnea.


Para comentariar una sola lnea se utiliza la doble diagonal //. El comentario se
inicia cuando se encuentra la doble diagonal y continua hasta el final de la lnea.
// Este es un comentario de una sola linea
//Este es otro comentario

Comentarios para documentacin.


Realmente este tipo de comentario es el mismo que el de varias lneas con la
diferencia de que la informacin que contenga ser usada para un procesamiento
especial que lleva a cabo la herramienta javadoc.
Se distingue del comentario de varias lneas porque se agrega un asterisco
adicional al inicio del comentario.
Ejemplo:
/**
Este tipo de comentarios
los utiliza la
herramienta javadoc
*/

Palabras clave
La siguiente tabla muestra las palabras claves de Java, stas son reservadas y no pueden
ser utilizadas como identificadores.
abstract

default

if

private

this

Boolean

do

implements

protected

throw

Break

double

import

public

throws
Ing. Alberto Moreno

UTP

-7Byte

else

instanceof

return

transient

Case

extends

int

short

try

catch

final

interface

static

void

Char

finally

long

strictfp**

volatile

class

float

native

super

while

const*

for

new

switch

continue

goto*

package

synchronized

* Son palabras claves de Java que no son usadas actualmente.


** Palabra clave agregada en Java 2
true, false, and null no son palabras claves pero son palabras reservadas, as que
tampoco pueden ser utilizadas como identificadores.
Literales
Una literal es un valor constante formado por una secuencia de caracteres. Cualquier
declaracin en Java que defina un valor constante -un valor que no pueda ser cambiado
durante la ejecucin del programa- es una literal.
Son ejemplos de literales los nmeros, los caracteres y las cadenas de caracteres.

Literales numricas
Se pueden crear literales numricas a partir de cualquier tipo de dato primitivo.

Ej.

123
123.456
123L
123.456F

//literal int
//literal double
//literal long
//literal flota

Literales booleanas :
Las literales boolenas consisten de las palabras reservadas true y false.

Literales de caracteres

Las literales de caracteres se expresan por un solo caracter entre comillas


sencillas
Ej.

'a',

'%',

'7'

Ing. Alberto Moreno

UTP

-8-

Literales de cadena

Una cadena es una combinacin de caracteres. Las cadenas en Java son instancias
de la clase String, por ello cuentan con mtodos que permiten combinar, probar y
modificar cadenas con facilidad.
Las literales de cadena se representan por una secuencia de caracteres entre comillas
dobles.
Ej.
"hola", "cadena123", "12345"
Expresiones y Operadores

Expresin
Una expresin es una combinacin de variables, operadores y llamadas de
mtodos construida de acuerdo a la sintaxis del lenguaje que devuelve un valor.
El tipo de dato del valor regresado por una expresin depende de los elementos
usados en la expresin.

Operadores
Los operadores son smbolos especiales que por lo comn se utilizan en
expresiones.

La tabla siguiente muestra los distintos tipos de operadores que utiliza Java.
Operador

Significado

Ejemplo
Operadores aritmticos

Suma

a+b

Resta

a-b

Multiplicacin

a*b

Divisin

a/b

Mdulo

a%b
Operadores de asignacin

Ing. Alberto Moreno

UTP

-9-

Asignacin

a=b

+=

Suma y asignacin

a += b (a=a + b)

-=

Resta y asignacin

a -= b (a=a - b)

*=

Multiplicacin y asignacin

a *= b (a=a * b)

/=

Divisin y asignacin

a / b (a=a / b)

%=

Mdulo y asignacin

a % b (a=a % b)

Operadores relacionales
==

Igualdad

a == b

!=

Distinto

a != b

<

Menor que

a<b

>

Mayor que

a>b

<=

Menor o igual que

a <= b

>=

Mayor o igual que

a >= b

Operadores especiales
++

Incremento

a++ (postincremento)
++a (preincremento)

--

Decremento

a-- (postdecremento)
--a (predecremento)

(tipo)expr

Cast

a = (int) b

Concatenacin de cadenas

a = "cad1" + "cad2"

Acceso a variables y mtodos

a = obj.var1

()

Agrupacin de expresiones

a = (a + b) * c

La tabla siguiente muestra la precedencia asignada a los operadores, stos son listados
en orden de precedencia.
Los operadores en la misma fila tienen igual precedencia
Operador

Notas

. [] ()

Los corchetes se utilizan para los


Ing. Alberto Moreno

UTP

-10arreglos

++ -- ! ~

! es el NOT lgico y ~ es el
complemento de bits

new (tipo)expr

new se utiliza para crear instancias de


clases

* / %

Multiplicativos

+-

Aditivos

<< >> >>>

Corrimiento de bits

< > <= >=

Relacionales

== !=

Igualdad

&&

AND lgico

||

OR lgico

?:

Condicional

= += -= *= /= %= &= ^= |= <<=
>>= >>>=

Asignacin

Ejemplos demostrativos:
public class PrimerPrograma {
public static void main(String[ ] args) { System.out.println("Hola, mi primer
programa");
}
}
Explicacion .public class PrimerPrograma
Nombre de la clase ., coincide con el nombre del archivo.
public static void main
La funcin principal equivalente a la funcin main de C/C++
String[ ] argv
Permite de recuperar argumentos transmitidos al programa al momento de su
lanzamiento
System.out.println(Hola ")
Mtodo de visualizacin en la ventana consola

Ing. Alberto Moreno

UTP

-11-

Inicializacion y constantes

Pensar a la inicializacin al riesgo de una error de compilacin

int n; System.out.println(" n = " + n);


Inicializacin
Una variable puede recibir un valor inicial al momento de su declaracin :
int n = 15;
boolean b = true
Este instruccin tiene el mismo papel :
int n;
n = 15; boolean b; b = true;
Constantes:
Son variables cuyas valor cual se puede afectar una sola vez
No pueden ser modificadas
Son definidas con la palabra clave final
final int n = 5;
final int t;
...
t = 8;
n = 10; // error : n esta declarado final

Ejercicios desarrollados:
1.- Se tienen como datos la base y altura de un triangulo rectngulo , calcular su
hipotenusa.
public class demo2 {
public static void main(String[] args) {
// declaracion de variables
double base=10.6,altura=15,hipo=0;
int can;
hipo=Math.sqrt(base*base+altura*altura);
System.out.print("cantidad "+can);
System.out.print("\n La hipotenusa es "+hipo);
System.out.print("\n de base="+base+" altura="+altura);

}
2.- Se tienen como datos los tres lados de cualquier triangulo , calcular su area:
public class demo3 {
public static void main(String[] args){
double lado1=14,lado2=5,lado3=6, peri,area;
peri=(lado1+lado2+lado3)/2;
Ing. Alberto Moreno

UTP

-12-

area=Math.sqrt(peri*(peri-lado1)*(peri-lado2)*(peri-lado3));
System.out.print("area del triangulo "+area);
}
}

3.- Se tiene un numero de tres digitos mostrar la suma de sus digitos.


public class demo4 {
public static void main(String[] args){
int num=345, uni, dec, cen ,sm;
cen=num/100;
dec=(num%100)/10;
uni=(num%100)%10
sm=cen+uni+dec;
System.out.print("La suma de sus digitos: "+sm);
}

ENUNCIADO DEL PROBLEMA:


PASOS PARA CREAR UN PROYECTO DENTRO DEL PROGRAMA:
1)Crear un proyecto para windows

2) En seguida observaremos la siguiente pantalla, donde digitaremos el nombre del

CLIK
Luego en Java
Aplication

CLIK

proyecto:
Ing. Alberto Moreno

UTP

-13-

No olvidar
guardar dentro de
AlumnoUtp

CLIK

3)

CLIK

Ing. Alberto Moreno

UTP

-14-

4) Enseguida digitamos el cdigo correspondiente del programa.

Es importante
digitar la librera
correspondiente

Ing. Alberto Moreno

UTP

-15-

5) Una vez digitado el algoritmo, pasamos a compilar(F9) y luego ejecutarlo (shift + F6)
y nos brindara la siguiente pantalla donde apreciaremos los errores de la codificacin..

6) Una vez compilada el programa digitaremos los datos de los trabajadores


correspondiente, como observaremos en los siguientes cuadros.

Ing. Alberto Moreno

UTP

-16-

Ing. Alberto Moreno

UTP

-17-

7) Como apreciamos el cuadro de resultados ser lo siguiente.

Ing. Alberto Moreno

UTP

-18-

DIAGRAMA DE ACTIVIDADES nos va permitir tener una mejor visin sobre los
procesos que vamos a desarrollar en el programa , la diagramacion puede elaborase
empleando el Rational Rose o el UML.

Ing. Alberto Moreno

UTP

-19-

Ejecucin condicional
El formato general es:
if (expresion_booleana)
sentencia
[else
sentencia]
sentencia (a todo lo largo de este captulo) puede ser una sola sentencia o un
bloque de sentencias separadas por ; y enmarcadas por llaves { y }. Es decir
if (expresion_booleana) {
sentencia;
sentencia;
. . .
}
else {
sentencia;
sentencia;
. . .
}

Ing. Alberto Moreno

UTP

-20-

Ambigedad
if (a) if (b) S1; else S2;
significa
if (a) { if (b) S1; else S2; }

expresion_booleana es una expresin que se evalua como true o false (es


decir, de tipo booleano). Si el resultado es true la ejecucin bifurca a la
sentencia que sigue al if . En caso contrario se bifurca a la sentencia que sigue
al else.
Los corchetes en el formato anterior indican que la clausula else es opcional.

Ing. Alberto Moreno

UTP

-21-

Ejemplos de instruccin if else

1.- Se tiene como datos de ingreso los datos de un tringulo (lado1, lado2 y
lado3) en caso que forme tringulo calcular su rea, de lo contrario muestre un
mensaje de error, no se forma tringulo. Para formar un tringulo un lado
siempre tiene que ser menor a la suma de los otros dos lados. Y su rea de la
siguiente manera:

P=
Area =

L1 + L 2 + L3
2

p( P L1)( P L 2)( P L3)

public class demo3 {


public static void main(String[] args){
double lado1=14,lado2=5,lado3=6, peri,area;
if(lado1+lado2>lado3 && lado3+lado2>lado1 && lado3+lado1>lado2)
{
peri=(lado1+lado2+lado3)/2;
area=Math.sqrt(peri*(peri-lado1)*(peri-lado2)*(peri-lado3));
System.out.print("area del triangulo "+area);
}
else{
System.out.print("No forma triangulo");
}
}
}

Ing. Alberto Moreno

UTP

Ejercicios propuestos

-22-

1.-

1.- Datos del programa descripcin de un producto, el precio y la cantidad


vendida, calcular y mostrar:
a. Importe por la compra, multiplique precio por la cantidad vendida.
b. Impuesto general a las ventas (Igv), es 19% del importe de compra.
c. Importe final por la compra, sume el importe de compra ms el Igv.
2.- Dato un nmero de cuatro cifras, calcular y mostrar:
a. Suma de las cifras
b. Promedio de las cifras.
3.- Desarrolle un algoritmo para la telefnica que permita mostrar el pago
por consumo telefnico; Datos del programa cdigo del usuario, el nmero
telefnico y la cantidad de minutos utilizados.
Visualice el cdigo del usuario, el importe por los minutos utilizados, el IGV
y el pago total.
Tenga en cuenta que la empresa cobra S/0.30 por minuto utilizado, S/ 48.00
de renta bsica y que el IGV es 19% respecto al importe por minutos.

4.- Elabore un algoritmo para EDELNOR,datos el cdigo del suministro y la


cantidad de kilowatts consumidos. Calcule y muestre los siguientes pagos:
a. Importe inicial.
b. El pago del 3.5% por alumbrado publico.
c. El pago del 1.8 por mantenimiento.
d. El pago del 4.8 por reajuste de acuerdo a ley.
e. El 19% por pago del IGV
f. El pago total.
Los porcentajes son respecto al importe inicial.

Ing. Alberto Moreno

UTP

-23-

Considerar que el Precio por Kilowats es S/ 0.09 .


5.- Se desea obtener medallas a partir de una plancha rectangular metlica
, los datos de ingreso del programa son los lados de la plancha ancho y
altura y el radio de la medalla expresado en centmetros, calcular :
- Numero de medallas circulares
- rea Sobrante
Condicionales
6.-Datos del programa el nombre de un trabajador sus horas trabajadas y
tarifa normal, Si tiene horas extras (horas trabajadas mayores a 48 hrs.)
calcular y mostrar:
a. Pago normal
b. Horas extras
c. Pago extras ser 10% de incremento de la tarifa normal por cada hora
extra.
d. Sueldo final.
7.- Dato del programa un numero cualquiera, solo si el nmero es mltiplo
de 2 y 5 mostrar:
a. El doble del nmero ingresado.
b. Raz cbica del nmero ingresado.
c. El cubo del nmero ingresado.
8.- Datos del programa el nombre de un cliente, condicin de pago (E:
efectivo, C:crdito) y el precio del producto. Calcular y mostrar:
a. Descuento, ser 10% del precio siempre que la compra se efecte en
efectivo, sino cero.
b. Recargo, ser 3% del precio si la compra fue a crdito, sino cero.
c. Precio final
9.- Ingresar como datos las horas y minutos respecto a las manecillas de las
agujas de un reloj, se pide calcular el ngulo que forman estas manecillas.
Por ejemplo horas= 3 y minutos= 30 ngulo formado =90
10.-Ingrese por teclado tres nmeros cualquiera, mostrar los nmeros
ordenados ascendentemente. Considerar que los nmeros ingresados son
diferentes.
11.- Ingrese por teclado el nombre y dos notas (parcial y final de peso doble),
calcular su promedio y una observacin de acuerdo a:

Promedio
00 05
06 10
11 13
14 17
18 20

Clasificacin
Deficiente
Malo
Regular
Bueno
Excelente

Ing. Alberto Moreno

UTP

-24-

Procesos Repetitivos.Iteraciones con while


Sintaxis formato 1:
while (expresion_booleana)
sentencia
Sintaxis formato 2:
do
sentencia
while (expresion_booleana)
La sentencia o bloque se sentencias (se aplica la misma idea que para el if-else) se
ejecuta mientras que la expresion_booleana se evalue como true
La diferencia entre ambos formatos es que en el primero la expresin se evalua al
principio del bloque de sentencias y en el segundo se evalua al final

Iteraciones con for


El formato es:
for ( inicializacion ; expresion_booleana ; step )
sentencia
inicializacion es una sentencia que se ejecuta la primera vez que se entra en el
bucle for . Normalmente es una asignacin. Es opcional.
expresion_booleana es una expresin que se evalua antes de la ejecucin de la
sentencia, o bloque de sentencias, para cada iteracin. La sentencia o bloque de
sentencias se ejecutan mientras que la expresion_booleana se evalue como
cierta. Es opcional.
step es una sentencia que se ejecuta cada vez que se llega al final de la sentencia o
bloque de sentencias. Es opcional.
Una utilizacin clsica de un bucle de tipo for se muestra a continuacin para evaluar un
contador un nmero fijo de veces:

Ing. Alberto Moreno

UTP

-25-

for ( int i = 1 ; i <= 10 ; i++ )


sentencia
La sentencia (o bloque de sentencias) se evaluar 10 veces. En cada ejecucin (pasada)
el valor de la variable i ir variando desde 1 hasta 10 (inclusive). Cuando salga del
bloque de sentencias i estar fuera de su mbito (porque se define en el bloque for).

Ejemplos:
1.- Ingresando un numero entero de cualquier longitud que muestre la suma de
sus digitos:
public class demo1 {

public static void main(String[] args){


int num=234567378; // sea este numero
int r,sm=0;
String cad="";
while(num>0){
r=num%10;
sm += r;
cad=cad+r;
num=num/10;
}
System.out.print("la suma de los digitos="+sm);
System.out.print("\n numero invertido="+cad);

}
}
2.- Ingresar cierta cantidad de bolas de billar , obtener las superficies
formadas y el numero de bolas que sobran , cada superfice es una base
triangular .
public repetir02 {
public static void main(String[] args) throws Exception {
int doble=0,nbolas, ns=0, c=1,sm=0;

BufferedReader tecla=new BufferedReader(new


InputStreamReader(System.in));
System.out.println("ingrese numero de bolas");
nbolas=Integer.parseInt(JOptionPane.showInputDialog("ingrese numero de
bolas"));
//nbolas=Integer.parseInt(tecla.readLine());
System.out.println("ingrese superficie");
Ing. Alberto Moreno

UTP

-26-

ns=Integer.parseInt(tecla.readLine());
while(sm<nbolas){
doble=c*c;
sm=sm+doble;
ns ++;
c=c+1;
}
sm=sm-doble;
ns--;
int sobran;
sobran=nbolas-sm;
System.out.println("superfices="+ns);
System.out.print("sobran="+sobran);

}
}

Ejercicios Propuestos 2.1.- Ingresar 10 nmeros por teclado luego muestre todos los nmeros ingresados y
adems muestre el mayor numero y el segundo mayor
por ejemplo la salida de 10 nmeros ser:

Ing. Alberto Moreno

UTP

-27-

2.- Realizar un programa que permita calcular el pago de matricula de un alumno los
datos de ingreso son la Escala (A,B y C) el promedio ponderado, y la cantidad de
crditos; Ingresar los datos hasta que se ingrese por teclado el Carcter * en la Escala.
Las condiciones:
El pago por crdito es de acuerdo a la escala : A=>S/ 20.0 , B=>S/. 16 , y C =>S/12.0
Adems se har un descuento del 15% del pago si su promedio es mayor a 15 y se
encuentra entre 12-15 solo un 10%.
3.- En el mundial de la sub_17 de corea se desea saber quien fue el primer, y segundo
goleador y ademas a que pais pertenece, los datos a ingresar son :
Nombre del pais, nombre del jugador y la cantidad de goles que hizo , ingresar los
datos hasta que ingrese * en el pas.
4.- ingresar un conjunto de trabajadores hasta que se ingrese en la categora un * , el
pago hora para la categora 1(empleado) 12 y descuento es 10% y para obrero (2) es
10 soles , descuento 8% , mostrar el pago total y descuento.
Datos de ingreso , horas trabajadas y categora
5.- ingrese un numero luego muestre dicho numero en romanos .
6.- ingrese un numer de cinco cifras luego muestre si es capica y un mensaje de error
en caso que se ingrese un numero de diferente longitud.
7.- Ingrese un numero entero de cualquier longitud , luego muestre:
a) La suma de sus dgitos
b) El numero ordenado de manera ascendente
c) La suma de los cuadrados de los dgitos pares.
Ejemplo si el numero es : 45672
La suma de sus dgitos>24
Ordenado => 24567
8.- Se desea formar una pirmide de base cuadrada con una cierta cantidad de bolas de
billar , cada superficie esta formada por un numero cuadrado ( 12, 22, 32 ,...) , Mostrar
la cantidad de superficies formadas y el numero de bolas que sobran.
Por ejemplo si se ingresa 20 bolas : se forman 3 superficies y sobran 6 bolas.
9.- Mostrar todos los nmeros perfectos menores a 1000 ; un numero es perfecto cuando
la suma de sus divisores es el mismo numero , sin incluir el mismo numero, por ejemplo
el 6 sus divisores 1+2+3
10.- Mostrar todos los nmeros primos del 1-100
11.-Pasar un numero del sistema decimal a Hexadecimal
12.- Un automvil viaja a una velocidad promedio de 55km por hora durante cuatro
horas. Escriba un programa que muestre la distancia, en km, que el auto ha recorrido
despus de cada media hora, 0.5 hora , 1hora, 1.5, 2,4, ... horas hasta el final del
viaje.

Ing. Alberto Moreno

UTP

-28-

13.- Una pelota de golf se lanza desde un avin. La distancia, d, que la pelota cae en t
segundos est dada por la ecuacin d = (1/2) * g*t 2 donde g es la aceleracin de la
gravedad y es igual a 9.81 m/seg 2 . Escribir un programa que muestre la distancia a
la que cae la pelota en cada intervalo de un segundo durante diez segundos y la
distancia total que la pelota ha recorrido al final de cada intervalo. La salida debe
contemplar la siguiente tabla:
Tiempo(segundos) Distancia en el intervalo actual (metros) Distancia total
0
0.0
0.0
1
4.905
4.905
14.- Se compra una computadora a crdito , que puede ser en 6 , 12 o 18 meses , los
intereses varan de acuerdo a los meses:
Meses
% inters
6
20

12
30
18
40
Mostrar un calendario de pagos , de acuerdo a la siguiente tabla:
Precio Final : ...........
Mes
Cuota Mensual
Saldo
=====================================
1
......
......
2
.....
......

Los datos de ingreso


Son:
Precio de la computadora
y el tipo de pago

Arrays
Declaracin y acceso
Un array es una coleccin ordenada de elementos del mismo tipo, que son accesibles a
travs de un ndice.
Un array puede contener datos primitivos o referencias a objetos.
Los arrays se declaran:
[modificadores]

tipo_variable [ ] nombre;

Por ejemplo:
int [ ] a;
Punto [ ] p;
La declaracin dice que a es un array de enteros y p un array de objetos de tipo Punto.
Ms exactamente a es una referencia a una coleccin de enteros, aunque todava no se
sabe cuantos elementos tiene el array. p es una referencia a una coleccin de referencias
que apuntarn objetos Punto.
Un array se crea como si se tratara de un objeto (de hecho las variables de tipo array son
referencias):

Ing. Alberto Moreno

UTP

-29-

a = new int [5];


p = new Punto[3];
En el momento de la creacin del array se dimensiona el mismo y se reserva la memoria
necesaria.
Tambin puede crearse de forma explcita asignando valores a todos los elementos del
array en el momento de la declaracin, de la siguiente forma:
int [ ] a = { 5 , 3 , 2 };
El acceso a los elementos del array se realiza indicando entre corchetes el elemento del
array que se desea, teniendo en cuenta que siempre el primer elemento del array es el
ndice 0. Por ejemplo a[1]. En este ejemplo los ndices del array de tres elementos
son 0, 1 y 2. Si se intenta usar un ndice que est fuera del rango vlido para ese array se
produce un error (en realidad una excepcin: las excepciones se tratan en un captulo
posterior) de 'Indice fuera de rango'. En el ejemplo anterior se produce esta excepcin si
el ndice es menor que 0 o mayor que 2.
Se puede conocer el nmero de elementos de un array usando la variable length. En
el ejemplo a.length contiene el valor 3.
Un array, como cualquier otra referencia puede formar parte de la lista de parmetros o
constituir el valor de retorno de un mtodo. En ambos casos se indica que se trata de un
array con los corchetes que siguen al tipo. Por ejemplo:
String [ ] metodoConArrays ( Punto [ ] ) { . . }
El mtodo metodoConArrays recibe como parmetro un array de Puntos y devuelve un
array de Strings. El mtodo podra invocarse de la siguiente forma:
Punto p [ ] = new Punto [3];
. . .
String [ ] resultado = metodoConArrays(p);
Arrays multidimensionales
Es posible declarar arrays de ms de una dimensin. Los conceptos son los mismos que
para los arrays monodimensionales.
Por ejemplo:
int [ ][ ] a = { { 1 , 2 } , { 3 , 4 } , { 5 , 6 } };
int x = a[1][0]; // contiene 3
int y = a[2][1]; // contiene 6
Se pueden recorrer los elementos de un array multidimensional, de la siguiente forma:

Ing. Alberto Moreno

UTP

-30-

int [ ][ ] a = new int


int x = a.length;
int y = a[0].length;
for ( int i = 0 ; i <
for ( int j = 0 ;
a[i][j] = i *

[3][2];

x ; i++ )
j < y ; j++)
j;

Obsrvese en el ejemplo la forma de acceder al tamao de cada dimensin del array.

Funciones/Metodos De Usuario
Las funciones/metodos son trozos de cdigo que encapsulan cierta funcionalidad
especial.
En general tienen datos de entrada y datos de salida (pueden no tenerlos).
Son muy similares a la idea de una funcin en matemticas:
funcion(x ) = x 2 + 3
Esta funcin tiene una definicin y puede ser evaluada con distintos valores, por
ejemplo si hacemos
funcion(5)
sabemos que el resultado seria 28.
La funcin matemtica funcion(x ) = x 2 + 3 podra verse en JAVA como:
funcion( x)
{
resultado = x * x + 3;

}
veremos que es un poco ms complicado....
I La idea seria poder usar la funcin en un cdigo cualquiera, por ejemplo:

Ing. Alberto Moreno

UTP

-31-

int x, y;
x = 1 + funcion(2);
y = funcion(x); System.out.println(x); System.out.println(y);
Las funciones en JAVA tienen varias partes importantes en su definicin:
Nombre
funcion
Nombres de los datos de entrada
x
Tipos de datos de entrada
???
Tipo de dato de retorno
???
Codigo valido interno
Instruccion de retorno
???
En JAVA se un poco mas como:
int funcion(int x)
{
int resultado = x * x + 3;
return resultado;
}
adicionalmente tenemos que empezar la funcin con public static (esto permite que la
funcin sea usado directamente sin necesidad de crear el objeto.
Un ejemplo completo
class EjemploFuncion
{
public static void main(String[] args)
{
int x, y;
x = 1 + funcion(2);
y = funcion(x) * funcion(x - 2);
System.out.println(x); System.out.println(y); System.out.println( funcion(0) );
}
public static int funcion(int x)
{
int resultado;
resutado = x * x + 3;
return resultado;
}
}
ejemplo 2.- encontrar el factorial y la potencia de un numero sin utilizar la clase Math
Ejemplo dos funciones
class Ejemplo
{
public static void main(String[] args)
{
int n, i;
System.out.println("Dime un entero positivo");
n = In.readInt();

Ing. Alberto Moreno

UTP

-32-

System.out.println( n + "! = " + factorial(n) ); System.out.println( n + "^" + n


+ " = " + potencia(n,n));
}
public static int potencia(int base, int exponente)
{
int resultado = 1;
int i;
for(i = 1; i <= exponente; i++)
{ resultado = resultado * base; }
return resultado;
}
public static int factorial(int numero)
{
int factor = 1;
for(int i =1; i<=numero; i++)
{ factor = factor * i; }
return factorial;
}
}

Ing. Alberto Moreno

UTP

-33-

Ejemplo2.public class metodos {


public static void main(String[] args){
int[] a={12,3,5,7,9};
System.out.println("la suma es "+suma(a));
ordena(a);
//imprimeir ordenados
int k;
for(k=0;k<a.length;k++){
System.out.println("\n " +a[k]);

Crear los siguientes mtodos:


a) pasando un vector de enteros que
devuelva su suma.
b ) Pasando un vector que permita
ordenar dicho vector de forma ascdente.

}
}
static int suma(int[] vec){
int sm=0,f;
for(f=0; f<vec.length;f++){
sm += vec[f];
}
return sm;
}
static void ordena(int[] vec){
int k,aux,j,x;
x=vec.length;
for(k=0;k<x-1;k++)
for(j=k+1;j<x;j++)
{
if(vec[k]>vec[j]){
aux=vec[k];
vec[k]=vec[j];
vec[j]=aux;
}
}
}
}

Ing. Alberto Moreno

UTP

-34-

Ejercicios Propuestos 3
Realizar Las Siguientes cuyos Nombres y parmetros por valor Son:
1.- Funcin Acirculo pasando como valor un radio devuelva su rea
2.- Funcin Acuadrado pasando como valor un lado devuelva su rea
3.- Funcin Cilindro pasando como valores el radio y su altura devuelva su rea
4.- Funcin Hipotenusa pasando como valor la base y la altura devuelva su
hipotenusa.
5.- Funcin Triangulo pasando como valor tres lados de un triangulo en caso que forme
tringulo que devuelva su rea de lo contrario que devuelva un valor -1
6.- Funcin Hexadecimal que pasando un valor numrico que devuelva dicho numero
en el sistema hexadecimal (como cadena)
7.- Funcin Binario pasando como valor un numero que lo devuelva en el sistema
binario.(el valor es como cadena).
8.- Funcin Divisores pasando un numero que devuelva el numero de sus divisores
9.- Funcin Primo pasando un numero entero que devuelva un valor lgico si es True
es primo y False si no lo es.
10.- Funcin Left(Cad,n) pasando una cadena y numero de caracteres que devuelva los
carectares hacia la izquierda hasta el numero indicado.
11.- Funcin Right(Cad,n) que extraiga caracteres hacia la derecha.
12.- Funcin CUENTAV pasando una cadena , que devuelva el numero de vocales que
contiene dicha cadena..
Nota: A cada funcin elaborada ponga un nombre adecuado
13.- Pasando un Numero que devuelva el factorial de dicho numero
14.-Pasando un Valor entero de grados centgrado y un carcter( R, K,F) que
representan Ranking, kelvin y farenheit respectivamente ,devuelva su conversin. Al
grado seleccionado.
15..-Pasando un numero entero que devuelva dicho numero en romanos (el valor
ingresado debe ser menor a 1000)
16.- Pasando un numero de cualquier longitud puede ser hasta millones , que devuelva
dicho numero en Letras.
Cletras(4567234)=> Cuatro millones quinientos sesenta y siete mil doscientos treinta
y cuatro.

Ing. Alberto Moreno

UTP

-35-

18.- Pasando un vector de enteros que devuelva la suma de los nmeros.


19- Pasando una vector que devuelva el mismo vector pero ordenado.
20.- pasando un vector y un elemento que realice la bsqueda de dicho elemento en el
vector si lo encuentra devuelve true de lo contrario false.
Solo entregar el resultado:
21. Cul es el resultado del siguiente programa?
class Ejercicio {
public static void main(String [] args) {
int[] a={3,4,5};
int [] b=a;
b[1]=3;
a=metodo1(a ,b);
for (int i=0; i<a.length;i++)
System.out.print(a[i]+" "+b[i]+" ");
}
public static int [] metodo1(int [] d, int [] e) {
e[1]=4;
int [] c={0,0,0};
for (int i=0; i< d.length; i++)
c[i]=d[i]+e[i];
return c;
}//fin main
}//fin clase
22. Cul es el resultado del siguiente programa?
class Ejercicio {
public static void main(String [] args) {
int [] Valores1 ={9, 48, 5, 3, 29, 62};
int [] Valores2 ={45, 1, 33};
metodo1(Valores1 [4]);
metodo1(Valores2 [2]);
metodo2(Valores2);
Valores1=metodo3(Valores2);
System.out.print(Valores1[0]);
for (int i=1; i<Valores2.length;i++)
System.out.print(" "+Valores1[i]);
}
public static void metodo1(int numero) {
numero = 0;
numero=numero+10;
}
public static void metodo2(int [] lista) {
lista[1]=lista[2];
}
public static int [] metodo3(int [] lista) {
for (int i=0; i<lista.length;i++)
lista[i]=lista[i]+i;
return lista;
}
}

Ing. Alberto Moreno

UTP

-36-

// una clase simple


public class clase02 {
public static void main(String[] args) {
// TODO code application logic here
Obrero per=new Obrero();
per.nom="JOse ";
per.horas=67;
per.sec='B';
per.calculo();
}
}

Crear una clase obrero con los atributos:


Nombre , horas trabajadas y seccin de
trabajo( A o B)
- Crear el mtodo calculo
- El pago por hora es de acuerdo a la
seccin si A su pago hora es de 8 soles si
es B es de 7.4 soles

class Obrero{
String nom;
double horas;
char sec;
void calculo(){
double afp,pt;
if(sec=='A')
pt=this.horas*8;
else
pt=this.horas*7.4;
afp=pt*0.11;
System.out.print("\npago total ="+pt);
System.out.print("\n Descuento por afp="+afp);
}
}

Ing. Alberto Moreno

UTP

-37-

MANEJO DE CADENAS
Clase Strings
Una secuencia de datos del tipo carcter se llama un string (cadena) y en el entorno Java
est implementada por la clase String (un miembro del paquete java.lang).
String[] args;

Este cdigo declara explcitamente un array, llamado args, que contiene objetos del tipo
String. Los corchetes vacios indican que la longitud del array no se conoce en el
momento de la compilacin, porque el array se pasa en el momento de la ejecucin.
El segundo uso de String es el uso de cadenas literales (una cadena de caracteres entre
comillas " y ").
"Hola mundo!"
El compilador asigna implicitamente espacio para un objeto String cuando encuentra
una cadena literal.
Los objetos String son inmutables - es decir, no se pueden modificar una vez que han
sido creados.
El paquete java.lang proporciona una clase diferente, StringBuffer, que se podr utilizar
para crear y manipular caracteres al vuelo.

Concatenacin de Cadenas
Java permite concatenar cadenas fcilmente utilizando el operador +. El siguiente
fragmento de cdigo concatena tres cadenas para producir su salida.
"La entrada tiene " + contador + " caracteres."

Dos de las cadenas concatenadas son cadenas literales: "La entrada tiene " y "
caracteres.". La tercera cadena - la del medio- es realmente un entero que primero se
convierte a cadena y luego se concatena con las otras.

Funciones cadena
Tipo de Dato
Sintaxis del metodo y descripcinn
Devuelto

Ing. Alberto Moreno

UTP

-38char charAt(int index)

Devuelve un caracter del indice especificado


int compareTo(String anotherString)

Compara dos cadenzas en longitud y contenido lexicografico .


String concat(String str)
Cancoatena dos cadenas.
boolean equals(Object anObject)

devuelve true si las dos cadenzas son iguales


int indexOf(String str)

Devuelve la posicion de la primera ocurrencia encontrada.


int lastIndexOf(String str)

Similar al anterior pero devuelve la posicion de la ultima ocurrencia


encontrada..
int length()

devuelve la longitud de la cadena


String replace(char oldChar, char newChar)
remplaza un caracter con un Nuevo caracter en toda la cadena.
String replaceAll(String regex, String replacement)
similar al anterior pero trabaja con cadenas.
String replaceFirst(String regex, String replacement)
Replaces the first substring of this string that matches the given
regular expression with the given replacement.
String[] split(String regex)
divide una cadena por medio de un carcter comn asignndolo a
un vector.
String substring(int beginIndex)
Retorna una cadena desde la posicion indicada hasta la ultima
posicion.
String substring(int beginIndex, int endIndex)
devuelve una cadena desde la posicin indicada hasta la diferencia de los
indices especificados.
String toLowerCase()
Convierte toda la cadena ha letras minusculas
String toUpperCase()
Convierte toda la cadena a letras mayusculas..
String trim()
Returns a copy of the string, with leading and trailing whitespace
omitted.

package

Ing. Alberto Moreno

UTP

-39-

Un package es una agrupacin de clases afines. Equivale al concepto de


librera existente en otros lenguajes o sistemas. Una clase puede definirse
como perteneciente a un package y puede usar otras clases definidas en ese o
en otros packages.
Los packages delimitan el espacio de nombres (space name). El nombre de
una clase debe ser nico dentro del package donde se define. Dos clases con
el mismo nombre en dos packages distintos pueden coexistir e incluso pueden
ser usadas en el mismo programa.
Una clase se declara perteneciente a un package con la clausula package,
cuya sintaxis es:
package nombre_package;
La clausula package debe ser la primera sentencia del archivo fuente.
Cualquier clase declarada en ese archivo pertenece al package indicado.
Por ejemplo, un archivo que contenga las sentencias:
package miPackage;
...
class miClase {
...
declara que la clase miClase pertenece al package miPackage.
La agrupacin de clases en packages es conveniente desde el punto de vista
organizativo, para mantener bajo una ubicacin comn clases relacionadas que
cooperan desde algn punto de vista.

Clasula import
Cuando se referencia cualquier clase dentro de otra se asume, si no se indica
otra cosa, que sta otra est declarada en el mismo package. Por ejemplo:
package Geometria;
...
class Circulo {
Punto centro;
...
}

En esta declaracin definimos la clase Circulo perteneciente al package


Geometria. Esta clase usa la clase Punto. El compilador y la JVM asumen que
Punto pertenece tambin al package Geometria, y tal como est hecha la
definicin, para que la clase Punto sea accesible (conocida) por el compilador,
es necesario que est definida en el mismo package.
package GeometriaBase;
class Punto {

Ing. Alberto Moreno

UTP

-40-

int x , y;
}

Entonces, para usar la clase Punto en nuestra clase Circulo deberiamos poner:
package GeometriaAmpliada;
import GeometriaBase.*;
class Circulo {
Punto centro;
...
}

Con la clasula import GeometriaBase.*; se hacen accesibles todos los


nombres (todas las clases) declaradas en el package GeometriaBase. Si slo
se quisiera tener accesible la clase Punto se podra declarar: import
GeometriaBase.Punto;
La clasula import simplemente indica al compilador donde debe buscar
clases adicionales, cuando no pueda encontrarlas en el package actual y
delimita los espacios de nombres y modificadores de acceso.
Nombres de los packages
Los packages se pueden nombrar usando nombres compuestos separados por
puntos, de forma similar a como se componen las direcciones URL de Internet.
Por
ejemplo
se
puede
tener
un
package
de
nombre
misPackages.Geometria.Base.
El API de java est estructurado de esta forma, con un primer calificador (java o
javax) que indica la base, un segundo calificador (awt, util, swing, etc.) que
indica el grupo funcional de clases y opcionalmente subpackages en un tercer
nivel, dependiendo de la amplitud del grupo. Cuando se crean packages de
usuario no es recomendable usar nombres de packages que empiecen por java
o javax.

Clases
Modela una abstraccin definiendo propiedades y comportamientos para los
objetos representados.
Propiedades
: atributos, variables
Comportamientos
: operaciones, mtodos
Implementacin
: Define cmo se proporcionan los servicios en una
clase.
Una abstraccin trata de mostrar las propiedades y comportamientos de
un objeto que lo diferencia de otro.

Ing. Alberto Moreno

UTP

-41-

Representa un conjunto de propiedades y mtodos de uno o mas objetos


idnticos.
Todo en Java forma parte de una clase, es una clase o describe cmo
funciona una clase.
Ejmeplo: Public Class Persona {
}
Objetos
Es una instancia concreta de la abstraccin que representa la clase.
Los objetos en Java se manejan por referencias
Declaracin de una
variable de referencia.
Persona persona1;
Creacin del objeto. Operador new.
persona1 = new Persona();
persona2 = new Persona();
Donde: Persona es el nombre de la clase.
El operador new devuelve una referencia al objeto creado.
Persona() es el metodo cosntructor
persona1 y persona2 son objetos o instancias de la clase Persona
Variable = objeto/instancia
Tipo
= clase Cuando un objeto pierde su referencia es tomado por el
garbage collector.
Metodo constructor
Es un mtodo especial, que se invoca automticamente cuando se declara un
objeto, sirve para inicializar el estado del objeto.
Caractersticas:
No tiene tipo de dato
No pueden devolver un valorSu nombre coincide con el nombre de la clase
donde se encuentra
Cuando la clase no tiene un constructor la VM le asigna uno vaco por
defaultPuede haber mas de un constructor dentro de una clase
Se ejecuta cuando invocamos al operador new

Ing. Alberto Moreno

UTP

-42-

Estructura de una Clase


<cabecera_de_clase> {
<cuerpo_clase>
}
La cabecera puede tener la siguiente informacin :
Modificadores de mbito o accesibilidad.
Modificadores adicionales.
Herencia
Implementacin de interfaces.
El cuerpo de la clase puede tener atributos y mtodos
[public][final][abstract] class Nombre
{
//propiedades
//metodos
}
default (Sin modificador) :
Accesible en el paquete.
public
:
Accesible en cualquier lugar.
abstract
: La clase no puede ser instanciada. Por razones de diseo
o
por contener algn mtodo abstracto. Sirve de base para la
herencia.
final : La clase no puede ser heredada. Son el ltimo nivel
Ing. Alberto Moreno

UTP

-43-

<cabecera_de_metodo> ( <lista de parametros>) <throws excepcion> {


<cuerpo_mtodo>
}
La cabecera puede tener
la siguiente informacin :
Modificadores de mbito o accesibilidad.
Modificadores adicionales.
public : Accesible en todos lados.
protected : Accesibles dentro del paquete que contiene la clase y por todos sus
subclases. Otras clases de otros paquetes no pueden acceder.
default
: Accesible solamente dentro del paquete.
private
: Accesible solamente dentro de la clase.
OTROS MODIFICADORES
static
: Define una variable o mtodo de clase
final
: Define una constante o que el mtodo no puede ser sobreescrito.
abstract : Define un mtodo abstracto

Ing. Alberto Moreno

UTP

-44-

Los miembros de instancia son los mtodos y las variables que pertenecen al objeto.
Los valores de las variables definen el estado del objeto.
Los mtodos definen el comportamiento de un objeto. La implementacin de los
mtodos s es compartida por todas las instancias.
Los miembros estticos son los mtodos y las variables que pertenecen a la clase.
Se diferencian en la definicin por la palabra clave static.
Las variables estticas son inicializadas cuando se carga la clase en runtime.
Los miembros estticos pueden ser llamados utilizando el nombre de la clase o a
travs de la referencia al objeto

Variables de tipo simple de datos: El paso de parmetros se realiza siempre por


valor, es decir, el valor del parmetro de llamada no puede ser modificado en el
cuerpo del mtodo ( El mtodo trabaja con una copia del valor utilizado en la
llamada).
Variables de tipo Objeto (referencias): El valor del parmetro de llamada si
puede ser modificado dentro del mtodo. ( El mtodo trabaja directamente con el
valor utilizado en la llamada).

Es la capacidad de crear una nueva clase a partir de otra clase ya existente.


La nueva clase puede definir nuevos atributos y mtodos o modificar los ya
existentes, si como utilizar los atributos o metodos de la clase padre.
La clase padre se denomina superclase y la hija, subclase.
En Java la herencia es lineal (slo existe un superclase para una subclase)
Utilizamos la palabra clave extends.
Se heredan los mtodos permitidos.
Se puede sobreescribir algunos metodos de la superclase
La sobrecarga de mtodos nos permite implementar un mtodo de diferente manera.
La firma del mtodo sobrecargado cambia.
public int metodo1(int a);
public int metodo1(int a, String c);
Es necesario cambiar la firma del mtodo, no slo los valores de devolucin
Para sobrescribir un mtodo debemos de tener en cuenta :
Debemos revisar el nivel de accesibilidad para comprobar que
podemos
sobreescribir el mtodo.
El mtodo debe tener la misma firma o declaracin que el de la
clase
padre.

Ing. Alberto Moreno

UTP

-45this permite hacer referencia a elementos de la misma clase


super permite hacer referencia a elementos de la clase padre

Ejercicios propuestos 4.1.- Disee e implemente en Java una clase para trabajar con tringulos issceles. Para
ello, defina las variables de ejemplar mnimas que requiera, proporcione mtodos de
consulta, un mtodo constructor e implemente otros mtodos para calcular el permetro
y el rea de un tringulo.

2.-Implemente una clase llamado banco ,con los atributos nro de cuenta , nombre del
cliente , tipo de ahorro( D=dlar y S=soles) y el saldo; Implemente los mtodos para
deposito , retiro de dinero. y los mtodos constructores respectivos.
Esta aplicacin implemntelo :
a) Primero en modo de consola , empleando un ArrayList para almacenar un
conjunto de clientes , se debe elaborar un men que contemple las siguientes
opciones:
(1) Nuevos ahorristas
(2) Consulta de Saldos
(3) Movimiento de Cuentas
(4) Listado de Ahorristas
(5) Anulacin de cuentas
(6) Salir
En la opcin 2 se realiza la bsqueda por medio de un numero de cuenta
En la opcin 3 se realiza el deposito o retiro a travs de un numero de cuenta
actualizando el saldo respectivo.
La anulacin tambin se realiza por medio del nro de cuenta.
b) Realizar la misma aplicacin pero empleando formularios.

Ing. Alberto Moreno

UTP

-46-

3. Cul es el resultado del siguiente programa?


class Ejercicio {
public static void main(String [ ] args){
Clase1 obj1=new Clase1();
obj1.imprimir(24.3,5);
}
}
class Clase1 {
private double valor=9.8;
private int x=7;
public void imprimir(double valor, int x) {
System.out.print(valor+ +this.x);
}
}
4.- 12. Qu imprime el siguiente programa?
class Principal {
public static void main(String[] args) {
Autor autor =new Autor ("Paul", "Auster");
Libro libro= new Libro ("La triloga de Nueva York", autor); System.out.println
(libro.getTitulo()+" de " +
(libro.getAutor()).toString());
}
}
class Libro {
private String titulo;
private Autor autor;
public Libro(String titulo, Autor autor) {
this.titulo = titulo;
this.autor = autor;
}
public Autor getAutor() {
return autor;
}
public String getTitulo() {
return titulo;
}
}

Ing. Alberto Moreno

UTP

-47-

class Autor {
private String nombre;
private String apellido;
public Autor (String nombre, String apellido) {
this.nombre = nombre;
this.apellido=apellido;
}
public String toString () {
return nombre+ " " +apellido;
}
}

Ing. Alberto Moreno

UTP

-48-

APLIACION GENERAL DE MANTENIMIENTOS EMPLEANDO CLASES

Objetivo.- Que el alumno se capaz de implementar clases y manejo de ArrayList para


almacenar datos para un conjunto de items y a partir de ello realizar las operaciones de
Listado, modificacin y eliminacin de datos.
Las pantallas a emplear son las siguientes:

Ing. Alberto Moreno

UTP

-49-

1.- La opcin de anulacin es a travs del cdigo del empleado :

Ing. Alberto Moreno

UTP

-50-

La Modificacin de Datos:
Tambin se realiza mediante el cdigo del empleado

Ing. Alberto Moreno

UTP

-51-

Los pasos a realizar:


1.- Diagrama de clases:

Ing. Alberto Moreno

UTP

-52-

1.- Establecer los paquetes para las clases, inagenes y el paquete de prueba.
Empleado.java
package pack2;
public class Empleado {
private String code;
private String nome;
private char sec;
private double horas;
private double pt;
private static int nro=0;
/** Creates a new instance of Empleado */
public Empleado() {
nro++;
}
public Empleado( String cod,String nom, char sec, double hr ) {
this();

Ing. Alberto Moreno

UTP

-53-

this.code=cod;
this.nome=nom;
this.sec=sec;
this.horas=hr;
}

public String getCode() {


return code;
}
public void setCode(String code) {
this.code = code;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public char getSec() {
return sec;
}
public void setSec(char sec) {
this.sec = sec;
}
public double getHoras() {
return horas;
}
public void setHoras(double horas) {
this.horas = horas;
}
public double getPt() {
return pt;
}
public static int getNro() {
return nro;
}
}
2.- La clase de Empleados.java (un arreglo para almacenar varios empleados)

Ing. Alberto Moreno

UTP

-54-

package pack2;
import java.util.ArrayList;
import javax.swing.*;
public class Empleados {
private ArrayList emp;
public Empleados() {
emp=new ArrayList();
}
//para actualizar
public void update(Empleado e,int indice){
emp.set(indice,e);
}
//para adicionar nuevos empleados
public void AddEmp(Empleado e){
try{
emp.add(e);
}catch(Exception ex){
System.out.print("\n "+ex.getMessage());
}
}
//obtener un Empleado a partir de un indice
public Empleado GetEmp(int ind){
return (Empleado) emp.get(ind);
}
//obtener el tamao del arraylist
public int Nroemp(){
return emp.size();
}
//busqueda por numero devolviendo su indice
public int Busca(int n){
for(int i=0;i<Nroemp();i++){
if(n==GetEmp(i).getNro()){
return i;
}
}
return -1;
}
//una sobrecarga Busqueda por Codigo, devolviendo su indice
public int Busca(String code){
for(int i=0;i<Nroemp();i++){
if(code.equals(GetEmp(i).getCode())){
return i;
}

Ing. Alberto Moreno

UTP

-55-

}
return -1;

}
//quita un empleado a partir de un indice
public void Elimina(int nro){
emp.remove(nro);
}
//calcula el total pasando como dato un indice del arraylist
private double total(int f){
double tot;
if(this.GetEmp(f).getSec()=='A')
tot=this.GetEmp(f).getHoras()*13;
else
tot=this.GetEmp(f).getHoras()*15;
return tot;
}
//pasando un textArea va mostrar en dicho objeto la lista de datos
public void ListaArea(javax.swing.JTextArea xarea){
xarea.setText("Lista de Empleados \n");
xarea.append("\n Codigo \tNombre \t\tHoras\t Pago Total");
for(int f=0;f<Nroemp();f++){
xarea.append("\n"+ GetEmp(f).getCode()+
"\t"+GetEmp(f).getNome() +
"\t\t"+GetEmp(f).getHoras()+
"\t"+this.total(f));
}
}
//un listado simple mediante consola
public void Lista(){
//System.out.print("\nnro \t codigo \t nombre \t total");
for(int f=0;f<Nroemp();f++){
System.out.print("\n"+ this.GetEmp(f).getNro()+
"\t"+GetEmp(f).getCode()+
"\t"+GetEmp(f).getNome() +
"\t"+this.total(f));
}
} // fin del metodo

}fin de la clase

Ing. Alberto Moreno

UTP

-56-

La ventana principal tipo Jdialog (EmpDialog.java)


package pruebas;
import pack1.prueba;
import pack2.*;
import javax.swing.JOptionPane;
public class EmpDialog extends javax.swing.JDialog {
static Empleados emp;
static Empleado uno;
/** Creates new form EmpDialog */
public EmpDialog(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
emp=new Empleados();
this.jRx.setVisible(false);
this.limpiar();
}
private void txthrKeyReleased(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
String dato=this.txthr.getText();
if(dato.trim().length()==0)
{ this.jbtAcepta.setEnabled(false);
return;
}
else{
try{
double p=Double.parseDouble(dato);
this.jbtAcepta.setEnabled(true);
}catch(Exception ex){
JOptionPane.showMessageDialog(this,"El dato debe ser numerico","error",
JOptionPane.ERROR_MESSAGE);
}
}

}
private void txtcodKeyReleased(java.awt.event.KeyEvent evt) {
// CUANDO SE INGRESA EL CODIGO
if(txtcod.getText().trim().length()==0){
this.jbtAcepta.setEnabled(false);
return;
}
else{
this.jbtAcepta.setEnabled(true);

Ing. Alberto Moreno

UTP

-57-

}
}
private void JbtnModificaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
boolean flag=false;
String code,nom;
double horas;
code=this.txtcod.getText().trim();
int b=emp.Busca(code);
if(b==-1){
this.jTextArea1.setText("Codigo no existe");
return;
}
nom=emp.GetEmp(b).getNome();
horas=emp.GetEmp(b).getHoras();
pruebas.ModiEmpDialog ven=new
pruebas.ModiEmpDialog(null,true,code,nom,horas);
ven.setVisible(true);
if(ven.getFlag()==true){ //elimina el empleado
Empleado x=new Empleado();
x.setCode(code);
x.setHoras(ven.getHoras());
x.setNome(ven.getNom());
emp.update(x,b);
this.jTextArea1.setText("Registro actualizado");
}
}
private void JbeliminaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
boolean flag=false;
String code,nom;
double horas;
code=this.txtcod.getText().trim();
int b=emp.Busca(code);
if(b==-1){
this.jTextArea1.setText("Codigo no existe");
return;
}
nom=emp.GetEmp(b).getNome();
horas=emp.GetEmp(b).getHoras();
DelEmpDialog ven=new DelEmpDialog(null,true,code,nom,horas);
ven.setVisible(true);
if(ven.getFlag()==true){ //elimina el empleado
emp.Elimina(b);

Ing. Alberto Moreno

UTP

-58-

this.jTextArea1.setText("Registro eliminado");
}

}
private void jbtnListaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
emp.ListaArea(this.jTextArea1);
}
private void jbtAceptaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
uno=new Empleado();
uno.setCode(this.txtcod.getText());
uno.setNome(this.txtnom.getText());
uno.setHoras(Double.parseDouble(this.txthr.getText()));
if(this.jRa.isSelected())
uno.setSec('A');
else
uno.setSec('B');
emp.AddEmp(uno);
JOptionPane.showMessageDialog(this,"Datos Aceptados");
limpiar();
}
void limpiar(){
this.txtcod.setText("");
this.txthr.setText("");
this.txtnom.setText("");
this.jRx.setSelected(true);//para deseleccionar las otras opciones
this.txtcod.requestFocus();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new EmpDialog(new javax.swing.JFrame(), true).setVisible(true);
}
});
}

La ventana de Eliminacin (DelEmpDialog.Java)

Ing. Alberto Moreno

UTP

-59-

package pruebas;
/**
*
* @author utp
*/
public class DelEmpDialog extends javax.swing.JDialog {
private boolean flag=false;
/** Creates new form DelEmpDialog */
public DelEmpDialog(java.awt.Frame parent, boolean modal,
String nom, String cod, double ptot
){
super(parent, modal);
initComponents();
this.jLbcod.setText(cod);
this.jLbnom.setText(nom);
this.jLbtot.setText(""+ptot);
}
public boolean getFlag(){
return flag;
}
public void setFlag(boolean valor){
this.flag=valor;
}
private void jbtnAceptaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.flag=true;
this.setVisible(false);
}
Ventana de Dialogo para modificar los datos de un empleado:
package pruebas;
/**
*
* @author utp
*/
public class ModiEmpDialog extends javax.swing.JDialog {
private boolean flag=false;
private String nom;
private double horas;
/** Creates new form ModiEmpDialog */
public ModiEmpDialog(java.awt.Frame parent, boolean modal,
String cod,String nom, double hr
){
super(parent, modal);

Ing. Alberto Moreno

UTP

-60initComponents();
this.jlbcod.setText(cod);
this.jlbnom.setText(nom);
this.jlbhoras.setText(""+hr);
this.jtxthoras.setText(""+hr);
this.jtxtnom.setText(nom);

}
public boolean getFlag(){
return flag;
}
public void setFlag(boolean f){
this.flag=f;
}
private void jbCancelaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.setFlag(false);
this.setVisible(false);
}
private void jbtncambiaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.setHoras(Double.parseDouble(this.jtxthoras.getText()));
this.setFlag(true);
this.setNom(this.jtxtnom.getText());
this.setVisible(false);
}
/**
* @param args the command line arguments
*/
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public double getHoras() {
return horas;
}
public void setHoras(double horas) {
this.horas = horas;
}

Ing. Alberto Moreno

UTP

-61-

Ing. Alberto Moreno

UTP

-62-

CAPITULO DE HERENCIAS
La herencia permite crear una clase nueva (subclase o clase derivada) que tenga el
mismo comportamiento que otra (superclase o clase base) y adems extienda o
adapte ese comportamiento
a unas necesidades especficas.
La nueva subclase heredar los atributos y los mtodos de la clase base, los cuales se
aadirn a los definidos en la propia subclase.
La capacidad de descomponer un problema o concepto en un conjunto de
objetos relacionados entre s, y cuyo comportamiento es fcilmente
identificable, puede ser muy til para el desarrollo de programas informticos.
B. Jerarqua
La herencia es el mecanismo fundamental de relacin entre clases en la
orientacin a objetos. Relaciona las clases de manera jerrquica; una clase
padre o superclase sobre otras clases hijas o subclases.

Imagen 4: Ejemplo de otro rbol de herencia


Los descendientes de una clase heredan todas las variables y mtodos que
sus ascendientes hayan especificado como heredables, adems de crear los
suyos propios.
La caracterstica de herencia, nos permite definir nuevas clases derivadas de
otra ya existente, que la especializan de alguna manera. As logramos definir
una jerarqua de clases, que se puede mostrar mediante un rbol de herencia.
C. Tipos de Herencia
En la orientacin a objetos, se consideran dos tipos de herencia, simple y
mltiple. En el caso de la primera, una clase slo puede derivar de una nica
superclase. Para el segundo tipo, una clase puede descender de varias
superclases.
D. Declaracin
Para indicar que una clase deriva de otra, heredando sus propiedades
(mtodos y atributos), se usa el trmino extends, como en el siguiente ejemplo:
public class SubClase extends SuperClase {
// Contenido de la clase

Ing. Alberto Moreno

UTP

-63-

}
Por ejemplo, creamos una clase Persona
public class Persona {
String nombre;
int edad;
String domicilio;
public Persona() {
}
void asignarEdad(int ed){
this.edad=ed;
}
void asignarNombre(String nom){
nombre=nom;
}
int obtenerEdad(){
return edad;
}
String obtenerNombre(){
return nombre;
}
}
Luego creamos una subclase llamada Alumno
public class Alumno extends Persona{
int semestre;
String seccion;
public Alumno() {
}
void asignarSemestre(int semes){
semestre=semes;
}
void asignarSeccion(String sec){
seccion=sec;
}
int obtenerSemestre(){
return semestre;
}
String obtenerSeccion(){
return grupo;
}
}
La palabra clave extends se utiliza para decir que deseamos crear una
subclase de la clase que es nombrada a continuacin, en nuestro caso Alumno
es hija de Persona.

Ing. Alberto Moreno

UTP

-64-

E. Limitaciones en la herencia
Todos los campos y mtodos de una clase son siempre accesibles para el
cdigo de la misma clase.
Sin embargo los tres primeros modificadores (public, private y protected) son
los ms comunes que se usan para controlar el acceso desde otras clases, y
para controlar la herencia por las subclases.
public: Los miembros declarados public son accesibles en cualquier lugar en
que sea accesible la clase, y son heredados por las subclases.

private: Los miembros declarados private son accesibles slo en la


propia clase.
protected: Los miembros declarados protected son accesibles slo para
sus subclases

Por ejemplo veamos otra clase:


class Padre { // Hereda de Object
// Atributos
private int numeroFavorito, nacidoHace, dineroDisponible;
// Mtodos
public int getApuesta() {
return numeroFavorito;
}
protected int getEdad() {
return nacidoHace;
}
private int getSaldo() {
return dineroDisponible;
}
}
class Hija extends Padre {
// Definicin
}
class Visita {
// Definicin
}
En este ejemplo, un objeto de la clase Hija, hereda los tres atributos
(numeroFavorito, nacidoHace y dineroDisponible) y los tres mtodos (
getApuesta(), getEdad() y getSaldo() ) de la clase Padre, y podr invocarlos.
Cuando se llame al mtodo getEdad() de un objeto de la clase Hija, se
devolver el valor de la variable de instancia nacidoHace de ese objeto, y no de
uno de la clase Padre.
Sin embargo, un objeto de la clase Hija, no podr invocar al mtodo getSaldo()
de un objeto de la clase Padre, con lo que se evita que el Hijo conozca el
estado de la cuenta corriente de un Padre.

Ing. Alberto Moreno

UTP

-65-

La clase Visita, solo podr acceder al mtodo getApuesta(), para averiguar el


nmero favorito de un Padre, pero de ninguna manera podr conocer ni su
saldo, ni su edad
Las clases no pueden declararse ni protected , ni private .

F. COMPOSICIN
La tcnica en la que una clase se compone o contiene instancias de otras
clases se denomina composicin. Es una tcnica muy habitual cuando se
disean clases.
Por ejemplo analicemos el sig. cdigo:

class Circulo {
Punto centro;
int radio;
float superficie() {
return 3.14 * radio * radio;
}
}
Diramos que un Circulo tiene un Punto (centro) y un radio.
G. REDEFINICIN DE MTODOS. EL USO DE super.
Analicemos el siguiente ejemplo:

class Empleado {
String nombre;
int numEmpleado , sueldo;
static private int contador = 0;
Empleado(String nombre, int sueldo) {
this.nombre = nombre;
this.sueldo = sueldo;
numEmpleado = ++contador;
}
public void aumentarSueldo(int porcentaje) {
sueldo += (int)(sueldo * aumento / 100);
}

Ing. Alberto Moreno

UTP

-66public String toString() {


return "Num. empleado " + numEmpleado + "
Nombre: " + nombre +
" Sueldo: " + sueldo;
}
}

En el ejemplo el Empleado se caracteriza por un nombre (String) y por un


nmero de empleado y sueldo (enteros). La clase define un constructor que
asigna los valores de nombre y sueldo y calcula el nmero de empleado a partir
de un contador (variable esttica que siempre ir aumentando), y dos mtodos,
uno para calcular el nuevo sueldo cuando se produce un aumento de sueldo
(mtodo aumentarSueldo) y un segundo que devuelve una representacin de
los datos del empleado en un String.(mtodo toString).
Con esta representacin podemos pensar en otra clase que rena todas las
caractersticas de Empleado y aada alguna propia. Por ejemplo, la clase
Ejecutivo. A los objetos de esta clase se les podra aplicar todos los datos y
mtodos de la clase Empleado y aadir algunos, como por ejemplo el hecho de
que un Ejecutivo tiene un presupuesto.
As diramos que la clase Ejecutivo extiende o hereda la clase Empleado. Esto
en Java se hace con la clusula extends que se incorpora en la definicin de la
clase, de la siguiente forma:
class Ejecutivo extends Empleado {
int presupuesto;
void asignarPresupuesto(int p) {
presupuesto = p;
}
}
Con esta definicin un Ejecutivo es un Empleado que adems tiene algn
rasgo distintivo propio. El cuerpo de la clase Ejecutivo incorpora slo los
miembros que son especficos de esta clase, pero implcitamente tiene todo lo
que tiene la clase Empleado.
A Empleado se le llama clase base o superclase y a Ejecutivo clase derivada o
subclase.
Los objetos de las clases derivadas se crean igual que los de la clase base y
pueden acceder tanto sus datos y mtodos como a los de la clase base. Por
ejemplo:
Ejecutivo jefe = new Ejecutivo( "Armando Mucho",
1000);
jefe.asignarPresupuesto(1500);
jefe.aumentarSueldo(5);
Atencin!: Un Ejecutivo ES un Empleado, pero lo contrario no es cierto. Si
escribimos:

Ing. Alberto Moreno

UTP

-67Empleado curri = new Empleado ( "Esteban Comex


Plota" , 100) ;
curri.asignarPresupuesto(5000); // error

se producir un error de compilacin pues en la clase Empleado no existe


ningn mtodo llamado asignarPresupuesto.
Ahora bien veamos como podemos redefinir un mtodo
Se podra pensar en redefinir algunos mtodos de la clase base pero haciendo
que mtodos con el mismo nombre y caractersticas se comporten de forma
distinta. Por ejemplo podramos pensar en redisear el mtodo toString de la
clase Empleado aadiendo las caractersticas propias de la clase Ejecutivo. As
se podra poner:
class Ejecutivo extends Empleado {
int presupuesto;
void asignarPresupuesto(int p) {
presupuesto = p;
}
public String toString() {
String s = super.toString();
s = s + " Presupuesto: " + presupuesto;
return s;
}
}
De esta forma cuando se invoque jefe.toString() se usar el mtodo toString de
la clase Ejecutivo en lugar del existente en la clase Empleado.
Observe en el ejemplo el uso de super, que representa referencia interna
implcita a la clase base (superclase). Mediante super.toString() se invoca el
mtodo toString de la clase Empleado
Continuando con el uso de super e inicializacin de clases derivadas
Cuando se crea un objeto de una clase derivada se crea implcitamente un
objeto de la clase base que se inicializa con su constructor correspondiente. Si
en la creacin del objeto se usa el constructor no-args, entonces se produce
una llamada implcita al constructor no-args para la clase base. Pero si se usan
otros constructores es necesario invocarlos explicitamente.
En nuestro ejemplo dado que la clase mtodo define un constructor,
necesitaremos tambin un constructor para la clase Ejecutivo, que podemos
completar as:
class Ejecutivo extends Empleado {
int presupuesto;

Ing. Alberto Moreno

UTP

-68-

Ejecutivo (String n, int s) {


super(n,s);
}
void asignarPresupuesto(int p) {
presupuesto = p;
}
public String toString() {
String s = super.toString();
s = s + " Presupuesto: " + presupuesto;
return s;
}
}
Observe que el constructor de Ejecutivo invoca directamente al constructor de
Empleado mediante super(argumentos). En caso de resultar necesaria la
invocacin al constructor de la superclase debe ser la primera sentencia del
constructor de la subclase.

Ejemplo 2.- Elaborar la clase documento que sera heredado por la clase
Factura y la clase boleta:
Documento
String numero
String fecha
Double monto

Factura
String ruc

Boleta
String Nombre

import javax.swing.JOptionPane;
import java.util.ArrayList;
public class GestorVentas {
public static ArrayList ListaD=new ArrayList();
public static void main(String[] args) {
int op;
String Menu="(0)Salir\n" +
"(1)Nueva Factura\n" +
"(2)Nueva Boleta\n" +
"(3)LIstar Todos\n" +
"(4)Listar Facturas\n" +
"(5)Listar Boletas\n" +
"(6)Buscar Facturas\n" +
"(7)Calcular Igv\n";
for(;;){

Ing. Alberto Moreno

UTP

-69-

op=Integer.parseInt(JOptionPane.showInputDialog(Menu));
switch(op){
case 0: System.exit(0);break;
case 1: nuevaFactura();break;
case 2: nuevaBoleta();break;
case 3: listarTodos();break;
case 4: listarFacturas();break;
case 5: lsitarBoletas();break;
case 6: buscarfatura(num);break;
case 7: calcularIgv();break;
default: JOptionPane.showMessageDialog(null,"Opcion Incorrecta");
} //fin del switch
}//del for
} //del main

public static void nuevaFatura(){


Factura F=new Factura();
F.Fecha=JOptionPane.showInputDialog("Ingrese la Fecha");
F.Monto=Double.parseDouble(JOptionPane.showInputDialog("Ingrese el
Monto"));
F.Numero=Integer.parseInt(JOptionPane.showInputDialog("Ingrese el Numero"));
F.Ruc=Integer.parseInt(JOptionPane.showInputDialog("Ingrese el Ruc"));
ListaD.add(F);
}
public static void nuevaBoleta(){
Boleta B=new Boleta();
B.Fecha=JOptionPane.showInputDialog("Ingrese la Fecha");
B.Monto=Double.parseDouble(JOptionPane.showInputDialog("Ingrese el
Monto"));
B.Numero=Integer.parseInt(JOptionPane.showInputDialog("Ingrese el
Numero"));
B.Nombre=JOptionPane.showInputDialog("Ingrese el Nombre");
ListaD.add(B);
}
public static void listarTodos(){
for(int i=0;i<ListaD.size();i++){
if(ListaD.get(i) instanceof Factura){
((Factura)ListaD.get(i)).imprimir();
}else{
((Boleta)ListaD.get(i)).imprimir();
}
}
}
public static void listarFacturas(){
for(int i=0;i<ListaD.size();i++){
if(ListaD.get(i)instanceof Factura) {
((Factura)ListaD.get(i)).imprimir();
}
}

Ing. Alberto Moreno

UTP

-70-

}
public static void listarBoletas(){
for(int i=0;i<ListaD.size();i++){
if(ListaD.get(i) instanceof Boleta){
((Boleta)ListaD.get(i)).imprimir();
}
}
}
public static void buscarfatura(int num){
int num;
num=Integer.parseInt(JOptionPane.showInputDialog("Ingrese el numero"));
for(int i=0;i<ListaD.size();i++){
if(ListaD.get(i) instanceof Factura){
if(((Factura)ListaD.get(i)).Numero==num){
((Factura)ListaD.get(i)).imprimir();
}
}
}
}
public static void calcularIgv(){
for(int i=0;i<ListaD.size();i++){
if(ListaD.get(i) instanceof Factura){
((Factura)ListaD.get(i)).imprimir();
double igv;
double monto=((Factura)ListaD.get(i)).Monto;
igv= monto-(monto/1.19);
System.out.println("Su Igv es ......"+igv);
}
}
}
}
//fin de la clase principal gestor de Ventas
class Documento{
String Fecha;
double Monto;
int Numero;
void imprimir(){
System.out.println("Fecha :"+Fecha);
System.out.println("Monto :"+Monto);
System.out.println("Numero:"+Numero);
}
}
//
class Boleta extends Documento{
String Nombre;
void imprimir(){
System.out.println("Nombre :"+Nombre);
}
}
//

Ing. Alberto Moreno

UTP

-71-

class Factura extends Documento{


int Ruc;
void imprimir(){
super.imprimir();
System.out.println("Ruc :"+Ruc);
}
}
Ejercicios:
1Crear una clase animal (nombre, nro de patas, sexo) crear las subclases Perro (atributo
raza, atributo habla), gallo( metodo canta), Gato(metodo maulla)

2.- crear la clase TarjetaCredito( nro de tarjeta, nombre del cliente, fecha de caducacion)
crear las subclases TarjetaDorada(linea de credito, Cargo ), TarjetaTotus(sueldo del
cliente, Empresa donde trabaja) realizar las subclases ademas comprobarlo en el main
para asignar los datos.
3.- (Sistema de Nmina) Elaborar un programa que permita procesar la nmina de una
empresa.
Para ello considere el siguiente diagrama de clases:

Ing. Alberto Moreno

UTP

-72-

Un empleado (Empleado=Employee) debe tener un primer nombre, apellido paterno y


nmero de seguro social. Adems, un EmpleadoAsalariado (SalariedEmployee) debe
tener un salario semanal; un EmpleadoPorHoras (HourlyEmployee) debe tener un
sueldo y el nmero de horas trabajadas; un EmpleadoPorComision
(CommissionEmployee) debe tener una tasa por comisiones y ventas brutas; y un
EmpleadoBaseMasComision (BasePlusCommissionEmployee) debe tener un salario
base. Cada clase debe tener las construcciones apropiadas, los mtodos relevantes sets y
gets. Escriba un programa que cree instancias de objetos de cada una de las clases, y
que muestre toda la informacin asociada con cada objeto (incluyendo la informacin
heredada).

Interfaz Grfica de Usuario (GUI)

Ing. Alberto Moreno

UTP

-73-

EJEMPLOS DE HERENCIA
import java.text.DecimalFormat;
public class herencia01 {
public static void main(String[] args) {
// TODO code application logic here
circulo x=new circulo();
x.setRadio(5);
x.imprime();
Cilindro y=new Cilindro();
y.setRadio(7);
y.altura=12;
y.imprime();

Crear una clase circulo cuyo atributo


es el radio y los mtodos a crear son
Area() y Print() para el calculo del
area del circulo e impresin
respectiva de los datos.
Crear la clase Cilindro cuyo atributo
son :radio y altura hacer la herencia
correspondiente para el calculo de su
rea y volumen del cilindro.

}
}
//LA CLASE PRINCIPAL CIRCULO
class circulo{
private int radio;
DecimalFormat dos=new DecimalFormat("0.00");

double area(){
return radio*radio*Math.PI;
}
void imprime(){
System.out.print("\n area del circulo "+dos.format(area()));
}
public int getRadio() { //ENCAPSULA EL DATO PARA LEER
return radio;
}
public void setRadio(int radio) { // PARA ESCRIBIR
this.radio = radio;
}
}
class Cilindro extends circulo{ //CLASE EXTENDIDA DE LA CLASE CIRCULO
int altura;
double area(){
double ac;
ac=super.area()*altura;
return ac;
}
void imprime(){
super.imprime();

Ing. Alberto Moreno

UTP

-74-

System.out.print("\n area del cilindro:"+dos.format(area()));


}
}

Poliformismo.- un mtodo puede comportarse de muchas formas de acuerdo a la clase


donde se emplea dicho mtodo , por ejemplo el calculo del promedio depende de la
clase si es pregrado el calculo del promedio es :(n1*0.25+ n2*0.25 +0.50*n3) y para
PostGrado =(n1+n2+n3)/3
Postgrado
Alumno
public Alumno()
public Imprime()
public abstract Promedio()
Clase Alumno.java

package
herencia;
Pregrado
//herencia de la clase alumno
public class AlumnoPostgrado extends
Alumno {

package herencia;
abstract class Alumno {
public AlumnoPostgrado(String nom,
private String matricula;
String mat,
private String nombre;
double n1, double n2, double n3)
protected double n1, n2, n3;
{
//constructor de la clase alumno
super(mat,nom,n1,n2,n3);
public Alumno(String mat, String n,
}
double n1, double n2, double n3) {
matricula = mat;
public double calcularNota() {
nombre = n;
return (n1+n2+n3)/3.0;
this.n1 = n1;
}
this.n2 = n2;
this.n3 = n3;
}
}
public void Imprime(){
System.out.print("\n Matricula:"+this.matricula);
System.out.print("\n Nombre:"+this.nombre);
System.out.print("\n nota1:"+this.n1);
System.out.print("\n nota2:"+this.n2);
System.out.print("\n nota3:"+this.n3);
}
// metodo abstracto para el polimorfismo
abstract double calcularNota();

Ing. Alberto Moreno

UTP

-75-

package herencia;
public class AlumnoPregrado extends Alumno {
/** Creates a new instance of AlumnoPregrado */
public AlumnoPregrado(String nom, String mat,
double n1, double n2, double n3) {
super(mat,nom,n1,n2,n3);
}
public double calcularNota() {
return n1*0.25 + n2*0.25 + n3*0.5;
}
}

Comprobacin de las clases


package herencia;
import java.util.*;

public class prueba1 {


public static void main(String[] args) {
ArrayList x = new ArrayList();
AlumnoPregrado apre;
AlumnoPostgrado apos;
Alumno a;
apre = new AlumnoPregrado("Laura","1",5,6,4);
x.add(apre);
apre = new AlumnoPregrado("Claudia","2",4,7,7);
x.add(apre);
apos = new AlumnoPostgrado("Juan","3",5,6,4);
x.add(apos);
apos = new AlumnoPostgrado("Ana","4",4,7,7);
x.add(apos);
// Calculo de notas SIN polimorfismo
for (int i=0; i<x.size(); i++) {
if (x.get(i) instanceof AlumnoPregrado) {

Ing. Alberto Moreno

UTP

-76apre = (AlumnoPregrado)x.get(i);
apre.Imprime();
System.out.println("\n promedio:"+apre.calcularNota());
}
else {
apos = (AlumnoPostgrado)x.get(i);
System.out.println(apos.calcularNota());
}
}
// Calculo de notas aprovechando el polimorfismo
System.out.print("\n impresion 2");
for (int i=0; i<x.size(); i++) {
a = (Alumno)x.get(i);
a.Imprime();
System.out.println("\n promedio:"+a.calcularNota());
}

}
}

Gestin de Excepciones
Las excepciones son el mecanismo por el cual pueden controlarse en un programa Java
las condiciones de error que se producen. Estas condiciones de error pueden ser errores
en la lgica del programa como un ndice de un array fuera de su rango, una divisin
por cero o errores disparados por los propios objetos que denuncian algn tipo de estado
no previsto, o condicin que no pueden manejar.
La idea general es que cuando un objeto encuentra una condicin que no sabe manejar
crea y dispara una excepcin que deber ser capturada por el que le llam o por alguien
ms arriba en la pila de llamadas. Las excepciones son objetos que contienen
informacin del error que se ha producido y que heredan de la clase Throwable o de la
clase Exception. Si nadie captura la excepcin interviene un manejador por defecto que
normalmente imprime informacin que ayuda a encontrar quin produjo la excepcin.
Existen dos categoras de excepciones:

Excepciones verificadas: El compilador obliga a verificarlas. Son todas las que


son lanzadas explicitamente por objetos de usuario.
Excepciones no verificadas: El compilador no obliga a su verificacin. Son
excepciones como divisiones por cero, excepciones de puntero nulo, o ndices
fuera de rango.

Ing. Alberto Moreno

UTP

-77-

Generacin de excepciones
Supongamos que tenemos una clase Empresa que tiene un array de objetos Empleado
(clase vista en captulos anteriores). En esta clase podramos tener mtodos para
contratar un Empleado (aadir un nuevo objeto al array), despedirlo (quilarlo del array)
u obtener el nombre a partir del nmero de empleado. La clase podra ser algo as como
lo siguiente:
public class Empresa {
String nombre;
Empleado [] listaEmpleados;
int totalEmpleados = 0;
. . .
Empresa(String n, int maxEmp) {
nombre = n;
listaEmpleados = new Empleado [maxEmp];
}
. . .
void nuevoEmpleado(String nombre, int sueldo) {
if (totalEmpleados < listaEmpleados.length ) {
listaEmpleados[totalEmpleados++] = new Empleado(nombre,sueldo);
}
}
}

Observese en el mtodo nuevoEmpleado que se comprueba que hay sitio en el array


para almacenar la referencia al nuevo empleado. Si lo hay se crea el objeto. Pero si no lo
hay el mtodo no hace nada ms. No da ninguna indicacin de si la operacin ha tenido
xito o no. Se podra hacer una modificacin para que, por ejemplo el mtodo
devolviera un valor booleano true si la operacin se ha completado con xito y false si
ha habido algn problema.
Otra posibilidad es generar una excepcin verificada (Una excepcin no verificada se
producira si no se comprobara si el nuevo empleado va a caber o no en el array).
Vamos a ver como se hara esto.
Las excepciones son clases, que heredan de la clase genrica Exception. Es necesario
por tanto asignar un nombre a nuestra excepcin. Se suelen asignar nombres que den
alguna idea del tipo de error que controlan. En nuestro ejemplo le vamos a llamar
CapacidadEmpresaExcedida.
Para que un mtodo lance una excepcin:

Debe declarar el tipo de excepcin que lanza con la clusula throws, en su


declaracin.
Debe lanzar la excepcin, en el punto del cdigo adecuado con la sentencia
throw.

En nuestro ejemplo:
void nuevoEmpleado(String nombre, int sueldo) throws
CapacidadEmpresaExcedida {
if (totalEmpleados < listaEmpleados.length) {

Ing. Alberto Moreno

UTP

-78listaEmpleados[totalEmpleados++] = new Empleado(nombre,sueldo);


}
else throw new CapacidadEmpresaExcedida(nombre);

Adems, necesitamos escribir la clase CapacidadEmpresaExcedida. Sera algo


as:
public class CapacidadEmpresaExcedida extends Exception {
CapacidadEmpresaExcedida(String nombre) {
super("No es posible aadir el empleado " + nombre);
}
. . .
}

La sentencia throw crea un objeto de la clase CapacidadEmpresaExcedida . El


constructor tiene un argumento (el nombre del empleado). El constructor simplemente
llama al constructor de la superclase pasndole como argumento un texto explicativo del
error ( y el nombre del empleado que no se ha podido aadir).
La clase de la excepcin puede declarar otros mtodos o guardar datos de depuracin
que se consideren oportunos. El nico requisito es que extienda la clase Exception.
Consultar la documentacin del API para ver una descripcin completa de la clase
Exception.
De esta forma se pueden construir mtodos que generen excepciones.

Captura de excepciones
Con la primera versin del mtodo nuevoEmpleado (sin excepcin) se invocara este
mtodo de la siguiente forma:
Empresa em = new Empresa("La Mundial");
em.nuevoEmpleado("Adn Primero",500);

Si se utilizara este formato en el segundo caso (con excepcin) el compilador producira


un error indicando que no se ha capturado la excepcin verificada lanzada por el mtodo
nuevoEmpleado. Para capturar la excepcin es utiliza la construccin try / catch, de la
siguiente forma:
Empresa em = new Empresa("La Mundial");
try {
em.nuevoEmpleado("Adn Primero",500);
} catch (CapacidadEmpresaExcedida exc) {
System.out.println(exc.toString());
System.exit(1);
}

Se encierra el cdigo que puede lanzar la excepcin en un bloque try / catch.


A continuacin del catch se indica que tipo de excepcin se va a capturar.
Despus del catch se escribe el cdigo que se ejecutar si se lanza la excepcin.
Si no se lanza la excepcin el bloque catch no se ejecuta.

Ing. Alberto Moreno

UTP

-79-

El formato general del bloque try / catch es:


try {
. . .
} catch (Clase_Excepcion nombre) { . . .}
catch (Clase_Excepcion nombre) { . . .}
. . .

Observese que se puede capturar ms de un tipo de excepcin declarando ms de una


sentencia catch. Tambin se puede capturar una excepcin genrica (clase Exception)
que engloba a todas las dems.
Supongamos que, en nuestro ejemplo es el mtodo main de una clase el que invoca el
mtodo nuevoEmpleado. Si no quiere capturar la excepcin debe hacer lo siguiente:
public static void main(String [] args) throws
CapacidadEmpresaExcedida {
Empresa em = new Empresa("La Mundial");
em.nuevoEmpleado("Adn Primero",500);
}

Clusula finally
La clusula finally forma parte del bloque try / catch y sirve para especificar
un bloque de cdigo que se ejecutar tanto si se lanza la excepcin como si no. Puede
servir para limpieza del estado interno de los objetos afectados o para liberar recursos
externos (descriptores de fichero, por ejemplo). La sintaxis global del bloque try /
catch / finally es:
try {
. . .
} catch (Clase_Excepcion nombre) {...}
catch (Clase_Excepcion nombre) {...}
. . .
finally {...}

Ing. Alberto Moreno

UTP

-80-

Links de inters para el curso


tema
Caractersticas del java
Conceptos bsicos
Control de flujo
Introduccin a variables y
mtodos
Presentacin, introduccin,
cadenas de caracteres, sentencias
de control, arreglos, clases y
herencia
Funciones matemticas, uso de
String, Uso de StringBuffers

link
http://www.webtaller.com/manualjava/caracteristicas-java.php
http://www.webtaller.com/manualjava/programacion.php
http://www.webtaller.com/manual-java/controlflujo.php
http://www.webtaller.com/manual-java/variablesmetodos.php
http://www.monografias.com/trabajos42/manualde-java/manual-de-java.shtml

http://www.cec.uchile.cl/manuales/contenidos/Java/

Ing. Alberto Moreno

También podría gustarte