3 dic 2010

Un juego en Java

Para mi programa orientado a objetos "recicle" un programa que aun le faltan corregir errores de programación, que son notables cuando se juega y aveces los controles no responden a la orden.

El lenguaje de programación utilizado es Java, incluyo muchas librerías para que funcione bien, como las necesarias para crear ventanas, paneles, colocar archivos de imagen, para uso del teclado, uso de botones, y más.

Estaba pensado principalmente para que este programa se integrará a una aplicación cliente-servidor, pero me rendí hace tiempo porque me estresaba tanto que no hiciera lo que yo pensaba que haría, sin embargo, no lo dejaré así, espero y si hay tiempo suficiente para dedicarselo al programa, lo terminaría en estas vacaciones.

Es un juego de piedra, papel o tijera, pero ahora de forma gráfica.

Estas son capturas de la ventana creada para el juego.

Así se ve la ventana al inicio del juego.


Es posible seleccionar las opciones de piedra, papel o tijera, mediante los botones, o por el teclado con los números del 1 al 4, según se indica.


Como esta creado para que sea jugado por dos personas, es necesario ocultar la selección del primer jugador para que el segundo no haga trampa.


Cuando los dos jugadores están listos y ya seleccionaron su figura, el juego muestra quien es el ganador.


Esto es una captura del código en la parte de la clase principal, donde es creada la ventana.


No pego el código aquí porque es demasiado extenso y no será posible entenderlo así nada mas. Cuando lo tenga terminado si es posible les comparto el código para los interesados en crear algo parecido, aunque espero y no solo se lo vayan a copiar y cambiarle variables para entregarlo como suyo en trabajos posteriores.

Programación orientada a objetos

La programación orientada a objetos se hiso famoso a principios de los años 90s, es un paradigma de programación que utiliza objetos y sus interacciones para realizar aplicaciones, se basa en técnicas como herencia, abstracción, polimorfismo y encapsulamiento.

Origen

Los conceptos de programación orientada a objetos tienen sus orígenes en Simula 67 un lenguaje diseñado para hacer simulaciones, aunque más tarde estos conceptos fueron refinados en Smaltalk diseñado para ser un lenguaje dinámico en el cual los objetos se podían crear y modificar en tiempo de ejecución.

Fue a mediados de los años 80s cuando la programación orientada a objetos tomo una posición dominante en la programación, en gran parte gracias a C++, además por su característica de interfaces graficas de usuarios, en donde la programación orientada a objetos está muy bien adaptada.

¿Qué son los objetos?

Son entidades que se componen fundamentalmente de ESTADO(atributo), COMPORTAMIENTO(método) e IDENTIDAD.

Estado, el estado se compone de datos.

Comportamiento, se refiere principalmente a los métodos que tiene cada objeto, se puede decir que a las operaciones que se pueden hacer con él.

Identidad, se refiere a una propiedad del objeto que lo hace único, lo diferencia de los demás.

La comunicación entre los objetos se lleva a cabo mediante métodos, esta comunicación ayuda a cambiar el estado de los mismos objetos, esta característica es la que hace que los objetos sean indivisibles, es decir no se separa el estado y el comportamiento.

Los métodos y atributos están muy relacionados por la propiedad de conjunto, en esta propiedad se destaca que una clase necesita métodos para poder tratar los atributos que tiene.

Conceptos de POO

La programación orientada a objetos maneja conceptos muy diferentes a los demás lenguajes y es muy importante saber de que trata cada uno para entender la POO.

Clase: Es en donde se define las propiedades y comportamientos de los objetos.
Herencia: Por ejemplo se tiene una clase A y otra B en donde la clase A tiene definidos sus atributos y operaciones, la clase B puede utilizar estos mismos atributos y operaciones como si se hubieran declarado en ella, a esto es a lo que se le llama herencia.
Objeto: Es la entidad que se compone de atributos y comportamientos que reaccionan a eventos.
Método: Es lo que puede hacer un objeto, puede cambiar las propiedades del objeto o generar eventos.

Características de POO

Abstracción
Se refiere a las características y comportamientos de los objetos, por ejemplo al decir que tenemos una clase a la que llamamos perro, se pueden obtener características y comportamientos que podría tener cualquier perro por ejemplo patas, pelo, cola, y entre los comportamientos ladrar, morder, comer.

Encapsulamiento
Consiste en unir en la clase las variables y métodos, esto quiere decir tener todo en una sola entidad. La utilidad del encapsulamiento se debe a que facilita el uso de clases, es decir se puede utilizar alguna clase compleja, pero para usarla no necesitamos saber cómo es que lo hace sino más bien que lo haga, el encapsulamiento permite utilizar una clase sin saber cómo es que hace su función.

Ocultamiento
Ocultamiento es la capacidad de la clase para ocultar los detalles internos de la clase y mostrar solo los útiles para el sistema. Permite controlar y restringir el uso de la clase, controlar porque se pueden modificar los estados de la clase y restringir porque la clase tendrá cierto comportamiento al que otra clase no podrá entrar.

Polimorfismo
Esto quiere decir que se pueden tener diferentes objetos, con distintos comportamientos pero que comparten el mismo nombre.

Recolección de basura
Se refiere a que el programador no debe de preocuparse por asignar o liberar memoria ya que el entorno decidirá cuando se cree un objeto en asignar la memoria o cuando ya no se utiliza en liberarla.

Programa ejemplo en lenguaje JAVA, en el que se muestra la herencia:
public class Mamifero{
    private int patas;
    private String nombre;
    public void imprimirPatas(){
      JOptionPane.showMessageDialog(null," Tiene " + patas +
      "patas\n","Mamifero",JOptionPane.INFORMATION_MESSAGE);
    }
    public Mamifero(String nombre, int patas){
      this.nombre = nombre;
      this.patas = patas;
    }
  }
 
  public class Perro extends Mamifero {
    public Perro(String nombre){
      super(nombre, 4);
    }
  }
 
  public class Gato extends Mamifero {
    public Gato(String nombre){
      super(nombre, 4);
    }
  }
 
  public class CrearPerro {
    public static void main(String [] args) {
      Perro perrito = new Perro("Canelita");
      perrito.imprimirPatas();
    }
  }

UML

El modelamiento visual es muy importante en el análisis Orientado a objetos. El Lenguaje de Modelamiento Unificado (UML), tiene como fin modelar cualquier tipo de sistema utilizando los conceptos de orientación a objetos, este lenguaje es entendible para máquinas y humanos.

El UML tiene elementos y diagramas que permiten modelar los sistemas orientados a objetos, este modelamiento es flexible al cambio y es posible crear componentes plenamente reutilizables.
Racional Rose es uno de los programas más conocidos para este fin, también existe otro llamado Poseidon que permite su uso libremente.

Lenguajes orientados a objetos:

Java
PHP5
C++
Ruby
Pascal
Delphi
Python

Referencias: Ejemplo de herencia | Java | Programación orientada a objetos

Problema lógico

El problema lógico que elegí no lo pude resolver mediante algún programa lógico, pero aquí trataré de dar una explicación de la solución.

Elevador

"Un hombre trabaja en el piso 10 y siempre toma el ascensor hasta el nivel del suelo al final del día. Sin embargo, cada mañana, sólo toma el ascensor hasta el 7º piso y sube las escaleras hasta el piso 10, incluso cuando se tiene prisa."


Bueno, para empezar analicemos lo que nos dice la redacción.

Si el hombre trabaja en el piso 10, y cuando termina de trabajar baja por el elevador desde ese mismo piso 10 hasta la planta baja. Con esto sabemos que si existe elevador que llegue hasta el piso 10.

Lo extraño es que cuando él sube, solo llega hasta el piso 7, y de ahí sube por las escaleras.

