java orientado a objetos

80
UTP -1- Ing. Alberto Moreno Lenguaje de Programación I Parte I Prof. Ing. Alberto Moreno Separata FACULTAD DE INGENIERIA INDUSTRIAL Y DE SISTEMAS 2008-1

Upload: alberto-moreno-cueva

Post on 08-Jun-2015

30.907 views

Category:

Documents


2 download

DESCRIPTION

Java inicial desde la parte inicial hasta programacion orientado a objetos

TRANSCRIPT

Page 1: Java orientado a objetos

UTP -1-

Ing. Alberto Moreno

Lenguaje de Programación I

Parte I

Prof. Ing. Alberto Moreno

Separata

FACULTAD DE INGENIERIA INDUSTRIAL Y

DE SISTEMAS

2008-1

Page 2: Java orientado a objetos

UTP -2-

Ing. Alberto Moreno

INDICE

1.- Introducción

2.- Tipos de Datos Variables

3.- Instrucciones de Control

4.-Diagrama de actividades

5.- Funciones de Cadena

6.- Vectores y Matrices

7.- Métodos de Usuarios

8.- Clases . Objetos, Constructores

9.- Herencias

10.- poliformismos

Page 3: Java orientado a objetos

UTP -3-

Ing. Alberto Moreno

1.- LENGUAJE DE PROGRAMACIÓN I(JAVA)

Un lenguaje de Programación Orientada a Objetos nos permite organizar el código enentidades como las clases compuestas de datos y funciones, y a través de lacaracterística de la herencia podemos organizar las clases en jerarquías.

El objetivo es el de enseñar al lector a traducir la descripción de un problema o situaciónque se plantea a código, a organizar el código en funciones, a agrupar datos y funcionesen clases y las clases en jerarquías.

MARCO TEORICO

El lenguaje de programación Java

Java es un lenguaje de programación de alto nivel que tiene las siguientescaracterísticas:

• Orientado a objetos

• Distribuido y dinámico

• Robusto

• Seguro

• Multitarea

• Portable

La mayoría de los lenguajes de programación se caracterizan por ser interpretados ocompilados, lo que determina la manera en como serán ejecutados en una computadora.

Java tiene la característica de ser al mismo tiempo compilado e interpretado. Elcompilador es el encargado de convertir el código fuente de un programa en un códigointermedio llamado bytecode que es independiente de la plataforma en que se trabaje yque es ejecutado por el intérprete de Java que forma parte de la Máquina Virtual deJava.

Page 4: Java orientado a objetos

UTP -4-

Ing. Alberto Moreno

La plataforma Java

Una plataforma es el ambiente de hardware o software en el cual se ejecutan losprogramas. En general, la mayoría de las plataformas pueden ser descritas como unacombinación de hardware y sistema operativo. Algunas de las plataformas máspopulares son Windows, Solaris, Linux y MacOS.

La plataforma Java difiere de las anteriores en que ésta es una plataforma basadaúnicamente en software que corre por encima de las plataformas basadas en hardware.

La plataforma Java consta de dos componentes:

• La Máquina Virtual de Java (JVM)

• La Interfaz de Programación de Aplicaciones de Java (API Java)

A continuación se muestra una representación de los elementos que forman parte de laplataforma Java.

• javac. Es el compilador de Java. Se encarga de convertir el código fuente escritoen Java a bytecode.

• java. Es el intérprete de Java. Ejecuta el bytecode a partir de los archivos class.

• appletviewer. Es un visor de applets. En la mayoría de las ocasiones puedeutilizarse en lugar de un Navegador Web.

• javadoc. Se utiliza para crear documentación en formato HTML a partir de elcódigo fuente Java y los comentarios que contiene.

Page 5: Java orientado a objetos

UTP -5-

Ing. Alberto Moreno

• javap. Es un desensamblador de Java.

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

Compilación y ejecución de programas Java

Uso del JDK para construir aplicaciones

2.- Sintaxis de Java

La sintaxis de un lenguaje define cómo se usarán las palabras claves, los operadores ylas variables para construir y evaluar expresiones. La sintaxis de Java especifica comose escribirán los siguientes elementos:

• Comentarios.

• Identificadores.

• Palabras clave.

• Literales.

• Expresiones y operadores.

• Variables y tipos de datos.

• Bloques y sentencias.

Page 6: Java orientado a objetos

UTP -6-

Ing. Alberto Moreno

Comentarios

Java ofrece tres tipos de comentarios: dos para comentarios regulares en el códigofuente y uno para la documentación especial del sistema javadoc.

• Comentarios de varias líneas.

Los comentarios de varias líneas se incluyen entre los símbolos /* y */, como enC y C++.

/*Este es un ejemplo deun comentario de variaslíneas.*/

• Comentarios de una sola línea.

Para comentariar una sola línea se utiliza la doble diagonal //. El comentario seinicia cuando se encuentra la doble diagonal y continua hasta el final de la línea.

// Este es un comentario de una sola linea//Este es otro comentario

• Comentarios para documentación.

Realmente este tipo de comentario es el mismo que el de varias líneas con ladiferencia de que la información que contenga será usada para un procesamientoespecial que lleva a cabo la herramienta javadoc.

Se distingue del comentario de varias líneas porque se agrega un asteriscoadicional al inicio del comentario.

Ejemplo:

/**Este tipo de comentarioslos utiliza laherramienta javadoc*/

Palabras clave

La siguiente tabla muestra las palabras claves de Java, éstas son reservadas y no puedenser utilizadas como identificadores.

abstract default if private this

Boolean do implements protected throw

Break double import public throws

Page 7: Java orientado a objetos

UTP -7-

Ing. Alberto Moreno

Byte else instanceof return transient

Case extends int short try

catch final interface static void

Char finally long strictfp** volatile

class float native super while

const* for new switch

continue goto* package synchronized

* Son palabras claves de Java que no son usadas actualmente.** Palabra clave agregada en Java 2

true, false, and null no son palabras claves pero son palabras reservadas, así quetampoco pueden ser utilizadas como identificadores.

Literales

Una literal es un valor constante formado por una secuencia de caracteres. Cualquierdeclaración en Java que defina un valor constante -un valor que no pueda ser cambiadodurante la ejecución del programa- es una literal.

Son ejemplos de literales los números, los caracteres y las cadenas de caracteres.

• Literales numéricasSe pueden crear literales numéricas a partir de cualquier tipo de dato primitivo.

Ej.• 123 //literal int• 123.456 //literal double• 123L //literal long• 123.456F //literal flota

• Literales booleanas :

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

• Literales de caracteres

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

Ej. 'a', '%', '7'

Page 8: Java orientado a objetos

UTP -8-

Ing. Alberto Moreno

• Literales de cadena

Una cadena es una combinación de caracteres. Las cadenas en Java son instanciasde la clase String, por ello cuentan con métodos que permiten combinar, probar ymodificar cadenas con facilidad.Las literales de cadena se representan por una secuencia de caracteres entre comillasdobles.

Ej."hola", "cadena123", "12345"

Expresiones y Operadores

• Expresión

Una expresión es una combinación de variables, operadores y llamadas demétodos construida de acuerdo a la sintaxis del lenguaje que devuelve un valor.

El tipo de dato del valor regresado por una expresión depende de los elementosusados en la expresión.

• Operadores

Los operadores son símbolos especiales que por lo común se utilizan enexpresiones.

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

Operador Significado Ejemplo

Operadores aritméticos

+ Suma a + b

- Resta a - b

* Multiplicación a * b

/ División a / b

% Módulo a % b

Operadores de asignación

Page 9: Java orientado a objetos

UTP -9-

Ing. Alberto Moreno

= Asignación a = b

+= Suma y asignación a += b (a=a + b)

-= Resta y asignación a -= b (a=a - b)

*= Multiplicación y asignación a *= b (a=a * b)

/= División y asignación a / b (a=a / b)

%= Módulo y asignación a % b (a=a % b)

Operadores relacionales

== Igualdad a == b

!= Distinto a != b

< Menor que a < b

> Mayor que a > b

<= Menor o igual que a <= b

>= Mayor o igual que a >= b

Operadores especiales

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

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

(tipo)expr Cast a = (int) b

+ Concatenación de cadenas a = "cad1" + "cad2"

. Acceso a variables y métodos a = obj.var1

( ) Agrupación de expresiones a = (a + b) * c

La tabla siguiente muestra la precedencia asignada a los operadores, éstos son listadosen orden de precedencia.

Los operadores en la misma fila tienen igual precedencia

Operador Notas

. [] () Los corchetes se utilizan para los

Page 10: Java orientado a objetos

