Posts tagged ‘ejemplos ‘




DEFINICION PASO DE PARAMETROS POR VALOR Y PASO DE PARAMETROS POR REFERENCIA

Paso de parámetros

Los parámetros son los datos que reciben las funciones y que utilizan para realizar las operaciones de la función. Una función puede recibir cualquier número de parámetros, incluso ninguno. A la hora de definir la función, en la cabecera, se definen los parámetros que va a recibir.

function f1 ($parametro1, $parámetro2)

Así definimos una función llamada f1 que recibe dos parámetros. Como se puede observar, no se tiene que definir el tipo de datos de cada parámetro.

Los parámetros tienen validez durante la ejecución de la función, es decir, tienen un ámbito local a la función donde se están recibiendo. Cuando la función se termina, los parámetros dejan de existir.

Los parámetros se pasan por valor

El paso de parámetros en PHP se realiza por valor. «Por valor» es una manera típica de pasar parámetros en funciones, quiere decir que el cambio de un dato de un parámetro no actualiza el dato de la variable que se pasó a la función. Por ejemplo, cuando invocamos una función pasando una variable como parámetro, a pesar de que cambiemos el valor del parámetro dentro de la función, la variable original no se ve afectada por ese cambio. Puede que se vea mejor con un ejemplo:

function porvalor ($parametro1){
$parametro1=»hola»;
echo «<br>» . $parametro1; //imprime «hola»
}

$mivariable = «esto no cambia»;
porvalor ($mivariable);
echo «<br>» . $mivariable; //imprime «esto no cambia»

Esta página tendrá como resultado:

hola
esto no cambia

Paso de parámetros por referencia

En contraposición al paso de parámetros por valor, está el paso de parámetros por referencia. En este último caso, el cambio del valor de un parámetro dentro de una función sí afecta al valor de la variable original.

Podemos pasar los parámetros por referencia si, en la declaración de la función, colocamos un «&» antes del parámetro.

<?
function porreferencia(&$cadena)
{
$cadena = ‘Si cambia’;
}
$str = ‘Esto es una cadena’;
porreferencia ($str);
echo $str; // Imprime ‘Si cambia’
?>

Este script mostrará por pantalla ‘Si cambia’.

Parámetros por defecto

Podemos definir valores por defecto para los parámetros. Los valores por defecto sirven para que los parámetros contengan un dato predefinido, con el que se inicializarán si no se le pasa ningún valor en la llamada de la función. Los valores por defecto se definen asignando un dato al parámetro al declararlo en la función.

function pordefecto ($parametro1=»pepe»;$parametro2=3)

Para la definición de función anterior, $parametro1 tiene como valor por defecto «pepe», mientras que $parametro2 tiene 3 como valor por defecto.

Si llamamos a la función sin indicar valores a los parámetros, estos tomarán los valores asignados por defecto:

pordefecto () // $parametro1 vale «pepe» y $parametro2 vale 3

Si llamamos a la función indicando un valor, este será tenido en cuenta para el primer parámetro.

pordefecto («hola») // $parametro1 vale «hola» y $parametro2 vale 3

Atención, estamos obligados a declarar todos los parámetros con valores por defecto al final.

OTRO EJEMPLO CLARO

Hagamos un método llamado intercambiar que reciba dos objetos Empleado y que intente intercambiar a los empleados.

image

image

Si Java hiciera un paso de parámetros por “referencia” el resultado de este ejemplo es que “a” terminaría refiriéndose a Beto y “b” terminaría refiriéndose a Ascari, sin embargo no es así. ¿Qué esta pasando internamente en memoria? ¿Por qué en el ejemplo anterior si existe un cambio en la variable que hace la llamada y  en este no?

Si el paso de parámetros Si el paso de parámetros fuera por referencia, ocurriría algo como esto.

image

Si Java hiciera un paso de parámetros por referencia, entonces “x” obtendría la dirección de memoria de “a” y “y” obtendría la dirección de memoria de “b”. Entonces cuando en el método “intercambiar” intentemos hacer que “x” apunte al Empleado Benito y que “b” apunte al Empleado “Ascari”, por ende “a” también apuntaría a “Benito” y “b” apuntaría a “Ascari”. (Figura de abajo).

image

Sin embargo, podemos comprobar que lo anterior no funciona. a sigue refiriéndose a Ascari y b a Benito. Por lo tanto, Java no acepta un paso de parámetros por referencia sino por copia o valor, pero lo que se copia es la referencia del objeto.

Ahora veamos lo que en realidad esta pasando.

image

Observamos que existe una copia de las referencias a y b. Estas referencias son copiadas en x e y. Ahora “x” apunta a Ascari y “y” a Benito.

image

Pero inmediatamente en el método “intercambiar” se realiza el intercambio.

image

Ahora vemos como “x” apunta a “Benito” y “y” apunta a “Ascari”.. Sin embargo no perdamos el foco de que tanto “a” como “b” siguen apuntando al mismo objeto!!!!!!!!!

Lo anterior demuestra de forma contundente que Java NO realiza el paso de parámetros por referencia, sino por copia, pero lo que sucede es
que se hace una copia de las referencias de objeto.

Add a comment octubre 17, 2011

CONCEPTO DE XML

XML proviene de eXtensible Markup Language (“Lenguaje de Marcas Extensible”). Se trata de un metalenguaje (un lenguaje que se utiliza para decir algo sobre otro lenguaje) extensible de etiquetas que fue desarrollado por el Word Wide Web Consortium (W3C), un consorcio internacional que elabora recomendaciones para la Word Wide Web.

