Práctica
C.U: 35-4596
GRUPO: 2
SUCRE-BOLIVIA
2019
SIS457 – PROGRAMACION AVANZADA - Práctica Nro. 1
Análisis Algorítmico – Patrones de Diseño
1. En el siguiente ejemplo, cuantas operaciones serían requeridas, represente a través de una expresión
matemática. Represente cada operación con una constante
Si consideramos la notación O Intuitivamente, sólo se considera el término más importante y se ignoran los
factores constantes. Por lo que indicamos que la segunda expresión es la que consume más recursos ( )
Debido a que este tipo de notación solo tomaría en cuenta la el mayor consumo de recursos como O = n3
3. Indique el termino más relevante en las siguientes expresiones, para poder obtener O ()
En esta expresión el termino relevante es n, O = n log( log n) (ignorando constantes, porque es el mayor orden)
4. ¿Cuál es la complejidad de las siguientes instrucciones?
Así es como sería el tiempo de ejecución y la complejidad del algoritmo para este problema:
La complejidad de esta instrucción es O (log n) para la primera instrucción. Sí, los bucles anidados son una
forma de obtener rápidamente una gran notación O. Normalmente (pero no siempre) un bucle anidado en otro
causará O (n²). El ciclo interno se ejecuta i veces, para cada valor de i. El ciclo externo se ejecuta n veces.
por lo tanto se ve un patrón de ejecución de la siguiente manera: 1 + 2 + 3 + 4 + ... + n veces, por lo tanto, nuestro
límite es de O (n log n).
5. Asuma que en las expresiones en la lista de abajo se cuenta con el tiempo T(n) de procesamiento que se
necesita para evaluar un dato “n” de entrada en el algoritmo. Determine ¿cuál o cuáles es/son el termino
dominante?
Rpta:
B1 = Ball::getInstance();
B2 = Ball::getInstance();
B3 = Ball::getInstance();
B4 = Ball::getInstance();
B5 = Ball::getInstance();
B6 = Ball::getInstance();
b1.bounce();
b2.bounce();
8. Implemente un ejemplo de los principios sólidos de Patrones de Diseño para un contexto de Videojuego,
Académico o Venta y compra de Productos. (Sigle responsability, Open-Closed, Liskov Substitution,
Interface segregation, Dependency Inversion)
Single responsability
Se basa en que Una clase class Videjuego {
debe tener una sola public void add (int x, int y) {
razón para cambiar. En System.out.println(x + y);
lenguajes estáticos y }
compilados de manera }
estática, varios motivos class Juego_maquina {
pueden llevar a varias public static void add(int x, int y) {
System.out.println(x + y);
implementaciones no
}
deseadas. Si hay dos }
razones diferentes para class Videojuego {//Esta clase solo es responsable de sumar números.
cambiar, es posible que public static int add(int x, int y) {
dos equipos diferentes return x + y;
puedan trabajar en el }
mismo código por dos }
razones diferentes. Cada
uno tendrá que class PrintStreamDecider { // Esta clase es la única responsable de
implementar su solución, decidir. // cual PrintStream es para ser usado
que en el caso de un public static PrintStream getPrintStream() {
lenguaje compilado return System.out;
}
}
return local;
}
Liskov Substitution
}
class LspTest
{
private static Rectangulo getNewRectanulo()
{
r.setAlto(5);
r.setAncho (10);
System.out.println(r.getArea());
}
}
Interface segregation
El Principio de Segregación de Interfaz (ISP): los clientes no deben ser obligados a depender de
las interfaces que no utilizan .
SomeButton solo tiene acceso a los métodos de control relacionados con los botones, y
SomeWindow solo tiene acceso a los métodos de control relacionados con la ventana, aunque
los SomeController objetos se pueden conectar a ambos.
Dependency Inversion
El principio de inversión de dependencia (DIP) : los módulos de alto nivel no deben depender de los módulos de
bajo nivel. Ambos deben depender de las abstracciones.
public:
};
public:
// implementación concreta
String convertDocumentToString(Document* doc);
};
public:
// implementación concreta
String convertDocumentToString(Document* doc);
};