jueves, 24 de noviembre de 2011

Preguntas Guía

Estas preguntas la maestra nos las dio en el inicio del semestre:

¿Cuales son los sintomas de un mal diseño?
R= Rigidez, Fragilidad, Inmovilidad, Viscosidad.

¿En que consiste cada uno?
R= 
Rigidez: Tendencia del software a ser dificil de cambiar, incluso en las cosas mas sencillas.

Fragilidad: Tendencia que tiene el software a romperse por muchos sitios cada vez que se cambia algo.

Inmovilidad: La resistencia del software a ser reutilizado en otros proyectos o parte de otros proyectos.

Viscosidad: La dificultad de mantener la filosofia del diseño original.

¿Que causa el deterioro del diseño?
R= Requisitos cambiantes.

¿Que se puede hacer?
R= Deben ser controladas las dependencias entre modulos de una aplicacion. Este control consiste en la creación de "cortafuegos" de dependencias.

Pruebas Unitarias

En clase julio, sergio, daysi y yo realizamos una prueba unitaria sobre el buscaminas, la cual expuse ante al grupo y esta prueba es la siguiente:


Hicimos otra prueba pero no la terminamos ya que el tiempo de la actividad fue muy corto para terminarlo.

Diagramas de Secuencia

En clase realizamos un diagrama de secuencia de un Perro que entra a su casa:

miércoles, 23 de noviembre de 2011

Patrones de Diseño

En la clase hicimos un pequeño programa llamado Starbuzz en el cual utilizamos cuatro clases llamadas, bebidacafeinada, Cafe, Pruebabebidas y Te.

La codificación de cada una de ellas es la siguiente:

Bebida Cafeinada

import java.util.*;

public abstract class bebidacafeinada {

 
 public final void preparaReceta(){
  hervir();
  poner();
  servir();
  agregarCondimentos();
 }

 
 public abstract void poner();
 public abstract void agregarCondimentos();
  

 public void hervir() {
  System.out.println("Hirviendo Agua");
 }
 
 public void servir (){
  System.out.println("Sirviendo");
 }

 
}

Cafe

import java.util.*;

public class Cafe extends bebidacafeinada{

 
 public void poner() {
  System.out.println("Poniendo Cafe");
  
 }

 
 public void agregarCondimentos() {
  System.out.println("Agregando Azucar y Leche");
  
 }

}

Prueba Bebidas

public class pruebabebidas {
 
public static void main(String[] args) {
 
Te mite = new Te();
Cafe miCafe = new Cafe();

System.out.println("Preparando Te");
mite.preparaReceta();

System.out.println("\nPreparando Cafe");
miCafe.preparaReceta();
 }

}

Te

public class Te extends bebidacafeinada{

 
 public void poner() {
  System.out.println("Poniendo Te");

  
 }

 
 public void agregarCondimentos() {
  System.out.println("Agregando Limon");

  
 }

}

Al compilar y correr estas clases nos muestra un menu de lo que se hace cuando se prepara un Cafe y cuando se prepara un Te, para esto utilizamos un patron de diseño el cual nos ayuda para maximizar la reutilizacion de codigo.

El resultado de este patron es el siguiente:

Documentación Tecnica (Ogro y Principe)

Estas son las Documentaciones tecnicas que genere con el comando javadoc nombre.java:

Clase Atacable

 Clase Capturable

 Clase Congelable

 Clase Curable


Clase Mago
 

Clase Ogro


Clase Personaje


Clase PersonajeAtacable



 Clase Princesa


Clase Principe



Autogeneracion de Codigo (ogro y principe)

Esta es la Autogeneracion de los codigos que realize en clase junto con mi compañero David.

Clase Atacable

/**
 * Interface Atacable
 */
public interface Atacable {

  //
  // Fields
  //

  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  //
  // Other methods
  //

  /**
   * @param        a
   */
  public void atacar( Atacable a );


  /**
   * @param        intensidad
   */
  public void recibirAtaque( int intensidad );


}

Clase Capturable


/**
 * Interface Capturable
 */
public interface Capturable {

  //
  // Fields
  //

  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  //
  // Other methods
  //

  /**
   */
  public void capturar(  );


  /**
   */
  public void liberar(  );


}

Clase Congelable


/**
 * Interface Congelable
 */
public interface Congelable {

  //
  // Fields
  //

  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  //
  // Other methods
  //

  /**
   */
  public void congelar(  );


}

Clase Curable


/**
 * Interface Curable
 */
public interface Curable {

  //
  // Fields
  //

  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  //
  // Other methods
  //

  /**
   * @return       int
   */
  public int curar(  );


}

Clase Mago

import java.util.*;


/**
 * Class Mago
 */
public class Mago extends Personaje {

  //
  // Fields
  //

  
  //
  // Constructors
  //
  public Mago () { };
  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  //
  // Other methods
  //

  /**
   * @param        c
   */
  public void lanzarHechizo( Congelable c )
  {
  }


  /**
   * @param        c
   */
  public void curar( Curable c )
  {
  }


}

Clase Ogro

import java.util.*;


/**
 * Class Ogro
 */
public class Ogro extends PersonajeAtacable implements Capturable, Congelable {

  //
  // Fields
  //

  private boolean congelado = false;
  
  //
  // Constructors
  //
  public Ogro () { };
  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  /**
   * Set the value of congelado
   * @param newVar the new value of congelado
   */
  private void setCongelado ( boolean newVar ) {
    congelado = newVar;
  }