UTP -10-

Ing. Alberto Moreno

arreglos

++ -- ! ~ ! es el NOT lógico y ~ es elcomplemento de bits

new (tipo)expr new se utiliza para crear instancias declases

* / % Multiplicativos

+ - Aditivos

<< >> >>> Corrimiento de bits

< > <= >= Relacionales

== != Igualdad

&& AND lógico

|| OR lógico

? : Condicional

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

Asignación

Ejemplos demostrativos:

public class PrimerPrograma {

public static void main(String[ ] args) { System.out.println("Hola, mi primerprograma");}}

Explicacion .-public class PrimerProgramaNombre de la clase ., coincide con el nombre del archivo.

public static void mainLa función principal equivalente a la función main de C/C++

String[ ] argvPermite de recuperar argumentos transmitidos al programa al momento de sulanzamiento

System.out.println(“Hola … ")Método de visualización en la ventana consola

Page 11: Java orientado a objetos

UTP -11-

Ing. Alberto Moreno

Inicializacion y constantes

Pensar a la inicialización al riesgo de una error de compilaciónint n; System.out.println(" n = " + n);

InicializaciónUna variable puede recibir un valor inicial al momento de su declaración :

int n = 15;boolean b = true

Este instrucción tiene el mismo papel :

int n;n = 15; boolean b; b = true;

Constantes:Son variables cuyas valor cual se puede afectar una sola vezNo pueden ser modificadasSon definidas con la palabra clave finalfinal int n = 5;final int t;...t = 8;n = 10; // error : n esta declarado final

Ejercicios desarrollados:

1.- Se tienen como datos la base y altura de un triangulo rectángulo , calcular suhipotenusa.

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;

Page 12: Java orientado a objetos

UTP -12-

Ing. Alberto Moreno

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

}

}

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

public class demo4 {

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

ENUNCIADO DEL PROBLEMA:

PASOS PARA CREAR UN PROYECTO DENTRO DEL PROGRAMA:

1)Crear un proyecto para windows

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

proyecto:

CLIKLuego en JavaAplication

CLIK

Page 13: Java orientado a objetos

UTP -13-

Ing. Alberto Moreno

3)

CLIK

No olvidarguardar dentro de“AlumnoUtp”

CLIK

Page 14: Java orientado a objetos

UTP -14-

Ing. Alberto Moreno

4) Enseguida digitamos el código correspondiente del programa.

Es importantedigitar la libreríacorrespondiente

Page 15: Java orientado a objetos

UTP -15-

Ing. Alberto Moreno

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 codificación..

6) Una vez compilada el programa digitaremos los datos de los trabajadorescorrespondiente, como observaremos en los siguientes cuadros.

Page 16: Java orientado a objetos

UTP -16-

Ing. Alberto Moreno

Page 17: Java orientado a objetos

UTP -17-

Ing. Alberto Moreno

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

Page 18: Java orientado a objetos

UTP -18-

Ing. Alberto Moreno

DIAGRAMA DE ACTIVIDADES nos va permitir tener una mejor visión sobre losprocesos que vamos a desarrollar en el programa , la diagramacion puede elaboraseempleando el Rational Rose o el UML.

Page 19: Java orientado a objetos

UTP -19-

Ing. Alberto Moreno

Ejecución condicional

El formato general es:

if (expresion_booleana)sentencia

[elsesentencia]

sentencia (a todo lo largo de este capítulo) puede ser una sola sentencia o unbloque de sentencias separadas por ; y enmarcadas por llaves { y }. Es decir

if (expresion_booleana) {sentencia;

sentencia; . . .}else {

sentencia; sentencia; . . .}

Page 20: Java orientado a objetos

UTP -20-

Ing. Alberto Moreno

Ambigüedad

if (a) if (b) S1; else S2;significaif (a) { if (b) S1; else S2; }

expresion_booleana es una expresión que se evalua como true o false (esdecir, de tipo booleano). Si el resultado es true la ejecución bifurca a lasentencia que sigue al if . En caso contrario se bifurca a la sentencia que sigueal else.

Los corchetes en el formato anterior indican que la clausula else es opcional.

Page 21: Java orientado a objetos

UTP -21-

Ing. Alberto Moreno

Ejemplos de instrucción if else

1.- Se tiene como datos de ingreso los datos de un triángulo (lado1, lado2 y

lado3) en caso que forme triángulo calcular su área, de lo contrario muestre un

mensaje de error, no se forma triángulo. Para formar un triángulo un lado

siempre tiene que ser menor a la suma de los otros dos lados. Y su área de la

siguiente manera:

public class demo3 {

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

} else{ System.out.print("No forma triangulo"); }

} }

2321 LLLP ++

=

)3)(2)(1(rea LPLPLPpA −−−=

Page 22: Java orientado a objetos

UTP -22-

Ing. Alberto Moreno

Ejercicios propuestos 1.-1.- Datos del programa descripción de un producto, el precio y la cantidadvendida, calcular y mostrar:a. Importe por la compra, multiplique precio por la cantidad vendida.b. Impuesto general a las ventas (Igv), es 19% del importe de compra.c. Importe final por la compra, sume el importe de compra más el Igv.

2.- Dato un número de cuatro cifras, calcular y mostrar:a. Suma de las cifrasb. Promedio de las cifras.

3.- Desarrolle un algoritmo para la telefónica que permita mostrar el pagopor consumo telefónico; Datos del programa código del usuario, el númerotelefónico y la cantidad de minutos utilizados.Visualice el código del usuario, el importe por los minutos utilizados, el IGVy el pago total.

Tenga en cuenta que la empresa cobra S/0.30 por minuto utilizado, S/ 48.00de renta básica y que el IGV es 19% respecto al importe por minutos.

4.- Elabore un algoritmo para EDELNOR,datos el código del suministro y lacantidad de kilowatts consumidos. Calcule y muestre los siguientes pagos:a. Importe inicial.b. El pago del 3.5% por alumbrado publico.c. El pago del 1.8 por mantenimiento.d. El pago del 4.8 por reajuste de acuerdo a ley.e. El 19% por pago del IGVf. El pago total.Los porcentajes son respecto al importe inicial.

Page 23: Java orientado a objetos

UTP -23-

Ing. Alberto Moreno

Considerar que el Precio por Kilowats es S/ 0.09 .

5.- Se desea obtener medallas a partir de una plancha rectangular metálica, los datos de ingreso del programa son los lados de la plancha ancho yaltura y el radio de la medalla expresado en centímetros, calcular : - Numero de medallas circulares - Área SobranteCondicionales

6.-Datos del programa el nombre de un trabajador sus horas trabajadas ytarifa normal, Si tiene horas extras (horas trabajadas mayores a 48 hrs.)calcular y mostrar:a. Pago normalb. Horas extrasc. Pago extras será 10% de incremento de la tarifa normal por cada hora

extra.d. Sueldo final.

7.- Dato del programa un numero cualquiera, solo si el número es múltiplode 2 y 5 mostrar:a. El doble del número ingresado.b. Raíz cúbica del número ingresado.c. El cubo del número ingresado.

8.- Datos del programa el nombre de un cliente, condición de pago (E:efectivo, C:crédito) y el precio del producto. Calcular y mostrar:a. Descuento, será 10% del precio siempre que la compra se efectúe en

efectivo, sino cero.b. Recargo, será 3% del precio si la compra fue a crédito, sino cero.c. Precio final

9.- Ingresar como datos las horas y minutos respecto a las manecillas de lasagujas de un reloj, se pide calcular el ángulo que forman estas manecillas.Por ejemplo horas= 3 y minutos= 30 ángulo formado =90

10.-Ingrese por teclado tres números cualquiera, mostrar los númerosordenados ascendentemente. Considerar que los números ingresados sondiferentes.

11.- Ingrese por teclado el nombre y dos notas (parcial y final de peso doble),calcular su promedio y una observación de acuerdo a:

Promedio Clasificación00 – 05 Deficiente06 – 10 Malo11 – 13 Regular14 – 17 Bueno18 – 20 Excelente

Page 24: Java orientado a objetos

UTP -24-

Ing. Alberto Moreno

Procesos Repetitivos.-

Iteraciones con while

Sintaxis formato 1:

while (expresion_booleana)sentencia

Sintaxis formato 2:

dosentencia

while (expresion_booleana)

La sentencia o bloque se sentencias (se aplica la misma idea que para el if-else) seejecuta mientras que la expresion_booleana se evalue como true

La diferencia entre ambos formatos es que en el primero la expresión se evalua alprincipio del bloque de sentencias y en el segundo se evalua al final

Iteraciones con for

El formato es:

for ( inicializacion ; expresion_booleana ; step )sentencia

inicializacion es una sentencia que se ejecuta la primera vez que se entra en elbucle for . Normalmente es una asignación. Es opcional.

expresion_booleana es una expresión que se evalua antes de la ejecución de lasentencia, o bloque de sentencias, para cada iteración. La sentencia o bloque desentencias se ejecutan mientras que la expresion_booleana se evalue comocierta. Es opcional.

step es una sentencia que se ejecuta cada vez que se llega al final de la sentencia obloque de sentencias. Es opcional.

Una utilización clásica de un bucle de tipo for se muestra a continuación para evaluar uncontador un número fijo de veces:

Page 25: Java orientado a objetos

UTP -25-

Ing. Alberto Moreno

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

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

Ejemplos:

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

public static void main(String[] args){ int num=234567378; // sea este numero int r,sm=0; String cad=""; while(num>0){ r=num%10; sm += r; cad=cad+r; num=num/10;

} System.out.print("la suma de los digitos="+sm); System.out.print("\n numero invertido="+cad);

}}

