Professional Documents
Culture Documents
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
22
34
45
59
60
79
92
107
120
Clases abstractas
137
149
Polimorfismo
163
179
Paquetes
180
185
Proyecto Tienda
193
Pagina: 2
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
CAPITULO I
USO Y CREACION DE METODOS
Pagina: 3
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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 !
-
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:
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.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
Traslaciones de carcter/dgito
int i = Character.digit( c,base );
char c = Character.forDigit( i,base );
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;
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 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;
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);
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
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
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.
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);
}
}
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
Pagina: 18
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 19
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 20
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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
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
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.
Pagina: 31
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 32
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 33
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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.
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:
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));
}
}
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();
}
}
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
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
Pagina: 41
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 42
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 43
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 44
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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[];
int []numeros;
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
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
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
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
Observa que debes crear la clase principal Arreglo01 dentro del paquete
sesion04_aplicaciones. Luego dar clic en el botn de comando Terminar.
Pagina: 55
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 56
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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:
Pagina: 58
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
CAPITULO II
PROGRAMACION ORIENTADA A OBJETOS
Pagina: 59
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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
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
de la clase a
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());
}
}
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
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());
}
}
Pagina: 75
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 76
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 77
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 78
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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()
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:
Pagina: 81
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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
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.
2.
3.
Pagina: 89
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
4.
Pagina: 90
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 91
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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:
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
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
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:
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:
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
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:
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));
}
}
}
Pagina: 103
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Observa
que
debes
PruebaEmpleadoVariableEstatica
crear
dentro
la
clase
principal
del
paquete
Pagina: 104
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 105
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 106
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
METODOS CONSTRUCTORES Y LA
REFERENCIA THIS
2.
3.
4.
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:
Pagina: 108
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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
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.
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.
7.
Pagina: 115
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
8.
9.
Pagina: 116
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
10.
11.
Pagina: 117
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
AUTOEVALUACION
a)
Pagina: 118
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
CAPITULO III
HERENCIA, CLASES ABSTRACTAS,
INTERFACES Y POLIMORFISMO
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+")";
}
}
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:
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).
Pagina: 125
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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;
}
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
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.
Pagina: 131
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 132
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
6. Luego,
procede
crear
la
clase
Empleado
desde
el
paquete
Pagina: 133
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
8. Luego,
procede
crear
la
clase
Consultor
desde
el
paquete
Pagina: 134
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 135
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 136
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
CLASES ABSTRACTAS
Pagina: 137
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 138
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
o
Mascota
o es una Superclase abstracta (abstract)
-nombre: String
o Nota: Convencin sobre los mtodos de acceso getters y setters
-fechaNacimiento: Date
o Date es una Clase Java que como su nombre indica, representa
una fecha
+acariciar():void
o
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
Date fechaNacimiento;
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
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();
}
}
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
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
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
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());
}
}
Pagina: 146
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
14. Asi debe quedar luego de escribir las instrucciones de la ltima aplicacin
Pagina: 147
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
15. Luego a proceder a ejecutar la aplicacin
Pagina: 148
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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";
}
}
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
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.
Pagina: 154
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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).
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);
}
}
Pagina: 159
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
EJECUTANDO LA APLICACIN EN NETBEANS
1. Crea un proyecto denominado: Sesion11_Aplicaciones.
Pagina: 160
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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.
Pagina: 162
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
POLIMORFISMO
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();
}
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
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;
}
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);
// 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("=============");
}
}
}
Pagina: 174
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 175
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
Pagina: 176
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
AUTOEVALUACION
a)
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
*
***
*****
*******
*****
***
*
Pagina: 178
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
CAPITULO IV
PAQUETES, EXCEPCIONES Y DESARROLLO DE
UN PROYECTO
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
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
ejemplo
se
puede
tener
un
package
de
nombre
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
en
la
ruta
de
acceso
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
Pagina: 184
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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
Pagina: 187
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
void MetodoAsesino() throws NullPointerException,CaidaException
}
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:
Pagina: 190
TECNICAS DE PROGRAMACION
Universidad Catlica los Angeles de Chimbote
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
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
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;
}
br
new
BufferedReader(new
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;
}
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
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)
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)
Pagina: 206