Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Técnicas de Programa-
ción del II ciclo de la es-
cuela de Ingeniería de
Sistemas de la ULADECH
Programación orientado a
objetos
Contiene el uso de las clases de Java y sus métodos, creación de métodos,
recursividad y sobrecarga de métodos, arreglos, miembros de una clase,
relaciones de clases, niveles de acceso de los miembros de una clase, operador
this, herencia de clases, clases abstractas, interfaces, polimorfismo, paquetes y
excepciones
Elaborado por:
INDICE
Página
CAPITULO I: Uso y creación de métodos. 03
Métodos de clases de Java 04
Creación de métodos 22
Recursividad y sobrecarga de métodos 34
Arreglos unidimensionales en métodos 45
CAPITULO II:Programación orientada a objetos 59
Clases y sus miembros 60
Relaciones entre clases 79
Modificadores de acceso a los miembros de una clase 92
Métodos constructores y la referencia this 107
CAPITULO III: Herencia, clases abstractas, interfaces y polimorfismo 119
Herencia de clases 120
Clases abstractas 137
Interfaces y herencia múltiple 149
Polimorfismo 163
CAPITULO IV: Paquetes, excepciones y desarrollo de un proyecto 179
Paquetes 180
Manejo de excepciones e hilos 185
Proyecto Tienda 193
CAPITULO I
USO Y CREACION DE METODOS
Un modo sencillo de realizar una lectura de la entrada es leer una sola línea
almacenándola en un objeto de tipo String, para lo que se emplea el método
readLine. Este método lee hasta que encuentra un final de línea o el final del
fichero. Los caracteres leídos salvo el final de Línea (en el caso de que se
encuentre), se devuelven como un nuevo String. Para emplear readLine, se
debe construir un objeto BufferedReader sobre un objeto InputStreamReader
que a su vez se crea a partir de System.in.
Ejemplo:
La clase Math
veremos:
e = 2.718281828459045
pi = 3.141592653589793
La clase Integer
Cada tipo numérico tiene su propia clase de objetos. Así el tipo int tiene el
objeto Integer. Se han codificado muchos métodos útiles dentro de la clase
Integer como son:
La clase Character
Declaraciones
char c;
Character C;
Comprobaciones booleanas
Traslaciones de caracteres
char c2 = Character.toLowerCase( c );
char c2 = Character.toUpperCase( c );
Traslaciones de carácter/dígito
La clase Float
Cada tipo numérico tiene su propia clase de objetos. Así el tipo float tiene el
objeto Float. De la misma forma que con la clase Character , se han codificado
muchas funciones útiles dentro de los métodos de la clase Float .
Declaraciones
float f;
Float F;
Conversiones de Clase/Cadena
String s = Float.toString( f );
f = Float.valueOf( "3.14" );
Comprobaciones
boolean b = Float.isNaN( f );
boolean b = Float.isInfinite( f );
Conversiones de Objetos
Float F = new Float( Float.PI );
String s = F.toString();
int i = F.intValue();
long l = F.longValue();
float F = F.floatValue();
double d = F.doubleValue();
La clase Double
Cada tipo numérico tiene su propia clase de objetos. Así el tipo double tiene el
objeto Double . De la misma forma que con la clase Character , se han
codificado muchas funciones útiles dentro de los métodos de la clase Double .
Declaraciones
double d;
Double D;
boolean D.equals();
String D.toString();
int D.intValue();
long D.longValue();
float D.floatValue();
double D.doubleValue();
Double V.valueOf( String s );
Clase String
Esta clase almacena una cadena de caracteres. Una cadena es una serie de caracteres que
se trata como una unidad. Una cadena puede incluir letras, dígitos y diversos caracteres
especiales como +,-,*,/,$ y otros.
Una cadena en Java es un objeto de la clase String.
Los literales de cadena o constantes de cadena en Java se escriben como una secuencia
de caracteres cerrada entre comillas.
Ejemplo:
“Computación”, “Java es fácil”,
cadena.substring(indice) : Devuelve una subcadena que esta conformada por todos los
caracteres que comienzan en indice e incluye todos los caracteres siguientes hasta el fin
de la cadena.
Ejemplo:
String cad1 = String.valueOf(12);
String cad2 = String.valueOf(true);
String cad3 = String.valueOf(‘T’);
String cad4 = String.valueOf(12.9867);
PROGRAMAS RESUELTOS
import java.io.*;
Interpretación de la programación:
Al usar import.java.io.*; importamos el paquete io (input output) que permitirá
luego para el ingreso y salida de datos. Tenemos la clase AreaTriangulo que
tienen al método estático llamado main que al colocar (String args[]) indica que
no hay argumento alguno para el método y al colocar throws IOException son
nuestra indicación al compilador de que estamos conscientes del hecho de que
puede ocurrir una excepción (intercepción de error) de entrada/salida cuando el
programa intente leer del teclado y que deliberadamente estamos haciendo
caso omiso de tales excepciones de entrada/salida en nuestro programa.
Luego se declara las variables base, altura y area de tipo float. Posteriormente
se declara la variable in del tipo BufferedReader y se crea el objeto in con el
operador new usando el método constructor BufferedReader, la misma que
usa el InputStreamReader, clase o interfaz que permite la lectura de entrada a
través del teclado, es decir, la variable objeto in es la permitirá luego lograr
ingresar datos. Luego con el método print usado a partir de System.out permite
imprimir una expresión como por ejemplo “Ingrese la base del triángulo:”. En la
línea de la programación base= Float.parseFloat(in.readLine()); se busca el
ingreso de un dato que se lee con el método readLine() a partir del objeto in
import java.io.*;
Interpretación de la programación:
La novedad en la segunda aplicación es el uso del método pow() que permite
calcular la potencia dado la base y el exponente, así por ejemplo
Math.pow(lado1,2) calcula el cuadrado del contenido de la variable lado1. Con
el método sqrt() se logra calcular la raíz cuadrada del un número, así por
ejemplo Math.sqrt(4) calula la raíz cuadrada de 4.
import java.io.*;
ph=Double.parseDouble(in.readLine());
sb=ph*ht;
sn=sb-0.10*sb;
System.out.println("El Salario neto del trabajador : "+nombre+ " es : "+sn);
}
}
import java.io.*;
Docente: Ing. Martín Salcedo Quiñones Pagina: 17
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
switch(letra)
{
case 'a': case 'A':
System.out.println("EXCELENTE");
break;
case 'b': case 'B':
System.out.println("BUENO");
break;
case 'c': case 'C':
System.out.println("REGULAR");
break;
case 'd': case 'D':
System.out.println("MALO");
break;
case 'e': case 'E':
System.out.println("PESIMO");
break;
default :
System.out.println("letra equivocada");
}
}
}
CREACION DE METODOS
Los métodos en java permiten modularizar sus programas. Todas las variables
declaradas en las definiciones de métodos son variables locales es decir solo
se conocen en el método que se definen. Casi todos los métodos tienen una
lista de parámetros que permiten comunicar información entre métodos. Los
parámetros de un método también son variables locales.
Donde:
tipo_de_valor_devuelto: Indica el tipo de valor que se devuelve al método
invocador. Si un método no devuelve un valor, el tipo_de_valor_devuelto se
declara como void.
nombre_del_método: Es cualquier identificador válido
lista_de_parámetros: Es una lista separada por comas que contiene las
declaraciones de las variables que se pasarán al método. Si un método no
recibe parámetros las lista_de_parámetros se deja vacía.
Docente: Ing. Martín Salcedo Quiñones Pagina: 22
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
void mensaje()
{
System.out.println(“Java es fácil de Aprender”);
}
PROGRAMAS RESUELTOS
import java.io.*;
Interpretación de la programación:
Se tiene el método factorial que tiene un solo parámetro de tipo entero llamado
n y que devuelve o retorna un valor de tipo entero. Es un método estático por lo
que no será necesario crear o instanciar un objeto (recuerda que para
instanciar un objeto se usa el operador new). En el método main se inicia con
crear el objeto br del tipo BufferedReader (para lectura de datos), luego se
declara una variable n de tipo n (recuerda que esta variable no es el mismo del
paramétro del método factorial ya que se declara en otro método). A través de
import java.io.*;
class Metodos02{
public static int mcd(int a, int b)
{
int d=2,p=1;
while(d<=a && d<=b)
if(a%d==0 && b%d==0)
{
p=p*d;
a=a/d;
b=b/d;
}
else
d++;
return p;
}
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int x,y,m;
do{
System.out.print("Ingrese primer numero :");
x=Integer.parseInt(br.readLine());
}while(x<0);
do{
System.out.print("Ingrese el segundo numero : ");
y=Integer.parseInt(br.readLine());
}while(y<0);
m=mcd(x,y);
Docente: Ing. Martín Salcedo Quiñones Pagina: 25
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
import java.io.*;
class Metodos03{
public static void reporteDivisores(int n)
{
int d;
System.out.println("Los divisores del numero son :");
for(d=1;d<=n;d++)
if(n%d==0) System.out.print(d+" ");
System.out.println();
}
import java.io.*;
class Metodos05{
public static boolean esPrimo(int n)
{
int d=1;
do{
d=d+1;
Docente: Ing. Martín Salcedo Quiñones Pagina: 26
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
class Aritmetica{
System.out.print(d+" ");
n=n/d;
}
System.out.println();
}
}
class PruebaAritmetica{
public static void main(String args[]) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n;
do{
System.out.print("Ingrese numero :");
n=Integer.parseInt(br.readLine());
}while(n<0);
System.out.println("el Factorial es : "+Aritmetica.factorial(n));
if(Aritmetica.esPrimo(n))
System.out.println("El numero es primo");
else
System.out.println("El numero no es primo");
}
}
Observa que debes crear la clase principal Metodos01 dentro del paquete
sesion02_aplicaciones. Luego dar clic en el botón de comando Terminar.
RECURSIVIDAD
Un método es recursivo cuando se llama a si mismo ya sea directamente e
indirectamente.
Si un método recursivo se invoca con un caso base, simplemente devuelve un
resultado. Si el método se invoca con un problema más complejo, divide el
problema en dos o más partes conceptuales: una parte del método sabe cómo
resolver y una versión un poco más pequeña del problema original. Dado que
este nuevo problema se asemeja al problema original, el método emite una
llamada recursiva para trabajar con el problema reducido.
Para que la recursividad termine, cada vez que el método recursivo se llama a
si mismo con una versión un poco más sencilla del problema original, la
secuencia de problemas cada vez menores debe convergir hacia el caso base.
Cuando el método reconoce el caso base, devuelve el resultado a la llamada
de método previa, y se inicia una secuencia de devoluciones que termina
cuando la llamada del método original devuelve el resultado final.
Recursividad vs Iteración
Tanto la iteración como la recursión se basan en una estructura de control.: La
iteración usa una estructura de repetición; la recursión una estructura de
selección.
PROGRAMAS RESUELTOS
import java.io.*;
}
}
Interpretación de la programación:
El método recursivo llamado factorial tiene un perímetro de tipo entero llamado
n. Se evalúa su valor si es igual cero usando la sentencia IF, si es falso se
retorna el valor de n multiplicado con lo que retornará el método factorial al
darle el valor de n disminuido en 1. Si observamos la figura que se coloca al
inicio de esta sesión:
import java.io.*;
class recursividad02{
import java.io.*;
class recursividad03{
else
return fibonacci(n-1) + fibonacci(n-2);
}
import java.io.*;
class recursividad04{
import java.io.*;
class recursividad05{
import java.io.*;
class recursividad06{
SOBRECARGA DE METODOS
Java permite definir varios métodos con el mismo nombre en tanto dichos
métodos tengan diferentes juegos de parámetros (con base en el número y el
orden de los parámetros). Esto se denomina sobrecarga de métodos. Cuando
se invoca un método sobrecargado, el compilador de Java selecciona el
método adecuado examinando el número, los tipos y el orden de los
argumentos en la llamada. La sobrecarga de métodos suele utilizarse para
crear varios métodos con el mismo nombre que realizan tareas similares, pero
sobre datos de diferentes tipos.
import java.io.*;
class sobrecarga01{
ARREGLOS
Un arreglo es un grupo contiguo de posiciones de memoria relacionadas entre
sí. Estas posiciones están relacionadas por el hecho de que todas tienen el
mismo nombre y el mismo tipo. Para referirnos a una posición o elemento en
particular dentro del arreglo, especificamos el nombre del arreglo y el subíndice
del elemento.
Un subíndice puede ser un entero o una expresión entera. Si un programa
emplea una expresión como subíndice, la expresión se evalúa para determinar
el elemento específico del arreglo.
Los arreglos de Java siempre comienzan con el elemento 0.
Declaración de un arreglo
En java existen 2 formas de declarar arreglos.
Creación de un Arreglo
Después de declarar un arreglo, se tiene que crearlo. Para crearlo se coloca la
palabra clave new seguida del tipo de dato y del tamaño del arreglo entre
corchetes..
Ejm:
numeros = new int[100]; // se esta creando un arreglo de 100 elementos
enteros
Inicialización de un arreglo
En Java se pueden inicializar arreglos al declararlos. Cuando se especifica
valores iniciales dentro de la declaración de un arreglo, Java realiza la
operación new y define el tamaño del arreglo de forma automática.
Ejemplo:
int arreglo1 [] = { 1, 2, 3, 4, 5};
Ejemplo:
int numeros = { 12, 20, 60, 80, 100 };
Referencias a arreglos
Java utiliza referencias para apuntar a los arreglos.
Por ejemplo:
Las siguientes instrucciones utilizan la referencia arreglo para acceder a dos
arreglos distintos.
import java.io.*;
class ReferenciaArreglo{
Docente: Ing. Martín Salcedo Quiñones Pagina: 47
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
for(int indice=0;indice<arreglo.length;indice++)
System.out.println(arreglo[indice]);
arreglo=segundo;
System.out.println("Segundo Arreglo ");
for(int indice=0;indice<arreglo.length;indice++)
System.out.println(arreglo[indice]);
}
}
PROGRAMAS RESUELTOS
import java.io.*;
public class Arreglo01{
public static void main(String arg[])throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
double x[],mayor,menor,promedio,suma=0;
int n,i;
do{
System.out.print("Cantidad de elementos del arreglo : ");
n=Integer.parseInt(br.readLine());
}while(n<=0 || n>100);
Docente: Ing. Martín Salcedo Quiñones Pagina: 48
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
x=new double[n];
for(i=0; i<n;i++)
{
System.out.print("x["+i+"]: ");
x[i]=Double.parseDouble(br.readLine());
}
mayor=menor=x[0];
for(i=1; i<n; i++)
if (x[i]>mayor) mayor=x[i];
else
if(x[i]<menor) menor=x[i];
promedio=suma/n;
System.out.println("El mayor es " +mayor);
System.out.println("El menor es:"+ menor);
System.out.println("El promedio es : "+ promedio);
}
}
Interpretación de la programación:
En el método main se inicia creando el objeto br del tipo BuffreredReader,
luego se declara variables de memoria de tipo double. Se aprecia la variable
x[] que es una arreglo o vector que todavía no se define el tamaño o el número
de elementos. Luego se declara dos variables enteras n, i. A través de la
sentencia repetitiva se valida el valor de n dentro de un rango de 1 a 100, es
Docente: Ing. Martín Salcedo Quiñones Pagina: 49
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
import java.io.*;
int n,i;
do{
System.out.print("Cantidad de elementos del arreglo : ");
n=Integer.parseInt(br.readLine());
}while(n<=0);
x=new double[n];
for(i=0; i<n;i++)
{
System.out.print("x["+i+"]: ");
x[i]=Double.parseDouble(br.readLine());
}
suma=0;
for(i=0;i<n;i++)
suma=suma + Math.pow(x[i]-p,2);
ds=Math.sqrt(suma/(n-1));
System.out.println("La desviacion standard es : "+ds);
}
}
import java.io.*;
double x[],temp;
int n,i,j;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
do{
System.out.print("Cantidad de elementos del arreglo : ");
n=Integer.parseInt(br.readLine());
}while(n<=0 || n>100);
x=new double[n];
for(i=0; i<n;i++)
{
System.out.print("x["+i+"]: ");
x[i]=Double.parseDouble(br.readLine());
}
System.out.println("Arreglo Ingresado");
for(i=0; i<n;i++)
System.out.println("x["+i+"]: "+x[i]);
for(i=0,j=n-1;i<n/2;i++,j--)
{
temp=x[i];
x[i]=x[j];
x[j]=temp;
}
System.out.println("Arreglo Invertido");
for(i=0; i<n;i++)
System.out.println("x["+i+"]: "+x[i]);
}
}
Docente: Ing. Martín Salcedo Quiñones Pagina: 52
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
import java.io.*;
do{
System.out.print("Numero de elementos de los vectores : ");
n=Integer.parseInt(br.readLine());
}while(n<=0);
x=new double[n];
y=new double[n];
pe=0;
for(i=0;i<n;i++)
pe=pe+x[i]*y[i];
System.out.println("El Producto escalar es : " +pe);
}
}
import java.io.*;
do{
System.out.print("Cantidad de nombres a ingresar : ");
n=Integer.parseInt(br.readLine());
}while(n<=0);
nombres=new String[n];
for(i=0; i<n;i++)
{
System.out.print("Nombre["+i+"]: ");
nombres[i]=br.readLine();
}
Observa que debes crear la clase principal Arreglo01 dentro del paquete
sesion04_aplicaciones. Luego dar clic en el botón de comando Terminar.
AUTOEVALUACION
CAPITULO II
PROGRAMACION ORIENTADA A OBJETOS
CLASE
Una clase es una plantilla o prototipo que define las variables y los métodos
comunes a todos los objetos de cierto tipo. Las clases definen estado
(variables) y comportamiento (métodos) de todos los objetos.
Las clases son el mecanismo por el que se pueden crear nuevos Tipos en
Java. Las clases son el punto central sobre el que giran la mayoría de los
conceptos de la Orientación a Objetos.
Una clase es una agrupación de datos y de código (métodos) que actúa sobre
esos datos, a la que se le da un nombre.
import java.io.*;
class Rectangulo{
private double base;
private double altura;
public Rectangulo(double b, double h) // Constructor
{
base = b;
altura=h;
}
public void setBase(double b)
{
base=b;
}
public void setAltura(double h)
{
altura=h;
}
public double getBase()
{
return base;
}
public double getAltura()
{
return altura;
}
public double area()
{
return base*altura;
}
return 2*base+2*altura;
}
La clase Rectángulo tiene 2 atributos base y altura los cuales son privados esto
quiere decir que estas 2 variables son visibles en la clase Rectángulo.
El primer método que se ha implementado es el constructor, este método se
llama igual que la clase y no devuelve ningún valor y permite inicializar los
atributos de la clase. Este método se llama en el momento de crear un objeto.
Como los atributos base y altura son privados, para que los usuarios que usan
los objetos puedan modificar los atributos se crean los métodos
setBase(double b) y setAltura(double h). Y si deseamos obtener los valores de
los atributos creamos los métodos getBase() y getAltura().
Además se han creado los métodos area(), perímetro() y diagonal() que
permiten calcular el area, perímetro y diagonal del rectangulo.
En el método toString() (a cadena) se crea una cadena con la información de
los atributos de la clase. En realidad podemos colocar cualquier información.
Al colocar :
R = new Rectangulo(3,4);
Con el operador new creamos un objeto de la clase Rectangulo.El operador
new instancia una clase asignando memoria para el nuevo Objeto.
El operador new requiere una llamada a un constructor de la clase a
instanciar. El constructor inicializa el nuevo objeto.El operador new retorna una
referencia al objeto creado.
Una vez creado el objeto para poder llamar a sus métodos usamos lo siguiente
objeto.nombredeMétodo. Por ejemplo para calcular el area usamos R.area(),
para calcular el perímetro R.perimetro() y para calcular la diagonal R.diagonal().
Al escribir System.out.println(“Rectangulo : “+R); en realidad se esta llamando
tácitamente al método toString de la clase R.
Si se deseara modificar el atributo base del Objeto se debe usar el método
setBase por ejemplo si después de crear el objeto queremos que base tenga el
PROGRAMAS RESUELTOS
1) Crear la clase Cilindro con atributos radio y altura y que se pueda calcular el
area y el volumen del cilindro.
import java.io.*;
class Cilindro{
private double radio;
private double altura;
{
return radio;
}
C = new Cilindro(r,h);
System.out.println("Cilindro : "+C);
System.out.println("Area : "+C.area());
System.out.println("Volumen : "+C.volumen());
}
}
Interpretación de la programación:
Se crea clase Cilindro con los atributos radio y altura de tipo double. Luego se
crea el método constructor Cilindro (los métodos constructores se verá en la
octava sesión) que permite establecer los valores de los dos atributos a través
de los parámetros r y a. Luego se construye los métodos setRadio() y
setAltura() que permite cambiar el valor del atributo radio y altura
respectivamente. Con los métodos getRadio() y getAltura() se obtiene el
contenido del atributo radio y altura respectivamente. Con los métodos area() y
volumen() se calcula el área y el volumen del cilindro. El método toString()
permite imprimir el radio y la altura del cilindro según el contenido de los
atributos.
Con la clase PruebaCilindro, en el método main se crea la variable objeto br
del tipo BufferedReader, se declara las variables de memoria r y h de tipo
double y se declara la variable C del tipo de la clase Cilindro. Se ingresa los
valores del radio y de la altura. Luego en la instrucción C = new Cilindro(r,h); se
crea el objeto C (que previamente había sido declarado) con el método
constructor Cilindro pasando los valores ingresados del radio y la altura a
través de las variables de memoria r y h. A continuación con la instrucción
System.out.println("Cilindro : "+C); se imprime la expresión “Cilindro:” con lo
programado en el método toString(), es decir, es lo mismo colocar C que
colocar C.toString(). Finalmente se imprime el área y el volumen del cilindro
usando los métodos area() y volumen() invocados desde el objeto C.
2) Crear la clase numeros que tenga como atributos dos numeros y se calcule su
suma, resta, multiplicación, división.
import java.io.*;
class Numeros{
private double numero1;
private double numero2;
public Numeros(double n1,double n2)
{
numero1=n1;
numero2=n2;
}
3) Crear la clase Alumno que tenga como atributos nombre, nota1 y nota2 y
permita calcular el promedio y su condicion (aprobado o desaprobado)
import java.io.*;
class Alumno{
private String nombre;
private double nota1;
private double nota2;
return nota1;
}
n2=Double.parseDouble(br.readLine());
A = new Alumno(nom,n1,n2);
System.out.println("Alumno : "+A);
System.out.println("Promedio : "+A.promedio());
System.out.println("Condicion : "+A.condicion());
}
}
import java.io.*;
class Trabajador{
private String nombre;
private double horasTrabajadas;
private double precioHora;
precioHora=ph;
}
import java.io.*;
class Movil{
private double velocidadInicial;
private double aceleracion;
private double tiempo;
{
return
velocidadInicial*tiempo+(1.0/2.0)*aceleracion*Math.pow(tiempo,2);
}
}
Diagrama de clases Nº 1
Se observa la clase Pedido que tiene como atributos a numero (de tipo entero),
fecha (de tipo cadena) y cliente (de tipo cadena). Tiene como operaciones o
métodos a Pedido(), adicionarDetalle(), obtenerDetalle() y
calcularTotalPedido(). La segunda clase llamada DetallePedido tiene como
atributos a cantidad (de tipo entero) y precio (de tipo flotante), como único
método tiene a DetallePedido(). Existe una relación entre la clase de Pedido y
DetallePedido que consiste que cada Pedido debe estar compuesto de uno a
muchos Detalle de Pedidos.
Diagrama de clases Nº 2
Se observa la clase Almacen que tiene como único atributo nombre (de tipo
cadena) y sus métodos son: Almacen(), adiconarProducto(), obtenerProducto(),
adicionarEmpleado() y obtenerEmpleado(). La segunda clase llamada Producto
tiene como atributos a nombre (de tipo cadena), stock (de tipo entero) y precio
(de tipo flotante) y como único método Producto(). Existe una relación entre la
clase mAlmacen y la clase Producto que consiste que cada Almacen puede
tener uno o muchos productos.
3 4
PROGRAMAS RESUELTOS
Docente: Ing. Martín Salcedo Quiñones Pagina: 82
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
3) Crear la clase Facultad con los atributos codigofac y nombre y luego la clase
EscuelaPropfesional con los atributos codigoesc, nombre, facultad. Luego
procede a ingresar los datos de dos escuelas profesionales.
import java.io.*;
class Facultad
{
String codigofac;
String nombre;
class EscuelaProfesional
{
String codigoesc;
String nombre;
Facultad facultad;
private, por otro lado, es el modificador más restrictivo y especifica que los
elementos que lo utilizan sólo pueden ser accedidos desde la clase en la que
se encuentran. Este modificador sólo puede utilizarse sobre los miembros de
una clase y sobre interfaces y clases internas, no sobre clases o interfaces de
primer nivel, dado que esto no tendría sentido.
Docente: Ing. Martín Salcedo Quiñones Pagina: 92
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
El modificador protected, por último, indica que los elementos sólo pueden ser
accedidos desde su mismo paquete (como el acceso por defecto) y desde
cualquier clase que extienda la clase en que se encuentra, independientemente
de si esta se encuentra en el mismo paquete o no. Este modificador, como
private, no tiene sentido a nivel de clases o interfaces no internas.
Static
A pesar de lo que podría parecer por su nombre, heredado de la terminología
de C++, el modificador static no sirve para crear constantes, sino para crear
miembros que pertenecen a la clase, y no a una instancia de la clase. Esto
implica, entre otras cosas, que no es necesario crear un objeto de la clase para
poder acceder a estos atributos y métodos. Este es el motivo por el cual es
obligatorio que main se declare como static; de esta forma no tenemos que
ofrecer un constructor vacío para la clase que contiene el método, o indicar de
alguna forma a la máquina virtual cómo instanciar la clase.
Un uso del modificador static sería, por ejemplo, crear un contador de los
objetos de la clase que se han creado, incrementando la variable estática en el
constructor:
Como es de esperar, dado que tenemos acceso a los atributos sin necesidad
de crear un objeto, los atributos estáticos como usuarios no se inicializan al
crear el objeto, sino al cargar la clase.
Podemos acceder a estos métodos y atributos bien desde la propia clase
Una característica no muy conocida que se introdujo en Java 1.5 son los static
imports, una sentencia similar al import habitual, con la salvedad de que esta
importa miembros estáticos de las clases, en lugar de clases de los paquetes,
permitiendo utilizar estos miembros sin indicar el espacio de nombres en el que
se encuentran. El ejemplo anterior podría haberse escrito también de la
siguiente forma utilizando esta característica:
Si por algún motivo requerimos cualquier tipo de computación para inicializar nuestras
variables estáticas, utilizaremos lo que se conoce como bloque estático o inicializador
estático, el cuál se ejecuta una sola vez, cuando se carga la clase.
Por último, una curiosidad relacionada que podéis utilizar para romper el hielo con una
programadora Java es que podemos utilizar un bloque static para escribir un programa
sencillo sin necesidad de un main, añadiendo una llamada a System.exit para que el
programa termine tras cargar la clase sin intentar llamar al método main
Final
Indica que una variable, método o clase no se va a modificar, lo cuál puede ser
útil para añadir más semántica, por cuestiones de rendimiento, y para detectar
errores.
PROGRAMAS RESUELTOS
5) Crear una clase Empleado que haga uso del modificador static y luego crea dos
objetos de Empleados.
import java.io.*;
class Empleado{
private String nombres;
private String apellidos;
private static int contador;
Interpretación de la programación:
p=(lado1+lado2+lado3)/2.0;
r=p*(p-lado1)*(p-lado2)*(p-lado3);
if (r>0)
return Math.sqrt(r);
else
return 0.0;
}
public static int perimetroCuadrado(int lado1)
{
return 4*lado1;
}
public static int perimetroRectangulo(int lado1, int lado2)
{
return 2*lado1+2*lado2;
}
public static int perimetroTriangulo(int lado1, int lado2, int lado3)
{
return lado1+lado2+lado3;
}
}
public class CalculoAreaPerimetro
{
public static void main(String args[])throws IOException
{
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
int opcion, l1,l2,l3;
System.out.println("CALCULO DEL AREA Y PERIMETRO");
System.out.print("Ingrese 1: cuadrado, 2:rectangulo, 3:triangulo -> ");
opcion=Integer.parseInt(br.readLine());
if (opcion==1)
{
System.out.print("Ingrese el valor del lado del cuadrado: ");
l1=Integer.parseInt(br.readLine());
System.out.println("El area del cuadrado es:
"+FigurasGeometricas.areaCuadrado(l1));
System.out.println("El perimetro del cuadrado es:
"+FigurasGeometricas.perimetroCuadrado(l1));
}
Docente: Ing. Martín Salcedo Quiñones Pagina: 100
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
if (opcion==2)
{
System.out.print("Ingrese el valor del lado 1 del rectangulo: ");
l1=Integer.parseInt(br.readLine());
System.out.print("Ingrese el valor del lado 2 del rectangulo: ");
l2=Integer.parseInt(br.readLine());
System.out.println("El area del rectangulo es:
"+FigurasGeometricas.areaRectangulo(l1,l2));
System.out.println("El perimetro del rectangulo es:
"+FigurasGeometricas.perimetroRectangulo(l1,l2));
}
if (opcion==3)
{
System.out.print("Ingrese el valor del lado 1 del triangulo: ");
l1=Integer.parseInt(br.readLine());
System.out.print("Ingrese el valor del lado 2 del triangulo: ");
l2=Integer.parseInt(br.readLine());
System.out.print("Ingrese el valor del lado 3 del triangulo: ");
l3=Integer.parseInt(br.readLine());
System.out.println("El area del triangulo es:
"+FigurasGeometricas.areaTriangulo(l1,l2,l3));
System.out.println("El perimetro del rectangulo es:
"+FigurasGeometricas.perimetroTriangulo(l1,l2,l3));
}
}
}
class FigurasGeometricas
{
public double areaCuadrado(int lado1)
{
return lado1*lado1;
}
{
return lado1*lado2;
}
METODOS CONSTRUCTORES Y LA
REFERENCIA THIS
//declaracion de atributos
public Datos();//constructor sin parametros
public Datos(int Edad)
{//Constructor con parámetros
EdadM=Edad;
}
}
Por ejemplo:
Sobrecarga
Cuando en una clase, se definen un mismo método, con diferente número de
parámetros, o bien con el mismo número de parámetros pero diferenciándose
en la definición, en la cual, al menos un parámetro sea de diferente tipo,
cuando esto sucede, se dice que el método está sobrecargado.
Por ejemplo:
public class Arboles {
public Arboles() {
System.out.println("Un árbol genérico");
}
Explicación:
Como en todo programa Java, primeramente se define la Clase a través del
vocablo class.
Aunque sería posible emplear distintos nombres para los valores de entrada,
evitando el uso del vocablo this, la sintaxis con el vocablo this es ampliamente
utilizada en el caso de Constructores mencionado anteriormente.
PROGRAMAS RESUELTOS
1 /*Archivo UsaCoordenadas.java*/
2 public class UsaCoordenadas {
3 public static void main (String args []){
4 Coordenadas P=new Coordenadas (10,20);
5 //calculamos la Distancia:
6 System.out.println("La Distancia es: "+P.Distancia(5,6));
7 //Punto Medio
8 P.Pmedio(5,6);
9 }
10 }
Interpretación de la programación
Un método, si va a devolver algún valor, éste debe especificarse cuando se
hace la definición del mismo, para el caso, el método Distancia, devuelve el
valor de la distancia, es por ello que lo especificamos como public double.
Además que, cuando realizamos la llamada de ese método, es en ese
Docente: Ing. Martín Salcedo Quiñones Pagina: 110
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
preciso lugar que aparecerá el valor que devuelve. Por otra parte, los
atributos, son de acceso privado, lo cual implica que, sólo podemos acceder
a ellos, en la clase Coordenadas.
2) Cree una aplicación en Java, que imprima un número imaginario. Nota, los
números imaginarios, poseen una parte real y otra imaginaria, acompañada
por la constante i.
1 class Imaginario {
2 private int real, imag;
3 public Imaginario()
4 {
5 real=0;
6 imag=0;
7 }
8 public Imaginario(int x, int y)
9 {
10 real=x;
11 imag=y;
12 }
13 public void Mostrar()
14 {
15 System.out.println("El Numero Imaginario es: "+real+" + "+imag+"i");
16 }
17 }
1 class UsaImaginario{
2 public static void main (String args []) {
3 Imaginario oI=new Imaginario(5,6);
4 oI.Mostrar();
5}
6}
Interpretación de la programación
En el ejemplo anterior puede notar que, los atributos, son esas variables
simples, es las cuales almacenaremos información relevante a los objetos
que, crearemos a partir de esa clase.
Además que, los estamos declarando como públicos, lo cual indica que
tenemos acceso directo desde cualquier otro archivo a los atributos. Los
métodos son del tipo public y no devuelven ningún valor, por tal razón son
declarados como void. Además que. El método EstablecerEdad y
EstablecerNota, reciben un argumento cada uno de ellos, el cual es
asignado al respectivo atributo.
Docente: Ing. Martín Salcedo Quiñones Pagina: 111
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
} else {
return productos[indice];
}
}
AUTOEVALUACION
CAPITULO III
HERENCIA, CLASES ABSTRACTAS,
INTERFACES Y POLIMORFISMO
HERENCIA DE CLASES
A través de la herencia, una clase nueva hereda los atributos y métodos de una
superclase previamente definida. En este caso decimos que la nueva clase es
una subclase.
En la herencia simple, una clase se hereda de una superclase. Java no
reconoce la herencia múltiple, pero si maneja el concepto de interfaces. Las
interfaces ayudan a java a lograr muchas de las ventajas de la herencia
múltiple.
Una subclase normalmente agrega sus propios atributos y métodos. De modo
que una subclase generalmente es mayor que su superclase. Una subclase es
más específica que su superclase y representa un grupo más pequeño de
objetos. El verdadero valor de la herencia radica en la capacidad de definir en
la subclase adiciones a las características heredadas de la superclase o
sustituciones de estas.
Todo objeto de una subclase es también un objeto de la superclase de esa
subclase. Sin embargo no se cumple lo opuesto: los objetos de una superclase
no son objetos de las subclases de esa superclase.
Las relaciones de herencia forman estructuras jerárquicas similares a un árbol.
Una superclase existe en una relación Jerárquica con sus subclases. Sin duda,
Docente: Ing. Martín Salcedo Quiñones Pagina: 120
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
una clase puede existir sola, pero es cuando una clase se emplea con el
mecanismo de herencia que se convierte ya sea en una superclase que
proporciona atributos y comportamientos a otras clases, o en una subclase que
hereda dichos atributos y comportamientos.
Ejemplos:
Persona
Por ejemplo en una ciudad existen Personas las cuales pueden ser
Empleados, Estudiantes, Religiosos. Los Empleados pueden ser Profesor,
Contador. Los estudiantes pueden ser Universitarios, de Institutos y Colegios.
Las subclases heredan el estado y el comportamiento en forma de las variables y los
métodos de su superclase. La subclase puede utilizar los ítems heredados de su
superclase tal y como son, o puede modificarlos o sobreescribirlos. Por eso, según se va
bajando por el árbol de la herencia, las clases se convierten en más y más
especializadas.
Miembros Protected
Los miembros protected de una superclase sólo están accesibles para los
métodos de la superclase, los métodos de las subclases y los métodos de otras
clases del mismo paquete.
import java.io.*;
class Punto{
protected double x;
protected double y;
public Punto()
{
x=0;
y=0;
}
}
}
public Circulo()
{
super();
radio=0;
}
{
return "Centro = "+super.toString()+" Radio = "+radio;
}
}
}
Trabajador es una clase genérica que sirve para almacenar datos como el
nombre, la dirección, el número de teléfono o el número de la seguridad social
de un trabajador.
Empleado es una clase especializada para representar los empleados que
tienen una nómikna mensual (encapsula datos como su salario anual)
Consultor es una clase especializada para representar a aquellos trabajadores
que cobran por horas (por ejemplo, registra el número de horas que ha
trabajado un consultor y su tarifa horaria).
import java.util.Date;
class Trabajador
{
private String nombre;
private String puesto;
private String direccion;
private String telefono;
private Date fecha_nacimiento;
private Date fecha_contrato;
private String NSS;
//constructor
public Trabajador (String nombre,String NSS)
{
this.nombre=nombre;
this.NSS=NSS;
}
//comparación de objetos
Public boolean equals (Trabajador t)
{
return this.NSS.equals(t.NSS);
}
double sueldo;
private double impuestos;
private final int PAGAS=14;
//constructor
public Empleado(String nombre, String NSS, double sueldo)
{
super(nombre, NSS);
this.sueldo=sueldo;
this.impuestos=0.2 * sueldo;
}
//constructor
public Consultor(String nombre, String NSS, int horas, double tarifa)
{
super(nombre, NSS);
this.horas=horas;
this.tarifa=tarifa;
}
Redifinición de métodos
Como hemos visto en el ejemplo con el método toString(), cada subclase
hereda las operaciones de su superclase pero tiene la posibilidad de modificar
localmente el comportamiento de dichas operaciones (redifiniendo métodos).
Continuamos con el caso Trabajador, Empleado y Consultor.
CLASES ABSTRACTAS
Mascota
o es una Superclase abstracta (abstract)
es abstracta por que contiene un método llamado
acariciar() que es abstracto
una Clase abstracta no puede ser instanciada
en UML se sabe que una Clase es abstracta por que el
nombre de la Clase está en cursiva
-nombre: String
o Nota: Convención sobre los métodos de acceso getters y setters
así pues siguiendo la convención, los métodos
+setNombre(nombre: String): void y +getNombre(): String
no están en la Clase de diseño Mascota
-fechaNacimiento: Date
o Date es una Clase Java que como su nombre indica, representa
una fecha
+acariciar():void
o como este método está escrito en cursiva, esto significa que
abstract
import java.util.Date;
import java.util.Date;
Hay una Clase que se llama Date que está incluida en el paquete java.util para
que el entorno de ejecución Java sepa donde encontrar esta Clase, nosotros
se lo tenemos que indicar con la palabra clave import
Date fechaNacimiento;
this.nombre = nombre;
La palabra clave this se está utilizando en esta ocasión para distinguir una
variable de instancia de una variable local.
Como ahora nos estamos refiriendo a una mascota concreta, ésta enviará el
mensaje de que está agachando las orejas.
p1.alimentar("Dog Chow");
p1.acariciar();
g1.alimentar("Cat Chow");
g1.acariciar();
Y esta es la salida
Figura es una clase abstracta porque no tienen sentido calcular su área, pero si
del cuadrado o un círculo. Si una subclase de Figura no redefine área(), deberá
declararse también como clase abstracta.
De acuerdo al diagrama de clases, la programación en Java sería:
super(x,y);
this.radio=radio;
}
public double area()
{
return Math.PI * radio * radio;
}
}
14. Asi debe quedar luego de escribir las instrucciones de la última aplicación
Para crear una interface, se utiliza la palabra clave interface en lugar de class.
La interface puede definirse public o sin modificador de acceso, y tiene el
mismo significado que para las clases. Todos los métodos que declara una
interface son siempre public.
Para indicar que una clase implementa los métodos de una interface se utiliza
la palabra clave implements. El compilador se encargará de verificar que la
clase efectivamente declare e implemente todos los métodos de la interface.
Una clase puede implementar más de una interface.
interface nombre_interface {
tipo_retorno nombre_metodo ( lista_argumentos ) ;
...
}
Por ejemplo:
interface InstrumentoMusical {
void tocar();
void afinar();
String tipoInstrumento();
}
Referencias a Interfaces
Es posible crear referencias a interfaces, pero las interfaces no pueden ser
instanciadas. Una referencia a una interface puede ser asignada a cualquier
objeto que implemente la interface. Por ejemplo:
Extensión de interfaces
Las interfaces pueden extender otras interfaces y, a diferencia de las clases,
una interface puede extender más de una interface. La sintaxis es:
Agrupaciones de constantes
Dado que, por definición, todos los datos miembros que se definen en una
interface son static y final, y dado que las interfaces no pueden instanciarse
resultan una buena herramienta para implantar grupos de constantes. Por
ejemplo:
System.out.println(Meses.NOMBRES_MESES[ENERO]);
Lo que aquí nos interesa es ver lo que sucede cuando el usuario, utilizando el
ratón pulsa sobre el botón. Supongamos que la clase Boton tiene un método,
de nombre por ejemplo click(), que es invocado por el gestor de ventanas
cuando ha detectado que el usuario ha pulsado el botón del ratón sobre él. El
botón deberá realizar alguna acción como dibujarse en posición 'pulsado' (si
tiene efectos de tres dimensiones) y además, probablemente, querrá informar a
alguien de que se ha producido la acción del usuario. Es en este mecanismo
de 'notificación' donde entra el concepto de interface. Para ello definimos una
interface Oyente de la siguiente forma:
interface Oyente {
void botonPulsado(Boton b);
}
La interface define un único método botonPulsado. La idea es que este método
sea invocado por la clase Boton cuando el usuario pulse el botón. Para que
esto sea posible en algún momento hay que notificar al Boton quien es el
Oyente que debe ser notificado. La clase Boton quedaría:
Con todo esto la clase que utiliza este mecanismo podría tener el siguiente
aspecto:
...
void botonPulsado(Boton x) {
// procesar click
...
}
}
{
private double lado;
public Cuadrado (double lado)
{
this.lado=lado;
}
public double area()
{
return lado * lado;
}
}
interface Dibujable
{
public void dibujar()
}
interface Rotable
{
public void rotar(double grados);
}
System.out.println("------------------------------------------------");
System.out.print("Ingrese 1 si es circulo ó 2 si es cuafdrado: ");
tipo=Integer.parseInt(br.readLine());
if(tipo==1)
{
System.out.print("Ingrese el valor del radio: ");
radio=Double.parseDouble(br.readLine());
Circulo Cir=new Circulo(0,0,radio);
System.out.println("El area del circulo es: "+Cir.area());
Cir.dibujar();
Cir.rotar(45);
}
if(tipo==2)
{
System.out.print("Ingrese el valor del lado: ");
lado=Double.parseDouble(br.readLine());
Cuadrado Cua=new Cuadrado(0,0,lado);
System.out.println("El area del cuadrado es: "+Cua.area());
Cua.dibujar();
Cua.rotar(30);
}
}
POLIMORFISMO
Ejemplos:
import java.io.*;
nombres=nom;
}
{
comisionPorArticulo=com;
}
{
protected double salarioPorHora;
protected double horasTrabajadas;
E = J;
System.out.println(E.toString()+" gano "+E.ganancias());
E = C;
System.out.println(E.toString()+" gano "+E.ganancias());
E = H;
System.out.println(E.toString()+" gano "+E.ganancias());
E = D;
System.out.println(E.toString()+" gano "+E.ganancias());
}
}
/*
La Linea
E = J;
La expresión:
E.toString()
La llamada al Metodo
E.ganancias()
import java.io.*;
protected double y;
}
Docente: Ing. Martín Salcedo Quiñones Pagina: 171
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
F[0]=p;
F[1]=c;
F[2]=k;
System.out.println(p.getNombre()+" : "+p);
System.out.println(c.getNombre()+" : "+c);
System.out.println(k.getNombre()+" : "+k);
for(int i=0;i<3;i++)
{
System.out.println();
System.out.println(F[i].getNombre()+" : "+F[i]);
System.out.println("Area ="+F[i].area());
System.out.println("Volumen"+F[i].volumen());
System.out.println("=============");
}
}
}
AUTOEVALUACION
CAPITULO IV
PAQUETES, EXCEPCIONES Y DESARROLLO DE
UN PROYECTO
PAQUETES
Claúsula package
Un package es una agrupación de clases afines. Equivale al concepto de
librería existente en otros lenguajes o sistemas. Una clase puede definirse
como perteneciente a un package y puede usar otras clases definidas en ese o
en otros packages.
Los packages delimitan el espacio de nombres (space name). El nombre de
una clase debe ser único dentro del package donde se define. Dos clases con
el mismo nombre en dos packages distintos pueden coexistir e incluso pueden
ser usadas en el mismo programa.
package miPackage;
Docente: Ing. Martín Salcedo Quiñones Pagina: 180
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
...
class miClase {
...
Claúsula import
Cuando se referencia cualquier clase dentro de otra se asume, si no se indica
otra cosa, que ésta otra está declarada en el mismo package. Por ejemplo:
package Geometria;
...
class Circulo {
Punto centro;
...
}
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;
...
}
package GeometriaAmpliada;
class Circulo {
GeometriaBase.Punto centro;
...
}
De esta forma se pueden tener los packages ordenados según una jerarquía
equivalente a un sistema de archivos jerárquico.
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.
Además del significado lógico descrito hasta ahora, los packages también
tienen un significado físico que sirve para almacenar los módulos ejecutables
(ficheros con extensión .class) en el sistema de archivos del ordenador.
Para que una clase pueda ser usada fuera del package donde se definió debe
ser declarada con el modificador de acceso public, de la siguiente forma:
package GeometriaBase;
Si una clase no se declara public sólo puede ser usada por clases que
pertenezcan al mismo package
Definición:
Una excepción es un evento que ocurre durante la ejecución del programa que
interrumpe el flujo normal de las sentencias.
import java.awt.*;
import java.applet.Applet;
La palabra clave finally define un bloque de código que se quiere que sea
ejecutado siempre, de acuerdo a si se capturó la excepción o no. En el ejemplo
anterior, la salida en la consola, con i=4 sería:
Saludos desbordado
¡Esto se imprime siempre!
throw ObtejoExcepction;
class melon {
public static void main( String[] a ) {
int i=0, j=0, k;
ArithmeticException
int i = 12 / 0;
NullPointerException
Se produce cuando se intenta acceder a una variable o método antes de ser
definido:
paint( Graphics g ) {
g.drawImage( img,25,25,this );
}
}
IncompatibleClassChangeException
ClassCastException
y = (Prueba)x; // donde
x no es de tipo Prueba
NegativeArraySizeException
Puede ocurrir si hay un error aritmético al intentar cambiar el tamaño de un
array.
OutOfMemoryException
¡No debería producirse nunca! El intento de crear un objeto con el operador
new ha fallado por falta de memoria. Y siempre tendría que haber memoria
suficiente porque el garbage collector se encarga de proporcionarla al ir
liberando objetos que no se usan y devolviendo memoria al sistema.
NoClassDefFoundException
Se referenció una clase que el sistema es incapaz de encontrar.
ArrayIndexOutOfBoundsException
Es la excepción que más frecuentemente se produce. Se genera al intentar
acceder a un elemento de un array más allá de los límites definidos
inicialmente para ese array.
THREADS Y MULTITHREADING
Considerando el entorno multithread, cada thread (hilo, flujo de control del
programa) representa un proceso individual ejecutándose en un sistema. A
veces se les llama procesos ligeros o contextos de ejecución. Típicamente,
cada thread controla un único aspecto dentro de un programa, como puede ser
supervisar la entrada en un determinado periférico o controlar toda la
entrada/salida del disco. Todos los threads comparten los mismos recursos, al
contrario que los procesos en donde cada uno tiene su propia copia de código
y datos (separados unos de otros). Gráficamente, los threads se parecen en su
funcionamiento a lo que muestra la figura siguiente:
try {
sleep( retardo );
} catch( InterruptedException e ) {
;
}
PROYECTO: TIENDA
Este proyecto desarrollado con programación en Java usando el entorno de
desarrollo NetBeans consta de 5 archivos de extensión java:
Almacen.java
DetallePedido.java
Pedido.java
Producto.java
Sistema_Tienda.java
Sistema_Tienda.java contiene:
package proyecto_tienda;
import java.io.*;
r=mostrarMenuProductos();
switch(r)
{
case 1:
System.out.println("");
System.out.println("INGRESO DE PRODUCTOS");
System.out.println("====================");
do
{
System.out.print("CODIGO DEL PRODUCTO: ");
numpro=Integer.parseInt(br.readLine());
System.out.print("NOMBRE: ");
nompro=br.readLine();
System.out.print("STOCK: ");
cant=Integer.parseInt(br.readLine());
System.out.print("PRECIO: ");
pre=Float.parseFloat(br.readLine());
System.out.print("¿Desea ingresar los datos de otro
producto? (Si=1, No=0): ");
rpta=Integer.parseInt(br.readLine());
System.out.println("");
//Creacion del Objeto a partir de la Clase Producto
p=new Producto(numpro, nompro, cant, pre);
//Adiciona el objeto al Arreglo de Productos
oA.adicionarProducto(p);
}while(rpta==1);
break;
case 2:
//Falta hacer la modificacion de datos del producto
}
}while(r!=3);
break;
case 3:
// Falta hacer la realizacion del pedido
break;
case 4:
System.out.println("LISTA DE PRODUCTOS");
int total,i;
total=oA.getNproductos();
if (total>0)
for(i=0;i<total;i++)
{
p=oA.obtenerProducto(i);
System.out.println(p.getNombre()+"\t"+p.getStock()
+"\t"+p.getPrecio());
}
break;
case 5:
// Falta hacer el listado de pedidos
}
}while(opcion !=6);
System.out.println("");
System.out.println("Gracias por usar el pequeño Sistema ....");
}
}
Almacen.java contiiene:
package proyecto_tienda;
{
nombre=nom;
//Creacion del arreglo de objetos producto
nproductos = 0;
productos = new Producto[100];
}
Producto.java contiene:
package proyecto_tienda;
//Constructor
Docente: Ing. Martín Salcedo Quiñones Pagina: 200
TECNICAS DE PROGRAMACION
Universidad Católica los Angeles de Chimbote
this.precio = precio;
}
Pedido.java contiene:
package proyecto_tienda;
//Constructor
public Pedido(int numero, String fecha,String cliente) {
this.numero = numero;
this.fecha = fecha;
this.cliente = cliente;
//Porque el primer indice va a ser cero
this.ndetalles = 0;
//Creamos el arreglo con un maximo de 50
this.detalles = new DetallePedido[50];
}
DetallePedido.java contiene:
package proyecto_tienda;
//Contructor
public DetallePedido(int cantidad, float precio, Producto producto) {
this.cantidad = cantidad;
this.precio = precio;
this.producto = producto;
}
}
}
AUTOEVALUACION
REFERENCIAS WEBGRAFICAS
http://www.geocities.ws/marcelino_torres_villanueva/programacionorientada
aobjetos.pdf (Herencia de clases, polimorfismo)
http://dns.uls.cl/~ej/web_Poo_2010/Teo_Poo_2010/librojava.doc
(Clases abstractas)
http://www.webtaller.com/construccion/lenguajes/java/lecciones/clases-
contra-interfaces-java.php (Interfaces)
http://dis.um.es/~lopezquesada/documentos/IES_1011/DFSI/curso/UT6/java
/cap11/index.html (Interfaces)