Ejemplo de Objetos: uso de cola (Queue) y pila (Stack)
Comenzamos con un ejercicio de objetos. Hacer un programa para dar de alta un paciente cuando llega al médico (datos: nombre, NSS y hora de llegada). En otra zona del formulario, aparecen los datos del paciente y el médico le da al botón de “atender”. Los pacientes vienen en una cola (queue): el 1º en llegar será el 1º en ser atendido.
En el formulario:
Public Class Form1
Private Cola As New Queue(Of Paciente) '(Of Paciente) se puede evitar el ponerlo.
'Contendrá sólo objetos de la clase Paciente.
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Inserta un paciente en la cola de espera.
Dim p As New Paciente(tbInsertarNombre.Text, tbInsertarNSS.Text, CDate(tbInsertarHora.Text))
'Inserta al final de la cola.
Cola.Enqueue(p)
tbInsertarNombre.Clear() : tbInsertarNSS.Clear() : tbInsertarHora.Clear()
tbInsertarNombre.Focus()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'Si la cola está vacía....
If Cola.Count = 0 Then
MsgBox("No hay pacientes para atender", MsgBoxStyle.Information, "Cola de espera")
Exit Sub
End If
'Extrae al paciente al frente de la cola.
Dim p As Paciente = Cola.Dequeue()
'Vuelco los datos del paciente.
tbAtenderNombre.Text = p.Nombre : tbAtenderNSS.Text = p.NSS : tbAtenderHora.Text = p.Horallegada
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
tbInsertarHora.Text = CStr(dtpHora.Value)
End Sub
End Class
Como se puede ver, también hemos practicado con el DateTimePicker.
En el módulo, creamos la clase “Paciente” (similar a la clase “Persona” de otra ocasiones).
Otro ejemplo de cola. Esta vez… UNA PILA. Pondremos STACK en lugar de QUEUE.
Con respecto al ejercicio anterior, son éstos los cambios:
Pila.Push(c) ‘Push es quien inserta al pricipio de la pila.
Dim c As Contenedor = Pila.Pop() 'Extrae al contenedor del principio de la pila.