  /**
   * Get the value of congelado
   * @return the value of congelado
   */
  private boolean getCongelado ( ) {
    return congelado;
  }

  //
  // Other methods
  //

  /**
   * @param        c
   */
  public void capturar( Capturable c )
  {
  }


  /**
   */
  public void capturar(  )
  {
  }


  /**
   */
  public void liberar(  )
  {
  }


  /**
   */
  public void congelar(  )
  {
  }


}

Clase Personaje


/**
 * Class Personaje
 */
public class Personaje {

  //
  // Fields
  //

  private String nombre;
  
  //
  // Constructors
  //
  public Personaje () { };
  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  /**
   * Set the value of nombre
   * @param newVar the new value of nombre
   */
  private void setNombre ( String newVar ) {
    nombre = newVar;
  }

  /**
   * Get the value of nombre
   * @return the value of nombre
   */
  private String getNombre ( ) {
    return nombre;
  }

  //
  // Other methods
  //

}

Clase PersonajeAtacable


/**
 * Class PersonajeAtacable
 */
public class PersonajeAtacable extends Personaje implements Atacable {

  //
  // Fields
  //

  static private int DEFAULT_VIDA = 100;
  private int vida;
  
  //
  // Constructors
  //
  public PersonajeAtacable () { };
  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  /**
   * Get the value of DEFAULT_VIDA
   * @return the value of DEFAULT_VIDA
   */
  private int getDEFAULT_VIDA ( ) {
    return DEFAULT_VIDA;
  }

  /**
   * Set the value of vida
   * @param newVar the new value of vida
   */
  private void setVida ( int newVar ) {
    vida = newVar;
  }

  /**
   * Get the value of vida
   * @return the value of vida
   */
  private int getVida ( ) {
    return vida;
  }

  //
  // Other methods
  //

  /**
   * @param        cuanta
   */
  public void restarVida( int cuanta )
  {
  }


  /**
   * @param        a
   */
  public void atacar( Atacable a )
  {
  }


  /**
   * @param        intensidad
   */
  public void recibirAtaque( int intensidad )
  {
  }


}

Clase Princesa


/**
 * Class Princesa
 */
public class Princesa extends Personaje implements Capturable {

  //
  // Fields
  //

  private String status = "libre";
  
  //
  // Constructors
  //
  public Princesa () { };
  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  /**
   * Set the value of status
   * @param newVar the new value of status
   */
  private void setStatus ( String newVar ) {
    status = newVar;
  }

  /**
   * Get the value of status
   * @return the value of status
   */
  private String getStatus ( ) {
    return status;
  }

  //
  // Other methods
  //

  /**
   */
  public void capturar(  )
  {
  }


  /**
   */
  public void liberar(  )
  {
  }


}

Clase Principe

import java.util.*;


/**
 * Class Principe
 */
public class Principe extends PersonajeAtacable implements Curable {

  //
  // Fields
  //

  
  //
  // Constructors
  //
  public Principe () { };
  
  //
  // Methods
  //


  //
  // Accessor methods
  //

  //
  // Other methods
  //

  /**
   * @return       Mago
   */
  public Mago invocarMago(  )
  {
  }


  /**
   * @param        o
   */
  public void atacar( Ogro o )
  {
  }


  /**
   * @param        c
   */
  public void rescatar( Capturable c )
  {
  }


  /**
   * @return       int
   */
  public int curar(  )
  {
  }


}

Tambien autogeneramos en Pyton, pero la documentacion tecnica la realizamos en java, asi que nos basamos en estas autogeneraciones.

Clase Moto

Este es el codigo que realice en esta actividad:

Clase Moto

import java.util.*;
 
public class Moto {
 
    public static void main(String[] args){
        
        claseMoto nueva = new claseMoto("1446759");
          
        int opc = 0;
        do{
          
           System.out.print("\nMenu de Moto:");
           System.out.println("\n1.Encender la moto");
           System.out.println("\n2.Apagar");
           System.out.println("\n3. Acelerar");
           System.out.println("\n4.Frenar");
          
            
           opc = (new Scanner(System.in)).nextInt();
          
           switch(opc){
               case 1: System.out.println("La moto esta encendida " + nueva.encender());
               break;
               case 2: System.out.println("La moto esta apagada " + nueva.apagar());
               break;
               case 3: System.out.println("\n"); nueva.acelerar(); 
               break;
               case 4: System.out.println("\n"); nueva.frenar();
               break;
               default: System.out.println("Selecciona otra Opcion");      
                      }
        }while(opc != 4);
   }
}

Clase clasemoto

public class claseMoto {
      
 //Atributos
     private int placa;
        private int estado;
        private int velocidad;
        private int vidabateria;
          
        //Constructor
        public claseMoto(String placa){
            this.placa = 1446759;
            this.estado = 0;
            this.velocidad = 0;
            this.vidabateria = 100;
        } 
          
        //Metodos
        public int verPlaca(){
            return placa;
        }
          
        public int encender(){
           estado = estado + 1;
           return estado;
        }
        public void vidaBateria(){
         vidabateria = vidabateria - 1;
            
        }
          
       
        public int apagar(){
            
            estado = 0;
             return estado;
            }
          
        public void acelerar(){
            if(estado==1){velocidad = (velocidad + 20);
            System.out.println("La velocidad es " + velocidad);}
            else System.out.println("No se puede acelerar");
        }
          
        public void frenar(){
         if (estado==1){velocidad = (velocidad - 20); }
          System.out.println("La velocidad es " + velocidad);
        }
}

y el resultado de mi programa es el siguiente: