You are on page 1of 206

Texto para el curso de

Tcnicas de Programacin del II ciclo de la escuela de Ingeniera de


Sistemas de la ULADECH

PROGRAMACION
ORIENTADO A OBJETOS
Contiene el uso de las clases de Java y sus mtodos, creacin de mtodos,
recursividad y sobrecarga de mtodos, arreglos, miembros de una clase, relaciones de
clases, niveles de acceso de los miembros de una clase, operador this, herencia de
clases, clases abstractas, interfaces, polimorfismo, paquetes y excepciones

Elaborado por:
Ing. Martn Salcedo
Quiones

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

INDICE
Pgina
03
04

CAPITULO I: Uso y creacin de mtodos.


Mtodos de clases de Java
Creacin de mtodos

22

Recursividad y sobrecarga de mtodos

34

Arreglos unidimensionales en mtodos

45

CAPITULO II:Programacin orientada a objetos

59

Clases y sus miembros

60

Relaciones entre clases

79

Modificadores de acceso a los miembros de una clase

92

Mtodos constructores y la referencia this

107

CAPITULO III: Herencia, clases abstractas, interfaces y polimorfismo 119


Herencia de clases

120

Clases abstractas

137

Interfaces y herencia mltiple

149

Polimorfismo

163

CAPITULO IV: Paquetes, excepciones y desarrollo de un proyecto

179

Paquetes

180

Manejo de excepciones e hilos

185

Proyecto Tienda

193

Docente: Ing. Martn Salcedo Quiones

Pagina: 2

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

CAPITULO I
USO Y CREACION DE METODOS

Docente: Ing. Martn Salcedo Quiones

Pagina: 3

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

METODOS DE CLASES DE JAVA

ESTRUCTURA DE UNA APLICACIN DE JAVA SENCILLA


public class HolaMundo{
public static void main(String args[])
{
System.out.println(! Hola Mundo ! );
}
}
Al escribir una aplicacin sencilla de Java se debe definir un mtodo main, que
se procesa cuando el programa inicia su ejecucin. En el mtodo main se
especifican las funciones que realiza el programa.
Toda aplicacin se comienza declarando una clase con la palabra public class
y un nombre, y este nombre tiene que ser idntico al nombre del archivo que se
va a grabar pero con extensin Java.
En el ejemplo al colocar public class HolaMundo se esta declarando la clase
llamada HolaMundo.
El archivo se debe grabar como HolaMundo.java igual que el nombre de la
clase.
Dentro de main, la aplicacin utiliza el metodo System.out.println para
desplegar el mensaje Hola Mundo! en la consola del Sistema.
Para compilar un programa de Java se hace lo siguiente
Docente: Ing. Martn Salcedo Quiones

Pagina: 4

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
C:\JDK1.3\BIN>javac HolaMundo.java <Intro>
Al hacer esto se crea un archivo llamado HolaMundo.class que es un archivo
que se encuentra en bytecode
Despus de esto se utiliza el comando java para interpretar y ejecutar el
bytecode de la aplicacin.
C:\JDK1.3\BIN>java HolaMundo <Intro>
Hola Mundo !
-

Las instrucciones en un programa Java se escriben en minsculas

El smbolo de punto y coma (;) se utiliza para separar una instruccin de


la siguiente.

Un bloque de cdigo es una serie de instrucciones y/o declaraciones de


Java rodeadas por un par de llaves {}
Por ejemplo para comenzar la clase comienza con { y termina con }. Asi
mismo el mtodo main comienza con un { y termina con un }. El uso de
los bloque de cdigo es importante para indicar que se van a realizar un
conjunto de instrucciones.

La clase BufferedReader para entrada de datos


La E/S bsica por terminal con formato se lleva a cabo mediante readLine y
println . La entrada estndar es System.in y la salida estndar es System.out.
El mecanismo bsico para E/S con formato utiliza el tipo String. En la salida +
combina dos valores de tipo String. Si el segundo argumento no es un valor de
tipo String, se crea un valor temporal de tipo String para el, siempre que sea de
tipo primitivo. Estas conversiones al tipo String se pueden definir tambin para
objetos.
Ejemplo:
System.out.println(El resultado es +R);

Docente: Ing. Martn Salcedo Quiones

Pagina: 5

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Un modo sencillo de realizar una lectura de la entrada es leer una sola lnea
almacenndola en un objeto de tipo String, para lo que se emplea el mtodo
readLine. Este mtodo lee hasta que encuentra un final de lnea o el final del
fichero. Los caracteres ledos salvo el final de Lnea (en el caso de que se
encuentre), se devuelven como un nuevo String. Para emplear readLine, se
debe construir un objeto BufferedReader sobre un objeto InputStreamReader
que a su vez se crea a partir de System.in.
Ejemplo:
BufferedReader in = new BufferedReader( new
InputStreamReader(System.in));
String nombre;
System.out.println(Introduzca una nombre : );
nombre = in.readLine();
En este ejemplo se ha declarado una variable nombre de tipo String y se esta
leyendo desde la consola utilizando un objeto llamado in el cual llama al
mtodo readLine para leer una cadena y asignarle a la variable nombre.
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.
Math tiene una referencia a las dos constantes ms utilizadas en matemtica
con una precisin de 15 decimales (suficiente para la mayora de los mortales).
Si ejecutamos:
System.out.println("e = " + Math.E);
Docente: Ing. Martn Salcedo Quiones

Pagina: 6

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.println("pi = " + Math.PI);
veremos:
e = 2.718281828459045
pi = 3.141592653589793
Los mtodos que tiene la clase Math son:
Math.abs( x )
para int, long, float y double
Math.sin( double )
Math.cos( double )
Math.tan( double )
Math.asin( double )
Math.acos( double )
Math.atan( double )
Math.atan2( double,double )
Math.exp( double )
Math.log( double )
Math.sqrt( double )
Math.ceil( double )
Math.floor( double )
Math.rint( double )
Math.pow( a,b )
Math.round( x )
para double y float
Math.random()
devuelve un double
Math.max( a,b )
para int, long, float y double
Math.min( a,b )
para int, long, float y double
Math.E
para la base exponencial
Math.PI
para PI
La clase Integer
Cada tipo numrico tiene su propia clase de objetos. As el tipo int tiene el
objeto Integer. Se han codificado muchos mtodos tiles dentro de la clase
Integer como son:

String Integer.toString( int i,int base );

String Integer.toString( int i );


Por ejemplo:
int valor=38;
String cadena;

Docente: Ing. Martn Salcedo Quiones

Pagina: 7

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
cadena=Integer.toString(valor); //no colcarle base se assume que es base 10

int I.parseInt( String s,int base );

int I.parseInt( String s );


Por ejemplo:
String dato=20;
int valor;
valor=Integer.parseInt(dato); //no colcarle base se assume que es base 10

Integer Integer.valueOf( String s,int base );

Integer Integer.valueOf( String s );

int I.intValue();

long I.longValue();

float I.floatValue();

double I.doubleValue();

String I.toString();

La clase Character
Al trabajar con caracteres se necesitan muchas funciones de comprobacin y
traslacin. Estas funciones estn empleadas en la clase Character . De esta
clase s que se pueden crear instancias, al contrario que sucede con la clase
Math .
Declaraciones
La primera sentencia crear una variable carcter y la segunda un objeto
Character:
char c;
Character C;

Comprobaciones booleanas
Docente: Ing. Martn Salcedo Quiones

Pagina: 8

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Character.isLowerCase(c) //devuelve verdadero si el character est en minscula
Character.isUpperCase(c) //devuelve verdadero si el character est en mayscula
Character.isDigit(c) // devuelve verdaero si el carcter es un dgito numrico
Character.isSpace(c) //devuelve verdaero si el character es un espacio y falso todo lo
contrario

En este caso, si tuvisemos un objeto Character C , no se podra hacer


C.isLowerCase , porque no se ha hecho un new de Character. Estas funciones
son estticas y no conocen al objeto, por eso hay que crearlo antes.
Traslaciones de caracteres
char c2 = Character.toLowerCase( c );
char c2 = Character.toUpperCase( c );

Traslaciones de carcter/dgito
int i = Character.digit( c,base );
char c = Character.forDigit( i,base );

Mtodos de la clase Character


C = new Character( 'J' );
char c = C.charValue();
String s = C.toString();

La clase Float
Cada tipo numrico tiene su propia clase de objetos. As el tipo float tiene el
objeto Float. De la misma forma que con la clase Character , se han codificado
muchas funciones tiles dentro de los mtodos de la clase Float .
Declaraciones
La primera sentencia crear una variable float y la segunda un objeto Float:
float f;
Float F;

Docente: Ing. Martn Salcedo Quiones

Pagina: 9

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Conversiones de Clase/Cadena
String s = Float.toString( f );
f = Float.valueOf( "3.14" );

Comprobaciones
boolean b = Float.isNaN( f );
boolean b = Float.isInfinite( f );

La funcin isNaN() comprueba si f es un No-Nmero . Un ejemplo de nonmero es raiz cuadrada de -2.


Conversiones de Objetos
Float F = new Float( Float.PI );
String s = F.toString();
int i = F.intValue();
long l = F.longValue();
float F = F.floatValue();
double d = F.doubleValue();

La clase Double
Cada tipo numrico tiene su propia clase de objetos. As el tipo double tiene el
objeto Double . De la misma forma que con la clase Character , se han
codificado muchas funciones tiles dentro de los mtodos de la clase Double .
Declaraciones
La primera sentencia crear una variable double y la segunda un objeto
Double:
double d;
Double D;

Mtodos ms usados en Double


Docente: Ing. Martn Salcedo Quiones

Pagina: 10

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
boolean D.equals();
String D.toString();
int D.intValue();
long D.longValue();
float D.floatValue();
double D.doubleValue();
Double V.valueOf( String s );

Clase String
Esta clase almacena una cadena de caracteres. Una cadena es una serie de caracteres que
se trata como una unidad. Una cadena puede incluir letras, dgitos y diversos caracteres
especiales como +,-,*,/,$ y otros.
Una cadena en Java es un objeto de la clase String.
Los literales de cadena o constantes de cadena en Java se escriben como una secuencia
de caracteres cerrada entre comillas.
Ejemplo:
Computacin, Java es fcil,
Los mtodos mas utilizados son:
cadena.length() : El mtodo length Devuelve el numero de Caracteres de una cadena.
Ejemplo:
String nombre = Francisco;
int n;
n = cadena.length();
System.out.println(El nombre : + nombre + tiene + n + Caracteres);

cadena1.equals(cadena2) : El mtodo equals devuelve true si las dos cadenas son


iguales y false en caso contrario..
cadena1.equalsIgnoreCase(cadena2) : El mtodo equalsIgnoreCase no toma en cuenta
la diferencia entre letras maysculas y minsculas de cada String al realizar la
comparacin.
cadena1.compareTo(cadena2) : El mtodo compareTo devuelve un numero entero:
> 0 Si cadena1 es mayor que cadena2
= 0 Si las cadenas son exactamente iguales
Docente: Ing. Martn Salcedo Quiones

Pagina: 11

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
< 0 Si cadena1 es menor que cadena2
Este mtodo emplea una comparacin lexicogrfica.
cadena1.compareToIgnoreCase(cadena2) : El mtodo compareToIgnoreCase no toma
en cuenta la diferecia entre las maysculas y minsculas de cada String al realizar la
comparacin.
cadena.charAt(indice) : El mtodo charAt delvuelve el carcter que indica el indice.
Ejemplo:
String nombre = Felipe;
Char x;
X=nombre.charAt(3); // x toma el valor del carcter i.
Los indices de una cadena comienzan en 0.
cadena.toUpperCase() : Convierte la cadena a maysculas
cadena.toLowerCase() : Convierte la cadena en minsculas
cadena.trim() : Elimina los espacios al inicio y al final de la cadena.
cadena1.startsWith(cadena2) : Devuelve verdadero si cadena1 comienza con cadena2.
cadena1.endsWith(cadena2) : Devuelve verdadero si cadena1 finaliza con cadena2.
cadena.indexOf(caracter) : Devuelve el ndice de la primera ocurrencia del carcter.
cadena.indexOf(carcter,posicion) : Devuelve el ndice de la primera ocurrencia del
carcter , comenzando la bsqueda a partir de posicin.
cadena1.indexOf(cadena2) : devuelve el ndice de la primera ocurrencia de cadena2 en
cadena1.
cadena1.indexOf(cadena2,posicin): Devuelve el ndice de la primera ocurrencia de la
cadena2 en cadena1, comenzado la bsqueda a partir de posicin.
cadena.lastIndexOf(caracter) : Devuelve el ndice de la ultima ocurrencia del carcter.
cadena.lastIndexOf(carcter,posicion) : Devuelve el ndice de la ultima ocurrencia del
carcter , comenzando la bsqueda a partir de posicin.
Docente: Ing. Martn Salcedo Quiones

Pagina: 12

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

cadena1.lastIndexOf(cadena2) : devuelve el ndice de la ultima ocurrencia de cadena2


en cadena1.
cadena1.lastIndexOf(cadena2,posicin): Devuelve el ndice de la ultima ocurrencia de
la cadena2 en cadena1, comenzado la bsqueda a partir de posicin.
cadena.substring(indice) : Devuelve una subcadena que esta conformada por todos los
caracteres que comienzan en indice e incluye todos los caracteres siguientes hasta el fin
de la cadena.
cadena.substring(indiceInicial, indiceFinal) : Devuelve una subcadena que esta
conformada por todos los caracteres cuyo indice comienza en indiceInicial e incluye
todos los caracteres hasta el IndiceFinal-1.
String.valueOf() : Convierte tipos primitivos a cadenas. La clase String sobrecarga el
mtodo valueOf para soportar cada uno de los tipos primitivos de Java.
Ejemplo:
String cad1 = String.valueOf(12);
String cad2 = String.valueOf(true);
String cad3 = String.valueOf(T);
String cad4 = String.valueOf(12.9867);

Aqu presentaremos algunas aplicaciones sencillas.

PROGRAMAS RESUELTOS
1) Hacer un programa para calcular el area de un triangulo dada la base y
la altura
import java.io.*;
public class AreaTriangulo{
Docente: Ing. Martn Salcedo Quiones

Pagina: 13

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public static void main(String arg[]) throws IOException
{
float base,altura,area;
BufferedReader

in

new

BufferedReader(new

InputStreamReader(System.in));
System.out.print("Ingrese base del triangulo :");
base=Float.parseFloat(in.readLine());
System.out.print("Ingrese altura del triangulo :");
altura=Float.parseFloat(in.readLine());
area=base*altura/2;
System.out.println("El area del triangulo es : "+area);
}
}
Interpretacin de la programacin:
Al usar import.java.io.*; importamos el paquete io (input output) que permitir
luego para el ingreso y salida de datos. Tenemos la clase AreaTriangulo que
tienen al mtodo esttico llamado main que al colocar (String args[]) indica que
no hay argumento alguno para el mtodo y al colocar throws IOException son
nuestra indicacin al compilador de que estamos conscientes del hecho de que
puede ocurrir una excepcin (intercepcin de error) de entrada/salida cuando el
programa intente leer del teclado y que deliberadamente estamos haciendo
caso omiso de tales excepciones de entrada/salida en nuestro programa.
Luego se declara las variables base, altura y area de tipo float. Posteriormente
se declara la variable in del tipo BufferedReader y se crea el objeto in con el
operador new usando el mtodo constructor BufferedReader, la misma que
usa el InputStreamReader, clase o interfaz que permite la lectura de entrada a
travs del teclado, es decir, la variable objeto in es la permitir luego lograr
ingresar datos. Luego con el mtodo print usado a partir de System.out permite
imprimir una expresin como por ejemplo Ingrese la base del tringulo:. En la
lnea de la programacin base= Float.parseFloat(in.readLine()); se busca el
ingreso de un dato que se lee con el mtodo readLine() a partir del objeto in
Docente: Ing. Martn Salcedo Quiones

Pagina: 14

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
previamente creado. Dado que el dato ingresado es de tipo String o cadena es
necesario la conversin a un dato del tipo de la variable que almacenar dicho
dato, por lo que es necesario usar un mtodo de conversin como es el caso
de parseFloat() que hace que el dato ingresado sea convertido al tipo de dato
Float y luego asignado a la variable base. Lo mismo se hace con respecto a la
variable altura. En la variable rea se hace el clculo del rea del tringulo
para

luego

imprimir

el

rea

del

tringulo

con

la

instruccin

System.out.println("El area del triangulo es : "+area); donde se observa el uso


del mtodo println() que permite imprimir una expresin y luego la impresin
continuar en la siguiente lnea. Observa dentro del parntesis el uso del
operador + que se usa como concatenacin (no como operador de suma), es
decir, imprime la expresin El rea del tringulo es con el contenido de la
variable area.
2) Calcular el perimetro, el area y la diagonal de un rectangulo si se
ingresan los lados.
import java.io.*;
public class Rectangulo{
public static void main(String arg[]) throws IOException
{
double lado1,lado2,perimetro,area,diagonal;
BufferedReader

in

new

BufferedReader(new

InputStreamReader(System.in));
System.out.print("Ingrese valor del primer lado :");
lado1=Double.parseDouble(in.readLine());
System.out.print("Ingrese valor del segundo lado :");
lado2=Double.parseDouble(in.readLine());
perimetro=2*(lado1+lado2);
area=lado1*lado2;
diagonal=Math.sqrt(Math.pow(lado1,2)+Math.pow(lado2,2));
Docente: Ing. Martn Salcedo Quiones

Pagina: 15

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.println("El perimetro es : "+perimetro);
System.out.println("El area es : "+area);
System.out.println("La diagonal es : "+diagonal);
}
}
Interpretacin de la programacin:
La novedad en la segunda aplicacin es el uso del mtodo pow() que permite
calcular la potencia dado la base y el exponente, as por ejemplo
Math.pow(lado1,2) calcula el cuadrado del contenido de la variable lado1. Con
el mtodo sqrt() se logra calcular la raz cuadrada del un nmero, as por
ejemplo Math.sqrt(4) calula la raz cuadrada de 4.

3) Calcular el salario neto de un trabajador. Se debe leer el nombre, horas


trabajadas, precio de la hora y sabiendo que los impuestos aplicados son
el 10 por ciento sobre el salario bruto.
import java.io.*;
public class Trabajador{
public static void main(String arg[]) throws IOException
{
String nombre;
double sb,sn,ph,ht;
BufferedReader

in

new

BufferedReader(new

InputStreamReader(System.in));
System.out.print("Ingrese nombre del trabajador :");
nombre=in.readLine();
System.out.print("Ingrese numero de horas trabajadas :");
ht=Double.parseDouble(in.readLine());
System.out.print("Ingrese precio de la hora :");
Docente: Ing. Martn Salcedo Quiones

Pagina: 16

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
ph=Double.parseDouble(in.readLine());
sb=ph*ht;
sn=sb-0.10*sb;
System.out.println("El Salario neto del trabajador : "+nombre+ " es : "+sn);
}
}

4) Hacer un programa para convertir metros a pies y pulgadas


1 metro = 39.37 pulgadas

1 metro = 3.2 pies

public class Conversion{


public static void main(String arg[]) throws IOException
{
double metros,pies,pulgadas;
BufferedReader

in

new

BufferedReader(new

InputStreamReader(System.in));
System.out.print("Ingrese valor en Metros :");
metros=Double.parseDouble(in.readLine());
pies=metros*3.2;
pulgadas=metros*39.37;
System.out.println("El valor en pies es : "+pies);
System.out.println("El valor en pulgadas es : "+pulgadas);
}
}
5) Ingresar una letra entre a y e y reportar el mensaje de acuerdo a:
a excelente
b
bueno
c regular
d
malo
e pesimo
import java.io.*;
Docente: Ing. Martn Salcedo Quiones

Pagina: 17

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

public class p403{


public static void main(String arg[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String cadena;
char letra;
System.out.print("Ingrese letra (a-e) : ");
cadena=br.readLine();
letra=cadena.charAt(0);
switch(letra)
{
case 'a': case 'A':
System.out.println("EXCELENTE");
break;
case 'b': case 'B':
System.out.println("BUENO");
break;
case 'c': case 'C':
System.out.println("REGULAR");
break;
case 'd': case 'D':
System.out.println("MALO");
break;
case 'e': case 'E':
System.out.println("PESIMO");
break;
default :
System.out.println("letra equivocada");
}
}
}

EJECUTANDO LA PRIMERA APLICACION


1. Crea un proyecto denominado: Sesion01_Aplicaciones
Docente: Ing. Martn Salcedo Quiones

Pagina: 18

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Observa que debes crear la clase principal AreaTriangulo dentro del


paquete sesion01_aplicaciones. Luego dar clic en el botn de comando
Terminar.
2. Ahora se observa el entorno de NetBeans listo para colocar la programacin
de la primera aplicacin.

3. Asi debe quedar luego de colocar las instrucciones de la primera aplicacin.

Docente: Ing. Martn Salcedo Quiones

Pagina: 19

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

4. Luego proceder a ejecutar la aplicacin.

Posteriormente dar clic en Ejecutar archivo

Docente: Ing. Martn Salcedo Quiones

Pagina: 20

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Ingresar el valor de la base y luego de la altura y se lograr observar lo


siguiente:

Docente: Ing. Martn Salcedo Quiones

Pagina: 21

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

CREACION DE METODOS

Los mtodos en java permiten modularizar sus programas. Todas las variables
declaradas en las definiciones de mtodos son variables locales es decir solo
se conocen en el mtodo que se definen. Casi todos los mtodos tienen una
lista de parmetros que permiten comunicar informacin entre mtodos. Los
parmetros de un mtodo tambin son variables locales.
La sintaxis para declarar un mtodo es la siguiente:
tipo_de_valor_devuelto nombre_del_mtodo ( lista_de_parmetros)
{
Declaraciones e instrucciones
}
Donde:
tipo_de_valor_devuelto: Indica el tipo de valor que se devuelve al mtodo
invocador. Si un mtodo no devuelve un valor, el tipo_de_valor_devuelto se
declara como void.
nombre_del_mtodo: Es cualquier identificador vlido
lista_de_parmetros: Es una lista separada por comas que contiene las
declaraciones de las variables que se pasarn al mtodo. Si un mtodo no
recibe parmetros las lista_de_parmetros se deja vaca.
Docente: Ing. Martn Salcedo Quiones

Pagina: 22

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
El cuerpo del mtodo es el conjunto de declaraciones e instrucciones que
constituyen el mtodo.
Cuando un programa encuentra una llamada a un mtodo, se transfiere el
control desde el punto de invocacin al mtodo invocado, se ejecuta el mtodo
y el control regresa al invocador.
Un mtodo invocado puede devolver el control al invocador de tres maneras.
Si el mtodo no devuelve valor, el control se devuelve al llegar a la llave
derecha que termina el mtodo o ejecutando la sentencia
return;
Si el mtodo devuelve un valor, la sentencia
return expresin
Devuelve el valor de Expresin.
Por ejemplo si se desea calcular la suma de dos nmeros enteros. Se podra
definir el siguiente mtodo:
int suma(int x, int y)
{
return x+y;
}
el tipo_de_valor_devuelto es int, tiene dos parmetros enteros x e y.
Supongamos que deseamos un mtodo para mostrar el mensaje Java es fcil
de aprender. Se podra definir el mtodo de la siguiente manera
void mensaje()
{
System.out.println(Java es fcil de Aprender);
}
En

este

caso

el

mtodo

no

devuelve

un

valor,

por

eso

el

tipo_de_valor_devuelto es void. Lo que hace solamente el mtodo es mostrar


un mensaje.
Docente: Ing. Martn Salcedo Quiones

Pagina: 23

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
PROGRAMAS RESUELTOS
1) Hacer un programa para calcular el factorial de un nmero.
import java.io.*;
public class Metodos01
{
public static int factorial(int n)
{
int f=1,i;
for(i=1;i<=n;i++)
f=f*i;
return f;
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n;
do{
System.out.print("Ingrese numero :");
n=Integer.parseInt(br.readLine());
}while(n<0);
System.out.println("el Factorial es : "+factorial(n));
}
}