2.- Ingresar cierta cantidad de bolas de billar , obtener las superficiesformadas y el numero de bolas que sobran , cada superfice es una basetriangular .

public repetir02 { public static void main(String[] args) throws Exception { int doble=0,nbolas, ns=0, c=1,sm=0;

BufferedReader tecla=new BufferedReader(newInputStreamReader(System.in)); System.out.println("ingrese numero de bolas"); nbolas=Integer.parseInt(JOptionPane.showInputDialog("ingrese numero debolas")); //nbolas=Integer.parseInt(tecla.readLine()); System.out.println("ingrese superficie");

Page 26: Java orientado a objetos

UTP -26-

Ing. Alberto Moreno

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 números por teclado luego muestre todos los números ingresados yademás muestre el mayor numero y el segundo mayorpor ejemplo la salida de 10 números será:

Page 27: Java orientado a objetos

UTP -27-

Ing. Alberto Moreno

2.- Realizar un programa que permita calcular el pago de matricula de un alumno losdatos de ingreso son la Escala (A,B y C) el promedio ponderado, y la cantidad decréditos; Ingresar los datos hasta que se ingrese por teclado el Carácter * en la Escala.Las condiciones:

El pago por crédito es de acuerdo a la escala : A=>S/ 20.0 , B=>S/. 16 , y C =>S/12.0Además se hará un descuento del 15% del pago si su promedio es mayor a 15 y seencuentra entre 12-15 solo un 10%.

3.- En el mundial de la sub_17 de corea se desea saber quien fue el primer, y segundogoleador 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 losdatos hasta que ingrese * en el país.

4.- ingresar un conjunto de trabajadores hasta que se ingrese en la categoría un * , elpago hora para la categoría 1(empleado) 12 y descuento es 10% y para obrero (2) es10 soles , descuento 8% , mostrar el pago total y descuento.Datos de ingreso , horas trabajadas y categoría

5.- ingrese un numero luego muestre dicho numero en romanos .

6.- ingrese un numeró de cinco cifras luego muestre si es capicúa y un mensaje de erroren caso que se ingrese un numero de diferente longitud.7.- Ingrese un numero entero de cualquier longitud , luego muestre:

a) La suma de sus dígitosb) El numero ordenado de manera ascendentec) La suma de los cuadrados de los dígitos pares.

Ejemplo si el numero es : 45672 La suma de sus dígitos>24 Ordenado => 24567

8.- Se desea formar una pirámide de base cuadrada con una cierta cantidad de bolas debillar , cada superficie esta formada por un numero cuadrado ( 12, 22, 32 ,...) , Mostrarla 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 números perfectos menores a 1000 ; un numero es perfecto cuandola suma de sus divisores es el mismo numero , sin incluir el mismo numero, por ejemploel 6 sus divisores 1+2+3

10.- Mostrar todos los números primos del 1-100

11.-Pasar un numero del sistema decimal a Hexadecimal

12.- Un automóvil viaja a una velocidad promedio de 55km por hora durante cuatrohoras. Escriba un programa que muestre la distancia, en km, que el auto ha recorridodespués de cada media hora, 0.5 hora , 1hora, 1.5, 2,4, ... horas hasta el final delviaje.

Page 28: Java orientado a objetos

UTP -28-

Ing. Alberto Moreno

13.- Una pelota de golf se lanza desde un avión. La distancia, d, que la pelota cae en tsegundos está dada por la ecuación d = (1/2) * g*t 2 donde g es la aceleración de lagravedad y es igual a 9.81 m/seg 2 . Escribir un programa que muestre la distancia ala que cae la pelota en cada intervalo de un segundo durante diez segundos y ladistancia total que la pelota ha recorrido al final de cada intervalo. La salida debecontemplar la siguiente tabla:Tiempo(segundos) Distancia en el intervalo actual (metros) Distancia total0 0.0 0.01 4.905 4.905

14.- Se compra una computadora a crédito , que puede ser en 6 , 12 o 18 meses , losintereses varían de acuerdo a los meses: Meses % interés 6 20

12 3018 40Mostrar un calendario de pagos , de acuerdo a la siguiente tabla:

Precio Final : ........... Mes Cuota Mensual Saldo===================================== 1 ...... ...... 2 ..... ......Arrays

Declaración y acceso

Un array es una colección ordenada de elementos del mismo tipo, que son accesibles através 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 declaración dice que a es un array de enteros y p un array de objetos de tipo Punto.Más exactamente a es una referencia a una colección de enteros, aunque todavía no sesabe cuantos elementos tiene el array. p es una referencia a una colección de referenciasque apuntarán objetos Punto.

Un array se crea como si se tratara de un objeto (de hecho las variables de tipo array sonreferencias):

Los datos de ingresoSon:Precio de la computadoray el tipo de pago

Page 29: Java orientado a objetos

UTP -29-

Ing. Alberto Moreno

a = new int [5];p = new Punto[3];

En el momento de la creación del array se dimensiona el mismo y se reserva la memorianecesaria.

También puede crearse de forma explícita asignando valores a todos los elementos delarray en el momento de la declaración, de la siguiente forma:

int [ ] a = { 5 , 3 , 2 };

El acceso a los elementos del array se realiza indicando entre corchetes el elemento delarray que se desea, teniendo en cuenta que siempre el primer elemento del array es elíndice 0. Por ejemplo a[1]. En este ejemplo los índices del array de tres elementosson 0, 1 y 2. Si se intenta usar un índice que está fuera del rango válido para ese array seproduce un error (en realidad una excepción: las excepciones se tratan en un capítuloposterior) de 'Indice fuera de rango'. En el ejemplo anterior se produce esta excepción siel índice es menor que 0 o mayor que 2.

Se puede conocer el número de elementos de un array usando la variable length. Enel ejemplo a.length contiene el valor 3.

Un array, como cualquier otra referencia puede formar parte de la lista de parámetros oconstituir el valor de retorno de un método. En ambos casos se indica que se trata de unarray con los corchetes que siguen al tipo. Por ejemplo:

String [ ] metodoConArrays ( Punto [ ] ) { . . }

El método metodoConArrays recibe como parámetro un array de Puntos y devuelve unarray de Strings. El método podría invocarse de la siguiente forma:

Punto p [ ] = new Punto [3];. . .String [ ] resultado = metodoConArrays(p);

Arrays multidimensionales

Es posible declarar arrays de más de una dimensión. Los conceptos son los mismos quepara los arrays monodimensionales.

Por ejemplo:

int [ ][ ] a = { { 1 , 2 } , { 3 , 4 } , { 5 , 6 } };int x = a[1][0]; // contiene 3int y = a[2][1]; // contiene 6

Se pueden recorrer los elementos de un array multidimensional, de la siguiente forma:

Page 30: Java orientado a objetos

UTP -30-

Ing. Alberto Moreno

int [ ][ ] a = new int [3][2];int x = a.length;int y = a[0].length;for ( int i = 0 ; i < x ; i++ )

for ( int j = 0 ; j < y ; j++) a[i][j] = i * j;

Obsérvese en el ejemplo la forma de acceder al tamaño de cada dimensión del array.

Funciones/Metodos De UsuarioLas funciones/metodos son trozos de código que encapsulan cierta funcionalidadespecial. En general tienen datos de entrada y datos de salida (pueden no tenerlos). Son muy similares a la idea de una función en matemáticas:

funcion(x ) = x 2 + 3Esta función tiene una definición y puede ser evaluada con distintos valores, porejemplo si hacemos

funcion(5)

sabemos que el resultado seria 28.