El XML es una adaptación del SGML (Standard Generalized Markup Language), un lenguaje que permite la organización y el etiquetado de documentos. Esto quiere decir que el XML no es un lenguaje en sí mismo, sino un sistema que permite definir lenguajes de acuerdo a las necesidades. El XHTML, el MathML y el SVGson algunos de los lenguajes que el XML está en condiciones de definir.

Las bases de datos, los documentos de texto, las hojas de cálculo y las páginasweb son algunos de los campos de aplicación del XML. El metalenguaje aparece como un estándar que estructura el intercambio de información entre las diferentes plataformas.

Los expertos nombran varias ventajas que derivan de la utilización del XML. Es extensible (se pueden añadir nuevas etiquetas tras el diseño del documento), su analizador es estándar (no requiere de cambios para cada versión del metalenguaje) y facilita el análisis y procesamiento de los documentos XML creados por terceros.

Entre los lenguajes creados con XML, se destacan el XSL (Extensible Stylesheet Language) y el XLINK (que intenta trascender las limitaciones de los enlaces de hipertexto en HTML).

La validez de los documentos (es decir, que su estructura sintáctica se encuentre desarrollada correctamente) depende la relación especificada entre los distintos elementos a partir de una definición o documento externo.

EJEMPLOS:

La estructura de un archivo XML es muy similar a la estructura en HTML solo que con la gran diferencia de que nosotros nombramos las etiquetas para asi poder almacenar información que nos interesa para después lograr un acceso a esta, un ejemplo simple seria como se muestra a continuación:

<?xml version=» 1.0 » encoding=» UTF-8 » standalone= » yes «?>
<ficha>
<nombre> Gabriel </nombre>
<apellido> Molina </apellido>
<direccion> Alfredo Vargas #36 </direccion>
</ficha>

Siguiendo este ejemplo de estructura básica de XML podemos generar una base de datos en este sistema.

Veamos un ejemplo muy sencillo de un pequeño lenguaje de etiquetas para definir documentos FAQ:

<?xml version=»1.0″ encoding=»UTF-8″ standalone=»no»?>
<!DOCTYPE FAQ SYSTEM «FAQ.DTD»>
<FAQ>
<INFO>
<TITULO> WINDOWS98? SOLO SI ME OBLIGAN! </TITULO>
<AUTOR> Fernando Damián Lorenzo García </AUTOR>
<EMAIL> Fer@yahoo.es </EMAIL>
<VERSION> 1.0 </VERSION>
<FECHA> 20.MAYO.99 </FECHA>
</INFO>
<PART NO=»1″>
<Q NO=»1″>
<QTEXT>¿Por qué tengo que instalar W95?</QTEXT>
<A> A mi también me parece una buena pregunta.</A>
</Q>
<Q NO=»2″>
<QTEXT>Y de que me vale?</QTEXT>
<A>Otra ingeniosa pregunta.</A>
</Q>
</PART>
</FAQ>

Para el lenguaje de marcas mostrado arriba tenemos el siguiente DTD:

<!ELEMENT FAQ (INFO, PART+)>
<!ELEMENT INFO (TITULO, AUTOR, EMAIL?, VERSION?, FECHA?)>
<!ELEMENT TITULO (#PCDATA)>
<!ELEMENT AUTOR (#PCDATA)>
<!ELEMENT EMAIL (#PCDATA)>
<!ELEMENT VERSION (#PCDATA)>
<!ELEMENT FECHA (#PCDATA)>
<!ELEMENT PART (Q+)>
<!ELEMENT Q (QTEXT, A)>
<!ELEMENT QTEXT (#PCDATA)>
<!ELEMENT A (#PCDATA)>
<!ATTLIST PART NO CDATA #IMPLIED TITLE CDATA #IMPLIED>
<!ATTLIST Q NO CDATA #IMPLIED>

Veamos ahora un ejemplo de código XML para una librería virtual:

<?xml version=»1.0″?>
<libro>
<titulo> Cien años de soledad </titulo>
<disponible tiempo=»24″ unidad=»horas»/>
<autor> Gabriel García Márquez </autor>
<formato> Rústica </formato>
<publicacion>1967 </publicacion>
<precio cantidad=»9.99″ moneda=»euro»/>
<descuento cantidad=»5″/>
<enlacelibro href=»/exec/ISBN/84-473-0619-4″/>
</libro>

Su DTD correspondiente:

<!ELEMENT autor ( #PCDATA ) >
<!ELEMENT descuento EMPTY >
<!ATTLIST descuento cantidad CDATA #REQUIRED >
<!ELEMENT disponible EMPTY >
<!ATTLIST disponible tiempo CDATA #REQUIRED >
<!ATTLIST disponible unidad CDATA #REQUIRED >
<!ELEMENT enlacelibro EMPTY >
<!ATTLIST enlacelibro href CDATA #REQUIRED >
<!ELEMENT formato ( #PCDATA ) >
<!ELEMENT libro ( titulo | disponible | autor | formato | publicacion | precio | descuento | enlacelibro )* >
<!ELEMENT precio EMPTY >
<!ATTLIST precio cantidad CDATA #REQUIRED >
<!ATTLIST precio moneda CDATA #REQUIRED >
<!ELEMENT publicacion ( #PCDATA ) >
<!ELEMENT titulo ( #PCDATA ) >

Add a comment octubre 17, 2011

Entradas recientes

Archivos

Categorías

Meta