You are on page 1of 25

CEET - Distrito Capital

Programa de Formacin:

ADSI 150752 TRIMESTRE VI

Conocimiento de Conocimiento: Aplicar diversos estilos de Programacin usando herramientas para


Desarrollo Web

Instructor: Ing. Espec. Javier Vaquiro

Gua - Taller # 3
(JAVA - POO)
Objetivo: Brindar al estudiante las herramientas necesarias para el
aprendizaje de aplicaciones relacionadas con el paradigma de la POO.

Programacin Orientada
a Objetos
Introduccin.
La idea de usar la POO es hacer que
la Programacin sea ms sencilla, ya
que permitir dividir un problema. Est
divisin se hace en objetos, de tal
manera que cada objeto funcione en
forma totalmente independiente. Un
objeto es un elemento del programa
que posee sus propios datos y su
propio funcionamiento. Es decir un
objeto est formado por datos
(propiedades) y funciones que es
capaz de realizar el objeto (mtodos).
Antes de poder utilizar un objeto, se debe definir su clase. La clase es la
definicin de un tipo de objeto. Al definir una clase lo que se hace es
indicar como funciona un determinado tipo de objetos. Luego, a partir de
la clase, podremos crear objetos de esa clase. Por ejemplo, si quisiramos
crear el juego del Parqus en Java, una clase sera la casilla, otra las fichas,
etc. En el caso de la casilla, se definira la clase para indicar su
funcionamiento y sus propiedades, y luego se creara tantos objetos casilla
como casillas tenga el juego.
Lo mismo ocurrira con las fichas, la clase ficha definira las propiedades de la ficha (color
y posicin por ejemplo) y su funcionamiento mediante sus mtodos (por ejemplo un
mtodo sera mover, otro llegar a la meta, etc., etc. ), luego se crearan tantos objetos
ficha, como fichas tenga el juego.

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 1

Propiedades de la POO
ENCAPSULAMIENTO.
Una clase se compone tanto de variables (propiedades) como de
funciones y procedimientos (mtodos). De hecho no se pueden
definir variables (ni funciones) fuera de una clase (es decir no hay
variables globales).

OCULTACIN.
Hay una zona oculta al definir las clases (zona privada) que slo es
utilizada por esa clases y por alguna clase relacionada. Hay una zona
pblica (llamada tambin interfaz de la clase) que puede ser utilizada
por cualquier parte del cdigo.

POLIMORFISMO.
Cada mtodo de una clase puede tener varias definiciones
distintas. En el caso del parchs: partida.empezar(4) empieza una partida
para cuatro jugadores, partida.empezar(rojo, azul) empieza una partida
de dos jugadores para los colores rojo y azul; estas son dos formas distintas
de emplear el mtodo empezar, que es polimrfico.

HERENCIA.
Una clase puede heredar propiedades y mtodos de su clase padre.

Concepto de Objeto
Un
objeto
es
cualquier
entidad
representable
en
un
programa
informtico, bien sea real (ordenador) o
bien sea un concepto (transferencia). Un
objeto en un sistema posee: una
identidad,
un
estado
y
un
comportamiento.
El Estado marca las condiciones de
existencia
del
objeto
dentro
del
programa. Lgicamente este estado
puede cambiar. Un coche puede estar
parado, en marcha, estropeado, funcionando, sin gasolina, etc.
El C omportamiento determina como responde el objeto ante peticiones de otros
objetos. Por ejemplo un objeto conductor puede lanzar el mensaje arrancar a un
coche. El comportamiento determina qu es lo que har el objeto.

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 2

La I dentidad determina que cada objeto es nico aunque tengan el mismo


valor. No existen dos objetos iguales. Lo que s existe es dos referencias al mismo
objeto.
Los objetos se manejan por referencias, existir una referencia a un objeto. De
modo que esa referencia permitir cambiar los atributos del objeto. Incluso
puede haber varias referencias al mismo objeto, de modo que si una referencia
cambia el estado del objeto, el resto (lgicamente) mostrarn esos cambios.
Los objetos por valor son los que no usan referencias y usan copias de valores
concretos. En Java estos objetos son los tipos simples: int, char, byte, short, long,
float, double y boolean. El resto son todos objetos (incluidos los arrays y Strings).
A los objetos tambin se les llama instancias de clase. Son un elemento en s de la
clase. Un objeto se crea utilizando el llamado constructor de la clase. El constructor
es el mtodo que permite iniciar el objeto.