La función matemática funcion(x ) = x 2 + 3 podría verse en JAVA como:

funcion( x){resultado = x * x + 3;¡}

veremos que es un poco más complicado....I La idea seria poder usar la función en un código cualquiera, por ejemplo:

Page 31: Java orientado a objetos

UTP -31-

Ing. Alberto Moreno

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 definición: Nombre funcion Nombres de los datos de entrada x Tipos de datos de entrada ??? Tipo de dato de retorno ??? C´odigo v´alido interno Instrucci´on de retorno ??? En JAVA se un poco m´as como:

int funcion(int x){int resultado = x * x + 3;return resultado;}

adicionalmente tenemos que empezar la función con public static (esto permite que lafunción sea usado directamente sin necesidad de crear el objeto.Un ejemplo completoclass 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 MathEjemplo dos funcionesclass Ejemplo{public static void main(String[] args){int n, i;System.out.println("Dime un entero positivo");n = In.readInt();

Page 32: Java orientado a objetos

UTP -32-

Ing. Alberto Moreno

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

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

public static int factorial(int numero){int factor = 1;for(int i =1; i<=numero; i++){ factor = factor * i; }return factorial;}

}

Page 33: Java orientado a objetos

UTP -33-

Ing. Alberto Moreno

Ejemplo2.-public class metodos {

public static void main(String[] args){ int[] a={12,3,5,7,9};

System.out.println("la suma es "+suma(a)); ordena(a); //imprimeir ordenados int k; for(k=0;k<a.length;k++){ System.out.println("\n " +a[k]);

} }

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; } }

}

}

Crear los siguientes métodos:a) pasando un vector de enteros quedevuelva su suma.

b ) Pasando un vector que permitaordenar dicho vector de forma ascdente.

Page 34: Java orientado a objetos

UTP -34-

Ing. Alberto Moreno

Ejercicios Propuestos 3

Realizar Las Siguientes cuyos Nombres y parámetros por valor Son:

1.- Función Acirculo pasando como valor un radio devuelva su área

2.- Función Acuadrado pasando como valor un lado devuelva su área

3.- Función Cilindro pasando como valores el radio y su altura devuelva su área

4.- Función Hipotenusa pasando como valor la base y la altura devuelva suhipotenusa.

5.- Función Triangulo pasando como valor tres lados de un triangulo en caso que formetriángulo que devuelva su área de lo contrario que devuelva un valor -1

6.- Función Hexadecimal que pasando un valor numérico que devuelva dicho numeroen el sistema hexadecimal (como cadena)

7.- Función Binario pasando como valor un numero que lo devuelva en el sistemabinario.(el valor es como cadena).

8.- Función Divisores pasando un numero que devuelva el numero de sus divisores

9.- Función Primo pasando un numero entero que devuelva un valor lógico si es Truees primo y False si no lo es.

10.- Función Left(Cad,n) pasando una cadena y numero de caracteres que devuelva loscarectares hacia la izquierda hasta el numero indicado.

11.- Función Right(Cad,n) que extraiga caracteres hacia la derecha.

12.- Función CUENTAV pasando una cadena , que devuelva el numero de vocales quecontiene dicha cadena..

Nota: A cada función elaborada ponga un nombre adecuado13.- Pasando un Numero que devuelva el factorial de dicho numero

14.-Pasando un Valor entero de grados centígrado y un carácter( “R”, “K”,”F”) querepresentan Ranking, kelvin y farenheit respectivamente ,devuelva su conversión. Algrado seleccionado.

15..-Pasando un numero entero que devuelva dicho numero en romanos (el valoringresado debe ser menor a 1000)

16.- Pasando un numero de cualquier longitud puede ser hasta millones , que devuelvadicho numero en Letras. Cletras(4567234)=> Cuatro millones quinientos sesenta y siete mil doscientos treintay cuatro.

Page 35: Java orientado a objetos

UTP -35-

Ing. Alberto Moreno

18.- Pasando un vector de enteros que devuelva la suma de los números.

19- Pasando una vector que devuelva el mismo vector pero ordenado.

20.- pasando un vector y un elemento que realice la búsqueda de dicho elemento en elvector si lo encuentra devuelve true de lo contrario false.

Solo entregar el resultado:21. ¿Cuál es el resultado del siguiente programa?class Ejercicio { public static void main(String [] args) { int[] a={3,4,5}; int [] b=a; b[1]=3; a=metodo1(a ,b); for (int i=0; i<a.length;i++) System.out.print(a[i]+" "+b[i]+" "); } public static int [] metodo1(int [] d, int [] e) {

e[1]=4; int [] c={0,0,0}; for (int i=0; i< d.length; i++) c[i]=d[i]+e[i]; return c; }//fin main}//fin clase

22. ¿Cuál es el resultado del siguiente programa?

class Ejercicio { public static void main(String [] args) { int [] Valores1 ={9, 48, 5, 3, 29, 62}; int [] Valores2 ={45, 1, 33}; metodo1(Valores1 [4]); metodo1(Valores2 [2]); metodo2(Valores2); Valores1=metodo3(Valores2); System.out.print(Valores1[0]); for (int i=1; i<Valores2.length;i++) System.out.print(" "+Valores1[i]); }

public static void metodo1(int numero) { numero = 0; numero=numero+10; }

public static void metodo2(int [] lista) { lista[1]=lista[2]; }

public static int [] metodo3(int [] lista) { for (int i=0; i<lista.length;i++) lista[i]=lista[i]+i; return lista; }}

Page 36: Java orientado a objetos

UTP -36-

Ing. Alberto Moreno

// una clase simple

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

}}

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);}

}

Crear una clase obrero con los atributos:Nombre , horas trabajadas y sección detrabajo( A o B)- Crear el método calculo- El pago por hora es de acuerdo a lasección si A su pago hora es de 8 soles sies B es de 7.4 soles

Page 37: Java orientado a objetos

UTP -37-

Ing. Alberto Moreno

MANEJO DE CADENAS

Clase Strings

Una secuencia de datos del tipo carácter se llama un string (cadena) y en el entorno Javaestá implementada por la clase String (un miembro del paquete java.lang).

String[] args;

Este código declara explícitamente un array, llamado args, que contiene objetos del tipoString. Los corchetes vacios indican que la longitud del array no se conoce en elmomento de la compilación, porque el array se pasa en el momento de la ejecución.

El segundo uso de String es el uso de cadenas literales (una cadena de caracteres entrecomillas " y ").

"Hola mundo!"

El compilador asigna implicitamente espacio para un objeto String cuando encuentrauna cadena literal.

Los objetos String son inmutables - es decir, no se pueden modificar una vez que hansido creados.

El paquete java.lang proporciona una clase diferente, StringBuffer, que se podrá utilizarpara crear y manipular caracteres al vuelo.

Concatenación de Cadenas

Java permite concatenar cadenas fácilmente utilizando el operador +. El siguientefragmento de código 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 seconvierte a cadena y luego se concatena con las otras.

Funciones cadena

Tipo de DatoDevuelto Sintaxis del metodo y descripciónn

Page 38: Java orientado a objetos

UTP -38-

Ing. Alberto Moreno

char charAt(int index) Devuelve un caracter del indice especificado

int compareTo(String anotherString)Compara dos cadenzas en longitud y contenido lexicografico .

String concat(String str)Cancoatena dos cadenas.

boolean equals(Object anObject) devuelve true si las dos cadenzas son iguales

int indexOf(String str)Devuelve la posicion de la primera ocurrencia encontrada.

int lastIndexOf(String str)Similar al anterior pero devuelve la posicion de la ultima ocurrenciaencontrada..

int length()devuelve la longitud de la cadena

String replace(char oldChar, char newChar)remplaza un caracter con un Nuevo caracter en toda la cadena.

String replaceAll(String regex, String replacement) similar al anterior pero trabaja con cadenas.

String replaceFirst(String regex, String replacement) Replaces the first substring of this string that matches the givenregular expression with the given replacement.

String[] split(String regex) divide una cadena por medio de un carácter común asignándolo aun vector.

String substring(int beginIndex) Retorna una cadena desde la posicion indicada hasta la ultimaposicion.

String substring(int beginIndex, int endIndex)devuelve una cadena desde la posición indicada hasta la diferencia de losindices especificados.

String toLowerCase() Convierte toda la cadena ha letras minusculas

String toUpperCase()Convierte toda la cadena a letras mayusculas..

String trim() Returns a copy of the string, with leading and trailing whitespaceomitted.

package

Page 39: Java orientado a objetos

UTP -39-

Ing. Alberto Moreno

