miércoles, 13 de julio de 2011

Diagrama de Secuencia

Un diagrama de secuencia es el diagrama que muestra las interacciones entre las clases u objetos definidos en un programa. 
A continuacion les mostrare un ejemplo de diagramas de secuencia de mi proyecto.

Para la siguiente demostracion utilizare la funcion que sirve para reproducir un sonido al momento de presionar una tecla


Primeramente al momento de presionar una tecla el Piano la ubica. Despues le pide que se reproduzca y dicha tecla reproduce el sonido deseado.


En mi segundo diagrama se puede ver la funcion que sirve para mostrar la partitura que el usuario desee tocar en el piano.
Primeramente el piano debe pedirle a la partitura que se muestre y despues de que la partitura recibio esa orden se va a mostrar en el piano.


Para este diagrama se muestra como la tecla se va a sombrear de un color al momento de estar presionada. Primeramente el piano debe ubicar cual es la tecla que esta presionada y pedirle que se sombree. Al momento de recibir la orden de sombrearse la tecla se sombreara en el piano.

REFERENCIAS

lunes, 11 de julio de 2011

Herencia y Polimorfismo


Herencia
Una herencia es el mecanismo que nos permite compartir características(metodos y atributos) similares entre las clases. Es donde una clase padre hereda características a la clase hija (pueden ser todas o algunas).
Existen dos tipos de herencias: La herencia simple y la herencia multiple.
  • La herencia simple puede tener solo una clase padre
  • La herencia multiple puede tener varias clases padres
Aqui les muestro un ejemplo de codigo de herencia que obtuve de internet
class Persona
 {
    private:
      char * nif;
      int  edad;
      char * nombre, *apellidos;
   public:
      Persona(char * , int = 0,  char *, char * );
      Persona & operator=( Persona &);
      ~Persona();               // Destructor
      void medad(int);
      void mnombre(char *);
      char * mnombre() ;
void mostrar() ;
char * nombreCompleto() ;
void felizCumple();            // El día del cumpleaños
void leer();      // Lectura de los datos de la persona
};

Class  Alumno : public Persona
    {
    private:
      int  curso;
   public:
      Alumno(char * , int = 0,  char *, char * , int );
      Alumno& operator=( Alumno &);
      ~Alumno ();                                // Destructor
      int mcurso ();
void mcurso (int );
};

Para mi programa no utilizare herencia ya que la clase principal no heredara ningun atributo o método con las otras clases. Las clases son completamente diferentes y no se podrían definir como clases hijas. 
Tecla NO es un tipo de Piano
Partitura NO es un tipo de Piano
Por lo que en este programa no se puede utilizar herencia

Polimorfismo
Polimorfismo es la capacidad que tienen las clases para que una serie de clases derivadas utilicen el mismo método para realizar una función especifica
Existen dos tipos de polimorfismo:
  • Polimorfismo Dinámico: En esta forma de polimorfismo no es especifica el tipo de datos con el que se trabaja
  • Polimorfismo Estático: Es en el que tienen que ser declarados especificamente los tipos de datos que se van a utilizar.
Aqui les muestro un ejemplo de codigo de polimorfismo que encontre en internet


