Está en la página 1de 74

Java : Clases y Objetos

CAPITULO V
OOP CON JAVA
Los temas que se desarrollan en este capitulo son: 1. Fundamentos de OOP 2. Clases y Objetos 3. Variables Miembro Variables de Clase Variables de Instancia 4. Mtodos Mtodos de Clase Mtodos de Instancia Constructores Creacin de Objetos Paquetes Herencia Polimorfismo

Java : Clases y Objetos

FUNDAMENTOS DE OOP
Como es sabido, la Programacin Estructurada se caracteriza por la representacin de acciones a realizar mediante el uso de los algoritmos, los cuales a su vez se implementan en bloques a los cuales se les aplican las estructuras de control adecuadas y se obtienen los programas. La Programacin Orientada a Objetos (OOP), combina las mejores tcnicas de la Programacin Estructurada con nuevos conceptos de Organizacin, permitiendo descomponer un programa en grupos relacionados entre si, Cada subgrupo pasa a ser un objeto autocontenido con sus propias instrucciones y datos. A diferencia de la Programacin Estructurada que exige el diseo del algoritmo y la estructura de datos adecuada, en OOP se describen primero la entidades implicadas en el programa, siendo la clave de esta encontrar caractersticas comunes entre entidades y crear estructuras de datos (Objetos) que encapsulen esas caractersticas. Las tres principales caractersticas de los lenguajes orientados a objetos son: Encapsulacin, Herencia y Polimorfismo.

Encapsulamiento :
Se define el encapsulamiento como la capacidad de envoltura y proteccin alrededor del cdigo y los datos que se manipulan. Esta envoltura define el comportamiento y protege el cdigo y los datos para evitar que otro cdigo acceda a ellos de manera arbitraria. En Java el nivel de encapsulamiento por defecto es el paquete, siendo la clase la unidad mnima de encapsulamiento.

Herencia :
2

Java : Clases y Objetos

Es una propiedad que permite que un objeto herede propiedades y caracterstica de otra clase de objetos, existiendo una relacin de jerarqua. Es decir a partir de una clase que contiene los atributos generales (super clase), se definen otras con atributos ms especficos (sub clase). Documentos

Factura

Boleta

Gua

Gua de Remisin

Polimorfismo :
Es una propiedad que permite que un objeto tenga un comportamiento distinto en funcin a una realidad. Es decir un objeto reaccionar o responder de una manera diferente ante diversas realidades.

Java : Clases y Objetos

CLASES EN JAVA
Una clase es una agrupacin de datos (atributos) y de funciones (mtodos) que operan sobre esos datos. La clases es el centro de la Programacin Orientada a Objetos. Definicin de una clase. [public] class NombreClase{ definicin de atributos y mtodos } El modificador de visibilidad public, es opcional, si no se especifica significa que la visibilidad de la clase es por defecto, es decir que la clase solo ser visible o accesible por las dems clases que se encuentran dentro del paquete. Todos los atributos y mtodos de la clase, deben ser implementados dentro de los {}, que indican el inicio y fin de la clase. Se recomienda que la primera letra del nombre de la clase siempre sea una mayscula.

Java : Clases y Objetos

Ejemplo: Definir una clase Triangulo, con sus atributos base y altura y un mtodo que calcule el rea. public class Triangulo{ double base=0; double altura=0; double area(){ return base*altura/2; } }

Java : Clases y Objetos

Variables Miembro
A diferencia de la Programacin Estructurada o nivel de algoritmos que se centraba en las funciones, la Programacin Orientada a Objetos se centra en los datos.

Funciones Miembro (Mtodos)


Los mtodos en Programacin Orientada a Objetos son el equivalente a las funciones en la Programacin Convecional, los mtodos definen el comportamiento de la clase.

Variables de Instancia
Cada instancia o cada objeto (cada ejemplar concreto de la clase) contiene su propia copia de variables miembro, conservando cada una de estas variables su propio valor para cada objeto en particular. Es as que cada objeto o instancia creada a partir de la clase Triangulo contendr su propia copia de la variables base y altura conservando para cada objeto o instancia su propio valor en particular. Las variables miembro de una clase (tambin llamadas atributos), pueden ser de cualquier tipo primitivo de java (int, double, char, etc) o de cualquier tipo compuesto (referencias a objetos de otra clase), siendo muy importante para el correcto funcionamiento de los programas que estas sean correctamente inicializadas. Declaracin de una Variable Miembro de Instancia tipoDeDato NombreVariable = ValorInicial; Declaracin de Variables Miembro de Instancia (Atributos) de la Clase Alumno. 6

Java : Clases y Objetos