Un package es una agrupación de clases afines. Equivale al concepto delibrería existente en otros lenguajes o sistemas. Una clase puede definirsecomo perteneciente a un package y puede usar otras clases definidas en ese oen otros packages.

Los packages delimitan el espacio de nombres (space name). El nombre deuna clase debe ser único dentro del package donde se define. Dos clases conel mismo nombre en dos packages distintos pueden coexistir e incluso puedenser usadas en el mismo programa.

Una clase se declara perteneciente a un package con la clausula package,cuya sintaxis es:

package nombre_package;

La clausula package debe ser la primera sentencia del archivo fuente.Cualquier clase declarada en ese archivo pertenece al package indicado.

Por ejemplo, un archivo que contenga las sentencias:

package miPackage;. . .class miClase {. . .

declara que la clase miClase pertenece al package miPackage.

La agrupación de clases en packages es conveniente desde el punto de vistaorganizativo, para mantener bajo una ubicación común clases relacionadas quecooperan desde algún punto de vista.

Claúsula import

Cuando se referencia cualquier clase dentro de otra se asume, si no se indicaotra cosa, que ésta otra está declarada en el mismo package. Por ejemplo:

package Geometria;. . .class Circulo { Punto centro; . . .}

En esta declaración definimos la clase Circulo perteneciente al packageGeometria. Esta clase usa la clase Punto. El compilador y la JVM asumen quePunto pertenece también al package Geometria, y tal como está hecha ladefinición, para que la clase Punto sea accesible (conocida) por el compilador,es necesario que esté definida en el mismo package.

package GeometriaBase;class Punto {

Page 40: Java orientado a objetos

UTP -40-

Ing. Alberto Moreno

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 claúsula import GeometriaBase.*; se hacen accesibles todos losnombres (todas las clases) declaradas en el package GeometriaBase. Si sólose quisiera tener accesible la clase Punto se podría declarar: importGeometriaBase.Punto;

La claúsula import simplemente indica al compilador donde debe buscarclases adicionales, cuando no pueda encontrarlas en el package actual ydelimita los espacios de nombres y modificadores de acceso.

Nombres de los packages

Los packages se pueden nombrar usando nombres compuestos separados porpuntos, de forma similar a como se componen las direcciones URL de Internet.Por ejemplo se puede tener un package de nombremisPackages.Geometria.Base.

El API de java está estructurado de esta forma, con un primer calificador (java ojavax) que indica la base, un segundo calificador (awt, util, swing, etc.) queindica el grupo funcional de clases y opcionalmente subpackages en un tercernivel, dependiendo de la amplitud del grupo. Cuando se crean packages deusuario no es recomendable usar nombres de packages que empiecen por javao javax.

ClasesModela una abstracción definiendo propiedades y comportamientos para losobjetos representados. Propiedades : atributos, variables Comportamientos : operaciones, métodos Implementación : Define cómo se proporcionan los servicios en unaclase. Una abstracción trata de mostrar las propiedades y comportamientos deun objeto que lo diferencia de otro.

Page 41: Java orientado a objetos

UTP -41-

Ing. Alberto Moreno

•Representa un conjunto de propiedades y métodos de uno o mas objetosidénticos.•Todo en Java forma parte de una clase, es una clase o describe cómofunciona una clase.•Ejmeplo: Public Class Persona {

}

ObjetosEs una instancia concreta de la abstracción que representa la clase. Los objetos en Java se manejan por referencias Declaración de unavariable de referencia. Persona persona1; Creación del objeto. Operador new. persona1 = new Persona(); persona2 = new Persona(); Donde: Persona es el nombre de la clase. El operador new devuelve una referencia al objeto creado. Persona() es el metodo cosntructor persona1 y persona2 son objetos o instancias de la clase PersonaVariable = objeto/instanciaTipo = clase Cuando un objeto pierde su referencia es tomado por elgarbage collector.

Metodo constructor

Es un método especial, que se invoca automáticamente cuando se declara unobjeto, sirve para inicializar el estado del objeto.Características:–No tiene tipo de dato–No pueden devolver un valor–Su nombre coincide con el nombre de la clasedonde se encuentra–Cuando la clase no tiene un constructor la VM le asigna uno vacío pordefault–Puede haber mas de un constructor dentro de una clase–Se ejecuta cuando invocamos al operador new

Page 42: Java orientado a objetos

UTP -42-

Ing. Alberto Moreno

Estructura de una Clase

<cabecera_de_clase> { <cuerpo_clase> } La cabecera puede tener la siguiente información : Modificadores de ámbito o accesibilidad. Modificadores adicionales. Herencia Implementación de interfaces. El cuerpo de la clase puede tener atributos y métodos

[public][final][abstract] class Nombre{//propiedades

//metodos}

default (Sin modificador) : Accesible en el paquete. public : Accesible en cualquier lugar. abstract : La clase no puede ser instanciada. Por razones de diseñoo por contener algún método abstracto. Sirve de base para la herencia. final : La clase no puede ser heredada. Son el último nivel

Page 43: Java orientado a objetos

UTP -43-

Ing. Alberto Moreno

<cabecera_de_metodo> ( <lista de parametros>) <throws excepcion> { <cuerpo_método> } La cabecera puede tener la siguiente información : Modificadores de ámbito o accesibilidad. Modificadores adicionales.

public : Accesible en todos lados. protected : Accesibles dentro del paquete que contiene la clase y por todos sus subclases. Otras clases de otros paquetes no pueden acceder. default : Accesible solamente dentro del paquete. private : Accesible solamente dentro de la clase.OTROS MODIFICADORES static : Define una variable o método de clase final : Define una constante o que el método no puede ser sobreescrito. abstract : Define un método abstracto

Page 44: Java orientado a objetos

UTP -44-

Ing. Alberto Moreno

Los miembros de instancia son los métodos y las variables que pertenecen al objeto. Los valores de las variables definen el estado del objeto. Los métodos definen el comportamiento de un objeto. La implementación de losmétodos sí es compartida por todas las instancias.

Los miembros estáticos son los métodos y las variables que pertenecen a la clase. Se diferencian en la definición por la palabra clave static. Las variables estáticas son inicializadas cuando se carga la clase en runtime. Los miembros estáticos pueden ser llamados utilizando el nombre de la clase o através de la referencia al objeto

• Variables de tipo simple de datos: El paso de parámetros se realiza siempre porvalor, es decir, el valor del parámetro de llamada no puede ser modificado en elcuerpo del método ( El método trabaja con una copia del valor utilizado en lallamada).

• Variables de tipo Objeto (referencias): El valor del parámetro de llamada sipuede ser modificado dentro del método. ( El método trabaja directamente con elvalor utilizado en la llamada).

Es la capacidad de crear una nueva clase a partir de otra clase ya existente. La nueva clase puede definir nuevos atributos y métodos o modificar los ya existentes, si como utilizar los atributos o metodos de la clase padre. La clase padre se denomina superclase y la hija, subclase. En Java la herencia es lineal (sólo existe un superclase para una subclase) Utilizamos la palabra clave extends. Se heredan los métodos permitidos. Se puede sobreescribir algunos metodos de la superclase

La sobrecarga de métodos nos permite implementar un método de diferente manera.La firma del método sobrecargado cambia.

public int metodo1(int a);public int metodo1(int a, String c);

Es necesario cambiar la “firma” del método, no sólo los valores de devolución

Para sobrescribir un método debemos de tener en cuenta : Debemos revisar el nivel de accesibilidad para comprobar que podemossobreescribir el método. El método debe tener la misma “firma” o declaración que el de la clasepadre.

Page 45: Java orientado a objetos

UTP -45-

Ing. Alberto Moreno

this –permite hacer referencia a elementos de la misma clase super –permite hacer referencia a elementos de la clase padre

Ejercicios propuestos 4.-1.- Diseñe e implemente en Java una clase para trabajar con triángulos isósceles. Paraello, defina las variables de ejemplar mínimas que requiera, proporcione métodos deconsulta, un método constructor e implemente otros métodos para calcular el perímetroy el área de un triángulo.

2.-Implemente una clase llamado banco ,con los atributos nro de cuenta , nombre delcliente , tipo de ahorro( D=dólar y S=soles) y el saldo; Implemente los métodos paradeposito , retiro de dinero. y los métodos constructores respectivos.Esta aplicación impleméntelo :

a) Primero en modo de consola , empleando un ArrayList para almacenar unconjunto de clientes , se debe elaborar un menú que contemple las siguientesopciones:

(1) Nuevos ahorristas(2) Consulta de Saldos(3) Movimiento de Cuentas(4) Listado de Ahorristas(5) Anulación de cuentas(6) Salir

En la opción 2 se realiza la búsqueda por medio de un numero de cuentaEn la opción 3 se realiza el deposito o retiro a través de un numero de cuentaactualizando el saldo respectivo.La anulación también se realiza por medio del nro de cuenta.

b) Realizar la misma aplicación pero empleando formularios.

Page 46: Java orientado a objetos

UTP -46-

Ing. Alberto Moreno

3. ¿Cuál es el resultado del siguiente programa?

class Ejercicio { public static void main(String [ ] args){ Clase1 obj1=new Clase1(); obj1.imprimir(24.3,5); }}class Clase1 { private double valor=9.8; private int x=7; public void imprimir(double valor, int x) { System.out.print(valor+” “+this.x); }}

4.- 12. ¿Qué imprime el siguiente programa?

class Principal {

public static void main(String[] args) {Autor autor =new Autor ("Paul", "Auster");Libro libro= new Libro ("La trilogía de Nueva York", autor); System.out.println(libro.getTitulo()+" de " + (libro.getAutor()).toString()); }

}

class Libro {

private String titulo; private Autor autor;

public Libro(String titulo, Autor autor) {this.titulo = titulo;this.autor = autor; }

public Autor getAutor() {return autor; }

public String getTitulo() { return titulo; }

}

Page 47: Java orientado a objetos

UTP -47-

Ing. Alberto Moreno

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; }}