Interpretacin de la programacin:
Se tiene el mtodo factorial que tiene un solo parmetro de tipo entero llamado
n y que devuelve o retorna un valor de tipo entero. Es un mtodo esttico por lo
que no ser necesario crear o instanciar un objeto (recuerda que para
instanciar un objeto se usa el operador new). En el mtodo main se inicia con
crear el objeto br del tipo BufferedReader (para lectura de datos), luego se
declara una variable n de tipo n (recuerda que esta variable no es el mismo del
paramtro del mtodo factorial ya que se declara en otro mtodo). A travs de
Docente: Ing. Martn Salcedo Quiones

Pagina: 24

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
la sentencia repetitiva do se busca validar el ingreso del valor para la variable n
que debe ser un valor positivo, si es negativo volver a solicitar el ingreso de
otro valor para la variable n. Finalmente la instruccin System.out.println("el
Factorial es : "+factorial(n)); imprimir el factorial de n haciendo uso del mtodo
factorial.
2) Calcular el MCD de dos nmeros enteros.
import java.io.*;
class Metodos02{
public static int mcd(int a, int b)
{
int d=2,p=1;
while(d<=a && d<=b)
if(a%d==0 && b%d==0)
{
p=p*d;
a=a/d;
b=b/d;
}
else
d++;
return p;
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int x,y,m;
do{
System.out.print("Ingrese primer numero :");
x=Integer.parseInt(br.readLine());
}while(x<0);
do{
System.out.print("Ingrese el segundo numero : ");
y=Integer.parseInt(br.readLine());
}while(y<0);
m=mcd(x,y);
Docente: Ing. Martn Salcedo Quiones

Pagina: 25

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.println("El m.c.d de "+x+" y "+y+" es : "+m);
}
}
3) Programa para reportar todos los divisores de un nmero entero N
import java.io.*;
class Metodos03{
public static void reporteDivisores(int n)
{
int d;
System.out.println("Los divisores del numero son :");
for(d=1;d<=n;d++)
if(n%d==0) System.out.print(d+" ");
System.out.println();
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num;
do{
System.out.print("Ingrese numero :");
num=Integer.parseInt(br.readLine());
}while(num<=0);
reporteDivisores(num);
}
}
4) Programa para ingresar un numero y se reporte si es primo
import java.io.*;
class Metodos05{
public static boolean esPrimo(int n)
{
int d=1;
do{
d=d+1;
Docente: Ing. Martn Salcedo Quiones

Pagina: 26

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
}while( n%d!=0 && d*d<=n);
if(d*d>n) return true;
else return false;
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num;
do{
System.out.print("Ingrese numero :");
num=Integer.parseInt(br.readLine());
}while(num<=0);
if(esPrimo(num))
System.out.println("El numero es primo");
else
System.out.println("El numero no es primo");
}
}
Cuando una clase tiene mtodos estticos se puede invocar a esos mtodos de la
siguiente manera: NombreClase.nombreMetodo, como se hace con los mtodos de
la clase Math, para la raiz cuadrada se coloca Math.sqrt(x), para la potencia
Math.pow(x,n).
Por ejemplo crearemos una clase llamada Aritmtica que contenga mtodos estaticos
esPrimo (que verifica si un numero es primo), factorial, mcd(Calcula el m.c.d. de dos
nmeros) , reporteDivisores y reporteFactoresPrimos.
Estos mtodos como son estticos pueden ser llamados como:
Aritmtica.nombre_metodo(parmetros)
Como se ve en el programa que sigue a la clase Aritmetica
class Aritmetica{
public static boolean esPrimo(int n)
{
int d=1;
do{
d=d+1;
}while(n%d!=0 && d*d<=n);
if(d*d>n) return true;
Docente: Ing. Martn Salcedo Quiones

Pagina: 27

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
else return false;
}
public static int factorial(int n)
{
int f=1,i;
for(i=1;i<=n;i++)
f=f*i;
return f;
}
public static int mcd(int a, int b)
{
int d=2,p=1;
while(d<=a && d<=b)
if(a%d==0 && b%d==0)
{
p=p*d;
a=a/d;
b=b/d;
}
else
d++;
return p;
}
public static void reporteDivisores(int n)
{
int d;
System.out.println("Los divisores del numero son :");
for(d=1;d<=n;d++)
if(n%d==0) System.out.print(d+" ");
System.out.println();
}
public static void reporteFactoresPrimos(int n)
{
int d=2;
while(n>1)
{
while(n % d !=0) d=d+1;
Docente: Ing. Martn Salcedo Quiones

Pagina: 28

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.print(d+" ");
n=n/d;
}
System.out.println();
}
}
Programa que usa la clase Aritmtica
class PruebaAritmetica{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n;
do{
System.out.print("Ingrese numero :");
n=Integer.parseInt(br.readLine());
}while(n<0);
System.out.println("el Factorial es : "+Aritmetica.factorial(n));
if(Aritmetica.esPrimo(n))
System.out.println("El numero es primo");
else
System.out.println("El numero no es primo");
}
}
Duracin y alcance de un identificador
La duracin de un identificador determina cuando dicho identificador existe en
la memoria.
El alcance de un identificador es la porcin del programa en la que se puede
hacer referencia a dicho identificador.
Los identificadores que representan variables locales de un mtodo (esto es,
los parmetros y la variables declaradas en el cuerpo del mtodo) tienen
duracin automtica. Las variables de duracin automtica se crean cuando
se ingresa en el bloque en el que se declaran, existen mientras dicho bloque
est activo y se destruyen cuando se sale del bloque.
Docente: Ing. Martn Salcedo Quiones

Pagina: 29

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Java tambin tiene mtodos de duracin esttica. Las variables y mtodos de
duracin esttica existen desde el momento en el que la clase en la que se
definen se carga en la memoria para ejecutarse, hasta que el programa
termina. El espacio de almacenamiento para las variables de duracin esttica
se asigna e inicializa una vez cuando su clase se carga en la memoria. En el
caso de los mtodos de duracin esttica comienza a existir cuando su clase
se carga en la memoria.
Los alcances para un identificador son alcance de clase y alcance de bloque.
Una variable de ejemplar declarada fuera de cualquier mtodo tiene alcance de
clase. El identificador correspondiente se conoce en todos los mtodos de la
clase.
Los identificadores declarados de un bloque tienen alcance de bloque. El
alcance de bloque termina en la llave derecha que cierra el bloque.
Los variables locales declaradas al principio de un mtodo tienen alcance de
bloque, lo mismo que los parmetros del mtodo, que se consideran variables
locales en ese mtodo.
Cualquier bloque puede contener declaracin de variables.
EJECUTANDO LA PRIMERA APLICACION
1. Crea un proyecto denominado: Sesion02_Aplicaciones

Docente: Ing. Martn Salcedo Quiones

Pagina: 30

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Observa que debes crear la clase principal Metodos01 dentro del paquete
sesion02_aplicaciones. Luego dar clic en el botn de comando Terminar.
2. Ahora se observa el entorno de NetBeans listo para colocar la programacin
de la primera aplicacin.

3. Asi debe quedar luego de colocar las instrucciones de la primera aplicacin

Docente: Ing. Martn Salcedo Quiones

Pagina: 31

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

4. Luego a proceder a ejecutar la aplicacin.

Posteriormente dar clic en Ejecutar archivo.

Docente: Ing. Martn Salcedo Quiones

Pagina: 32

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Ingresar el valor de un nmero y luego se mostrar lo siguiente:

Docente: Ing. Martn Salcedo Quiones

Pagina: 33

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

RECURSIVIDAD Y SOBRECARGA DE METODOS

RECURSIVIDAD
Un mtodo es recursivo cuando se llama a si mismo ya sea directamente e
indirectamente.
Si un mtodo recursivo se invoca con un caso base, simplemente devuelve un
resultado. Si el mtodo se invoca con un problema ms complejo, divide el
problema en dos o ms partes conceptuales: una parte del mtodo sabe cmo
resolver y una versin un poco ms pequea del problema original. Dado que
este nuevo problema se asemeja al problema original, el mtodo emite una
llamada recursiva para trabajar con el problema reducido.
Para que la recursividad termine, cada vez que el mtodo recursivo se llama a
si mismo con una versin un poco ms sencilla del problema original, la
secuencia de problemas cada vez menores debe convergir hacia el caso base.
Cuando el mtodo reconoce el caso base, devuelve el resultado a la llamada
de mtodo previa, y se inicia una secuencia de devoluciones que termina
cuando la llamada del mtodo original devuelve el resultado final.

Docente: Ing. Martn Salcedo Quiones

Pagina: 34

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Recursividad vs Iteracin
Tanto la iteracin como la recursin se basan en una estructura de control.: La
iteracin usa una estructura de repeticin; la recursin una estructura de
seleccin.
Tanto la iteracin como la recursin implican repeticin: la iteracin emplea
explcitamente una estructura de repeticin; la recursin logra la repeticin
mediante llamadas de mtodos repetidas
Tanto la iteracin como la recursin incluyen una prueba de terminacin; la
iteracin termina cuando deja de cumplirse la condicin para continuar el ciclo;
la recursin termina cuando se reconoce el caso base.
PROGRAMAS RESUELTOS
1) Hacer un programa para calcular el factorial de un nmero.
import java.io.*;
public class Recursividad01{
public static int factorial(int n)
{
if(n==0) return 1;
else return n*factorial(n-1);
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num;
do{
System.out.print("Ingrese numero :");
num=Integer.parseInt(br.readLine());
}while(num<=0);
System.out.println("El factorial es : "+factorial(num));
Docente: Ing. Martn Salcedo Quiones

Pagina: 35

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
}
}
Interpretacin de la programacin:
El mtodo recursivo llamado factorial tiene un permetro de tipo entero llamado
n. Se evala su valor si es igual cero usando la sentencia IF, si es falso se
retorna el valor de n multiplicado con lo que retornar el mtodo factorial al
darle el valor de n disminuido en 1. Si observamos la figura que se coloca al
inicio de esta sesin:

En la figura se observa el mtodo Fact (que en nuestro programa se llama


factorial) calcula el factorial de 3. En la primera llamada retorna 3 * Fact(3-1), el
Fact(3-1) en la segunda llamada del mtodo retorna 2 * Fact(2-1) y as
sucesivamente hasta que en la ltima llamada al aplicar Fact(1-1) devolver el
valor de 1.
En el mtodo main se crea el objeto br de tipo BufferedReader (para lectura de
datos), luego se declara la variable num de tipo entero. A travs de la sentencia
repetitiva se pide el ingreso del nmero para la variable num y si es un valor
negativo se volver a solicitar nuevamente el ingreso de dicho nmero.
Finalmente a travs del mtodo println se muestra el clculo del mtodo
recursivo factorial teniendo como valor de entrada el contenido de la variable
num.
2) Calcular la potencia de x elevado a la n en forma recursiva. x real y n entero
positivo
Docente: Ing. Martn Salcedo Quiones

Pagina: 36

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

import java.io.*;
class recursividad02{
public static double potencia(double x, double n)
{
if(n==0) return 1;
else return x*potencia(x,n-1);
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n;
double x;
System.out.print("Valor de x :");
x= Double.parseDouble(br.readLine());
do{
System.out.print("valor de n : ");
n=Integer.parseInt(br.readLine());
}while(n<=0);
System.out.println(x+" elevado a la "+n+" es igual a "+potencia(x,n));
}
}

3) Hacer un programa para que reporte los n trminos de la serie de Fibonacci


import java.io.*;
class recursividad03{
public static int fibonacci(int n)
{
if(n==1) return 1;
else
if(n==2)
return 1;
Docente: Ing. Martn Salcedo Quiones

Pagina: 37

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
else
return fibonacci(n-1) + fibonacci(n-2);
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n,i ;
do{
System.out.print("Nmero de terminos de la serie : ");
n=Integer.parseInt(br.readLine());
}while(n<=0);
for(i=1;i<=n;i++)
System.out.print(fibonacci(i) + " ");
System.out.println();
}
}
4) Programa para calcular el mximo comn divisor de dos nmeros.
import java.io.*;
class recursividad04{
public static int mcd(int a,int b)
{
if(a%b==0) return b;
else return mcd(b,a%b);
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int x,y;
do{
System.out.print("Ingrese primer numero :");
x=Integer.parseInt(br.readLine());
}while(x<=0);
do{
Docente: Ing. Martn Salcedo Quiones

Pagina: 38

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.print("Ingrese segundo numero :");
y=Integer.parseInt(br.readLine());
}while(y<=0);
System.out.println("El mcd de "+x+" y "+y+" es : "+mcd(x,y));
}
}
5) Programa para reportar un numero al reves
import java.io.*;
class recursividad05{
public static void reves(int n)
{
System.out.print(n % 10);
if( n/10 !=0 ) reves(n/10);
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num;
do{
System.out.print("Ingrese numero :");
num=Integer.parseInt(br.readLine());
}while(num<=0);
System.out.print("Numero al reves :");
reves(num);
System.out.println();
}
}

6) Programa para convertir un nmero de base 10 a base b (entre 2 y 9)


import java.io.*;
class recursividad06{
Docente: Ing. Martn Salcedo Quiones

Pagina: 39

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public static void conversionBase(int n, int b)
{
if(n<b)
System.out.print(n);
else
{
conversionBase(n/b,b);
System.out.print(n%b);
}
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int num,b;
do{
System.out.print("Ingrese numero :");
num=Integer.parseInt(br.readLine());
}while(num<=0);
do{
System.out.print("Base a la que quiere convertir : ");
b=Integer.parseInt(br.readLine());
}while(b<2 || b>9);
System.out.print("El numero "+num+" en base "+b+" es : ");
conversionBase(num,b);
System.out.println();
}
}
SOBRECARGA DE METODOS
Java permite definir varios mtodos con el mismo nombre en tanto dichos
mtodos tengan diferentes juegos de parmetros (con base en el nmero y el
orden de los parmetros). Esto se denomina sobrecarga de mtodos. Cuando
se invoca un mtodo sobrecargado, el compilador de Java selecciona el
mtodo adecuado examinando el nmero, los tipos y el orden de los
argumentos en la llamada. La sobrecarga de mtodos suele utilizarse para

Docente: Ing. Martn Salcedo Quiones

Pagina: 40

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
crear varios mtodos con el mismo nombre que realizan tareas similares, pero
sobre datos de diferentes tipos.
import java.io.*;
class sobrecarga01{
public static int cuadrado(int x)
{
return x*x;
}
public static float cuadrado(float x)
{
return x*x;
}
public static double cuadrado(double x)
{
return x*x;
}
public static void main(String args[]) throws IOException
{
int a=3;
float b=3.4f;
double c=12.5;
System.out.println("El cuadrado de "+a+ " es : "+cuadrado(a));
System.out.println("El cuadrado de "+b+" es : "+cuadrado(b));
System.out.println("El cuadrado de "+c+" es : "+cuadrado(c));
}
}
EJECUTANDO LA PRIMERA APLICACION
1. Crea un proyecto denominado: Sesion03_Aplicaciones

Docente: Ing. Martn Salcedo Quiones

Pagina: 41

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Observa que debes crear la clase principal Recursividad01 dentro del


paquete sesion03_aplicaciones. Luego dar clic en el botn de comando
Terminar
2. Ahora se observa el entorno de NetBeans listo para colocar la programacin
de la primera aplicacin.

Docente: Ing. Martn Salcedo Quiones

Pagina: 42

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

3. As debe quedar luego de colocar las instrucciones de la primera aplicacin.

4. Luego proceder a ejecutar la aplicacin.


Docente: Ing. Martn Salcedo Quiones

Pagina: 43

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Posteriormente dar clic en Ejecutar archivo.

Ingresar el valor numrico y se visualizar el factorial.

Docente: Ing. Martn Salcedo Quiones

Pagina: 44

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

ARREGLOS UNIDIMENSIONALES EN METODOS

ARREGLOS
Un arreglo es un grupo contiguo de posiciones de memoria relacionadas entre
s. Estas posiciones estn relacionadas por el hecho de que todas tienen el
mismo nombre y el mismo tipo. Para referirnos a una posicin o elemento en
particular dentro del arreglo, especificamos el nombre del arreglo y el subndice
del elemento.
Un subndice puede ser un entero o una expresin entera. Si un programa
emplea una expresin como subndice, la expresin se evala para determinar
el elemento especfico del arreglo.
Los arreglos de Java siempre comienzan con el elemento 0.
Declaracin de un arreglo
En java existen 2 formas de declarar arreglos.
Tipo de dato identificador[];

Tipo de dato []identificador;


Por ejemplo si se desea declarar un arreglo de enteros, se podra hacer de
esta manera:
int numeros[];

int []numeros;

Docente: Ing. Martn Salcedo Quiones

Pagina: 45

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Creacin de un Arreglo
Despus de declarar un arreglo, se tiene que crearlo. Para crearlo se coloca la
palabra clave new seguida del tipo de dato y del tamao del arreglo entre
corchetes..
Ejm:
numeros = new int[100]; // se esta creando un arreglo de 100 elementos
enteros
Tambin se puede declarar y crear un arreglo en una sola instruccin. Por
ejemplo:
double promedios[] = new double[50];
Se est declarando y creando 50 elementos de tipo double
Inicializacin de un arreglo
En Java se pueden inicializar arreglos al declararlos. Cuando se especifica
valores iniciales dentro de la declaracin de un arreglo, Java realiza la
operacin new y define el tamao del arreglo de forma automtica.
Ejemplo:
int arreglo1 [] = { 1, 2, 3, 4, 5};
boolean arreglo[] = { true, false, true};
String meses[] = { Enero, Febrero, Marzo, Abril, Mayo, Junio};
Acceso a los arreglos
Cada valor dentro de un arreglo se conoce como elemento del arreglo. Para
acceder a un elemento de un arreglo especifique el nombre del arreglo con el
ndice del elemento entre corchetes [].
Docente: Ing. Martn Salcedo Quiones

Pagina: 46

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Ejemplo:
int numeros = { 12, 20, 60, 80, 100 };
for(int indice = 0; indice < 5 ; indice++)
System.out.println(numeros[indice]);
En este ejemplo el tamao del arreglo es 5. En java el ndice del primer
elemento del arreglo es cero y la ltima posicin es el tamao del arreglo.
Debido a esto, para iterar todos los elementos del arreglo, el programa utiliza
loa valores 0 a 4 para la variable del ciclo.
Como obtener la longitud de un arreglo
En java un arreglo es un objeto. La nica variable miembro de un objeto arreglo
es la variable length (longitud), que contiene el tamao del arreglo.
La variable length es de solo lectura, ya que el tamao del arreglo no puede
cambiar despus de crearlo aquel.
Ejemplo : El siguiente cdigo muestra cmo utilizar la variable length dentro de
un ciclo for que itera por todos los elementos del arreglo.
int arreglo[] = {12, 20, 60, 80, 90};
for(indice = 0; indice<arreglo.length; indice++)
System.out.println(arreglo[indice]);
Referencias a arreglos
Java utiliza referencias para apuntar a los arreglos.
Por ejemplo:
Las siguientes instrucciones utilizan la referencia arreglo para acceder a dos
arreglos distintos.
import java.io.*;
class ReferenciaArreglo{
Docente: Ing. Martn Salcedo Quiones

Pagina: 47

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

public static void main(String args[])


{
int primero[] = {1, 2, 3, 4};
int segundo[] = {5, 6, 7, 8, 9, 10};
int arreglo[];
arreglo=primero;
System.out.println("Primer Arreglo ");
for(int indice=0;indice<arreglo.length;indice++)
System.out.println(arreglo[indice]);
arreglo=segundo;
System.out.println("Segundo Arreglo ");
for(int indice=0;indice<arreglo.length;indice++)
System.out.println(arreglo[indice]);
}
}

