ACERCA DE MI

miércoles, 14 de enero de 2015

TUTORIAL GITHUB - AGUILAR_ARMAS_WANG

Herencia y Polimorfismo

Herencia y Polimorfismo
Grupo: Wang Tai Lin, Sandra Aguilar, Javier Armas

Mediante este ejemplo se quiere lograr explicar el uso de la herencia y polimorfismo en Java.

Primeramente creamos un proyecto, luego se crean dos paquetes:

  • Figura
  • Interfaces
Primeramente vamos a crear una clase abstracta del cual otras clases heredan de éste, a esta clase le denominaremos Figura.

package Figura;

public abstract class Figura {
protected String nombre;

public Figura(String nombre) {
this.nombre = nombre;
}

public Figura() {
;
}

public abstract double area();

public abstract double perimetro();

public void imprimir() {
System.out.println(this.nombre);

}

public String getNombre() {
return nombre;
}

public String toString() {
return nombre;
}
}


Ahora en el  paquete Interfaces vamos a crear una clase que va a ser la interfaz, le denominaremos Dibujable.

package interfaces;

import java.awt.Graphics;

public interface Dibujable {
    public void setPosicion(double x, double y);
    public void dibujar(Graphics dw);
}

Ya luego de que tengamos nuestra clase abstracta y nuestra interfaz, vamos a crear algunas clases que van a tener las variables y diferentes comportamientos.

En el paquete Figura crearemos una clase llamado Circulo, del cual va a heredar de la clase Figura, para poder emplear el polimorfismo, es necesario existir una relación de herencia. En este caso, los métodos perimetro() y area() son comunes en todas las figuras, pero tienen diferente comportamiento.

Se debe tener en cuenta el modificador de acceso protected para que las subclases puedan tener acceso directo a estos atributos.

Se debe tener en cuenta que al tener una relación de herencia, no se heredan los constructores, por lo que debemos emplear la palabra clave super para llamar al constructor de la superclase.

package Figura;

public class Circulo extends Figura {
protected double radio;
public double x, y;

public Circulo(String nombre, double radio) {
super(nombre);
this.radio = radio;
}

public Circulo(double x, double y, double r) {
super();
nombre = "Circulo";
this.x = x;
this.y = y;
this.radio = r;

}

public double area() {
return Math.PI * radio * radio;
}

public double perimetro() {
return 2 * Math.PI * radio;
}

public double getRadio() {
return radio;
}

public void setRadio(double radio) {
this.radio = radio;
}

public void imprimir() {
System.out.println(this.nombre);
System.out.println("Area: " + area());
System.out.println("Perimetro: " + perimetro());
}

public String toString() {
return nombre;
}
}


La siguiente clase que crearemos va a ser Rectangulo y también estará dentro del paquete Figura


package Figura;

public class Rectangulo extends Figura {
protected double lado1;
protected double lado2;

public Rectangulo(String nombre, double lado1, double lado2) {
super(nombre);
this.lado1 = lado1;
this.lado2 = lado2;
}

public Rectangulo(double lado1, double lado2) {
super();
this.nombre = "Rectangulo";
this.lado1 = lado1;
{
this.lado2 = lado2;
}
}

public double area() {
return lado1 * lado2;
}

public double perimetro() {
return 2 * lado1 + 2 * lado2;
}


public String toString() {
return nombre;
}

public void imprimir() {
System.out.println(this.nombre);
System.out.println("Area: " + area());
System.out.println("Perimetro: " + perimetro());
}
}


Ahora creamos otra clase llamado Cuadrado que también va a estar dentro del paquete Figura

package Figura;

public class Cuadrado extends Figura {
protected double lado;

public Cuadrado(String nombre, double lado) {
super(nombre);
this.lado = lado;
}

public Cuadrado(double lado) {
super();
this.nombre = "Cuadrado";
this.lado = lado;
}

public double area() {
return lado * lado;
}

public double perimetro() {
return 4 * lado;
}

public String toString() {
return nombre;
}

public void imprimir() {
System.out.println(this.nombre);
System.out.println("Area: " + area());
System.out.println("Perimetro: " + perimetro());
}
}


Ahora crearemos una clase que se llama PanelDibujo, la cual va a contener información relacionado a la creación de las figuras (dibujo de las mismas).


package Figura;

import interfaces.*;

import java.awt.*;
import java.util.ArrayList;
import java.util.Iterator;
import interfaces.*;

public class PanelDibujo extends Panel {
// variable miembro
private ArrayList v;

// constructor
public PanelDibujo(ArrayList va) {
super(new FlowLayout());
this.v = va;
}

// redefinicion del metodo paint()
public void paint(Graphics g) {
Dibujable dib;
Iterator it;
it = v.iterator();
while (it.hasNext()) {
dib = (Dibujable) it.next();
dib.dibujar(g);
}
}
}// Fin de la clase PanelDibujo

Ahora crearemos la clase VentanaCerrable, la cual va a implementar los métodos que vayamos a usar para poder manipular la ventana, hereda de la clase Frame e implementa la interfaz WindowListener.


package Figura;

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