Page 48: Java orientado a objetos

UTP -48-

Ing. Alberto Moreno

APLIACION GENERAL DE MANTENIMIENTOS EMPLEANDO CLASES

Objetivo.- Que el alumno se capaz de implementar clases y manejo de ArrayList paraalmacenar datos para un conjunto de items y a partir de ello realizar las operaciones deListado, modificación y eliminación de datos.

Las pantallas a emplear son las siguientes:

Page 49: Java orientado a objetos

UTP -49-

Ing. Alberto Moreno

1.- La opción de anulación es a través del código del empleado :

Page 50: Java orientado a objetos

UTP -50-

Ing. Alberto Moreno

La Modificación de Datos:También se realiza mediante el código del empleado

Page 51: Java orientado a objetos

UTP -51-

Ing. Alberto Moreno

Los pasos a realizar:1.- Diagrama de clases:

Page 52: Java orientado a objetos

UTP -52-

Ing. Alberto Moreno

1.- Establecer los paquetes para las clases, inagenes y el paquete de prueba.

Empleado.javapackage 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();

Page 53: Java orientado a objetos

UTP -53-

Ing. Alberto Moreno

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

public String getCode() { return code; }

public void setCode(String code) { this.code = code; }

public String getNome() { return nome; }

public void setNome(String nome) { this.nome = nome; }

public char getSec() { return sec; }

public void setSec(char sec) { this.sec = sec; }

public double getHoras() { return horas; }

public void setHoras(double horas) { this.horas = horas; }

public double getPt() { return pt; }

public static int getNro() { return nro; }

}

2.- La clase de Empleados.java (un arreglo para almacenar varios empleados)

Page 54: Java orientado a objetos

UTP -54-

Ing. Alberto Moreno

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 tamaño 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; }

Page 55: Java orientado a objetos

UTP -55-

Ing. Alberto Moreno

} 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

Page 56: Java orientado a objetos

UTP -56-

Ing. Alberto Moreno

La ventana principal tipo Jdialog (EmpDialog.java)

package pruebas;import pack1.prueba;import pack2.*;import javax.swing.JOptionPane;public class EmpDialog extends javax.swing.JDialog { static Empleados emp; static Empleado uno; /** Creates new form EmpDialog */

public EmpDialog(java.awt.Frame parent, boolean modal) { super(parent, modal); initComponents(); emp=new Empleados(); this.jRx.setVisible(false); this.limpiar(); } private void txthrKeyReleased(java.awt.event.KeyEvent evt) {// TODO add your handling code here: String dato=this.txthr.getText(); if(dato.trim().length()==0) { this.jbtAcepta.setEnabled(false); return; } else{ try{ double p=Double.parseDouble(dato); this.jbtAcepta.setEnabled(true);

}catch(Exception ex){ JOptionPane.showMessageDialog(this,"El dato debe ser numerico","error", JOptionPane.ERROR_MESSAGE);

}

}

}

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

Page 57: Java orientado a objetos

UTP -57-

Ing. Alberto Moreno

}

}

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=newpruebas.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);

Page 58: Java orientado a objetos

UTP -58-

Ing. Alberto Moreno

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

}

private void jbtnListaActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here: emp.ListaArea(this.jTextArea1); }

private void jbtAceptaActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here: uno=new Empleado(); uno.setCode(this.txtcod.getText()); uno.setNome(this.txtnom.getText()); uno.setHoras(Double.parseDouble(this.txthr.getText())); if(this.jRa.isSelected()) uno.setSec('A'); else uno.setSec('B'); emp.AddEmp(uno); JOptionPane.showMessageDialog(this,"Datos Aceptados"); limpiar();

}

void limpiar(){ this.txtcod.setText(""); this.txthr.setText(""); this.txtnom.setText(""); this.jRx.setSelected(true);//para deseleccionar las otras opciones this.txtcod.requestFocus();

}

public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new EmpDialog(new javax.swing.JFrame(), true).setVisible(true); } }); }

La ventana de Eliminación (DelEmpDialog.Java)

Page 59: Java orientado a objetos

UTP -59-

Ing. Alberto Moreno

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);

Page 60: Java orientado a objetos

UTP -60-

Ing. Alberto Moreno

initComponents(); 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; }

Page 61: Java orientado a objetos

UTP -61-

Ing. Alberto Moreno

Page 62: Java orientado a objetos

UTP -62-

Ing. Alberto Moreno

CAPITULO DE HERENCIAS La herencia permite crear una clase nueva (subclase o clase derivada) que tenga elmismo comportamiento que otra (superclase o clase base) y además extienda oadapte ese comportamientoa unas necesidades específicas.La nueva subclase heredará los atributos y los métodos de la clase base, los cuales seañadirán a los definidos en la propia subclase.

La capacidad de descomponer un problema o concepto en un conjunto deobjetos relacionados entre sí, y cuyo comportamiento es fácilmenteidentificable, puede ser muy útil para el desarrollo de programas informáticos.

B. Jerarquía

La herencia es el mecanismo fundamental de relación entre clases en laorientación a objetos. Relaciona las clases de manera jerárquica; una clasepadre o superclase sobre otras clases hijas o subclases.

Imagen 4: Ejemplo de otro árbol de herencia

Los descendientes de una clase heredan todas las variables y métodos quesus ascendientes hayan especificado como heredables, además de crear lossuyos propios.

La característica de herencia, nos permite definir nuevas clases derivadas deotra ya existente, que la especializan de alguna manera. Así logramos definiruna jerarquía de clases, que se puede mostrar mediante un árbol de herencia.

C. Tipos de Herencia

En la orientación a objetos, se consideran dos tipos de herencia, simple ymúltiple. En el caso de la primera, una clase sólo puede derivar de una únicasuperclase. Para el segundo tipo, una clase puede descender de variassuperclases.

D. Declaración

Para indicar que una clase deriva de otra, heredando sus propiedades(métodos y atributos), se usa el término extends, como en el siguiente ejemplo:

public class SubClase extends SuperClase {

// Contenido de la clase

Page 63: Java orientado a objetos

UTP -63-

Ing. Alberto Moreno

}

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 unasubclase de la clase que es nombrada a continuación, en nuestro caso Alumnoes hija de Persona.

Page 64: Java orientado a objetos

UTP -64-

Ing. Alberto Moreno

E. Limitaciones en la herencia

Todos los campos y métodos de una clase son siempre accesibles para elcódigo de la misma clase.

Sin embargo los tres primeros modificadores (public, private y protected) sonlos más comunes que se usan para controlar el acceso desde otras clases, ypara controlar la herencia por las subclases.

public: Los miembros declarados public son accesibles en cualquier lugar enque sea accesible la clase, y son heredados por las subclases.

• private: Los miembros declarados private son accesibles sólo en lapropia clase.

• protected: Los miembros declarados protected son accesibles sólo parasus subclases

Por ejemplo veamos otra clase:

