Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Tipos Por Valor Y Tipos Por Referencias
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Tipos Por Valor Y Tipos Por Referencias 
 
Hola Comunidad!.

Buscando por la pagina de Guille

http://www.elguille.info/

Estuve comprobando las similitudes que tiene en muchas cosas VB.NET con gambas.
Con lo que se puede aplicar lo aprendido a Gambas.No en su totalidad, pero si en la idea
principal.Debemos ser capaz de aprovechar los recursos.Incluso usa ordenes o comandos muy parecidos.

Claro que .NET usa unas formas parecida a Java, tales como si quieres imprimir en la consola.
Primero hace alusión a la consola y luego al método escribir tal que así:

consola.escribir "Hola"
Viéndolo, toma consola como un objeto y su método escribir.

Veréis, estuve viendo los tipos por valor y los tipos por referencia.Que no el paso de parámetros.
En los tipos por valor usamos los tipos primitivos o básicos. ¿ Se les podría llamar así ?.

Entero,cadena,reales,lógicos,fecha,etc.Y fijo que me dejo algo.

Y lo tipos por referencia hacen uso de una clase.Parece que también un array es un tipo por referencia.
Cuestión de comprobarlo.

Vamos al ejemplo.En un ejemplo que pone Guille.Nos muestra primero el tipo por valor:
Tal que así: (Lo abrevio por que no tiene mucho que explicar.)

Public Sub Form_Open()
    
  Dim i As Integer
  Dim j As Integer
  
  
  i = 15    
  Print "I vale: " & i    
  j = i  
  Print "Hacemos esta asignacion: j=i"  
  Print "i vale " & i & " j vale " & j  
  i = 25
  Print "Hacemos esta asignacion: i=25"
  Print "i vale " & i & " j vale " & j  
  
End
 

Como veis se asigna al principio el valor de una variable a la otra.
Y luego se cambia el valor de la primera variable. En este caso, la segunda variable
se quedaría con el primer valor y la segunda variable con el valor nuevo asignado.

Pregunta.¿ Como funcionaran nuestros lenguaje si por lógica, hemos al principio dicho
que el valor de i sea asignado a j ?. ¿ No debería recordarse esto de alguna manera y
que por cada cambio realizado en i sea reflejado en j ?.

La orden se hace al principio y luego no se le vuelve a repetir.
Como es natural, es un valor no una referencia de donde se haya el valor de i.

Ahora hagamos algo parecido con  tipos por referencia.



'Clase Prueba

Public nombre As String

'Y en nuestro formulario

Public Sub Form_Open()

  Dim a As Prueba
  Dim b As Prueba
  
  a = New Prueba
  
  a.nombre = "Juan"
  Print "a vale: " & a.nombre
  
  b = a
  Print "Hacemos esta asignación: b=a"
  
  Print "a vale " & a.nombre & " b vale " & b.nombre
  
  a.nombre = "Antonio"
  
  Print "Hacemos una nueva asignación a a.Nombre"
  
  Print "a vale " & a.nombre & " b vale " & b.nombre
  

End
 


Es el mismo objeto de la clase Prueba, asignado a dos variables.
Lo que se hace en a, repercute a b.


Saludos.
 




===================
Gambas Básico
"No es un bug, es una característica no documentada"
 
Shell - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Tipos Por Valor Y Tipos Por Referencias 
 
Citar:
Lo que se hace en a, repercute a b.

El resultado seria este:
Citar:
a vale: Juan
Hacemos esta asignación: b=a
a vale Juan b vale Juan
Hacemos una nueva asignación a a.Nombre
a vale Antonio b vale Antonio




Si quieres que esto no ocurra, se puede ejecutar de esta forma:

'Clase Prueba

Public nombre As String

'Y en nuestro formulario

Public Sub Form_Open()

 Dim a As Prueba
 Dim b As Prueba
 
 a = New Prueba
 
 a.nombre = "Juan"
 Print "a vale: " & a.nombre
 
 'antes
  ' b = a
  'ahora, sin referencia, se guardaran los valores asignados...
  b = New Prueba
  b.nombre = a.nombre

 Print "Hacemos esta asignación: b.nombre=a.nombre"
 
 Print "a vale " & a.nombre & " b vale " & b.nombre
 
 a.nombre = "Antonio"
 
 Print "Hacemos una nueva asignación a a.Nombre"
 
 Print "a vale " & a.nombre & " b vale " & b.nombre
 

