Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Java Orientado A Objetos
Java Orientado A Objetos
-1-
Separata
Lenguaje de Programacin I
Parte I
2008-1
Ing. Alberto Moreno
UTP
-2-
INDICE
1.- Introduccin
2.- Tipos de Datos Variables
3.- Instrucciones de Control
4.-Diagrama de actividades
5.- Funciones de Cadena
6.- Vectores y Matrices
7.- Mtodos de Usuarios
8.- Clases . Objetos, Constructores
9.- Herencias
10.- poliformismos
UTP
-3-
Orientado a objetos
Distribuido y dinmico
Robusto
Seguro
Multitarea
Portable
UTP
-4-
La plataforma Java
Una plataforma es el ambiente de hardware o software en el cual se ejecutan los
programas. En general, la mayora de las plataformas pueden ser descritas como una
combinacin de hardware y sistema operativo. Algunas de las plataformas ms
populares son Windows, Solaris, Linux y MacOS.
La plataforma Java difiere de las anteriores en que sta es una plataforma basada
nicamente en software que corre por encima de las plataformas basadas en hardware.
La plataforma Java consta de dos componentes:
UTP
-5-
jar. Es una herramienta utilizada para trabajar con los archivos JAR.
Comentarios.
Identificadores.
Palabras clave.
Literales.
Expresiones y operadores.
Bloques y sentencias.
UTP
-6-
Comentarios
Java ofrece tres tipos de comentarios: dos para comentarios regulares en el cdigo
fuente y uno para la documentacin especial del sistema javadoc.
Palabras clave
La siguiente tabla muestra las palabras claves de Java, stas son reservadas y no pueden
ser utilizadas como identificadores.
abstract
default
if
private
this
Boolean
do
implements
protected
throw
Break
double
import
public
throws
Ing. Alberto Moreno
UTP
-7Byte
else
instanceof
return
transient
Case
extends
int
short
try
catch
final
interface
static
void
Char
finally
long
strictfp**
volatile
class
float
native
super
while
const*
for
new
switch
continue
goto*
package
synchronized
Literales numricas
Se pueden crear literales numricas a partir de cualquier tipo de dato primitivo.
Ej.
123
123.456
123L
123.456F
//literal int
//literal double
//literal long
//literal flota
Literales booleanas :
Las literales boolenas consisten de las palabras reservadas true y false.
Literales de caracteres
'a',
'%',
'7'
UTP
-8-
Literales de cadena
Una cadena es una combinacin de caracteres. Las cadenas en Java son instancias
de la clase String, por ello cuentan con mtodos que permiten combinar, probar y
modificar cadenas con facilidad.
Las literales de cadena se representan por una secuencia de caracteres entre comillas
dobles.
Ej.
"hola", "cadena123", "12345"
Expresiones y Operadores
Expresin
Una expresin es una combinacin de variables, operadores y llamadas de
mtodos construida de acuerdo a la sintaxis del lenguaje que devuelve un valor.
El tipo de dato del valor regresado por una expresin depende de los elementos
usados en la expresin.
Operadores
Los operadores son smbolos especiales que por lo comn se utilizan en
expresiones.
La tabla siguiente muestra los distintos tipos de operadores que utiliza Java.
Operador
Significado
Ejemplo
Operadores aritmticos
Suma
a+b
Resta
a-b
Multiplicacin
a*b
Divisin
a/b
Mdulo
a%b
Operadores de asignacin
UTP
-9-
Asignacin
a=b
+=
Suma y asignacin
a += b (a=a + b)
-=
Resta y asignacin
a -= b (a=a - b)
*=
Multiplicacin y asignacin
a *= b (a=a * b)
/=
Divisin y asignacin
a / b (a=a / b)
%=
Mdulo y asignacin
a % b (a=a % b)
Operadores relacionales
==
Igualdad
a == b
!=
Distinto
a != b
<
Menor que
a<b
>
Mayor que
a>b
<=
a <= b
>=
a >= b
Operadores especiales
++
Incremento
a++ (postincremento)
++a (preincremento)
--
Decremento
a-- (postdecremento)
--a (predecremento)
(tipo)expr
Cast
a = (int) b
Concatenacin de cadenas
a = "cad1" + "cad2"
a = obj.var1
()
Agrupacin de expresiones
a = (a + b) * c
La tabla siguiente muestra la precedencia asignada a los operadores, stos son listados
en orden de precedencia.
Los operadores en la misma fila tienen igual precedencia
Operador
Notas
. [] ()
UTP
-10arreglos
++ -- ! ~
! es el NOT lgico y ~ es el
complemento de bits
new (tipo)expr
* / %
Multiplicativos
+-
Aditivos
Corrimiento de bits
Relacionales
== !=
Igualdad
&&
AND lgico
||
OR lgico
?:
Condicional
= += -= *= /= %= &= ^= |= <<=
>>= >>>=
Asignacin
Ejemplos demostrativos:
public class PrimerPrograma {
public static void main(String[ ] args) { System.out.println("Hola, mi primer
programa");
}
}
Explicacion .public class PrimerPrograma
Nombre de la clase ., coincide con el nombre del archivo.
public static void main
La funcin principal equivalente a la funcin main de C/C++
String[ ] argv
Permite de recuperar argumentos transmitidos al programa al momento de su
lanzamiento
System.out.println(Hola ")
Mtodo de visualizacin en la ventana consola
UTP
-11-
Inicializacion y constantes
Ejercicios desarrollados:
1.- Se tienen como datos la base y altura de un triangulo rectngulo , calcular su
hipotenusa.
public class demo2 {
public static void main(String[] args) {
// declaracion de variables
double base=10.6,altura=15,hipo=0;
int can;
hipo=Math.sqrt(base*base+altura*altura);
System.out.print("cantidad "+can);
System.out.print("\n La hipotenusa es "+hipo);
System.out.print("\n de base="+base+" altura="+altura);
}
2.- Se tienen como datos los tres lados de cualquier triangulo , calcular su area:
public class demo3 {
public static void main(String[] args){
double lado1=14,lado2=5,lado3=6, peri,area;
peri=(lado1+lado2+lado3)/2;
Ing. Alberto Moreno
UTP
-12-
area=Math.sqrt(peri*(peri-lado1)*(peri-lado2)*(peri-lado3));
System.out.print("area del triangulo "+area);
}
}
CLIK
Luego en Java
Aplication
CLIK
proyecto:
Ing. Alberto Moreno
UTP
-13-
No olvidar
guardar dentro de
AlumnoUtp
CLIK
3)
CLIK
UTP
-14-
Es importante
digitar la librera
correspondiente
UTP
-15-
5) Una vez digitado el algoritmo, pasamos a compilar(F9) y luego ejecutarlo (shift + F6)
y nos brindara la siguiente pantalla donde apreciaremos los errores de la codificacin..
UTP
-16-
UTP
-17-
UTP
-18-
DIAGRAMA DE ACTIVIDADES nos va permitir tener una mejor visin sobre los
procesos que vamos a desarrollar en el programa , la diagramacion puede elaborase
empleando el Rational Rose o el UML.
UTP
-19-
Ejecucin condicional
El formato general es:
if (expresion_booleana)
sentencia
[else
sentencia]
sentencia (a todo lo largo de este captulo) puede ser una sola sentencia o un
bloque de sentencias separadas por ; y enmarcadas por llaves { y }. Es decir
if (expresion_booleana) {
sentencia;
sentencia;
. . .
}
else {
sentencia;
sentencia;
. . .
}
UTP
-20-
Ambigedad
if (a) if (b) S1; else S2;
significa
if (a) { if (b) S1; else S2; }
UTP
-21-
1.- Se tiene como datos de ingreso los datos de un tringulo (lado1, lado2 y
lado3) en caso que forme tringulo calcular su rea, de lo contrario muestre un
mensaje de error, no se forma tringulo. Para formar un tringulo un lado
siempre tiene que ser menor a la suma de los otros dos lados. Y su rea de la
siguiente manera:
P=
Area =
L1 + L 2 + L3
2
UTP
Ejercicios propuestos
-22-
1.-
UTP
-23-
Promedio
00 05
06 10
11 13
14 17
18 20
Clasificacin
Deficiente
Malo
Regular
Bueno
Excelente
UTP
-24-
UTP
-25-
Ejemplos:
1.- Ingresando un numero entero de cualquier longitud que muestre la suma de
sus digitos:
public class demo1 {
}
}
2.- Ingresar cierta cantidad de bolas de billar , obtener las superficies
formadas y el numero de bolas que sobran , cada superfice es una base
triangular .
public repetir02 {
public static void main(String[] args) throws Exception {
int doble=0,nbolas, ns=0, c=1,sm=0;
UTP
-26-
ns=Integer.parseInt(tecla.readLine());
while(sm<nbolas){
doble=c*c;
sm=sm+doble;
ns ++;
c=c+1;
}
sm=sm-doble;
ns--;
int sobran;
sobran=nbolas-sm;
System.out.println("superfices="+ns);
System.out.print("sobran="+sobran);
}
}
Ejercicios Propuestos 2.1.- Ingresar 10 nmeros por teclado luego muestre todos los nmeros ingresados y
adems muestre el mayor numero y el segundo mayor
por ejemplo la salida de 10 nmeros ser:
UTP
-27-
2.- Realizar un programa que permita calcular el pago de matricula de un alumno los
datos de ingreso son la Escala (A,B y C) el promedio ponderado, y la cantidad de
crditos; Ingresar los datos hasta que se ingrese por teclado el Carcter * en la Escala.
Las condiciones:
El pago por crdito es de acuerdo a la escala : A=>S/ 20.0 , B=>S/. 16 , y C =>S/12.0
Adems se har un descuento del 15% del pago si su promedio es mayor a 15 y se
encuentra entre 12-15 solo un 10%.
3.- En el mundial de la sub_17 de corea se desea saber quien fue el primer, y segundo
goleador y ademas a que pais pertenece, los datos a ingresar son :
Nombre del pais, nombre del jugador y la cantidad de goles que hizo , ingresar los
datos hasta que ingrese * en el pas.
4.- ingresar un conjunto de trabajadores hasta que se ingrese en la categora un * , el
pago hora para la categora 1(empleado) 12 y descuento es 10% y para obrero (2) es
10 soles , descuento 8% , mostrar el pago total y descuento.
Datos de ingreso , horas trabajadas y categora
5.- ingrese un numero luego muestre dicho numero en romanos .
6.- ingrese un numer de cinco cifras luego muestre si es capica y un mensaje de error
en caso que se ingrese un numero de diferente longitud.
7.- Ingrese un numero entero de cualquier longitud , luego muestre:
a) La suma de sus dgitos
b) El numero ordenado de manera ascendente
c) La suma de los cuadrados de los dgitos pares.
Ejemplo si el numero es : 45672
La suma de sus dgitos>24
Ordenado => 24567
8.- Se desea formar una pirmide de base cuadrada con una cierta cantidad de bolas de
billar , cada superficie esta formada por un numero cuadrado ( 12, 22, 32 ,...) , Mostrar
la cantidad de superficies formadas y el numero de bolas que sobran.
Por ejemplo si se ingresa 20 bolas : se forman 3 superficies y sobran 6 bolas.
9.- Mostrar todos los nmeros perfectos menores a 1000 ; un numero es perfecto cuando
la suma de sus divisores es el mismo numero , sin incluir el mismo numero, por ejemplo
el 6 sus divisores 1+2+3
10.- Mostrar todos los nmeros primos del 1-100
11.-Pasar un numero del sistema decimal a Hexadecimal
12.- Un automvil viaja a una velocidad promedio de 55km por hora durante cuatro
horas. Escriba un programa que muestre la distancia, en km, que el auto ha recorrido
despus de cada media hora, 0.5 hora , 1hora, 1.5, 2,4, ... horas hasta el final del
viaje.
UTP
-28-
13.- Una pelota de golf se lanza desde un avin. La distancia, d, que la pelota cae en t
segundos est dada por la ecuacin d = (1/2) * g*t 2 donde g es la aceleracin de la
gravedad y es igual a 9.81 m/seg 2 . Escribir un programa que muestre la distancia a
la que cae la pelota en cada intervalo de un segundo durante diez segundos y la
distancia total que la pelota ha recorrido al final de cada intervalo. La salida debe
contemplar la siguiente tabla:
Tiempo(segundos) Distancia en el intervalo actual (metros) Distancia total
0
0.0
0.0
1
4.905
4.905
14.- Se compra una computadora a crdito , que puede ser en 6 , 12 o 18 meses , los
intereses varan de acuerdo a los meses:
Meses
% inters
6
20
12
30
18
40
Mostrar un calendario de pagos , de acuerdo a la siguiente tabla:
Precio Final : ...........
Mes
Cuota Mensual
Saldo
=====================================
1
......
......
2
.....
......
Arrays
Declaracin y acceso
Un array es una coleccin ordenada de elementos del mismo tipo, que son accesibles a
travs de un ndice.
Un array puede contener datos primitivos o referencias a objetos.
Los arrays se declaran:
[modificadores]
tipo_variable [ ] nombre;
Por ejemplo:
int [ ] a;
Punto [ ] p;
La declaracin dice que a es un array de enteros y p un array de objetos de tipo Punto.
Ms exactamente a es una referencia a una coleccin de enteros, aunque todava no se
sabe cuantos elementos tiene el array. p es una referencia a una coleccin de referencias
que apuntarn objetos Punto.
Un array se crea como si se tratara de un objeto (de hecho las variables de tipo array son
referencias):
UTP
-29-
UTP
-30-
[3][2];
x ; i++ )
j < y ; j++)
j;
Funciones/Metodos De Usuario
Las funciones/metodos son trozos de cdigo que encapsulan cierta funcionalidad
especial.
En general tienen datos de entrada y datos de salida (pueden no tenerlos).
Son muy similares a la idea de una funcin en matemticas:
funcion(x ) = x 2 + 3
Esta funcin tiene una definicin y puede ser evaluada con distintos valores, por
ejemplo si hacemos
funcion(5)
sabemos que el resultado seria 28.
La funcin matemtica funcion(x ) = x 2 + 3 podra verse en JAVA como:
funcion( x)
{
resultado = x * x + 3;
}
veremos que es un poco ms complicado....
I La idea seria poder usar la funcin en un cdigo cualquiera, por ejemplo:
UTP
-31-
int x, y;
x = 1 + funcion(2);
y = funcion(x); System.out.println(x); System.out.println(y);
Las funciones en JAVA tienen varias partes importantes en su definicin:
Nombre
funcion
Nombres de los datos de entrada
x
Tipos de datos de entrada
???
Tipo de dato de retorno
???
Codigo valido interno
Instruccion de retorno
???
En JAVA se un poco mas como:
int funcion(int x)
{
int resultado = x * x + 3;
return resultado;
}
adicionalmente tenemos que empezar la funcin con public static (esto permite que la
funcin sea usado directamente sin necesidad de crear el objeto.
Un ejemplo completo
class EjemploFuncion
{
public static void main(String[] args)
{
int x, y;
x = 1 + funcion(2);
y = funcion(x) * funcion(x - 2);
System.out.println(x); System.out.println(y); System.out.println( funcion(0) );
}
public static int funcion(int x)
{
int resultado;
resutado = x * x + 3;
return resultado;
}
}
ejemplo 2.- encontrar el factorial y la potencia de un numero sin utilizar la clase Math
Ejemplo dos funciones
class Ejemplo
{
public static void main(String[] args)
{
int n, i;
System.out.println("Dime un entero positivo");
n = In.readInt();
UTP
-32-
UTP
-33-
}
}
static int suma(int[] vec){
int sm=0,f;
for(f=0; f<vec.length;f++){
sm += vec[f];
}
return sm;
}
static void ordena(int[] vec){
int k,aux,j,x;
x=vec.length;
for(k=0;k<x-1;k++)
for(j=k+1;j<x;j++)
{
if(vec[k]>vec[j]){
aux=vec[k];
vec[k]=vec[j];
vec[j]=aux;
}
}
}
}
UTP
-34-
Ejercicios Propuestos 3
Realizar Las Siguientes cuyos Nombres y parmetros por valor Son:
1.- Funcin Acirculo pasando como valor un radio devuelva su rea
2.- Funcin Acuadrado pasando como valor un lado devuelva su rea
3.- Funcin Cilindro pasando como valores el radio y su altura devuelva su rea
4.- Funcin Hipotenusa pasando como valor la base y la altura devuelva su
hipotenusa.
5.- Funcin Triangulo pasando como valor tres lados de un triangulo en caso que forme
tringulo que devuelva su rea de lo contrario que devuelva un valor -1
6.- Funcin Hexadecimal que pasando un valor numrico que devuelva dicho numero
en el sistema hexadecimal (como cadena)
7.- Funcin Binario pasando como valor un numero que lo devuelva en el sistema
binario.(el valor es como cadena).
8.- Funcin Divisores pasando un numero que devuelva el numero de sus divisores
9.- Funcin Primo pasando un numero entero que devuelva un valor lgico si es True
es primo y False si no lo es.
10.- Funcin Left(Cad,n) pasando una cadena y numero de caracteres que devuelva los
carectares hacia la izquierda hasta el numero indicado.
11.- Funcin Right(Cad,n) que extraiga caracteres hacia la derecha.
12.- Funcin CUENTAV pasando una cadena , que devuelva el numero de vocales que
contiene dicha cadena..
Nota: A cada funcin elaborada ponga un nombre adecuado
13.- Pasando un Numero que devuelva el factorial de dicho numero
14.-Pasando un Valor entero de grados centgrado y un carcter( R, K,F) que
representan Ranking, kelvin y farenheit respectivamente ,devuelva su conversin. Al
grado seleccionado.
15..-Pasando un numero entero que devuelva dicho numero en romanos (el valor
ingresado debe ser menor a 1000)
16.- Pasando un numero de cualquier longitud puede ser hasta millones , que devuelva
dicho numero en Letras.
Cletras(4567234)=> Cuatro millones quinientos sesenta y siete mil doscientos treinta
y cuatro.
UTP
-35-
UTP
-36-
class Obrero{
String nom;
double horas;
char sec;
void calculo(){
double afp,pt;
if(sec=='A')
pt=this.horas*8;
else
pt=this.horas*7.4;
afp=pt*0.11;
System.out.print("\npago total ="+pt);
System.out.print("\n Descuento por afp="+afp);
}
}
UTP
-37-
MANEJO DE CADENAS
Clase Strings
Una secuencia de datos del tipo carcter se llama un string (cadena) y en el entorno Java
est implementada por la clase String (un miembro del paquete java.lang).
String[] args;
Este cdigo declara explcitamente un array, llamado args, que contiene objetos del tipo
String. Los corchetes vacios indican que la longitud del array no se conoce en el
momento de la compilacin, porque el array se pasa en el momento de la ejecucin.
El segundo uso de String es el uso de cadenas literales (una cadena de caracteres entre
comillas " y ").
"Hola mundo!"
El compilador asigna implicitamente espacio para un objeto String cuando encuentra
una cadena literal.
Los objetos String son inmutables - es decir, no se pueden modificar una vez que han
sido creados.
El paquete java.lang proporciona una clase diferente, StringBuffer, que se podr utilizar
para crear y manipular caracteres al vuelo.
Concatenacin de Cadenas
Java permite concatenar cadenas fcilmente utilizando el operador +. El siguiente
fragmento de cdigo concatena tres cadenas para producir su salida.
"La entrada tiene " + contador + " caracteres."
Dos de las cadenas concatenadas son cadenas literales: "La entrada tiene " y "
caracteres.". La tercera cadena - la del medio- es realmente un entero que primero se
convierte a cadena y luego se concatena con las otras.
Funciones cadena
Tipo de Dato
Sintaxis del metodo y descripcinn
Devuelto
UTP
package
UTP
-39-
Clasula import
Cuando se referencia cualquier clase dentro de otra se asume, si no se indica
otra cosa, que sta otra est declarada en el mismo package. Por ejemplo:
package Geometria;
...
class Circulo {
Punto centro;
...
}
UTP
-40-
int x , y;
}
Entonces, para usar la clase Punto en nuestra clase Circulo deberiamos poner:
package GeometriaAmpliada;
import GeometriaBase.*;
class Circulo {
Punto centro;
...
}
Clases
Modela una abstraccin definiendo propiedades y comportamientos para los
objetos representados.
Propiedades
: atributos, variables
Comportamientos
: operaciones, mtodos
Implementacin
: Define cmo se proporcionan los servicios en una
clase.
Una abstraccin trata de mostrar las propiedades y comportamientos de
un objeto que lo diferencia de otro.
UTP
-41-
UTP
-42-
UTP
-43-
UTP
-44-
Los miembros de instancia son los mtodos y las variables que pertenecen al objeto.
Los valores de las variables definen el estado del objeto.
Los mtodos definen el comportamiento de un objeto. La implementacin de los
mtodos s es compartida por todas las instancias.
Los miembros estticos son los mtodos y las variables que pertenecen a la clase.
Se diferencian en la definicin por la palabra clave static.
Las variables estticas son inicializadas cuando se carga la clase en runtime.
Los miembros estticos pueden ser llamados utilizando el nombre de la clase o a
travs de la referencia al objeto
UTP
Ejercicios propuestos 4.1.- Disee e implemente en Java una clase para trabajar con tringulos issceles. Para
ello, defina las variables de ejemplar mnimas que requiera, proporcione mtodos de
consulta, un mtodo constructor e implemente otros mtodos para calcular el permetro
y el rea de un tringulo.
2.-Implemente una clase llamado banco ,con los atributos nro de cuenta , nombre del
cliente , tipo de ahorro( D=dlar y S=soles) y el saldo; Implemente los mtodos para
deposito , retiro de dinero. y los mtodos constructores respectivos.
Esta aplicacin implemntelo :
a) Primero en modo de consola , empleando un ArrayList para almacenar un
conjunto de clientes , se debe elaborar un men que contemple las siguientes
opciones:
(1) Nuevos ahorristas
(2) Consulta de Saldos
(3) Movimiento de Cuentas
(4) Listado de Ahorristas
(5) Anulacin de cuentas
(6) Salir
En la opcin 2 se realiza la bsqueda por medio de un numero de cuenta
En la opcin 3 se realiza el deposito o retiro a travs de un numero de cuenta
actualizando el saldo respectivo.
La anulacin tambin se realiza por medio del nro de cuenta.
b) Realizar la misma aplicacin pero empleando formularios.
UTP
-46-
UTP
-47-
class Autor {
private String nombre;
private String apellido;
public Autor (String nombre, String apellido) {
this.nombre = nombre;
this.apellido=apellido;
}
public String toString () {
return nombre+ " " +apellido;
}
}
UTP
-48-
UTP
-49-
UTP
-50-
La Modificacin de Datos:
Tambin se realiza mediante el cdigo del empleado
UTP
-51-
UTP
-52-
1.- Establecer los paquetes para las clases, inagenes y el paquete de prueba.
Empleado.java
package pack2;
public class Empleado {
private String code;
private String nome;
private char sec;
private double horas;
private double pt;
private static int nro=0;
/** Creates a new instance of Empleado */
public Empleado() {
nro++;
}
public Empleado( String cod,String nom, char sec, double hr ) {
this();
UTP
-53-
this.code=cod;
this.nome=nom;
this.sec=sec;
this.horas=hr;
}
UTP
-54-
package pack2;
import java.util.ArrayList;
import javax.swing.*;
public class Empleados {
private ArrayList emp;
public Empleados() {
emp=new ArrayList();
}
//para actualizar
public void update(Empleado e,int indice){
emp.set(indice,e);
}
//para adicionar nuevos empleados
public void AddEmp(Empleado e){
try{
emp.add(e);
}catch(Exception ex){
System.out.print("\n "+ex.getMessage());
}
}
//obtener un Empleado a partir de un indice
public Empleado GetEmp(int ind){
return (Empleado) emp.get(ind);
}
//obtener el tamao del arraylist
public int Nroemp(){
return emp.size();
}
//busqueda por numero devolviendo su indice
public int Busca(int n){
for(int i=0;i<Nroemp();i++){
if(n==GetEmp(i).getNro()){
return i;
}
}
return -1;
}
//una sobrecarga Busqueda por Codigo, devolviendo su indice
public int Busca(String code){
for(int i=0;i<Nroemp();i++){
if(code.equals(GetEmp(i).getCode())){
return i;
}
UTP
-55-
}
return -1;
}
//quita un empleado a partir de un indice
public void Elimina(int nro){
emp.remove(nro);
}
//calcula el total pasando como dato un indice del arraylist
private double total(int f){
double tot;
if(this.GetEmp(f).getSec()=='A')
tot=this.GetEmp(f).getHoras()*13;
else
tot=this.GetEmp(f).getHoras()*15;
return tot;
}
//pasando un textArea va mostrar en dicho objeto la lista de datos
public void ListaArea(javax.swing.JTextArea xarea){
xarea.setText("Lista de Empleados \n");
xarea.append("\n Codigo \tNombre \t\tHoras\t Pago Total");
for(int f=0;f<Nroemp();f++){
xarea.append("\n"+ GetEmp(f).getCode()+
"\t"+GetEmp(f).getNome() +
"\t\t"+GetEmp(f).getHoras()+
"\t"+this.total(f));
}
}
//un listado simple mediante consola
public void Lista(){
//System.out.print("\nnro \t codigo \t nombre \t total");
for(int f=0;f<Nroemp();f++){
System.out.print("\n"+ this.GetEmp(f).getNro()+
"\t"+GetEmp(f).getCode()+
"\t"+GetEmp(f).getNome() +
"\t"+this.total(f));
}
} // fin del metodo
}fin de la clase
UTP
-56-
}
private void txtcodKeyReleased(java.awt.event.KeyEvent evt) {
// CUANDO SE INGRESA EL CODIGO
if(txtcod.getText().trim().length()==0){
this.jbtAcepta.setEnabled(false);
return;
}
else{
this.jbtAcepta.setEnabled(true);
UTP
-57-
}
}
private void JbtnModificaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
boolean flag=false;
String code,nom;
double horas;
code=this.txtcod.getText().trim();
int b=emp.Busca(code);
if(b==-1){
this.jTextArea1.setText("Codigo no existe");
return;
}
nom=emp.GetEmp(b).getNome();
horas=emp.GetEmp(b).getHoras();
pruebas.ModiEmpDialog ven=new
pruebas.ModiEmpDialog(null,true,code,nom,horas);
ven.setVisible(true);
if(ven.getFlag()==true){ //elimina el empleado
Empleado x=new Empleado();
x.setCode(code);
x.setHoras(ven.getHoras());
x.setNome(ven.getNom());
emp.update(x,b);
this.jTextArea1.setText("Registro actualizado");
}
}
private void JbeliminaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
boolean flag=false;
String code,nom;
double horas;
code=this.txtcod.getText().trim();
int b=emp.Busca(code);
if(b==-1){
this.jTextArea1.setText("Codigo no existe");
return;
}
nom=emp.GetEmp(b).getNome();
horas=emp.GetEmp(b).getHoras();
DelEmpDialog ven=new DelEmpDialog(null,true,code,nom,horas);
ven.setVisible(true);
if(ven.getFlag()==true){ //elimina el empleado
emp.Elimina(b);
UTP
-58-
this.jTextArea1.setText("Registro eliminado");
}
}
private void jbtnListaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
emp.ListaArea(this.jTextArea1);
}
private void jbtAceptaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
uno=new Empleado();
uno.setCode(this.txtcod.getText());
uno.setNome(this.txtnom.getText());
uno.setHoras(Double.parseDouble(this.txthr.getText()));
if(this.jRa.isSelected())
uno.setSec('A');
else
uno.setSec('B');
emp.AddEmp(uno);
JOptionPane.showMessageDialog(this,"Datos Aceptados");
limpiar();
}
void limpiar(){
this.txtcod.setText("");
this.txthr.setText("");
this.txtnom.setText("");
this.jRx.setSelected(true);//para deseleccionar las otras opciones
this.txtcod.requestFocus();
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new EmpDialog(new javax.swing.JFrame(), true).setVisible(true);
}
});
}
UTP
-59-
package pruebas;
/**
*
* @author utp
*/
public class DelEmpDialog extends javax.swing.JDialog {
private boolean flag=false;
/** Creates new form DelEmpDialog */
public DelEmpDialog(java.awt.Frame parent, boolean modal,
String nom, String cod, double ptot
){
super(parent, modal);
initComponents();
this.jLbcod.setText(cod);
this.jLbnom.setText(nom);
this.jLbtot.setText(""+ptot);
}
public boolean getFlag(){
return flag;
}
public void setFlag(boolean valor){
this.flag=valor;
}
private void jbtnAceptaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.flag=true;
this.setVisible(false);
}
Ventana de Dialogo para modificar los datos de un empleado:
package pruebas;
/**
*
* @author utp
*/
public class ModiEmpDialog extends javax.swing.JDialog {
private boolean flag=false;
private String nom;
private double horas;
/** Creates new form ModiEmpDialog */
public ModiEmpDialog(java.awt.Frame parent, boolean modal,
String cod,String nom, double hr
){
super(parent, modal);
UTP
-60initComponents();
this.jlbcod.setText(cod);
this.jlbnom.setText(nom);
this.jlbhoras.setText(""+hr);
this.jtxthoras.setText(""+hr);
this.jtxtnom.setText(nom);
}
public boolean getFlag(){
return flag;
}
public void setFlag(boolean f){
this.flag=f;
}
private void jbCancelaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.setFlag(false);
this.setVisible(false);
}
private void jbtncambiaActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
this.setHoras(Double.parseDouble(this.jtxthoras.getText()));
this.setFlag(true);
this.setNom(this.jtxtnom.getText());
this.setVisible(false);
}
/**
* @param args the command line arguments
*/
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public double getHoras() {
return horas;
}
public void setHoras(double horas) {
this.horas = horas;
}
UTP
-61-
UTP
-62-
CAPITULO DE HERENCIAS
La herencia permite crear una clase nueva (subclase o clase derivada) que tenga el
mismo comportamiento que otra (superclase o clase base) y adems extienda o
adapte ese comportamiento
a unas necesidades especficas.
La nueva subclase heredar los atributos y los mtodos de la clase base, los cuales se
aadirn a los definidos en la propia subclase.
La capacidad de descomponer un problema o concepto en un conjunto de
objetos relacionados entre s, y cuyo comportamiento es fcilmente
identificable, puede ser muy til para el desarrollo de programas informticos.
B. Jerarqua
La herencia es el mecanismo fundamental de relacin entre clases en la
orientacin a objetos. Relaciona las clases de manera jerrquica; una clase
padre o superclase sobre otras clases hijas o subclases.
UTP
-63-
}
Por ejemplo, creamos una clase Persona
public class Persona {
String nombre;
int edad;
String domicilio;
public Persona() {
}
void asignarEdad(int ed){
this.edad=ed;
}
void asignarNombre(String nom){
nombre=nom;
}
int obtenerEdad(){
return edad;
}
String obtenerNombre(){
return nombre;
}
}
Luego creamos una subclase llamada Alumno
public class Alumno extends Persona{
int semestre;
String seccion;
public Alumno() {
}
void asignarSemestre(int semes){
semestre=semes;
}
void asignarSeccion(String sec){
seccion=sec;
}
int obtenerSemestre(){
return semestre;
}
String obtenerSeccion(){
return grupo;
}
}
La palabra clave extends se utiliza para decir que deseamos crear una
subclase de la clase que es nombrada a continuacin, en nuestro caso Alumno
es hija de Persona.
UTP
-64-
E. Limitaciones en la herencia
Todos los campos y mtodos de una clase son siempre accesibles para el
cdigo de la misma clase.
Sin embargo los tres primeros modificadores (public, private y protected) son
los ms comunes que se usan para controlar el acceso desde otras clases, y
para controlar la herencia por las subclases.
public: Los miembros declarados public son accesibles en cualquier lugar en
que sea accesible la clase, y son heredados por las subclases.
UTP
-65-
F. COMPOSICIN
La tcnica en la que una clase se compone o contiene instancias de otras
clases se denomina composicin. Es una tcnica muy habitual cuando se
disean clases.
Por ejemplo analicemos el sig. cdigo:
class Circulo {
Punto centro;
int radio;
float superficie() {
return 3.14 * radio * radio;
}
}
Diramos que un Circulo tiene un Punto (centro) y un radio.
G. REDEFINICIN DE MTODOS. EL USO DE super.
Analicemos el siguiente ejemplo:
class Empleado {
String nombre;
int numEmpleado , sueldo;
static private int contador = 0;
Empleado(String nombre, int sueldo) {
this.nombre = nombre;
this.sueldo = sueldo;
numEmpleado = ++contador;
}
public void aumentarSueldo(int porcentaje) {
sueldo += (int)(sueldo * aumento / 100);
}
UTP
UTP
UTP
-68-
Ejemplo 2.- Elaborar la clase documento que sera heredado por la clase
Factura y la clase boleta:
Documento
String numero
String fecha
Double monto
Factura
String ruc
Boleta
String Nombre
import javax.swing.JOptionPane;
import java.util.ArrayList;
public class GestorVentas {
public static ArrayList ListaD=new ArrayList();
public static void main(String[] args) {
int op;
String Menu="(0)Salir\n" +
"(1)Nueva Factura\n" +
"(2)Nueva Boleta\n" +
"(3)LIstar Todos\n" +
"(4)Listar Facturas\n" +
"(5)Listar Boletas\n" +
"(6)Buscar Facturas\n" +
"(7)Calcular Igv\n";
for(;;){
UTP
-69-
op=Integer.parseInt(JOptionPane.showInputDialog(Menu));
switch(op){
case 0: System.exit(0);break;
case 1: nuevaFactura();break;
case 2: nuevaBoleta();break;
case 3: listarTodos();break;
case 4: listarFacturas();break;
case 5: lsitarBoletas();break;
case 6: buscarfatura(num);break;
case 7: calcularIgv();break;
default: JOptionPane.showMessageDialog(null,"Opcion Incorrecta");
} //fin del switch
}//del for
} //del main
UTP
-70-
}
public static void listarBoletas(){
for(int i=0;i<ListaD.size();i++){
if(ListaD.get(i) instanceof Boleta){
((Boleta)ListaD.get(i)).imprimir();
}
}
}
public static void buscarfatura(int num){
int num;
num=Integer.parseInt(JOptionPane.showInputDialog("Ingrese el numero"));
for(int i=0;i<ListaD.size();i++){
if(ListaD.get(i) instanceof Factura){
if(((Factura)ListaD.get(i)).Numero==num){
((Factura)ListaD.get(i)).imprimir();
}
}
}
}
public static void calcularIgv(){
for(int i=0;i<ListaD.size();i++){
if(ListaD.get(i) instanceof Factura){
((Factura)ListaD.get(i)).imprimir();
double igv;
double monto=((Factura)ListaD.get(i)).Monto;
igv= monto-(monto/1.19);
System.out.println("Su Igv es ......"+igv);
}
}
}
}
//fin de la clase principal gestor de Ventas
class Documento{
String Fecha;
double Monto;
int Numero;
void imprimir(){
System.out.println("Fecha :"+Fecha);
System.out.println("Monto :"+Monto);
System.out.println("Numero:"+Numero);
}
}
//
class Boleta extends Documento{
String Nombre;
void imprimir(){
System.out.println("Nombre :"+Nombre);
}
}
//
UTP
-71-
2.- crear la clase TarjetaCredito( nro de tarjeta, nombre del cliente, fecha de caducacion)
crear las subclases TarjetaDorada(linea de credito, Cargo ), TarjetaTotus(sueldo del
cliente, Empresa donde trabaja) realizar las subclases ademas comprobarlo en el main
para asignar los datos.
3.- (Sistema de Nmina) Elaborar un programa que permita procesar la nmina de una
empresa.
Para ello considere el siguiente diagrama de clases:
UTP
-72-
UTP
-73-
EJEMPLOS DE HERENCIA
import java.text.DecimalFormat;
public class herencia01 {
public static void main(String[] args) {
// TODO code application logic here
circulo x=new circulo();
x.setRadio(5);
x.imprime();
Cilindro y=new Cilindro();
y.setRadio(7);
y.altura=12;
y.imprime();
}
}
//LA CLASE PRINCIPAL CIRCULO
class circulo{
private int radio;
DecimalFormat dos=new DecimalFormat("0.00");
double area(){
return radio*radio*Math.PI;
}
void imprime(){
System.out.print("\n area del circulo "+dos.format(area()));
}
public int getRadio() { //ENCAPSULA EL DATO PARA LEER
return radio;
}
public void setRadio(int radio) { // PARA ESCRIBIR
this.radio = radio;
}
}
class Cilindro extends circulo{ //CLASE EXTENDIDA DE LA CLASE CIRCULO
int altura;
double area(){
double ac;
ac=super.area()*altura;
return ac;
}
void imprime(){
super.imprime();
UTP
-74-
package
herencia;
Pregrado
//herencia de la clase alumno
public class AlumnoPostgrado extends
Alumno {
package herencia;
abstract class Alumno {
public AlumnoPostgrado(String nom,
private String matricula;
String mat,
private String nombre;
double n1, double n2, double n3)
protected double n1, n2, n3;
{
//constructor de la clase alumno
super(mat,nom,n1,n2,n3);
public Alumno(String mat, String n,
}
double n1, double n2, double n3) {
matricula = mat;
public double calcularNota() {
nombre = n;
return (n1+n2+n3)/3.0;
this.n1 = n1;
}
this.n2 = n2;
this.n3 = n3;
}
}
public void Imprime(){
System.out.print("\n Matricula:"+this.matricula);
System.out.print("\n Nombre:"+this.nombre);
System.out.print("\n nota1:"+this.n1);
System.out.print("\n nota2:"+this.n2);
System.out.print("\n nota3:"+this.n3);
}
// metodo abstracto para el polimorfismo
abstract double calcularNota();
UTP
-75-
package herencia;
public class AlumnoPregrado extends Alumno {
/** Creates a new instance of AlumnoPregrado */
public AlumnoPregrado(String nom, String mat,
double n1, double n2, double n3) {
super(mat,nom,n1,n2,n3);
}
public double calcularNota() {
return n1*0.25 + n2*0.25 + n3*0.5;
}
}
UTP
-76apre = (AlumnoPregrado)x.get(i);
apre.Imprime();
System.out.println("\n promedio:"+apre.calcularNota());
}
else {
apos = (AlumnoPostgrado)x.get(i);
System.out.println(apos.calcularNota());
}
}
// Calculo de notas aprovechando el polimorfismo
System.out.print("\n impresion 2");
for (int i=0; i<x.size(); i++) {
a = (Alumno)x.get(i);
a.Imprime();
System.out.println("\n promedio:"+a.calcularNota());
}
}
}
Gestin de Excepciones
Las excepciones son el mecanismo por el cual pueden controlarse en un programa Java
las condiciones de error que se producen. Estas condiciones de error pueden ser errores
en la lgica del programa como un ndice de un array fuera de su rango, una divisin
por cero o errores disparados por los propios objetos que denuncian algn tipo de estado
no previsto, o condicin que no pueden manejar.
La idea general es que cuando un objeto encuentra una condicin que no sabe manejar
crea y dispara una excepcin que deber ser capturada por el que le llam o por alguien
ms arriba en la pila de llamadas. Las excepciones son objetos que contienen
informacin del error que se ha producido y que heredan de la clase Throwable o de la
clase Exception. Si nadie captura la excepcin interviene un manejador por defecto que
normalmente imprime informacin que ayuda a encontrar quin produjo la excepcin.
Existen dos categoras de excepciones:
UTP
-77-
Generacin de excepciones
Supongamos que tenemos una clase Empresa que tiene un array de objetos Empleado
(clase vista en captulos anteriores). En esta clase podramos tener mtodos para
contratar un Empleado (aadir un nuevo objeto al array), despedirlo (quilarlo del array)
u obtener el nombre a partir del nmero de empleado. La clase podra ser algo as como
lo siguiente:
public class Empresa {
String nombre;
Empleado [] listaEmpleados;
int totalEmpleados = 0;
. . .
Empresa(String n, int maxEmp) {
nombre = n;
listaEmpleados = new Empleado [maxEmp];
}
. . .
void nuevoEmpleado(String nombre, int sueldo) {
if (totalEmpleados < listaEmpleados.length ) {
listaEmpleados[totalEmpleados++] = new Empleado(nombre,sueldo);
}
}
}
En nuestro ejemplo:
void nuevoEmpleado(String nombre, int sueldo) throws
CapacidadEmpresaExcedida {
if (totalEmpleados < listaEmpleados.length) {
UTP
Captura de excepciones
Con la primera versin del mtodo nuevoEmpleado (sin excepcin) se invocara este
mtodo de la siguiente forma:
Empresa em = new Empresa("La Mundial");
em.nuevoEmpleado("Adn Primero",500);
UTP
-79-
Clusula finally
La clusula finally forma parte del bloque try / catch y sirve para especificar
un bloque de cdigo que se ejecutar tanto si se lanza la excepcin como si no. Puede
servir para limpieza del estado interno de los objetos afectados o para liberar recursos
externos (descriptores de fichero, por ejemplo). La sintaxis global del bloque try /
catch / finally es:
try {
. . .
} catch (Clase_Excepcion nombre) {...}
catch (Clase_Excepcion nombre) {...}
. . .
finally {...}
UTP
-80-
link
http://www.webtaller.com/manualjava/caracteristicas-java.php
http://www.webtaller.com/manualjava/programacion.php
http://www.webtaller.com/manual-java/controlflujo.php
http://www.webtaller.com/manual-java/variablesmetodos.php
http://www.monografias.com/trabajos42/manualde-java/manual-de-java.shtml
http://www.cec.uchile.cl/manuales/contenidos/Java/