class Padre { // Hereda de Object // Atributos private int numeroFavorito, nacidoHace, dineroDisponible; // Métodos public int getApuesta() { return numeroFavorito; } protected int getEdad() { return nacidoHace; } private int getSaldo() { return dineroDisponible; }}class Hija extends Padre { // Definición}class Visita { // Definición}

En este ejemplo, un objeto de la clase Hija, hereda los tres atributos(numeroFavorito, nacidoHace y dineroDisponible) y los tres métodos (getApuesta(), getEdad() y getSaldo() ) de la clase Padre, y podrá invocarlos.Cuando se llame al método getEdad() de un objeto de la clase Hija, sedevolverá el valor de la variable de instancia nacidoHace de ese objeto, y no deuno de la clase Padre.

Sin embargo, un objeto de la clase Hija, no podrá invocar al método getSaldo()de un objeto de la clase Padre, con lo que se evita que el Hijo conozca elestado de la cuenta corriente de un Padre.

Page 65: Java orientado a objetos

UTP -65-

Ing. Alberto Moreno

La clase Visita, solo podrá acceder al método getApuesta(), para averiguar elnúmero favorito de un Padre, pero de ninguna manera podrá conocer ni susaldo, ni su edad

Las clases no pueden declararse ni protected , ni private .

F. COMPOSICIÓN

La técnica en la que una clase se compone o contiene instancias de otrasclases se denomina composición. Es una técnica muy habitual cuando sediseñan clases.

Por ejemplo analicemos el sig. código:

class Circulo { Punto centro;

int radio;float superficie() {

return 3.14 * radio * radio; }}

Diríamos que un Circulo tiene un Punto (centro) y un radio.

G. REDEFINICIÓN DE MÉTODOS. 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); }

Page 66: Java orientado a objetos

UTP -66-

Ing. Alberto Moreno

public String toString() {return "Num. empleado " + numEmpleado + "

Nombre: " + nombre + " Sueldo: " + sueldo; }}

En el ejemplo el Empleado se caracteriza por un nombre (String) y por unnúmero de empleado y sueldo (enteros). La clase define un constructor queasigna los valores de nombre y sueldo y calcula el número de empleado a partirde un contador (variable estática que siempre irá aumentando), y dos métodos,uno para calcular el nuevo sueldo cuando se produce un aumento de sueldo(método aumentarSueldo) y un segundo que devuelve una representación delos datos del empleado en un String.(método toString).Con esta representación podemos pensar en otra clase que reúna todas lascaracterísticas de Empleado y añada alguna propia. Por ejemplo, la claseEjecutivo. A los objetos de esta clase se les podría aplicar todos los datos ymétodos de la clase Empleado y añadir algunos, como por ejemplo el hecho deque un Ejecutivo tiene un presupuesto.Así diríamos que la clase Ejecutivo extiende o hereda la clase Empleado. Estoen Java se hace con la cláusula extends que se incorpora en la definición de laclase, de la siguiente forma:

class Ejecutivo extends Empleado {int presupuesto;void asignarPresupuesto(int p) {

presupuesto = p; }}

Con esta definición un Ejecutivo es un Empleado que además tiene algúnrasgo distintivo propio. El cuerpo de la clase Ejecutivo incorpora sólo losmiembros que son específicos de esta clase, pero implícitamente tiene todo loque tiene la clase Empleado.A Empleado se le llama clase base o superclase y a Ejecutivo clase derivada osubclase.Los objetos de las clases derivadas se crean igual que los de la clase base ypueden acceder tanto sus datos y métodos como a los de la clase base. Porejemplo:

Ejecutivo jefe = new Ejecutivo( "Armando Mucho",1000);jefe.asignarPresupuesto(1500);jefe.aumentarSueldo(5);

Atención!: Un Ejecutivo ES un Empleado, pero lo contrario no es cierto. Siescribimos:

Page 67: Java orientado a objetos

UTP -67-

Ing. Alberto Moreno

Empleado curri = new Empleado ( "Esteban ComexPlota" , 100) ;curri.asignarPresupuesto(5000); // error

se producirá un error de compilación pues en la clase Empleado no existeningún método llamado asignarPresupuesto.

Ahora bien veamos como podemos redefinir un método

Se podría pensar en redefinir algunos métodos de la clase base pero haciendoque métodos con el mismo nombre y características se comporten de formadistinta. Por ejemplo podríamos pensar en rediseñar el método toString de laclase Empleado añadiendo las características propias de la clase Ejecutivo. Asíse podría poner:

class Ejecutivo extends Empleado {int presupuesto;

void asignarPresupuesto(int p) { presupuesto = p; }

public String toString() { String s = super.toString(); s = s + " Presupuesto: " + presupuesto;

return s; }}

De esta forma cuando se invoque jefe.toString() se usará el método toString dela clase Ejecutivo en lugar del existente en la clase Empleado.

Observe en el ejemplo el uso de super, que representa referencia internaimplícita a la clase base (superclase). Mediante super.toString() se invoca elmétodo toString de la clase Empleado

Continuando con el uso de super e inicialización de clases derivadas

Cuando se crea un objeto de una clase derivada se crea implícitamente unobjeto de la clase base que se inicializa con su constructor correspondiente. Sien la creación del objeto se usa el constructor no-args, entonces se produceuna llamada implícita al constructor no-args para la clase base. Pero si se usanotros constructores es necesario invocarlos explicitamente.

En nuestro ejemplo dado que la clase método define un constructor,necesitaremos también un constructor para la clase Ejecutivo, que podemoscompletar así:

class Ejecutivo extends Empleado {int presupuesto;

Page 68: Java orientado a objetos

UTP -68-

Ing. Alberto Moreno

Ejecutivo (String n, int s) {super(n,s);

}

void asignarPresupuesto(int p) { presupuesto = p; }

public String toString() { String s = super.toString(); s = s + " Presupuesto: " + presupuesto;

return s; }}

Observe que el constructor de Ejecutivo invoca directamente al constructor deEmpleado mediante super(argumentos). En caso de resultar necesaria lainvocación al constructor de la superclase debe ser la primera sentencia delconstructor de la subclase.

Ejemplo 2.- Elaborar la clase documento que sera heredado por la claseFactura y la clase boleta:

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(;;){

DocumentoString numeroString fechaDouble monto

FacturaString ruc

BoletaString Nombre

Page 69: Java orientado a objetos

UTP -69-

Ing. Alberto Moreno

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

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

Page 70: Java orientado a objetos

UTP -70-

Ing. Alberto Moreno

} 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 Ventasclass 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); }}//

Page 71: Java orientado a objetos

UTP -71-

Ing. Alberto Moreno

class Factura extends Documento{ int Ruc; void imprimir(){ super.imprimir(); System.out.println("Ruc :"+Ruc); }}

Ejercicios:

1Crear una clase animal (nombre, nro de patas, sexo) crear las subclases Perro (atributoraza, atributo habla), gallo( metodo canta), Gato(metodo maulla)

2.- crear la clase TarjetaCredito( nro de tarjeta, nombre del cliente, fecha de caducacion)crear las subclases TarjetaDorada(linea de credito, Cargo ), TarjetaTotus(sueldo delcliente, Empresa donde trabaja) realizar las subclases ademas comprobarlo en el mainpara asignar los datos.

3.- (Sistema de Nómina) Elaborar un programa que permita procesar la nómina de unaempresa.

Para ello considere el siguiente diagrama de clases:

Page 72: Java orientado a objetos

UTP -72-

Ing. Alberto Moreno

Un empleado (Empleado=Employee) debe tener un primer nombre, apellido paterno ynúmero de seguro social. Además, un EmpleadoAsalariado (SalariedEmployee) debetener un salario semanal; un EmpleadoPorHoras (HourlyEmployee) debe tener unsueldo y el número de horas trabajadas; un EmpleadoPorComision(CommissionEmployee) debe tener una tasa por comisiones y ventas brutas; y unEmpleadoBaseMasComision (BasePlusCommissionEmployee) debe tener un salariobase. Cada clase debe tener las construcciones apropiadas, los métodos relevantes sets ygets. Escriba un programa que cree instancias de objetos de cada una de las clases, yque muestre toda la información asociada con cada objeto (incluyendo la informaciónheredada).

Interfaz Gráfica de Usuario (GUI)

Page 73: Java orientado a objetos

UTP -73-

Ing. Alberto Moreno

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 CIRCULOclass 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();

Crear una clase circulo cuyo atributoes el radio y los métodos a crear sonArea() y Print() para el calculo delarea del circulo e impresiónrespectiva de los datos.Crear la clase Cilindro cuyo atributoson :radio y altura hacer la herenciacorrespondiente para el calculo de suárea y volumen del cilindro.

Page 74: Java orientado a objetos

UTP -74-

Ing. Alberto Moreno

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

Poliformismo.- un método puede comportarse de muchas formas de acuerdo a la clasedonde se emplea dicho método , por ejemplo el calculo del promedio depende de laclase si es pregrado el calculo del promedio es :(n1*0.25+ n2*0.25 +0.50*n3) y paraPostGrado =(n1+n2+n3)/3