End


El resultado seria:
a vale: Juan
Hacemos esta asignación: b.nombre=a.nombre
a vale Juan b vale Juan
Hacemos una nueva asignación a a.Nombre
a vale Antonio b vale Juan



Otra cosa importante... cuando se usen clases, y se quiere acceder a una propiedad usar Propety, y crear metodos _write y _read, para leerlas o escribirlas.... ya que da muchos problemas usar Public..
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Tipos Por Valor Y Tipos Por Referencias 
 
Shell escribió: [Ver mensaje]

Veréis, estuve viendo los tipos por valor y los tipos por referencia.Que no el paso de parámetros.
En los tipos por valor usamos los tipos primitivos o básicos. ¿ Se les podría llamar así ?.

Entero,cadena,reales,lógicos,fecha,etc.Y fijo que me dejo algo.

Y lo tipos por referencia hacen uso de una clase.Parece que también un array es un tipo por referencia.
Cuestión de comprobarlo.

No te dejes confundir por esa terminología arcana.

Una variable siempre es un apuntador a una dirección de memoria, lo que cambia es el significado de lo que sucede durante la asignación.

Para los tipos de datos nativos, la asignación de una variable B a una variable A, implica que el valor apuntado por B se copia a otro lugar de la memoria y se asigna a la variable A la dirección de la primera posición de memoria donde se copió el valor. El resultado es que la modificación del valor de una variable no afecta a la otra.

En cambio, un puntero permite asignar la dirección de memoria a la que apunta B a la variable A. Los punteros tienen asociada una aritmética de punteros que permite operar sobre las posiciones de memoria individuales que ocupe el valor apuntado por un puntero. Cuando se usan punteros se puede hacer apuntar a dos variables a la misma dirección de memoria (u otras cosas un poco más "raras"). El resultado de asignar un puntero a otro, depende del uso que se haga de la aritmética de punteros.

Cuando se trata de objetos, la metáfora que usamos es la de "variable de referencia", y lo que sucede durante la asignación es que siempre se asigna la dirección de memoria apuntada por una variable a la otra. El resultado es que las dos variables apuntan al mismo objeto y, en consecuencia, cualquier operación efectuada con el objeto será reflejada por ambas variables.

Si lo piensas en términos de tipos de datos, todo depende de la implementación de cada lenguaje. En un lenguaje orientado a objetos puro todo es un objeto, por lo que sólo tienes variables de referencia (no necesariamente, pero por lo general es así).

En un lenguaje orientado a objetos híbrido, que tiene tipos de datos nativos que no son objetos (Java, gambas), tienes variables (la asignación implica la duplicación del valor apuntado y la devolución de una nueva dirección de memoria) y variables de referencia (la asignación implica la devolución de la misma dirección de memoria).

En un lenguaje híbrido los arrays pueden ser tipos de datos nativos y en otro una clase de objetos. Si son tipos nativos, se trata de estructuras de datos simples sobre las que no se pueden aplicar operaciones. Si son objetos proveen métodos como Copy(), Sort(), etc.

Saludos.
 




===================
Cómo programar con Gambas

Speed Books: informática libre.
 
fabianfv - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Tipos De Archivos Que Maneja Gambas2 jsbsan General 12 Jueves, 11 Noviembre 2010, 21:07 Ver último mensaje
jsbsan
No hay nuevos mensajes Funciones Para Tipos De Datos. IsString Shell General 9 Jueves, 14 Febrero 2013, 00:07 Ver último mensaje
Shell
No hay nuevos mensajes Array De Distintos Tipos Shell General 20 Sabado, 27 Septiembre 2014, 09:04 Ver último mensaje
Shell
No hay nuevos mensajes Tipos De Datos. Constantes Shell General 3 Domingo, 31 May 2015, 19:37 Ver último mensaje
vuott
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 0 invitados
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron