Clases Completas 3era Parte (vanny Smith)

  • Uploaded by: api-3861109
  • 0
  • 0
  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Clases Completas 3era Parte (vanny Smith) as PDF for free.

More details

  • Words: 4,389
  • Pages: 71
Herencia  Volviendo al capítulo de clases y objetos podemos

decir que hay contextos donde se puede ver a la herencia entre clases como algo natural.

 Herencia quiere decir que una clase hereda atributos y

métodos de otra clase (lo vamos a ver con más detalle).

 Por ejemplo, supongamos que tenemos la clase de las

personas. class Persona {

private String nombre; private String direccion; private int fono; ...

}

1

Herencia  En una universidad tenemos distintos tipos de

personas. Hay estudiantes, profesores, secretarias etc. Persona

Estudiante

Secretaria Profesor

Todos ellos son personas, y por lo tanto tienen un nombre una dirección y un teléfono (atributos de la clase Persona) 2

Herencia  Sin embargo, cada grupo tiene características

propias. Por ejemplo, los estudiantes son personas, pero además de tener nombre dirección y teléfono tienen también un promedio ponderado acumulado, un año de ingreso, una lista de cursos aprobados etc. Persona

Estudiante

3

Herencia  En este caso decimos que Persona es una

superclase de Estudiante.

 También podemos decir que Estudiante es una

subclase de Persona.

 Una clase puede tener muchas subclases.

Por ejemplo, la clase Persona podría tener las subclases Estudiante, Profesor, Secretaria etc.

 Pero una clase puede tener sólo una

superclase.

4

Herencia  Podemos tener una cadena de herencias. Por

ejemplo: Persona

Estudiante

En este caso, Master tiene sólo una superclase que es Estudiante. Pero Master hereda de todas las clases que están antes en la cadena. En este caso hereda de las clases Estudiante y Persona.

Master

5

Herencia  Para indicar que una clase hereda o extiende a otra

clase escribimos: class <nombre de la clase> extends <nombre de la superclase>

 En el ejemplo anterior sería:

class Estudiante extends Persona  Cuando no usamos extends la clase Object es la

superclase por defecto. Esta clase es de Java y tiene algunos de los métodos que hemos usado hasta ahora (equals y toString). Object a= new Object();

6

Herencia  La clase Object es la única clase que no

tiene superclases.

 En el ejemplo anterior tenemos: class Persona { ... } class Estudiante extends Persona { ... }

Object

Persona Estudiante

7

Herencia  ¿Qué significa que una clase herede de otra?

Significa que hereda sus métodos y sus atributos. Pero además puede tener otros atributos y métodos propios de la clase.  Es decir, en este caso en la clase Estudiante no

necesitamos crear los atributos nombre, dirección y teléfono pues los hereda de la clase Persona.

 Sólo debemos incluir los atributos propios de los

estudiantes

class Estudiante extends Persona { private int ingreso; private double prom; private double[] notas; ... ...

8

Herencia  Luego cuando creemos un objeto de la clase

Estudiante: Estudiante a= new Estudiante();  Este objeto tendrá los atributos de la clase

Persona y los de la clase Estudiante.  Además podrá hacer uso de los métodos de

ambas clases.

9

Herencia  ¿Pero que pasará si los atributos de la

superclase son declarados como private?  Cuando los atributos son declarados como privados las subclases deberán usar los métodos getters y setters para acceder a los atributos.

10

Herencia  Si una subclase tiene un atributo que se llama

igual que un atributo de su superclase (no importa que no sean del mismo tipo), entonces en esta subclase ya no se tomará en cuenta el atributo de la superclase.  En este caso se dice que el atributo de la

superclase no es visible en la subclase .

11

Herencia  Si una subclase tiene un método con el

mismo encabezado que un método de su superclase, entonces cuando un objeto de esta subclase llame al método, Java se va a dirigir al método de la subclase, no al de la superclase.

