Vous êtes sur la page 1sur 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:

En este caso, Master tiene


Persona sólo una superclase que es
Estudiante. Pero Master hereda
de todas las clases que están
antes en la cadena. En este
Estudiante 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 Object


{
...
} Persona
class Estudiante extends 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: Persona

Otras subclases
Estudiante
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;
creditos=0;
al constructor de la
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
31
importante es cómo ordenar información en forma
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:
4. 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.

 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 40
como parámetro queda modificado!
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).
• Siempre debe existir un caso base: 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) Condición de
return(1); término
else
return(n*factorial(n-1));
}

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 1 17 8 2 15

izquierda 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 1 17 8 2
izquierda derecha
15

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 55
la posición que apunta izquierda copiaremos el valor 2.
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 2 16 1 17 8 16
15
izquierda 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 2 8 1 17 8 16
15 izquierda 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 2 8 1 17 17 16
15 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 58
posición que apunta derecha copiaremos el valor 17.
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 8 1

pivote= 2 1 8 1

izquierda derecha ¿Cuál creen


ustedes que
pivote= 2 1 8 8 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 > izquierda)
derecha--;

a[izquierda]= a[derecha];
mover= "ahora_izquierda";
}

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

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

Vous aimerez peut-être aussi