martes, 16 de febrero de 2010

Enunciado: En un proyecto, se han determinado las siguientes tareas, duraciones y dependencias:

IdTarea
Descripción
Duración
Dependencias
a
Análisis de requerimientos
8

b
Conseguir recursos hardware
10

c

8
a,b
d
Diseñar la solución
9
a
e
Conseguir programadores
5
b
f
Diseñar las interfaces de usuario
3
c,d
g
Codificar el programa
2
d,e
h
Pruebas y depuración
4
f,g
i
Capacitación de programadores 3
e,f

Se pide:
(1) Dibujar el grafo de dependencias de tareas que incluya las duraciones de las mismas.
(2) Calcular los tiempos mínimos de inicio y finalización de cada tarea.
(3) Encontrar las tareas de ruta crítica y representar dicha ruta en el grafo anteriormente dibujado.
(4) Calcular las holguras de tiempo.

Desarrollo y explicación:

El primer punto nos pide dibujar un grafo de dependencias. Comenzamos con la tarea a. Según lo planificado, no lleva dependencias por lo que únicamente dibujamos el nodo:



El mismo razonamiento podemos seguir para la tarea b, con esto el grafo sigue:


La tarea c tiene como dependencias a la a y a la b, es decir, no puede comenzar hasta no haber terminado a y b. Esto se representa en el grafo así:

Seguimos la misma lógica para las demás tareas, con lo cual el grafo queda así:


Para completar el punto agregamos las respectivas duraciones a cada tarea según la tabla dada:


Con lo cual finalizamos el primer punto.

El segundo punto nos pide calcular los tiempos mínimos de inicio y finalización para cada tarea. Lo haremos directamente en la tabla agregando dos columnas respectivas:

IdTarea
Descripción
Duración
Dependencias
Tiempo inicio
Tiempo final
a
Análisis de requerimientos
8

0
8
b
Conseguir recursos hardware
10

0
10
c

8
a,b
10
18
d
Diseñar la solución
9
a
8
17
e
Conseguir programadores
5
b
10
15
f
Diseñar las interfaces de usuario
3
c,d
18
21
g
Codificar el programa
2
d,e
17
19
h
Pruebas y depuración
4
f,g
21
25
i
Capacitación de programadores 3
e,f
21
24

Explicación:
Iniciamos con la tarea a, la cual no tiene dependencias, por tanto su tiempo mínimo de inicio es 0 y su tiempo mínimo de finalización se obtiene sumando su duración, o sea 0 + 8 = 8.

La tarea b tampoco tiene dependencias, por lo que tiempo mínimo de inicio es 0 y tiempo mínimo de finalización es 0 + 10 = 10.

Para la tarea c se tienen a y b como dependencias. De éstas dos la que tiene mayor tiempo mínimo de finalización es b, con 10. Dicho 10 lo trasladamos al tiempo mínimo de finalización de c. Ahora le sumamos la duración de c para encontrar su tiempo mínimo de finalización: 10 + 8 = 18.

La tarea d sólo tiene una dependencia, la a. Por tanto, tiempo de inicio: 8, tiempo de finalización 8 + 9 = 17.

La tarea e sólo tiene una dependencia, la b. Por tanto, tiempo de inicio: 10 y tiempo de finalización 10 + 5 = 15.

La tarea f tiene c y d como dependencias. De éstas la que tiene mayor tiempo mínimo de finalización es c con 18. Por tanto, tiempo de inicio: 18 y tiempo de finalización: 18 + 3 = 21.

La tarea g tiene d y e como dependencias. De éstas la que tiene mayor tiempo mínimo de finalización es d con 17. Por tanto, tiempo de inicio: 17 y tiempo de finalización: 17 + 2 = 19.

La tarea h tiene f y g como dependencias. De éstas la que tiene mayor tiempo mínimo de finalización es f con 21. Por tanto, tiempo de inicio: 21 y tiempo de finalización: 21 + 4 = 25.

La tarea i tiene e y f como dependencias. De éstas la que tiene mayor tiempo mínimo de finalización es f con 21. Por tanto, tiempo de inicio: 21y tiempo de finalización: 21 + 3 = 24.

Con lo cual, finalizamos el punto 2.

El punto 3 nos pide encontrar las tareas de la ruta crítica y representarlas en el grafo dibujado en el punto 1.

Agregamos a la tabla una columna para la ruta crítica:

IdTarea
Descripción
Duración
Dependencias
Tiempo inicio
Tiempo final
Ruta
crítica
a
Análisis de requerimientos
8

0
8

b
Conseguir recursos hardware
10

0
10
*
c

8
a,b
10
18
*
d
Diseñar la solución
9
a
8
17

e
Conseguir programadores
5
b
10
15

f
Diseñar las interfaces de usuario
3
c,d
18
21
*
g
Codificar el programa
2
d,e
17
19

h
Pruebas y depuración
4
f,g
21
25
*
i
Capacitación de programadores 3
e,f
21
24


Explicación:

Comenzamos con la tarea que tiene un mayor tiempo mínimo de finalización. Esa tarea es la h, con 25. La marcamos como tarea crítica.

Ahora vemos las dependencias de h, las cuales son f, g. De éstas dos seleccionamos la que tenga mayor tiempo mínimo de finalización, la cual es f con 21, por tanto, también marcamos f como crítica.

Ahora vemos las dependencias de f, las cuales son c, d. De éstas dos seleccionamos la que tenga mayor tiempo mínimo de finalización, la cual es c con 18, por tanto, también marcamos c como crítica.

Ahora vemos las dependencias de c, las cuales son a, b . De éstas dos seleccionamos la que tenga mayor tiempo mínimo de finalización, la cual es b con 10, por tanto, también marcamos b como crítica.