Datos M iembro

(propiedades o atributos)

Para poder acceder a los atributos de un objeto, se utiliza esta sintaxis:


objeto.atributo
Por ejemplo:
Circulo.radio;

Mtodos
Los mtodos se utilizan de la misma forma que los atributos, excepto porque
los mtodos poseen siempre parntesis, dentro de los cuales pueden ir valore
snecesarios para la ejecucin del mtodo (parmetros):

objeto.mtodo(argumentosDelMtodo)
Los mtodos siempre tienen parntesis (es la diferencia con las propiedades) y
dentro de los parntesis se colocan los argumentos del mtodo. Que son los datos
que necesita el mtodo para funcionar. Por ejemplo:
MiCirculo.gira(5);
Lo cual podra hacer que la Noria avance a 5 Km/h.

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 3

Herencia
En la POO tiene mucha importancia este concepto, la herencia es el mecanismo
que permite crear clases basadas en otras existentes. Se dice que esas clases
descienden de las primeras. As por ejemplo, se podra crear una clase
llamada vehculo cuyos mtodos seran mover, parar, acelerar y frenar. Y despus
se podra crear una clase coche basada en la anterior que tendra esos mismos
mtodos (les heredara) y adems aadira algunos propios, por ejemplo abrirCap
o cambiarRueda.

Clases
Las clases son las plantillas para
hacer objetos. Una clase sirve
para definir una serie de objetos
con propiedades (atributos),
comportamientos (operaciones o
mtodos), y semntica comunes.
Hay que pensar en una clase
como un molde. A travs de las
clases se obtienen los objetos en
s.
Es decir antes de poder tilizar un objeto se debe definir la clase a la que
pertenece, esa definicin incluye:

Sus ATRIBUTOS. Es decir, los datos miembros de esa clase. Los datos pueden ser
pblicos (accesibles desde otra clase) o privados (slo accesibles por cdigo de su
propia clase. Tambin se las llama campos.

Sus M TODOS. Las funciones miembro de la clase. Son las acciones (u


operaciones) que puede realizar la clase.

Cdigo de inicializacin. Para crear una clase normalmente hace falta realizar
operaciones previas (es lo que se conoce como el constructor de la clase).

Otras clases. Dentro de una clase se pueden definir otras clases (clases internas,
son consideradas como asociaciones dentro de UML).

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 4

Imgen: Notacin UML de una Clase

El formato general para crear una clase en Java es:

[acceso] class nombreDeClase { [acceso] [static] tipo atributo1; [acceso]


[static] tipo atributo2; [acceso] [static] tipo atributo3;
...
[access] [static] tipo mtodo1(listaDeArgumentos) {
...cdigo del mtodo...
}
...
}
La palabra opcional static sirve para hacer que el mtodo o la propiedad a la que
precede se pueda utilizar de manera genrica (ms adelante se hablar de clases
genricas), los mtodos o propiedades as definidos se llaman atributos de clase y
mtodos de clase respectivamente. Su uso se ver ms adelante. Ejemplo;
class Noria {
double radio;
void girar(int velocidad){
...//definicin del mtodo
}
void parar(){...
}

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 5

Para poder utilizar un objeto, hay que crearle de verdad. Eso consiste en
utilizar el operador new.
Por ejemplo:

Vehiculo Mivehiculo = new Vehiculo( );


Al hacer esta operacin el objeto reserva la memoria que necesita y se
inicializa el objeto mediante su constructor. Ms adelante veremos como
definir el constructor.

CREACIN DE CLASES
Definir atributos de la clase (variables, propiedades o datos de las
clases)
Cuando se definen los datos de una determinada clase, se debe indicar el
tipo de propiedad que es (String, int, double, int[ ][ ],...) y el especificador de
acceso (public, private,...). El especificador indica en qu partes del cdigo ese
dato ser visible.

Ejemplo:
class Persona {
public String nombre;//Se puede acceder desde cualquier clase
private int contrasea;//Slo se puede acceder desde la
//clase Persona
protected String direccin;//Acceden a esta propiedad
//esta clase y sus descendientes

: Persona
+nombre: String
-contrasea: String
#direccion: String
dormir( )
trabajar( )
Ilustracin 8, La clase persona en UML. El signo + significa public,
el signo # protected y el signo - private

Por lo general las propiedades de una clase suelen ser privadas o protegidas, a
no ser que se trate de un valor constante, en cuyo caso se declararn como
pblicos.

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 6

Las variables locales de una clase pueden ser inicializadas.


Ejemplo:
Class auto
{
public nRuedas=4;

Definir mtodos de clase (operaciones o funciones de clase)


Un mtodo es una llamada a una operacin de un determinado objeto. Al realizar
esta llamada (tambin se le llama enviar un mensaje), el control del programa
pasa a ese mtodo y lo mantendr hasta que el mtodo finalice o se haga uso de
return.
Para que un mtodo pueda trabajar, normalmente hay que pasarle unos datos en
forma de argumentos o parmetros, cada uno de los cuales se separa por
comas. Ejemplos de llamadas:

vehiculo.frenar ();

// Sin argumentos o parmetros

miCoche.acelerar(10);

// Con argumentos

ficha.comer(posicin15);

// posicin 15 es una variable que se pasa como


argumento
partida.empezarPartida(18:15,colores);

Los mtodos de la clase se definen dentro de sta. Hay que indicar un modificador
de acceso (public, private, protected o ninguno, al igual que ocurre con las
variables y con la propia clase) y un tipo de datos, que indica qu tipo de
valores devuelve el mtodo.
Esto ltimo se debe a que los mtodos son funciones que pueden devolver un
determinado valor (un entero, un texto, un valor lgico,...) mediante el
comando return. Si el mtodo no devuelve ningn valor, entonces se utiliza el tipo
void que significa que no devuelve valores (en ese caso el mtodo no tendr
instruccin return).
El ltimo detalle a tener en cuenta es que los mtodos casi siempre necesitan datos
para realizar la operacin, estos datos van entre parntesis y se les llama
argumentos. Al definir el mtodo hay que indicar que argumentos se necesitan y de
qu tipo son.

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 7

Ejemplo: Creacin de una Clase llamada vehiculo


public class vehiculo
{
// Funcin principal
int ruedas;
private double velocidad=0;
String nombre;
// Aumenta la velocidad
public void acelerar(double cantidad) {
velocidad += cantidad;
}
// Disminuye la velocidad
public void frenar(double cantidad) {
velocidad -= cantidad;
}
// Devuelve la velocidad
public double obtenerVelocidad()
{
return velocidad;
}
public static void main(String args[])
{
vehiculo miCoche = new vehiculo(); miCoche.acelerar(12); miCoche.frenar(5);
System.out.println(miCoche.obtenerVelocidad());
}

En la clase anterior, los mtodos acelerar y frenar son de tipo void por eso no tienen
sentencia return. Sin embargo el mtodo obtenerVelocidad es de tipo double por
lo que su resultado es devuelto por la sentencia return y puede ser escrito en
pantalla.

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 8

Nombre de
la Clase

Datos Miembro
(Atributos)

Mtodos,
Operaciones
Funciones

: Vehculo
ruedas: int
-velocidad:double=0
#direccion:String
nombre:String
+acelerar(double)
+frenar(double)
+obtenerVelocidad( ):double
Imagen: Versin UML de la clase Coche

Destruccin de Objetos
En C y C++ todos los programadores saben que los objetos se crean con new y
para eliminarles de la memoria y as ahorrarla, se deben eliminar con la instruccin
delete. Es decir, es responsabilidad del programador eliminar la memoria que
gastaban los objetos que se van a dejar de usar. La instruccin delete del C++ llama
al destructor de la clase, que es una funcin que se encarga de eliminar
adecuadamente el objeto.
La sorpresa de los programadores C++ que empiezan a trabajar en Java es que
no hay instruccin delete en Java. La duda est entonces, en cundo se elimina la
memoria que ocupa un objeto.
En Java hay un recolector de basura (garbage collector) que se encarga de
gestionar los objetos que se dejan de usar y de eliminarles de memoria. Este
proceso es automtico e impredecible y trabajo en un hilo (thread) de baja
prioridad.
Por lo general ese proceso de recoleccin de basura, trabaja cuando detecta que
un objeto hace demasiado tiempo que no se utiliza en un programa. Esta
eliminacin depende de la mquina virtual, en casi todas la recoleccin se realiza
peridicamente en un determinado lapso de tiempo. La implantacin de mquina
virtual conocida como HotSpot1 suele hacer la recoleccin mucho ms a menudo
Se puede forzar la eliminacin de un objeto asignndole el valor null, pero teniendo
en cuenta que eso no equivale al famoso delete del lenguaje C++. Con null no se
libera inmediatamente la memoria, sino que pasar un cierto tiempo
(impredecible, por otro lado) hasta su total destruccin.
Se puede invocar al recolector de basura desde el cdigo invocando al
mtodo esttico System.gc(). Esto hace que el recolector de basura trabaje en
cuanto se lea esa invocacin.

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 9

Sin embargo puede haber problemas al crear referencias circulares. Como:

class uno {
dos d;
uno( )
{
// constructor d = new dos( );
}
}
class dos { uno u; dos() {
u = new uno();
}
public class app
{
public static void main(Stgring[] args)
{
uno prueba = new uno();//referencia circular
prueba = null; //no se liberar bien la memoria
}
}
Al crear un objeto de clase uno, automticamente se crea uno de la clase dos,
que al crearse crear otro de la clase uno. Eso es un error que provocar que no
se libere bien la memoria salvo que se eliminen previamente los objetos
referenciados.

El mtodo

finalize

Es equivalente a los destructores del C++. Es un mtodo que es llamado antes


de eliminar definitivamente al objeto para hacer limpieza final. Un uso puede ser
eliminar los objetos creados en la clase para eliminar referencias circulares. Ejemplo:

class uno { dos d; uno()


{
d = new dos();
}
protected void finalize()
{
d = null;//Se elimina d por lo que pudiera pasar
}
}

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 10

finalize es un mtodo de tipo protected heredado por todas las clases ya que
est definido en la clase raz Object.La diferencia de finalize respecto a los
mtodos destructores de C++ estriba en que en Java no se llaman al instante (de
hecho es imposible saber cuando son llamados). la llamada System.gc() llama a
todos los finalize pendientes inmediatamente (es una forma de probar si el mtodo
finalize funciona o no).

Reutilizacin de clases
Herencia
Es una de las armas fundamentales de la programacin orientada a objetos.
Permite crear nuevas clases que heredan caractersticas presentas en clases
anteriores. Esto facilita enormemente el trabajo porque ha permitido crear clases
estndar para todos los programadores y a partir de ellas crear nuestras propias
clases personales. Esto es ms cmodo que tener que crear nuestras clases desde
cero.
Para que una clase herede las caractersticas de otra hay que utilizar la palabra
clave extends tras el nombre de la clase. A esta palabra le sigue el nombre de la
clase cuyas caractersticas se heredarn. Slo se puede tener herencia de una
clase (a la clase de la que se hereda se la llama superclase y a la clase
heredada se la llama subclase). Ejemplo:

class coche extends vehiculo


{
...
} //La clase coche parte de la definicin de vehculo

mtodos y propiedades no heredados


Por defecto se heredan todos los mtodos y propiedades protected y public (no
se heredan los private). Adems si se define un mtodo o propiedad en la
subclase con el mismo nombre que en la superclase, entonces se dice que
se est redefiniendo el mtodo, con lo cual no se hereda ste, sino que se
reemplaza por el nuevo.

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 11

Ejemplo:
class vehiculo {
public int velocidad; public int ruedas;
public void parar() {
velocidad = 0;
}
public void acelerar(int kmh) {
velocidad += kmh;
}
class coche extends vehiculo{
public int ruedas=4;
public int gasolina;
public void repostar(int litros) {
gasolina+=litros;
}
}
public class app {
public static void main(String[] args) {
coche coche1=new coche(); coche.acelerar(80);//Mtodo
heredado coche.repostar(12);

super
A veces se requiere llamar a un mtodo de la superclase. Eso se realiza con la
palabra reservada super. Si this hace referencia a la clase actual, super hace
referencia a la superclase respecto a la clase actual, con lo que es un mtodo
imprescindible para poder acceder a mtodos anulados por herencia. Ejemplo
public class vehiculo{
double velocidad;
...
public void acelerar(double cantidad)
{
velocidad+=cantidad;
}
}
public class coche extends vehiculo{
double gasolina;
public void acelerar(double cantidad){
super.acelerar(cantidad);
gasolina*=0.9;
}
SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 12

En el ejemplo anterior, la llamada super.acelerar(cantidad) llama al mtodo


acelerar de la clase vehculo (el cual acelerar la marcha). Es necesario redefinir el
mtodo acelerar
en la clase coche ya que aunque la velocidad vara igual que en la superclase,
hay que tener en cuenta el consumo de gasolina
Se puede incluso llamar a un constructor de una superclase, usando la sentencia
super().
Ejemplo:
public class vehiculo{
double velocidad;
public vehiculo(double v){
velocidad=v;
}
}
public class coche extends vehiculo{
double gasolina;
public coche(double v, double g)
{
super(v); //Llama al constructor de la clase vehiculo
gasolina=g
}
}

Por defecto Java realiza estas acciones:


Si la primera instruccin de un constructor de una subclase es una sentencia que
no es ni super ni this, Java aade de forma invisible e implcita una llamada
super() al constructor por defecto de la superclase, luego inicia las variables de la
subclase y luego sigue con la ejecucin normal.
Si se usa super(..) en la primera instruccin, entonces se llama al constructor
seleccionado de la superclase, luego inicia las propiedades de la subclase y
luego sigue con el resto de sentencias del constructor.
Finalmente, si esa primera instruccin es this(..),
entonces se
llama
al
constructor seleccionado por medio de this, y despus contina con las sentencias
del constructor. La inicializacin de variables la habr realizado el constructor al
que se llam mediante this.

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 13

Clases abstractas
A veces resulta que en las superclases se desean incluir mtodos tericos, mtodos
que no se desea implementar del todo, sino que sencillamente se indican en la
clase para que el desarrollador que desee crear una subclase heredada de la
clase abstracta, est obligado a sobrescribir el mtodo.
A las clases que poseen mtodos de este tipo (mtodos abstractos) se las
llama clases abstractas. Son clases creadas para ser heredadas por nuevas
clases creadas por el programador. Son clases base para herencia. Las clases
abstractas no deben de ser instanciadas (no se pueden crear objetos de las clases
abstractas).Una clase abstracta debe ser marcada con la palabra clave abstract.
Cada mtodo abstracto de la clase, tambin llevar el abstract. Ejemplo:
abstract class vehiculo {
public int velocidad=0;
abstract public void acelera();
public void para() {velocidad=0;}
}
class coche extends vehiculo {
public void acelera() {
velocidad+=5;
}
}
public class prueba {
public static void main(String[] args) {
coche c1=new coche(); c1.acelera();
System.out.println(c1.velocidad); c1.para();
System.out.println(c1.velocidad);
}
}

Final
Se trata de una palabra que se coloca antecediendo a un mtodo, variable o
clase. Delante de un mtodo en la definicin de clase sirve para indicar que ese
mtodo no puede ser sobrescrito por las subclases. Si una subclase intentar
sobrescribir el mtodo, el compilador de Java avisar del error.

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 14

Si esa misma palabra se coloca delante de una clase, significar que esa clase
no puede tener descendencia.
Por ltimo si se usa la palabra final delante de la definicin de una propiedad
de clase, entonces esa propiedad pasar a ser una constante, es decir no
se le podr cambiar el valor en ninguna parte del cdigo.

Clases internas
Se llaman clases internas a las clases que se definen dentro de otra clase. Esto
permite simplificar aun ms el problema de crear programas. Ya que un
objeto complejo se puede descomponer en clases ms sencillas. Pero
requiere esta tcnica una mayor pericia por parte del programador.
Al definir una clase dentro de otra, estamos hacindola totalmente
dependiente. Normalmente se realiza esta prctica para crear objetos internos
a una clase (el motor de un coche por ejemplo), de modo que esos objetos
pasan a ser atributos de la clase.
Por ejemplo:
public class Coche {
public int velocidad;
public Motor motor;
public Coche(int cil) { motor=new
Motor(cil); velocidad=0;
}
public class Motor{ //Clase interna
public int cilindrada;
public Motor(int cil){
cilindrada=cil;
}
}
}
El objeto motor es un objeto de la clase Motor que es interna a Coche. Si
quisiramos acceder al objeto motor de un coche sera:
Coche c=new Coche(1200);
System.out.println(c.motor.cilindrada);//Saldr 1200
Las clases internas pueden ser privadas, protegidas o pblicas. Fuera de la clase
contenedora no pueden crear objetos (slo se pueden crear motores
dentro de un coche), salvo que la clase interna sea static en ese caso s
podran. Por ejemplo (si la clase motor fuera esttica):

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 15

//suponiendo que la declaracin del Motor dentro de Coche es


// public class static Motor{....
Coche.Motor m=new Coche.Motor(1200);
Pero eso slo tiene sentido si todos los Coches tuvieran el mismo motor.
Dejando de lado el tema de las clases static, otro problema est en el operador this. El
problema es que al usar this dentro de una clase interna, this se refiere al objeto de la
clase interna (es decir this dentro de Motor se refiere al objeto Motor). Para poder
referirse al objeto contenedor (al coche) se usa Clase.this (Coche.this). Ejemplo:

public class Coche { public int velocidad;


public int cilindrada;
public Motor motor;
public Coche(int cil) {
motor=new Motor(cil);
velocidad=0;
}
public class Motor{
public int cilindrada;
public Motor(int cil){
Coche.this.cilindrada=cil;//Coche
this.cilindrada=cil;//Motor
}
}
}
Por ltimo las clases internas pueden ser annimas (se vern ms adelante al estar ms
relacionadas con interfaces y adaptadores).

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 16

Laboratorio
Objetivo: Diagnosticar el progreso del aprendizaje del estudiante sobre la
aplicacin de conocimientos fundamentales de las propiedades de la POO.

1. La facultad de Ingeniera necesita un programa que le permita registrar las


notas de los estudiantes a la finalizacin del semestre ya que se necesita conocer
el rendimiento acadmico de la facultad. Se debe leer los datos haciendo uso
de la clase JOptionPane de Java. De cada estudiante se debe leer el cdigo,
nombre, plan acadmico, periodo acadmico (String), el nmero de crditos
matriculados (int) y el promedio acadmico (double).
En la figura 1.1 se
muestra la forma de ingresar los datos.

Imagen 1.1 Entrada de datos del


estudiante

Despus de terminar de leer los datos se debe mostrar un informe con los datos del
estudiante como se muestra en la imagen 1.2

Imagen 1.2 Resultados mostrados despus de leer el estudiante

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 17

Se debe entregar los siguientes archivos.


NotasIngenieria.java
UsaNotasIngenieria.java
Punto1.pdf: Contiene el diagrama de clases y una lista de
explicadas, con ejemplos de ejecucin del programa.

figuras

2. Se desea hacer un programa en Java para calcular la nmina en una


empresa constructora. Esta empresa cada fin de semana le paga a los
trabajadores de la obra . Para cada empleado se debe leer la cdula, nombre
(String), el nmero de horas trabajadas a la semana (int) y el precio por hora
(double). El programa debe calcular el salario bsico. El empleado debe pagar los
aportes a salud y pensin que son el 5% y 10% respectivamente del salario bsico.
Al final se debe mostrar un informe como se muestra a continuacin. Los datos se
deben ingresar como se muestra en la imagen 2.1

Imagen 2.1 Entrada de datos del empleado

La respuesta se debe mostrar en un mensaje como el mostrado en la imagen 2.2

Imagen 2.2 Resultados de la Nmina del Empleado


SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 18

Se debe entregar los siguientes archivos.

Nomina.java
UsaNomina.java
Punto2.pdf: Contiene el diagrama de clases y una lista de figuras
explicadas, con ejemplos de ejecucin del programa.
3. Se necesita un programa para calcular el promedio ponderado de un
estudiante de Ingeniera que tiene matriculadas las siguientes materias:
Asignatura

Nmero de Crditos

Clculo

Fsica

Algoritmia

Algebra lineal

Deporte Formativo

Total crditos

16

El peso de cada materia en el promedio depende del nmero de crditos. Un


ejemplo se muestra en la tabla anterior
.
El promedio ponderado se calculara as.
Promedio= (Nota1 * numeroCreditosNota1
numeroCreditosNota2

/ totalCreditos)

/ totalCreditos)

(Nota n numeroCreditosNota n

+ (Nota2*

/ totalCreditos)

Usando la clase JOptionPane se debe leer el cdigo del estudiante, nombre


(String) y las notas obtenidas en cada materia. Con estos datos el sistema
calcular el promedio ponderado y mostrar el resultado, como se muestra en la
figura 3.1

Imagen 3.1 Resultados del promedio ponderado

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 19

Se debe entregar los siguientes archivos.


Estudiante.java
UsaEstudiante.java
Punto3.pdf: Contiene el diagrama de clases y una lista de figuras
explicadas, con ejemplos de ejecucin del programa.

Ayudas y Gua de implementacin


/*
* LABORATORIO No. 2
* INTEGRANTES DEL GRUPO:
* CODIGO DE LOS INTEGRANTES:
* FECHA DE REALIZACIN:
* PROFESOR:
* SALA DE COMPUTO No:
* DESCRIPCION DE LA CLASE:
*/
import javax.swing.*;

public class ClaseBase{


//Definicin de atributos
int atributo1;
String atributo2;
double
atributo3;

/*
* LABORATORIO No. 2
* INTEGRANTES DEL GRUPO:
* CODIGO DE LOS INTEGRANTES:
* FECHA DE REALIZACIN:
* PROFESOR:
* SALA DE COMPUTO No:
* DESCRIPCION DE LA CLASE:
*/

public class ClasePrincipal{


//Mtodo
principal

public static void main(String ]){


//Creacin del objeto
ClaseBase objeto= new ClaseBase();

//Definicin de mtodos

public void metodo1()

//Utilizacin de los mtodos del


objeto creado

{
}
public void metodo2()
{
}
public void metodon()
{

objeto.metodo1();
objeto.metodo
2();
System.exit(0);

}//Fin
main

}//fin clase

}//fin clase

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 20

4._ Investiga los siguientes conceptos y mencione un ejemplo aplicativo


a) finalize
b) this
c) new
d) extends
e) final
5._ Explique brevemente en que consiste la destruccin de objetos y para que se utiliza. Escriba
un ejemplo.

6._ Con sus propios trminos, defina que son las clases Abstractas y para que se utilizan. Escriba
un ejemplo.

7._ Explique brevemente en que consiste la propiedad Polimorfismo y como se utiliza. Escriba
un ejemplo.
8._ Cul de las siguientes afirmaciones es falsa en Java?
a) Es posible definir arrays bidimensionales de la forma a[i][j], donde cada fila a[i] puede tener
distinta longitud.
b) No es posible declarar arrays con memoria esttica.
c)

Hola es un array.

d)

Un array es un objeto.

9._ Dado el siguiente programa:


class A {
static int x[ ] = {1, 2};
int y[ ];
void f (int z[ ]) { z[1]+=2; }
void g ( ) {
A a = new A ( );
a.x[0]++;
}
}
class B {
public static void main (String args[ ]) {
A b = new A ( );
b.y = b.x; b.f
(b.y); b.g ( );
System.out.println (b.x[0] + " " + b.x[1]);
System.out.println (b.y[0] + " " + b.y[1]);
}
}

(1)
(2)

Cul es la salida de la lnea (1) ?


a)
b)
c)
d)