 En este caso se dice que método de la

subclase elimina al método de la superclase.

 Cuando un objeto llama a un método, Java

empieza a buscar el método en la parte más baja de la cadena de herencia. 12

Herencia  Un ejemplo de esto, es el método toString de la clase

Object.

 Por ejemplo, supongamos que ni la clase Estudiante ni

la clase Persona tienen el método toString.  Entonces, si un objeto de la clase Estudiante llama al

método toString, Java buscará primero el método en la clase Estudiante, luego en la clase Persona y finalmente en la clase Object.  ¿Qué hace el método toString de la clase Object?

Imprime el nombre de la clase seguido por la dirección de memoria donde está guardado el objeto. 13

Polimorfismo  Supongamos que creamos el método

toString en la clase Persona y en la clase Estudiante.  Si creamos dos objetos a y b: Persona a= new Persona(); Estudiante b= new Estudiante();

 Cuando a y b llamen al método toString,

Java sabrá exactamente donde buscar.  Cuando a llame al método Java usará el método de la clase Persona.  Cuando b llame al método Java usará el método de la clase Estudiante.

14

Polimorfismo  A esta característica de los métodos se les

llama polimorfismo.  Esta idea de que al método que se llama depende del objeto que lo llama es la base de lo que veremos a continuación: Clases Abstractas  Por ejemplo, volvamos al ejemplo del

principio: Estudiante

Persona

Otras subclases Profesor

Secretaria 15

Polimorfismo  En una universidad, cuando necesitemos crear

una persona, es muy probable que se pueda clasificar ya sea como Estudiante, Profesor etc.  En este caso nunca tendríamos la necesidad

de crear un objeto de la clase Persona, sino que siempre crearemos objetos de alguna de sus subclases.  Además, para cada una de las subclases de la

clase Persona, podríamos crear un método llamado imprimeCurriculum.

16

Polimorfismo  Este método podría recibir un password y sólo

si el password es correcto imprimirá el currículo del objeto.

 Para cada una de las subclases (Estudiante,

Profesor, Secretaria etc) crearíamos un método llamado imprimeCurriculo. Este método será diferente en cada clase.

 Dado este contexto, podemos declarar a la

clase Persona como abstracta y dentro de ella declarar al método imprimeCurriculum también como abstracto. 17

Polimorfismo  Si una clase tiene al menos un método

abstracto entonces esta clase debe ser abstracta. Para que una clase o un método sea abstracto anteponemos abstract en su declaración.

 Si un método es abstracto, entonces cada

subclase debe proveer una definición para ese método. Pero en la superclase sólo lo declaramos (no lo implementamos).

 Si una clase es abstracta, no podemos crear

objetos de esa clase.

18

Polimorfismo abstract class Persona{

abstract public void imprimeCurriculum(String pass); ... } class Estudiante extends Persona{

public void imprimeCurriculum(String pass){ ... } } class Profesor extends Persona{

public void imprimeCurriculum(String pass){ ... } } etc...(Otras subclases)

19

Super 

Dentro una subclase podemos referirnos a su superclase usando la palabra super. Con esto podemos tener acceso a sus métodos y atributos (si no son privados)

¿En qué contextos necesitamos referirnos a una superclase?  Para usar su constructor (sólo explicaremos este)  Si una subclase tiene un atributo que se llama igual que un atributo de su superclase y queremos referirnos al atributo de la superclase.  Si una subclase tiene un método con el mismo encabezado que un método de su superclase y queremos usar el método de la superclase. 20

Super  No necesitarán entender los puntos 2 y 3, pero sí el

primero:

3. Para usar el constructor de la superclase

Supongamos que tenemos la siguiente clase Persona: class Persona { private String nombre; private String direccion; private int fono; public Persona(String n, String d, int f) { nombre= n; direccion= d; fono= f; } }

21

Super  Supongamos ahora que queremos crear la

clase Estudiante y en su constructor usar el constructor de la clase Persona. Para esto debemos llamar al constructor de Persona con: super( argumento 1, argumento 2, argumento 3)

Tres argumentos pues el constructor de la clase Persona tiene 3 parámetros

Esta oración debe estar al principio del constructor de la clase Estudiante. 22

Super class Estudiante extends Persona { private int ingreso; private double prom; private int creditos; public Estudiante(String n, String d, int f, int i) { super(n,d,f); ingreso= i; Aquí estamos llamando prom= 0.0; al constructor de la creditos=0; }

superclase de Estudiante, es decir, la clase Persona

)

23

Super  Cuando una clase extiende a otra, si nosotros

no ocupamos el constructor de la superclase (por ejemplo Persona) en el constructor de la subclase (por ejemplo Estudiante), Java implícitamente escribe al inicio del constructor de la subclase: super();

24

Super class Persona { ...//atributos public Persona(String n, String d, int f) { nombre= n; direccion= d; ¿Cúal es el error? fono= f; } } class Estudiante extends Persona { ...//atributos public Estudiante(String n, String d, int f, int i) { ingreso= i; prom= 0.0; creditos=0; } )

25

Super  El error es que Persona ya tiene un

constructor y este recibe 3 argumentos. Como ya tiene un constructor Java no le da el constructor por defecto (sin parámetros)  Por lo tanto ya no podemos decir:

Persona a= new Persona(); A menos que le agreguemos a la clase Persona otro constructor que no tenga parámetros. 26

Super  Por otro lado en Estudiante no llamamos al constructor

de Persona, por lo tanto Java al principio de este implícitamente escribe super(); Es como si tuviéramos:

public Estudiante(String n, String d, int f, int i) { super(); ingreso= i; prom= 0.0; creditos=0; }  Pero Persona no tiene un constructor sin parámetros,

por lo tanto el programa anterior no compilaría.

27

Concepto de Algoritmo  A lo largo del curso, cuando ustedes han

tenido que resolver un problema han usado algún algoritmo para resolverlo.  Por ejemplo, en la pregunta 3 de la Prueba 1 cada uno de ustedes uso distintos algoritmos para verificar que las filas de una matriz sumaran lo mismo.  Una forma de simple de explicar lo que es un algoritmo sería decir que es la forma en que resolvemos un problema, es el método que usamos para resolver un problema.

28

Concepto de Algoritmo  Claro que la defición de algoritmo es mucho

más específica que el decir que un algoritmo es simplemente un método.  He aquí la definición: Un conjunto de reglas bien definidas para la solución de un problema en un número finito de pasos

29

Concepto de Algoritmo  Por lo tanto, cuando se les pide que escriban

un algoritmo para resolver un problema, deben enumerar los pasos de su algoritmo.  Pero esta definición no sólo tiene sentido en

computación o matemáticas.  Cuando leemos una receta que indica paso a

paso como cocinar una comida, podemos decir que la receta es en realidad un algoritmo. 30

Búsqueda y ordenamiento  Los computadores se emplean frecuentemente para

almacenar y recuperar grandes volúmenes de datos.  Con su velocidad y facilidad de acceso, los

computadores aventajan a otros medios de almacenamiento como el papel.  Sin embargo, a pesar de la velocidad de los

computadores, es tal el volumen de información que se maneja hoy en día, que un problema importante es como buscar en forma eficiente un dato específico dentro de este gran volumen.  Cuando la información está ordenada es mucho más

fácil buscar algo en ella. Por este motivo, otro problema importante es cómo ordenar información en forma

31

Búsqueda y ordenamiento  Por esta razón, es importante estudiar la

forma en que los computadores pueden almacenar los datos, de modo que su recuperación (búsqueda) sea rápida.  Dónde queremos buscar:

• Páginas en Internet, registro civil, base de datos de

un banco, SII, biblioteca, sistema de emails, sistema de archivos, etc.

32

Búsqueda y ordenamiento  En todos nuestros ejemplos, se supondrá que

existe un arreglo que contiene datos.

 Búsqueda: Problema consiste en averiguar si

un determinado dato está o no en el arreglo, y si es así, queremos saber su posición.

 Ordenamiento: Problema consiste en ordenar

el vector en forma ascendente (de menor a mayor).

 En este capítulo estudiaremos varios

algoritmos de búsqueda y ordenamiento que difieren entre sí en cuanto a su complejidad y eficiencia. 33

Búsqueda y ordenamiento  Para búsqueda veremos:

- Búsqueda linear (para una lista desordenada) - Búsqueda binaria (para una lista ordenada)  Para ordenamiento veremos:

- Ordenamiento por inserción - Ordenamiento por selección - Ordenamiento usando el método burbuja.

34

Búsqueda y ordenamiento  Veremos un 4to algoritmo de ordenación, más

eficiente que los anteriores: Quicksort.

 Pero primero explicaremos métodos

recursivos.

 Quicksort es mas fácil de implementar en

forma recursiva.

 Además, al final de curso introduciremos el

concepto de complejidad de algoritmos y compararemos la eficiencia de estos algoritmos.

35

Algoritmo de búsqueda lineal  Recorrer el arreglo de inicio a fin, comparando

el dato buscado con cada elemento.

 Implementación:

• El método retornará la posición en que se encontró

el dato, o bien -1 para indicar que el elemento no se encontró (subíndice inválido).

36

Implementación

public static int busqueda(int[] arreglo, int num) { for (int i = 0; i < arreglo.length; i++) { if (num == arreglo[i]) return i; } return -1; }

37

Búsqueda binaria 

Puede aplicarse únicamente a un conjunto ordenado de datos.

Algoritmo: Se analiza la posición del medio. Si el largo de la lista es impar, se considera a la posición del medio a largo/2 -1. Si ahí se encuentra el dato buscado, terminamos. 5. Si el dato buscado no se encuentra al medio y la lista es de largo 1, terminar. 6. Si el dato buscado es menor, se busca en el subvector menor (sin incluir la posición del medio). Se vuelve al paso 1. 7. Si es mayor, se busca en el subvector mayor (sin incluir la posición del medio). Se vuelve al paso 1.  4.



Este es el algoritmo de búsqueda binaria, ahora nosotros podemos tomar este algoritmo e implementarlo en un programa en Java. Para esto haremos un método que retorne la posición del dato

38

Búsqueda binaria: Implementación public static int busquedaBin(int[] arreglo, int num) { int inicio, fin, pos; inicio = 0; fin = arreglo.length-1; while (inicio <= fin) { pos = (inicio + fin)/2; if (num < arreglo[pos]) fin = pos-1; else if (num > arreglo[pos]) inicio = pos+1; else return pos; } return -1; } 39

Ordenamiento por selección  Recorrer el arreglo buscando el mayor elemento, el cual

es “seleccionado” y colocado al final.

 Se repite este proceso hasta que se ha ordenado todo

el arreglo (n-1 veces, donde n es el tamaño del arreglo).

 Cada vez que se hace, se recorre todo el arreglo menos

el último elemento (de la pasada anterior). Es decir, por cada pasada la lista a ordenar disminuye su tamaño en 1.

 Implementación: • Método que ordena recibe un arreglo como parámetro. • En el método se modifica el orden de los datos dentro del arreglo. • ¡Al terminar la ejecución del método, el arreglo pasado como parámetro queda modificado!

40

Implementación public static void ordenarPorSeleccion(int[] arreglo) { int ultimo = arreglo.length; int posMayor, temp; while (ultimo > 1) { posMayor = 0; for (int i = 1 ; i < ultimo ; i++) if (arreglo[i] > arreglo[posMayor]) posMayor = i; temp = arreglo[ultimo - 1]; arreglo[ultimo - 1] = arreglo[posMayor]; arreglo[posMayor] = temp; ultimo--; } } 41

Ordenamiento por inserción  Ordenación por inserción (de menor a mayor):

• Suponemos que los k primeros datos de la lista

están ordenados; • Tomamos el dato k+1 y lo insertamos ordenadamente en la posición que le corresponda entre los k primeros datos; • Repetimos los pasos anteriores para k = 1, 2, …, N– 1.

42

Implementación public static void ordenarPorInsercion(int[] arreglo) { int i, k, aux; for (i = 1 ; i < arreglo.length ; i++) { aux = arreglo[i]; k = i-1; while (k >= 0 && arreglo[k] > aux) { arreglo[k+1] = arreglo[k]; k = k-1; } arreglo[k+1] = aux; } }

43

Ordenación: Método burbuja  Recorre el arreglo comparando elementos de dos en

dos ( el primero con el segundo, el segundo con el tercero etc), si uno de estos pares no está en orden, los intercambia.  Por ejemplo, dada esta lista:

8 6 11 44 15 73 4 9 26 64 2 Este sería el resultado de la primera pasada: 6 8 11 15 44 4 9 26 64 2 73 ¿Por qué creen que este método se llama burbuja?

44

Ordenación: Método burbuja  Se repite este proceso hasta que se ha

ordenado todo el arreglo.  Cada vez que se hace, se recorre todo el

arreglo menos el último elemento (de la pasada anterior). Es decir, por cada pasada la lista a ordenar disminuye su tamaño en 1.

45

Implementación public static void ordenarPorBurbuja(int[] arreglo) { int ultimo,i,temp; for(ultimo= arreglo.length-1; ultimo>0 ; ultimo--) { for(i=1; i<= ultimo; i++) { if(arreglo[i]< arreglo[i-1]) { temp= arreglo[i]; arreglo[i]= arreglo[i-1]; arreglo[i-1]= temp; } } } }

46

Ordenación: Método burbuja  ¿Qué podemos notar en este método?  ¿Cómo lo podríamos mejorar?  Implemente esta mejora del método burbuja.

47

¿Qué es recursividad?  Función que se define en términos de si

misma.

• Ejemplo: el valor de la función para el argumento n

puede definirse en términos del argumento n-1 (o alguno anterior). Caso Base • Siempre debe existir un caso base: Caso Recursivo

48

¿Qué es recursividad?  Siempre debe existir un caso base, pues es la

condición de término.  Es esta condición la que termina con el proceso recursivo. public static int factorial(int n) { if (n == 0 || n ==1) return(1); else return(n*factorial(n-1)); }

Condición de término

49

Ejemplo de recursividad en Java  Dada la siguiente sequencia:

t1= 3 tn= 2 x tn-1 -1 Escriba un método que reciba un número n y retorne el enésimo término de la sequencia. Use recursión. ¿Cuál es la condición de término?

50

Recursividad puede eliminarse  Todo proceso definido en forma recursiva se

puede definir también en forma no recursiva.  Eliminar la recursividad, normalmente tiene

dos efectos contrapuestos: 1. Aumenta la eficiencia (menos tiempo de ejecución).

¿Por qué? 4. Dificulta la programación (más tiempo de

programación).

51

Ordenación: Quicksort  Como dijimos recién, podemos eliminar

recursividad, sin embargo, hay programas que se pueden escribir en forma mas fácil, clara y rápida si usamos recursividad.  Algunos ejemplos donde recursividad

simplifica un programa son:

• Calcular el determinante de una matriz • Torres de Hanoi • Quicksort

52

Ordenación: Quicksort  El 4to método de ordenación (y el más

eficiente) que veremos en este curso es Quicksort.  La idea de este método es elegir un elemento x de la lista y colocar a la izquierda de x todos los elementos menores y a la derecha todos los mayores (si ordenamos de menor a mayor).  Por lo tanto x estará en su posición final pero a la derecha e izquierda los números todavía estarán desordenados, así que haremos lo mismo en cada sublista en forma recursiva.  Al elemento x lo llamaremos pivote.

53

Ordenación: Quicksort 

Este algoritmo funciona así: Dada una lista: 14 16 1 17 8 2 15



Elegimos como pivote al primer elemento de la lista. Además creamos dos variables derecha e izquierda, donde izquierda es el primer elemento de la lista y derecha el último. pivote= 14 14

16

izquierda

1

17

8

2

15 derecha 54

Ordenación: Quicksort 

Empezamos a mover derecha hacia el centro hasta que encuentre un elemento menor que el pivote. Si lo encuentra copia su valor en el elemento al que apunta izquierda.

pivote=14 2 16 izquierda 15

1

17

8

2

derecha

En este caso primero compara el 15 con el pivote, como 15 es mayor que el pivote (14) debe quedarse en la posición que está, pues debe estar a la derecha del pivote. Luego derecha se mueve una posición hacia el centro. Esta vez compara el 2 con el pivote, como el 2 es menor que el pivote (14) debe estar a la izquierda de este. Por lo tanto, en la posición que apunta izquierda copiaremos el valor 2.

55

Ordenación: Quicksort  Luego, empezamos a mover izquierda hacia el centro

hasta que encuentre un elemento mayor que el pivote. Si lo encuentra, copia su valor en el elemento al que apunta derecha.

pivote=14 15

2

16

1

izquierda

17

8

16 derecha

Izquierda se mueve una posición hacia el centro. Compara el 16 con el pivote, como 16 es mayor que el pivote (14) debe estar a la derecha de este. Por lo tanto, en la posición que apunta derecha copiaremos el valor 16.

56

Ordenación: Quicksort  Movemos derecha hacia el centro hasta que encuentre

un elemento menor que el pivote. Si lo encuentra, copia su valor en el elemento al que apunta izquierda.

pivote=14 15

2

8

1

izquierda

17

8

16

derecha

Derecha se mueve una posición hacia el centro. Compara 8 con el pivote, como 8 es menor que el pivote (14) debe estar a la izquierda de este. Por lo tanto, en la posición que apunta izquierda copiaremos el valor 8.

57

Ordenación: Quicksort  Movemos izquierda hacia el centro hasta que

encuentre un elemento mayor que el pivote. Si lo encuentra, copia su valor en el elemento al que apunta derecha.

pivote=14 15

2

8

1

17

17

16

izquierda derecha

Izquierda se mueve una posición hacia el centro. Compara 1 con el pivote, como 1 es menor que el pivote (14) no lo cambiamos de posición. Izquierda se mueve una posición más hacia el centro. Compara 17 con el pivote, como 17 es mayor que el pivote (14) debe estar a la derecha de este. Por lo tanto, en la posición que apunta derecha copiaremos el valor 17.

58

Ordenación: Quicksort  Movemos derecha hacia el centro hasta que encuentre

un elemento mayor que el pivote. Sin embargo, cuando se mueve, derecha e izquierda quedan en la misma posición. Esto indica que esta es la posición donde debe quedar el pivote.

2

8

1

14

17

16

15

izquierda derecha

Fin

59

Ordenación: Quicksort  Por cada pasada, un elemento queda en su

posición final (igual que selección y burbuja) . Esta vez el elemento que queda en su posición final es el pivote.  Como este elemento está en su posición final,

ahora sólo debemos preocuparnos por los elementos que están a la derecha e izquierda del pivote.  Para ordenar las listas que están a la derecha

e izquierda del pivote, aplicamos el método el forma recursiva a ambas listas.

60

Ordenación: Quicksort  Por ejemplo, apliquemos el método a la lista

que está a la izquierda del pivote: 2 pivote= 2

1

8

izquierda

pivote= 2

1

1

1 derecha

8

8

8

¿Cuál creen ustedes que es la condición de término?

izquierda derecha

pivote= 2

1

2

8

izquierda derecha 61

Ordenación: Quicksort

62

Quicksort: Implementación public static void quicksort(int[] a, int inicio, int fin) { //condicion de termino: una lista de tamagno 1 //Podriamos haber dicho if(inicio >= fin) if(inicio == fin) return; //Con este return se termina la ejecucion del metodo else if(inicio < fin) { String mover= "ahora_derecha"; int izquierda= inicio, derecha= fin; int pivote= a[inicio];

63

Quicksort: Implementación while(izquierda < derecha) { if(mover.equals("ahora_derecha")) { while(a[derecha] >= pivote && derecha--;

derecha > izquierda)

a[izquierda]= a[derecha]; mover= "ahora_izquierda"; } if(mover.equals("ahora_izquierda")) { while(a[izquierda] <= pivote && izquierda++;

izquierda < derecha)

a[derecha]= a[izquierda]; mover= "ahora_derecha"; } } 64

Quicksort: Implementación //Cuando se termina el while derecha=izquierda

a[derecha]= pivote; quicksort(a, inicio, derecha-1); quicksort(a, derecha+1, fin); }

65

Simulación en Ingeniería  Existen sistemas complejos en diferentes dominios de

problemas que necesitamos entender: Economía, nueva tecnologías, clima, …  Típicamente este tipo de sistemas involucran muchas

variables.

• ¿Es posible modelar el clima? ¿Predecir correctamente los niveles de contaminación?

 Para poder entenderlos: Creamos un modelo que

represente y modele las propiedades del sistema.

• Ejemplo: Un tornado, la atención de clientes en los cajeros de un supermercado, etc.

66

Simulación  El modelo del problema abstrae sus propiedades

relevantes.

• La cajera, los clientes que llegan a la caja, el cliente actualmente atendido.

 Simulación consiste en modelar el comportamiento del

sistema.

• Atención de clientes en un día, niveles de contaminación en un mes. • Este comportamiento ocurre en el tiempo.

 En cada instante de tiempo ocurren eventos que

cambian los elementos del modelo.

• Al atender un cliente la cajera cambia de estado “desocupado” a “ocupado”.

 El proceso o comportamiento del problema puede

entenderse como una sucesión de cambios que ocurren en el tiempo.

67

Técnicas básicas de simulación Paso del tiempo:  Se consideran unidades de tiempo discretas:

Minutos, segundos, horas, días, meses, …

 En cada instante de tiempo ocurren eventos.

t0: Llega a la caja un cliente. El cliente tarda en ser atendido 3 unidades de tiempo. La caja estará ocupada desde t0 hasta t2. t1: No llegan clientes. 68

Técnicas básicas de simulación t2: Llega a la caja un cliente. Como la caja está ocupada el cliente debe esperar. t3: No llegan clientes. El cliente 2 empieza a ser atendido dado que la caja se libera. … Ocurrencia de Eventos.

69

Atención de cajas en un supermercado  Simular la atención de clientes en una caja de

supermercado. Interesa conocer:

• Tiempo de espera de cada cliente. • Distribución del tiempo de la caja. (¿En qué momento está ocupada?)

 Suponga que se simularán n minutos del

proceso.

70

Atención de cajas en un supermercado for (tiempo = 0; tiempo < n; tiempo++) { ¿Llegó un cliente a la cola (s /no)? • No: pasar al siguiente minuto. ¿La cajera está ocupada (s /no)? • S : entonces está atendiendo a otro cliente. ¿Por cuanto tiempo? • El cliente queda en espera hasta que la cajera se desocupe.

}

Finalmente la cajera quedará desocupada • El cliente anterior que está siendo atendido abandona la cola. • Se atiende al siguiente cliente en la cola. • ¿Cuanto tiempo toma atender al cliente? La cajera queda ocupada por ese tiempo.

71

Related Documents