Clase Alumno.java

package herencia;abstract class Alumno { private String matricula; private String nombre; protected double n1, n2, n3; //constructor de la clase alumno public Alumno(String mat, String n, double n1, double n2, double n3) { matricula = mat; nombre = n; 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();

}

package herencia;//herencia de la clase alumnopublic class AlumnoPostgrado extendsAlumno {

public AlumnoPostgrado(String nom,String mat, double n1, double n2, double n3){ super(mat,nom,n1,n2,n3); }

public double calcularNota() { return (n1+n2+n3)/3.0; }}

Alumnopublic Alumno()public Imprime()public abstract Promedio()

Postgrado

Pregrado

Page 75: Java orientado a objetos

UTP -75-

Ing. Alberto Moreno

Comprobación de las clases

package herencia;

import java.util.*;

public class prueba1 {

public static void main(String[] args) { ArrayList x = new ArrayList(); AlumnoPregrado apre; AlumnoPostgrado apos; Alumno a; apre = new AlumnoPregrado("Laura","1",5,6,4); x.add(apre); apre = new AlumnoPregrado("Claudia","2",4,7,7); x.add(apre); apos = new AlumnoPostgrado("Juan","3",5,6,4); x.add(apos); apos = new AlumnoPostgrado("Ana","4",4,7,7); x.add(apos);

// Calculo de notas SIN polimorfismo for (int i=0; i<x.size(); i++) { if (x.get(i) instanceof AlumnoPregrado) {

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; }}

Page 76: Java orientado a objetos

UTP -76-

Ing. Alberto Moreno

apre = (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()); } }

}

Gestión de Excepciones

Las excepciones son el mecanismo por el cual pueden controlarse en un programa Javalas condiciones de error que se producen. Estas condiciones de error pueden ser erroresen la lógica del programa como un índice de un array fuera de su rango, una divisiónpor cero o errores disparados por los propios objetos que denuncian algún tipo de estadono previsto, o condición que no pueden manejar.

La idea general es que cuando un objeto encuentra una condición que no sabe manejarcrea y dispara una excepción que deberá ser capturada por el que le llamó o por alguienmás arriba en la pila de llamadas. Las excepciones son objetos que contieneninformación del error que se ha producido y que heredan de la clase Throwable o de laclase Exception. Si nadie captura la excepción interviene un manejador por defecto quenormalmente imprime información que ayuda a encontrar quién produjo la excepción.

Existen dos categorías de excepciones:

• Excepciones verificadas: El compilador obliga a verificarlas. Son todas las queson lanzadas explicitamente por objetos de usuario.

• Excepciones no verificadas: El compilador no obliga a su verificación. Sonexcepciones como divisiones por cero, excepciones de puntero nulo, o índicesfuera de rango.

Page 77: Java orientado a objetos

UTP -77-

Ing. Alberto Moreno

Generación de excepciones

Supongamos que tenemos una clase Empresa que tiene un array de objetos Empleado(clase vista en capítulos anteriores). En esta clase podríamos tener métodos paracontratar un Empleado (añadir un nuevo objeto al array), despedirlo (quilarlo del array)u obtener el nombre a partir del número de empleado. La clase podría ser algo así comolo siguiente:

public class Empresa { String nombre; Empleado [] listaEmpleados;

int totalEmpleados = 0; . . . Empresa(String n, int maxEmp) { nombre = n; listaEmpleados = new Empleado [maxEmp]; } . . .

void nuevoEmpleado(String nombre, int sueldo) { if (totalEmpleados < listaEmpleados.length ) { listaEmpleados[totalEmpleados++] = new Empleado(nombre,sueldo); } }}

Observese en el método nuevoEmpleado que se comprueba que hay sitio en el arraypara almacenar la referencia al nuevo empleado. Si lo hay se crea el objeto. Pero si no lohay el método no hace nada más. No da ninguna indicación de si la operación ha tenidoéxito o no. Se podría hacer una modificación para que, por ejemplo el métododevolviera un valor booleano true si la operación se ha completado con éxito y false siha habido algún problema.

Otra posibilidad es generar una excepción verificada (Una excepción no verificada seproduciría si no se comprobara si el nuevo empleado va a caber o no en el array).Vamos a ver como se haría esto.

Las excepciones son clases, que heredan de la clase genérica Exception. Es necesariopor tanto asignar un nombre a nuestra excepción. Se suelen asignar nombres que denalguna idea del tipo de error que controlan. En nuestro ejemplo le vamos a llamarCapacidadEmpresaExcedida.

Para que un método lance una excepción:

• Debe declarar el tipo de excepción que lanza con la cláusula throws, en sudeclaración.

• Debe lanzar la excepción, en el punto del código adecuado con la sentenciathrow.

En nuestro ejemplo:

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

Page 78: Java orientado a objetos

UTP -78-

Ing. Alberto Moreno

listaEmpleados[totalEmpleados++] = new Empleado(nombre,sueldo); } else throw new CapacidadEmpresaExcedida(nombre); }

Además, necesitamos escribir la clase CapacidadEmpresaExcedida. Sería algoasí:

public class CapacidadEmpresaExcedida extends Exception {CapacidadEmpresaExcedida(String nombre) {

super("No es posible añadir el empleado " + nombre); } . . .}

La sentencia throw crea un objeto de la clase CapacidadEmpresaExcedida . Elconstructor tiene un argumento (el nombre del empleado). El constructor simplementellama al constructor de la superclase pasándole como argumento un texto explicativo delerror ( y el nombre del empleado que no se ha podido añadir).

La clase de la excepción puede declarar otros métodos o guardar datos de depuraciónque se consideren oportunos. El único requisito es que extienda la clase Exception.Consultar la documentación del API para ver una descripción completa de la claseException.

De esta forma se pueden construir métodos que generen excepciones.

Captura de excepciones

Con la primera versión del método nuevoEmpleado (sin excepción) se invocaría estemétodo de la siguiente forma:

Empresa em = new Empresa("La Mundial");em.nuevoEmpleado("Adán Primero",500);

Si se utilizara este formato en el segundo caso (con excepción) el compilador produciríaun error indicando que no se ha capturado la excepción verificada lanzada por el métodonuevoEmpleado. Para capturar la excepción es utiliza la construcción try / catch, de lasiguiente forma:

Empresa em = new Empresa("La Mundial");try { em.nuevoEmpleado("Adán Primero",500);} catch (CapacidadEmpresaExcedida exc) { System.out.println(exc.toString()); System.exit(1);}

• Se encierra el código que puede lanzar la excepción en un bloque try / catch.• A continuación del catch se indica que tipo de excepción se va a capturar.• Después del catch se escribe el código que se ejecutará si se lanza la excepción.• Si no se lanza la excepción el bloque catch no se ejecuta.

Page 79: Java orientado a objetos

UTP -79-

Ing. Alberto Moreno

El formato general del bloque try / catch es:

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

. . .

Observese que se puede capturar más de un tipo de excepción declarando más de unasentencia catch. También se puede capturar una excepción genérica (clase Exception)que engloba a todas las demás.

Supongamos que, en nuestro ejemplo es el método main de una clase el que invoca elmétodo nuevoEmpleado. Si no quiere capturar la excepción debe hacer lo siguiente:

public static void main(String [] args) throwsCapacidadEmpresaExcedida { Empresa em = new Empresa("La Mundial"); em.nuevoEmpleado("Adán Primero",500);}

Cláusula finally

La cláusula finally forma parte del bloque try / catch y sirve para especificarun bloque de código que se ejecutará tanto si se lanza la excepción como si no. Puedeservir para limpieza del estado interno de los objetos afectados o para liberar recursosexternos (descriptores de fichero, por ejemplo). La sintaxis global del bloque try /catch / finally es:

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

. . .finally {...}

Page 80: Java orientado a objetos

UTP -80-

Ing. Alberto Moreno

Links de interés para el cursotema linkCaracterísticas del java http://www.webtaller.com/manual-

java/caracteristicas-java.phpConceptos básicos http://www.webtaller.com/manual-

java/programacion.phpControl de flujo http://www.webtaller.com/manual-java/control-

flujo.phpIntroducción a variables ymétodos

http://www.webtaller.com/manual-java/variables-metodos.php

Presentación, introducción,cadenas de caracteres, sentenciasde control, arreglos, clases yherencia

http://www.monografias.com/trabajos42/manual-de-java/manual-de-java.shtml

Funciones matemáticas, uso deString, Uso de StringBuffers

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