public abstract class figura {
protected String nombre; 
protected int color; 
protected int grosorBorde; 

public String getNombre(){ 
return this.nombre; 
public void setNombre(String n){ 
this.nombre=n; 
public int getColor(){ 
return this.color; 
public void setColor(int c){ 
this.color=c; 
public int getGrosorBorde(){ 
return this.grosorBorde; 
public void setGrosorBorde(int g){ 
this.grosorBorde=g; 
public abstract void dibujar(); 
}


Para la ejecucion de mi programa tampoco utilizare polimorfismo ya que ninguna de las clases comparten metodos similares.

Referencias

Esqueleto del software (Taller)

Un esqueleto de software es la parte principal que define la esctructura de un programa.
Es imprescindible realizar el esqueleto de las clases para acomodar bien la estructura y dividir las partes del programa correctamente. Despues de realizar el esqueleto podemos codificar los atributos y metodos mas especificamente.
Aqui les muestro el esqueleto de las 3 clases mas importantes de mi programa

Esqueleto 1: Clase Piano
Esta clase es la que define, relaciona y unifica las demás clases. Es la clase principal y la que va a controlar todo.

import java.util.*;
import java.awt.*;

//clase Piano
    public class Piano {
      //atributos
private char teclasociada;
private int estado = 0;
private int ubicacion = 0;
//constructor
public Piano () { };
//metodo
//set teclasoc newVar teclasociada
public void setTeclasociada ( char newVar ) { 
   newVar = 'q';
   teclasociada = newVar;     
}
//get teclasociada return teclasociada
public char getTeclasociada ( ) {
   return teclasociada;
}
//set estado newvar estado
public void setEstado ( int newVar ) {
   estado = newVar;
}
//get estado return estado
public int getEstado ( ) {
   return estado;
}
//set ubicacion newvar ubicacion
public void setUbicacion ( int newVar ) {
   newVar = ubicacion++;
   ubicacion = newVar;
}
//get ubicacion return ubicacion
public int getUbicacion ( ) {
   return ubicacion;
}
    }

Esqueleto 2: Tecla
Esta clase va a definir y reproducir el sonido de cada tecla. Realizare una clase por tecla. En total serian 8 clases.

import java.util.*;

//clase Tecla
public class Tecla 
  //atributos
 private int sonido;
  //constructor
  public Tecla () { };
  //metodo
  set sonido newvar sonido
  private void setSonido ( int newVar ) {
  sonido = newVar;
  }
  get sonido return sonido
  private int getSonido ( ) {
  return sonido;
  }
    //otros metodos
  public void reproducir(  )
  {
  }
}

Esqueleto 3: Partitura
Esta clase va a permitir que el usuario sea capaz de ver partituras que pueda utilizar durante el programa para reproducir diferentes melodias

import java.util.*;

//Clase partitura
public class Partitura {

  //
  // Fields
  //

  private char nombre;
  private char titulo;
  private char dificultad;
  
  //
  // Constructor
  //
  public Partitura () { };

  // Metodos
  
  //Set nombre newvalue nombre
  private void setNombre ( char newVar ) {
    nombre = newVar;
  }
  //Get nombre return nombre
  private char getNombre ( ) {
    return nombre;
  }

  //Set titulo newvalue titulo
  private void setTitulo ( char newVar ) {
    titulo = newVar;
  }
  //Get titulo return titulo
  private char getTitulo ( ) {
    return titulo;
  }
  //Set dificultad new value
  private void setDificultad ( char newVar ) {
    dificultad = newVar;
  }
  //Get dificultad return dificultad
  
  private char getDificultad ( ) {
    return dificultad;
  }
//Otros metodos
  public void imprimir(  )
  {
  }
  public void mostrarimagen(  )
  {
  }
  public void back(  )
  {
  }
}

viernes, 8 de julio de 2011

Antipatrones

Documentar 4 antipattrones de diseño

Patrones de Diseño

Los patrones de diseño ayudan a optimizar el uso de la interfaz grafica y a solucionar posibles problemas que pueden ocurrir con estos patrones.

Los patrones de diseño tienen ciertas caracteristicas: 
  • Efectividad: Tiene que estar comprobada la efectividad del patron para que se pueda utilizar
  • Reutilizable: El patrón tiene que estar programado para ayudar a que se pueda utilizar varias veces. 
Ejemplos de patrones de diseño:

Patrones creacionales

  • Object Pool
  • Abstract Factory
  • Builder
  • Factory Method
  • Prototype
  • Singleton

Patrones estructurales

  • Adapter
  • Bridge (Puente)
  • Composite (Objeto compuesto)
  • Decorator (Envoltorio)
  • Facade (Fachada)
  • Flyweight (Peso ligero)
  • Proxy
Uno de los patrones que me llamo mas la atencion fue el patron Memento. Este programa se utiliza para la funcion "Undo" o "Deshacer" la cual es muy utilizada.

Otro patron de diseño que me llamo mucho la atención y podría usar para mi programa es el patron Prototype.
Este patron permite crear clones de objetos ya existentes un numero determinado de veces. 

Codigo ejemplo:

/**
 * Prototype Class
 */
abstract class PrototypeFactory implements Cloneable {
    public Object clone() throws CloneNotSupportedException {
        // call Object.clone()
        PrototypeFactory copy = (PrototypeFactory) super.clone();
        //In an actual implementation of this pattern you might now change references to
        //the expensive to produce parts from the copies that are held inside the prototype.
        return copy;
    }
 
    abstract void prototypeFactory(int x);
 
    abstract void printValue();
}
 
/**
 * Concrete Prototypes to clone
 */
class PrototypeImpl extends PrototypeFactory {
    int x;
 
    public PrototypeImpl(int x) {
        this.x = x;
    }
 
    @Override
    void prototypeFactory(int x) {
        this.x = x;
    }
 
    @Override
    public void printValue() {
        System.out.println("Value :" + x);
    }
}


REFERENCIAS
PATRONES DE DISEÑO

jueves, 7 de julio de 2011

Selección e instalación de herramientas (Taller)

Para esta entrada voy a explicar las herramientas que utilice para poder llevar a cabo la elaboración de mi programa.
Al principio habia descargado el JDK (Java Development Kitde Java en Ubuntu. El diagrama de clases lo hice con Umbrello y el codigo en Emacs.
Desgraciadamente perdi lo que tenia de mi proyecto por lo que tuve que hacerlo de nuevo ahora utilizando Windows.
Estos fueron los pasos que hice para llevar a cabo la instalacion de las herramientas de desarrollo de la mejor manera:
1) Asi como en el Ubuntu, tuve que instalar el JDK aqui en windows.
Lo descargue desde esta pagina:


2) Despues de haber instalado el JDK instale un programa especial para telefonos Blackberry llamada JDE (Java Development Environment). Es importante descargar el JDE de la version del sistema operativo que tiene la version de Blackberry que deseas utilizar, por ejemplo, yo descargue la version v4.6.1

Aqui les dejo el link de un buen tutorial de JDE 


3) Ahora se tiene que instalar el simulador del Blackberry que vaya a utilizar la aplicacion para poder correrlo desde la computadora y verificar si este es compatible. Yo descargue el simulador para el Blackberry 8520 v4.6.1.272


Otra opcion que tenemos es descargar el Eclipse (nos sirve para hacer programas en Java) y despues instalar un plug-in de Blackberry que podemos encontrar en la pagina de Blackberry, de donde hemos estado descargando las herramientas. 

Despues de tener todas las herramientas necesarias pude comenzar a hacer la aplicacion...

Aqui les muestro una parte del codigo que use para la primera clase llamada Piano

import java.util.*;
import java.awt.*;



//clase Piano
    public class Piano {

//atributos
//private int sonido;
private char teclasociada;
private int estado = 0;
private int ubicacion = 0;
//constructor
public Piano () { };
  
//metodo
//set teclasoc newVar teclasociada
public void setTeclasociada ( char newVar ) { 
   newVar = 'q';
   teclasociada = newVar;
   
}
//get teclasociada return teclasociada
public char getTeclasociada ( ) {
   return teclasociada;
}
//set estado newvar estado
public void setEstado ( int newVar ) {
   estado = newVar;
}
//get estado return estado
public int getEstado ( ) {
   return estado;
}

//set ubicacion newvar ubicacion
public void setUbicacion ( int newVar ) {
   newVar = ubicacion++;
   ubicacion = newVar;
}

//get ubicacion return ubicacion
public int getUbicacion ( ) {
   return ubicacion;
   
   
}
}






miércoles, 6 de julio de 2011

Documentacion Tecnica

La Documentación Técnica es muy útil para saber manejar de una manera adecuada cualquier programa que se nos proporcione, optimizar los resultados y disminuir el tiempo de aprendizaje del programa.
Ademas, sirve para conocer completamente todas las funciones del programa y sacar máximo provecho de este. 
La documentación explica también las características tecnicas de un programa, así como los requerimientos y las necesidades para poder utilizar el programa de la manera mas adecuada y que su utilización sea la mejor posible.

Para la persona que creo el programa es muy fácil crear la documentación ya que conoce perfectamente el programa, sus características, requerimientos, entre otras cosas. 

martes, 5 de julio de 2011

lunes, 4 de julio de 2011

Proyecto (Clases, Atributos y Metodos)

Aquí les presento un avance de mi proyecto.
En este avance mostrare las clases, atributos y métodos que utilizare para realizar mi programa y que funcione correctamente.

La clase mas importante de mi proyecto seria Tecla.
Decidí asignar una clase por cada una de las teclas del piano por que cada una tendrá un sonido y una asignación diferente. La idea es que al presionar la tecla esta emita un sonido y se sombree, por lo que tiene que tener un estado (Presionado o no) y una ubicación (0,1,2,3,4,5) para saber donde esta esa tecla. También es importante asignarle una tecla asociada con el teclado que se utilizara (0q,1w,2e,3r,4t,5y...)

  • Clase: Teclas
  • Atributos: Sonido, Tecla asociada, Estado (Presionado), Ubicación
  • Método: Reproducir sonido, Sombrearse


La segunda clase que utilizare para mi proyecto sera una de Partitura.
En esta clase se presentara la opción de mostrar una partitura con diferentes letras de canciones para que el usuario sea capaz de tocar alguna utilizando las teclas y las teclas asociadas del teclado del teléfono.

  • Clase: Partitura
  • Atributos: Nombre, Titulo, Dificultad, Secuencia
  • Método: Imprimir, Mostrar imagen, Volver
Tenia pensado hacer una clase grande llamada Piano que englobara estas dos clases pero esta mas bien seria parte de la interfaz gráfica, ya que el programa no tendrá otras funciones ademas de las teclas y las partituras.

Conforme vaya pasando el tiempo les iré mostrando mis avances del proyecto.

Casos de Uso (Proyecto)

En esta entrada describiré algunos de los casos de uso para mi proyecto final.

Descripción:

El programa consistirá en un pequeño piano que reproducirá sonidos con la ayuda de las teclas del teléfono. Cada tecla tendrá un sonido diferente. Se pueden crear diferentes canciones. Las teclas que estén presionadas aparecerán en la pantalla sombreada. Habrá también un área que contendrá partituras para que al usuario le sea mas fácil ver y tocar canciones. Dichas partituras contienen las teclas asociadas del teclado del teléfono para poder tocar una canción conocida. Las partituras tendrán diferente nivel de dificultad. 

Casos de uso:
  • Presionar tecla: El actor podra presionar una tecla del telefono y al mismo tiempo ver que una tecla de la pantalla se sombrea.
  • Escuchar sonido: El usuario sera capaz de escuchar un sonido diferente por cada tecla que presione
  • Ver partituras: El usuario podra ayudarse de partituras para crear sonidos o canciones ya existentes
  • Seleccionar nivel para la partitura: El actor podra seleccionar el nivel de dificultad de la partitura dependiendo de las habilidades que posea.
  • Volver a la pantalla principal: Siempre que el usuario abra otra ventana tendra la opcion de volver a la pantalla principal. 
Ahora les mostrare el diagrama de casos de uso