public class Alumno{ int codigo=0; // variable de tipo primitivo int String nombre=0; //variable de tipo compuesto String String direccion=; //variable de tipo compuesto String char sexo= ; // variable de tipo primitivo char int edad=0; // variable de tipo primitivo int }

Mtodos de Instancia
Los Mtodos de Instancia o de Objeto, son funciones que definen el comportamiento de dicho objeto y tienen visibilidad directa a las variables miembro del objeto. Estructura general de un Mtodo

Parmetros o Argumentos Mtodo Retorno

Java : Clases y Objetos

Declaracin de Mtodos de Instancia

tipoDatoDeRetorno nombreMetodo( [listaDeParmetros] ){ cuerpoDelMtodo [return varlorDeRetorno;] }

Como podemos apreciar en la declaracin del mtodo, la lista de Parmetros es opcional, es decir que no todos los mtodos necesitan de parmetros para poder ejecutar la funcin para la cual son implementados. Al igual que no todos los mtodos tienen un valor de retorno. Cuando el mtodo no devuelve valores, el tipoDeDatoRetorno es void.

Java : Clases y Objetos

Declaracin de un Mtodo de Instancia con parmetros y con Retorno

tipoDatoDeRetorno nombreMetodo( listaDeParmetros ){ cuerpoDelMtodo return varlorDeRetorno; }

Ejemplo: double areaTriangulo(double base, double altura){ double area=0; area=base*altura/2; return area; }

Este mtodo calcula y devuelve el rea de un tringulo. Para calcular el rea del tringulo se requiere conocer los valores de la base y la altura los cuales son pasados como parmetros al mtodo (double base, double altura), conocidos estos valores se procede a calcular el rea, la cual lo almacenamos en una variable area previamente declarada double area=0; una vez calculado el valor del rea y almacenado en la variable correspondiente, este es devuelto por el mtodo return area; Debe tener en cuenta que el valor devuelto (area), debe ser del mismo tipo que el valorDeRetorno del mtodo.

Java : Clases y Objetos

Declaracin de un Mtodo de Instancia con parmetros y sin Retorno

void nombreMetodo( listaDeParmetros ){ cuerpoDelMtodo }

Ejemplo: void areaTriangulo(double base, double altura){ double area=0; area=base*altura/2; System.out.println(area); }

Este mtodo calcula y muestra el rea de un tringulo. Para calcular el rea del tringulo se requiere conocer los valores de la base y la altura los cuales son pasados como parmetros al mtodo (double base, double altura), conocidos estos valores se procede a calcular el rea, la cual lo almacenamos en una variable area previamente declarada double area=0 una vez calculado el valor del rea, este se muestra en la consola System.out.println(area). Como este mtodo no tiene retorno, observamos que es del tipo void.

Declaracin de un Mtodo de Instancia sin parmetros y con Retorno 10

Java : Clases y Objetos

tipoDatoDeRetorno nombreMetodo( ){ cuerpoDelMtodo return varlorDeRetorno; }

Ejemplo: double numeroAleatorio(){ double num=0; num=Math.random()*10; return num; } Este mtodo devuelve un nmero aleatorio comprendido entre 0 y 10, para lo cual hace uso del mtodo random() de la clase Math, el cual devuelve un nmero aleatorio comprendido entre 0 y 1 el cual al multiplicarse por 10 genera un numero entre 0 y 10, el cual es almacenado en la variable num previamente declarada y luego es devuelto return num.

Declaracin de un Mtodo de Instancia sin parmetros y sin Retorno 11

Java : Clases y Objetos

void nombreMetodo( ){ cuerpoDelMtodo }

Ejemplo: void mostrarSaludo(){ System.out.println("Hola Desde Java..."); }

Este mtodo muestra el mensaje Hola Desde Java en la consola.

Para acceder a las Variables Miembro de Instancia y a las Funciones Miembro de Instancia (Mtodos de Instancia), se debe hacer siempre a travs de un objeto o instancia, es decir primero se debe instanciar o crear un objeto de una determinada clase y luego acceder a sus atributos y mtodos a travs del objeto creado.

12

Java : Clases y Objetos

Constructores
Son mtodos especiales cuya funcin es crear objetos a partir de la clase reservando memoria e iniciando las variables miembro de la clase. Una clase puede implementar ms de un constructor y estos slo pueden ser llamados dentro de esta por otros constructores haciendo uso de la palabra this. Dentro de este contexto la palabra this debe aparecer siempre como la primera sentencia de cdigo. Adems un constructor puede hacer referencia a un constructor de su super clase, haciendo uso de la palabra super. Un constructor siempre tendr el mismo nombre de la clase que lo implementa. Definicin de un Constructor

class NombreClase{ NombreClase(){ //Mtodo Constructor } }

13

Java : Clases y Objetos

Ejemplo class Circulo{ double radio=0; Circulo(){ super(); } Circulo(double r){ radio=r; } } //Mtodo Constructor

//Mtodo Constructor

Creacin de Objetos
Un objeto es una instancia particular de una clase. Para crear un objeto se hace uso del operador new y del constructor de la clase de la cual deriva el objeto. Sintaxis para crear un Objeto

NombreClase NombreObjeto = new NombreConstructor();

14

Java : Clases y Objetos

Creacin de Objetos de la Clase Circulo, previamente implementada.

Circulo C1 = new Circulo(); Circulo C2 = new Circulo(5); Circulo C3 = new Circulo(10);

Hemos creado tres objetos C1,C2 y C3 que son instancias particulares de la clase Circulo. Estos objetos han sido creados haciendo uso de sus constructores y cada uno de ellos conserva una copia de las variables miembro de la clase Circulo (radio). El Crculo C1 ha sido creado haciendo uso del primer constructor, y como este no implementa ningn cdigo solo reserva memoria para el objeto e inicializa las variables miembro (radio=0). Los Crculos C2 y C3 ha sido creados haciendo uso del segundo constructor, y como este implementa un cdigo, adems de reservar memoria para los objetos e inicializar las variables miembro (radio=0), luego se asigna un valor en particular para la variable radio. (radio=5 para C2) y (radio=10 para C3) Como la variable miembro radio es una Variable de Instancia, cada objeto en particular contiene una copia de esta variable, almacenando valores particulares para cada objeto en particular.

15

Java : Clases y Objetos

La Clase Circulo

radio=0

Objetos de la Clase Circulo

C1 radio=0

C2 radio=5

C3 radio=10

Resumen del Proceso de Creacin de Objetos Cada vez que se crea un nuevo Objeto: Se reserva la memoria necesaria Se da valor por defecto a las variable miembro de tipo primitivo. Se ejecutan los inicializadotes del objeto. Se ejecutan los constructores

16

Java : Clases y Objetos

Accediendo a las Variables Miembro de Instancia y Funciones Miembro de Instancia de una Clase.
Para acceder a las Variables Miembro de Instancia y a las Funciones Miembro de Instancia (Mtodos de Instancia), se debe hacer siempre a travs de un objeto o instancia, es decir primero se debe instanciar o crear un objeto de una determinada clase y luego acceder a sus atributos y mtodos a travs del objeto creado. Objeto.variableMiembro Objeto.fucinMiembro()

Ejemplo 01. Implementar una Clase llamada Triangulo_01, que permita calcular el rea y el permetro de un tringulo en funcin de su base y su altura.

public class Triangulo_01 { //Inicio de la Clase double base=0; //variable miembro base double altura=0; //variable miembro altura public Triangulo() { super(); } double area(){ double area=0; area=this.base*this.altura/2; return area; } 17

Java : Clases y Objetos

public static void main(java.lang.String[] args) { //Creamos el Objeto T1 de la Clase Triangulo_01 Triangulo_01 T1=new Triangulo_01 (); //Le asignamos valores para la base y la altura de T1 T1.base=5; T1.altura=10; //Mostramos los valores de la base, la altura y el rea de T1 System.out.println("Tringulo T1"); System.out.println("======================="); System.out.println("Base\t:\t"+T1.base); System.out.println("Altura\t:\t"+T1.altura); System.out.println("Area\t:\t"+T1.area()); System.out.println("\n======================="); System.out.println("Aplicacin Finalizada..."); } }//Fin de la Clase

Ejecucin.

Tringulo T1 ======================= Base : 5.0 Altura : 10.0 Area : 25.0 ======================= Aplicacin Finalizada...

18

Java : Clases y Objetos

Ejemplo 02. Implementar una Clase llamada Triangulo_02, que permita calcular el rea y el permetro de un tringulo en funcin de su base y su altura, implementando un segundo constructor el cual permita crear objetos asignando directamente la base y la altura.

public class Triangulo_02 { //Inicio de la Clase double base=0; //variable miembro base double altura=0; //variable miembro altura public Triangulo_02() { //Constructor 01 super(); } public Triangulo_02(double b,double h) { //Constructor 02 this.base=b; //Asignamos el valor de b al atributo base this.altura=h; //Asignamos el valor de h al atributo altura } public static void main(java.lang.String[] args) { double //Creamos el Objeto T1 de la y devuelve el valor del rea area(){ //mtodo que calcula clase Triangulo_02, //utilizando el segundo constructor a travs del cual le double area=0; //asignamos directamente el valor de la base y la altura area=this.base*this.altura/2; Triangulo_02 T1=new Triangulo_02(5,10); return area; } //Mostramos los valores de la base, la altura y el rea de T1 System.out.println("Tringulo T1"); System.out.println("======================="); System.out.println("Base\t:\t"+T1.base); System.out.println("Altura\t:\t"+T1.altura); System.out.println("Area\t:\t"+T1.area()); System.out.println("\n======================="); System.out.println("Aplicacin Finalizada..."); } }// Fin de la Clase 19

Java : Clases y Objetos

Ejecucin.

Tringulo T1 ======================= Base : 5.0 Altura : 10.0 Area : 25.0 ======================= Aplicacin Finalizada...

Ejemplo 03. 20

Java : Clases y Objetos

La Clase Tringulo anterior, con un poco ms de orientacin a objetos.

public class Triangulo_03 { //Inicio de la Clase double base=0; //variable miembro base double altura=0; //variable miembro altura double area=0; //variable miembro la base del objeto que se cree //Mtodo que devuelve el valor de area double obtenerBase(){ public Triangulo_03() { return this.base; super(); } } //Mtodo que devuelve el valor de la altura del objeto que se cree //Mtodo que asigna un valor para la altura del objeto que se cree double obtenerAltura(){ void registrarBase(double b){ return this.altura; this.base=b; } } //Mtodo que devuelve el valor del rea del objeto que se cree //Mtodo que asigna un valor para la base del objeto que se cree double obtenerArea(){ void registrarAltura(double h){ return this.area; this.altura=h; } } public static void main(java.lang.String[] args) { //Mtodo que calcula el rea del objeto que se cree y lo almacena //en el atributo area Objeto T1 de la clase Triangulo_03 //Creamos el void calcularArea(){ T1=new Triangulo_03(); Triangulo_03 this.area=this.base*this.altura/2; } //Asignamos los valores de la base y la altura para T1, //utilizando los mtodos implementados registrarBase y //registrarAltura T1.registrarBase(5); T1.registrarAltura(10); //Calculamos el valor del rea, utilizando el mtodo //calcularArea T1.calcularArea(); 21

Java : Clases y Objetos

//Mostramos los valores de la base, la altura y el rea de T1 System.out.println("Tringulo T1"); System.out.println("======================="); System.out.println("Base\t:\t"+T1.obtenerBase()); System.out.println("Altura\t:\t"+T1.obtenerAltura()); System.out.println("Area\t:\t"+T1.obtenerArea()); System.out.println("\n======================="); System.out.println("Aplicacin Finalizada..."); } }//Fin de la Clase 22

Java : Clases y Objetos

Ejecucin. Tringulo T1 ======================= Base : 5.0 Altura : 10.0 Area : 25.0 ======================= Aplicacin Finalizada...

Para los casos anteriores, tanto las variables miembro(atributos), como las funciones miembro (mtodos), se han implementado en la misma clase en 23

Java : Clases y Objetos

donde se han instanciado los objetos T1, sin embargo lo ms correcto sera que la clase implementada para que a partir de ella se creen los objetos, debera contener nicamente los atributos y mtodos del objeto, y los objetos se puedan crear o instanciar desde cualquier otra clase, tal y conforme se muestra en el siguiente ejemplo. Ejemplo 04. //Mtodo que asigna un valor para la altura del objeto que se cree Implementamos una Clase llamada Triangulo_04, la cual servir para void registrarBase(double b){ instanciar objetos (crear objetos Triangulo) a partir de ella, ms no ser una this.base=b; clase que se pueda ejecutar, razn por la cual no le implementamos un } mtodo main. //Mtodo que asigna un valor para la base del objeto que se cree void registrarAltura(double h){ this.altura=h; } public class Triangulo_04 { //Inicio de la Clase //Mtodo que calcula el rea del objeto double base=0; //variable miembro base que se cree y lo almacena //en el altura=0; //variable miembro altura doubleatributo area void calcularArea(){ double area=0; //variable miembro area this.area=this.base*this.altura/2; } public Triangulo_04() { //Constructor 1 super(); //Mtodo que devuelve el valor de la base del objeto que se cree } double obtenerBase(){ return this.base; public Triangulo_04(double b, double h) { //Constructor 2 } this.base=b; this.altura=h; //Mtodo que devuelve el valor de la altura del objeto que se cree } double obtenerAltura(){ return this.altura; } //Mtodo que devuelve el valor del rea del objeto que se cree double obtenerArea(){ return this.area; } 24 } // Fin de la Clase

Java : Clases y Objetos

public class CrearTriangulos_01 { //Inicio de la Clase public CrearTriangulos_01() { super(); } public static void main(java.lang.String[] args) { //Creamos el Objeto T1 de la clase Triangulo_04, //utilizando el primer constructor Triangulo_04 T1 = new Triangulo_04(); //Asignamos los valores de la base y la altura para T1, //utilizando los mtodos implementados registrarBase y //registrarAltura T1.registrarBase(5); T1.registrarAltura(10); //Calculamos el valor del rea de T1, utilizando el mtodo //calcularArea T1.calcularArea(); //Mostramos los valores de la base, la altura y el rea de T1 System.out.println("Tringulo T1"); Ahora implementamos una clase principal (ejecutable, con un mtodo System.out.println("======================="); main), para en System.out.println("Base\t:\t" + T1.obtenerBase()); ella instanciar (crear) objetos de la Clase no ejecutable System.out.println("Altura\t:\t" + T1.obtenerAltura()); 25 System.out.println("Area\t:\t" + T1.obtenerArea());

Java : Clases y Objetos

Triangulo_04.

//Creamos el Objeto T2 de la clase Triangulo_04, //utilizando el segundo constructor el cual ya asigna los //valores para los atributos base y altura Triangulo_04 T2 = new Triangulo_04(4,8); //Calculamos el valor del rea de T2, utilizando el mtodo calcularArea T2.calcularArea(); //Mostramos los valores de la base, la altura y el rea de T2 System.out.println("\nTringulo T2"); System.out.println("======================="); System.out.println("Base\t:\t" + T2.obtenerBase()); System.out.println("Altura\t:\t" + T2.obtenerAltura()); System.out.println("Area\t:\t" + T2.obtenerArea()); System.out.println("\n======================="); System.out.println("Aplicacin Finalizada..."); } 26 }// Fin de la Clase

Java : Clases y Objetos

Tringulo T1 ======================= Base : 5.0 Altura : 10.0 Area : 25.0 Tringulo T2 Ejecucin. ======================= Base : 4.0 Altura : 8.0 Area : 16.0 ======================= Aplicacin Finalizada... 27

Java : Clases y Objetos

Ejemplo 5. Implementar una Aplicacin Java que permita calcular el rea y el permetro de un tringulo en funcin de sus lados, los cuales sern ledos desde el teclado. Verificar que los valores ledos para los lados puedan formar el tringulo. En todo tringulo, la suma de dos lados cualesquiera, siempre es menor al tercer lado. Siendo a,b y c los lados :
area = s ( s a )( s b)( s c )

s=

a +b +c 2

Solucin. Implementamos una clase llamada Triangulo_05

28

Java : Clases y Objetos

public class Triangulo_05 { public Triangulo_05() { super(); } }

Esta clase implementa por defecto un Constructor sin parmetros. Para nuestro caso en particular le implementamos otro constructor con tres parmetros del tipo double, los cuales permitirn asignar los valores para los lados del tringulo.

public Triangulo_05(double a, double b, double c) { //Asignamos los valores de a , b y c a los lados del tringulo this.lado1=a; this.lado2=b; this.lado3=c; }

Implementamos los mtodos para asignar los valores a cada uno de los lados del tringulo, para el caso que se utilice el constructor por defecto para crear los objetos. 29

Java : Clases y Objetos

void registrarLado(int nLado, double vLado){ switch(nLado){ case 1: this.lado1=vLado;break; case 2: this.lado2=vLado;break; case 3: this.lado3=vLado;break; default : { mostrarMensaje("\nError...\nNmero de Lado Incorrecto"); System.exit(0); } } }

Este mtodo necesita de dos parmetros que indican el nmero de Lado del Tringulo (nLado) y el valor que tomar este lado (vLado). Implementamos un mtodo con estas caractersticas para no tener que crear tres mtodos iguales para asignar el valor a cada uno de los lados del tringulo. Utilizando el mtodo anterior, para asignarle un valor a un lado del tringulo lo haramos de la siguiente forma: Objeto.registrarLado(2,5.6) Donde, el primer parmetro 2, indica que el valor asignado como segundo parmetro 5.6, se asignar al segundo lado del tringulo. Una vez que hemos implementado el mtodo para registrar los lados del tringulo, procedemos a implementar un mtodo que permita verificar si los lados registrados pueden formar o no un tringulo.

30

Java : Clases y Objetos

El mtodo a implementar devolver un valor verdadero (true) para el caso en que los valores registrados para los lados formen un tringulo y falso (false) cuando no lo formen, por lo tanto el mtodo devolver un valor del tipo boolean.

boolean esTriangulo(){ boolean xRet=false; double a=this.lado1; double b=this.lado2; double c=this.lado3; if(a+b>c && a+c>b && b+c>a){ xRet=true; } return xRet; }

En este mtodo, capturamos los valores de los lados lado1, lado2 y lado3 en las variables a,b y c respectivamente y luego preguntamos si estos valores cumplen con la condicin para formar un tringulo y se ser as, asignamos el valor true a la variable de retorno xRet previamente declarada, de no ser as, esta variable xRet se queda con su valor de inicio false, indicando que los valores no corresponden a los de un tringulo. Luego este valor es devuelto. Una vez que tenemos el mtodo que verifica si los lados registrados forman o no un tringulo, implementamos los mtodos para calcular el permetro y el rea del tringulo. void calcularPerimetro(){ double a=this.lado1; double b=this.lado2; double c=this.lado3; this.perimetro=a+b+c; }

31

Java : Clases y Objetos

void calcularArea(){ if (this.esTriangulo() = = true){ this.calcularPerimetro(); double s=this.perimetro/2; double a=this.lado1; double b=this.lado2; double c=this.lado3; this.area=Math.sqrt(s*(s-a)*(s-b)*(s-c)); }else{ mostrarMensaje("Los Valores Ingresados para los Lados\nNo Corresponden a los de un Tringulo"); System.exit(0); //Finaliza la aplicacin } } Para calcular el rea del tringulo en funcin de sus lados, primero verificamos si los lados registrados corresponden o no a los lados de un tringulo y para ello hacemos uso del mtodo esTriangulo previamente implementado y si este devuelve un valor verdadero (true), entonces procedemos a calcular el permetro del tringulo utilizando el mtodo calcularPerimetro antes implementado ya que la frmula calcula el rea en funcin de los lados y el semipermetro (s=this.perimetro/2;) . Para obtener la raz cuadrada, utilizamos el mtodo sqrt de la clase Math. Puede apreciarse que para hacer referencia a las variables miembro de instancia (lado1, lado2, lado3, area y perimetro) as como a las funciones miembro de instancia o mtodos de instancia (esTriangulo y calcularPerimetro), no es necesario primero crear un objeto y luego 32

Java : Clases y Objetos

utilizarlas a travs de l, sino que se hacen referencia directa a travs de la palabra this (opcional para este caso). Esto es posible puesto que estas variables y mtodos estn siendo referenciadas desde por otros mtodos que se encuentran en la misma clase, no podra ser as si el mtodo que lo invoca es un mtodo que pertenece a una clase distinta. Finalmente procedemos a implementar los mtodos para devolver los valores de los lados del tringulo as como su rea y su permetro.

double obtenerLado(int nLado){ double vLado=0; switch(nLado){ case 1: vLado=this.lado1;break; case 2: vLado=this.lado2;break; case 3: vLado=this.lado3;break; default : { mostrarMensaje("\nError...\nNmero de Lado Incorrecto"); System.exit(0); //Finaliza la aplicacin } } return vLado; }

Este mtodo requiere el parmetro entero nLado para poder determinar el lado a devolver. double obtenerArea(){ return this.area; } double obtenerPerimetro(){ return this.perimetro; } 33

Java : Clases y Objetos

void registrarLado(int nLado,double vLado){ El Cdigo Completo switch(nLado){ case 1: this.lado1=vLado;break; public class Triangulo_05 { //Inicio de la Clase case 2: this.lado2=vLado;break; case 3: this.lado3=vLado;break; double lado1=0; default : { double lado2=0; mostrarMensaje("\nError...\nNmero de double lado3=0; Lado Incorrecto"); double area=0; System.exit(0); double perimetro=0; } } public Triangulo_05() { } super(); } boolean esTriangulo(){ boolean xRet=false; public Triangulo_05(double a, double b, double c) { double a=this.lado1; this.lado1=a; double b=this.lado2; this.lado2=b; double c=this.lado3; this.lado3=c; a+c>b && b+c>a){ if(a+b>c && } xRet=true; } return xRet; } void calcularPerimetro(){ double a=this.lado1; double b=this.lado2; double c=this.lado3; this.perimetro=a+b+c; } 34

Java : Clases y Objetos

void calcularArea(){ if (this.esTriangulo()){ this.calcularPerimetro(); double s=this.perimetro/2; double a=this.lado1; double b=this.lado2; double c=this.lado3; this.area=Math.sqrt(s*(s-a)*(s-b)*(s-c)); }else{ mostrarMensaje("Los Valores Ingresados para los Lados\nNo Corresponden a los de un Tringulo"); System.exit(0); } } double obtenerLado(int nLado){ double vLado=0; switch(nLado){ case 1: vLado=this.lado1;break; case 2: vLado=this.lado2;break; case 3: vLado=this.lado3;break; default : { mostrarMensaje("\nError...\nNmero de Lado Incorrecto"); System.exit(0); } } return vLado; } double obtenerArea(){ return this.area; } 35

Java : Clases y Objetos

double obtenerPerimetro(){ return this.perimetro; } void mostrarMensaje(String strMsg){ System.out.print(strMsg); } } //Fin de la Clase 36

Java : Clases y Objetos

public static void main(java.lang.String[] args) { //Creamos el Objeto Teclado BufferedReader Teclado=new BufferedReader(new InputStreamReader(System.in)); Ahora implementamos una clase principal (ejecutable, con un mtodo double a=0; main), para en ella instanciar (crear) objetos de la Clase no ejecutable Triangulo_05 double b=0; double c=0; Como en esta clase hacemos uso del teclado para el ingreso de los lados del System.out.println("Tringulo T1"); tringulo, requerimos utilizar la Clase BufferedReader e InputStreamReader System.out.println("======================="); las cuales se encuentran en el paquete java.io, razn por la cual importamos este paquete. try{ //Leemos los Lados desde el Objeto Teclado y los almacenamos en las variables a,b y c. System.out.print("Ingrese Primer Lado\t\t:\t"); a=Double.valueOf(Teclado.readLine()).doubleValue(); import java.io.*; //Importamos el paquete java.io System.out.print("Ingrese Segundo Lado\t:\t"); public class CrearTriangulos_02 { b=Double.valueOf(Teclado.readLine()).doubleValue(); System.out.print("Ingrese Tercer Lado\t\t:\t"); public CrearTriangulos_02() { c=Double.valueOf(Teclado.readLine()).doubleValue(); super(); } //Creamos el Objeto T1 de la clase Triangulo_05, //utilizando el primer constructor Triangulo_05 T1 = new Triangulo_05(); //Asignamos los valores a cada uno de los lados del //tringulo, utilizando el mtodo registrarLado T1.registrarLado(1,a); T1.registrarLado(2,b); T1.registrarLado(3,c); //Calculamos el valor del rea, utilizando el mtodo 37 //calcularArea T1.calcularArea();

Java : Clases y Objetos

//Mostramos los valores de los lados, el rea y el //permetro de T1 System.out.println("\nResultados"); System.out.println("======================="); System.out.println("Lado 1\t\t:\t" + T1.obtenerLado(1)); System.out.println("Lado 2\t\t:\t" + T1.obtenerLado(2)); System.out.println("Lado 3\t\t:\t" + T1.obtenerLado(3)); System.out.println("Area\t\t:\t" + T1.obtenerArea()); System.out.println("Permetro\t:\t" + T1.obtenerPerimetro()); }catch(IOException e){ System.err.println("Error al Leer los Datos adesde el Teclado\n"+e.getMessage()); }catch(NumberFormatException e){ System.err.println("Error de Formato del Dato\n" +e.getMessage()); } System.out.println("\n======================="); System.out.println("Aplicacin Finalizada..."); } }//Fin de la Clase 38

Java : Clases y Objetos

Ejecucin 01. Tringulo T1 ======================= Ingrese Primer Lado : Ingrese Segundo Lado : Ingrese Tercer Lado :

4 6 12

Tringulo T1Ingresados para los Lados Los Valores ======================= No Corresponden a los de un Tringulo Ingrese Primer Lado : 3 Ingrese Segundo Lado : 4 Ingrese Tercer Lado : 5 Ejecucin 02. Resultados ======================= Lado 1 : 3.0 Lado 2 : 4.0 Lado 3 : 5.0 Area : 6.0 Permetro : 12.0 ======================= Aplicacin Finalizada... 39

Java : Clases y Objetos

40

Java : Clases y Objetos

Ejemplo 6. Implementar una Aplicacin Java que permita simular una Cuenta Bancaria Bsica y permita realizar movimientos como: Aperturar Cuentas, hacer depsitos, hacer retiros y consultar saldos. Solucin: Implementamos una clase llamada Cuenta_01 y le definimos los atributos numero y saldo.

public class Cuenta_01 { String numero=""; double saldo=0; public Cuenta_01() { super(); } }

Implementamos un nuevo Constructor para crear los Objetos Cuenta asignndole un Nmero de Cuenta y un Saldo Inicial de la Cuenta.

public Cuenta_01(String xNumero, double xSaldo) { this.numero=xNumero; this.saldo=xSaldo; }

41

Java : Clases y Objetos

Ahora le implementamos los mtodos que permitan registrar los depsitos y los retiros de la cuenta, as como un mtodo que permita obtener el saldo actual de la cuenta. Para el case de un depsito, el nuevo saldo ser igual al saldo actual ms el monto del depsito void deposito(double xMonto){ this.saldo+=xMonto; }

Para el case de un retiro, el nuevo saldo ser igual al saldo actual menos el monto del retiro; pero no se podr retirar una cantidad mayor al saldo actual de la cuenta.

void retiro(double xMonto){ if(xMonto<=this.saldo){ this.saldo-=xMonto; }else{ System.out.println("Cantidad no Disponible"); } } Mtodo que devuelve el saldo actual de la cuenta double obtenerSaldo(){ return this.saldo; }

42

Java : Clases y Objetos

Cdigo Completo: public class Cuenta_01 { // Inicio de la Clase String numero=""; double saldo=0; public Cuenta_01() { super(); } public Cuenta_01(String xNumero,double xSaldo) { this.numero=xNumero; this.saldo=xSaldo; } void deposito(double xMonto){ this.saldo+=xMonto; } double obtenerSaldo(){ return this.saldo; } void retiro(double xMonto){ if(xMonto<=this.saldo){ this.saldo-=xMonto; }else{ System.out.println("Cantidad no Disponible"); } } } // Fin de la Clase

43

Java : Clases y Objetos

Ahora implementamos una clase principal (ejecutable, con un mtodo main), para en ella instanciar (crear) objetos de la Clase no ejecutable Cuenta_01 Como en esta clase hacemos uso del teclado para el ingreso de datos, utilizamos la Clase BufferedReader e InputStreamReader del paquete java.io, razn por la cual importamos este paquete. import java.io.*; public class MovimientosCuentas { //Inicio de la Clase public MovimientosCuentas() { super(); } public static void main(java.lang.String[] args) { //Creamos el Objeto Teclado BufferedReader Teclado=new BufferedReader(new InputStreamReader(System.in)); //Declaramos las variables para almacenar el numero de //cuenta y el saldo de la cuenta, as como el monto del //depsito y el monto del retiro String nroCuenta=""; double saldoCuenta=0; double montoDeposito=0; double montoRetiro=0; try{ System.out.println("Movimientos Cuenta"); System.out.println("==================="); //Leemos losa datos necesarios desde el Teclado System.out.print("Nmero de Cuenta\t:\t"); nroCuenta=Teclado.readLine();

44

Java : Clases y Objetos

System.out.println("\nCuenta N "+nroCuenta); System.out.println("==================="); //Leemos el monto de apertura de la cuenta //desde el Teclado System.out.print("Monto de Apertura\t:\t"); saldoCuenta=Double.valueOf(Teclado.readLine()).doubleValue(); //Creamos una nueva Cuenta a partir de la Clase Cuenta_01 //y le asignamos el nmero y el saldo inicial de la cuenta Cuenta_01 Cta01=new Cuenta_01(nroCuenta,saldoCuenta); //Leemos el monto del depsito desde el Teclado System.out.print("Monto Depsito\t\t:\t");
montoDeposito=Double.valueOf(Teclado.readLine()).doubleValue();

//Asignamos el monto del depsito a la cuenta Cta01.deposito(montoDeposito); //Mostramos el saldo actual de la Cuenta System.out.println("Saldo Actual\t\t:\t"+Cta01.obtenerSaldo()); //Leemos el monto del retiro desde el Teclado System.out.print("Monto Retiro\t\t:\t");
montoRetiro=Double.valueOf(Teclado.readLine()).doubleValue();

//Asignamos el monto del retiro a la cuenta Cta01.retiro(montoRetiro); //Mostramos el saldo actual de la Cuenta System.out.println("Saldo Actual\t\t:\t"+Cta01.obtenerSaldo())

45

Java : Clases y Objetos

}catch(IOException e){ System.err.println("Error al Leer los Datos desde el Teclado\n"+e.getMessage()); }catch(NumberFormatException e){ System.err.println("Error de Formato del Dato\n" +e.getMessage()); } System.out.println("=============================="); System.out.print("Programa Finalizado..."); } } // Fin de la Clase Ejecucin 01.

Movimientos Cuenta ============================== Nmero de Cuenta : 04-015-274928 Cuenta N 04-015-274928 ============================== Monto de Apertura : 1000 Monto Depsito : 250 Saldo Actual : 1250.0 Monto Retiro : 750 Saldo Actual : 500.0 ============================== Programa Finalizado...

46

Java : Clases y Objetos

Ejecucin 02.

Movimientos Cuenta ============================== Nmero de Cuenta : 01-012-206235 Cuenta N 01-012-206235 ============================== Monto de Apertura : 1500 Monto Depsito : 500 Saldo Actual : 2000.0 Monto Retiro : 2250 Cantidad no Disponible Saldo Actual : 2000.0 ============================== Programa Finalizado...

47

Java : Clases y Objetos

Ejemplo 7. Implementar una Aplicacin Java que permita calcular la longitud de una lnea a partir de dos punto ledos desde el teclado. Cada punto consta de dos coordenadas (x,y). Solucin Matemtica Para una lnea cualesquiera: B(x,y) L

yB - yA

A (x,y)

xB - xA Por lo tanto, la longitud L de la lnea ser:

L=

( xB xA )

+ ( yB yA )

48

Java : Clases y Objetos

Solucin Java. Para obtener la longitud de una lnea, segn el problema planteado, requerimos el ingreso de dos puntos, cada uno de los cuales tiene dos coordenadas (x,y). Por lo tanto implementamos una clase llamada Punto con sus atributos coordenada X y coordenada Y.

public class Punto { int x=0; //Atributo para la coordenada X int y=0; //Atributo para la coordenada Y public Punto() { // Constructor por defecto super(); } }

Implementamos un segundo constructor con dos parmetros enteros de tal forma que podamos asignar las coordenadas x e y al crear un objeto de la clase Punto. corX = Coordenada x del punto. corY = Coordenada y del punto.

public Punto(int corX, int corY) { this.x=corX; this.y=corY; } 49

Java : Clases y Objetos

Luego implementamos la Clase Linea, cuyos atributos sern los puntos punto1 y punto2, que son objetos de la clase Punto previamente implementada. public class Linea { //Declaracin e inicializacin de las variables miembro o atributos //de la clase Linea, como punto1 y punto2 son variables del tipo //Objeto, estos se inicializan en null. Punto punto1=null; Punto punto2=null; public Linea() { super(); } }

Implementamos un segundo constructor con dos parmetros del tipo Punto, que permitan asignar los valores para los atributos punto1 y punto2 al crear un objeto de la Clase Linea.

public Linea(Punto P01, Punto P02) { this.punto1=P01; this.punto2=P02; }

50

Java : Clases y Objetos

Antes de implementar el mtodo para obtener la longitud de la lnea, implementamos un mtodo para verificar si los puntos ingresados corresponden a una lnea, ya que puede darse el caso que tanto el punto1 como el punto2 tengan las mismas coordenadas, en tal caso slo ser un punto no una Lnea. boolean esLinea(){ boolean xRet=true; if(punto1.x = = punto2.x && punto1.y = = punto2.y){ xRet=false; } return xRet; } Verificamos si las coordenadas x e y del punto1 son iguales a las coordenada x e y del punto2, en tal caso el mtodo devolver un valor false indicando que no es una lnea, en el caso contrario se devolver el valor true. Luego implementamos el mtodo para obtener la longitud de la lnea. double obtenerLongitud(){ double l=0; if(esLinea()==true){ l = Math.sqrt(Math.pow(punto2.x-punto1.x,2) + Math.pow(punto2.y-punto1.y,2)); }else{ System.out.println("No es una Lnea...Es un Punto"); System.exit(0); //Finaliza la Aplicacin } return l; }

51

Java : Clases y Objetos

Cdigo Completo : Clase Punto public class Punto { int x=0; int y=0; public Punto() { super(); } public Punto(int corX, int corY) { this.x=corX; this.y=corY; } }

Cdigo Completo : Clase Linea

public class Linea { Punto punto1=null; Punto punto2=null; public Linea() { super(); }

52

Java : Clases y Objetos

public Linea(Punto P01,Punto P02) { this.punto1=P01; this.punto2=P02; } boolean esLinea(){ boolean xRet=true; if(punto1.x==punto2.x && punto1.y==punto2.y){ xRet=false; } return xRet; } double obtenerLongitud(){ double l=0; if(esLinea()==true){ l=Math.sqrt(Math.pow(punto2.x-punto1.x,2) + Math.pow(punto2.y-punto1.y,2)); }else{ System.out.println("No es una Lnea...Es un Punto"); System.exit(0); } return l; } }

53

Java : Clases y Objetos

Ahora procedemos a implementar una clase principal (ejecutable, con un mtodo main), para en ella instanciar (crear) objetos de la Clase no ejecutable Linea. import java.io.*; public class LongitudLineas { } // Inicio de la Clase public LongitudLineas() { super(); } public static void main(java.lang.String[] args) { //Creamos el Objeto Teclado BufferedReader Teclado=new BufferedReader( new InputStreamReader(System.in)); int xPA=0; int yPA=0; int xPB=0; int yPB=0; try{ System.out.println("Lneas"); System.out.println("======================"); //Leemos las coordenadas del primer punto desde el //Objeto Teclado System.out.println("\nCoordenadas del Primer Punto : A(x,y)"); System.out.println("======================"); System.out.print("x\t=\t"); xPA=Integer.parseInt(Teclado.readLine()); System.out.print("y\t=\t"); yPA=Integer.parseInt(Teclado.readLine());

54

Java : Clases y Objetos

//Creamos el primer punto A de la Clase Punto con sus //respectivas coordenadas x e y. Punto A=new Punto(xPA,yPA); //Leemos las coordenadas del primer punto desde el //Objeto Teclado System.out.println("\nCoordenadas del Segundo Punto : B(x,y)"); System.out.println("======================"); System.out.print("x\t=\t"); xPB=Integer.parseInt(Teclado.readLine()); System.out.print("y\t=\t"); yPB=Integer.parseInt(Teclado.readLine()); //Creamos el primer punto A de la Clase Punto con sus //respectivas coordenadas x e y. Punto B=new Punto(xPB,yPB); //Creamos el Objeto L de la Clase Linea, con sus //respectivos puntos A y B Linea L=new Linea(A,B); //Mostramos la longitude de la lnea creada System.out.println("\nLongitud Lnea\t:\t" +L.obtenerLongitud()); }catch(IOException e){ System.err.println("Error al Leer los Datos desde el Teclado\n"+e.getMessage()); }catch(NumberFormatException e){ System.err.println("Error de Formato del Dato\n"+e.getMessage()); }

55

Java : Clases y Objetos

System.out.println("======================"); System.out.println("Programa Finalizado..."); } } // Fin de la Clase

Ejecucin 01. Lneas ======================================== Coordenadas del Primer Punto : A(x,y) ======================================== x = 5 y = 3 Coordenadas del Segundo Punto : B(x,y) ======================================== x = 9 y = 6 Longitud Lnea : 5.0 ======================================== Programa Finalizado...

56

Java : Clases y Objetos

Ejecucin 02. Lneas ======================================== Coordenadas del Primer Punto : A(x,y) ======================================== x = 5 y = 12 Coordenadas del Segundo Punto : B(x,y) ======================================== x = 5 y = 12 No es una Lnea...Es un Punto

57

Java : Clases y Objetos

Variables de Clase
A diferencia de las variables de Instancia, en donde cada instancia o cada objeto (cada ejemplar concreto de la clase) contiene su propia copia de variables miembro, conservando cada una de estas variables su propio valor para cada objeto en particular, las Variables de Clase o Static son propias de la Clase y no de un Objeto en particular. Estas variables se suelen utilizar para definir constantes comunes para todos los objetos de la clase, en donde para cada objeto instanciado de la clase, esta variable siempre mantendr el mismo valor. Las variables miembro de clase, pueden ser de cualquier tipo primitivo de java (int, double, char, etc) o de cualquier tipo compuesto (referencias a objetos de otra clase), siendo muy importante que estas sean correctamente inicializadas. Declaracin de una Variable Miembro de Clase

static tipoDeDato NombreVariable = ValorInicial;

Declaracin de Variables Miembro de Clase de la Clase Circulo.

public class Circulo{ static int numCirculos=0; // variable de tipo primitivo int static double pi=3.1416; //variable de tipo primitivo double }

58

Java : Clases y Objetos

Mtodos de Clase (static)


Los Mtodos de Clase o Estticos a diferencia de los Mtodos de Instancia no actan sobre objetos concretos a travs del operador punto y no tienen sentido como mtodos de objeto. Al declarar un mtodo como esttico o de clase, se evita que este acceda a las variables de instancia no estticas. Estructura general de un Mtodo

Parmetros o Argumentos Mtodo Retorno

Declaracin de Mtodos de Clase (static)

static tipoDatoDeRetorno nombreMetodo( [listaDeParmetros] ){ cuerpoDelMtodo [return varlorDeRetorno;] } La declaracin de los mtodos de Clase o Estticos tiene la misma sintaxis de declaracin que los mtodos de instancia solo que se le antepone el modificador static.

59

Java : Clases y Objetos

Declaracin de un Mtodo de Instancia con parmetros y con Retorno static tipoDatoDeRetorno nombreMetodo( listaDeParmetros ){ cuerpoDelMtodo return varlorDeRetorno; } Declaracin de un Mtodo de Instancia con parmetros y sin Retorno

static void nombreMetodo( listaDeParmetros ){ cuerpoDelMtodo }

Declaracin de un Mtodo de Instancia sin parmetros y con Retorno

static tipoDatoDeRetorno nombreMetodo( ){ cuerpoDelMtodo return varlorDeRetorno; }

Declaracin de un Mtodo de Instancia sin parmetros y sin Retorno static void nombreMetodo( ){ cuerpoDelMtodo }

60

Java : Clases y Objetos

Accediendo a las Variables Miembro static y Funciones Miembro static de una Clase.
Para acceder a las Variables Miembro de Clase o Estticas y a las Funciones Miembro de Clase (Mtodos Estticos), se suele utilizar el nombre de la clase en vez del nombre de un objeto de la clase. Clase.variableMiembro Clase.fucinMiembro() Los mtodos y las variables de clase son lo ms parecido que Java tiene a las variables y funciones globales de C++ o Visual Basic.

Ejemplo class Circulo{ double radio=0; //Variable de Instancia static int numCirculos=0; //Variable de Clase Circulo(){ //Mtodo Constructor super(); numCirculos++; } Circulo(double r){ //Mtodo Constructor radio=r; numCirculos++; } } Creacin de Objetos de la Clase Circulo, previamente implementada. 61

Java : Clases y Objetos

Circulo C1 = new Circulo(); Circulo C2 = new Circulo(5); Circulo C3 = new Circulo(10);

Hemos creado tres objetos C1,C2 y C3 que son instancias particulares de la clase Circulo. Estos objetos han sido creados haciendo uso de sus constructores y cada uno de ellos conserva una copia de las variables miembro de la clase Circulo (radio) y una referencia a la Variable de Clase (numCirculos). El Crculo C1 ha sido creado haciendo uso del primer constructor, el cual reserva memoria para el objeto e inicializa las variables miembro (radio=0) y luego incrementa el en uno el valor de la Variable de Clase numCirculos. (Para C1, numCirculos=1) Al crear el Crculo C2, se de reserva memoria para el objeto e inicializa la variable miembro (radio=0), luego se asigna un valor en particular para la variable radio. (radio=5) y se incrementa le valor de la Variable de Clase numCirculos que ahora toma el valor 2. Al crear el Crculo C3, se de reserva memoria para el objeto e inicializa la variable miembro (radio=0), luego se asigna un valor en particular para la variable radio. (radio=10) y se incrementa le valor de la Variable de Clase numCirculos que ahora toma el valor 3. Como la variable miembro numCirculos es una Variable de Clase, esta radio=0 conserva el mismo valor para cada uno de los objetos creados. Ahora la variable numCirculos tiene el valor 3, para cada uno de los objetos. numCirculos=3 Objetos de la La Clase Circulo Clase Circulo C1 radio=0 62 C2 radio=5 C3 radio=10

Java : Clases y Objetos

public Rectangulo() { super(); //Incrementamos el contador de Rectngulos cada vez //que se crea un objeto de esta clase numRectangulos++; } public Rectangulo(double b,double h) { this.base=b; //Asignamos los valores para la base Ejemplo 08 this.altura=h; //Asignamos los valores para la altura //Incrementamos el permita crear Objetos Rectngulo y Implementar una aplicacin que contador de Rectngulos cada vez //que vaya contando cuantos objetos mostrar su rea y que se crea un objeto de esta clase se van creando. numRectangulos++; } public class Rectangulo { // Inicio de la Clase void registrarBase(double b){ double this.base=b; base=0; //Variable de Instancia } double altura=0; //Variable de Instancia double area=0; //Variable de Instancia void registrarAltura(double h){ this.altura=h; static int numRectangulos=0; //Variable de Clase para contar el } // nmero de objetos creados void calcularArea(){ this.area=this.base*this.altura; } double obtenerBase(){ return this.base; }

63

Java : Clases y Objetos

double obtenerAltura(){ return this.altura; } double obtenerArea(){ return this.area; } } // Fin de la Clase

64

Java : Clases y Objetos

System.out.println("Base\t\t:\t"+R1.obtenerBase()); System.out.println("Altura\t\t:\t"+R1.obtenerAltura()); //Calculamos el rea de R1 R1.calcularArea(); Clase Principal (main) para crear Objetos de la Clase Rectngulo //Mostramos el Area de R1 System.out.println("Area\t\t:\t"+R1.obtenerArea()); //Mostramos la cantidad de Rectngulos creados public class CreaRectangulos { //Inicio de la Clase System.out.println("Rectngulos Creados\t:\t"+ Rectangulo.numRectangulos); public CreaRectangulos() { System.out.println("\nRectngulo 2"); super(); System.out.println("========================="); } //Creamos el Objeto R2 de la Clase Rectngulo //Utilizando en Constructor sin parmetros el cual public static void main(java.lang.String[] args) { //Inicia las variables de Instancia System.out.println("Rectngulos"); //e incrementa el contador de rectngulos numRectangulos System.out.println("========================="); Rectangulo R2=new Rectangulo(); System.out.println("\nRectngulo 1"); //Asignamos los valores para los atributos base System.out.println("========================="); //y altura de R2 R2.registrarBase(4); //Creamos el Objeto R1 de la Clase Rectngulo R2.registrarAltura(6); //Utilizando en Constructor con Parmetros System.out.println("Base\t\t:\t"+R2.obtenerBase()); //El cual asigna los valores para los atributos base y altura System.out.println("Altura\t\t:\t"+R2.obtenerAltura()); //e incrementael rea de R2de rectngulos numRectangulos //Calculamos el contador Rectangulo R1=new Rectangulo(5,8); R2.calcularArea(); //Mostramos el Area de R2 System.out.println("Area\t\t:\t"+R2.obtenerArea()); //Mostramos la cantidad de Rectngulos creados System.out.println("Rectngulos Creados\t:\t"+ Rectangulo.numRectangulos); System.out.println("\n========================"); System.out.println("Programa Finalizado..."); 65 } }//Fin de la Clase

Java : Clases y Objetos

Rectngulo 1 =========================== Base : 5.0 Altura : 8.0 Area : 40.0 Rectngulos Creados : 1 Rectngulo 2 =========================== Base : 4.0 Ejecucin Altura : 6.0 Area : 24.0 Rectngulos Creados : 2 =========================== 66 Programa Finalizado...

Java : Clases y Objetos

Si la variable de clase numRectangulos, se hubiera declarado como variable de instancia, al momento de crear cada objeto se hubiese creado una copia de esta variable para cada uno y se hubiese inicializado en 0, por lo tanto esta variable siempre tendra el valor de 1 y no contara el nmero de rectngulos que se van creando.

Ejemplo 09 Implementar una Aplicacin que permita mostrar el nmero de das correspondiente a un mes ingresado desde el teclado. (1 - 12). 67

Java : Clases y Objetos

Solucin Java Implementamos una Clase llamada DiasMes public class DiasMes {// Inicio de la Clase public DiasMes() { //Mtodo de clase para devolver el nmero de das super(); //correspondiente a un determinado mes (xMes) y un determinado } //ao (xAnio), ya que para los aos bisiestos febrero tiene 29 das //Mtodo de Clase para determiner si un ao es bisiesto o no static int diasMes(int es mltiplo de 4 pero no de 100 o //un ao es bisiesto si xMes,int xAnio){ int numDias=0; //es mltiplo de 100 y tambin de 400 switch(xMes){ static boolean esBisiesto(int xAnio){ case 1: boolean bisiesto=false; case 3: case = if((xAnio%45: = 0 && xAnio%100!= 0) || case 7: (xAnio%100 = = 0 && xAnio%400 = = 0)){ case 8: case 10: bisiesto=true; case 12:numDias=31;break; } case 4: case 6: return bisiesto; case 9: } case 11:numDias=30;break; case 2:{ if(esBisiesto(xAnio)){ numDias=29; }else{ numDias=28; } } break; } return numDias; } 68 }// Fin de la Clase

Java : Clases y Objetos

public class NumeroDiasMes { //Inicio de la Clase public NumeroDiasMes() { super(); } public static void main(java.lang.String[] args) { System.out.println("Programa Nmero Das Mes"); System.out.println("========================="); //Creamos el objeto Teclado BufferedReader Teclado=new BufferedReader(new InputStreamReader(System.in)); int numAnio=0; int numMes=0; //Leemos el nmero del mes desde el teclado (1<=mes<=12) try{ do{ System.out.print("Ao\t\t\t\t:\t"); numAnio=Integer.parseInt(Teclado.readLine()); System.out.print("Mes (1 - 12)\t:\t"); numMes=Integer.parseInt(Teclado.readLine()); Clase principal }while(numMes<1 ||numMes>12); (ejecutable) para utilizar los mtodos de la clase ya DiasMes ya implementada. //Mostramos el nmero de das del mes correspondiente //haciendo uso del mtodo de clase diasMes de la Clase DiasMes System.out.println("Nmero de Das\t:\t"+ DiasMes.diasMes(numMes,numAnio)); }catch(IOException e){ 69 System.err.println("Error al Leer los Datos desde el Teclado\n"+e.getMessage());

Java : Clases y Objetos

}catch(NumberFormatException e){ System.err.println("Error de Formato del Dato\n" + e.getMessage()); } System.out.println("\n============================="); System.out.println("Programa Finalizado..."); } }//Fin de la Clase 70

Java : Clases y Objetos

Ntese que para hacer referencia al mtodo distes(int,int), de la clase DiasMes, no es necesario instanciar o crear un objeto de esta clase, sino que se hace referencia directa utilizando el nombre de la Clase (DiasMes) , esto es posible puesto que diasMes(int,int) es un Mtodo de Clase (static). Ejecucin

Programa Nmero Das Mes ============================== Ao : 2004 Mes (1 - 12) : 2 Nmero de Das : 29 ============================== Programa Finalizado...

Paquetes Los paquetes son contenedores de clases e interfaces y tambin pueden contener a otros paquetes. Todas las clases contenidas en un paquete son clases amigas y pueden compartir variables y mtodos dentro de este mbito.

71

Java : Clases y Objetos

Todas las clases en java se encuentran agrupada en paquetes adems el usuario puede crear sus propios paquetes para agrupar sus propias clases relacionadas. Para que una clase forme parte de un paquete hay que incluir la sentencia package nombrepaquete; al inicio de la clase. Para utilizar un paquete o utilizar las clases incluidas en el, se debe importar el paquete utilizando la sentencia import nombrepaquete;. Cuando se importa un paquete, no se importan todas las clases del paquete sino nicamente las clases publicas, tampoco se importan los sub paquetes. Por ejemplo al importar el paquete java.awt, no se importa el paquete java.awt.event.

72

Java : Clases y Objetos

Herencia La Herencia es el mecanismo por el que se crean nuevas clases definidas en trminos de clases ya existentes. La herencia relaciona clases en modo jerrquico, esto permite que una clase herede todas la variables y mtodos de su clases superior adems de implementar sus propias clases y mtodos. Para indicar que una clase deriva de otra se utiliza la palabra extends.

[public] class NombreClase extends SuperClase{ definicin de atributos y mtodos } Java permite mltiples niveles de herencia pero no permite que una clase derive de varias, es decir no permite herencia mltiple. Ejemplo de Herencia public class Punto2D { int x=0; int y=0; public Punto2D() { super(); } public Punto2D(int corX, int corY) { super(); this.x=corX; this.y=corY; } } 73

Java : Clases y Objetos

Implementamos una clase Punto2D, que contiene dos variables de instancia que hacen referencia a las coordenadas x e y el punto. Luego le implementamos un constructor que permita construir un objeto de la Clase Punto2D asignando los valores para cada una de sus coordenadas. Luego implementamos una Clase llamada Punto3D, para construir objetos punto en tres dimensiones (x,y,z); pero como ya tenemos una Clase (Punto2D) que implementa un punto con dos coordenadas, a partir de esta clase derivamos la clase Punto3D la cual heredar las variables x e y de la Clase Superiror Punto2D y solo le implementamos la tercera coordenada z, adems de un constructor que construya objetos punto en tres dimensiones.

74

También podría gustarte