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.
Addy Davila
jueves, 24 de noviembre de 2011
Preguntas Guía
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.
Etiquetas:
Actividades en el Salón
Diagramas de Secuencia
Etiquetas:
Actividades en el Salón
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
Cafe
Prueba Bebidas
Te
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:
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 Personaje
Clase PersonajeAtacable
Clase Princesa
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
Clase Capturable
Clase Congelable
Clase Curable
Clase Mago
Clase Ogro
Clase Personaje
Clase PersonajeAtacable
Clase Princesa
Clase Principe
Tambien autogeneramos en Pyton, pero la documentacion tecnica la realizamos en java, asi que nos basamos en estas autogeneraciones.
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
Clase clasemoto
y el resultado de mi programa es el siguiente:
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:
Suscribirse a:
Entradas (Atom)