public class VentanaCerrable extends Frame implements WindowListener {
public VentanaCerrable() {
super();
setSize(500, 500);
addWindowListener(this);
}

@Override
public void windowActivated(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowClosed(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowDeactivated(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowDeiconified(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowIconified(WindowEvent e) {
// TODO Auto-generated method stub

}

@Override
public void windowOpened(WindowEvent e) {
// TODO Auto-generated method stub

}

}
Después de haber creado estas clases vamos a pasar a utilizar clases que nos ayudarán a dibujar las figuras, crearemos tres clases que heredaran de Circulo, Rectangulo y Cuadrado y van a implementar la interfaz Dibujable.

Comenzamos creando la clase RectanguloGraficola cual permitirá dibujar Rectangulos.

package Figura;

import java.awt.Graphics;
import java.awt.Color;
import interfaces.*;

public class RectanguloGrafico extends Rectangulo implements Dibujable {
Color color; //variable color va a contener todos los colores para cuando vayamos a graficar0
//Constructor
public RectanguloGrafico(double lado1, double lado2, Color unColor) {
// llamada al constructor de Rectangulo
super(lado1, lado2);
this.color = unColor; 

}

public void dibujar(Graphics dw) {
dw.setColor(color);

dw.drawRect(100, 100, (int) (lado1 * 10), (int) (lado2 * 10)); /*necesariamente deben ser enteros los argumentos, los primeros dos argumentos son la posicion x y y, y los otros dos son ancho y alto. */

}

public void setPosicion(double x, double y) {
;// metodo vacio, pero necesario de definir
}

}

Crearemos la clase CirculoGrafico, la cual nos permitira dibujar circulos.

package Figura;

import java.awt.Graphics;
import java.awt.Color;
import interfaces.*;

public class CirculoGrafico extends Circulo implements Dibujable {
// Se heredan las variables y metodos de la clase Circulo

Color color;

// constructor
public CirculoGrafico(double x, double y, double r, Color unColor) {
// llamada al constructor de Circulo
super(x, y, r);
this.color = unColor;
}

// metodos de la interface Dibujable
public void dibujar(Graphics dw) {
dw.setColor(color);
dw.drawOval((int) (x - radio), (int) (y - radio), (int) (radio),
(int) (radio));
}

public void setPosicion(double x, double y) {
;
}
}// fin de la clase CirculoGrafico


Luego crearemos la clase CuadradoGrafico, la cual nos permitirá dibujar cuadrados.

package Figura;

import java.awt.Graphics;
import java.awt.Color;

import interfaces.*;

public class CuadradoGrafico extends Cuadrado implements Dibujable {
Color color;

public CuadradoGrafico(double lado, Color unColor) {
// llamada al constructor de Rectangulo
super(lado);
this.color = unColor; // en este caso this es opcional

}

public void dibujar(Graphics dw) {
dw.setColor(color);
dw.drawRect(150, 150, (int) lado * 10, (int) lado * 10);

}

public void setPosicion(double x, double y) {
;// metodo vacio, pero necesario de definir
}

}

Ahora vamos a crear una Clase que contenga todas las figuras que vayamos a agregar, y también para que me despliegue el area y el perimetro en pantalla, a esta clase le denominaremos Pantalla.

Aquí se puede observar el polimorfismo, debido a que las firma de los metodos area perimetro no varían, pero la forma de realizarlo se hace de una manera diferente dependiendo que tipo de figura es, esto hace que no renundemos el código y se hace más fácil el mantenimiento de éste.

package Figura;

import java.util.ArrayList;
import java.util.Scanner;

public class Pantalla {
ArrayList<Figura> listaFiguras;

public Pantalla(){
listaFiguras= new ArrayList<Figura>();

}
public void agregarFiguras(Figura newFig){
listaFiguras.add(newFig);

}

public void imprimirFiguras(){
for(Figura eachFigura: listaFiguras){

eachFigura.imprimir();
System.out.println("\n");
}

}

public void filtro(){
double perimetroMin,perimetroMax;
Scanner mySca= new Scanner(System.in);
System.out.println("Ingrese perimetro minimo:");
perimetroMin=mySca.nextDouble();
System.out.println("Ingrese perimetro maximo:");
perimetroMax=mySca.nextDouble();

for(Figura eachFig:listaFiguras){
if(eachFig.perimetro()<perimetroMax){
if(eachFig.perimetro()>perimetroMin){
eachFig.imprimir();

}


}

}
}

}

Y bueno entonces creamos nuestra clase principal, la cual ejecuta la aplicación y nos mostrará el entrono gráfico de la misma, le llamaremos App. Esta clase posee el metodo main la que inicia la aplicación.

package Figura;

import java.util.ArrayList;
import java.util.Scanner;
import java.awt.*;

public class App {

public static void main(String[] args) {

int op1, op2, op5, op6, x, y;
double radio, lado, ladoRect1, ladoRect2;
Pantalla pant = new Pantalla();
Scanner myScanner = new Scanner(System.in);
VentanaCerrable ventana = new VentanaCerrable();
ArrayList v = new ArrayList();

do {
System.out.println("*******Menu*********");
System.out
.println("1. Ingresar nueva Figura\n2. Imprimir Lista\n3. Dibujar\n4. Salir");
System.out.println("Seleccione opcion:");
op1 = myScanner.nextInt();
switch (op1) {
case 1:
System.out.println("1. Circulo\n2. Cuadrado\n3.Rectangulo\n");
System.out.println("Seleccione Figura a ingresar:");
op2 = myScanner.nextInt();
switch (op2) {
case 1:
// circulo
System.out.println("Ingrese el radio del circulo:");
radio = myScanner.nextDouble();
System.out
.println("Ingrese la posicion x y y respectivamente:");
x = myScanner.nextInt();
y = myScanner.nextInt();
Circulo cir1 = new Circulo(x, y, radio);
pant.agregarFiguras(cir1);
CirculoGrafico cg1 = new CirculoGrafico(200, 200,
radio * 10, Color.red);
v.add(cg1);
break;
case 2:
// cuadrado
System.out.println("Ingrese el lado del cuadrado:");
lado = myScanner.nextDouble();
Cuadrado cuadra1 = new Cuadrado(lado);
pant.agregarFiguras(cuadra1);
CuadradoGrafico cuag1 = new CuadradoGrafico(lado,
Color.blue);
v.add(cuag1);
break;
case 3:
System.out.println("Ingrese el lado1 del rectangulo:");
ladoRect1 = myScanner.nextDouble();
System.out.println("Ingrese el lado2 del rectangulo:");
ladoRect2 = myScanner.nextDouble();
Rectangulo rect1 = new Rectangulo(ladoRect1, ladoRect2);
pant.agregarFiguras(rect1);
RectanguloGrafico rectan1 = new RectanguloGrafico(
ladoRect1, ladoRect2, Color.green);
v.add(rectan1);
break;
}
break;
// inicio de la 2da opcion del menu: imprimir Lista de figuras
case 2:
pant.imprimirFiguras();
break;
case 3:
// Dibujar();
PanelDibujo mipanel = new PanelDibujo(v);
ventana.add(mipanel);
ventana.setSize(500, 400);
ventana.setVisible(true);

break;
case 4:
return;
default:
System.out.println("Opcion invalida! seleccione otro!");

}

} while (op1 != 4);

}

}

Al ejecutar el programa nos sale:

*******Menu*********
1. Ingresar nueva Figura
2. Imprimir Lista
3. Dibujar
4. Salir
Seleccione opcion:

Si seleccionamos la opción 1. nos aparecerá:

1. Circulo
2. Cuadrado
3.Rectangulo

Seleccione Figura a ingresar:

ahi seleccionamos cualquier opcion e ingresamos los valores q nos pida:



Despues ingresamos un cuadrado y un rectangulo:


Al seleccionar la opción 2 del menú imprimir lista, nos aparece:

Circulo
Area: 28.274333882308138
Perimetro: 18.84955592153876


Cuadrado
Area: 16.0
Perimetro: 16.0


Rectangulo
Area: 28.0
Perimetro: 22.0

Al seleccionar la opción 3 del menú nos grafica las figuras .

sábado, 4 de octubre de 2014




¿Qué es un .jar en Java? 


.jar (Java ARchives)  es un formato de archivo para agregar los archivos .class con las librerías necesarias para ser ejecutados en un solo archivo. En pocas palabras es un archivo recopilación de otros archivos, un "paquete".
La gran ventaja de este formato es que garantiza la portabilidad de acuerdo al principio que sigue Java "write once, run anywhere", con lo cual podemos ejecutar aplicaciones creadas en Windows,  Mac, Linux, etc en otras plataformas solo es necesario la maquina virtual de Java
 (JVM) que esta sí es diseñada para cada sistema operativo.



¿Cómo crear un .jar en el IDE Eclipse? 




  • Luego de crear nuestra aplicación vamos a nuestro proyecto y hacemos click derecho sobre él.



  • Se nos desplegara un menú y damos click en EXPORT o exportar.



  • Luego se abrirá una ventana y escogemos JAVA, luego JAR FILE y Next.

  • Dejamos como esta la parte superior y en la parte que dice JAR file podemos navegar en donde guardar nuestro archivo. Luego ponemos siguiente.

  • Aparecerá una pagina y la dejamos tal como esta y damos click en siguiente

  • Se nos despliega otra ventana y navegamos en la parte de Main Class. Seleccionamos la clase principal de nuestra aplicación (en mi caso CalculadoraGravedad). Y ponemos OK

  • Para finalizar damos click en Finish.

martes, 30 de septiembre de 2014


A MODO DE INTRODUCCIÓN

Martes 30 de octubre del 2014


Con el presente blog, emprendo una sección para publicar las experiencias al utilizar JAVA en la materia de PROGRAMACIÓN ORIENTADA A OBJETOS :)

Aquí voy a compartirles aplicaciones con su respectiva documentación y observaciones que se realicen a lo largo del semestre que curso.

Mi expectativa es adquirir la mayor cantidad de conocimientos en la materia para así ofrecerles un material de apoyo.