Java Orientado A Objetos
Java Orientado A Objetos
DE SISTEMAS
Separata
Lenguaje de Programación I
Parte I
2008-1
INDICE
1.- Introducción
4.-Diagrama de actividades
9.- Herencias
10.- poliformismos
MARCO TEORICO
• Orientado a objetos
• Distribuido y dinámico
• Robusto
• Seguro
• Multitarea
• Portable
La plataforma Java
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.
• jar. Es una herramienta utilizada para trabajar con los archivos JAR.
• Comentarios.
• Identificadores.
• Palabras clave.
• Literales.
• Expresiones y operadores.
• Bloques y sentencias.
Comentarios
Java ofrece tres tipos de comentarios: dos para comentarios regulares en el código
fuente y uno para la documentación especial del sistema javadoc.
Los comentarios de varias líneas se incluyen entre los símbolos /* y */, como en
C y C++.
/*
Este es un ejemplo de
un comentario de varias
líneas.
*/
Para comentariar una sola línea se utiliza la doble diagonal //. El comentario se
inicia cuando se encuentra la doble diagonal y continua hasta el final de la línea.
Ejemplo:
/**
Este tipo de comentarios
los utiliza la
herramienta javadoc
*/
Palabras clave
La siguiente tabla muestra las palabras claves de Java, éstas son reservadas y no pueden
ser utilizadas como identificadores.
true, false, and null no son palabras claves pero son palabras reservadas, así que
tampoco pueden ser utilizadas como identificadores.
Literales
Una literal es un valor constante formado por una secuencia de caracteres. Cualquier
declaración en Java que defina un valor constante -un valor que no pueda ser cambiado
durante la ejecución del programa- es una literal.
Son ejemplos de literales los números, los caracteres y las cadenas de caracteres.
• Literales numéricas
Se 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 :
• Literales de caracteres
• Literales de cadena
Una cadena es una combinación de caracteres. Las cadenas en Java son instancias
de la clase String, por ello cuentan con métodos 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
• Expresión
El tipo de dato del valor regresado por una expresión depende de los elementos
usados en la expresión.
• Operadores
La tabla siguiente muestra los distintos tipos de operadores que utiliza Java.
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
= Asignación a=b
Operadores relacionales
== Igualdad a == b
!= Distinto a != b
Operadores especiales
() Agrupación de expresiones a = (a + b) * c
La tabla siguiente muestra la precedencia asignada a los operadores, éstos son listados
en orden de precedencia.
Operador Notas
arreglos
++ -- ! ~ ! es el NOT lógico y ~ es el
complemento de bits
* / % Multiplicativos
+- Aditivos
== != Igualdad
|| OR lógico
?: Condicional
Ejemplos demostrativos:
Explicacion .-
public class PrimerPrograma
Nombre de la clase ., coincide con el nombre del archivo.
String[ ] argv
Permite de recuperar argumentos transmitidos al programa al momento de su
lanzamiento
System.out.println(“Hola … ")
Método de visualización en la ventana consola
Inicializacion y constantes
Pensar a la inicialización al riesgo de una error de compilación
int n; System.out.println(" n = " + n);
Inicialización
Una variable puede recibir un valor inicial al momento de su declaración :
int n = 15;
boolean b = true
int n;
n = 15; boolean b; b = true;
Constantes:
Son variables cuyas valor cual se puede afectar una sola vez
No pueden ser modificadas
Son definidas con la palabra clave final
final int n = 5;
final int t;
...
t = 8;
n = 10; // error : n esta declarado final
Ejercicios desarrollados:
1.- Se tienen como datos la base y altura de un triangulo rectángulo , calcular su
hipotenusa.
2.- Se tienen como datos los tres lados de cualquier triangulo , calcular su area:
public class demo3 {
area=Math.sqrt(peri*(peri-lado1)*(peri-lado2)*(peri-lado3));
System.out.print("area del triangulo "+area);
CLIK
Luego en Java
Aplication
CLIK
proyecto:
No olvidar
guardar dentro de
“AlumnoUtp”
CLIK
3)
CLIK
Es importante
digitar la librería
correspondiente
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..
DIAGRAMA DE ACTIVIDADES nos va permitir tener una mejor visión sobre los
procesos que vamos a desarrollar en el programa , la diagramacion puede elaborase
empleando el Rational Rose o el UML.
Ejecución condicional
if (expresion_booleana)
sentencia
[else
sentencia]
sentencia (a todo lo largo de este capítulo) 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;
. . .
}
Ambigüedad
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:
L1 + L 2 + L3
P=
2
}
else{
System.out.print("No forma triangulo");
}
}
}
Tenga en cuenta que la empresa cobra S/0.30 por minuto utilizado, S/ 48.00
de renta básica y que el IGV es 19% respecto al importe por minutos.
9.- Ingresar como datos las horas y minutos respecto a las manecillas de las
agujas de un reloj, se pide calcular el ángulo que forman estas manecillas.
Por ejemplo horas= 3 y minutos= 30 ángulo formado =90
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ón
00 – 05 Deficiente
06 – 10 Malo
11 – 13 Regular
14 – 17 Bueno
18 – 20 Excelente
Procesos Repetitivos.-
while (expresion_booleana)
sentencia
Sintaxis formato 2:
do
sentencia
while (expresion_booleana)
La sentencia o bloque se sentencias (se aplica la misma idea que para el if-else) se
ejecuta mientras que la expresion_booleana se evalue como true
step es una sentencia que se ejecuta cada vez que se llega al final de la sentencia o
bloque de sentencias. Es opcional.
Una utilización clásica de un bucle de tipo for se muestra a continuación para evaluar un
contador un número fijo de veces:
Ejemplos:
}
System.out.print("la suma de los digitos="+sm);
System.out.print("\n numero invertido="+cad);
}
}
public repetir02 {
public static void main(String[] args) throws Exception {
int doble=0,nbolas, ns=0, c=1,sm=0;
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);
1.- Ingresar 10 números por teclado luego muestre todos los números ingresados y
además muestre el mayor numero y el segundo mayor
por ejemplo la salida de 10 números será:
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
créditos; Ingresar los datos hasta que se ingrese por teclado el Carácter * en la Escala.
Las condiciones:
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 país.
6.- ingrese un numeró de cinco cifras luego muestre si es capicúa 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 dígitos
b) El numero ordenado de manera ascendente
c) La suma de los cuadrados de los dígitos pares.
8.- Se desea formar una pirámide 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 números 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
12.- Un automóvil 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
después de cada media hora, 0.5 hora , 1hora, 1.5, 2,4, ... horas hasta el final del
viaje.
13.- Una pelota de golf se lanza desde un avión. La distancia, d, que la pelota cae en t
segundos está dada por la ecuación d = (1/2) * g*t 2 donde g es la aceleración 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 crédito , que puede ser en 6 , 12 o 18 meses , los
intereses varían de acuerdo a los meses:
Meses % interés
6 20
12 30
18 40
Mostrar un calendario de pagos , de acuerdo a la siguiente tabla:
Los datos de ingreso
Precio Final : ........... Son:
Mes Cuota Mensual Saldo Precio de la computadora
===================================== y el tipo de pago
1 ...... ......
2 ..... ......
Arrays
Declaración y acceso
Un array es una colección ordenada de elementos del mismo tipo, que son accesibles a
través de un índice.
Por ejemplo:
int [ ] a;
Punto [ ] p;
Un array se crea como si se tratara de un objeto (de hecho las variables de tipo array son
referencias):
También puede crearse de forma explícita asignando valores a todos los elementos del
array 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 del
array que se desea, teniendo en cuenta que siempre el primer elemento del array es el
índice 0. Por ejemplo a[1]. En este ejemplo los índices del array de tres elementos
son 0, 1 y 2. Si se intenta usar un índice que está fuera del rango válido para ese array se
produce un error (en realidad una excepción: las excepciones se tratan en un capítulo
posterior) de 'Indice fuera de rango'. En el ejemplo anterior se produce esta excepción si
el índice es menor que 0 o mayor que 2.
Un array, como cualquier otra referencia puede formar parte de la lista de parámetros o
constituir el valor de retorno de un método. En ambos casos se indica que se trata de un
array con los corchetes que siguen al tipo. Por ejemplo:
Arrays multidimensionales
Es posible declarar arrays de más de una dimensión. Los conceptos son los mismos que
para los arrays monodimensionales.
Por ejemplo:
int [ ][ ] a = { { 1 , 2 } , { 3 , 4 } , { 5 , 6 } };
int x = a[1][0]; // contiene 3
int y = a[2][1]; // contiene 6
Funciones/Metodos De Usuario
Las funciones/metodos son trozos de código 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 función en matemáticas:
funcion(x ) = x 2 + 3
Esta función tiene una definición y puede ser evaluada con distintos valores, por
ejemplo si hacemos
funcion(5)
funcion( x)
{
resultado = x * x + 3;
¡
}
int x, y;
x = 1 + funcion(2);
y = funcion(x); System.out.println(x); System.out.println(y);
int funcion(int x)
{
int resultado = x * x + 3;
return resultado;
}
adicionalmente tenemos que empezar la función con public static (esto permite que la
función 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) );
}
Ejemplo2.-
public class metodos {
}
}
Ejercicios Propuestos 3
3.- Función Cilindro pasando como valores el radio y su altura devuelva su área
5.- Función Triangulo pasando como valor tres lados de un triangulo en caso que forme
triá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 numero
en el sistema hexadecimal (como cadena)
7.- Función Binario pasando como valor un numero que lo devuelva en el sistema
binario.(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 True
es primo y False si no lo es.
10.- Función Left(Cad,n) pasando una cadena y numero de caracteres que devuelva los
carectares hacia la izquierda hasta el numero indicado.
12.- Función CUENTAV pasando una cadena , que devuelva el numero de vocales que
contiene dicha cadena..
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.
19- Pasando una vector que devuelva el mismo vector pero ordenado.
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);
}
MANEJO DE CADENAS
Clase Strings
Una secuencia de datos del tipo carácter 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 código declara explícitamente 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 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 entre
comillas " y ").
"Hola mundo!"
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.
Concatenación de Cadenas
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 descripciónn
Devuelto
package
package nombre_package;
package miPackage;
...
class miClase {
...
Claúsula import
package Geometria;
...
class Circulo {
Punto centro;
...
}
package GeometriaBase;
class Punto {
int x , y;
}
Entonces, para usar la clase Punto en nuestra clase Circulo deberiamos poner:
package GeometriaAmpliada;
import GeometriaBase.*;
class Circulo {
Punto centro;
...
}
El API de java está estructurado de esta forma, con un primer calificador (java o
javax) que indica la base, un segundo calificador (awt, util, swing, etc.) que
indica el grupo funcional de clases y opcionalmente subpackages en un tercer
nivel, dependiendo de la amplitud del grupo. Cuando se crean packages de
usuario no es recomendable usar nombres de packages que empiecen por java
o javax.
Clases
Modela una abstracción definiendo propiedades y comportamientos para los
objetos representados.
Propiedades : atributos, variables
Comportamientos : operaciones, métodos
Implementación : Define cómo se proporcionan los servicios en una
clase.
Una abstracción trata de mostrar las propiedades y comportamientos de
un objeto que lo diferencia de otro.
Objetos
Es una instancia concreta de la abstracción que representa la clase.
Los objetos en Java se manejan por referencias Declaración de una
variable 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 Persona
Variable = objeto/instancia
Tipo = clase Cuando un objeto pierde su referencia es tomado por el
garbage collector.
Metodo constructor
//metodos
}
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 los
mé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 a
través de la referencia al objeto
2.-Implemente una clase llamado banco ,con los atributos nro de cuenta , nombre del
cliente , tipo de ahorro( D=dólar y S=soles) y el saldo; Implemente los métodos para
deposito , retiro de dinero. y los métodos constructores respectivos.
Esta aplicación impleméntelo :
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);
}
}
class Principal {
class Libro {
class Autor {
La Modificación de Datos:
También se realiza mediante el código del empleado
1.- Establecer los paquetes para las clases, inagenes y el paquete de prueba.
Empleado.java
package pack2;
this.code=cod;
this.nome=nom;
this.sec=sec;
this.horas=hr;
}
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;
}
return -1;
}
//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
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 */
}catch(Exception ex){
JOptionPane.showMessageDialog(this,"El dato debe ser numerico","error",
JOptionPane.ERROR_MESSAGE);
this.jTextArea1.setText("Registro eliminado");
}
void limpiar(){
this.txtcod.setText("");
this.txthr.setText("");
this.txtnom.setText("");
this.jRx.setSelected(true);//para deseleccionar las otras opciones
this.txtcod.requestFocus();
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);
/**
*
* @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);
initComponents();
this.jlbcod.setText(cod);
this.jlbnom.setText(nom);
this.jlbhoras.setText(""+hr);
this.jtxthoras.setText(""+hr);
this.jtxtnom.setText(nom);
}
/**
* @param args the command line arguments
*/
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 además extienda o
adapte ese comportamiento
a unas necesidades específicas.
La nueva subclase heredará los atributos y los métodos de la clase base, los cuales se
añadirán a los definidos en la propia subclase.
B. Jerarquía
Los descendientes de una clase heredan todas las variables y métodos que
sus ascendientes hayan especificado como heredables, además de crear los
suyos propios.
C. Tipos de Herencia
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:
// Contenido de la clase
String obtenerSeccion(){
return grupo;
}
}
La palabra clave extends se utiliza para decir que deseamos crear una
subclase de la clase que es nombrada a continuación, en nuestro caso Alumno
es hija de Persona.
E. Limitaciones en la herencia
Todos los campos y métodos de una clase son siempre accesibles para el
código de la misma clase.
Sin embargo los tres primeros modificadores (public, private y protected) son
los más comunes que se usan para controlar el acceso desde otras clases, y
para controlar la herencia por las subclases.
F. COMPOSICIÓN
class Circulo {
Punto centro;
int radio;
float superficie() {
return 3.14 * radio * radio;
}
}
class Empleado {
String nombre;
int numEmpleado , sueldo;
void asignarPresupuesto(int p) {
presupuesto = p;
}
void asignarPresupuesto(int p) {
presupuesto = p;
}
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 Boleta
String ruc 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(;;){
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 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);
}
}
//
Ejercicios:
1Crear una clase animal (nombre, nro de patas, sexo) crear las subclases Perro (atributo
raza, atributo habla), gallo( metodo canta), Gato(metodo maulla)
2.- crear la clase TarjetaCredito( nro de tarjeta, nombre del cliente, fecha de caducacion)
crear las subclases TarjetaDorada(linea de credito, Cargo ), TarjetaTotus(sueldo del
cliente, Empresa donde trabaja) realizar las subclases ademas comprobarlo en el main
para asignar los datos.
3.- (Sistema de Nómina) Elaborar un programa que permita procesar la nómina de una
empresa.
Para ello considere el siguiente diagrama de clases:
EJEMPLOS DE HERENCIA
Crear una clase circulo cuyo atributo
import java.text.DecimalFormat; es el radio y los métodos a crear son
public class herencia01 { Area() y Print() para el calculo del
area del circulo e impresión
public static void main(String[] args) { respectiva de los datos.
// TODO code application logic here Crear la clase Cilindro cuyo atributo
circulo x=new circulo(); son :radio y altura hacer la herencia
x.setRadio(5); correspondiente para el calculo de su
x.imprime(); área y volumen del cilindro.
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()));
}
}
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();
Postgrado
Alumno
public Alumno()
public Imprime()
public abstract Promedio()
package herencia;
Pregrado
Clase Alumno.java //herencia de la clase alumno
public class AlumnoPostgrado extends
package herencia; Alumno {
abstract class Alumno {
private String matricula; public AlumnoPostgrado(String nom,
private String nombre; String mat,
protected double n1, n2, n3; double n1, double n2, double n3)
//constructor de la clase alumno {
public Alumno(String mat, String n, super(mat,nom,n1,n2,n3);
double n1, double n2, double n3) { }
matricula = mat;
nombre = n; public double calcularNota() {
this.n1 = n1; return (n1+n2+n3)/3.0;
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;
package herencia;
import java.util.*;
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());
}
}
System.out.println("\n promedio:"+a.calcularNota());
}
}
Gestión 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 lógica del programa como un índice de un array fuera de su rango, una división
por cero o errores disparados por los propios objetos que denuncian algún tipo de estado
no previsto, o condición que no pueden manejar.
La idea general es que cuando un objeto encuentra una condición que no sabe manejar
crea y dispara una excepción que deberá ser capturada por el que le llamó o por alguien
más arriba en la pila de llamadas. Las excepciones son objetos que contienen
información del error que se ha producido y que heredan de la clase Throwable o de la
clase Exception. Si nadie captura la excepción interviene un manejador por defecto que
normalmente imprime información que ayuda a encontrar quién produjo la excepción.
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 para
contratar 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í como
lo siguiente:
Las excepciones son clases, que heredan de la clase genérica Exception. Es necesario
por tanto asignar un nombre a nuestra excepción. Se suelen asignar nombres que den
alguna idea del tipo de error que controlan. En nuestro ejemplo le vamos a llamar
CapacidadEmpresaExcedida.
En nuestro ejemplo:
Captura de excepciones
Con la primera versión del método nuevoEmpleado (sin excepción) se invocaría este
método de la siguiente forma:
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 una
sentencia 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 el
método nuevoEmpleado. Si no quiere capturar la excepción debe hacer lo siguiente:
Cláusula finally
La cláusula finally forma parte del bloque try / catch y sirve para especificar
un bloque de código que se ejecutará tanto si se lanza la excepción 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 {...}