Propondré razones por las que probablemente no pueda subir por el elevador a partir del piso 7.

1) Podría ser que los botones para los pisos 8, 9 y 10 no funcionen correctamente.

2) Tal vez el hombre tenga un problema psicológico y le tenga temor a presionar los botones del piso 8 en adelante. La verdad no creo.

3) El número 7 es el de la suerte y pese a lo que pese se baja en ese piso para tener suerte todo el día. Yo ni por tanta creencia haría eso.

4) Los botones de los pisos 8, 9 y 10, los pusieron tan arriba que nadie los alcanza.

5) Y junto con el anterior deducimos también que el problema podría estar en la estatura del hombre.

Como no había forma de saber la razón real por la que el hombre hace eso todos los días, no me quedó otra más que ver la respuesta del problema, la cual fue:

El hombre es de muy baja estatura, y solo alcanza hasta el piso 7.

Así de simple fue la respuesta.

Pero y si lo hubiera intentado crear en algún lenguaje lógico como prolog, tendría que haber incluido muchas expresiones de las cosas posibles y no posibles.

El hombre tendría que subir todos los días solo en el elevador, ya que si subiera con otra persona, podría pedir que presionen por el el botón del piso 10.
Contemplar que una persona bajita no alcanzará todos los botones, y una persona alta sí.

Y me puse a pensar en que hombre podrá ser tan pequeño que ni saltando alcance el piso 10, y encontré el probable hombre trabajador del piso 10.


Estoy casi seguro que es Mini-Me.

Enlace: Elevator

Basic

Basic es un lenguaje de programación creado para personas que apenas comienzan en el ambiente de la programación, no es del todo complicado, por lo tanto es muy sencillo realizar programas con una interfaz gráfica.

Para un programador esto no es correcto, pero como vamos empezando, usar de vez en cuando alguna plataforma para crear programas no esta tan mal, siempre y cuando no abusemos del uso de ellas.

En este caso podemos ver un convertidor de moneda en donde ingresamos la cantidad de pesos que se desean cambiar y al oprimir el botón de la moneda, al final tenemos el resultado de la conversión y un botón para borrar los campos anteriores.

La interfaz la realice en Gambas IDE, tan sencillo como lo es arrastrar botones y cajas de texto.

El código:

# Gambas Form File 2.0

{ Form Form
  MoveScaled(0,0,75,68)
  Background = &HBFFFFF&
  Text = ("")
  { Button2 Button
    MoveScaled(32,33,9,8)
    Background = &HFFAF5F&
    Text = ("Euros")
  }
  { Button3 Button
    MoveScaled(48,33,9,8)
    Background = &HFFAF5F&
    Text = ("Libras")
  }
  { Button5 Button
    MoveScaled(15,33,9,8)
    Background = &HFFAF5F&
    Text = ("Dolares")
  }
  { TextBox1 TextBox
    MoveScaled(17,12,36,7)
    Font = Font["+6"]
    Text = ("")
  }
  { Label1 Label
    MoveScaled(5,1,62,4)
    Font = Font["Bold,+6"]
    Text = ("Sistema para cambio de monedas")
  }
  { Label2 Label
    MoveScaled(11,7,49,5)
    Text = ("1) Introduce los pesos mexicanos que deseas cambiar ")
  }
  { Label3 Label
    MoveScaled(14,27,51,4)
    Text = ("2) Ahora selecciona el boton de preferencia")
  }
  { TextBox2 TextBox
    MoveScaled(15,50,43,8)
    Font = Font["+6"]
    Text = ("")
  }
  { Label4 Label
    MoveScaled(12,45,48,4)
    Text = ("3) Su cambio a la moneda seleccionada")
  }
  { Button1 Button
    MoveScaled(52,62,15,3)
    Text = ("Borrar")
  }
}


Y las imágenes que no pueden faltar. Son de la interfaz que nos permite crear estas aplicaciones, así como la aplicación en sí.





Enlace: Gambas