PROGRAMAS RESUELTOS
1) Hacer un programa para ingresar n valores reales en un arreglo y los muestre
en la pantalla, adems reportar el mayor, el menor y el promedio.
import java.io.*;
public class Arreglo01{
public static void main(String arg[])throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
double x[],mayor,menor,promedio,suma=0;
int n,i;
do{
System.out.print("Cantidad de elementos del arreglo : ");
n=Integer.parseInt(br.readLine());
}while(n<=0 || n>100);
Docente: Ing. Martn Salcedo Quiones

Pagina: 48

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

x=new double[n];
for(i=0; i<n;i++)
{
System.out.print("x["+i+"]: ");
x[i]=Double.parseDouble(br.readLine());
}
System.out.println("Elementos del arreglo");
for(i=0; i<n;i++)
System.out.println("x["+i+"]: "+x[i]);
// Calculo del mayor y menor
mayor=menor=x[0];
for(i=1; i<n; i++)
if (x[i]>mayor) mayor=x[i];
else
if(x[i]<menor) menor=x[i];
// Calculo de la suma de los elementos
for(i=0; i<n; i++)
suma=suma+x[i];
promedio=suma/n;
System.out.println("El mayor es " +mayor);
System.out.println("El menor es:"+ menor);
System.out.println("El promedio es : "+ promedio);
}
}
Interpretacin de la programacin:
En el mtodo main se inicia creando el objeto br del tipo BuffreredReader,
luego se declara variables de memoria de tipo double. Se aprecia la variable
x[] que es una arreglo o vector que todava no se define el tamao o el nmero
de elementos. Luego se declara dos variables enteras n, i. A travs de la
sentencia repetitiva se valida el valor de n dentro de un rango de 1 a 100, es
Docente: Ing. Martn Salcedo Quiones

Pagina: 49

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
decir, no se acepta un valor menor o igual a 0 ni un nmero mayor de 100.
Posteriormente se crea el arreglo x con la instruccin x=new double[n]; ya que
se define el tamao del arrglo x con el valor de la variable n. A continuacin se
usa la sentencia for que permite leer los datos para cada elemento del arreglo,
la misma va desde un valor de 0 hasta i<n, es decir, si n es igual a 10 entonces
la variable i ir desde 0 hasta 9. En cada interaccin solicitar el ingreso de un
nmero, la misma que se almacenar en el elemento correspondiente del
arreglo. Cabe sealar que el objeto br con su mtodo readLine() lee el dato
como cadena (String) entonces existe la necesidad de hacer la conversin,
para ello se usa el mtodo parseDouble de la clase Double que permite
convertir el dato ingresado en valor numrico double. Luego se imprime los
valores ingresados usando nuevamente la sentencia for. Para el clculo del
mayor y menor nmero ingresados en el arreglo

vector se inicializa las

variables con la instruccin mayor=menor=x[0]; donde la variable mayor y la


variable menor recibe el valor del primer elemento del arreglo x. A continuacin
con la sentencia for se recorre por cada elemento del arreglo x desde el
segundo elemento hasta el ltimo elemento del arreglo. En cada interaccin se
usa la sentencia IF para evaluar si el elemento es mayor a la variable mayor, si
es verdadero se cambia el valor contenido en la variable mayor por el valor del
elemento en evaluacin, si es falso se cambia el valor del contenido en la
variable menor. Posteriormente a travs de otra sentencia for se procede a
realizar la suma de todos los nmeros contenidos en el arreglo y se va
acumulando en la variable suma, que previamente se inicializ con el valor de
cero. A continuacin, se calcula el promedio y se muestra los resultados
obtenidos.

2) Programa para ingresar n valores reales en un arreglo y calcular la desviacin


standard.
import java.io.*;
public class arre02{
Docente: Ing. Martn Salcedo Quiones

Pagina: 50

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public static void main(String arg[])throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
double x[],suma=0,p,ds;
int n,i;
do{
System.out.print("Cantidad de elementos del arreglo : ");
n=Integer.parseInt(br.readLine());
}while(n<=0);
x=new double[n];
for(i=0; i<n;i++)
{
System.out.print("x["+i+"]: ");
x[i]=Double.parseDouble(br.readLine());
}
System.out.println("Elementos del arreglo");
for(i=0; i<n;i++)
System.out.println("x["+i+"]: "+x[i]);
for(i=0; i<n; i++)
suma=suma+x[i];
p=suma/n;
suma=0;
for(i=0;i<n;i++)
suma=suma + Math.pow(x[i]-p,2);
ds=Math.sqrt(suma/(n-1));
System.out.println("La desviacion standard es : "+ds);
}
}
3) Programa para ingresar n valores reales en un arreglo y luego invierta el
arreglo.
Docente: Ing. Martn Salcedo Quiones

Pagina: 51

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
import java.io.*;
public class arre03{
public static void main(String arg[])throws IOException
{
double x[],temp;
int n,i,j;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
do{
System.out.print("Cantidad de elementos del arreglo : ");
n=Integer.parseInt(br.readLine());
}while(n<=0 || n>100);
x=new double[n];
for(i=0; i<n;i++)
{
System.out.print("x["+i+"]: ");
x[i]=Double.parseDouble(br.readLine());
}
System.out.println("Arreglo Ingresado");
for(i=0; i<n;i++)
System.out.println("x["+i+"]: "+x[i]);
for(i=0,j=n-1;i<n/2;i++,j--)
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
System.out.println("Arreglo Invertido");
for(i=0; i<n;i++)
System.out.println("x["+i+"]: "+x[i]);
}
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 52

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

4) Programa para ingresar 2 vectores de n elementos reales cada uno y reportar el


producto escalar de ellos
import java.io.*;
public class arre04{
public static void main(String arg[])throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
double x[],y[],pe;
int n,i;
do{
System.out.print("Numero de elementos de los vectores : ");
n=Integer.parseInt(br.readLine());
}while(n<=0);
x=new double[n];
y=new double[n];
System.out.println("Ingreso de datos del primer vector");
for(i=0; i<n;i++)
{
System.out.print("x["+i+"]: ");
x[i]=Double.parseDouble(br.readLine());
}
System.out.println("Ingreso de datos del segundo vector");
for(i=0; i<n;i++)
{
System.out.print("y["+i+"]: ");
y[i]=Double.parseDouble(br.readLine());
}
System.out.println("Elementos del primer vector");
for(i=0; i<n;i++)
System.out.println("x["+i+"]: "+x[i]);
Docente: Ing. Martn Salcedo Quiones

Pagina: 53

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.println("Elementos del Segundo vector");
for(i=0; i<n;i++)
System.out.println("y["+i+"]: "+y[i]);
pe=0;
for(i=0;i<n;i++)
pe=pe+x[i]*y[i];
System.out.println("El Producto escalar es : " +pe);
}
}
5) Programa para ingresar n nombres en un arreglo y luego Ingresar un Nombre y
buscar si este se encuentra en el arreglo ingresado.
import java.io.*;
public class arre05{
public static void main(String arg[])throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String nombres[],nombus;
int n,i,pos;
do{
System.out.print("Cantidad de nombres a ingresar : ");
n=Integer.parseInt(br.readLine());
}while(n<=0);
nombres=new String[n];
for(i=0; i<n;i++)
{
System.out.print("Nombre["+i+"]: ");
nombres[i]=br.readLine();
}
System.out.println("Elementos del arreglo");
for(i=0; i<n;i++)
System.out.println("Nombre["+i+"]: "+nombres[i]);
Docente: Ing. Martn Salcedo Quiones

Pagina: 54

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.print("nombres a buscar : ");
nombus=br.readLine();
pos=-1;
for(i=0;i<n ; i++)
if(nombres[i].compareToIgnoreCase(nombus)==0)
{
pos=i;
break;
}
if(pos!=-1)
System.out.println("Nombre se encuentra en la posicin"+pos);
else
System.out.println("Nombre no se encuentra en el arreglo");
}
}
EJECUTANDO LA PRIMERA APLICACION

1. Crea un proyecto denominado: Sesion04_Aplicaciones

Observa que debes crear la clase principal Arreglo01 dentro del paquete
sesion04_aplicaciones. Luego dar clic en el botn de comando Terminar.

Docente: Ing. Martn Salcedo Quiones

Pagina: 55

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

2. Ahora se observa el entorno de NetBeans listo para colocar la programacin


de la primera aplicacin.

3. Posteriormente colocar la programacin de la primera aplicacin.

4. Luego proceder a ejecutar la aplicacin.

Docente: Ing. Martn Salcedo Quiones

Pagina: 56

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Posteriormente dar clic en Ejecutar archivo

Ingresar el valor de la base y luego de la altura y se lograr observar lo


siguiente:

Docente: Ing. Martn Salcedo Quiones

Pagina: 57

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

AUTOEVALUACION
a) Responde a las siguientes preguntas:
1. Clase que pertenece al paquete java.io y permite hacer lectura de datos desde el
teclado: ___________________
2. Mtodo que permite calcular la potencia dado la base y el exponente: ______________
3. Mtodo que devuelve el nmero de caracteres o la longitud de caracteres de una
cadena de texto: ___________________
4. Mtodo que permite evaluar si una cadena 1 es igual a una cadena 2 sin importar las
maysculas o minsculas: _________________
5. Los mtodos que no retornan valor usan la instruccin return (verdadero o falso):
_____________
b) Desarrolla las siguientes aplicaciones:

1. Construye una aplicacin que permita el ingreso de una cantidad de segundos y


muestre su equivalencia en das, horas, minutos y segundos. Posteriormente
construye una aplicacin que permita ingresar una cantidad de soles y muestre su
equivalencia en billetes de 200 soles, de 100 soles, 50 soles, 20 soles, 10 soles y en
monedas de 5 soles, 2 soles y de 1 sol.
2. Construye una aplicacin que permita el ingreso de una cantidad de segundos y
muestre su equivalencia en das, horas, minutos y segundos. Esta vez lo haces
creando un mtodo.
3. Construye una aplicacin que permita sumar los digitos de un numero entero
usando recursividad de mtodos.
4. Construye una aplicacin que permita el ingreso de 5 numeros en unvector A y 5
numeros en un vector B. Luego coloque todos los nmeros tanto del vector A y del
vector B en un vector C. Finalmente muestre la suma y el promedio de todos los
nmero.

Docente: Ing. Martn Salcedo Quiones

Pagina: 58

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

CAPITULO II
PROGRAMACION ORIENTADA A OBJETOS

Docente: Ing. Martn Salcedo Quiones

Pagina: 59

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

CLASES Y SUS MIEMBROS

CLASE
Una clase es una plantilla o prototipo que define las variables y los mtodos
comunes a todos los objetos de cierto tipo. Las clases definen estado
(variables) y comportamiento (mtodos) de todos los objetos.
Las clases son el mecanismo por el que se pueden crear nuevos Tipos en
Java. Las clases son el punto central sobre el que giran la mayora de los
conceptos de la Orientacin a Objetos.
Una clase es una agrupacin de datos y de cdigo (mtodos) que acta sobre
esos datos, a la que se le da un nombre.
Una clase contiene:
Datos (se denominan Datos Miembro). Estos pueden ser de tipos primitivos o
referencias.
Mtodos (se denominan Mtodos Miembro).
La sintaxis general para la declaracin de una clase es:
modificadores class nombre_clase {
declaraciones_de_miembros ;
Docente: Ing. Martn Salcedo Quiones

Pagina: 60

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
}
Los modificadores son palabras clave que afectan al comportamiento de la
clase.
Por ejemplo crearemos la clase Rectangulo cuyos atributos son base y altura,
ademas queremos calcular el area, permetro y diagonal del Rectangulo
import java.io.*;
class Rectangulo{
private double base;
private double altura;
public Rectangulo(double b, double h) // Constructor
{
base = b;
altura=h;
}
public void setBase(double b)
{
base=b;
}
public void setAltura(double h)
{
altura=h;
}
public double getBase()
{
return base;
}
public double getAltura()
{
return altura;
}
public double area()
{
return base*altura;
}
public double perimetro()
{
Docente: Ing. Martn Salcedo Quiones

Pagina: 61

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
return 2*base+2*altura;
}
public double diagonal()
{
return Math.sqrt(Math.pow(base,2)+Math.pow(altura,2));
}
public String toString()
{
return "base = "+base+" "+altura;
}
}
La clase Rectngulo tiene 2 atributos base y altura los cuales son privados esto
quiere decir que estas 2 variables son visibles en la clase Rectngulo.
El primer mtodo que se ha implementado es el constructor, este mtodo se
llama igual que la clase y no devuelve ningn valor y permite inicializar los
atributos de la clase. Este mtodo se llama en el momento de crear un objeto.
Como los atributos base y altura son privados, para que los usuarios que usan
los

objetos

puedan

modificar

los

atributos

se

crean

los

mtodos

setBase(double b) y setAltura(double h). Y si deseamos obtener los valores de


los atributos creamos los mtodos getBase() y getAltura().
Adems se han creado los mtodos area(), permetro() y diagonal() que
permiten calcular el area, permetro y diagonal del rectangulo.
En el mtodo toString() (a cadena) se crea una cadena con la informacin de
los atributos de la clase. En realidad podemos colocar cualquier informacin.
public class pruebaRectangulo{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
double b, h;
Rectangulo R;
System.out.print("Ingrese base : ");
b=Double.parseDouble(br.readLine());
Docente: Ing. Martn Salcedo Quiones

Pagina: 62

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.print("Ingrese altura : ");
h=Double.parseDouble(br.readLine());
R = new Rectangulo(b,h);
System.out.println("Rectangulo : "+R);
System.out.println("Area : "+R.area());
System.out.println(Perimetro : +R.perimetro());
System.out.println("Diagonal : "+R.diagonal());
}
}
Dentro del mtodo main de la clase PruebaRectangulo se ha declarado dos
variables de tipo primitivo b,h y una variable R que es de tipo Rectangulo.
Al colocar :
Rectangulo R;
Se est declarando a R como un Objeto de la Clase Rectangulo.
La declaracin no crea nuevos objetos. En la declaracin (Rectangulo R) se
declara una variable llamada R la cual ser usada para referirnos a un Objeto
Rectangulo. La referencia est vaca. Una referencia vaca es conocida como
referencia nula.
Al colocar :
R = new Rectangulo(3,4);
Con el operador new creamos un objeto de la clase Rectangulo.El operador
new instancia una clase asignando memoria para el nuevo Objeto.
El operador new

requiere una llamada a un constructor

de la clase a

instanciar. El constructor inicializa el nuevo objeto.El operador new retorna una


referencia al objeto creado.
Una vez creado el objeto para poder llamar a sus mtodos usamos lo siguiente
objeto.nombredeMtodo. Por ejemplo para calcular el area usamos R.area(),
para calcular el permetro R.perimetro() y para calcular la diagonal R.diagonal().
Al escribir System.out.println(Rectangulo : +R); en realidad se esta llamando
tcitamente al mtodo toString de la clase R.
Si se deseara modificar el atributo base del Objeto se debe usar el mtodo
setBase por ejemplo si despus de crear el objeto queremos que base tenga el
Docente: Ing. Martn Salcedo Quiones

Pagina: 63

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
valor 10, se colocara la siguiente instruccin: R.setBase(10); lo mismo se hace
si se quiere modificar la altura.
Si se desea saber el valor de algn atributo del objeto se usa los mtodos get,
por ejemplo si quisiera imprimir el valor de la base del objeto R se tendra que
escribir lo siguiente :
System.out.println(La base es : +R.getBase());

PROGRAMAS RESUELTOS
1) Crear la clase Cilindro con atributos radio y altura y que se pueda calcular el
area y el volumen del cilindro.
import java.io.*;
class Cilindro{
private double radio;
private double altura;
public Cilindro(double r, double a)
{
radio=r;
altura=a;
}
public void setRadio(double r)
{
radio=r;
}
public void setAltura(double a)
{
altura=a;
}
public double getRadio()
Docente: Ing. Martn Salcedo Quiones

Pagina: 64

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
{
return radio;
}
public double getAltura()
{
return altura;
}
public double area()
{
return 2*Math.PI*Math.pow(radio,2)+2*Math.PI*radio*altura;
}
public double volumen()
{
return Math.PI*Math.pow(radio,2)*altura;
}
public String toString()
{
return "Radio = "+radio+" Altura = "+altura;
}
}
public class PruebaCilindro
{
public static void main(String args[]) throws IOException
{
BufferedReader

br

new

BufferedReader(new

InputStreamReader(System.in));

double r, h;
Cilindro C;
System.out.print("Ingrese radio: ");
r=Double.parseDouble(br.readLine());
System.out.print("Ingrese altura : ");
h=Double.parseDouble(br.readLine());
Docente: Ing. Martn Salcedo Quiones

Pagina: 65

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
C = new Cilindro(r,h);
System.out.println("Cilindro : "+C);
System.out.println("Area : "+C.area());
System.out.println("Volumen : "+C.volumen());
}
}

Interpretacin de la programacin:
Se crea clase Cilindro con los atributos radio y altura de tipo double. Luego se
crea el mtodo constructor Cilindro (los mtodos constructores se ver en la
octava sesin) que permite establecer los valores de los dos atributos a travs
de los parmetros r y a. Luego se construye los mtodos setRadio() y
setAltura() que permite cambiar el valor del atributo radio y altura
respectivamente. Con los mtodos getRadio() y getAltura() se obtiene el
contenido del atributo radio y altura respectivamente. Con los mtodos area() y
volumen() se calcula el rea y el volumen del cilindro. El mtodo toString()
permite imprimir el radio y la altura del cilindro segn el contenido de los
atributos.
Con la clase PruebaCilindro, en el mtodo main se crea la variable objeto br
del tipo BufferedReader, se declara las variables de memoria r y h de tipo
double y se declara la variable C del tipo de la clase Cilindro. Se ingresa los
valores del radio y de la altura. Luego en la instruccin C = new Cilindro(r,h); se
crea el objeto C (que previamente haba sido declarado) con el mtodo
constructor Cilindro pasando los valores ingresados del radio y la altura a
travs de las variables de memoria r y h. A continuacin con la instruccin
System.out.println("Cilindro : "+C); se imprime la expresin Cilindro: con lo
programado en el mtodo toString(), es decir, es lo mismo colocar C que
colocar C.toString(). Finalmente se imprime el rea y el volumen del cilindro
usando los mtodos area() y volumen() invocados desde el objeto C.
2) Crear la clase numeros que tenga como atributos dos numeros y se calcule su
suma, resta, multiplicacin, divisin.
Docente: Ing. Martn Salcedo Quiones

Pagina: 66

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
import java.io.*;
class Numeros{
private double numero1;
private double numero2;
public Numeros(double n1,double n2)
{
numero1=n1;
numero2=n2;
}
public void setNumero1(double n1)
{
numero1=n1;
}
public void setNumero2(double n2)
{
numero2=n2;
}
public double getNumero1()
{
return numero1;
}
public double getNumero2()
{
return numero2;
}
public double suma()
{
return numero1+numero2;
}
public double resta()
{
return numero1-numero2;
Docente: Ing. Martn Salcedo Quiones

Pagina: 67

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
}
public double multiplicacion()
{
return numero1*numero2;
}
public double division()
{
return numero1/numero2;
}
public String toString()
{
return "numero1 = "+numero1+" numero2 = "+numero2;
}
}
public class PruebaNumeros
{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
double n1,n2;
Numeros A;
System.out.print("Ingrese primero Numero : ");
n1=Double.parseDouble(br.readLine());
System.out.print("Ingrese segundo Numero: ");
n2=Double.parseDouble(br.readLine());
A = new Numeros(n1,n2);
System.out.println("Numeros : "+A);
System.out.println("suma : "+A.suma());
System.out.println("resta : "+A.resta());
System.out.println("Multiplicacion : "+A.multiplicacion());
System.out.println("Division : "+A.division());
}
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 68

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
3) Crear la clase Alumno que tenga como atributos nombre, nota1 y nota2 y
permita calcular el promedio y su condicion (aprobado o desaprobado)
import java.io.*;
class Alumno{
private String nombre;
private double nota1;
private double nota2;
public Alumno(String nom, double n1, double n2)
{
nombre=nom;
nota1=n1;
nota2=n2;
}
public void setNombre(String nom)
{
nombre=nom;
}
public void setNota1(double n1)
{
nota1=n1;
}
public void setNota2(double n2)
{
nota2=n2;
}
public String getNombre()
{
return nombre;
}
public double getNota1()
{
Docente: Ing. Martn Salcedo Quiones

Pagina: 69

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
return nota1;
}
public double getNota2()
{
return nota2;
}
public double promedio()
{
return (nota1+nota2)/2;
}
public String condicion()
{
if(promedio()>=10.5)
return "aprobado";
else
return "desaprobado";
}
public String toString()
{
return "nombre : "+nombre +"nota1 = "+nota1+" nota2 = "+nota2;
}
}
public class PruebaAlumno{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String nom;
double n1,n2;
Alumno A;
System.out.print("Ingrese nombre : ");
nom= br.readLine();
System.out.print("Ingrese nota1 : ");
n1=Double.parseDouble(br.readLine());
System.out.print("Ingrese nota2 : ");
Docente: Ing. Martn Salcedo Quiones

Pagina: 70

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
n2=Double.parseDouble(br.readLine());
A = new Alumno(nom,n1,n2);
System.out.println("Alumno : "+A);
System.out.println("Promedio : "+A.promedio());
System.out.println("Condicion : "+A.condicion());
}
}

4) Crear la clase Trabajador que tenga como atributos nombre, preciHora y


