Emanuel's profileCrónicas de ellPhotosBlogListsMore ![]() | Help |
|
December 12 DelegadosDelegados: - Es un tipo de referencia asociada a un método compartido. - Es una instancia de un método de un objeto. - Es una clase que puede contener una referencia a un método.
En palabras más simples, un delegado es un puntero, o un apuntador a un método. Si has trabajado algún tipo de lenguaje que te dio la oportunidad de trabajarlos como c, c++; Sabrás de lo que hablo, si no, es mejor que le des una leída a esto de los punteros, y después regreses a estudiar esto.En este ejemplo, vamos a crear un delegado y apuntarlo a un método, invocaremos al método de la forma común, y después con el delegado:
'Esta clase contiene el método que mandará una mensaje
Public Class miMensaje
Public Sub Mensaje(ByVal Msj As String)
Console.WriteLine("Este mensaje proviene de: ")
Console.WriteLine(Msj)
Console.ReadKey()
Console.WriteLine()
End Sub
End Class
Module Module1
'Asi declaramos un delegado, observen que tiene
'la forma del método al que apuntará, pues hasta
'el momento solo esta declarado, pero no esta apuntando
'a nada...
Delegate Sub delegateMsj(ByVal M As String)
Sub Main()
'Primero mandaremos un mensaje instanciando a la clase miMensaje
Dim unMensaje As New miMensaje
unMensaje.Mensaje("unMensaje.Mensaje")
'Y Ahora con un delegado.
'Primero le instanciamos, ¿recuerdan las definiciones?
Dim Delegado As delegateMsj
'Le damos una dirección
'Y esta, es de unMensaje y del método a direccionar
Delegado = AddressOf unMensaje.Mensaje
'y por último lo invocamos
Delegado.Invoke("Delegado.Invoke")
End Sub
'Interesante, ¿cierto?
End Module
En el ejemplo anterior, no había necesidad de un delegado pues se podía mostrar un mensaje (tal y como se demostró) instanciando la clase, e invocando al método de la clase con un objeto. Pero, ¿Qué pasa cuando tenemos un método en la clase principal, en este caso -Module1-?. Y necesitamos invocarlo desde otro lugar, miClase?. Instanciando?, no se puede. Aquí, si hay necesidad de un delegado, y pues este es el ejemplo:
Module Module1
'Este método es el que queremos usar desde Module1 y miClase
Sub Mensaje(ByVal Msj As String)
Console.WriteLine("Este mensaje proviene de:")
Console.WriteLine(Msj)
Console.ReadKey()
Console.WriteLine()
End Sub
'Método principal Main
Sub Main()
'De la forma normal, pero desde la clase principal
Mensaje("-> Module: Module1") 'Invocamos el método
'Con delegados, pero desde la Clase miClase
Dim Clase As New miClase 'Instanciamos la Clase: MiClase
Clase.otroMensaje() 'Invocamos el método: otro mensaje
End Sub
End Module
Public Class miClase
'¿Por Qué aqui si necesitamos un delegado?
'Porque no podemos instanciar:
'dim miMain as New Module1...?, simplemente no.
'Mejor usamos un Delegate.
'Con El mismo formato de Mensaje
Delegate Sub DelegateMensaje(ByVal Msj As String)
Public Sub otroMensaje()
'Ya saben, instanciamos
Dim Delegado As DelegateMensaje
'Le damos una dirección
Delegado = AddressOf Module1.Mensaje
'y lo invocamos...
Delegado.Invoke("-> Clase: MiClase")
'Simple?, supongo que ahora si lo es. Cierto?
End Sub
'Saludos...
'Atte: ellSoft
End Class
Emanuel Lira Lozada
ellSoft
December 09 Matrices en VB 2005Algo sobre Matrices y cómo se manejan en Visual Basic 2005.
Matriz: Conjunto de elementos q comparten un nombre en común, a los cuales se puede acceder por medio del índice o posición que ocupan en la matriz.
¿Cómo se declaran las matrices?:
- Una Dimensión: Dim <Nombre_Matriz><()> As <Tipo>
Donde: <Tipo>, es el tipo de elementos que contendrá la matriz.
Una observación interesante: ¿La diferencia entre una matriz y una colección es, que la matriz solo almacena un tipo de elementos, mientras que la colección puede almacenar cualquier tipo de datos?. Según, he leido en internet y en libros, esa es la diferencia, pero encontré algo interesante gracias a un MVP de Microsoft. ¿Si declaro una matriz del tipo Object (donde: object, permite almacenar cualquier tipo d datos), no tengo entonces una colección, donde cada elemento puede ser de cualquier tipo? Tal vez, la diferencia se las comente en algún artículo sobre colecciones. jejeje. Pero piensenlo, si esa no es la diferencia, entonces ¿cúal es?.
- Multidimencionales: Dim <Nombre_Matriz> <(Dimensión,Dimensión,...)> As <Tipo>
Donde: Dimensión, es el tamaño de las hileras.
Ej: Si tenemos una matriz de la siguiente forma -> Dim M(2,3) As Integer
Tendremos entonces, una Matriz de (2+1) Filas * (3+1) Columnas. Esto se debe a que VBC (compilador VB 2005) entiende que debe almacenar 2 filas y 3 columnas. pero el compilador toma en cuenta la posición 0, entonces tendríamos una matriz mas o menos así:
[0,0] [0,1] [0,2] [0,3]
[1,0] [1,1] [1,2] [1,3]
[2,0] [2,1] [2,2] [2,3]
En el siguiente ejercicio propuesto, se tratará de hacer que 2 Matrices, Fusionen sus datos en una 3er Matriz, y además deben quedar ordenados los datos ascendentemente. Veremos como Inciar una Matriz, como pasarla como parámetro y como recorrerla.
Bien, Este ejercicio es sobre modo consola, Puedes trabajarlo desde el Visual Estudio, el IDE de VB 2005 Express ó desde el Bloq de Notas. Empezemos:
Module FusionarListas Public Function Fusionar(ByVal listaA() As String, _ ByVal listaB() As String, _ ByVal listaC() As String) As Integer
Dim indice As Integer, indiceA As Integer, indiceB As Integer, indiceC As Integer 'Retorna 0, si no hay datos en las listas If listaA.Length + listaB.Length = 0 Then Return 0 'Fusionar listas a y b en c While indiceA < listaA.Length And indiceB < listaB.Length 'checa el final de las listas ' Compararlos alfabeticamente If listaA(indiceA).CompareTo(listaB(indiceB)) < 0 Then listaC(indiceC) = listaA(indiceA) indiceC += 1 indiceA += 1 Else listaC(indiceC) = listaB(indiceB) indiceC += 1 indiceB += 1 End If End While 'Por lógica, una de las listas finalizará primero, aunque sean del mismo tamaño 'No se calcula cual finalizó primero, pues requiere espacio cualquier comparación. 'Es mejor pasar las listas, si A finalizó primero, el primer for no entrara 'si B finalizó primero el segundo for no se llevará a cabo... For indice = indiceA To listaA.Length - 1 listaC(indiceC) = listaA(indice) indiceC += 1 Next For indice = indiceB To listaB.Length - 1 listaC(indiceC) = listaB(indice) indiceC += 1 Next 'Con esto nos hemos asegurado que todos los datos estarán en la listaC Return 1 'Regresa 1, despúes de fusionar las listas a y b en c End Function
'Función Principal, por donde empezará el programa Sub Main() 'Iniciar las listas, se pueden sustituir estas lineas por lectura desde el teclado Dim lista1() As String = {"Ana", "Carlos", "David", "Emanuel", "Francisco", _ "José", "Karla", "Luis", "Nohemi", "Omar", "Pedro", _ "Rosa", "Susana"} 'Aqui iniciamos una lista en desorden, con la intención de mostrarles los fácil que es 'ordenarlas Dim lista2() As String = {"Sonia", "Belén", "Guillermo", "Fernando", _ "Daniel", "Hugo", "Alfredo"} 'De la matriz que almacenará la fusión de las listas 1 y 2, no se sabe su dimensión, 'y no podemos arriesgarnos a poner un número cualquiera, podría desbordarse si se pasa el 'límite, o desperdiciar memoria, esto lo menciono porque podemos calcular el 'tamaño de la lista3, solo hay que sumar lista 1 y 2 Dim lista3(lista1.Length + lista2.Length) As String Dim Resultado As Integer, indice As Integer System.Array.Sort(lista2) 'Ordenar alfabéticamente la lista2... 'Como la función FUSIONAR retorna 0 si no se realizó la fusión, podemos mostrarlo en pantalla resultado = Fusionar(lista1, lista2, lista3)'Pasamos las listas If Resultado <> 0 Then For indice = 0 To lista3.Length - 1 Console.WriteLine(lista3(indice)) Next Else WriteLine("No se realizó la Fusión") End If End Sub 'Recuerden que una Matriz, contiene una dirección de memoria y todos los datos están en orden 'por lo tanto no necesitamos llenar la matriz desde aqui, al hacerlo desde FUSIONAR, 'la matriz queda con los datos y podemos acceder a ellos desde aqui. 'Bien, hemos tratado las matrices o arrays como objetos, espero les sirva como guía, bueno 'simplemente que les sirva... End Module Emanuel Lira Lozada ellSoft *el ejercicio fue propuesto por: Javier Ceballos. IMPORTANTEHola a todos, tengo una importante noticia que darles; y es la siguiente:
Como estudiante, sé lo difícil que a veces es, buscar información, y más sobre cosas tan recientes, en este caso VB 2005. Microsoft, proporciona una pagina de ayuda, http://msdn2.microsoft.com/es-es/library/default.aspx, en ella podrás encontrar gran cantidad de información sobre VB y C#. Tambien existe la ayuda que proporciona el entorno de VStudio, en fin, el dilema es que, siempre se necesita una tipo de ayuda diferente, menos técnica y mas explicada. Por eso, voy a estar publicando artículos sobre VB 2005, pero aclaro, no es un curso, ni haré entregas (a menos que alguien lo solicite), por el contrario, solo serán artículos sobre cosas y detalles que a veces son tan indispensables conocer pero no siempre lo conocemos y al buscarlo, se vuelve ta complicado, supongo que se debe a el hecho de que suponen que eso, lo conocemos al derecho y al revés. Bueno, c iu.
ellSoft
P.D. Busquen en la categoría Visual Basic 2005 December 03 ESTAMOS EN LA FINALSomos Ganadores, Somos Invencibles...Somos CHIVAS de CORAZON
|||||||
|||||| ||||||
||| |||
|||||||||||||||||
||||||||||||||||||||||
|||||||||||||||||||||||||||
ARRIBA MIS CHIVITAS
|*||||||||||||||||||||||*|
|*||||||||||||||||||*|
|*|||||||||||||*|
|*|||||||||*|
||*||*||
ellSoft
Creatividad XXI Hola: Sucede que pasó la semana nacional de creatividad, la cual se llevó a cabo del 27 al 30 de Noviembre. Y por supuesto, estuve por ahi en compitiendo, aunq la verdad para un Tecnológico descentralizado es muy complicado ganar, y si todavía a esto le agregamos que al local se le dan varios lugares, se vuelve todavía mas difícil la situación. Había muy buenos proyectos, aunque otros si eran muy simples, creo que no voy a mencionarlos para no agredir a naie, solo comentaré que son proyectos que en ITESA, hacemos para una materia o en la semana de ciencia y tecnología. Otros mas que complicados, eran ingeniosos y tuvieron una buena oportunidad.
Aún desconocemos los lugares, claro de los que no ganamos un lugar para la Nacional, espero no haber quedado en lugar tan malo.
Les puedo contar rapidamente algo sobre Encrypt, el proyecto que llevé a participar; Es un modelo de Ecriptación basado en algoritmos lineales de Llave pública. Basado en tres etapas: Difusión, Confusión y Llave Pública.
1.-) Difusión: El Arte de hacer que un símbolo no represente siempre lo mismo.
Sabemos que una símbolo A siempre representará la A; y una B, siempre una B. La difusión consiste en lograr que A represente una A, pero si se vuelve a encontrar una A, ésta, ya no represente una A, sino, tal vez una B, y así sucesivamente.
Analicemos la siguiente palabra: Adelaida, estadisticamente la A, es la letra que mas se repite en nuestro vocabulario.
En la palabra a analizar: A, 3 veces; d, 2 veces; e, 1 vez; l, 1 vez; i, 1 vez. Si sustituyeramos las letras con otros símbolos. números para este caso, sería algo así:
A|D|E |L |A|I |D| A
1|2 |3 |4 |1|5|2 | 1
Y vemos que al criptoanalizar, el 1 es el símbolo que más se repite, entonces tendríamos que pensar que tal vez esta representando una A, y asi tendríamos que realizar con cada uno de los símbolos hasta encontrar palabras coherentes. Pero que sucede si no solo sustituimos símbolos, sino que, estos símbolos no siempre representaran lo mismo:
A|D|E |L |A|I |D| A
1|1 |1 |2 |2|1|2 | 3
En fin, pasaré al siguiente punto:
2.-) Confusión: Este concepto es más simple. Cuando terminamos de aprender a leer, llega el punto donde simplemente, ya no leemos, solo visualizamos, pq nuestro cerebro ya conoce las palabras, por ejemplo: NAZIONAL, lo acabas de visualizar, y seguramente, notaste que esta ortograficamente, esta mal escrito y sino, vuelve a verlo, en cualquiera de los 2 casos, sabemos que dice: NACIONAL, pq nuestro cerebro ya sabe que asi se lee, ya no hay necesidad de Leerlo. Pero si ahora yo te presento esta palabra: DEALIADA, tal vez no lo comprendiste y tuviste que leerlo otra vez, y sigues igual, y sino te darás cuenta que es ADELAIDA, pero con las letras revueltas, eso mi estimado y estimada, es confusión.
3.-) Y Llave pública: Esto es una clave que se "Mezclara" con el texto plano (el que entendemos), y lo convertirá en texto cifrado.
Regremos a NACIONAL, el cual mezclaremos con Instituto:
=#0'rSSSú$óSSÑS*'ú$óSÑéR4+9$óSÑGRRRñp%,néSS3$etPSÑSSSúpns+!nPSú$óSS/,.q0p!Mq#,.p0p!Mp#+&nP8ÑR3 El resultado es un Encriptado según el modelo Encrypt. Para regresar al texto Plano, tendremos que utilizar el Mismo texto que usamos como Llave: Instituto. 3$7-~SSYíSSSSSY!+SSSSVñR13,SYííGRRR:D'-áPSYD'-áPSYíSSS2aE!+hPSSYíSS+'!B8 &úv4| t,+'MA8'-áPR:R Este es otro ejemplo con el mismo texto plano: NACIONAL, pero con Llave Empresa. Bien eso es todo, espero les haya gustado. |
|
|