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.
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:
martes, 8 de noviembre de 2011
Autogeneracón de Codigo
El codigo que genere, de acuerdo a mi diagrama fue el siguiente:
Clase Administrador
Clase Cliente
Clase Mascota
Clase Negocio
Estos codigos autogenerados, no difieren mucho del codigo que yo tenia, solamente en los metodos get y set, que son para obtener y modificar el valor de las variables.
Saludos :)
Clase Administrador
/** * Class Administrador */ public class Administrador { // // Fields // private void Bienvenida; // // Constructors // public Administrador () { }; // // Methods // // // Accessor methods // /** * Set the value of Bienvenida * @param newVar the new value of Bienvenida */ private void setBienvenida ( void newVar ) { Bienvenida = newVar; } /** * Get the value of Bienvenida * @return the value of Bienvenida */ private void getBienvenida ( ) { return Bienvenida; } // // Other methods // }
Clase Cliente
/** * Class Cliente */ public class Cliente { // // Fields // private void Nombre; private void Apellido_Paterno; private void Apellido_Materno; private void Direccion; private void Telefono; // // Constructors // public Cliente () { }; // // Methods // // // Accessor methods // /** * Set the value of Nombre * @param newVar the new value of Nombre */ private void setNombre ( void newVar ) { Nombre = newVar; } /** * Get the value of Nombre * @return the value of Nombre */ private void getNombre ( ) { return Nombre; } /** * Set the value of Apellido_Paterno * @param newVar the new value of Apellido_Paterno */ private void setApellido_Paterno ( void newVar ) { Apellido_Paterno = newVar; } /** * Get the value of Apellido_Paterno * @return the value of Apellido_Paterno */ private void getApellido_Paterno ( ) { return Apellido_Paterno; } /** * Set the value of Apellido_Materno * @param newVar the new value of Apellido_Materno */ private void setApellido_Materno ( void newVar ) { Apellido_Materno = newVar; } /** * Get the value of Apellido_Materno * @return the value of Apellido_Materno */ private void getApellido_Materno ( ) { return Apellido_Materno; } /** * Set the value of Direccion * @param newVar the new value of Direccion */ private void setDireccion ( void newVar ) { Direccion = newVar; } /** * Get the value of Direccion * @return the value of Direccion */ private void getDireccion ( ) { return Direccion; } /** * Set the value of Telefono * @param newVar the new value of Telefono */ private void setTelefono ( void newVar ) { Telefono = newVar; } /** * Get the value of Telefono * @return the value of Telefono */ private void getTelefono ( ) { return Telefono; } // // Other methods // /** * @return char */ public char ingresar_Nombre( ) { } /** * @return char */ public char Ingresar_App( ) { } /** * @return char */ public char Ingresar_Apm( ) { } /** * @return char */ public char Ingresar_Dir( ) { } /** * @return int */ public int Ingresar_tel( ) { } }
Clase Mascota
/** * Class Mascota */ public class Mascota extends Cliente { // // Fields // private char NombredeMascota; private char Edad_de_Mascota; private char SexodeMascota; private char Raza; // // Constructors // public Mascota () { }; // // Methods // // // Accessor methods // /** * Set the value of NombredeMascota * @param newVar the new value of NombredeMascota */ private void setNombredeMascota ( char newVar ) { NombredeMascota = newVar; } /** * Get the value of NombredeMascota * @return the value of NombredeMascota */ private char getNombredeMascota ( ) { return NombredeMascota; } /** * Set the value of Edad_de_Mascota * @param newVar the new value of Edad_de_Mascota */ private void setEdad_de_Mascota ( char newVar ) { Edad_de_Mascota = newVar; } /** * Get the value of Edad_de_Mascota * @return the value of Edad_de_Mascota */ private char getEdad_de_Mascota ( ) { return Edad_de_Mascota; } /** * Set the value of SexodeMascota * @param newVar the new value of SexodeMascota */ private void setSexodeMascota ( char newVar ) { SexodeMascota = newVar; } /** * Get the value of SexodeMascota * @return the value of SexodeMascota */ private char getSexodeMascota ( ) { return SexodeMascota; } /** * Set the value of Raza * @param newVar the new value of Raza */ private void setRaza ( char newVar ) { Raza = newVar; } /** * Get the value of Raza * @return the value of Raza */ private char getRaza ( ) { return Raza; } // // Other methods // /** * @return char */ public char IngresarNMas( ) { } /** * @return char */ public char Ingresaredad( ) { } /** * @return char */ public char IngresarSexo( ) { } /** * @return char */ public char IngresarRaza( ) { } }
Clase Negocio
/** * Class Negocio */ public class Negocio { // // Fields // private char Productos; private int Precio; // // Constructors // public Negocio () { }; // // Methods // // // Accessor methods // /** * Set the value of Productos * @param newVar the new value of Productos */ private void setProductos ( char newVar ) { Productos = newVar; } /** * Get the value of Productos * @return the value of Productos */ private char getProductos ( ) { return Productos; } /** * Set the value of Precio * @param newVar the new value of Precio */ private void setPrecio ( int newVar ) { Precio = newVar; } /** * Get the value of Precio * @return the value of Precio */ private int getPrecio ( ) { return Precio; } // // Other methods // /** * @return char */ public char Ingresarprod( ) { } /** * @return char */ public char EliminarProd( ) { } /** * @return int */ public int EditarPrecio( ) { } }
Estos codigos autogenerados, no difieren mucho del codigo que yo tenia, solamente en los metodos get y set, que son para obtener y modificar el valor de las variables.
Saludos :)
Etiquetas:
Taller POO 2° Entrega
domingo, 6 de noviembre de 2011
Retroalimentación por Pares
En esta actividad mi compañero Luis Solis y yo, realizamos un diagrama en umbrello y el resultado fue este:
La verdad esque el no me hablo de su proyecto porque no sabia que hacer de proyecto y por consecuencia no tenia nada en su blog. Yo le hable de mi proyecto pero solo me escucho y me dijo que era un buen proyecto, y que tenia que utilizar base de datos, entonces dije en que lio me estoy metiendo, pero tambien pense, es cosa de que investigue y me ponga a trabajar :)
miércoles, 2 de noviembre de 2011
Interfaz Gráfica
Estas son algunas de las interfaces de mi Proyecto:
Esta es la Bienvenida del Programa.
Después de dar click en el botón bienvenidos, se abre esta pantalla, la cuál es el menu principal de mi programa.
Supongamos, que dimos click en el botón Cliente, entonces abre otra pantalla con el siguiente menú, que es para dar de alta un cliente o bien para buscar uno de los ya mencionados.
Entonces dimos click en Nuevo Cliente, y abre la pantalla donde se ingresan los datos del cliente, si el cliente tiene una mascota, entonces se da click en Ingresar Paciente, para dar de alta a su mascota.
Y está es la pantalla donde se ingresan los datos de la mascota, quise hacer los datos de una forma muy general, ya que el cliente se desesperara si empezamos a preguntar tantos datos. Después de ingresar estos datos damos click en Guardar o bien en Cancelar si asi lo desea.
Esta es la Bienvenida del Programa.
Después de dar click en el botón bienvenidos, se abre esta pantalla, la cuál es el menu principal de mi programa.
Supongamos, que dimos click en el botón Cliente, entonces abre otra pantalla con el siguiente menú, que es para dar de alta un cliente o bien para buscar uno de los ya mencionados.
Entonces dimos click en Nuevo Cliente, y abre la pantalla donde se ingresan los datos del cliente, si el cliente tiene una mascota, entonces se da click en Ingresar Paciente, para dar de alta a su mascota.
Y está es la pantalla donde se ingresan los datos de la mascota, quise hacer los datos de una forma muy general, ya que el cliente se desesperara si empezamos a preguntar tantos datos. Después de ingresar estos datos damos click en Guardar o bien en Cancelar si asi lo desea.
Al dar click en Guardar o Cancelar en la pantalla anterior, automaticamente abre nuevamente el menú de clientes y entonces damos click en Buscar Clientes y abre esta Pantalla, donde se busca el cliente por el nombre y se puede eliminar o Editar sus datos. Al dar Click en Menú regresa al menu Principal.
Elegí estas pantallas, porque es como el corazon de mi proyecto, es lo más importante y en lo que mas me estoy basando.
Patrones de Diseño
Un Patron es un modo definido de operación o comportamiento, es una guía de diseño.
Hay 3 tipos de patrones:
- Creación: Mecanismos para la creación de objetos.
- Estructura: Mecanismo de relación entre entidades.
- Comportamiento: Mecanismos de comunicación entre clases.
El patron que yo utilizaria en mi proyecto es de el de Fachada, este es un tipo de patrón de estructura y su proposito es simplificar el sistema através de una interfaz general.
Pienso que aplicaria en mi proyecto, porque tiene que ser algo muy general, sin darle tantas vueltas o tantos click´s para llegar al punto que queremos.
Otro sería el de Observador, este define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambie de estado se notifique y actualicen automáticamente todos los objetos que dependen de él.
Podría aplicarse en mi proyecto, porque unos objetos dependen de otros, por ejemplo al abrir una ventana, se debe cerrar la ventana pasada.
Referencias
Eventos, Excepciones y Errores
Un evento es un suceso, algo que pasa o tiene lugar..estos se pueden ver como una interaccion.
Los eventos de mi proyecto son los siguientes:
Las excepciones y errores se refieren a Violaciones de una restricción y desviación de lo correcto respectivamente.
Las excepciones y errores de mi proyecto, las muestra la siguiente tabla:
Los eventos de mi proyecto son los siguientes:
Las excepciones y errores se refieren a Violaciones de una restricción y desviación de lo correcto respectivamente.
Las excepciones y errores de mi proyecto, las muestra la siguiente tabla:
Referencias
Diagramas de Secuencia
Los diagramas de Secuencia de mi Proyecto son los siguientes:
1.- Muestra el ingreso de un nuevo cliente.
2.- Este diagrama muestra el alta de un cliente y también del paciente.
3.- Este ultimo diagrama muestra la eliminación de un Cliente y si es el caso un paciente.
1.- Muestra el ingreso de un nuevo cliente.
2.- Este diagrama muestra el alta de un cliente y también del paciente.
3.- Este ultimo diagrama muestra la eliminación de un Cliente y si es el caso un paciente.
Suscribirse a:
Entradas (Atom)