horasTrabajadas y se calcule salario Bruto, impuestos( 10% del Salario Bruto) y
salario Neto (Salario Bruto Impuestos)
import java.io.*;
class Trabajador{
private String nombre;
private double horasTrabajadas;
private double precioHora;
public Trabajador(String nom, double ht, double ph)
{
nombre=nom;
horasTrabajadas=ht;
precioHora=ph;
}
public void setNombre(String nom)
{
nombre=nom;
}
public void setHorasTrabajadas(double ht)
{
horasTrabajadas=ht;
}
public void setPrecioHora(double ph)
{
Docente: Ing. Martn Salcedo Quiones

Pagina: 71

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
precioHora=ph;
}
public String getNombre()
{
return nombre;
}
public double getHorasTrabajadas()
{
return horasTrabajadas;
}
public double getPrecioHora()
{
return precioHora;
}
public double salarioBruto()
{
return precioHora*horasTrabajadas;
}
public double impuestos()
{
return 0.10*salarioBruto();
}
public double salarioNeto()
{
return salarioBruto()-impuestos();
}
public String toString()
{
return "nombre : "+nombre+ " Horas Trabajadas : "+horasTrabajadas+" Precio Hora :
"+precioHora;

}
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 72

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

public class PruebaTrabajador


{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String nom;
double ph,ht;
Trabajador T;
System.out.print("Ingrese nombre : ");
nom= br.readLine();
System.out.print("Ingrese numero de horas Trabajadas : ");
ht=Double.parseDouble(br.readLine());
System.out.print("Ingrese precio de la Hora : ");
ph=Double.parseDouble(br.readLine());
T = new Trabajador(nom,ht,ph);
System.out.println("Trabajador : "+T);
System.out.println("Salario Bruto : "+T.salarioBruto());
System.out.println("Impuestos : "+T.impuestos());
System.out.println("Salario Neto : "+T.salarioNeto());
}
}
5) Crear la clase Mvil con atributos velocidad Inicial, aceleracin y tiempo y se
pueda calcular el espacio recorrido por el mvil
import java.io.*;
class Movil{
private double velocidadInicial;
private double aceleracion;
private double tiempo;
public Movil(double vi, double a, double t)
{
velocidadInicial=vi;
aceleracion=a;
tiempo=t;
Docente: Ing. Martn Salcedo Quiones

Pagina: 73

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
}
public void setVelocidadInicial(double vi)
{
velocidadInicial=vi;
}
public void setAceleracion(double a)
{
aceleracion=a;
}
public void setTiempo(double t)
{
tiempo=t;
}
public double getVelocidadInicial()
{
return velocidadInicial;
}
public double getAceleracion()
{
return aceleracion;
}
public double getTiempo()
{
return tiempo;
}
public String toString()
{
return "Velocidad Inicial = "+velocidadInicial+" Aceleracion =
"+aceleracion+"Tiempo = "+tiempo;
}
public double espacioRecorrido()
Docente: Ing. Martn Salcedo Quiones

Pagina: 74

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
{
return
velocidadInicial*tiempo+(1.0/2.0)*aceleracion*Math.pow(tiempo,2);
}
}
public class PruebaMovil
{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

double vi,a,t;
Movil M;
System.out.print("Ingrese velocidad Inicial : ");
vi=Double.parseDouble(br.readLine());
System.out.print("Ingrese aceleracion : ");
a=Double.parseDouble(br.readLine());
System.out.print("Ingrese tiempo : ");
t=Double.parseDouble(br.readLine());
M = new Movil(vi,a,t);
System.out.println("Movil : "+M);
System.out.println("Espacio Recorrido : "+M.espacioRecorrido());
}
}

EJECUTANDO LA PRIMERA APLICACION


1. Crea un proyecto denominado: Sesion05_Aplicaciones

Docente: Ing. Martn Salcedo Quiones

Pagina: 75

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Observa que debes crear la clase principal PruebaCilindro dentro del


paquete sesion05_aplicaciones. Luego dar clic en el botn de comando
Terminar.
2. Ahora se observa el entorno de NetBeans listo para colocar la
programacin de la primera aplicacin.

3. As debe quedar luego de colocar las instrucciones de la primera aplicacin.


Docente: Ing. Martn Salcedo Quiones

Pagina: 76

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

4. Luego a proceder a ejecutar la aplicacin.

Posteriormente dar clic en Ejecutar archivo.

Docente: Ing. Martn Salcedo Quiones

Pagina: 77

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Ingresar el valor de la radio y la altura y se lograr observar lo siguiente:

Docente: Ing. Martn Salcedo Quiones

Pagina: 78

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

RELACIONES ENTRE CLASES

Un conjunto de objetos aislados tiene escasa capacidad de resolver un


problema. En una aplicacin til los objetos colaboran e intercambian
informacin, mantienen distintos tipos de relaciones entre ellos.
A nivel de diseo podemos distinguir entre 5 tipos de relaciones bsicas entre
clases de objetos: dependencia, asociacin, agregacin, composicin y
herencia. La dependencia es la relacin menos importante, simplemente refleja
que entre dos clases de objetos existe una posible colaboracin temporal con
algn propsito. Una dependencia puede indicar la utilizacin de un objeto de
una clase como argumento de una operacin o en su implementacin.
En cambio, la asociacin es la relacin ms importante y ms comn. Refleja
una relacin entre dos clases independientes que se mantiene durante la
vidade los objetos de dichas clases o al menos durante un tiempo prolongado.
En UML suele indicarse el nombre de la relacin, el sentido de dicha relacin y
las cardinalidades en los dos extremos.
Veamos el siguiente diagrama de clases:
Docente: Ing. Martn Salcedo Quiones

Pagina: 79

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Diagrama de clases N 1

Se observa la clase Pedido que tiene como atributos a numero (de tipo entero),
fecha (de tipo cadena) y cliente (de tipo cadena). Tiene como operaciones o
mtodos

Pedido(),

adicionarDetalle(),

obtenerDetalle()

calcularTotalPedido(). La segunda clase llamada DetallePedido tiene como


atributos a cantidad (de tipo entero) y precio (de tipo flotante), como nico
mtodo tiene a DetallePedido(). Existe una relacin entre la clase de Pedido y
DetallePedido que consiste que cada Pedido debe estar compuesto de uno a
muchos Detalle de Pedidos.
Veamos otro diagrama de clases:

Docente: Ing. Martn Salcedo Quiones

Pagina: 80

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Diagrama de clases N 2

Se observa la clase Almacen que tiene como nico atributo nombre (de tipo
cadena) y sus mtodos son: Almacen(), adiconarProducto(), obtenerProducto(),
adicionarEmpleado() y obtenerEmpleado(). La segunda clase llamada Producto
tiene como atributos a nombre (de tipo cadena), stock (de tipo entero) y precio
(de tipo flotante) y como nico mtodo Producto(). Existe una relacin entre la
clase mAlmacen y la clase Producto que consiste que cada Almacen puede
tener uno o muchos productos.
Una asociacin se implementa en Java introduciendo referencias a objetos de
la clase destino de la relacin como atributos de la clase origen. Si la relacin
tiene una cardinalidad superior a uno entonces ser necesario utilizar un
arreglo o una estructura de datos. Normalmente la conexin entre los objetos
se realiza recibiendo la referencia de uno de ellos en el constructor u otro
operacin similar del otro.
Veamos el siguiente cdigo escrito en Java:

Docente: Ing. Martn Salcedo Quiones

Pagina: 81

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Se tiene la clase Cliente con los atributos nombre, apellidos, direccion,


localidad y fNacimiento (ver en la llave correpondiente a 1). Tenemos como
mtodos a Cliente(), nombreCompleto() y direccionCompleta() (ver en 2). Se
tiene la clase Cuenta que tiene como atributos a numero, titular (de tipo Cliente
ver flecha anaranjada), saldo e interesAnual (ver en la llave correpondiente a
3) . Como mtodos tiene a Cuenta y a leerTitular() (ver en 4). La mayor
novedad en este ejemplo es que la Clase Cuenta tiene un atributo llamado
titular que es de tipo Cliente, es decir, que este atributo titular es un objeto de la
Clase Cliente y por lo tanto contiene a su vez a los atributos de Cliente y con la
posibilidad de usar sus mtodos.

PROGRAMAS RESUELTOS
Docente: Ing. Martn Salcedo Quiones

Pagina: 82

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

