Documentos de Académico
Documentos de Profesional
Documentos de Cultura
able-Parmetro
Los LP tienen forma de expresar directamente algunos valores, hay valores que son resultados de un cmputo o de un proceso de creacin. Cmo se guardan los valores para ser usados posteriormente? O los valores deben computarse en el momento en que se usen? Variable es una Zona de memoria que almacena un valor (y que pudiera cambiarse). Se maneja y se cambia explcita o implcitamente. Ms imperativo o ms declarativo.
true false
Por Valor
Variables locales al mtodo Main Ambito: dnde se pueden usar 2
k
2
j
2
j
r Referencia
true true
r Referencia
2
k
2
j
fes nav tiv ida o d Zona de memoria de las variables del mtodo Main
26 25 D
12 M
201 3 A
25 D
12 M
201 3 A
new Fecha(25,12,2013)
true
false
r Referencia
25 D
12 M navidad
201 3 A
25 26 D
201 12 3 M A festivo
Cmo representar dos libros escritos por un mismo autor? Cmo representar dos autores que nacieron el mismo da?
A 1933 nombre
20 12
Crnica de una muerte anunciada Juan No comparten la fecha aunque son iguales en este caso
A 1933
Si queremos en ciertos casos tratarlo por referencia y en otro tratarlo por valor tendramos que definir un class y otro similar definirlo struct
expanded
... }
Fecha fechaNac;
ing y Unboxing
Los tipos por valor pueden ser tratados por int referencia i = 123; i 123
object x = i;
x
System.Int3 2
123
Boxing
int j = (int) x;
j
123
Unboxing
ing y Unboxing
CP Cuales son los pasos que estan por detras para que de este resultado?
ing y Unboxing
object y = navidad;
25 D 12 M navidad Zona de memoria de las variables del mtodo Main 201 3 A
25 D
12 M
201 3 A
mbito (scope)
Desde qu partes del cdigo se tiene acceso a una determinada entidad (variable, parmetro, mtodo) Por lo general est determinado por una declaracin textual (dentro de un mtodo, dentro de una clase) que indica su alcance o mbito (partes del texto del cdigo que la pueden acceder y/o manipular)
mbito (scop
3 1 0 10 3 10 0 1 5
1000
empo de Vida
Cunto dura la asociacin de un binding (por ejemplo el espacio asignado a una variable?)
Toda la ejecucin de la aplicacin (variables estticas desde su carga en C#, variables globales en Pascal) La ejecucin de un mtodo, funcin (parmetros y variables locales en C#) Dependiendo del "objeto", "funcin" a la que est asociada
empo de Vida
Cunto dura el cdigo de un mtodo de instancia de una clase en C#? class A{ int x; ... void F(...){ ... } } void M(...){ A a = new A(); ... a.F(...); ... }
El tiempo de vida de la x de la variable a es el de la ejecucin del mtodo M durante cuya ejecucin se cre un objeto de tipo A , el tiempo de vida del cdigo del mtodo F puede ser el de toda la ejecucin
T2
string
T4
HEAP
puntadores
Las referencias hay que crearlas explcitamente (C++), by default la semntica es por valor
Fecha f; ... f.D = 31; f.M = 12; f.A = 2013; Fecha otraFecha = f; Fecha *f1 = new Fecha; Se copia n los valores de f hacia otraFecha Se separa una zona de memoria para una Fecha y el apuntador se pone en f1
f1->D = 25 f1->M = 12; f2->A = 2013; Se refiere a la zona de memoria apuntada por f1 f1 = &f; f1 apunta a la memoria de f
puntadores
Los objetos se destruyen explcitamente y la memoria de los mismos se libera explcitamente
class Fecha { ... ~ Fecha(){ } }
Fecha *f1 = new Fecha; delete f1; Se aplica el destructor de Fecha (si lo hubiese) y se libera la memoria ocupada por lo apuntado por f1
untadores al limbo
Fecha *f1 = new Fecha(); f1->D = 31; f1->M=12; f1->A = 2013; Fecha *f2 = f1; f1 f2
31 12 2013
delete f1; f1 f2 La memoria de lo apuntado por f1 queda disponible para ser reusada por el sistema
31 12 2013
En C#
Fecha f1 = new Fecha(); F1.D = 31; f1.M=12; f1.A = 2013; Fecha f2 = f1; f1 f2 delete f1; f1 = null; f1 f2 nul l
31 12 2013 31 12 2013
n y Traspaso de Parmetros
La forma en que fsicamente se pasan
Por copia (by copy) (el implcito en C, Pascal, Java, Eiffel, C++, C#) Por referencia (by reference, by sharing) (FORTRAN, C++ con &, var en Pascal, ref y out en C#) Por nombre (perezoso) (by name) (ALGOL)
so de Parmetros . . .
Quien llama pasa la direccin del parmetro real hacia el parmetro formal. Dentro del mtodo una referencia al parmetro formal se trata como una referencia al parmetro real (va alguna forma de direccionado indirecto) Un cambio sobre el parmetro formal afecta directamente al parmetro real Ejemplo FORTRAN, Qu pasavar si elde Pascal, & de C++, ref y out
parmetro formal es en C# una expresin que calcula un valor?
or Referencia
so de Parmetros . . .
static void f(ref int i) begin i++; end ... int k=2; f(ref k); System.Console.WriteLine(k);
El programador tiene que estar consciente de lo que quiere k tiene que estar inicializado
Lo que se escribe es 3
paso de Parmetros . . .
El que llama tiene que estar claro de lo que quiere k NO tiene que estar inicializado
Lo que se escribe es 2
aso de Parmetros . . .
Cmo expresar cantidad cualquiera de parmetros? params en C# Los parmetros reales tienen que ser del mismo tipo y se pasan como un array F(int j, params T[] x){ } F(3, a, b, c); a, b y c que deben ser de tipo T se pasan como un array, como si se hubiese hecho F(3, new T[]{a,b,c})