1
1
2
2

2
4
2
4

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 21

10._ En el programa anterior, cul es la salida de la lnea (2) ?


a)
b)
c)
d)

12
14
22
24

11._ Cul es la salida en pantalla del siguiente programa?


class A {
static int n = 0;
String f (A x) { return "AA" + (x.n++); } String f (B x) { return
"AB" + (x.n--); }
}
class B extends A {
String f (B x) { return "BB" + (x.n--); }
public static void main (String args[]) { A a = new A ();
A b = new B (); System.out.println (a.f (b));
System.out.println (b.f (b)); System.out.println (a.f
((B) b)); System.out.println (b.f ((B) b));
}
}

Salida:
AA0
AA1
AB2
BB1

a)
b)
c)
d)

12._ a)

Definir una clase Conjunto que ontenga:





Un array de valores de cualquier tipo.


Un mtodo interseccion que tome como argumento otro conjunto, y
devuelva un nuevo conjunto con la interseccin de los dos, es decir, los
elementos de la primera lista que son equal a algn elemento de la segunda.

class Conjunto {
Object elementos[]; Conjunto
(Vector elems) {
elementos = new Object [elems.size ()];
for (int i = 0; i < elementos.length; i++)
elementos [i] = elems.elementAt (i);
}
Conjunto interseccion (Conjunto conj) { Vector
inter = new Vector ();
for (int i = 0; i < elementos.length; i++)
for (int j = 0; j < conj.elementos.length; j++)
if (elementos[i].equals (conj.elementos[j])) {
inter.addElement (elementos[i]);
break;
}
return new Conjunto (inter);
}
}
SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 22

