FIUBA Algoritmos y programación 3

Tamaño: px
Comenzar la demostración a partir de la página:

Download "FIUBA - 7507 Algoritmos y programación 3"

Transcripción

1 FIUBA Algoritmos y programación 3 Trabajo práctico 2: Algo Hero er cuatrimestre, er entrega (trabajo grupal) Integrantes: 90365, Nahuel Lucero, nahuel.bm6@gmail.com 91299, Diego Meller, mellerster@gmail.com 84155, Leandro Alessandrello, leandro.aless@gmail.com 90562, Alejandro Daza, wa.dazamillone@gmail.com Fecha de entrega: 10/6/2010 Corrector: Nota Final: Introducción 2 Descripción basica del juego 2 Dinámica del juego 2 Normas Generales de Entrega 2 Elementos a entregar 3 Supuestos 3 Modelo de dominio 4 Detalles de implementación 6 Excepciones 6 Diagramas de clases 7/8 Diagramas de secuencia 9 Código fuente 10 Checklist de corrección 29

2 Introducción El presente trabajo consiste en el desarrollo de un juego símil Guitar Hero. Descripción básica del juego Algo-Hero es un juego que pone a prueba las habilidades del jugador para manipular el teclado de la computadora y seguir un ritmo determinado. El juego consiste en una secuencia de niveles, en cada uno de los cuales el usuario debe presionar ciertas combinaciones de teclas según se lo va especificando el juego. A medida que el usuario pasa de nivel, estos se vuelven más complejos, agregando más combinaciones de teclas. El juego permite al jugador tocar canciones con una guitarra eléctrica. La guitarra se simula con el teclado. Se definen 4 teclas que permiten al jugador tocar parte de la melodía. El juego muestra al jugador cuales son las teclas que debe tocar. Las notas van moviéndose hacia la parte inferior de la pantalla, y el jugador debe presionar la tecla asociada a cada nota en el momento justo que alcanza la parte inferior de la pantalla. Cada vez que el jugador toca la nota correcta, suma puntos. Dinámica del juego El jugador selecciona una canción a tocar. En base a la canción seleccionada, el modelo del juego arma la partitura (es decir, las notas y figuras musicales asociadas a la canción). A su vez cada canción tiene asociado un compás. Dada la partitura, el compás, y el mapeo de cada nota a cada tecla, el juego puede calcular en qué momento debe presionarse cada tecla, y en base a eso armar un mapa temporal que más adelante se mostrará al usuario por pantalla. Normas generales de entrega Ø La estructura de carpetas que se entrega deberá tener como raíz una carpeta o paquete con el siguiente nombre: algo3c[1 2 3]g[número de grupo]. Donde 1, 2 o 3 es el curso en el cual está inscripto el grupo. Ej: algo3c1g8 es la carpeta que deberá usar el grupo 8 del curso 1 (turno tarde). Ø La documentación deberá estar en 1 sólo archivo (texto y diagramas) preferiblemente en formato.pdf o en su defecto como.doc. Ø Deberá coordinar con su ayudante asignado si se entregará el código fuente impreso y su formato.

3 Elementos a entregar Ø Una aplicación Java o C# que responda al enunciado del trabajo práctico, con todas las estructuras de datos, atributos y comportamiento necesario para la resolución del MODELO del juego. (NO incluye visualización e interacción con el usuario). Ø Pruebas unitarias automatizadas (utilizando JUnit para Java y NUnit para C#) que contemplen las siguientes condiciones: Ø Ø Ø Creación de una canción, con sus correspondientes notas y figuras musicales y tiempo de compás Ø Creación de un mapeo entre notas y teclas Ø Prueba de los métodos del modelo que permiten ir obteniendo las teclas a presionar en forma ordenada y obtener el mapa temporal de teclas a presionar (estos son los métodos que después se utilizarán para implementar la parte visual). Diagrama de clases de las clases principales de la aplicación. Diagrama de secuencia para los casos que se consideren relevantes. Supuestos Debido a la subjetividad del enunciado, se realizaron varios supuestos a la hora realizar el trabajo práctico, a saber: En una partitura podría haber dos o más notas en un mismo instante de tiempo, lo que en teoría musical se conoce como Acorde. Pero, a diferencia de la teoría musical, manejaremos acordes con notas de distinta duración. No se desea poder representar partituras musicales complejas, por lo que no se tuvieron en cuenta conceptos como ligadura, puntillo, clave, etc. La cantidad de teclas distintas a presionar en un nivel no es fija (4). La frecuencia fundamental de las notas es un parámetro que deberá manejar la aplicación. Modelo de dominio El trabajo practico se realizó a través del método clásico : Análisis, Diseño, Implementación y Pruebas, aunque no en forma de cascada sino en forma iterativa. Análisis Básicamente, el análisis está condensado en el enunciado: se requiere desarrollar una aplicación similar al video-juego Guitar Hero, que represente internamente las canciones utilizando los conceptos de teoría musical. Diseño

4 Se partió de una clase básica del dominio del problema: la clase Nota. Esta clase representa, como su nombre lo indica, una nota musical, con su nombre, duración musical y su frecuencia. Consideramos que no era necesario modelar clases que representen a cada nota musical, pues dos notas distintas solo se diferenciarían por su estado. Tampoco se consideró necesario modelar clases para representar las figuras musicales, pues, en este contexto, una figura musical no posee comportamiento. En cambio, se decidió manejar la duración de las notas representando las figuras musicales con constantes. A partir de la clase Nota, y considerando que nuestra aplicación debe soportar acordes, se decidió diseñar la clase Acorde, que representara un conjunto no ordenado de notas. Tomamos como la duración musical del acorde a la de la nota de mayor duración. En base a Acorde, se diseñó una clase que represente un compás (clase Compás). En nuestro modelo, un compás estará compuesto de acordes, es decir, cada nota de un compás corresponderá (estará incluida) en un, y solo un, acorde. La duración musical del compás será la suma de las duraciones de los acordes que lo componen. Puesto que se tienen 12 notas distintas y un acorde no puede contener notas repetidas, un acorde tendrá, como máximo, 12 notas. El próximo paso fue diseñar una clase Partitura, que define, como uno de sus atributos, una Duración de compás. Básicamente, en nuestro modelo, la partitura es un conjunto de compases. La duración esta expresada en cantidad de figuras musicales, y, puesto que dicha duración es invariante en una partitura, solo podrá incorporar compases que posean esa duración. Para modelar las distintas canciones del juego, se diseño la clase Canción. Esta clase posee como atributos: El nombre de la canción La representación de la canción a través de una partitura (instancia de Partitura) El Tiempo de compás (tiempo físico que representa la duración de un compás), el cual es el mismo para todos los compases de la partitura. Una referencia a una instancia de la clase MapeoDeTeclas (ver más adelante), que representa un mapeo entre notas y las teclas que deberá presionar el usuario cuando dicha nota suene. Una referencia a una instancia de la clase MapaTemporal (ver más adelante), que representara un mapeo en el tiempo de las teclas a presionar en cada instante. Esta clase será la encargada de manejar la lógica principal del juego, delegando en la clase MapaTemporal. Tendrá métodos para obtener las teclas a presionar en un instante dado y verificar si una combinación de teclas dada es correcta en un instante de tiempo. La clase MapeoDeTeclas permite asociar teclas a cada nota distinta, obtenerlas y/o eliminarlas.