Como b no tiene dependencias, el algoritmo termina.

Ahora, resaltamos en el grafo, las tareas de la ruta crítica:



Con lo cual, terminamos el punto 3.

El punto 4 requiere los tiempos de holgura. Cabe destacar que dichos tiempos le pertenecen únicamente a las tareas no críticas.

IdTarea
Descripción
Duración
Dependencias
Tiempo inicio
Tiempo final
Ruta
crítica
a
Análisis de requerimientos
8

0,1
8,9

b
Conseguir recursos hardware
10

0
10
*
c

8
a,b
10
18
*
d
Diseñar la solución
9
a
8,9
17,18

e
Conseguir programadores
5
b
10,14
15,19

f
Diseñar las interfaces de usuario
3
c,d
18
21
*
g
Codificar el programa
2
d,e
17,19
19,21

h
Pruebas y depuración
4
f,g
21
25
*
i
Capacitación de programadores 3
e,f
21,22
24,25


Explicación:

Comenzamos con la tarea no crítica con mayor tiempo de finalización. Esa es la i con 24. Como i no tiene tareas sucesoras, es decir, tareas de las cuales i sea dependencia, tomamos el mayor tiempo mínimo de finalización de todas las tareas, críticas o no. Ese tiempo es el de h con 25. Colocamos entonces el 25 como holgura en el tiempo de finalización de i y nos queda: 24, 25. Como entre 24 y 25 hay una diferencia de 1 unidad de tiempo, aplicamos la misma diferencia al tiempo de inicio y nos queda 21, 22.

Seguimos con la siguiente tarea no crítica con mayor tiempo de finalización. Esa es g con 19. Los sucesores de g son: h. De h tomamos el menor tiempo de inicio, es decir, 21. Ese 21 lo agregamos al tiempo de finalización de h quedándonos: 19,21. Como entre 19 y 21 hay una diferencia de 2 unidades de tiempo, aplicamos la misma diferencia al tiempo de inicio y nos queda 17,19.

Seguimos con la siguiente tarea no crítica con mayor tiempo de finalización. Esa es d con 17. Los sucesores de d son: f y g. Entre éstas dos tareas comparamos los mayores tiempos mínimos de inicio, es decir, 18 y 19. Tomamos el menor, es decir, 18. Ese 18 lo agregamos al tiempo de finalización de d quedándonos: 17,18. Como entre 17 y 18 hay una diferencia de 1 unidad de tiempo, aplicamos la misma diferencia al tiempo de inicio y nos queda 8,9.

Seguimos con la siguiente tarea no crítica con mayor tiempo de finalización. Esa es e con 15. Los sucesores de e son: g e i Entre éstas dos tareas comparamos los mayores tiempos mínimos de inicio, es decir, 19 y 22. Tomamos el menor, es decir, 19. Ese 19 lo agregamos al tiempo de finalización de e quedándonos: 15, 19. Como entre 15 y 19 hay una diferencia de 4 unidades de tiempo, aplicamos la misma diferencia al tiempo de inicio y nos queda 10,14.

Seguimos con la siguiente tarea no crítica con mayor tiempo de finalización. Esa es a con 8. Los sucesores de a son: c y d. Entre éstas dos tareas comparamos los mayores tiempos mínimos de inicio, es decir, 10 y 9. Tomamos el menor, es decir, 9. Ese 9 lo agregamos al tiempo de finalización de a quedándonos: 8, 9. Como entre 8 y 9 hay una diferencia de 1 unidad de tiempo, aplicamos la misma diferencia al tiempo de inicio y nos queda 0,1.

Al no quedar más tareas no críticas, el algoritmo ha terminado, así como también el punto 4 y el ejercicio.

En caso de otras dudas o correcciones, comunicarlas en clase o al correo: joaquin@ugb.edu.sv

Saludos.

4 comentarios:

  1. muchas gracias lic.

    Dios le bendiga...

    ResponderEliminar
  2. Antipatron: “Problema del Circulo Elipse”
    (conocido a veces como problema del cuadrado-rectángulo) ilustra un número de trampas que puedan presentarse al usar polimorfismo del subtipo en el modelar del objeto. Las ediciones se encuentran lo más comúnmente posible al usar programación orientada al objeto.
    El problema se refiere a qué subtyping/herencia la relación debe existir en medio clases cuál representa círculos y elipses. Más generalmente, el problema ilustra las dificultades que pueden ocurrir cuando una clase baja contiene métodos qué mutate un objeto de una forma que pudo invalidar un invariante (más fuerte) de a encontrado en una clase derivada, el causar Principio de la substitución de Liskov ser violado.
    La existencia del problema de la círculo-elipse se utiliza a veces para criticar la programación orientada al objeto. Puede también implicar que los taxonomies jerárquicos son difíciles de hacer el universal, implicando que los sistemas de clasificación circunstanciales pueden ser más prácticos.

    Alumno: Edgard López
    Código: SMIS 048808
    Grupo : “B”

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. BaseBean es un objeto de utilidad donde las entidades concretas se derivan (por medio de subclases). El diseño apropiado sugiere que la funcionalidad heredada debe proporcionarse a través de la delegación en su lugar. El BaseBean es un ejemplo de un anti-patrón (donde el "Bean" parte del nombre proviene de la convención de nomenclatura estándar de Java para un objeto de entidad genérica, o JavaBean).
    Un "BaseBean" no es un objeto del mundo real, ni es descriptiva. Probablemente, tiene que ser rediseñado como una clase más significativa y se hace referencia en lugar de ampliarse.
    Alumno: Brenda Cristela Gomez Reyes
    Codigo: SMIS 029608
    Grupo: "B"

    ResponderEliminar

Seguidores