b) Definir una clase Persona con una variable dni y los mtodos necesarios para que se pueda
hacer la interseccin de listas de personas con la clase anterior, considerando que dos
personas son la misma cuando tienen el mismo DNI.
class Persona { String
dni;
public boolean equals (Object obj) {
return (obj instanceof Persona) && dni.equals (((Persona) obj) .dni);
}
}

c) Definir un mtodo elements en la clase Conjunto que devuelva una Enumeration para
iterar sobre un conjunto. Indicacin: Enumeration es una interface con dos mtodos:
nextElement y hasMoreElements.
class Conjunto {
...
Enumeration elements () {
return new ConjEnumeration (this);
}
}
class ConjEnumeration implements Enumeration {
Conjunto conjunto;
int actual = 0;
ConjEnumeration (Conjunto conj) { conjunto = conj; }
public Object nextElement () {
return conjunto.elementos[actual++];
}
public boolean hasMoreElements () {
return actual < conjunto.elementos.length;
}
}

13._ Indicar cul es la salida del siguiente programa y explicar por qu.
class A {
public static void main (String args[]) throws X {
try { f (); throw new Z (); }
catch (Y ex) { System.out.println (Y + ex); }
catch (X ex) { System.out.println (X + ex); }
}
static f () throws X {
try { throw new Y (); } catch (X ex) { g (); }
}
static g () throws X {
try { throw new X (); } catch (Y ex) {}
}
}
class X extends Exception {
public String toString () { return "X"; }
}
class Y extends X {
public String toString () { return "Y"; }
}
class Z extends Y {
public String toString () { return "Z"; }
}
SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 23

NOTA: No olvide incluir en cada una de sus clases el siguiente encabezado

/* LABORATORIO No. 3
* AUTOR :
* FECHA DE REALIZACIN:
* PROFESOR:
* GRUPO:
* DESCRIPCION DE LA CLASE <NombreClase>: describa lo que hace esta clase. */

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 24

Anexo - Instrucciones JAVA


DESCRIPCION

INSTRUCCION

Declarar un rea de Texto de


dimensiones: alto 10 X largo 20
Crear barras de desplazamiento para
rea de texto en ventana

JTextArea areaT = new JTextArea(10, 20);

JScrollPane scroller = new JScrollPane(areaT);

Definir un ttulo para el rea de texto


(areaTexto)

areaT.setText(" Texto a desplegar ")

Adicionar cadena de caracteres


(salida) al rea de texto

areaT.append(salida);

Mostrar la ventana de dilogo con


la salida (el rea de texto)

JOptionPane.showMessageDialog(null,
scroller,
"Tabla
Posiciones Futbol", JOptionPane.INFORMATION_MESSAGE);

Abrir una ventana para ingresar


un dato

JOptionPane.showInputDialog("Cadena de texto con mensaje a


mostrar");

Ventana
de
dilogo
para
confirmar la continuacin de algo

JOptionPane.showConfirmDialog(null,"Desea
partidos?");

Convertir
una
cadena
caracteres a un dato real

Double.parseDouble(cadena de caracteres)

de

incluir

Ingresar un valor entero xVal

int xVal = Integer.parseInt(JOptionPane.showInputDialog


("Digite un valor"));

Ingresar un valor String

variable=JOptionPane.showInputDialog("Digite un valor");

Sentencia if-else

Sentencia switch

Ciclos for

Ciclo while

Ciclo do-while

mas

if (condicin){
Instrucciones si se cumple la condicin; }
else{
Instrucciones si no se cumple la condicin; }
switch (clave) {
case 12: pago = nroMin * VALMIN1; break;
case 15: pago = nroMin * VALMIN2; break;
case 19: pago = nroMin * VALMIN3; break;
}
for (declaracion; condicion; incremento){
instrucciones a repetir
}
while (condicin){
Instrucciones a repetir
}
do{
Instrucciones a repetir
}while(condicin);

Importar la clase DecimalFormat

import java.text.DecimalFormat;

Se declara un objeto formato que


contiene el formato a trabajar

DecimalFormat formato = new DecimalFormat("0.00");


// se trabajarn solamente 2 decimales

Uso del formato en un mensaje de salida:


objeto form, mtodo format y
atributo (valorSalida)
Uso de la instruccin para calcular
y
X (x elevado y) El resultado es
double

de

Salida = "\n\tValor ="+form.format(valorSalida);


Math.pow( x, y );
double = Math.pow( x, y );

SENA ADSI / Instructor: Ing. Espec. Javier Vaquiro

Pg. 25

You might also like