5 Para el cálculo del mapeo en el tiempo, se decidió delegar esta responsabilidad de la clase Canción a otra clase, MapaTemporal. Esta clase está compuesta de instancias de la clase NodoTemporal. Cada uno de estos nodos representará en el mapa temporal un acorde, teniendo información (atributos) sobre: El tiempo físico relativo al comienzo de la canción en el que el acorde se empieza a tocar. Las teclas a presionar, correspondientes al acorde. La cantidad de tiempo físico en el que el jugador deberá mantener presionadas las teclas (duración del acorde). La clase MapaTemporal será la encargada de transformar los acordes en Nodos, y también, tendrá métodos para obtener, para un tiempo de reproducción de canción dado, el nodo correspondiente. Implementación La implementación del diseño se realizo en la plataforma Microsoft.NET, particularmente trabajando con el lenguaje C# (Ver Código fuente ). Detalles de implementación Las figuras musicales se implementaron utilizando constantes enumeradas (enum), expresando todas las duraciones en semicorcheas, es decir: Redonda = 16, Blanca = Redonda / 2 = 8, etc. La duración de compás también esta expresada en cantidad de semicorcheas, por lo que, si un compás dura 4 negras, la duración de compás se deberá setear como 4 * NEGRA, donde NEGRA es el valor del enum correspondiente a la figura musical negra. Las teclas se representan mediante las constantes enumeradas nativas del lenguaje, localizadas en System.Window.Input. Excepciones Para la aplicación se crearon 4 excepciones: AcordeLlenoException: Se lanzará cuando se intente agregar más de 12 notas a un acorde. MapeoDeTeclasInvalidoException: Se lanzará cuando se quiera acceder en el mapeo de teclas a las teclas asociadas a una nota y esta no se encuentre. NotaInvalidaException: Será lanzada por la clase MapeoDeTeclas cuando el nombre de una nota no sea válido. TiempoInvalidoException: Será lanzada por la clase MapeoTemporal cuando se reciba un tiempo de reproducción mayor que la duración total de la canción.

6 Diagramas de clases

7

8 Diagramas de secuencia El siguiente diagrama de secuencia representa la creación de un MapeoTemporal a partir de una Canción: El siguiente diagrama representa la obtención de las teclas a presionar en un instante dado:

9 Código fuente Acorde.cs namespace AlgoHero.Modelo using System; using System.Collections.Generic; using System.Text; using System.Collections; public enum ctes MAX_NOTAS = 12 ; public class Acorde : IEnumerable #region Atributos private int duracion; private IList notas; #region Constructor public Acorde() /* Postcondición: crea un acorde vacío de duración musical 0. this.notas = new List<Nota>(); this.duracion = 0; #region Métodos

10 public void AddNota(Nota unanota) /* Agrega una nota al acorde. Si el acorde está lleno, lanza una excepcion del tipo * AcordeLlenoException. Si la duración de la nota es máxima asigna esta duración al * acorde. * Postcondición: Lanza AcordeLlenoException si el acorde está lleno. Sino, lo agrega. if ((ctes)this.cantidad == ctes.max_notas) throw new AcordeLlenoException("No se pueden agregar mas notas al acorde."); notas.add(unanota); if (this.duracion < unanota.duracion) this.duracion = unanota.duracion; public double CalcularDuracionEnSeg(double tiempodecompas, int duraciondecompas) /* Calcula el tiempo físico que dura el acorde y lo devuelve. * Precondición: tiempodecompas y duraciondecompas deben ser no negativos. * Postcondicion: lanza ArgumentException si los argumentos son invalidos. if (tiempodecompas < 0 duraciondecompas < 0) throw new ArgumentException("Ingresó una duracion o tiempo de compás negativa"); double tiempodesemicorchea = tiempodecompas / duraciondecompas; return (this.duracion * tiempodesemicorchea); public IEnumerator GetEnumerator() /* Implementa un iterador para esta clase ("foreach")

11 for (int i = 0; i < this.notas.count; i++) yield return this.notas[i]; public bool EsVacio() return (this.cantidad == 0); #region Propiedades public int Duracion get return this.duracion; public int Cantidad get return this.notas.count; Cancion.cs namespace AlgoHero.Modelo using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Windows.Input; public class Cancion #region Atributos private string nombre; private Partitura partitura;

12 private double tiempodecompas; private MapeoDeTeclas mapeo; private MapaTemporal mapatemporal; Atributos #region Constructores public Cancion(string nombre, Partitura partitura, double tiempodecompas, MapeoDeTeclas mapeo) /* Precondiciones: tiempodecompas debe ser un número entero positivo mayor a 0. * Postcondición: lanza ArgumentException si tiempodecompas es inválido. if (tiempodecompas <= 0) throw new ArgumentException("El tiempo de compás debe ser positivo."); this.nombre = nombre; this.partitura = partitura; this.tiempodecompas = tiempodecompas; this.mapeo = mapeo; this.calcularmapatemporal(); #region Propiedades public string Nombre get return nombre; public Partitura Partitura get return partitura; public double TiempoDeCompas get return tiempodecompas;

13 public MapeoDeTeclas Mapeo get return mapeo; set mapeo = value; public MapaTemporal MapaTemporal get return mapatemporal; public double Duracion //Obtiene la duracion total de la cancion, en segundos. get return this.mapatemporal.tiempototal; #region Métodos public void Play() throw new NotImplementedException(); private void CalcularMapaTemporal() this.mapatemporal = new MapaTemporal(this); public IList<Key> ObtenerTeclasAPresionar(double tiempodereproduccion) /* Obtiene las teclas a presionar para un instante de reproduccion de la cancion. * Precondiciones: El tiempo debe ser no negativo y no mayor a la duracion total de la cancion. * Postcondiciones: Lanza ArgumentException si tiempo es negativo. Lanza TiempoInvalidoException * si tiempodereproduccion es mayor que la duracion de la cancion.

14 NodoTemporal nodocorrespondiente = this.mapatemporal.obtenernodocorrespondiente(tiempodereproduccion); return nodocorrespondiente.teclas; public bool EsValida(IList<Key> teclaspresionadas, double tiempodereproduccion) /* Devuelve TRUE si la combinacion de teclas es valida para el instante tiempodereproduccion. * Precondiciones: El tiempo debe ser no negativo y no mayor a la duracion total de la cancion. * Postcondiciones: Lanza ArgumentException si tiempo es negativo. Lanza TiempoInvalidoException * si tiempodereproduccion es mayor que la duracion de la cancion. IList<Key> teclascorrectas = this.obtenerteclasapresionar(tiempodereproduccion); foreach (Key tecla in teclaspresionadas) if (!teclascorrectas.contains(tecla))// esto no contempla si al usuario le faltaron teclas por presionar return false; return true; Compas.cs namespace AlgoHero.Modelo using System;

15 using System.Collections.Generic; using System.Text; using System.Collections; public class Compas #region Atributos private IList acordes; #region Constructor public Compas() acordes = new List<Acorde>(); #region Métodos public void AddAcorde(Acorde unacorde) /* Postcondicion: Se agregó un acorde al compás. this.acordes.add(unacorde); public int CalcularDuracion() /* Calcula la duración musical de todo el compás. * Postcondición: Devuelve la duración del compás. int acumulado = 0; foreach (Acorde acorde in acordes) acumulado += acorde.duracion; return acumulado; public bool EsVacio()

16 return (this.acordes.count == 0); public IEnumerator GetEnumerator() /* Implementa un iterador para esta clase ("foreach") for (int i = 0; i < this.acordes.count; i++) yield return this.acordes[i]; Duracion.cs using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace AlgoHero.Modelo public enum Duracion REDONDA = 16, BLANCA = REDONDA / 2, NEGRA = REDONDA / 4, CORCHEA = REDONDA / 8, SEMICORCHEA = REDONDA / 16 MapaTemporal.cs namespace AlgoHero.Modelo using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Windows.Input;

17 public class MapaTemporal private double tiempototal; /*Tiempo total de la canción (segundos). Utilizado en el constructor *para calcular el tiempo donde empieza cada acorde. private IList<NodoTemporal> listanodostemporales; #region Constructor public MapaTemporal(Cancion unacancion) /* Crea una mapa temporal a partir de unacancion. this.tiempototal = 0; this.listanodostemporales = new List<NodoTemporal>(); foreach (Compas compas in unacancion.partitura.compases) this.agregaracordescomonodos(compas, unacancion.tiempodecompas, unacancion.partitura.duraciondecompas, unacancion.mapeo); #region Métodos private IList<Key> ObtenerTeclasAPresionar(Acorde unacorde, MapeoDeTeclas mapeodeteclas) /* Devuelve las teclas que el jugador debe presionar para un acorde dado. * Lanza MapeoDeTeclasInvalidoException si no se puede acceder a las teclas correspondientes * a alguna nota. IList<Key> teclasapresionar = new List<Key>(); foreach(nota nota in unacorde)

18 string nombrenota = nota.nombre; try IList<Key> teclasdenota = mapeodeteclas.getteclaspara(nombrenota); foreach(key tecla in teclasdenota) if (!teclasapresionar.contains(tecla)) teclasapresionar.add(tecla); catch(notainvalidaexception) throw new MapeoDeTeclasInvalidoException(); return teclasapresionar; private void AgregarAcordesComoNodos(Compas uncompas, double tiempodecompas, int duraciondecompas, MapeoDeTeclas mapeodeteclas) /* Recorre los acordes de uncompas; para cada acorde, calcula las teclas a presionar, calcula * su duracion en segundos, y con ellos crea un NodoTemporal que es agregado al MapaTemporal. * El tiempoacumulado de la Cancion es incrementado en la cantidad que dura el acorde, que será * el tiempoacumulado del proximo NodoTemporal. foreach (Acorde acorde in uncompas) IList<Key> teclasapresionar = ObtenerTeclasAPresionar(acorde, mapeodeteclas); double duraciondelacorde = acorde.calcularduracionenseg(tiempodecompas, duraciondecompas);

19 NodoTemporal nodo = new NodoTemporal(this.tiempoTotal, duraciondelacorde, teclasapresionar); this.addnodo(nodo); this.tiempototal += duraciondelacorde; /*Al agregar el ultimo nodo, sera el tiempo total *de la cancion. private void AddNodo(NodoTemporal unnodo) this.listanodostemporales.add(unnodo); public NodoTemporal ObtenerNodoCorrespondiente(double tiempodereproduccion) /* Devuelve el nodo correspondiente con el tiempo de reproduccion de la cancion * ('tiempodereproduccion'), o null si no lo encuentra. * Precondiciones: tiempodereproduccion es positivo o cero, y esta expresado en segundos. * Postcondiciones: Lanza ArgumentException si tiempodereproduccion es negativo. Lanza * TiempoInvalidoException si tiempodereproduccion es mayor que el tiempo total de la cancion. * Devuelve un NodoTemporal válido si lo encunetra, o null en caso contrario. if (tiempodereproduccion < 0) throw new ArgumentException("El tiempo de reproduccion debe ser no negativo."); if (tiempodereproduccion > this.tiempototal) throw new TiempoInvalidoException( "El tiempo de reproduccion es mayor que el tiempo total de la Cancion."); //Iteramos hasta obtener el nodo correspondiente foreach (NodoTemporal nodo in this.listanodostemporales)

20 nodo.duracion)) if (tiempodereproduccion >= nodo.tiempodeinicio && tiempodereproduccion < (nodo.tiempodeinicio + return nodo; return null; #region Propiedades public int Cantidad get return this.listanodostemporales.count; public double TiempoTotal get return this.tiempototal; MapeoDeTeclas.cs namespace AlgoHero.Modelo using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Input; public class MapeoDeTeclas

21 /* Esta clase representa un mapeo de notas a teclas. Implementada a traves de un Dictionary cuyas * clave son los nombres de las notas y sus valores son una coleccion de teclas. Estas colecciones * deben implementar la interfaz IList provista por el lenguaje. * Las teclas se representan mediante constantes enumeradas definidas en System.Windows.Input #region Atributos private IDictionary< string, IList<Key> > mapeo; private static string[] NombresDeNotas = "DO", "DO#", "RE", "RE#", "MI", "FA", "FA#", "SOL", "SOL#", "LA", "LA#", "SI", "SILENCIO" ; #region Constructor public MapeoDeTeclas() /* Crea una mapeo de teclas con todas las notas musicales válidas, y sin teclas asociadas. this.mapeo = new Dictionary< string, IList<Key> >(); foreach (string nombre in NombresDeNotas) this.mapeo.add(nombre, new List<Key>()); #region Métodos public void AddTeclasPara(string nombredenota, IList<Key> teclas) /* Agrega al mapeo las teclas asociadas a la nota cuyo nombre es 'nombredenota'. * * Precondiciones: nombredenota deber ser un nombre de nota musical válido. *

22 NotaInvalidaException. * Postcondiciones: Si nombredenota es inválido, lanza string nombreenlimpio = ValidarNombre(nombreDeNota); //Obtenemos la lista de teclas asociada a la nota IList<Key> listateclas = this.mapeo[nombreenlimpio]; //Agregamos las teclas que correspondan foreach (Key tecla in teclas) // Si alguna de las teclas ya se encontraba en el mapeo, no la agrega nuevamente if (!listateclas.contains(tecla)) listateclas.add(tecla); private string ValidarNombre(string unnombredenota) /* Verifica si el nombre de la nota es válido. Si lo es, devuelve el nombre sin espacios en blanco de mas y * en mayusculas. Si no lo es, lanza NotaInvalidaException. string nombreenlimpio = unnombredenota.trim().toupper(); if (!NombresDeNotas.Contains(nombreEnLimpio)) throw new NotaInvalidaException("El nombre de la nota es invalido."); return nombreenlimpio; public IList<Key> GetTeclasPara(string nombredenota) /* Devuelve las teclas asociadas a la nota cuyo nombre es 'nombredenota'. *

23 * Precondiciones: nombredenota deber ser un nombre de nota musical válido. * * Postcondiciones: Si nombredenota es inválido, lanza NotaInvalidaException. string nombreenlimpio = ValidarNombre(nombreDeNota); return (this.mapeo[nombreenlimpio]); public void EliminarTeclasPara(string nombredenota, IList<Key> teclas) /* Elimina del mapeo las teclas asociadas a la nota 'nombredenota' que sean iguales * a las teclas contenidas en 'teclas'. * * Precondiciones: nombredenota deber ser un nombre de nota musical válido. * * Postcondiciones: Si nombredenota es inválido, lanza NotaInvalidaException. string nombreenlimpio = ValidarNombre(nombreDeNota); IList<Key> listateclas = this.mapeo[nombreenlimpio]; foreach(key tecla in teclas) // si 'tecla' no está asociada a la nota, no hace nada if (listateclas.contains(tecla)) listateclas.remove(tecla); public void EliminarTeclasPara(string nombredenota) /* Elimina del mapeo todas las teclas asociadas a la nota 'nombredenota'.

24 * * Precondiciones: nombredenota deber ser un nombre de nota musical válido. * * Postcondiciones: Si nombredenota es inválido, lanza NotaInvalidaException. string nombreenlimpio = ValidarNombre(nombreDeNota); this.mapeo[nombreenlimpio].clear(); public bool TieneTeclas() /* Devuelve true si ninguna nota en el mapeo tiene teclas asociadas. * Devuelve false si alguna nota en el mapeo tiene alguna tecla asociada. foreach (IList<Key> teclas in this.mapeo.values) if (teclas.count!= 0) return false; return true; NodoTemporal.cs namespace AlgoHero.Modelo using System; using System.Collections; using System.Collections.Generic; using System.Text;

25 using System.Windows.Input; public class NodoTemporal private double tiempodeinicio; // tiempo físico en segundos, donde empieza el acorde private double duracion; // tiempo físico en segundos, cuanto tiempo se mantienen presionadas las teclas private IList<Key> teclas; // conjunto de teclas a apretar #region Constructor public NodoTemporal(double tiempodeinicio, double duracion, IList<Key> teclas) /* Precondiciones: tiempodeinicio debe ser >= 0, duracion debe ser > 0 * Postcondicion: Lanza ArgumentException en caso parámetros inválidos. if (tiempodeinicio < 0 duracion <= 0) throw new ArgumentException("El tiempodeinicio debe ser >= 0 y/o la duracion > 0."); this.tiempodeinicio = tiempodeinicio; this.duracion = duracion; this.teclas = teclas; #region Propiedades public double TiempoDeInicio get return this.tiempodeinicio; public IList<Key> Teclas get return this.teclas; public double Duracion

26 get return this.duracion; #region Métodos public override bool Equals(object obj) NodoTemporal otronodo; try otronodo = (NodoTemporal)obj; return (this == otronodo); catch return false; public static bool operator ==(NodoTemporal unnodo, NodoTemporal otronodo) return ((unnodo.tiempodeinicio == otronodo.tiempodeinicio)); public static bool operator!=(nodotemporal unnodo, NodoTemporal otronodo) return!(unnodo == otronodo); Nota.cs namespace AlgoHero.Modelo using System; using System.Collections.Generic; using System.Text;

27 using System.Collections; public class Nota #region Atributos private string nombre; private int duracion; private double frecuencia; #region Constructor public Nota(string nombre, int duracion) /* Precondiciónes: nombre debe un nombre nota musical válido. * duracion debe ser la duración musical que corresponde a la nota musical. //Validacion de la duracion Duracion[] duraciones = (Duracion[])Enum.GetValues(typeof(Duracion)); List<Duracion> lista_duraciones = new List<Duracion>(duraciones); if(!lista_duraciones.contains((duracion)duracion)) throw new ArgumentException("Duracion de nota inválida."); this.duracion = duracion; //Lanza ArgumentException si el nombre no es correcto this.frecuencia = this.calcularfrecuencia(nombre); this.nombre = nombre.toupper(); #region Métodos private double CalcularFrecuencia(string nombre)

28 /* Precondición: nombre debe ser el nombre de una nota musical válida. * Postcondición: Devuelve la frecuencia de la nota ingresada. * Caso contrario, si la nota es inválida, se lanza una excepción ArgumentException. string[] Nombres = "DO", "DO#", "RE", "RE#", "MI", "FA", "FA#", "SOL", "SOL#", "LA", "LA#", "SI", "SILENCIO" ; double[] Frecuencias = , , , , , , , , 415.3, 440, , , 0.0 ; List<string> lstnombres = new List<string>(Nombres); inválida"); if (lstnombres.lastindexof(nombre.toupper())!= -1) return Frecuencias[lstNombres.IndexOf(nombre.ToUpper())]; else throw new ArgumentException("La nota ingresada es public override bool Equals(object obj) Nota otranota; try otranota = (Nota)obj; return (this == otranota); catch return false; public static bool operator ==(Nota unanota, Nota otranota) return ((unanota.frecuencia == otranota.frecuencia) && (unanota.duracion == otranota.duracion) && (unanota.nombre == otranota.nombre)); public static bool operator!=(nota unanota, Nota otranota)

29 return!(unanota == otranota); #region Propiedades public string Nombre get return this.nombre; public int Duracion get return this.duracion; public double Frecuencia get return this.frecuencia; Partitura.cs namespace AlgoHero.Modelo using System; using System.Collections.Generic; using System.Text; using System.Collections; public class Partitura : IEnumerable #region Atributos private int duraciondecompas; //Duracion en semicorcheas private IList compases;

30 #region Constructor public Partitura(int duraciondecompas) /* Crea una Partitura vacía y con la duración de compás recibida. * Precondición: duraciondecompas deber ser un número entero positivo. * Postcondición: lanza una excepción ArgumentException si la duraciondecompas no es válida. if (duraciondecompas <= 0) throw new ArgumentException("La duración debe ser un número positivo."); this.duraciondecompas = duraciondecompas; compases = new List<Compas>(); #region Métodos public void AddCompas(Compas uncompas) /* Precondición: uncompas debe tener una duración igual a la de la partitura. * Postcondición: Agregó el compás a la partitura si la duración es válida, caso * contrario lanza ArgumentException. if (uncompas.calcularduracion()!= this.duraciondecompas) throw new ArgumentException("El compás tiene una duración inválida"); compases.add(uncompas); public IEnumerator GetEnumerator() /* Implementa un iterador para esta clase ("foreach")

31 for (int i = 0; i < this.compases.count; i++) yield return this.compases[i]; public bool EsVacio() return (this.compases.count == 0); #region Propiedades public int DuracionDeCompas get return duraciondecompas; public IList Compases get return this.compases;

32 Checklist de corrección Esta sección es para uso exclusivo de la cátedra, por favor no modificar. Carpeta Generalidades Son correctos los supuestos y extensiones? Es prolija la presentación? (hojas del mismo tamaño, numeradas y con tipografía uniforme) Modelo Está completo? Contempla la totalidad del problema? Respeta encapsulamiento? Hace un buen uso de excepciones? Utiliza polimorfismo en las situaciones esperadas? Diagramas Diagrama de clases Está completo? Está bien utilizada la notación? Diagramas de secuencia Está completo? Es consistente con el diagrama de clases? Está bien utilizada la notación? Diagrama de estados Está completo? Está bien utilizada la notación? Diagrama de paquetes Está completo? Está bien utilizada la notación? Código Generalidades Respeta estándares de codificación? Está correctamente documentado?

33

Algoritmos y Programación III 75.07. Cursos 1, 2 y 3. Trabajo Práctico 2. Fi-ormula 3

Algoritmos y Programación III 75.07. Cursos 1, 2 y 3. Trabajo Práctico 2. Fi-ormula 3 Algoritmos y Programación III 75.07 Cursos 1, 2 y 3 Trabajo Práctico 2 Introducción Fi-ormula 3 Enunciado General Introducción El presente trabajo consiste en el desarrollo de un juego del tipo de carreras

Más detalles

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005

FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005 Dpto. de Ingeniería de Sistemas Telemáticos E.T.S.I. Telecomunicación Universidad Politécnica de Madrid FUNDAMENTOS DE PROGRAMACIÓN. SEPTIEMBRE 2005 Normas de examen: Con libros y apuntes Duración: 2 horas

Más detalles

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación

Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación Competencias IIC1103 Introducción a la Programación (I/2010) Interrogación 1 13 de Abril de 2010

Más detalles

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle

Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Tema 3: Herencia en C++ Programación Orientada a Objetos Curso 2008/2009 Begoña Moros Valle Contenido Tipos de herencia Herencia y niveles de visibilidad Herencia y creación Redefinición de métodos Conversión

Más detalles

Tema: Sobrecarga de Operadores.

Tema: Sobrecarga de Operadores. Programación II. Guía 7 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Sobrecarga de Operadores. Objetivos Describir como redefinir (sobrecargar) operadores para que funcionen

Más detalles

FIUBA - 7507 Algoritmos y programación 3

FIUBA - 7507 Algoritmos y programación 3 FIUBA - 7507 Algoritmos y programación 3 Trabajo práctico 2: BombitaRodriguez 1er cuatrimestre, 2012 (trabajo grupal) Nombre Padrón email Algoritmos y programación 3 1C2012 - TP 2: BombitaRodriguez 1/10

Más detalles

Programación Orientada a Objetos en JAVA

Programación Orientada a Objetos en JAVA Programación Orientada a Objetos en JAVA Jorge Pérez Introducción a la Computación Jorge Pérez Programación Orientada a Objetos en JAVA 1 / 36 Orientación a Objetos OO es un paradigma de modelación y programación

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

Pruebas de unidad con JUnit

Pruebas de unidad con JUnit Pruebas de unidad con JUnit Cuando se implementa software, resulta recomendable comprobar que el código que hemos escrito funciona correctamente. Para ello, implementamos pruebas que verifican que nuestro

Más detalles

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos

Conceptos. ELO329: Diseño y Programación Orientados a Objetos. ELO 329: Diseño y Programación Orientados a Objetos Conceptos ELO329: Diseño y Programación Orientados a Objetos 1 Paradigmas de Programación Historia: Los computadores parten cableados por hardware, Luego se introduce la programación en binario, Se desarrolla

Más detalles

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

En cualquier caso, tampoco es demasiado importante el significado de la B, si es que lo tiene, lo interesante realmente es el algoritmo. Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa

Más detalles

Tema: Arreglos de Objetos en C++.

Tema: Arreglos de Objetos en C++. Programación II. Guía 5 1 Facultad: Ingeniería Escuela: Computación Asignatura: Programación II Tema: Arreglos de Objetos en C++. Objetivos Específicos Describir la implementación de arreglos de Objetos.

Más detalles

Text Mining: Distancia de Levenshtein

Text Mining: Distancia de Levenshtein Text Mining: Distancia de Levenshtein La distancia de Levenshtein es un potente algoritmo que puede ser aplicado para tareas de Text Mining. Determina una medida de similaridad o cercanía entre dos cadenas

Más detalles

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011 EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011 1. (0,75 PUNTOS) Identificad a continuación las sentencias que son ciertas, descartando

Más detalles

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA

ISTP CIDET COMPUTACION E INFORMATICA ARREGLOS EN JAVA ARREGLOS EN JAVA I I N T R O D U C C I Ó N En las sesiones anteriores, los datos manejados en los programas han sido datos simples (carácter, entero, reales) En un gran número de problemas es necesario

Más detalles

UML, ejemplo sencillo sobre Modelado de un Proyecto

UML, ejemplo sencillo sobre Modelado de un Proyecto UML, ejemplo sencillo sobre Modelado de un Proyecto Normal &DOLILFDU 0L3DQRUDPD 626 (VFULEHSDUD1RVRWURV Por Armando Canchala Contenido Introducción Objetivo Requerimientos Casos de Uso Subcasos de Uso

Más detalles

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código

Tema 6. Reutilización de código. Programación 2015-2016. Programación - Tema 6: Reutilización de código Tema 6 Reutilización de código Programación 2015-2016 Programación - Tema 6: Reutilización de código 1 Tema 6. Reutilización de código Modularidad. Implementación de métodos. Uso de métodos. Programación

Más detalles

Modulo 1 El lenguaje Java

Modulo 1 El lenguaje Java Modulo 1 El lenguaje Java 13 - Codificación en Java Una de las grandes diferencias entre Java y Pascal en cuando a la codificación es que Java se trata de un lenguaje de los llamados case sensitive Esto

Más detalles

Tutorial de UML. Introducción: Objetivos: Audiencia: Contenidos:

Tutorial de UML. Introducción: Objetivos: Audiencia: Contenidos: Tutorial de UML Introducción: El Lenguaje de Modelamiento Unificado (UML - Unified Modeling Language) es un lenguaje gráfico para visualizar, especificar y documentar cada una de las partes que comprende

Más detalles

Introducción a la Programación Orientada a Objetos

Introducción a la Programación Orientada a Objetos Introducción a la Programación Orientada a Objetos El paradigma imperativo. En un programa se tienen una serie de variables con las cuales operamos y modificamos mediante sentencias y funciones para producir

Más detalles

4. METODOLOGÍA. 4.1 Materiales. 4.1.1 Equipo

4. METODOLOGÍA. 4.1 Materiales. 4.1.1 Equipo 4. METODOLOGÍA 4.1 Materiales 4.1.1 Equipo Equipo de cómputo. Para el empleo del la metodología HAZOP se requiere de un equipo de cómputo con interfase Windows 98 o más reciente con procesador Pentium

Más detalles

ALGORITMICA Y PROGRAMACION POR OBJETOS I

ALGORITMICA Y PROGRAMACION POR OBJETOS I ALGORITMICA Y PROGRAMACION POR OBJETOS I Nivel 2 Definiendo situaciones y manejando casos Marcela Hernández Hoyos Qué vamos a aprender en este nivel: Diferencia entre clase y objeto Modelar características

Más detalles

BANCOS. Manejo de Bancos. Como crear una ficha de Banco? Como modificar los datos de una ficha de Banco? Como borrar una ficha de Banco?

BANCOS. Manejo de Bancos. Como crear una ficha de Banco? Como modificar los datos de una ficha de Banco? Como borrar una ficha de Banco? BANCOS El Sistema de Gestión Administrativa permite el manejo de los movimientos bancarios. Seleccionada la opción de Bancos, el sistema presentara las siguientes opciones. Manejo de Bancos Manejo de movimientos

Más detalles

Programación de Objetos.Net C# LDP3501-2011 / DUOC-AV

Programación de Objetos.Net C# LDP3501-2011 / DUOC-AV Actividades: Programación de Objetos.Net C# LDP3501-2011 / DUOC-AV Creación y Manejo de una Colección de Negocio... 1 Creación de la Colección de Negocio... 1 Agregar elementos a la Colección... 1 Mejorando

Más detalles

Créditos académicos. Ignacio Vélez. Facultad de Ingeniería Industrial. Politécnico Grancolombiano

Créditos académicos. Ignacio Vélez. Facultad de Ingeniería Industrial. Politécnico Grancolombiano Créditos académicos Ignacio Vélez Facultad de Ingeniería Industrial Politécnico Grancolombiano 11 de noviembre de 2003 Introducción Cuando se habla del sistema de créditos muchas personas consideran que

Más detalles

Trabajo Práctico N 4: Diseño por Contratos

Trabajo Práctico N 4: Diseño por Contratos 1. Defina los contratos de las siguientes clases: Trabajo Práctico N 4: Diseño por Contratos a. La clase Fecha representa una fecha en el formato dia, mes y año. Especificar los contratos para asegurar

Más detalles

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler Task Scheduler Se necesita modelar una aplicación que permita definir tareas y ejecutarlas en forma programada. Las tareas pueden ser: La ejecución de programa cualquiera o comando del sistema operativo,

Más detalles

SISTEMA DE BECAS AL EXTERIOR

SISTEMA DE BECAS AL EXTERIOR SISTEMA DE BECAS AL EXTERIOR Manual del Becado En este manual se describen los diferentes procesos que ejecuta el becado en el desarrollo de sus estudios en el exterior. Todos los procesos serán ejecutados

Más detalles

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS

NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS 1 NIVEL 15: ESTRUCTURAS RECURSIVAS BINARIAS Árboles Binarios y Árboles Binarios Ordenados 2 Contenido Árboles binarios Iteradores Árboles binarios ordenados 3 Árboles binarios Algunas definiciones para

Más detalles

OPERADORES LÓGICOS Y DE COMPARACIÓN EN PHP. PRIORIDADES. EJEMPLOS. EJERCICIOS RESUELTOS. (CU00818B)

OPERADORES LÓGICOS Y DE COMPARACIÓN EN PHP. PRIORIDADES. EJEMPLOS. EJERCICIOS RESUELTOS. (CU00818B) APRENDERAPROGRAMAR.COM OPERADORES LÓGICOS Y DE COMPARACIÓN EN PHP. PRIORIDADES. EJEMPLOS. EJERCICIOS RESUELTOS. (CU00818B) Sección: Cursos Categoría: Tutorial básico del programador web: PHP desde cero

Más detalles

Introducción a la programación orientada a objetos

Introducción a la programación orientada a objetos Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación

Más detalles

CLASE # 5 TÉCNICAS DE CAJA BLANCA

CLASE # 5 TÉCNICAS DE CAJA BLANCA CLASE # 5 TÉCNICAS DE CAJA BLANCA 750105M - TÉCNICAS DE PRUEBAS DE SOFTWARE INGENIERÍA DE SISTEMAS Y COMPUTACIÓN UNIVERSIDAD DEL VALLE SEMESTRE 2013A - DOCENTE BEATRIZ FLORIAN GAVIRIA Basado Parcialmente

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS

PROGRAMACIÓN ORIENTADA A OBJETOS PROGRAMACIÓN ORIENTADA A OBJETOS Clase 1. Introducción Profesor: Diego Sánchez Gómez Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases

Más detalles

Java Inicial (20 horas)

Java Inicial (20 horas) Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción

Más detalles

11. Algunas clases estándar de Java (II)

11. Algunas clases estándar de Java (II) 122 A. García-Beltrán y J.M. Arranz 11. Algunas clases estándar de Java (II) Objetivos: a) Presentar la clase predefinida en Java para trabajar con arrays b) Interpretar el código fuente de una aplicación

Más detalles

Programación III. 1. Facultad: Ingeniería Escuela: Computación Asignatura:Programación III I. OBJETIVOS II. INTRODUCCIÓN TEÓRICA

Programación III. 1. Facultad: Ingeniería Escuela: Computación Asignatura:Programación III I. OBJETIVOS II. INTRODUCCIÓN TEÓRICA Programación III. 1 Facultad: Ingeniería Escuela: Computación Asignatura:Programación III GUIA1: Uso de C# modo consola. I. OBJETIVOS Qué el estudiante: Conozca el lenguaje de programación Visual C#.Net

Más detalles

Comente: Los bancos siempre deberían dar crédito a los proyectos rentables. Falso, hay que evaluar la capacidad de pago.

Comente: Los bancos siempre deberían dar crédito a los proyectos rentables. Falso, hay que evaluar la capacidad de pago. Explique Brevemente en que consiste el leasing y nombre los diferentes tipos existentes. Es un mecanismo de financiamiento de Activos el cual permite el uso del activo por un periodo determinado a cambio

Más detalles

TEMA 3. CLASES. EJERCICIOS

TEMA 3. CLASES. EJERCICIOS TEMA 3. CLASES. EJERCICIOS EJERCICIO 1 Considere la siguiente clase: public class IdentifyMyParts { public static int x = 7; public int y = 3; a. Cuáles son las variables de clase? b. Cuáles son las variables

Más detalles

10/09/2015 1.0 Primera versión del documento Federico González. 13/09/2015 1.0 Revisión de SQA Alejandro Tosi

10/09/2015 1.0 Primera versión del documento Federico González. 13/09/2015 1.0 Revisión de SQA Alejandro Tosi PlainStock Modelo de de Prueba Versión 5.0 Historia de revisiones Fecha Versión Descripción Autor 10/09/2015 1.0 Primera versión del documento Federico González 13/09/2015 1.0 Revisión de SQA Alejandro

Más detalles

Centro de Capacitación en Informática

Centro de Capacitación en Informática Fórmulas y Funciones Las fórmulas constituyen el núcleo de cualquier hoja de cálculo, y por tanto de Excel. Mediante fórmulas, se llevan a cabo todos los cálculos que se necesitan en una hoja de cálculo.

Más detalles

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015 Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015 1. Introducción Este documento

Más detalles

DISEÑO DEL SOFTWARE TRAFFIC ANALYZER. Analyzer. En este capítulo se reporta el desarrollo que se llevó a cabo para realizar el software

DISEÑO DEL SOFTWARE TRAFFIC ANALYZER. Analyzer. En este capítulo se reporta el desarrollo que se llevó a cabo para realizar el software 3 Diseño del Software Traffic Analyzer En este capítulo se reporta el desarrollo que se llevó a cabo para realizar el software que analiza el tráfico en redes de telefonía y computadoras, denominado Traffic

Más detalles

Organización de Computadoras

Organización de Computadoras Organización de Computadoras Departamento de Ciencias e Ingeniería de la Computación Universidad Nacional del Sur Segundo Cuatrimestre de 2015 Proyecto N 1 Programación en Lenguaje C El objetivo principal

Más detalles

Tienda Virtual Synergy (Parte 2)

Tienda Virtual Synergy (Parte 2) Tienda Virtual Synergy (Parte 2) El catálogo electrónico de productos es la base de toda la aplicación por lo que siempre será necesario instalarlo. Los siguientes dos módulos (tienda virtual y módulo

Más detalles

Objetivo de aprendizaje del tema

Objetivo de aprendizaje del tema Computación II Tema 3. Identificadores, palabras clave y tipos de datos Objetivo de aprendizaje del tema Al finalizar el tema serás capaz de: Distinguir i entre modificadores d válidos y no válidos. Enumerar

Más detalles

Estructura de datos tipo vector.

Estructura de datos tipo vector. Estructura de datos tipo vector. Hemos empleado variables de distinto tipo para el almacenamiento de datos (variables int, float, String) En esta sección veremos otros tipos de variables que permiten almacenar

Más detalles

Práctica 2: Simón dice

Práctica 2: Simón dice Práctica 2: Simón dice Fecha de entrega: 31 de enero de 2016 0.- Descripción del juego (Wikipedia.org) Simon dice es un juego electrónico, creado por Ralph Baer, que consiste en reproducir una secuencia

Más detalles

PART II: Moviendo al jugador

PART II: Moviendo al jugador UNITY PART II: Moviendo al jugador El movimiento se lo vamos a dar a través de un programa Definición de programa: Un programa es una secuencia de instrucciones, escritas para realizar una tarea específica

Más detalles

2.2 Transformada de Laplace y Transformada. 2.2.1 Definiciones. 2.2.1.1 Transformada de Laplace

2.2 Transformada de Laplace y Transformada. 2.2.1 Definiciones. 2.2.1.1 Transformada de Laplace 2.2 Transformada de Laplace y Transformada 2.2.1 Definiciones 2.2.1.1 Transformada de Laplace Dada una función de los reales en los reales, Existe una función denominada Transformada de Laplace que toma

Más detalles

Programación Orientada a Objetos con Java

Programación Orientada a Objetos con Java Programación Orientada a Objetos con Java M.C. Jorge Eduardo Ibarra Esquer jorgeeie@uabc.mx Sobrecarga de métodos Java permite la definición de dos o más métodos que tengan el mismo nombre, dentro de la

Más detalles

CURSO BÁSICO PARA TOCAR EL PIANO. 1. Introducción. Capítulo siguiente: 2 - Las claves

CURSO BÁSICO PARA TOCAR EL PIANO. 1. Introducción. Capítulo siguiente: 2 - Las claves CURSO BÁSICO PARA TOCAR EL PIANO 1. Introducción Capítulo siguiente: 2 - Las claves Aunque tenemos dos manos, existe solo un juego de teclas. Si tocamos de izquierda a derecha estas teclas, notaremos que

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos

Más detalles

CAPITULO 3 REDES HIBRIDAS-COMPLEJAS. 3.1 Descripción de la Red Híbrida Compleja (HCNN)

CAPITULO 3 REDES HIBRIDAS-COMPLEJAS. 3.1 Descripción de la Red Híbrida Compleja (HCNN) CAPITULO 3 REDES HIBRIDAS-COMPLEJAS 3.1 Descripción de la Red Híbrida Compleja (HCNN) La predicción de eventos caóticos que se presentan en un mundo que nos rodea es de gran interés. Especialmente en aquellos

Más detalles

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º

Titulación: Ingeniero Técnico en Informática de Gestión Curso: 2º 1. Ejercicio (1 punto) Dado el array A={8, 3, 7, 1, 4, 9, 5, 2, 6 Describir cual es el estado del array A después de cada paso principal del algoritmo: InsertionSort. {8, 3, 7, 1, 4, 9, 5, 2, 6 {3, 8,

Más detalles

Programación Orientada a Objetos. Java: Excepciones

Programación Orientada a Objetos. Java: Excepciones Programación Orientada a Objetos Java: Excepciones Eduardo Mosqueira Rey LIDIA Laboratorio de Investigación y desarrollo en Inteligencia Artificial Departamento de Computación Universidade da Coruña, España

Más detalles

Patrones Creacionales Builder. Patrones Creacionales Abstract Factory. Patrones Creacionales Singleton. Patrones Creacionales Prototype

Patrones Creacionales Builder. Patrones Creacionales Abstract Factory. Patrones Creacionales Singleton. Patrones Creacionales Prototype Temario Patrones de Diseño de Software Fundamentos de Ingeniería de SW Jocelyn Simmonds GOF: Patrones Creacionales Patrones Estructurales ILI-236 (JS) Patrones II 1 / 31 ILI-236 (JS) Patrones II 2 / 31

Más detalles

Curso 0 de Informática

Curso 0 de Informática Curso 0 de Informática 2015-2016 Tema 1: Introducción a la Informática y Conceptos básicos 1 Motivación (I): En los procesos industriales, cada vez es mayor el uso de sistemas informáticos para: Monitorización,

Más detalles

Etapa de Diseño: Gestión de Hotel Diseño de Sistemas Software

Etapa de Diseño: Gestión de Hotel Diseño de Sistemas Software Etapa de Diseño: Gestión de Hotel Diseño de Sistemas Software Antonio Falcón Aragón José Luis Falcón Ramírez Carlos Villegas Nuñez 15 de marzo de 2010 1 Índice 1. Diseño de la Aplicación 3 1.1. Diagrama

Más detalles

AGRUPA P R OBJET E OS 1

AGRUPA P R OBJET E OS 1 AGRUPAR OBJETOS 1 Son objetos que pueden almacenar un número arbitrario de objetos. Para formar colecciones usaremos la clase ArrayList. Para poder utilizar dicha clase habrá que importar el paquete java.util,

Más detalles

Clases y Objetos. Informática II Ingeniería Electrónica

Clases y Objetos. Informática II Ingeniería Electrónica Clases y Objetos Informática II Ingeniería Electrónica Los Tipos de Datos Hasta ahora, en un programa podemos usar para representar variables a: Tipos fundamentales : enteros (int), caracteres (char),

Más detalles

Tema 5. Diseño detallado.

Tema 5. Diseño detallado. Ingeniería del Software II 2011 Tema 5. Diseño detallado. Diseño del Software. Los requisitos y el análisis orientado a objetos se centran en aprender a hacer lo correcto: Entender los objetos de nuestro

Más detalles

Instalación del programa PSPP y obtención de una distribución de frecuencias.

Instalación del programa PSPP y obtención de una distribución de frecuencias. Práctica 2. Instalación del programa PSPP y obtención de una distribución de frecuencias. Con esta práctica instalaremos el programa PSPP. El programa es un software específico para el análisis estadístico

Más detalles

Modelos y Bases de Datos

Modelos y Bases de Datos Modelos y Bases de Datos MODELOS Y BASES DE DATOS 1 Sesión No. 10 Nombre: Álgebra Relacional Contextualización En qué consiste el álgebra relacional? Se ha planteado hasta el momento cada uno de los procesos

Más detalles

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009

Tecnólogo Informático- Estructuras de Datos y Algoritmos- 2009 Árboles Ejemplos de estructuras arborescentes: con forma de árbol Regla de Alcance: los objetos visibles en un procedimiento son aquellos declarados en él mismo o en cualquier ancestro de él (cualquier

Más detalles

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 E V E N T O S. Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu.

Programación Orientada a Objetos en C#.NET CAPÍTULO 8 E V E N T O S. Ing. Bruno López Takeyas, M.C. http://www.itnuevolaredo.edu. CAPÍTULO 8 E V E N T O S 2 http://www.itnuevolaredo.edu.mx/takeyas 1 Preguntas detonadoras Quéesunevento? Paraquésirve? Qué temas se deben dominar para implementar aplicaciones con eventos? Qué se requiere

Más detalles

Instalación y configuración inicial del sistema SIU-Kolla Versión 3.0.0

Instalación y configuración inicial del sistema SIU-Kolla Versión 3.0.0 Instalación y configuración inicial del sistema SIU-Kolla Versión 3.0.0 Tabla de contenido 1. Instalación inicial del sistema... 3 2. Configuración inicial del sistema... 5 3. Migración desde versión anterior...

Más detalles

Solución al Examen de Prácticas de Programación (Ingeniería Informática)

Solución al Examen de Prácticas de Programación (Ingeniería Informática) Solución al Examen de Prácticas de Programación (Ingeniería Informática) Junio 2006 Parte I. Cuestiones (3 puntos=50% nota del examen) 1) Se desea crear un conjunto de clases para representar en un programa

Más detalles

Escuela Universitaria Politécnica Grado en Ingeniería Informática Fundamentos de Programación II ENUNCIADO DE PRÁCTICAS CONVOCATORIA DE SEPTIEMBRE

Escuela Universitaria Politécnica Grado en Ingeniería Informática Fundamentos de Programación II ENUNCIADO DE PRÁCTICAS CONVOCATORIA DE SEPTIEMBRE Escuela Universitaria Politécnica Grado en Ingeniería Informática Fundamentos de Programación II ENUNCIADO DE PRÁCTICAS CONVOCATORIA DE SEPTIEMBRE OBJETIVOS Aprender el manejo de entrada/salida con ficheros

Más detalles

Ejercicio 1 (3 puntos).-

Ejercicio 1 (3 puntos).- URJC Ingeniería Técnica de Gestión Abril 2011 Asignatura: SOFTWARE AVANZADO Normas: La prueba consta de 2 ejercicios. La máxima nota del examen es un 8. Siendo la práctica la que añade los 2 puntos que

Más detalles

Primer Parcial Septiembre 5 de 2009

Primer Parcial Septiembre 5 de 2009 Primer Parcial Septiembre 5 de 2009 Algoritmos y Lenguajes II Reglas del juego Tal como se le dijo antes, durante este examen usted no puede pedir ABSOLUTAMENTE nada prestado a sus compañeros, ni hablar

Más detalles

9. Objetos y clases. 9.1. Clases

9. Objetos y clases. 9.1. Clases Programación orientada a objetos con Java 103 9. Objetos y clases Objetivos: a) Presentar el concepto de objeto, clase, atributo, método e instancia b) Interpretar el código fuente de una aplicación Java

Más detalles

Testing. Tipos, Planificación y Ejecución de Pruebas

Testing. Tipos, Planificación y Ejecución de Pruebas Testing Tipos, Planificación y Ejecución de Pruebas Contenido Definiciones del Testing de Software Objetivos, conceptos Tipos de Test Testing a-la RUP Rol del Testing en el proceso Artefactos Trabajadores

Más detalles

1. VIRTUALIZACION DEL PROCESO REAL.

1. VIRTUALIZACION DEL PROCESO REAL. CAPITULO IV DISEÑO 86 En este capítulo se muestra el diseño realizado para el desarrollo del CD Interactivo del Museo e Historia Militar de la Fuerza Armada de El Salvador, se ilustra claramente el proceso

Más detalles

Programación I: Funciones y módulos

Programación I: Funciones y módulos Programación I: Funciones y módulos Esteban De La Fuente Rubio 2 de abril de 23 Índice. Funciones.. Definición y llamado de funciones............................................. 2.2. Parámetros por omisión..................................................

Más detalles

Uso de funciones en Excel

Uso de funciones en Excel Uso de funciones en Excel Las funciones son fórmulas predefinidas que ejecutan cálculos utilizando valores específicos, denominados argumentos, en un orden determinado o estructura. Por ejemplo, la función

Más detalles

SGIC. Propuesta para Plan de Telefonía y Perfiles de Consumo

SGIC. Propuesta para Plan de Telefonía y Perfiles de Consumo SGIC Propuesta para Plan de Telefonía y Perfiles de Consumo A continuación se presenta una propuesta para tratar los planes de telefonía y los perfiles de consumo en el SGIC. Las clases naranjas son las

Más detalles

MANUAL DE USUARIOS DEL MODULO DE EVALUACIÓN DE DESEMPEÑO SISTEMA DE ADMINISTRACIÓN DE SERVIDORES PÚBLICOS (SASP)

MANUAL DE USUARIOS DEL MODULO DE EVALUACIÓN DE DESEMPEÑO SISTEMA DE ADMINISTRACIÓN DE SERVIDORES PÚBLICOS (SASP) MINISTERIO DE ADMINISTRACIÓN PÚBLICA (MAP) Dirección de Tecnología de la Información y Comunicación MANUAL DE USUARIOS DEL MODULO DE EVALUACIÓN DE DESEMPEÑO SISTEMA DE ADMINISTRACIÓN DE SERVIDORES PÚBLICOS

Más detalles

8. Sentencia return y métodos

8. Sentencia return y métodos 92 A. García-Beltrán y J.M. Arranz 8. Sentencia return y métodos Objetivos: a) Describir el funcionamiento de la sentencia return b) Interpretar el resultado de una sentencia return en el código fuente

Más detalles

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos 2.1. Principios básicos del Modelado de Objetos UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos Hoy en día muchos de los procesos que intervienen en un negocio o empresa y que resuelven

Más detalles

IV. CARGUE DE SOPORTES

IV. CARGUE DE SOPORTES IV. CARGUE DE SOPORTES Esta opción de cargue de soportes se ha realizado para efectuar las correcciones necesarias en cuanto a cargue de servicio se refiere, como anulación, modificación de RIPS de algún

Más detalles

SISTEMA DE APARTADO DE SALAS PARA EVENTOS

SISTEMA DE APARTADO DE SALAS PARA EVENTOS SISTEMA DE APARTADO DE SALAS PARA EVENTOS Dirección General de Comunicaciones e Informática Febrero 2008 1 INDICE 1. Objetivos del Sistema... 3 10. Solución de problemas... 23 2. Introducción... 4 3. Requisitos...

Más detalles

2.2.- Paradigmas de la POO

2.2.- Paradigmas de la POO 2.2.- Paradigmas de la POO Los principios propios de la orientación a objetos son: 2.2.1.- Abstracción de Datos 2.2.2.- Encapsulamiento 2.2.3.- Ocultamiento 2.2.4.- Herencia 2.2.5.- Polimorfismo Cualquier

Más detalles

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java

Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores, palabras reservadas, tipos de datos, operadores aritméticos y el sistema estándar de salida en Java Identificadores Las variables se utilizan en programación para almacenar temporalmente

Más detalles

Árboles. Cursos Propedéuticos 2015. Dr. René Cumplido M. en C. Luis Rodríguez Flores

Árboles. Cursos Propedéuticos 2015. Dr. René Cumplido M. en C. Luis Rodríguez Flores Árboles Cursos Propedéuticos 2015 Dr. René Cumplido M. en C. Luis Rodríguez Flores Contenido de la sección Introducción Árbol genérico Definición y representación Árboles binarios Definición, implementación,

Más detalles

1. PLANTEAMIENTO DEL PROBLEMA. 1.1 Descripción del problema

1. PLANTEAMIENTO DEL PROBLEMA. 1.1 Descripción del problema 1. PLANTEAMIENTO DEL PROBLEMA 1.1 Descripción del problema Son muchas las necesidades que presentan los niños y las niñas en el nivel de Educación Parvularia, debido a que es el primer peldaño de la educación

Más detalles

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL OBJETIVO Mejorar el nivel de comprensión y el manejo de las destrezas del estudiante para utilizar formulas en Microsoft Excel 2010. 1) DEFINICIÓN Una fórmula de Excel es un código especial que introducimos

Más detalles

Inteligencia Artificial II. Razonamiento con ontologías

Inteligencia Artificial II. Razonamiento con ontologías Inteligencia Artificial II Curso 2008 09 Trabajo de curso Razonamiento con ontologías Antonio Jiménez Mavillard Enunciado Una ontología es una representación formal de un determinado dominio o área de

Más detalles

SISTEMA ETAP en línea Estándares Tecnológicos para la Administración Pública

SISTEMA ETAP en línea Estándares Tecnológicos para la Administración Pública JEFATURA DE GABINETE DE MINISTROS SISTEMA ETAP en línea Estándares Tecnológicos para la Administración Pública Manual para los Organismos Índice Índice... 2 Descripción... 3 Cómo solicitar la intervención

Más detalles

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Introducción FACULTAD DE INGENIERÍA. Ordenación

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO. Introducción FACULTAD DE INGENIERÍA. Ordenación Introducción Uno de los procedimientos más comunes y útiles en el procesamiento de datos, es la clasificación u ordenación de los mismos. Se considera ordenar al proceso de reorganizar un conjunto dado

Más detalles

15. Parámetros o argumentos

15. Parámetros o argumentos Programación orientada a objetos con Java 161 15. Parámetros o argumentos Objetivos: a) Profundizar en el concepto de parámetro de una clase e indicar su mecanismo de funcionamiento. b) Interpretar el

Más detalles

MANUAL DE USUARIO CONTROL LOGÍSTICO DE TIEMPOS

MANUAL DE USUARIO CONTROL LOGÍSTICO DE TIEMPOS MANUAL DE USUARIO CONTROL LOGÍSTICO DE TIEMPOS Para ingresar al panel de control del Control Logístico de Tiempos, se debe ingresar a la página www.satrack.com e ingresar el usuario suministrado al adquirir

Más detalles

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES

CASO PRÁCTICO DISTRIBUCIÓN DE COSTES CASO PRÁCTICO DISTRIBUCIÓN DE COSTES Nuestra empresa tiene centros de distribución en tres ciudades europeas: Zaragoza, Milán y Burdeos. Hemos solicitado a los responsables de cada uno de los centros que

Más detalles

FRAMEWORK 2 Creación de Servicios Web

FRAMEWORK 2 Creación de Servicios Web Creación de Versión 1.1 Área de Aplicaciones Especiales y Arquitectura de Software Página 1 de 21 Hoja de Control Título Documento Referencia Responsable de Creación de Área de Aplicaciones Especiales

Más detalles

Para crear formularios se utiliza la barra de herramientas Formulario, que se activa a través del comando Ver barra de herramientas.

Para crear formularios se utiliza la barra de herramientas Formulario, que se activa a través del comando Ver barra de herramientas. Formularios TEMA: FORMULARIOS. 1. INTRODUCCIÓN. 2. CREACIÓN DE FORMULARIOS. 3. INTRODUCIR DATOS EN UN FORMULARIO. 4. MODIFICAR UN FORMULARIO 5. MANERAS DE GUARDAR UN FORMULARIO. 6. IMPRIMIR FORMULARIOS.

Más detalles

Manual del Modelizador. 28 de enero de 2009

Manual del Modelizador. 28 de enero de 2009 Índice de contenidos Introducción... 1 Proceso de ejecución de modelos... 1 Origen de datos... 3 Detalles técnicos... 3 Lenguaje de programación... 3 Estructura de los modelos... 3 Biblioteca de clases...

Más detalles

ÉSTE DOCUMENTO SUFRIÓ UN CAMBIO SIGNIFICATIVO

ÉSTE DOCUMENTO SUFRIÓ UN CAMBIO SIGNIFICATIVO Allende y Manuel Acuña, Edificio Pharmakon, Ramos Arizpe, Coahuila MEXICO, C.P. 25900 Teléfonos y Fax(844) 488-3346, 488-1344, 488-1667 01800-835-4224 calidad@icai.org.mx MANUAL DE PROCEDIMIENTOS DE LA

Más detalles

Multitarea en Java. Rafa Caballero - UCM

Multitarea en Java. Rafa Caballero - UCM Multitarea en Java Rafa Caballero - UCM Programa Monoproceso (monotarea) En cada momento hay una única instrucción ejecutándose Se dice que el programa es monotarea, o monoproceso o monohebra (o single

Más detalles

SECRETARÍA DE FINANZAS DEL DISTRITO FEDERAL P05 PANEL DE CONTROL DEL PROGRAMA HONORARIOS

SECRETARÍA DE FINANZAS DEL DISTRITO FEDERAL P05 PANEL DE CONTROL DEL PROGRAMA HONORARIOS SECRETARÍA DE FINANZAS DEL DISTRITO FEDERAL P05 PANEL DE CONTROL DEL PROGRAMA HONORARIOS ROLES: ADMN_HON_05 Fecha:30ƒ08ƒ2012 1/26 2/26 PANEL DE CONTROL DEL PROGRAMA DE HONORARIOS Objetivo : Permite crear

Más detalles

Plataforma de Contratación del Sector Público

Plataforma de Contratación del Sector Público del Sector Público Dirección General del Patrimonio del Estado Subdirección General de Coordinación de la Contratación Electrónica Versión: 1. Fecha: 10/12/2015 DEL PATRIMONIO DEL DEL ESTADO CONTROL DE

Más detalles

Metodología y Tecnología de la Programación

Metodología y Tecnología de la Programación Metodología y Tecnología de la Programación Curso 2008/09 Tema 7 Tipos de Datos Abstractos Temario 7.1 Concepto de Tipo de Datos Abstracto 7.2 Clasificación de Tipos de Datos Abstractos 7.3 Especificación

Más detalles