Está en la página 1de 31

Sesin

1
Clases y Objetos

Clases Y Objetos

Java es un lenguaje totalmente orientado a objetos. En Java todo es un objeto, a excepcin


de los tipos bsicos de variables enteras, reales y char. Pero bien, qu es un objeto? y
qu es la programacin orientada a objetos?
Una clase es la plantilla que usamos para crear los objetos. Un objeto que se crea a partir
de una clase se dice que es una instancia de esa clase.

Declaracin de una clase

La forma ms bsica de declaracin de una clase en Java es:

[Modificador] class Nombre_clase {

Declaracin de atributos;

Declaracin de mtodos;

El campo que va entre corchetes (modificador) es opcional y lo veremos ms adelante con


mayor detalle, Nombre_clase es el nombre que le queramos dar a nuestra clase.
La declaracin en UML sera de la siguiente manera:

Nombre de la clase
Mtodos
Atributos

Ejemplo simple de una clase en Java:

public class Empleado {

//inicio de clase

//Declaracin de atributos
int codigo;
String nombre;
int horas;
double tarifa;
double sueldo;

//Declaracin de mtodos
String datosPersonales(){
return "Cdigo: "+codigo + "\nNombre: " +nombre; }

double calculaSueldo(){
return horas * tarifa;
}

//fin de clase

En UML se representara as:

Empleado
datosPersonales ():String
calculaSueldo ():double

codigo:int
nombre:String
horas:int
tarifa:double
sueldo:double

A continuacin, creamos un objeto de la clase anterior y manejamos sus atributos.

public class Objetos01 {

public static void main(String[ ] args) {

Empleado emp = new Empleado();


emp.nombre = "Luis";
System.out.println("Nombre: "+ emp.nombre);

}
}

Sentencias Condicionales

Ejecutan un cdigo u otro en funcin de que se cumplan o no una determinada condicin.

If Else:
Este es su modo ms simple de empleo.

if(condicion) {

Grupo de sentencias

Condicin es un valor tipo boolean. El grupo de sentencias se ejecuta solo si la condicin


toma un valor true. En caso contrario se sigue ejecutando la aplicacin ignorando el grupo
de sentencias.

if(condicion) {

Grupo de sentencias

}
else{

Grupo2 de sentencias
}

En este segundo caso si condicin toma el valor true se ejecuta el primer grupo de
sentencias, en caso contrario se ejecuta Grupo2 de sentencias. En ambos casos se
contina ejecutando el resto del cdigo de la aplicacin.

En los casos anteriores hemos utilizado llaves { } para encerrar los grupos de sentencias a
ejecutar, pero de tratarse de una sola lnea de cdigo a ejecutar estas llaves pueden
obviarse, como vemos en el siguiente ejemplo:

public class Ejemplo_if_else {

public static void main(String[] args) {

int val1 = 2;
int val2 = 3;

if(val1 > val2)


System.out.println("val1 es mayor");
else if(val1 < val2)
System.out.println("val2 es mayor");
else
System.out.println("son iguales");

}
}

El resultado de ejecutar este cdigo ser un mensaje en consola diciendo: val2 es mayor.
Cambia los valores de val1 y val2, compila y vuelve a ejecutar para que veas otro resultado.

Switch:
La sentencia switch proporciona una forma limpia de dirigir la ejecucin a partes diferentes
del cdigo en base al valor de una variable o expresin. Esta es la forma general de esta
sentencia:

switch(selector) {

case valor1 : Grupo de sentencias1; break;


case valor2 : Grupo de sentencias2; break;
case valor3 : Grupo de sentencias3; break;
// ...
default: statement;
}

Se compara el valor de selector con sentencias_n. Si el valor coincide se ejecuta su


respectivo grupo de secuencias. Si no se encuentra ninguna coincidencia se ejecutan las
sentencias de default. Si no se pusieran los break una vez que se encontrase un valor que
coincida con el selector se ejecutaran todos los grupos de sentencias, incluida la del default.

En las condiciones de esta sentencia slo se admite la igualdad. Adems esta comparacin
de igualdad slo admite valores tipo char o cualquier tipo de valores enteros menos long.
No podemos comparar contra reales, strings, etc. Tambin se le podra criticar el hecho de
que una vez cumplida una condicin se ejecuten todas las otras sentencias si no hay
instrucciones break que lo impidan. Esto es en muchas ocasiones fuente de errores, aunque
tambin hay que reconocer que a veces se le puede sacar partido, de hecho en el ejemplo
que empleamos para ilustrar esta sentencia aprovechamos esta caracterstica:
public class Ejemplo_Switch{
public static void main(String[] args){
char c = 'b';
System.out.print(c + ": ");
switch(c){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
System.out.println("vocal");
break;
default:
System.out.println("consonante");
}
}
}

BUCLES

Son instrucciones que nos permiten repetir un bloque de cdigo mientras se cumpla una
determinada condicin. Pasemos a ver sus tipos.

While:
Ejecuta una sentencia repetidamente mientras una expresin booleana sea verdadera. Esta
es su forma general:

[ inicializacin; ]
while ( terminacin ) {

cuerpo;
[ iteracin; ]

Las partes inicializacin e iteracin son opcionales, y mientras la expresin terminacin


devuelva un valor true, la sentencia cuerpo continuar ejecutndose.
Ilustramos su funcionamiento con un ejemplo:

public class Ejemplo_While{

public static void main(String[] args) {

int r =10;
while(r > 0) {
System.out.println(r);
r = r -1; //r-=1;
}

Do-while:
La contruccin do-while se utiliza cuando se desea ejecutar el cuerpo de un bucle while al
menos una vez, incluso si la expresin booleana tiene el valor false la primera vez. Es decir
si se desea evaluar la expresin de terminacin al final del bucle en vez de al principio como
en el while.

[ inicializacin; ]
do {
cuerpo;
[ iteracin; ]
}while ( terminacin );

Obsrvese como en el siguiente ejemplo implementado mediante un bucle do while,


independientemente del valor de r ejecutar al menos una vez el cdigo de su cuerpo:
public class Ejemplo_Do_While{

public static void main(String[] args) {

int r =10;
do {
System.out.println(r);
r = r -1; //r-=1;
} while(r > 0);
}
}

For:
La sentencia for es una forma compacta de expresar un bucle.

for ( inicalizacin; terminacin; iteracin )


cuerpo;

for ( inicalizacin; terminacin; iteracin ) {


cuerpo de varias lneas;
}

Si las condiciones iniciales no provocan que la terminacin devuelva true la primera vez,
entonces la sentencia cuerpo e iteracin no se ejecutarn nunca. Ejemplo de un bucle for:

public class Ejemplo_For{

public static void main(String[] args) {

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


System.out.println( "i = " + i);

}
}

A continuacin implementaremos una GUI (interfaz grfica de usuario) para nuestra clase
Empleado. Para esto utilizaremos el paquete AWT que contiene los componentes
necesarios para dicha implementacin y otras clases que iremos viendo a lo largo del curso.
Lo primero que debemos hacer es crear un proyecto nuevo, luego digitar el siguiente cdigo
en el Applet:
import java.awt.*;
import java.applet.*;

public class Objetos02_GUI extends Applet {

Button btnMostrar;

TextArea txtResultado;

public void init() {

btnMostrar = new Button("Mostrar");


txtResultado = new TextArea();

add(btnMostrar);
add(txtResultado);

}
}

Compilen y ejecuten. El resultado debe ser el siguiente:

Primero realicemos un ejemplo simple para probar la interaccin con un botn:

import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class Objetos02_GUI extends Applet implements


ActionListener{

Button btnMostrar;
TextArea txtResultado;

public void init() {

btnMostrar = new Button("Mostrar");


btnMostrar.addActionListener(this);

txtResultado = new TextArea();


add(btnMostrar);
add(txtResultado);
}
public void actionPerformed(ActionEvent e){
txtResultado.setText("Hola");
}

El texto que estamos aumentando est resaltado con negrita. El resultado debe ser similar
a la pantalla anterior pero con el texto Hola impreso en el TextArea al presionar el botn.
Ahora utilicemos nuestra clase Empleado para mostrar los atributos de una de sus
instancias en el TextArea, lo haremos digitando el siguiente cdigo en el mtodo
actionPerformed:
public void actionPerformed(ActionEvent e){

Empleado objEmple = new Empleado();

//Le damos valores a los atributos del objeto


objEmple.codigo = 1234;
objEmple.nombre = "Juan Pablo";
objEmple.horas = 90;
objEmple.tarifa = 12;

//Mostramos en pantalla los datos del objeto


txtResultado.setText("Cdigo: "+
objEmple.codigo);
txtResultado.append("\nNombre: "+
objEmple.nombre);
txtResultado.append("\nHoras: "+
objEmple.horas);
txtResultado.append("\nTarifa: "+
objEmple.tarifa);

//hacemos uso de uno de sus mtodos


txtResultado.append("\nSueldo: "+
objEmple.calculaSueldo());
}

El resultado de compilar y ejecutar el Applet:

Sesin

2
Herencia y Polimorfismo

Variables
La variable es la unidad bsica de almacenamiento en un programa en Java. Una variable
se define mediante la combinacin de un identificador, un tipo y un mbito.
Declaracin y mbito de una Variable
Un tipo define una expresin o variable de manera que se puede predecir su
comportamiento. Esta seccin trata los tipos principales de Java, mostrando cmo
declarar variables, asignar valores y combinar tipos en expresiones.

Declaracin de una variable


La forma bsica de una declaracin de variable es:

tipo identificador [ = valor ] ;

El tipo puede ser: byte, short, int, long, char, float, double, boolean o el nombre de
una clase (en este caso se le llama objeto o instancia de clase).
mbito de una variable
Los bloques de sentencias compuestas en Java se delimitan con dos llaves { }. Las
variables de Java slo son vlidas desde el punto donde estn declaradas hasta el
final de la sentencia compuesta que la engloba. Se pueden anidar estas sentencias
compuestas y cada una puede contener su propio conjunto de declaraciones de
variables locales. Sin embargo, no se puede declarar una variable con el mismo
nombre que una de un mbito superior.

Mtodos
Declaracin de mtodos
En Java toda la lgica de programacin (Algoritmos) est agrupada en funciones o
mtodos.
Un mtodo es:

Un bloque de cdigo que tiene un nombre,


Recibe unos parmetros o argumentos (opcionalmente),

Contiene sentencias o instrucciones para realizar algo (opcionalmente)


Devuelve un valor de algn tipo conocido (opcionalmente).
La sintaxis global es:
Tipo_Valor_devuelto nombreMtodo ( lista_argumentos ) {
bloque_de_codigo;
}
Y la lista de argumentos se expresa declarando el tipo y nombre de los mismos
(como en las declaraciones de variables). Si hay ms de uno se separan por comas.

Por ejemplo:
int sumaEnteros ( int a, int b ) {
int c = a + b;
return c;
}

El mtodo se llama sumaEnteros.


Recibe dos parmetros tambin enteros. Sus nombres son a y b.
Devuelve un entero.
En el ejemplo la clusula return se usa para finalizar el mtodo devolviendo el valor
de la variable c.
El trmino void
El hecho de que un mtodo devuelva o no un valor es opcional. En caso de que
devuelva un valor se declara el tipo que devuelve. De lo contrario se utiliza la palabra
reservada void para indicar que el mtodo no retornar ningn valor.
Por ejemplo:

Void haceAlgo() {
...
}

Cuando no se devuelve ningn valor, la clasula return no es necesaria. Obsrvese


que en el ejemplo el mtodo haceAlgo tampoco recibe ningn parmetro. No
obstante los parntesis, son obligatorios.
Uso de mtodos

Los mtodos se invocan con su nombre, y pasando la lista de argumentos entre


parntesis. El conjunto se usa como si fuera una variable del Tipo devuelto por el
mtodo. Por ejemplo:

int x;
x = sumaEnteros(2,3);

Por ejemplo para llamar a la funcin haceAlgo, simplemente se pondra:


haceAlgo();

Obsrvese que como la funcin tampoco devuelve ningn valor no se asigna a


ninguna variable. (No hay nada que asignar).

CONSTRUCTORES:
Cuando se crea un objeto (se instancia una clase) es posible definir un proceso de
inicializacin que prepare el objeto para ser usado. Esta inicializacin se lleva a
cabo invocando un mtodo especial denominado constructor. Esta invocacin es
implcita y se realiza automticamente cuando se utiliza el operador new. Los
constructores tienen algunas caractersticas especiales:

El nombre del constructor tiene que ser igual al de la clase.


Puede recibir cualquier nmero de argumentos de cualquier tipo, como
cualquier otro mtodo.
No devuelve ningn valor (en su declaracin no se declara ni siquiera
void).
El constructor no es un miembro ms de una clase. Slo es invocado cuando se
crea el objeto (con el operador new). No puede invocarse explcitamente en ningn
otro momento.

class Punto{
int x , y;

Punto(int a, int b){ //mtodo constructor.


x=a;
y=b;
}
}

class Principal{
public static void main(String args[]){
int a=10, b=20;
Punto p=new Punto(a,b);
System.out.println(objeto creado);
System.out.println(p.x+ +p.y);
}
}

HERENCIA:

Relaciona clases una encima de otra de una manera jerrquica. Esto permite que
una clase herede todas las variables y mtodos de sus ascendientes, adems de
crear los suyos propios. Para heredar una clase hay que utilizar la palabra clave
extends.

class NombreClase extends NombreSuperclase{


Cuerpo;
}

EJEMPLO: Partiendo de los ejemplos anteriores vamos a crear una jerarqua de


clases.

class Punto{
int x , y;
Punto(int a, int b){
x=a;
y=b;
}
}

class Punto2 extends Punto{


int z;
Punto2(int a, int b, int c)
super(a,b);

//est llamando al mtodo constructor


// de la clase Punto.

z=c;
}
}

class Principal{
public static void main(String args[]){
int a=10, b=20,c=30;
Punto2 p=new Punto2(a,b,c);

System.out.println(objeto creado);
System.out.println(p.x+ +p.y+ +p.z);
}
}

La sentencia super lo que hace es llamar al constructor de la superclase (clase de


la que heredamos). En la funcin principal es donde se crea el objeto que llama al
miembro constructor, al cual hay que pasar 3 valores (uno para la clase Punto2 y
dos para la clase Punto).

SOBRECARGA:

Se utiliza para crear ms de un mtodo con el mismo nombre, pero con distinto
nmero de parmetros y operaciones distintas. La sobrecarga se puede utilizar para
miembros constructores o de otro tipo.

EJEMPLO:

class Punto{
int x,y;
Punto(int a, int b){ //Un mtodo constructor
x=a;
y=b;
}
Punto( ){

//Otro mtodo constructor

x=-1;
y=-1;
}
}

class principal{
public static void main(String args[]){
//Aqu se aplica polimorfismo.
Punto p=new Punto();
//Aqu se aplica polimorfismo.
Punto p2=new Punto(10,20);
System.out.println(p.x+ +p.y);
System.out.println(p2.x+ +p2.y);
}
}

POLIMORFISMO:
A los mtodos que actan sobre los objetos se les pasa informacin. Estos
parmetros representan los valores de entrada a una funcin. El Polimorfismo
significa que un mtodo tenga mltiples implementaciones que se seleccionan en
base a que tipo de objeto se le pasa.

Creando una clase que Herede mtodos de otra.


Vamos a desarrollar la clase Conversiones por lo tanto, crear el paquete
paquete01.
Una vez creada su clase debe crear mtodos para esta clase:
Crear entonces el mtodo double aReal(String s)

Poner el siguiente cdigo para este mtodo:

public double aReal(String s){


return Double.valueOf(s).doubleValue();
}

As mismo crear los siguientes mtodos para esta clase:

public String aCadena(double d){


return String.valueOf(d);
}

public String aCadena(int i){


return String.valueOf(i);
}

Nota: Los mtodos siempre deben empezaran con letra minscula y las
clases con letra mayscula.

Ahora debemos crear la clase Operaciones extendida de la clase Conversiones,


esto har que los mtodos de Conversiones sean heredados a la nueva clase
Operaciones

En esta nueva clase crear los mtodos suma, resta, multiplica y divide.

Como sigue:

Creando una interfaz grfica de una calculadora.

Tenemos las clases Operaciones extendida de la clase Conversiones. En la clase


Operaciones tenemos cuatro mtodos propios (sumar, restar, multiplicar y dividir)
ms los mtodos de la clase Conversiones por la extensin.

Ahora vamos a desarrollar un applet que utilice la clase Operaciones, para eso
tiene que seguir los siguientes pasos:

Ingrese el siguiente cdigo en el Applet Calculadora.


Ahora que ya tiene el cdigo de la interfaz grafica del Applet, agregue las lneas en
la cabecera de su cdigo:

Luego implemente el siguiente cdigo en el mtodo init

Importe el paquete correspondiente e instancia el objeto correspondiente.

Agregue el siguiente cdigo en el mtodo actionPerformed ():

Prubelo presionando la tecla de funcin F5 o en el Browser de Internet:

Siga el mismo procedimiento y desarrolle lo necesario para los botones resta,


multiplica y divide.

Ejercicio 1. Ahora intente crear un botn para elevar el primer valor al segundo
valor, usando mtodos de la clase Math.

Ejercicio 2. Genere un mtodo recursivo que permita generar el factorial del primer
valor.

Ejercicio 3. Genere los botones correspondientes para hallar las funciones


trigonomtricas del ngulo ingresado en el valor 1.

Ejercicio 4. Genere un mtodo que permita generar el la raz cbica de un nmero.