3) Crear la clase Facultad con los atributos codigofac y nombre y luego la clase
EscuelaPropfesional con los atributos codigoesc, nombre, facultad. Luego
procede a ingresar los datos de dos escuelas profesionales.
import java.io.*;
class Facultad
{
String codigofac;
String nombre;
public Facultad(String cod, String nom)
{
codigofac=cod;
nombre=nom;
}
}
class EscuelaProfesional
{
String codigoesc;
String nombre;
Facultad facultad;
public EscuelaProfesional(String cod, String nom, Facultad f)
{
codigoesc=cod;
nombre=nom;
facultad=f;
}
public String toString()
{
return "La escuela profesional "+nombre+" pertenece a la facultad de
"+facultad.nombre;
}
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 83

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public class RelacionClases01 {
public static void main(String[] args)throws IOException
{
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
String codesc, nomesc, codfac, nomfac;
int i;
System.out.println("DATOS DE LA PRIMERA ESCUELA
PROFESIONAL");
System.out.print("Ingrese el codigo de la escuela profesional : ");
codesc=br.readLine();
System.out.print("Ingrese el nombre de la escuela profesional : ");
nomesc=br.readLine();
System.out.print("Ingrese el codigo de facultad : ");
codfac=br.readLine();
System.out.print("Ingrese el nombre de facultad : ");
nomfac=br.readLine();
Facultad F1=new Facultad(codfac,nomfac);
EscuelaProfesional EP1=new EscuelaProfesional(codesc,nomesc,F1);
System.out.println("");
System.out.println("DATOS DE LA SEGUNDA ESCUELA
PROFESIONAL");
System.out.print("Ingrese el codigo de la escuela profesional : ");
codesc=br.readLine();
System.out.print("Ingrese el nombre de la escuela profesional : ");
nomesc=br.readLine();
System.out.print("Ingrese el codigo de facultad : ");
codfac=br.readLine();
System.out.print("Ingrese el nombre de facultad : ");
nomfac=br.readLine();
Facultad F2=new Facultad(codfac,nomfac);
EscuelaProfesional EP2=new EscuelaProfesional(codesc,nomesc,F2);
System.out.println("");
System.out.println(EP1);
System.out.println(EP2);
}
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 84

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
4) Tomando el diagrama de clases N 2 proceder a ingresar datos de productos.
Hacer uso de arreglos o vectores.
Crear un archivo Almacen.java y colocar el siguiente cdigo:
public class Almacen
{
//Atributos propios de la clase
private String nombre;
//Atributos resultado de la relacion con la clase Producto
private int nproductos;
private Producto[] productos;
public Almacen(String nom)
{
nombre=nom;
//Creacion del arreglo de objetos producto
nproductos = 0;
productos = new Producto[100];
}
public String adicionarProducto(Producto prod)
{
//Variable que nos mostrar si realmente se registr el producto
String rpta;
//Consulta si el arreglo tiene menos de 100 items
if (nproductos < 100) {
//Si tiene menos de 100 items lo agrega al arreglo
productos[nproductos] = prod;
//Incremente la cantidad de elementos que tiene el arreglo
nproductos++;
//Un mensaje diciendo que se registro el producto
rpta = "Se registro el producto";
} else {
//Un mensaje diciendo que no se pudo registrar
rpta = "No se registro el producto";
}
return rpta;
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 85

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public Producto obtenerProducto(int indice)
{
//El indice tiene que ser menor a la cantidad de elementos que tenemos en el arreglo

if (indice < 0 || indice >= nproductos) {


//Si el indice esta fuera del rango
return null;
} else {
//Retorma el elemento en la posicion que deseamos
return productos[indice];
}
}
public int getNproductos() {
return nproductos;
}
public String getNombre() {
return nombre;
}
}
Crear un archivo Producto.java y colocar el siguiente cdigo:
public class Producto
{
//Atributos de la clase
private String nombre;
private float precio;
private int stock;
public Producto(String nom, int cant,float pre ) {
nombre = nom;
precio = pre;
stock = cant;
}
//Metodos Set y Get
public String getNombre() {
return nombre;
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 86

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getStock() {
return stock;
}
public void setStock(int s) {
stock = s;
}
public float getPrecio() {
return precio;
}
public void setPrecio(float p) {
precio = p;
}
public String toString() {
return "Producto{" + "Nombre=" + nombre + ", Precio=" + precio + ", Stock="
+ stock + '}';
}
}
Crear el archivo OperacionesProductos.java y colocar el siguiente cdigo:
import java.io.*;
public class OperacionesProductos
{
public static void main(String args[])throws IOException
{
BufferedReader br = new
InputStreamReader(System.in));
String nomalmacen, nompro;
int rpta=1, cant;
float pre;
Almacen oA= null;
Docente: Ing. Martn Salcedo Quiones

BufferedReader(new

Pagina: 87

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.print("Ingrese el nombre del almacen: ");
nomalmacen=br.readLine();
oA= new Almacen(nomalmacen);
Producto p;
if(oA!=null)
System.out.println("Almacen creado ...");
System.out.println("");
System.out.println("INGRESO DE PRODUCTOS");
do
{
System.out.print("NOMBRE: ");
nompro=br.readLine();
System.out.print("STOCK: ");
cant=Integer.parseInt(br.readLine());
System.out.print("PRECIO: ");
pre=Float.parseFloat(br.readLine());
System.out.print("Desea ingresar los datos de otro producto? (Si=1, No=0):
");
rpta=Integer.parseInt(br.readLine());
System.out.println("");
//Creacion del Objeto
p=new Producto(nompro, cant, pre);
//Adiciona el Obj al Arreglo de Productos
//Nota: Para acceder a los metodos del Arreglo de Objs que esta en Almacen
//se realiza mediante la Variable de Clase que se encuentra en IUAlmacen
oA.adicionarProducto(p);
}while(rpta==1);
System.out.println("LISTA DE PRODUCTOS");
int total,i;
total=oA.getNproductos();
if (total>0)
for(i=0;i<total;i++)
{
p=oA.obtenerProducto(i);
System.out.println(p.getNombre()+"\t"+p.getStock()+"\t"+p.getPrecio());
}
}
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 88

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
EJECUTANDO LA PRIMERA APLICACION

1.

Crea un proyecto denominado: Sesion06_Aplicaciones

Observa que debes crear la clase principal RelacionClases01 dentro del


paquete sesion06_aplicaciones. Luego dar clic en el botn de comando
Terminar.

2.

Ahora se observa el entorno de NetBeans listo para colocar la


programacin de la primera aplicacin.

3.

As debe quedar luego de colocar las instrucciones de la primera aplicacin.

Docente: Ing. Martn Salcedo Quiones

Pagina: 89

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

4.

Luego a proceder a ejecutar la aplicacin.

Posteriormente dar clic en Ejecutar archivo.

Docente: Ing. Martn Salcedo Quiones

Pagina: 90

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Ingresar los datos solicitados y se lograr observar lo siguiente:

Docente: Ing. Martn Salcedo Quiones

Pagina: 91

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

MODIFICADORES DE ACCESO A LOS


MIEMBROS DE UNA CLASE

Los modificadores de acceso, como su nombre indica, determinan desde qu


clases se puede acceder a un determinado elemento. En Java tenemos 4 tipos:
public, private, protected y el tipo por defecto, que no tiene ninguna palabra
clave asociada, pero se suele conocer como default o package-private.
Si no especificamos ningn modificador de acceso se utiliza el nivel de acceso
por defecto, que consiste en que el elemento puede ser accedido slo desde
las clases que pertenezcan al mismo paquete.
El nivel de acceso public permite a acceder al elemento desde cualquier clase,
independientemente de que esta pertenezca o no al paquete en que se
encuentra el elemento.
private, por otro lado, es el modificador ms restrictivo y especifica que los
elementos que lo utilizan slo pueden ser accedidos desde la clase en la que
se encuentran. Este modificador slo puede utilizarse sobre los miembros de
una clase y sobre interfaces y clases internas, no sobre clases o interfaces de
primer nivel, dado que esto no tendra sentido.
Docente: Ing. Martn Salcedo Quiones

Pagina: 92

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Es importante destacar tambin que private convierte los elementos en
privados para otras clases, no para otras instancias de la clase. Es decir, un
objeto de una determinada clase puede acceder a los miembros privados de
otro objeto de la misma clase.
El modificador protected, por ltimo, indica que los elementos slo pueden ser
accedidos desde su mismo paquete (como el acceso por defecto) y desde
cualquier clase que extienda la clase en que se encuentra, independientemente
de si esta se encuentra en el mismo paquete o no. Este modificador, como
private, no tiene sentido a nivel de clases o interfaces no internas.
Los distintos modificadores de acceso quedan resumidos en la siguiente tabla:

Static
A pesar de lo que podra parecer por su nombre, heredado de la terminologa
de C++, el modificador static no sirve para crear constantes, sino para crear
miembros que pertenecen a la clase, y no a una instancia de la clase. Esto
implica, entre otras cosas, que no es necesario crear un objeto de la clase para
poder acceder a estos atributos y mtodos. Este es el motivo por el cual es
obligatorio que main se declare como static; de esta forma no tenemos que
ofrecer un constructor vaco para la clase que contiene el mtodo, o indicar de
alguna forma a la mquina virtual cmo instanciar la clase.
Un uso del modificador static sera, por ejemplo, crear un contador de los
objetos de la clase que se han creado, incrementando la variable esttica en el
constructor:

Docente: Ing. Martn Salcedo Quiones

Pagina: 93

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Como es de esperar, dado que tenemos acceso a los atributos sin necesidad
de crear un objeto, los atributos estticos como usuarios no se inicializan al
crear el objeto, sino al cargar la clase.
Podemos acceder a estos mtodos y atributos bien desde la propia clase

o bien desde una instancia cualquiera de la clase:

Otro uso sera el de crear una recopilacin de mtodos y atributos relacionados


a los que poder acceder sin necesidad de crear un objeto asociado, que podra
no tener sentido o no ser conveniente, como es el caso de la clase Math.

Docente: Ing. Martn Salcedo Quiones

Pagina: 94

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Una caracterstica no muy conocida que se introdujo en Java 1.5 son los static
imports, una sentencia similar al import habitual, con la salvedad de que esta
importa miembros estticos de las clases, en lugar de clases de los paquetes,
permitiendo utilizar estos miembros sin indicar el espacio de nombres en el que
se encuentran. El ejemplo anterior podra haberse escrito tambin de la
siguiente forma utilizando esta caracterstica:

Si por algn motivo requerimos cualquier tipo de computacin para inicializar nuestras
variables estticas, utilizaremos lo que se conoce como bloque esttico o inicializador
esttico, el cul se ejecuta una sola vez, cuando se carga la clase.

Por ltimo, una curiosidad relacionada que podis utilizar para romper el hielo con una
programadora Java es que podemos utilizar un bloque static para escribir un programa
sencillo sin necesidad de un main, aadiendo una llamada a System.exit para que el
programa termine tras cargar la clase sin intentar llamar al mtodo main

Docente: Ing. Martn Salcedo Quiones

Pagina: 95

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Final
Indica que una variable, mtodo o clase no se va a modificar, lo cul puede ser
til para aadir ms semntica, por cuestiones de rendimiento, y para detectar
errores.
Si una variable se marca como final, no se podr asignar un nuevo valor a la
variable. Si una clase se marca como final, no se podr extender la clase. Si es
un mtodo el que se declara como final, no se podr sobreescribir.
Algo muy a tener en cuenta a la hora de utilizar este modificador es que si es
un objeto lo que hemos marcado como final, esto no nos impedir modificar el
objeto en s, sino tan slo usar el operador de asignacin para cambiar la
referencia. Por lo tanto el siguiente cdigo no funcionara:

Pero, sin embargo, este si:

Miembros de clase Estaticos


Cada objeto de una clase tiene su propia copia de todas las variables de
ejemplar de clase. En ciertos casos, una sola copia de la variable en particular
debe ser compartida por todos los objetos de la clase. Por esta y otras razones
utilizamos las variables de clase static (estticas). Una variable de clase static
representa informacin que abarca toda la clase. La declaracin de un
mtodo esttico comienza con la palabra clave static.

Docente: Ing. Martn Salcedo Quiones

Pagina: 96

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
PROGRAMAS RESUELTOS
5) Crear una clase Empleado que haga uso del modificador static y luego crea dos
objetos de Empleados.
import java.io.*;
class Empleado{
private String nombres;
private String apellidos;
private static int contador;
public Empleado(String nom, String ape)
{
nombres=nom;
apellidos=ape;
contador++;
}
public void finalize()
{
--contador;
}
public void setNombres(String nom)
{
nombres=nom;
}
public void setApellidos(String ape)
{
apellidos=ape;
}
public static void setContador(int cont)
{
contador=cont;
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 97

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public String getNombres()
{
return nombres;
}
public String getApellidos()
{
return apellidos;
}
public static int getContador()
{
return contador;
}
public String toString()
{
return apellidos+" "+nombres;
}
}
public class PruebaEmpleadoVariableEstatica{
public static void main(String args[]) throws IOException
{
System.out.println(Numero de objetos creados :
+Empleado.getContador());
Empleado e1= new Empleado("Torres","Fidel");
System.out.println(e1);
System.out.println("Nmero de objetos creados : "+e1.getContador());
Empleado e2= new Empleado("Villanueva","Nelsa");
System.out.println(e2);
System.out.println("Nmero de objetos creados :
"+Empleado.getContador());
}
}
Interpretacin de la programacin:

Docente: Ing. Martn Salcedo Quiones

Pagina: 98

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
En el programa anterior usamos un atributo private static y un mtodo public
static.
El atributo contador se inicializa en cero por omisin. Esta variable va contando
el numero de Objetos de la Clase Empleado que se van creando, esta variable
se va incrementando en el constructor cada vez que se crea un objeto.
Para saber cuntos objetos hemos creados llamamos al mtodo estatico
getContador() que devuelve el valor de la variable contador.
Un mtodo declarado static no puede acceder a miembros de clase no
estticos. Un mtodo static no tiene referencia this porque las variables de
clase static y los mtodos static existen independientemente de que existan o
no objetos de clase.
En

la

primera

linea

del

Programa

colocamos

llamamos

Empleado.getContador() pues como es un mtodo exttico no es necesario


usar un objeto de la clase par llamar al mtodo, solo se usa el nombre de la
Clase y luego el mtodo getContador().
6) Crea una clase denominada FigurasGeometricas y calcula el rea y el
permetro del cuadrado, rectngulo y del triangulo. Hacerlo con mtodos
estticos y mtodos no estticos.
Respuesta con mtodos estticos:
import java.io.*;
class FigurasGeometricas
{
public static double areaCuadrado(int lado1)
{
return lado1*lado1;
}
public static double areaRectangulo(int lado1, int lado2)
{
return lado1*lado2;
}
public static double areaTriangulo(int lado1, int lado2, int lado3)
{
double p, r;
Docente: Ing. Martn Salcedo Quiones

Pagina: 99

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
p=(lado1+lado2+lado3)/2.0;
r=p*(p-lado1)*(p-lado2)*(p-lado3);
if (r>0)
return Math.sqrt(r);
else
return 0.0;
}
public static int perimetroCuadrado(int lado1)
{
return 4*lado1;
}
public static int perimetroRectangulo(int lado1, int lado2)
{
return 2*lado1+2*lado2;
}
public static int perimetroTriangulo(int lado1, int lado2, int lado3)
{
return lado1+lado2+lado3;
}
}
public class CalculoAreaPerimetro
{
public static void main(String args[])throws IOException
{
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
int opcion, l1,l2,l3;
System.out.println("CALCULO DEL AREA Y PERIMETRO");
System.out.print("Ingrese 1: cuadrado, 2:rectangulo, 3:triangulo -> ");
opcion=Integer.parseInt(br.readLine());
if (opcion==1)
{
System.out.print("Ingrese el valor del lado del cuadrado: ");
l1=Integer.parseInt(br.readLine());
System.out.println("El area del cuadrado es:
"+FigurasGeometricas.areaCuadrado(l1));
System.out.println("El perimetro del cuadrado es:
"+FigurasGeometricas.perimetroCuadrado(l1));
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 100

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
if (opcion==2)
{
System.out.print("Ingrese el valor del lado 1 del rectangulo: ");
l1=Integer.parseInt(br.readLine());
System.out.print("Ingrese el valor del lado 2 del rectangulo: ");
l2=Integer.parseInt(br.readLine());
System.out.println("El area del rectangulo
"+FigurasGeometricas.areaRectangulo(l1,l2));
System.out.println("El perimetro del rectangulo
"+FigurasGeometricas.perimetroRectangulo(l1,l2));
}
if (opcion==3)
{
System.out.print("Ingrese el valor del lado 1 del triangulo: ");
l1=Integer.parseInt(br.readLine());
System.out.print("Ingrese el valor del lado 2 del triangulo: ");
l2=Integer.parseInt(br.readLine());
System.out.print("Ingrese el valor del lado 3 del triangulo: ");
l3=Integer.parseInt(br.readLine());
System.out.println("El area del triangulo
"+FigurasGeometricas.areaTriangulo(l1,l2,l3));
System.out.println("El perimetro del rectangulo
"+FigurasGeometricas.perimetroTriangulo(l1,l2,l3));
}
}
}

es:
es:

es:
es:

Respuesta con mtodos no estticos:


import java.io.*;
class FigurasGeometricas
{
public double areaCuadrado(int lado1)
{
return lado1*lado1;
}
public double areaRectangulo(int lado1, int lado2)
Docente: Ing. Martn Salcedo Quiones

Pagina: 101

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
{
return lado1*lado2;
}
public double areaTriangulo(int lado1, int lado2, int lado3)
{
double p, r;
p=(lado1+lado2+lado3)/2.0;
r=p*(p-lado1)*(p-lado2)*(p-lado3);
if (r>0)
return Math.sqrt(r);
else
return 0.0;
}
public int perimetroCuadrado(int lado1)
{
return 4*lado1;
}
public int perimetroRectangulo(int lado1, int lado2)
{
return 2*lado1+2*lado2;
}
public int perimetroTriangulo(int lado1, int lado2, int lado3)
{
return lado1+lado2+lado3;
}
}
public class CalculoAreaPerimetro
{
public static void main(String args[])throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int opcion, l1,l2,l3;
FigurasGeometricas F=new FigurasGeometricas();
System.out.println("CALCULO DEL AREA Y PERIMETRO");
Docente: Ing. Martn Salcedo Quiones

Pagina: 102

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.print("Ingrese 1: cuadrado, 2:rectangulo, 3:triangulo -> ");
opcion=Integer.parseInt(br.readLine());
if (opcion==1)
{
System.out.print("Ingrese el valor del lado del cuadrado: ");
l1=Integer.parseInt(br.readLine());
System.out.println("El area del cuadrado es: "+F.areaCuadrado(l1));
System.out.println("El perimetro del cuadrado es: "+F.perimetroCuadrado(l1));
}
if (opcion==2)
{
System.out.print("Ingrese el valor del lado 1 del rectangulo: ");
l1=Integer.parseInt(br.readLine());
System.out.print("Ingrese el valor del lado 2 del rectangulo: ");
l2=Integer.parseInt(br.readLine());
System.out.println("El area del rectangulo es: "+F.areaRectangulo(l1,l2));
System.out.println("El perimetro del rectangulo es:
"+F.perimetroRectangulo(l1,l2));
}
if (opcion==3)
{
System.out.print("Ingrese el valor del lado 1 del triangulo: ");
l1=Integer.parseInt(br.readLine());
System.out.print("Ingrese el valor del lado 2 del triangulo: ");
l2=Integer.parseInt(br.readLine());
System.out.print("Ingrese el valor del lado 3 del triangulo: ");
l3=Integer.parseInt(br.readLine());
System.out.println("El area del triangulo es: "+F.areaTriangulo(l1,l2,l3));
System.out.println("El perimetro del rectangulo es:
"+F.perimetroTriangulo(l1,l2,l3));
}
}
}

EJECUTANDO LA PRIMERA APLICACION


5. Crea un proyecto denominado: Sesion07_Aplicaciones.
Docente: Ing. Martn Salcedo Quiones

Pagina: 103

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Observa

que

debes

PruebaEmpleadoVariableEstatica

crear
dentro

la

clase

principal

del

paquete

sesion07_aplicaciones. Luego dar clic en el botn de comando Terminar.


6. Ahora se observa el entorno de NetBeans listo para colocar la programacin
de la primera aplicacin.

7. Asi debe quedar luego de colocar las instrucciones de la primera aplicacin.

Docente: Ing. Martn Salcedo Quiones

Pagina: 104

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

8. Luego a proceder a ejecutar la aplicacin.

Posteriormente dar clic en Ejecutar archivo.

Docente: Ing. Martn Salcedo Quiones

Pagina: 105

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Docente: Ing. Martn Salcedo Quiones

Pagina: 106

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

METODOS CONSTRUCTORES Y LA
REFERENCIA THIS

Un Constructor es una funcin, mtodo, etc, de las clases, la cual es llamada


automticamente cuando se crea un objeto de esa clase.
Por ser mtodos, los constructores tambin aceptan parmetros. Cuando en
una clase no especificamos ningn tipo de constructor, el compilador aade
uno pblico por omisin sin parmetros, el cual NO hace nada.
Caractersticas de los Constructores
1.

Un constructor, tiene el mismo nombre de la clase a la cual pertenece.

2.

No puede ser Heredado.

3.

No retorna ningn valor (Ni void), por lo cual no debe especificarse


ningn tipo de dato.

4.

Debe declararse como public, slo en casos realmente extraordinarios


ser de otro tipo.

Supongamos una clase llamada Datos


public class Datos
{

Docente: Ing. Martn Salcedo Quiones

Pagina: 107

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
//declaracion de atributos
public Datos();//constructor sin parametros
public Datos(int Edad)
{//Constructor con parmetros
EdadM=Edad;
}
}

Por ejemplo:
Sobrecarga
Cuando en una clase, se definen un mismo mtodo, con diferente nmero de
parmetros, o bien con el mismo nmero de parmetros pero diferencindose
en la definicin, en la cual, al menos un parmetro sea de diferente tipo,
cuando esto sucede, se dice que el mtodo est sobrecargado.
Por ejemplo:
public class Arboles

public Arboles() {
System.out.println("Un rbol genrico");
}
public Arboles(String tipo) {
System.out.println("Un rbol tipo " + tipo);
}
public Arboles(int altura) {
System.out.println("Un rbol de " + altura + " metros");
}
public Arboles(int altura,String tipo) {
System.out.println("Un " + tipo + " de " + altura + " metros");
}
public static void
Arboles arbol1
Arboles arbol2
Arboles arbol3
Arboles arbol4
}

main(String args[]) {
= new Arboles(4);
= new Arboles("Roble");
= new Arboles();
= new Arboles(5,"Pino");

Explicacin:

Como en todo programa Java, primeramente se define la Clase a travs del


vocablo class.

Docente: Ing. Martn Salcedo Quiones

Pagina: 108

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Posteriormente son definidos 4 Constructores; ntese que cada uno recibe


el mismo nombre de la Clase y posee distintos argumentos de entrada.

Dentro del mtodo principal (main) son generadas cuatro instancias de la


Clase, como se puede observar, al ser generada la instancia a travs del
vocablo new se pasa un parmetro, y es dependiendo de este parmetro
que es llamado el Constructor correspondiente, el cual a su vez invoca la
Clase System.out.println que imprime a pantalla.

Mtodos y Parmetros por Referencia


Cuando son utilizados Constructores puede surgir la necesidad de inicializar
algn campo perteneciente a la Clase, esto trae consigo otro detalle en lo que
concierne la asignacin de valores dentro de un mtodo, la razn se debe a
que dentro de un mtodo puede surgir el requerimiento de accesar campos
definidos en la Clase, observe:
public Class Cableado
{
int longitud;
String tipo;
public Cableado(String tipo, int longitud)
{
this.tipo = tipo
this.longitud = longitud;
}
....
....
}

En el caso anterior, dentro del constructor se desea asignar valores a los


campos de una Clase, sin embargo, dentro del constructor son utilizados como
parmetros de entrada los mismos valores, para tener acceso a los campos de
la Clase se utiliza el vocablo: this, al emplear esta sintaxis se esta haciendo
alusin a los campos de la Clase.
Aunque sera posible emplear distintos nombres para los valores de entrada,
evitando el uso del vocablo this, la sintaxis con el vocablo this es ampliamente
utilizada en el caso de Constructores mencionado anteriormente.
Docente: Ing. Martn Salcedo Quiones

Pagina: 109

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
PROGRAMAS RESUELTOS
1) Se Desea crear un objeto del tipo Coordenadas, que indique, la posicin de
un punto en el plano cartesiano, y permita calcular la distancia existente con
otro punto, adems del punto medio entre ellos.
1 /*Archivo Coordenadas.java*/
2
3 public class Coordenadas {
4
private int x,y;//Atributos
5
public Coordenadas (int x1 , int y1)//constructor
6
{
7
//asignamos esos valores
8
x=x1;
9
y=y1;
10
}
11
public double Distancia (int x1, int y1)
12
{
13
//este mtodo recibe como parametros
14
//las coordenadas del segundo punto
15
double D;
16
D=Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
17
return D;//Retornamops el valor de la distancia
18
}
19
public void Pmedio(int x1, int y1)
20
{
21
double p1, p2;
22
p1=(x+x1)/2;
23
p2=(y+y1)/2;
24
System.out.println("El puntomedio es: "+p1+","+p2);
25
}
26 }
1 /*Archivo UsaCoordenadas.java*/
2 public class UsaCoordenadas {
3 public static void main (String args []){
4
Coordenadas P=new Coordenadas (10,20);
5
//calculamos la Distancia:
6
System.out.println("La Distancia es: "+P.Distancia(5,6));
7
//Punto Medio
8
P.Pmedio(5,6);
9 }
10 }

Interpretacin de la programacin
Un mtodo, si va a devolver algn valor, ste debe especificarse cuando se
hace la definicin del mismo, para el caso, el mtodo Distancia, devuelve el
valor de la distancia, es por ello que lo especificamos como public double.
Adems que, cuando realizamos la llamada de ese mtodo, es en ese
Docente: Ing. Martn Salcedo Quiones

Pagina: 110

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
preciso lugar que aparecer el valor que devuelve. Por otra parte,

los

atributos, son de acceso privado, lo cual implica que, slo podemos acceder
a ellos, en la clase Coordenadas.
2) Cree una aplicacin en Java, que imprima un nmero imaginario. Nota, los
nmeros imaginarios, poseen una parte real y otra imaginaria, acompaada
por la constante i.
1 class Imaginario {
2 private int real, imag;
3 public Imaginario()
4 {
5
real=0;
6
imag=0;
7 }
8 public Imaginario(int x, int y)
9 {
10
real=x;
11
imag=y;
12 }
13 public void Mostrar()
14 {
15
System.out.println("El Numero Imaginario es: "+real+" + "+imag+"i");
16 }
17 }
1 class UsaImaginario{
2 public static void main (String args []) {
3 Imaginario oI=new Imaginario(5,6);
4 oI.Mostrar();
5}
6}

Interpretacin de la programacin
En el ejemplo anterior puede notar que, los atributos, son esas variables
simples, es las cuales almacenaremos informacin relevante a los objetos
que, crearemos a partir de esa clase.
Adems que, los estamos declarando como pblicos, lo cual indica que
tenemos acceso directo desde cualquier otro archivo a los atributos. Los
mtodos son del tipo public y no devuelven ningn valor, por tal razn son
declarados como void. Adems que. El mtodo EstablecerEdad y
EstablecerNota, reciben un argumento cada uno de ellos, el cual es
asignado al respectivo atributo.
Docente: Ing. Martn Salcedo Quiones

Pagina: 111

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

3) Tomando

el enunciado del segundo programa resuelto en la sesin

Relaciones entre clases, indicar los mtodos constructores utilizados y


usar la referencia this.
Crear un archivo Almacen.java y colocar el siguiente cdigo:
public class Almacen
{
private String nombre;
private int nproductos;
private Producto[] productos;
//Mtodo constructor Almacen con un solo parametro
public Almacen(String nombre)
{
this.nombre=nombre;
nproductos = 0;
productos = new Producto[100];
}
public String adicionarProducto(Producto prod)
{
String rpta;
if (this.nproductos < 100) {
this.productos[this.nproductos] = prod;
this.nproductos++;
rpta = "Se registro el producto";
} else {
rpta = "No se registro el producto";
}
return rpta;
}
public Producto obtenerProducto(int indice)
{
if (indice < 0 || indice >= this.nproductos) {
return null;
Docente: Ing. Martn Salcedo Quiones

Pagina: 112

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
} else {
return productos[indice];
}
}
public int getNproductos() {
return nproductos;
}
public String getNombre() {
return nombre;
}
}
Crear un archivo Producto.java y colocar el siguiente cdigo:
public class Producto
{
private String nombre;
private float precio;
private int stock;
//Mtodo constructor con parametros
public Producto(String nombre, int stock,float precio ) {
this.nombre = nombre;
this.precio = precio;
this.stock = stock;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getStock() {
return stock;
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 113

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public void setStock(int stock) {
this.stock = stock;
}
public float getPrecio() {
return precio;
}
public void setPrecio(float precio) {
this.precio = precio;
}
public String toString() {
return "Producto{" + "Nombre=" + nombre + ", Precio=" + precio + ", Stock="
+ stock + '}';
}
}
//El archivo OperacionesProductos.java queda como est.
EJECUTANDO LA PRIMERA APLICACION

5.

Crea un proyecto denominado: Sesion08_Aplicaciones.

Docente: Ing. Martn Salcedo Quiones

Pagina: 114

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Observa que debes crear la clase principal UsaCoordenadas dentro del
paquete sesion08_aplicaciones. Luego dar clic en el botn de comando
Terminar.

6.

Ahora se observa el entorno de NetBeans listo para colocar la


programacin de la primera aplicacin.

7.

Selecciona el paquete sesion08_aplicaiones y al dar clic con el botn


derecho del mouse y selecciona Clase Java.

Docente: Ing. Martn Salcedo Quiones

Pagina: 115

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

8.

Posteriormente crear la clase Coordenadas.

9.

Colocar el cdigo correspondiente a la clase Coordenadas.

Docente: Ing. Martn Salcedo Quiones

Pagina: 116

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

10.

Colocamos el cdigo correspondiente a la clase UsaCoordenadas.

11.

Como la clase UsaCoordenadas contiene al metodo main procedemos a

ejecutar este programa.

La ejecucin arroja lo siguiente:

Docente: Ing. Martn Salcedo Quiones

Pagina: 117

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

AUTOEVALUACION
a)

Responde a las siguientes preguntas:


1. Una clase tiene como miembros atributos y mtodos (verdadero o falso):
_________________
2. Para crear o instanciar un objeto de la clase Rectangulo se debe
escribir: _____________________________________
3. Los elementos o miemvros que slo pueden ser accedidos dentro una
clase, pertenecen al nivel de acceso __________________
4. Modificador que permite que un miembro pertenezca a la clase y no a un
objeto es: ____________________
5. Las relaciones entre clases permite conocer la asociacin existentes
entre ellos (verdaero o falso): _________________
b) Desarrolla las siguientes aplicaciones:
1. Construye una aplicacin que permita crear la clase Trapecio con los
atributos con base mayor, base menor y la altura. Luego calcula el
permetro y el rea del trapecio.
2. Construye una aplicacin que permita crear la clase Marca con los
atributos codigomar y nombremar. Tambin crear la clase Bus con los
atributos codigobus, nroasientos, nroejes y nropisos. Luego proceder a
ingresar datos en Marca y en Bus y posteriormente visualizar los datos de
los buses ingresados. Hacer uso de arreglos.
3. Crea una clase denominada FigurasGeometricas y calcula el rea y el
permetro del cuadrado, rectngulo y del triangulo. Hacerlo con mtodos
constructores sobrecargados y el operador this.

Docente: Ing. Martn Salcedo Quiones

Pagina: 118

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

CAPITULO III
HERENCIA, CLASES ABSTRACTAS,
INTERFACES Y POLIMORFISMO

Docente: Ing. Martn Salcedo Quiones

Pagina: 119

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

HERENCIA DE CLASES

A travs de la herencia, una clase nueva hereda los atributos y mtodos de una
superclase previamente definida. En este caso decimos que la nueva clase es
una subclase.
En la herencia simple, una clase se hereda de una superclase. Java no
reconoce la herencia mltiple, pero si maneja el concepto de interfaces. Las
interfaces ayudan a java a lograr muchas de las ventajas de la herencia
mltiple.
Una subclase normalmente agrega sus propios atributos y mtodos. De modo
que una subclase generalmente es mayor que su superclase. Una subclase es
ms especfica que su superclase y representa un grupo ms pequeo de
objetos. El verdadero valor de la herencia radica en la capacidad de definir en
la subclase adiciones a las caractersticas heredadas de la superclase o
sustituciones de estas.
Todo objeto de una subclase es tambin un objeto de la superclase de esa
subclase. Sin embargo no se cumple lo opuesto: los objetos de una superclase
no son objetos de las subclases de esa superclase.
Las relaciones de herencia forman estructuras jerrquicas similares a un rbol.
Una superclase existe en una relacin Jerrquica con sus subclases. Sin duda,
Docente: Ing. Martn Salcedo Quiones
Pagina: 120

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
una clase puede existir sola, pero es cuando una clase se emplea con el
mecanismo de herencia que se convierte ya sea en una superclase que
proporciona atributos y comportamientos a otras clases, o en una subclase que
hereda dichos atributos y comportamientos.
Ejemplos:
Persona

Empleado
Profesor

Contador

Estudiante
Universitario

Religiosos

Instituto Colegio

Por ejemplo en una ciudad existen Personas las cuales pueden ser
Empleados, Estudiantes, Religiosos. Los Empleados pueden ser Profesor,
Contador. Los estudiantes pueden ser Universitarios, de Institutos y Colegios.
Las subclases heredan el estado y el comportamiento en forma de las variables y los
mtodos de su superclase. La subclase puede utilizar los tems heredados de su
superclase tal y como son, o puede modificarlos o sobreescribirlos. Por eso, segn se va
bajando por el rbol de la herencia, las clases se convierten en ms y ms
especializadas.
Miembros Protected
Los miembros protected de una superclase slo estn accesibles para los
mtodos de la superclase, los mtodos de las subclases y los mtodos de otras
clases del mismo paquete.
Relacion entre Objetos de superclase y objetos de subclase
Un objeto de una subclase se puede tratar como objeto de su superclase
correspondiente. Esto hace posible ciertas manipulaciones interesantes. Por
ejemplo, a pesar del hecho de que los objetos de diversas clases derivadas de
una superclase en particular pueden ser muy diferentes entre s, podemos
crear un arreglo de ellos, en tanto los tratemos como objetos de la superclase.
Lo contrario no se cumple un objeto de una superclase no es automticamente
tambin un objeto de la subclase.
Docente: Ing. Martn Salcedo Quiones

Pagina: 121

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

import java.io.*;
class Punto{
protected double x;
protected double y;
public Punto()
{
x=0;
y=0;
}
public Punto(double a, double b)
{
x=a;
y=b;
}
public void setX(double a)
{
x=a;
}
public void setY(double b)
{
y=b;
}
public double getX()
{
return x;
}
public double getY()
{
return y;
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 122

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public String toString()
{
return "("+x+","+y+")";
}
}

class Circulo extends Punto{


protected double radio;
public Circulo()
{
super();
radio=0;
}
public Circulo(double a, double b, double r)
{
super(a,b);
radio=r;
}
public void setRadio(double a)
{
radio=a;
}
public double getRadio()
{
return radio;
}
public double area()
{
return Math.PI*Math.pow(radio,2);
}
public String toString()
Docente: Ing. Martn Salcedo Quiones

Pagina: 123

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
{
return "Centro = "+super.toString()+" Radio = "+radio;
}
}
public class HerenciaPuntoCirculo{
public static void main(String args[]) throws IOException
{
Punto P= new Punto(3,4);
Circulo C=new Circulo(6,9,12);
System.out.println(P);
System.out.println(C);
System.out.println("Area del Circulo : "+C.area());
}
}
La clase Circulo hereda de la clase Punto esto se especifica en:
class Circulo extends Punto{
La palabra clave extends (extiende) de la definicin de clase indica herencia.
Todos los miembros (no private) de la clase Punto se heredan en la clase
Circulo.
Los constructores de Circulo deben invocar al constructor de Punto para
inicializar la porcin de superclase de un objeto de la clase Circulo. La primer
lnea del cuerpo de cada constructor invoca al constructor de Punto mediante la
referencia a super.
Una subclase pude redefinir un mtodo de superclase empleando el mismo
nombre, esto se denomina supeditar un mtodo de superclase. Se puede usar
la referencia super seguida por el operador punto para acceder a la versin de
superclase de ese mtodo desde la subclase.
Veamos un ejemplo grfico:

Docente: Ing. Martn Salcedo Quiones

Pagina: 124

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Trabajador es una clase genrica que sirve para almacenar datos como el
nombre, la direccin, el nmero de telfono o el nmero de la seguridad social
de un trabajador.
Empleado es una clase especializada para representar los empleados que
tienen una nmikna mensual (encapsula datos como su salario anual)
Consultor es una clase especializada para representar a aquellos trabajadores
que cobran por horas (por ejemplo, registra el nmero de horas que ha
trabajado un consultor y su tarifa horaria).

Docente: Ing. Martn Salcedo Quiones

Pagina: 125

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Las clases Empleado y Consultor, adems de los atributos y de las


operaciones que definen, heredan de Trabajador todos sus atributos y
operaciones.

Docente: Ing. Martn Salcedo Quiones

Pagina: 126

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Un empleado concreto tendr, adems de sus atributos y operaciones como
Empleado, todos los atributos correpondientes a la superclase Trabajador.
El diagrama indicado se debe escribir en programacion en Java de la siguiente
manera:
import java.util.Date;
class Trabajador
{
private String nombre;
private String puesto;
private String direccion;
private String telefono;
private Date fecha_nacimiento;
private Date fecha_contrato;
private String NSS;
//constructor
public Trabajador (String nombre,String NSS)
{
this.nombre=nombre;
this.NSS=NSS;
}
//comparacin de objetos
Public boolean equals (Trabajador t)
{
return this.NSS.equals(t.NSS);
}
//conversin en una cadena de caracteres
public String toString()
{
return nombre + (NSS + NSS + ) ;
}
}
class Empleado extends Trabajador
{
Docente: Ing. Martn Salcedo Quiones

Pagina: 127

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
double sueldo;
private double impuestos;
private final int PAGAS=14;
//constructor
public Empleado(String nombre, String NSS, double sueldo)
{
super(nombre, NSS);
this.sueldo=sueldo;
this.impuestos=0.2 * sueldo;
}
public double calcularPaga()
{
return (sueldo - impuestos) / PAGAS;
}

public String toString()


{
return Empleado +super.toString();
}
}
Con la palabra reservada extends indicamos que Empleado es una subclase
de Trabajador. Con la palabra super accedemos a miembros de la superclase
desde la subclase.
Generalmente, en un mtodo constructor, lo primero que nos encontramos es
una llamada al constructor de la clase padre con super(). Si no ponemos
nada, se llama al constructor por defecto de la superclase antes de ejecutar el
constructor de la subclase.
class Consultor extends Trabajador
{
private int horas;
private double tarifa;
Docente: Ing. Martn Salcedo Quiones

Pagina: 128

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
//constructor
public Consultor(String nombre, String NSS, int horas, double tarifa)
{
super(nombre, NSS);
this.horas=horas;
this.tarifa=tarifa;
}
public double calcularPaga()
{
return horas * tarifa;
}
public String toString()
{
return Consultor +super.toString();
}
}
La clase Consultor tambin define un mtodo llamado calcularPaga(), si bien
en este caso el clculo se hace de una forma diferente por tratarse de un
trabajador de un tipo distinto.
Tanto la clase Empleado como la clase Consultor redefinen el mtodo
toString() que convierte un objeto en una cadena de caracteres. De hecho,
Trabajador tambin redifine ste mtodo, que se hereda de la clase Object, la
clase base de la que heredan todas las clases de Java.
Redifinicin de mtodos
Como hemos visto en el ejemplo con el mtodo toString(), cada subclase
hereda las operaciones de su superclase pero tiene la posibilidad de modificar
localmente el comportamiento de dichas operaciones (redifiniendo mtodos).
Continuamos con el caso Trabajador, Empleado y Consultor.
public class UsandoHerencia
{
Docente: Ing. Martn Salcedo Quiones

Pagina: 129

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public static void main(String args[ ])
{
//Declaracion de variables
Trabajador trabajador;
Empleado empleado;
Consultor consultor;
//Creacin de objetos
trabajador = new Trabajador(Juan,456);
empleado = new Empleado(Jose,123,24000.0);
consultor = new Consultor(Juan,456, 10, 50.0);
System.out.println(trabajador);
System.out. println(empleado);
System.out.println(consultor);
System.out.println(trabajador.equals(empleado));
System.out.println(trabajador.equals(consultor));
}
}
EJECUTANDO LA APLICACIN EN NETBEANS
1. Crea un proyecto denominado: Sesion09_Aplicaciones

Docente: Ing. Martn Salcedo Quiones

Pagina: 130

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Observa que debes crear la clase principal UsandoHerencia dentro del
paquete sesion09_aplicaciones. Luego dar clic en el botn de comando
Terminar
2. Ahora se observa el entorno de NetBeans listo para colocar la
programacin de la reciente aplicacin.

3. Selecciona el paquete sesion09_aplicaciones y dar clic el botn derecho del


mouse y selecciona Clase Java.

Docente: Ing. Martn Salcedo Quiones

Pagina: 131

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

4. Procede a crear la clase Trabajador.

5. Colocar el cdigo corresponidente a la clase Trabajador.

Docente: Ing. Martn Salcedo Quiones

Pagina: 132

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

6. Luego,

procede

crear

la

clase

Empleado

desde

el

paquete

sesion09_aplicaciones tal como se hizo con la clase Trabajador.

7. Colocar el cdigo correspondiente a la clase Empleado.

Docente: Ing. Martn Salcedo Quiones

Pagina: 133

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

8. Luego,

procede

crear

la

clase

Consultor

desde

el

paquete

sesion09_aplicaciones tal como se hizo con la clase Trabajador.

9. Colocar el cdigo correspondiente a la clase Consultor.

Docente: Ing. Martn Salcedo Quiones

Pagina: 134

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

10. Posteriormente colocar la programacin en la clase UsandoHerencia.

11. Como la clase UsandoHerencia contiene al metodo main procedemos a


ejecutar este programa.

Docente: Ing. Martn Salcedo Quiones

Pagina: 135

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

La ejecucin arroja lo siguiente:

Docente: Ing. Martn Salcedo Quiones

Pagina: 136

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

CLASES ABSTRACTAS

Java proporciona un tipo especial de clase, llamada clase abstracta, que


pueden ayudar a la organizacin de clases basadas en mtodos comunes. Una
clase abstracta permite colocar los nombres de los mtodos comunes en una
sola clase (sin tener que escribir el cdigo que los implemente). Despus, al
crear nuevas clases, stas pueden derivar de una clase abstracta que contiene
una serie de mtodos requeridos.
Los mtodos abstractos contienen slo el nombre del mtodo seguido de una
lista de parmetros. No contiene el cdigo que implementa el mtodo (esto se
deja para las clases derivadas.

Las clases que contienen mtodos abstractos se conocen como clases


abstractas

Un programa no puede crear instancias de una clase abstracta de forma


directa, es necesario crear instancias de sus subclases.

Docente: Ing. Martn Salcedo Quiones

Pagina: 137

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Las clases abstractas pueden contener una mezcla de mtodos


abstractos y no abstractos (concretos). Los mtodos concretos
contienen la instrumentacin del mtodo

Cualquier subclase que extienda a la clase abstracta debe proporcionar


la instrumentacin de todos los mtodos abstractos. En caso contrario,
la subclase misma se convierte en clase abstracta.

Vamos a proceder a dar un ejemplo tomando en cuenta el diagrama de clases


que se encuentra dibujado al incio de esta sesin.
Imaginemos que en nuestra casa tenemos dos mascotas. Una es un perro y la
otra un gato. Cuando acariciamos a nuestro perro, ste baja las orejas como
respuesta a nuestra accin a nuestro gato, ste reacciona levantando su cola.
Cuando los alimentamos les damos de comer una cantidad de algn alimento
apropiado para ellos, y la respuesta de las dos mascotas es que se acercan al
recipiente donde tienen la comida y se la comen como podemos observar,
parece predecible que la respuesta habitual de todas las mascotas cuando se
les da de comer es que se acerquen al plato y se coman el contenido de ste,
pero no podemos decir lo mismo de la respuesta que nos pueden dar todas las
mascotas cuando las acariciamos. Si alguien nos preguntara cmo reacciona
una mascota cuando la acarician nosotros responderamos que depende. Y
de qu depende?. Pues depende de la mascota en concreto que nos estemos
refiriendo, es decir, si hablamos ms concretamente de un perro diremos que
ste baja las orejas y si hablamos ms concretamente de un gato, diremos que
levanta la cola, pero si no nos preguntan de que mascota en concreto estamos
hablando nuestra respuesta ser abstracta, es decir, no tenemos una
respuesta general que sea vlida para la mayora de las mascotas.
Si extrapolamos este planteamiento al mundo de los Objetos, podemos decir
que tenemos

una Superclase llamada Mascota con dos mtodos


o

un mtodo acariciar() que es abstracto (abstract)

Docente: Ing. Martn Salcedo Quiones

Pagina: 138

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
o

y otro mtodo alimentar(...) que no es abstracto

y dos Subclases llamadas Perro y Gato

Mascota
o es una Superclase abstracta (abstract)

es abstracta por que contiene un mtodo llamado


acariciar() que es abstracto

una Clase abstracta no puede ser instanciada

en UML se sabe que una Clase es abstracta por que el


nombre de la Clase est en cursiva

-nombre: String
o Nota: Convencin sobre los mtodos de acceso getters y setters

as pues siguiendo la convencin, los mtodos


+setNombre(nombre: String): void y +getNombre(): String
no estn en la Clase de diseo Mascota

-fechaNacimiento: Date
o Date es una Clase Java que como su nombre indica, representa
una fecha

+acariciar():void
o

como este mtodo est escrito en cursiva, esto significa que


abstract

Vamos a crear las Clases Mascota, Perro, Gato y Aplicacin en cdigo de


Java.
import java.util.Date;
public abstract class Mascota {
private String nombre;
private Date fechaNacimiento;
public abstract void acariciar();

Docente: Ing. Martn Salcedo Quiones

Pagina: 139

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public void alimentar(String nombreAlimento){
System.out.println("Mascota - alimentar(...): me acerco al " +
nombreAlimento + ", y me lo como");
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getNombre(){
return nombre;
}
public void setFechaNacimiento(Date fechaNacimiento) {
this.fechaNacimiento = fechaNacimiento;
}
public Date getFechaNacimiento(){
return fechaNacimiento;
}
}

import java.util.Date;

Hay una Clase que se llama Date que est incluida en el paquete java.util para
que el entorno de ejecucin Java sepa donde encontrar esta Clase, nosotros
se lo tenemos que indicar con la palabra clave import

public abstract class Mascota {

En Java se sabe que una Clase es abstracta porque se utiliza la palabra


reservada abstract en la declaracin de la Clase

Date fechaNacimiento;

Docente: Ing. Martn Salcedo Quiones

Pagina: 140

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
A menudo los entornos de desarrollo cuando nos generan cdigo
automticamente a travs de sus Asistentes nos escriben la signatura
completa de la Clase, es decir el nombre de la Clase y al paquete al cual
pertenece. De esta forma la declaracin de esta Clase se vera as:
java.util.Date fechaNacimiento y no incluira la palabra clave import

public abstract void acariciar();

Como este mtodo es abstracto y por lo tanto no est implementado, no tiene


la llaves {} de abrir y cerrar tpica de todos los mtodos

public void setNombre(String nombre) {

En Java adems de las variables de instancia que estn visibles desde


cualquier punto de la Clase, tambin existen las variables locales que slo
tienen visibilidad dentro de su mbito, es decir, slo se puede llegar a ellas si
se est dentro del mismo bloque un bloque se delimita por los corchetes {},
cmo pueden ser los corchetes de la definicin de un mtodo a la variable
nombre que se encuentra en la declaracin del mtodo setNombre(String
nombre) tambin se le considera una variable local a pesar de que no est
entre dos corchetes {}

this.nombre = nombre;

La palabra clave this se est utilizando en esta ocasin para distinguir una
variable de instancia de una variable local.
Este es el cdigo correspondiente a la Clase Perro
public class Perro extends Mascota {
public void acariciar() {
System.out.println("Perro - acariciar(): agacho las orejas");
}
}
System.out.println("Perro - acariciar(): agacho las orejas");
Docente: Ing. Martn Salcedo Quiones

Pagina: 141

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Como ahora nos estamos refiriendo a una mascota concreta, sta enviar el
mensaje de que est agachando las orejas.
Este es el cdigo correspondiente a la Clase Gato
public class Gato extends Mascota {
public void acariciar() {
System.out.println("Gato - acariciar(): levanto la cola");
}
}
Ahora le aadimos el siguiente cdigo a la Clase Aplicacin
public class Aplicacion {
public static void main(String[] args) {
// Mascota m1 = new Mascota();
Perro p1 = new Perro();
p1.alimentar("Dog Chow");
p1.acariciar();
Gato g1 = new Gato();
g1.alimentar("Cat Chow");
g1.acariciar();
}
}

Perro p1 = new Perro();


Creamos una instancia de la Clase Perro que engloba a la Clase Mascota y
a la Clase Perro en una sola instancia que es referenciada a travs de la
variable de referencia p1

p1.alimentar("Dog Chow");
Fijmonos que en la salida provocada como respuesta a la invocacin de
este mtodo quien est respondiendo es la Mascota acercndose al Dog
Chow

Docente: Ing. Martn Salcedo Quiones

Pagina: 142

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

p1.acariciar();
Fijmonos que en la salida provocada como respuesta a la invocacin de
este mtodo quien est respondiendo es el Perro agachando las orejas

Gato g1 = new Gato();


Creamos una instancia de la Clase Gato que engloba a la Clase Mascota y
a la Clase Gato en una sola instancia que es referenciada a travs de la
variable de referencia g1

g1.alimentar("Cat Chow");
Fijmonos que en la salida provocada como respuesta a la invocacin de
este mtodo quien est respondiendo es la Mascota acercndose al Cat
Chow

g1.acariciar();
Fijmonos que en la salida provocada como respuesta a la invocacin de
este mtodo quien est respondiendo es el Gato levantando la cola

Y esta es la salida

Veamos a continuacin otro ejemplo, para lo cual se visualiza el siguiente


diagrama:

Docente: Ing. Martn Salcedo Quiones

Pagina: 143

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Figura es una clase abstracta porque no tienen sentido calcular su rea, pero si
del cuadrado o un crculo. Si una subclase de Figura no redefine rea(), deber
declararse tambin como clase abstracta.
De acuerdo al diagrama de clases, la programacin en Java sera:
abstract class Figura
{
protected doubl x;
protected doubl y;
public Figura(double x, double y)
{
this.x=x;
this.y=y;
}
public abstract double area();
}
class Circulo extends Figura
{
private double radio;
public Circulo(double x, double y, double radio)
{
Docente: Ing. Martn Salcedo Quiones

Pagina: 144

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
super(x,y);
this.radio=radio;
}
public double area()
{
return Math.PI * radio * radio;
}
}
class Cuadrado extends Figura
{
private double lado;
public Cuadrado(double x, double y, double lado)
{
super(x,y);
this.lado=lado;
}
public double area( )
{
return lado * lado;
}
}
public class FigurasGeometricas
{
public static void main(String[] args)throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tipo;
double radio, lado;
System.out.println("AREA DE UNA FIGURA GEOMETRICA");
System.out.println("-----------------------------");
System.out.print("Ingrese 1 si es circulo 2 si es cuafdrado: ");
tipo=Integer.parseInt(br.readLine());
if(tipo==1)
{
System.out.print("Ingrese el valor del radio: ");
radio=Double.parseDouble(br.readLine());
Docente: Ing. Martn Salcedo Quiones

Pagina: 145

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Circulo Cir=new Circulo(0,0,radio);
System.out.println("El area del circulo es: "+Cir.area());
}
if(tipo==2)
{
System.out.print("Ingrese el valor del lado: ");
lado=Double.parseDouble(br.readLine());
Cuadrado Cua=new Cuadrado(0,0,lado);
System.out.println("El area del cuadrado es: "+Cua.area());
}
}

EJECUTANDO LA APLICACIN EN NETBEANS


12. Crea un proyecto denominado: Sesion10_Aplicaciones

13. Ahora se observa el entorno de NetBeans listo para colocar la


programacin de la reciente aplicacin.

Docente: Ing. Martn Salcedo Quiones

Pagina: 146

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

14. Asi debe quedar luego de escribir las instrucciones de la ltima aplicacin

Docente: Ing. Martn Salcedo Quiones

Pagina: 147

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
15. Luego a proceder a ejecutar la aplicacin

Posteriormente dar clic en Ejecutar archivo

Indicar por ejemplo 1 que es crculo.luego te solcitar el valor del radio.


Finalmente se observar el valor del rea del circulo.

Docente: Ing. Martn Salcedo Quiones

Pagina: 148

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

INTERFACES Y HERENCIA MULTIPLE

El concepto de interface lleva un paso ms adelante la idea de las clases


abstractas. En Java una interface es una clase abstracta pura, es decir una
clase donde todos los mtodos son abstractos (no se implementa ninguno).
Permite al diseador de clases establecer la forma de una clase (nombres de
mtodos, listas de argumentos y tipos de retorno, pero no bloques de cdigo).
Una interface puede tambin contener datos miembro, pero estos son siempre
static y final. Una interface sirve para establecer un 'protocolo' entre clases.
Para crear una interface, se utiliza la palabra clave interface en lugar de class.
La interface puede definirse public o sin modificador de acceso, y tiene el
mismo significado que para las clases. Todos los mtodos que declara una
interface son siempre public.
Docente: Ing. Martn Salcedo Quiones

Pagina: 149

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Para indicar que una clase implementa los mtodos de una interface se utiliza
la palabra clave implements. El compilador se encargar de verificar que la
clase efectivamente declare e implemente todos los mtodos de la interface.
Una clase puede implementar ms de una interface.
Una interface se declara:
interface nombre_interface {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
...
}
Por ejemplo:
interface InstrumentoMusical {
void tocar();
void afinar();
String tipoInstrumento();
}
Y una clase que implementa la interface:
class InstrumentoViento extends Object implements InstrumentoMusical {
void tocar() { . . . };
void afinar() { . . .};
String tipoInstrumento() {}
}
class Guitarra extends InstrumentoViento {
String tipoInstrumento() {
return "Guitarra";
}
}

Docente: Ing. Martn Salcedo Quiones

Pagina: 150

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
La clase InstrumentoViento implementa la interface, declarando los mtodos y
escribiendo el cdigo correspondiente. Una clase derivada puede tambin
redefinir si es necesario alguno de los mtodos de la interface.
Referencias a Interfaces
Es posible crear referencias a interfaces, pero las interfaces no pueden ser
instanciadas. Una referencia a una interface puede ser asignada a cualquier
objeto que implemente la interface. Por ejemplo:
InstrumentoMusical instrumento = new Guitarra();
instrumento.play();
System.out.prinln(instrumento.tipoInstrumento());
InstrumentoMusical i2 = new InstrumentoMusical(); //error.No se puede instanciar
Extensin de interfaces
Las interfaces pueden extender otras interfaces y, a diferencia de las clases,
una interface puede extender ms de una interface. La sintaxis es:
interface nombre_interface extends nombre_interface , . . . {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
...
}

Agrupaciones de constantes
Dado que, por definicin, todos los datos miembros que se definen en una
interface son static y final, y dado que las interfaces no pueden instanciarse
resultan una buena herramienta para implantar grupos de constantes. Por
ejemplo:
public interface Meses {
int ENERO = 1 , FEBRERO = 2 . . . ;
String [] NOMBRES_MESES = { " " , "Enero" , "Febrero" , . . . };
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 151

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Esto puede usarse simplemente:


System.out.println(Meses.NOMBRES_MESES[ENERO]);

Un ejemplo casi real


El ejemplo mostrado a continuacin es una simplificacin de cmo funciona
realmente la gestin de eventos en el sistema grfico de usuario soportado por
el API de Java (AWT o swing). Se han cambiado los nombres y se ha
simplificado para mostrar un caso real en que el uso de interfaces resuelve un
problema concreto.
Supongamos que tenemos una clase que representa un botn de accin en un
entorno grfico de usuario (el tpico botn de confirmacin de una accin o de
cancelacin). Esta clase pertenecer a una amplia jerarqua de clases y tendr
mecanismos complejos de definicin y uso que no son objeto del ejemplo. Sin
embargo podramos pensar que

la clase Boton tiene miembros como los

siguientes.
class Boton extends . . . {
protected int x , y, ancho, alto; // posicion del boton
protected String texto; // texto del boton
Boton(. . .) {
...
}
void dibujar() { . . .}
public void asignarTexto(String t) { . . .}
public String obtenerTexto() { . . .)
...
}
Lo que aqu nos interesa es ver lo que sucede cuando el usuario, utilizando el
ratn pulsa sobre el botn. Supongamos que la clase Boton tiene un mtodo,
de nombre por ejemplo click(), que es invocado por el gestor de ventanas
Docente: Ing. Martn Salcedo Quiones

Pagina: 152

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
cuando ha detectado que el usuario ha pulsado el botn del ratn sobre l. El
botn deber realizar alguna accin como dibujarse en posicin 'pulsado' (si
tiene efectos de tres dimensiones) y adems, probablemente, querr informar a
alguien de que se ha producido la accin del usuario. Es en este mecanismo
de 'notificacin' donde entra el concepto de interface. Para ello definimos una
interface Oyente de la siguiente forma:
interface Oyente {
void botonPulsado(Boton b);
}
La interface define un nico mtodo botonPulsado. La idea es que este mtodo
sea invocado por la clase Boton cuando el usuario pulse el botn. Para que
esto sea posible en algn momento hay que notificar al Boton quien es el
Oyente que debe ser notificado. La clase Boton quedara:
class Boton extends . . . {
...
private Oyente oyente;
void registrarOyente(Oyente o) {
oyente = o;
}
void click() {
...
oyente.botonPulsado(this);
}
}
El mtodo registrarOyente sirve para que alguien pueda 'apuntarse' como
receptor de las acciones del usuario. Obsrvese que existe una referencia de
tipo Oyente. A Boton no le importa que clase va a recibir su notificacin.
Simplemente le importa que implante la interface Oyente para poder invocar el
mtodo botonPulsado. En el mtodo click se invoca este mtodo. En el ejemplo
se le pasa como parmetro una referencia al propio objeto Boton. En la
realidad lo que se pasa es un objeto 'Evento' con informacin detallada de lo
que ha ocurrido.
Docente: Ing. Martn Salcedo Quiones

Pagina: 153

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Con todo esto la clase que utiliza este mecanismo podra tener el siguiente
aspecto:
class miAplicacion extends . . . implements Oyente {
public static main(String [] args) {
new miAplicacion(. . .);
...
}
...
miAplicacion(. . .) {
...
Boton b = new Boton(. . .);
b.registrarOyente(this);
}
...
void botonPulsado(Boton x) {
// procesar click
...
}
}
Obsrvese en el mtodo registrarOyente que se pasa la referencia this que en
el lado de la clase Boton es recogido como una referencia a la interface
Oyente. Esto es posible porque la clase miAplicacion implementa la interface
Oyente. En trminos clsicos de herencia miAplicacion ES un Oyente.
Veamos el ejemplo que se hizo al final de la sesin anterior. Si no
estuvisemos interesados en conocer la posicin de una Figura , podramos
eliminar por completo su implementacin y convertir Figura en una interfaz.

Docente: Ing. Martn Salcedo Quiones

Pagina: 154

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

En la declaracin de una interfaz, lo nico que puede aparecer son


declaraciones de mtodos (su nombre y signatura, sin su implementacion) y
definiciones de constantes simblicas. Una interfaz no encapsula datos, slo
define cules son los mtodos que han de implementar los objetos de aquellas
clases que implementan interfaz.
public class Circulo implements Figura
{
private double radio;
public Circulo (double radio)
{
this.radio=radio;
}
public double area()
{
return Math.PI * radio * radio;
}
}
public class Cuadrado implements Figura
Docente: Ing. Martn Salcedo Quiones

Pagina: 155

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
{
private double lado;
public Cuadrado (double lado)
{
this.lado=lado;
}
public double area()
{
return lado * lado;
}
}
La clase debe implementar todos los mtodos definidos por la interfaz o
declararse.
HERENCIA MULTIPLE DE INTERFACES
Una clase puede implementar varios interfaces simultneamente, pese a que,
en Java, una clase puede heredar de otra clase (herencia simple de
implementacin, mltiple de interfaces).

public abstract class Figura


{
Docente: Ing. Martn Salcedo Quiones

Pagina: 156

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public abstract double area();
}
interface Dibujable
{
public void dibujar()
}
interface Rotable
{
public void rotar(double grados);
}
public class Circulo extends Figura implements Dibujable, Rotable
{
private double radio;
public Circulo(double x, double y, double radio)
{
super(x,y);
this.radio=radio;
}
public double area()
{
return Math.PI * radio * radio;
}
public void dibujar()
{
System.out.println("Dibujaria un circulo");
}
public void rotar(double grados)
{
System.err.print("Se rotara el circulo en "+grados);
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 157

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
}
public class Cuadrado extends Figura implements Dibujable, Rotable
{
private double lado;
public Cuadrado(double x, double y, double lado)
{
super(x,y);
this.lado=lado;
}
public double area( )
{
return lado * lado;
}
public void dibujar()
{
System.out.println("Dibujaria un cuadrado");
}
public void rotar(double grados)
{
System.out.println("Se rotara el cuadrado en "+grados+ grados);
}
}
public class UsandoInterfaces
{
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int tipo;
Docente: Ing. Martn Salcedo Quiones

Pagina: 158

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
double radio, lado;
System.out.println(" AREA, DIBUJO Y ROTACION DE UNA FIGURA
GEOMETRICA");
System.out.println("------------------------------------------------");
System.out.print("Ingrese 1 si es circulo 2 si es cuafdrado: ");
tipo=Integer.parseInt(br.readLine());
if(tipo==1)
{
System.out.print("Ingrese el valor del radio: ");
radio=Double.parseDouble(br.readLine());
Circulo Cir=new Circulo(0,0,radio);
System.out.println("El area del circulo es: "+Cir.area());
Cir.dibujar();
Cir.rotar(45);
}
if(tipo==2)
{
System.out.print("Ingrese el valor del lado: ");
lado=Double.parseDouble(br.readLine());
Cuadrado Cua=new Cuadrado(0,0,lado);
System.out.println("El area del cuadrado es: "+Cua.area());
Cua.dibujar();
Cua.rotar(30);
}
}

Docente: Ing. Martn Salcedo Quiones

Pagina: 159

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
EJECUTANDO LA APLICACIN EN NETBEANS
1. Crea un proyecto denominado: Sesion11_Aplicaciones.

Se crea por defecto la clase UsandoInterfaces.


2. Ahora se observa el entorno de NetBeans listo para colocar la
programacin de la reciente aplicacin.

3. Se procede a escribir el cdigo de la programacin, quedando as:


Docente: Ing. Martn Salcedo Quiones

Pagina: 160

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

4. Luego proceder a ejecutar la aplicacin.

Posteriormente dar clic en Ejecutar archivo.

Docente: Ing. Martn Salcedo Quiones

Pagina: 161

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Indicar por ejemplo 2 que es cuadrado.luego te solcitar el valor del lado.
Finalmente se observar el valor del rea del circulo, un mensaje sobre
dibujo y otro mensaje de rotacin.

Docente: Ing. Martn Salcedo Quiones

Pagina: 162

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

POLIMORFISMO

Mediante el polimorfismo, se pueden escribir programas que procesen


genricamente como objetos de superclase- objetos de todas las clases
existentes en una jerarqua. Las clases que no existen durante el desarrollo de
los programas se pueden agregar con poca o ninguna modificacin de la parte
genrica del programa, en tanto esas clases formen parte de la jerarqua que
se est procesando genricamente.
Ejemplos:
import java.io.*;
abstract class Empleado{
protected String apellidos;
protected String nombres;
public Empleado(String ape, String nom)
{
apellidos=ape;
Docente: Ing. Martn Salcedo Quiones

Pagina: 163

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
nombres=nom;
}
public void setApellidos(String ape)
{
apellidos=ape;
}
public void setNombres(String nom)
{
nombres = nom;
}
public String getApellidos()
{
return apellidos;
}
public String getNombres()
{
return nombres;
}
abstract double ganancias();
}

final class Jefe extends Empleado{


public double salario;
public Jefe(String ape, String nom,double s)
{
super(ape,nom);
salario=s;
}
public void setSalario(double s)
{
salario=s;
Docente: Ing. Martn Salcedo Quiones

Pagina: 164

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
}
public double getSalario()
{
return salario;
}
public double ganancias()
{
return salario;
}
public String toString()
{
return "Jefe : "+apellidos+" "+nombres;
}
}
final class EmpleadoPorComision extends Empleado
{
private double salarioBase; // salario Base
private double comisionPorArticulo; // comision por articulo vendido
private int cantidadDeArticulos; // cantidad de articulos vendidos
public EmpleadoPorComision(String ape, String nom,double sb, double com, int
cant)
{
super(ape,nom);
salarioBase=sb;
comisionPorArticulo=com;
cantidadDeArticulos=cant;
}
public void setSalarioBase(double sb)
{
salarioBase=sb;
}
public void setComisionPorArticulo(double com)
Docente: Ing. Martn Salcedo Quiones

Pagina: 165

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
{
comisionPorArticulo=com;
}
public void setCantidadDeArticulos(int cant)
{
cantidadDeArticulos=cant;
}
public double getSalarioBase()
{
return salarioBase;
}
public double getComisionPorArticulo()
{
return comisionPorArticulo;
}
public int getCantidad()
{
return cantidadDeArticulos;
}
public String toString()
{
return "Empleado por Comision : "+apellidos+" "+nombres;
}
public double ganancias()
{
return salarioBase+comisionPorArticulo*cantidadDeArticulos;
}
}
final class EmpleadoADestajo extends Empleado{
private double salarioPorPieza;
private int cantidad;
Docente: Ing. Martn Salcedo Quiones

Pagina: 166

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public EmpleadoADestajo(String ape, String nom,double sp, int cant)
{
super(ape,nom);
salarioPorPieza=sp;
cantidad=cant;
}
public void setSalarioPorPieza(double sp)
{
salarioPorPieza = sp;
}
public void setCantidad(int cant)
{
cantidad=cant;
}
public double getSalarioPorPieza()
{
return salarioPorPieza;
}
public double getCantidad()
{
return cantidad;
}
public double ganancias()
{
return salarioPorPieza*cantidad;
}
public String toString()
{
return "Empleado a Destajo : "+apellidos+" "+nombres;
}
}
final class EmpleadoPorHora extends Empleado
Docente: Ing. Martn Salcedo Quiones

Pagina: 167

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
{
protected double salarioPorHora;
protected double horasTrabajadas;
public EmpleadoPorHora(String ape, String nom, double sh, double ht)
{
super(ape,nom);
salarioPorHora= sh;
horasTrabajadas=ht;
}
public void setSalarioPorHora(double sh)
{
salarioPorHora=sh;
}
public void setHorasTrabajadas(double ht)
{
horasTrabajadas=ht;
}
public double getSalarioPorHora()
{
return salarioPorHora;
}
public double getHorasTrabajadas()
{
return horasTrabajadas;
}
public String toString()
{
return "Empleado por Hora : "+apellidos+" "+nombres;
}
public double ganancias()
{
return salarioPorHora*horasTrabajadas;
Docente: Ing. Martn Salcedo Quiones

Pagina: 168

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
}
}
public class PruebaEmpleado{
public static void main(String args[])
{
Empleado E;
Jefe J=new Jefe("Torres","Marcelino",2500);
EmpleadoPorComision C=new EmpleadoPorComision("Zavaleta","Juan",300,4,200);

EmpleadoPorHora H = new
EmpleadoPorHora("Narvaez","Robinson",10,40);

EmpleadoADestajo D = new
EmpleadoADestajo("Marin","Alejandro",20,5);
E = J;
System.out.println(E.toString()+" gano "+E.ganancias());
E = C;
System.out.println(E.toString()+" gano "+E.ganancias());
E = H;
System.out.println(E.toString()+" gano "+E.ganancias());
E = D;
System.out.println(E.toString()+" gano "+E.ganancias());
}
}
/*
La Linea
E = J;
Coloca en la referencia de la Superclase E una referencia al objeto J de la
subclase Jefe. Esto es precisamente lo que debemos hacer para lograr un
comportamiento Polimrfico.
Docente: Ing. Martn Salcedo Quiones

Pagina: 169

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

La expresin:
E.toString()
Innvoca al mtodo toString() del objeto al que E hace referencia.
El sistema invoca al mtodo toString() del objeto de la subclase, precisamente
lo que se llama comportamiento polimrfico. Esta llamada de mtodo es un
ejemplo de ligado dinmico de mtodos; la decisin respecto a cul mtodo
invocar se aplaza hasta el momento de ejecucin.
La llamada al Metodo
E.ganancias()
Invoca al mtodo ganancias del objeto al que E hace referencia. El sistema
invoca el mtodo ganancias del objeto de la subclase en lugar del mtodo
ganancias de la superclase. Esto es otro ejemplo de ligado dinmico de
mtodos.
import java.io.*;
abstract class Figura{
public double area()
{
return 0;
}
public double volumen()
{
return 0;
}
public abstract String getNombre();
}
class Punto extends Figura{
protected double x;
Docente: Ing. Martn Salcedo Quiones

Pagina: 170

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
protected double y;
public Punto(double a, double b)
{
x=a;
y=b;
}
public void setX(double x)
{
this.x=x;
}
public void setY(double y)
{
this.y=y;
}
public double getX()
{
return x;
}
public double getY()
{
return y;
}
public String toString()
{
return "("+x+","+y+")";
}
public String getNombre()
{
return "Punto";
}
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 171

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

class Circulo extends Punto{


protected double radio;
public Circulo(double a, double b, double r)
{
super(a,b);
radio=r;
}
public void setRadio(double r)
{
radio=r;
}
public double getRadio()
{
return radio;
}
public double area()
{
return Math.PI*Math.pow(radio,2);
}
public String toString()
{
return "Centro "+ super.toString()+", Radio = "+radio;
}
public String getNombre()
{
return "Circulo";
}
}
class Cilindro extends Circulo{
protected double altura;
Docente: Ing. Martn Salcedo Quiones

Pagina: 172

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public Cilindro(double a,double b, double r, double h)
{
super(a,b,r);
altura=h;
}
public void setAltura(double h)
{
altura=h;
}
public double getAltura()
{
return altura;
}
public double area()
{
return 2*super.area()+2*Math.PI*radio*altura;
}

public double volumen()


{
return super.area()*altura;
}
public String toString()
{
return super.toString()+ "; Altura = "+altura;
}
public String getNombre()
{
return "Cilindro";
}
}
public class PruebaFigura{
Docente: Ing. Martn Salcedo Quiones

Pagina: 173

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public static void main(String args[]) throws IOException
{
Punto p = new Punto(3,4);
Circulo c = new Circulo(12,20,10);
Cilindro k = new Cilindro (100,100,50,25);
Figura F[] = new Figura[3];
F[0]=p;
F[1]=c;
F[2]=k;
System.out.println(p.getNombre()+" : "+p);
System.out.println(c.getNombre()+" : "+c);
System.out.println(k.getNombre()+" : "+k);

// Procesamos ahora el arreglo de Figuras e imprimimos el nombre, area y


volumen

// de cada objeto
for(int i=0;i<3;i++)
{
System.out.println();
System.out.println(F[i].getNombre()+" : "+F[i]);
System.out.println("Area ="+F[i].area());
System.out.println("Volumen"+F[i].volumen());
System.out.println("=============");
}
}
}

EJECUTANDO LA APLICACIN EN NETBEANS


1. Crea un proyecto denominado: Sesion12_Aplicaciones.

Docente: Ing. Martn Salcedo Quiones

Pagina: 174

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

2. Ahora se observa el entorno de NetBeans listo para colocar la


programacin de la reciente aplicacin.

3. Se procede a escribir la programacin de la ltima aplicacin, quedando


as:

Docente: Ing. Martn Salcedo Quiones

Pagina: 175

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

4. Luego proceder a ejecutar la aplicacin.

Posteriormente dar clic en Ejecutar archivo

Docente: Ing. Martn Salcedo Quiones

Pagina: 176

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

AUTOEVALUACION
a)

Responde a las siguientes preguntas:


1. Usando herencia de clases se logra heredar los atributos y mtodos de
una superclase. (verdaero o falso): ___________________
2. Los miembros protected de una superclase slo estn accesibles para los
mtodos de la superclase, los mtodos de la subclases y los mtodos de
otras clases del mismo paquete (verdadero falso): __________________
3. Se le denomina clase abstracta pura cuando todos sus mtodos son
abstractos, ste concepto se refiere a: __________________
4. Se puede escribir programas que procesen genricamente objetos de
todas las clases existentes en una jerarqua, se refiere a _______________
b) Desarrolla las siguientes aplicaciones:
1. Crea una clase denominada Curso con los atributos codigocur y
nombrecur. Luego aplica herencia y crea la clase Curso_Extension a partir
de la clase Curso con los atributos horas_clase y costocur. Tambin crea la
clase Curso_Carrera con los atributos nombrecarrera y ciclo. Luego crea
objetos a partir de las subclases
2. Una empresa vende equipos celulares, que puede ser utilizados
nicamente para CLARO o para MOVISTAR. Se desea tener informacin
de la marca, el modelo y el costo del equipo. Adems se puede adquirir
adicionalmente el chip teniendo un descuento del 10% del costo del chip si
Docente: Ing. Martn Salcedo Quiones

Pagina: 177

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
es comprado conjuntamente con el celular. Por la compra de cualquier
equipo, el cliente puede adquirir un seguro de prdida o robo pagando el
15% del costo del equipo. El pago por el equipo celular puede ser en
efectivo o mcon tarjeta. Si el pago es con tarjeta se incrementa el costo del
equipo en un 2%. Utiliza una programacin usando clases abstracta y
herencia para calcular el precio del equipo y el monto del pago del seguro
en caso decidiera acogerse. Usar clase abstracta.
3. Aplicando polimorfismo, implementar los atributos, mtodos (con las
validaciones correspondientes) y constructores de las siguientes clases con
sus atributos indicados entre parntesis: Figura (smbolo), Rectngulo (filas:
entero >1, columnas: entero>1), Tringulo (filas: entero>1) y Rombo (filas:
entero>2 e impar). Crear el mtodo dibujar para cada caso. Crear la clase
TestFiguras, que pruebe los mtodos y constructores implementados. Como
ejemplo de la ejecucin del mtodo dibujar para cada objeto creado, en
caso que se haya asignado como smbolo de la figura al asterisco (*) y los
valores para las filas y columnas indicados a continuacin, se tendra:
Objeto Rectngulo: Filas=2 Columnas=6
******
******
Objeto Tringulo: Filas=3
*
***
*****
Objeto Rombo: Filas=7
*
***
*****
*******
*****
***
*

Docente: Ing. Martn Salcedo Quiones

Pagina: 178

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

CAPITULO IV
PAQUETES, EXCEPCIONES Y DESARROLLO DE
UN PROYECTO

Docente: Ing. Martn Salcedo Quiones

Pagina: 179

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

PAQUETES

Clasula package
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 clusula 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;
Docente: Ing. Martn Salcedo Quiones

Pagina: 180

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
...
class miClase {
...
declara que la clase miClase pertenece al package miPackage.
La clasula package es opcional. Si no se utiliza, las clases declaradas en el
archivo fuente no pertenecen a ningn package concreto, sino que pertenecen
a un package por defecto sin nombre.
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. Tambin resulta importante por

la

implicacin que los packages tienen en los modificadores de acceso, que se


explican en un captulo posterior.
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.

Docente: Ing. Martn Salcedo Quiones

Pagina: 181

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Si esto no es as, es necesario hacer accesible el espacio de nombres donde
est definida la clase Punto a nuestra nueva clase. Esto se hace con la
clausula import. Supongamos que la clase Punto estuviera definida de esta
forma:
package GeometriaBase;
class Punto {
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;
Tambin es posible hacer accesibles los nombres de un package sin usar la
clausula import calificando completamente los nombres de aquellas clases
pertenecientes a otros packages. Por ejemplo:
package GeometriaAmpliada;
class Circulo {
GeometriaBase.Punto centro;
...
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 182

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Sin embargo si no se usa import es necesario especificar el nombre del


package cada vez que se usa el nombre 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. Sin embargo, no tiene la
implicacin de 'importar' o copiar cdigo fuente u objeto alguno. En una clase
puede haber tantas sentencias import como sean necesarias. Las clusulas
import se colocan despus de la clusula package (si es que existe) y antes de
las definiciones de las clases.
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. Cuando se utiliza esta estructura se habla de


packages y subpackages. En el ejemplo misPackages es el Package base,
Geometria es un subpackage de misPackages y Base es un subpackage de
Geometria.
De esta forma se pueden tener los packages ordenados segn una jerarqua
equivalente a un sistema de archivos jerrquico.
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.
Ubicacin de packages en el sistema de archivos
Docente: Ing. Martn Salcedo Quiones

Pagina: 183

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Adems del significado lgico descrito hasta ahora, los packages tambin
tienen un significado fsico que sirve para almacenar los mdulos ejecutables
(ficheros con extensin .class) en el sistema de archivos del ordenador.
Supongamos que definimos una clase de nombre miClase que pertenece a un
package de nombre misPackages.Geometria.Base. Cuando la JVM vaya a
cargar en memoria miClase
miClase.class)

en

un

buscar el mdulo ejecutable (de nombre


directorio

en

la

ruta

de

acceso

misPackages/Geometria/Base. Est ruta deber existir y estar accesible a la


JVM para que encuentre las clases. En el captulo siguiente se dan detalles
sobre compilacin y ejecucin de programas usando el compilador y la
mquina virtural distribuida por SUN Microsystems (JDK).
Si una clase no pertenece a ningn package (no existe clausula package ) se
asume que pertenece a un package por defecto sin nombre, y la JVM buscar
el archivo .class en el directorio actual.
Para que una clase pueda ser usada fuera del package donde se defini debe
ser declarada con el modificador de acceso public, de la siguiente forma:

package GeometriaBase;
public class Punto {
int x , y;
}
Si una clase no se declara public slo puede ser usada por clases que
pertenezcan al mismo package

Docente: Ing. Martn Salcedo Quiones

Pagina: 184

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

MANEJO DE EXCEPCIONES E HILOS

El trmino excepcin es un forma corta da la frase "suceso excepcional" y


puede definirse de la siguiente forma.
Definicin:
Una excepcin es un evento que ocurre durante la ejecucin del programa que
interrumpe el flujo normal de las sentencias.
Muchas clases de errores pueden utilizar excepciones -- desde serios
problemas de hardware, como la avera de un disco duro, a los simples errores
de programacin, como tratar de acceder a un elemento de un array fuera de
sus lmites. Cuando dicho error ocurre dentro de un mtodo Java, el mtodo
Docente: Ing. Martn Salcedo Quiones

Pagina: 185

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
crea un objeto 'exception' y lo maneja fuera, en el sistema de ejecucin. Este
objeto contiene informacin sobre la excepcin, incluyendo su tipo y el estado
del programa cuando ocurri el error. El sistema de ejecucin es el
responsable de buscar algn cdigo para manejar el error. En terminologa
java, crear una objeto exception y manejarlo por el sistema de ejecucin se
llama lanzar una excepcin.
Despus de que un mtodo lance una excepcin, el sistema de ejecucin entra
en accin para buscar el manejador de la excepcin. El conjunto de "algunos"
mtodos posibles para manejar la excepcin es el conjunto de mtodos de la
pila de llamadas del mtodo donde ocurri el error. El sistema de ejecucin
busca hacia atrs en la pila de llamadas, empezando por el mtodo en el que
ocurri el error, hasta que encuentra un mtodo que contiene el "manejador de
excepcin" adecuado.
Un manejador de excepcin es considerado adecuado si el tipo de la excepcin
lanzada es el mismo que el de la excepcin manejada por el manejador. As la
excepcin sube sobre la pila de llamadas hasta que encuentra el manejador
apropiado y una de las llamadas a mtodos maneja la excepcin, se dice que
el manejador de excepcin elegido captura la excepcin.
Si el sistema de ejecucin busca exhaustivamente por todos los mtodos de la
pila de llamadas sin encontrar el manejador de excepcin adecuado, el sistema
de ejecucin finaliza (y consecuentemente y el programa Java tambin).
import java.awt.*;
import java.applet.Applet;
public class HolaIte extends Applet {
private int i = 0;
private String Saludos[] = {
"Hola Mundo!",
"HOLA Mundo!",
"HOLA MUNDO!!"
};
Docente: Ing. Martn Salcedo Quiones

Pagina: 186

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

public void paint( Graphics g ) {


g.drawString( Saludos[i],25,25 );
i++;
}
}
Normalmente, un programa termina con un mensaje de error cuando se lanza
una excepcin. Sin embargo, Java tiene mecanismos para excepciones que
permiten ver qu excepcin se ha producido e intentar recuperarse de ella.
Vamos a reescribir el mtodo paint() de nuestra versin iterativa del saludo:
public void paint( Graphics g ) {
try {
g.drawString( Saludos[i],25,25 );
} catch( ArrayIndexOutOfBoundsException e ) {
g.drawString( "Saludos desbordado",25,25 );
} catch( Exception e ) {
// Cualquier otra excepcin
System.out.println( e.toString() );
} finally {
System.out.println( "Esto se imprime siempre!" );
}
i++;
}
La palabra clave finally define un bloque de cdigo que se quiere que sea
ejecutado siempre, de acuerdo a si se captur la excepcin o no. En el ejemplo
anterior, la salida en la consola, con i=4 sera:
Saludos desbordado
Esto se imprime siempre!
Cuando se produce un error se debera generar, o lanzar, una excepcin. Para
que un mtodo en Java, pueda lanzar excepciones, hay que indicarlo
expresamente.
Docente: Ing. Martn Salcedo Quiones

Pagina: 187

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
void MetodoAsesino() throws NullPointerException,CaidaException

Se pueden definir excepciones propias, no hay por qu limitarse a las


predefinidas; bastar con extender la clase Exception y proporcionar la
funcionalidad extra que requiera el tratamiento de esa excepcin.
Tambin pueden producirse excepciones no de forma explcita como en el caso
anterior, sino de forma implcita cuando se realiza alguna accin ilegal o no
vlida.
Las excepciones, pues, pueden originarse de dos modos: el programa hace
algo ilegal (caso normal), o el programa explcitamente genera una excepcin
ejecutando la sentencia throw (caso menos normal). La sentencia throw tiene la
siguiente forma:
throw ObtejoExcepction;

El objeto ObjetoException es un objeto de una clase que extiende la clase


Exception.
El siguiente cdigo de ejemplo origina una excepcin de divisin por cero:
class melon {
public static void main( String[] a ) {
int i=0, j=0, k;
k = i/j;
}

// Origina un error de division-by-zero

}
Si compilamos y ejecutamos esta aplicacin Java, obtendremos la siguiente
salida por pantalla:
> javac melon.java
> java melon
java.lang.ArithmeticException: / by zero
at melon.main(melon.java:5)
Las excepciones predefinidas, como ArithmeticException, se conocen como
excepciones runtime. Actualmente, como todas las excepciones son eventos
Docente: Ing. Martn Salcedo Quiones

Pagina: 188

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
runtime, sera mejor llamarlas excepciones irrecuperables. Esto contrasta con
las excepciones que generamos explcitamente, que suelen ser mucho menos
severas y en la mayora de los casos podemos recuperarnos de ellas. Por
ejemplo, si un fichero no puede abrirse, preguntamos al usuario que nos
indique otro fichero; o si una estructura de datos se encuentra completa,
podremos sobreescribir algn elemento que ya no se necesite.
Los nombres de las excepciones indican la condicin de error que representan.
Las siguientes son las excepciones predefinidas ms frecuentes que se
pueden encontrar:
ArithmeticException
Las excepciones aritmticas son tpicamente el resultado de una divisin por 0:
int i = 12 / 0;

NullPointerException
Se produce cuando se intenta acceder a una variable o mtodo antes de ser
definido:
class Hola extends Applet {
Image img;
paint( Graphics g ) {
g.drawImage( img,25,25,this );
}
}
IncompatibleClassChangeException
El intento de cambiar una clase afectada por referencias en otros objetos,
especficamente cuando esos objetos todava no han sido recompilados.
ClassCastException
El intento de convertir un objeto a otra clase que no es vlida.
Docente: Ing. Martn Salcedo Quiones

Pagina: 189

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
y = (Prueba)x;
// donde
x no es de tipo Prueba
NegativeArraySizeException
Puede ocurrir si hay un error aritmtico al intentar cambiar el tamao de un
array.
OutOfMemoryException
No debera producirse nunca! El intento de crear un objeto con el operador
new ha fallado por falta de memoria. Y siempre tendra que haber memoria
suficiente porque el garbage collector se encarga de proporcionarla al ir
liberando objetos que no se usan y devolviendo memoria al sistema.
NoClassDefFoundException
Se referenci una clase que el sistema es incapaz de encontrar.
ArrayIndexOutOfBoundsException
Es la excepcin que ms frecuentemente se produce. Se genera al intentar
acceder a un elemento de un array ms all de los lmites definidos
inicialmente para ese array.

THREADS Y MULTITHREADING
Considerando el entorno multithread, cada thread (hilo, flujo de control del
programa) representa un proceso individual ejecutndose en un sistema. A
veces se les llama procesos ligeros o contextos de ejecucin. Tpicamente,
cada thread controla un nico aspecto dentro de un programa, como puede ser
supervisar la entrada en un determinado perifrico o controlar toda la
entrada/salida del disco. Todos los threads comparten los mismos recursos, al
contrario que los procesos en donde cada uno tiene su propia copia de cdigo
y datos (separados unos de otros). Grficamente, los threads se parecen en su
funcionamiento a lo que muestra la figura siguiente:

Docente: Ing. Martn Salcedo Quiones

Pagina: 190

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

Programas de flujo nico


Un programa de flujo nico o mono-hilvanado (single-thread) utiliza un nico
flujo de control (thread) para controlar su ejecucin. Muchos programas no
necesitan la potencia o utilidad de mltiples flujos de control. Sin necesidad de
especificar explcitamente que se quiere un nico flujo de control, muchos de
los applets y aplicaciones son de flujo nico.
Por ejemplo, en nuestra aplicacin estndar de saludo:

public class HolaMundo {


static public void main( String args[] ) {
System.out.println( "Hola Mundo!" );
}
}
Aqu, cuando se llama a main(), la aplicacin imprime el mensaje y termina.
Esto ocurre dentro de un nico thread.
Programas de flujo mltiple
En nuestra aplicacin de saludo, no vemos el thread que ejecuta nuestro
programa. Sin embargo, Java posibilita la creacin y control de threads
explcitamente. La utilizacin de threads en Java, permite una enorme
flexibilidad a los programadores a la hora de plantearse el desarrollo de
aplicaciones. La simplicidad para crear, configurar y ejecutar threads, permite
que se puedan implementar muy poderosas y portables aplicaciones/applets
que no se puede con otros lenguajes de tercera generacin. En un lenguaje
orientado a Internet como es Java, esta herramienta es vital.

Docente: Ing. Martn Salcedo Quiones

Pagina: 191

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Si se ha utilizado un navegador con soporte Java, ya se habr visto el uso de
mltiples threads en Java. Habr observado que dos applet se pueden ejecutar
al mismo tiempo, o que puede desplazar la pgina del navegador mientras el
applet contina ejecutndose. Esto no significa que el applet utilice mltiples
threads, sino que el navegador es multithreaded.
Las aplicaciones (y applets) multithreaded utilizan muchos contextos de
ejecucin para cumplir su trabajo. Hacen uso del hecho de que muchas tareas
contienen subtareas distintas e independientes. Se puede utilizar un thread
para cada subtarea.
Mientras que los programas de flujo nico pueden realizar su tarea ejecutando
las subtareas secuencialmente, un programa multithreaded permite que cada
thread comience y termine tan pronto como sea posible. Este comportamiento
presenta una mejor respuesta a la entrada en tiempo real.
Vamos a modificar nuestro programa de saludo creando tres threads
individuales, que imprimen cada uno de ellos su propio mensaje de saludo,
MultiHola.java:
// Definimos unos sencillos threads. Se detendrn un rato
// antes de imprimir sus nombres y retardos
class TestTh extends Thread {
private String nombre;
private int retardo;
// Constructor para almacenar nuestro nombre
// y el retardo
public TestTh( String s,int d ) {
nombre = s;
retardo = d;
}
// El metodo run() es similar al main(), pero para
// threads. Cuando run() termina el thread muere
public void run() {
// Retasamos la ejecucin el tiempo especificado
Docente: Ing. Martn Salcedo Quiones

Pagina: 192

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
try {
sleep( retardo );
} catch( InterruptedException e ) {
;
}
// Ahora imprimimos el nombre
System.out.println( "Hola Mundo! "+nombre+" "+retardo );
}
}
public class MultiHola {
public static void main( String args[] ) {
TestTh t1,t2,t3;
// Creamos los threads
t1 = new TestTh( "Thread 1",(int)(Math.random()*2000) );
t2 = new TestTh( "Thread 2",(int)(Math.random()*2000) );
t3 = new TestTh( "Thread 3",(int)(Math.random()*2000) );
// Arrancamos los threads
t1.start();
t2.start();
t3.start();
}
}
PROYECTO: TIENDA
Este proyecto desarrollado con programacin en Java usando el entorno de
desarrollo NetBeans consta de 5 archivos de extensin java:
Almacen.java
DetallePedido.java
Pedido.java
Producto.java
Sistema_Tienda.java

Docente: Ing. Martn Salcedo Quiones

Pagina: 193

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Sistema_Tienda.java contiene:
package proyecto_tienda;
import java.io.*;
public class Sistema_Tienda
{
public static int mostrarMenuPrincipal()throws IOException
{
int op;
BufferedReader
InputStreamReader(System.in));

br

new

BufferedReader(new

System.out.println("MENU PRINCIPAL");
System.out.println("==============");
System.out.println("");
System.out.println("1. Adicionar Almacen");
System.out.println("2. Mantenimiento de Productos");
System.out.println("3. Realizar Pedidos");
System.out.println("4. Listar Productos");
System.out.println("5. Listar Pedidos");
System.out.println("6. Salir");
System.out.println("");
System.out.print("Ingresa una opcion: ");
op=Integer.parseInt(br.readLine());
return op;
}
public static int mostrarMenuProductos()throws IOException
{
int op;
BufferedReader
InputStreamReader(System.in));

br

new

BufferedReader(new

System.out.println("MENU PARA PRODUCTOS");


System.out.println("===================");
System.out.println("");
Docente: Ing. Martn Salcedo Quiones

Pagina: 194

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
System.out.println("1. Adicionar Producto");
System.out.println("2. Modificar Producto");
System.out.println("3. Salir");
System.out.println("");
System.out.print("Ingresa una opcion: ");
op=Integer.parseInt(br.readLine());
return op;
}

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


{
BufferedReader
InputStreamReader(System.in));

br

new

BufferedReader(new

String nomalmacen, nompro;


int rpta=1, cant, opcion, r=0, numpro;
float pre;
Almacen oA= null;
Producto p;
do
{
opcion=mostrarMenuPrincipal();
switch (opcion)
{
case 1:
System.out.print("Ingrese el nombre del almacen: ");
nomalmacen=br.readLine();
oA= new Almacen(nomalmacen);
if(oA!=null)
System.out.println("Almacen creado ...");
break;
case 2:
do
{
Docente: Ing. Martn Salcedo Quiones

Pagina: 195

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
r=mostrarMenuProductos();
switch(r)
{
case 1:
System.out.println("");
System.out.println("INGRESO DE PRODUCTOS");
System.out.println("====================");
do
{
System.out.print("CODIGO DEL PRODUCTO: ");
numpro=Integer.parseInt(br.readLine());
System.out.print("NOMBRE: ");
nompro=br.readLine();
System.out.print("STOCK: ");
cant=Integer.parseInt(br.readLine());
System.out.print("PRECIO: ");
pre=Float.parseFloat(br.readLine());
System.out.print("Desea ingresar los datos de otro
producto? (Si=1, No=0): ");
rpta=Integer.parseInt(br.readLine());
System.out.println("");
//Creacion del Objeto a partir de la Clase Producto
p=new Producto(numpro, nompro, cant, pre);
//Adiciona el objeto al Arreglo de Productos
oA.adicionarProducto(p);
}while(rpta==1);
break;
case 2:
//Falta hacer la modificacion de datos del producto
}
}while(r!=3);
break;
case 3:
// Falta hacer la realizacion del pedido
Docente: Ing. Martn Salcedo Quiones

Pagina: 196

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
break;
case 4:
System.out.println("LISTA DE PRODUCTOS");
int total,i;
total=oA.getNproductos();
if (total>0)
for(i=0;i<total;i++)
{
p=oA.obtenerProducto(i);
System.out.println(p.getNombre()+"\t"+p.getStock()
+"\t"+p.getPrecio());
}
break;
case 5:
// Falta hacer el listado de pedidos
}
}while(opcion !=6);
System.out.println("");
System.out.println("Gracias por usar el pequeo Sistema ....");
}
}
Almacen.java contiiene:
package proyecto_tienda;
public class Almacen
{
//Atributos propios de la clase
private String nombre;
//Atributos resultado de la relacion con la clase Producto
private int nproductos;
private Producto[] productos;
public Almacen(String nom)
Docente: Ing. Martn Salcedo Quiones

Pagina: 197

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
{
nombre=nom;
//Creacion del arreglo de objetos producto
nproductos = 0;
productos = new Producto[100];
}
//Mtodo para adicionar o grabar un nuevo producto para un almacen
especifico
public String adicionarProducto(Producto prod)
{
//Variable que nos servir si realmente se registr el producto
String rpta;
//Consulta si el arreglo tiene menos de 100 items
if (nproductos < 100) {
//Si tiene menos de 100 items lo agrega al arreglo
productos[nproductos] = prod;
//Incremente la cantidad de elementos que tiene el arreglo
nproductos++;
//Un mensaje diciendo que se registro el producto
rpta = "Se registro el producto";
} else {
//Un mensaje diciendo que no se pudo registrar
rpta = "No se registro el producto";
}
return rpta;
}
//Mtodo para obtener los datos del producto dado el indice
public Producto obtenerProducto(int indice)
{
//El indice tiene que ser menor a la cantidad de elementos que tenemos en
el arreglo
if (indice < 0 || indice >= nproductos) {
Docente: Ing. Martn Salcedo Quiones

Pagina: 198

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
//Si el indice esta fuera del rango
return null;
} else {
//Retorma el elemento en la posicion que deseamos
return productos[indice];
}
}
//Mtodo que permite buscar Producto x nombre
public Producto buscarProducto(String nom) {
Producto pro=null;
//Recorre el Arreglo de Productos
for(int i=0; i<nproductos; i++) {
//Verifica si existe el Producto x su nombre
if(nom.equals(productos[i].getNombre())) {
pro=obtenerProducto(i);
break; //sale del For
}
}
return pro;
}
public String modificarProducto(Producto prod) {
//Variable que nos indicara si realmente se registro el producto
String rpta;
int indice=-1;
for(int i=0; i<this.nproductos; i++) {
//Verifica si existe el Producto x su nombre
if(prod.getNombre().equals(this.productos[i].getNombre())) {
//ObjTabla.setValue(valor,nroFila,nroColumna)
indice=i;
break;//sale del For
}
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 199

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
//Consulta si el arreglo tiene menos de 100 items
if (indice < 100) {
//Si tiene menos de 100 items lo agrega al arreglo
this.productos[indice] = prod;
//Manda un mensaje diciendo que se registro el producto
rpta = "Se modific el producto";
} else {
//Manda un mensaje diciendo que no se pudo registrar
rpta = "No se modific el producto";
}
return rpta;
}

public int getNproductos() {


return nproductos;
}
public String getNombre() {
return nombre;
}
}
Producto.java contiene:
package proyecto_tienda;
public class Producto
{
//Atributos de la clase
private int numpro;
private String nombre;
private float precio;
private int stock;
//Constructor
Docente: Ing. Martn Salcedo Quiones

Pagina: 200

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
public Producto(int numpro, String nombre, int stock,float precio ) {
this.numpro = numpro;
this.nombre = nombre;
this.precio = precio;
this.stock = stock;
}
//Los Metodos Set y Get para cada atributo
public int getNumPro()
{
return numpro;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public float getPrecio() {
return precio;
}
public void setPrecio(float precio) {
Docente: Ing. Martn Salcedo Quiones

Pagina: 201

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
this.precio = precio;
}
public String toString() {
return "Producto{" +"NumPro="+numpro+ " Nombre=" + nombre + ",
Precio=" + precio + ", Stock=" + stock + '}';
}
}
Pedido.java contiene:
package proyecto_tienda;
public class Pedido {
//Atributos propios de la clase
private int numero;
private String fecha;
private String cliente;
//Atributos resultado de la relacion con la
//clase DetallePedido- Arreglo de Objetos
//DetallePedido
private int ndetalles;
private DetallePedido[] detalles;
//Constructor
public Pedido(int numero, String fecha,String cliente) {
this.numero = numero;
this.fecha = fecha;
this.cliente = cliente;
//Porque el primer indice va a ser cero
this.ndetalles = 0;
//Creamos el arreglo con un maximo de 50
this.detalles = new DetallePedido[50];
}
//Se obtiene el numero del pedido
public int getNumero() {
return numero;
}
//Se obtiene la fecha de emisin del pedido
public String getFecha() {
return fecha;
}
Docente: Ing. Martn Salcedo Quiones

Pagina: 202

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote

//Se obtiene el cliente que realiz el pedido


public String getCliente() {
return cliente;
}
//Se obtiene la cantidad de detalles que tiene el Pedido
public int getNdetalles() {
return ndetalles;
}
//Sirve para adicionar un detalle de pedido al pedido
public String adicionarDetalle(DetallePedido det) {
//Variable que nos indicara si realmente se registro el detalle
String rpta;
//Consulta si el arreglo tiene menos de 50 items
if (this.ndetalles < 50) {
//Si tiene menos de 50 items lo agrega al arreglo
this.detalles[this.ndetalles] = det;
//Incremente la cantidad de elementos que tiene el arreglo
this.ndetalles++;
//Manda un mensaje diciendo que se registro el detalle
rpta = "Se registro el detalle";
} else {
//Manda un mensaje diciendo que no se pudo registrar
rpta = "No se registro el detalle";
}
return rpta;
}
// Sirve para obtener un detalle de pedido segun el indice
public DetallePedido obtenerDetalle(int indice) {
//El indice tiene que ser menor a la cantidad de
//elementos que tenemos en el arreglo
if (indice < 0 || indice >= this.ndetalles) {
//Si el indice esta fuera del rango
return null;
} else {
//Retorma el elemento en la posicion que deseamos
return this.detalles[indice];
}
}
//Sirve para obtener el total del Pedido
public float calcularTotalPedido() {
float total = 0;
//Tenemos que recorrer todos los detallesPedido
Docente: Ing. Martn Salcedo Quiones

Pagina: 203

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
//Hasta la cantidad que nos indique la variable
//ndetalles
for (int i = 0; i < this.ndetalles; i++) {
//obtengo la cantidad
int cantidad = this.detalles[i].getCantidad();
//obtengo el precio
float precio = this.detalles[i].getPrecio();
//incremento el total
total += (cantidad * precio);
}
return total;
}
}
DetallePedido.java contiene:
package proyecto_tienda;
public class DetallePedido
{
//Atributos propios de la clase
private int cantidad;
private float precio;
//Atributos que se obtiene de la relacion
//Con la clase DetallePedido
private Producto producto;
//Contructor
public DetallePedido(int cantidad, float precio, Producto producto) {
this.cantidad = cantidad;
this.precio = precio;
this.producto = producto;
}
//Se obtiene la cantidad de Productos del Detalle
public int getCantidad() {
return cantidad;
}
//Se obtiene el precio del Producto
public float getPrecio() {
return precio;
}
//Se obtiene el producto que esta en el detalle
public Producto getProducto() {
return producto;
Docente: Ing. Martn Salcedo Quiones

Pagina: 204

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
}
}
AUTOEVALUACION
a)

Responde a las siguientes preguntas:


1. Agrupacin de clases afines se les denomina paquetes (verdadero o
falso): _______________________
2. Es un evento que ocurre durante la ejecucin de un programa que
interrumpe el flujo normal de las sentencias: ____________________
3. Dos clases con el mismo nombre en dos paquetes distintos no pueden
coexistir e incluso no pueden usadas en el mismo programa (verdadero o
falso): _______________________
4. Controla un nico aspecto dentro de un programa, como puede ser
supervisar la entrada en un determinado perifrico o controlar toda la
entrada / salida del disco se denomina: ________________________
b) Muestra una lista de excepciones que te propone Java y la manera como
se debe interpretarlos al momento que se muestre en la ejecucin de un
programa.
REFERENCIAS WEBGRAFICAS
http://dis.um.es/~bmoros/Tutorial/parte8/cap8-1a.html (La Clase Math)
http://www.webtaller.com/manual-java/clase-integer.php (La Clase Integer)
http://www.webtaller.com/manual-java/clase-character.php (La clase
Character)
http://www.webtaller.com/manual-java/clase-float.php (La clase Float)
http://www.webtaller.com/manual-java/clase-double.php (La clase Double)
http://es.scribd.com/doc/87261446/Introduccion-Java (La clase String,
Arreglos)
http://pruebaodshadow.blogspot.com/2010/11/estructuras-recursivas.html
(recursividad)
http://ingsolorzano.wordpress.com/clases-con-java/ (Estructura de una clase)
http://www.edukanda.es/mediatecaweb/data/zip/1305/page_38.htm
(Instanciar objetos)
http://www.buenastareas.com/ensayos/Constructor-Java/1411669.html
(Mtodos constructores)
http://wwwdi.ujaen.es/asignaturas/progav/progav-tema2.pdf (Relaciones
entre clases)
http://mundogeek.net/archivos/2009/03/30/modificadores-en-java/
(Modificadores de acceso)
Docente: Ing. Martn Salcedo Quiones

Pagina: 205

TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
http://www.geocities.ws/marcelino_torres_villanueva/programacionorientada
aobjetos.pdf (Herencia de clases, polimorfismo)
http://dns.uls.cl/~ej/web_Poo_2010/Teo_Poo_2010/librojava.doc
(Clases abstractas)
http://www.webtaller.com/construccion/lenguajes/java/lecciones/clasescontra-interfaces-java.php (Interfaces)
http://dis.um.es/~lopezquesada/documentos/IES_1011/DFSI/curso/UT6/java
/cap11/index.html (Interfaces)

Docente: Ing. Martn Salcedo Quiones

Pagina: 206

You might also like