Está en la página 1de 31

El bucle for o ciclo for es una estructura de control en la que se puede indicar el nmero minimo de iteraciones.

Est disponible en casi todos los lenguajes de programacin imperativos.

'Variable de control': prcticamente un mandato impuesto por el uso habitual es utilizar la letra i Iterador como variable de control, o bien sus sucesoras en caso de bucles anidados. El uso de esta letra crptica quizs a primera vista es sin embargo una excelente forma de aportar agilidad de lectura al cdigo por su uso tan extensivo. Como raras veces los bucles anidados superan las tres dimensiones (por una sencilla cuestin de explosin exponencial), las letras i, j y k suelen ser las nicas relacionadas con este uso. En C se define en el primer parmetro de la instruccin junto con la inicializacin (opcional). Inicializacin de la variable de control: en pseudolenguaje se pide explicitarlo (es la seccin := ValorInicial), sin embargo, otros lenguajes ms permisivos como C no lo requieren de forma obligatoria. De todos modos, la prctica de utilizar variables de control que no se inicializan en el bucle for no es recomendada para la legibilidad del cdigo. En C se define en el primer parmetro del bucle for junto con la variable de control. Condicin de control: en pseudolenguaje se ve representado por el valor final que puede tomar la variable de control (la seccin A ValorFinal). En C es el segundo parmetro y puede ser cualquier condicin (ni siquiera es obligacin que est la variable de control, aunque una vez ms, esto no se considera una buena prctica). Incremento: en pseudolenguaje se toma por defecto el valor 1, aunque puede explicitarse por medio de la sentencia PASO = ValorPaso cualquier nmero entero (lase bien entero, o sea que tcnicamente podemos decrementar). En C es el ltimo parmetro. Cuerpo: es lo que se har en cada iteracin, pueden ser una o ms instrucciones. En pseudolenguaje pesa la restriccin de no poder alterar el valor de la variable de control; esto no es requerido en C, pero no se considera una buena prctica.

[editar] Usos
Su uso principal se orienta a los vectores, pudiendo modificar, agregar, eliminar o consultar datos que se encuentren segn el ndice. Por esto ltimo, una condicin mnima del vector es que debe ser ordenado, por que si se intenta leer un dato inexistente, esto genera un error de programacin.

[editar] For en pseudolenguaje


La principal diferencia de un bucle for PARA con respecto a los bucles for MIENTRAS Y REPETIR, es que puede determinarse al comienzo del bucle cuntas veces se iterar el mismo, lo cual muchas veces puede redundar en una optimizacin del cdigo por parte de los compiladores. Los condicionales constituyen junto con los bucles los pilares de la programacin estructurada, y su uso es una evolucin de una sentencia de lenguaje

ensamblador que ejecutaba la siguiente lnea o no en funcin del valor de una condicin. El bucle for PARA se ha convertido en el bucle ms ampliamente utilizado en la programacin, ya que con la evolucin de los lenguajes la mayora de las condiciones de fin

do-while
Los bucles do-while son muy similares a los bucles while, excepto que la expresin verdadera es verificada al final de cada iteracin en lugar que al principio. La diferencia principal con los bucles while es que est garantizado que corra la primera iteracin de un bucle do-while (la expresin verdadera slo es verificada al final de la iteracin), mientras que no necesariamente va a correr con un bucle while regular (la expresin verdadera es verificada al principio de cada iteracin, si se evala como FALSE justo desde el comienzo, la ejecucin del bucle terminara inmediatamente). Hay una sola sintaxis para bucles do-while:
<?php $i = 0; do { echo $i; } while ($i > 0); ?>

El bucle de arriba se ejecutara exactamente una sola vez, ya que despus de la primera iteracin, cuando la expresin verdadera es verificada, se evala como FALSE ($i no es mayor que 0) y termina la ejecucin del bucle. Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del bucle do-while, para permitir parar la ejecucin en medio de los bloques de cdigo, mediante el encapsulado con do-while (0), y utilizando la sentencia break. El siguiente fragmento de cdigo demuestra esto:
<?php do { if ($i < 5) { echo "i no es lo suficientemente grande"; break; } $i *= $factor; if ($i < $minimum_limit) { break; } echo "i est bien"; /* procesar i */ } while (0); ?>

No se preocupe si no se entiende esto completamente o en absoluto. Se pueden codificar scripts e incluso scripts potentes sin usar esta 'caracterstica'. Desde PHP 5.3.0, es posible utilizar el operador goto en lugar de este hack.

for

while

[edit] Last updated: Fri, 09 Mar 2012


add a note User Contributed Notes do-while david dot schueler at tel-billig dot de 18-Mar-2011 05:12 If you are trying to use a construct like this: <?php do { // some code to run only one more time if expression is true if ($your_expression == true) continue; } while (false); ?> It will NOT loop as expected, because the continue tries to run the "next" loop, but the expression says just "false" so there is no next loop. The continue exits the while loop. To get around this you may use an other expression, like this <?php do { // some code to run only one more time if expression is true if ($your_expression == true) continue; break; } while (true); ?> or use the goto statement since PHP 5.3.

xiaomao5 at live dot com 13-Mar-2011 07:48


Another hack If you want $type to only have a value of 0 or 1, you can do this: <?php do { echo 'Choose a type, 0 or 1: '; $type = trim(fgets(STDIN)); if ($type == 0) { /* do stuff */ } elseif ($type == 1) { /* do stuff */ } } while ($type != 0 && $type != 1); ?>

shaida dot mca at gmail dot com 18-Aug-2010 11:01


Example of Do while :<?php $i = 0; echo 'This code will run at least once because i default value is 0.<br/>'; do { echo 'i value is ' . $i . ', so code block will run. <br/>'; ++$i;

} while ($i < 10); ?>

andrew at NOSPAM dot devohive dot com 15-Sep-2008 10:44


I'm guilty of writing constructs without curly braces sometimes... writing the do--while seemed a bit odd without the curly braces ({ and }), but just so everyone is aware of how this is written with a do-while... a normal while: <?php while ( $isValid ) $isValid = doSomething($input); ?> a do--while: <?php do $isValid = doSomething($input); while ( $isValid ); ?> Also, a practical example of when to use a do--while when a simple while just won't do (lol)... copying multiple 2nd level nodes from one document to another using the DOM XML extension <?php # open up/create the documents and grab the root element $fileDoc = domxml_open_file('example.xml'); // existing xml we want to copy $fileRoot = $fileDoc->document_element(); $newDoc = domxml_new_doc('1.0'); // new document we want to copy to $newRoot = $newDoc->create_element('rootnode'); $newRoot = $newDoc->append_child($newRoot); // this is the node we want to copy to # loop through nodes and clone (using deep) $child = $fileRoot->first_child(); // first_child must be called once and can only be called once do $newRoot->append_child($child->clone_node(true)); // do first, so that the result from first_child is appended while ( $child = $child->next_sibling() ); // we have to use next_sibling for everything after first_child ?>

Ryan 17-Apr-2008 10:59


I've found that the most useful thing to use do-while loops for is multiple checks of file existence. The guaranteed iteration means that it will check through at least once, which I had trouble with using a simple "while" loop because it never incremented at the end. My code was: <?php $filename = explode(".", $_FILES['file']['name']); // File being uploaded $i=0; // Number of times processed (number to add at the end of the filename) do { /* Since most files being uploaded don't end with a number, we have to make sure that there is a number at the end of the filename before we start simply incrementing. I admit there is probably an easier way to do this, but this was a quick slap-together job for a friend, and I find it

works just fine. So, the first part "if($i > 0) ..." says that if the loop has already been run at least once, then there is now a number at the end of the filename and we can simply increment that. Otherwise, we have to place a number at the end of the filename, which is where $i comes in even handier */ if($i > 0) $filename[0]++; else $filename[0] = $filename[0].$i; $i++; } while(file_exists("uploaded/".$filename[0].".".$filename[1])); /* Now that everything is uploaded, we should move it somewhere it can be accessed. Hence, the "uploaded" folder. */ move_uploaded_file($_FILES['file']['tmp_name'], "uploaded/".$filename[0].".".$filename[1]); ?> I'm sure there are plenty of ways of doing this without using the dowhile loop, but I managed to toss this one together in no-time flat, and I'm not a great PHP programmer. =) It's simple and effective, and I personally think it works better than any "for" or "while" loop that I've seen that does the same thing.

jantsch at gmail dot com 28-Nov-2007 05:56


Useful when you want to continue to read a recordset that was already being read like in: <? $sql = "select * from customers"; $res = mysql_query( $sql ); // read the first record if( $rs = mysql_fetch_row( $res ) ){ // do something with this record } // do another stuff here // keep reading till the end if( mysql_num_rows( $res )>1 ){ do{ // processing the records till the end }while( $rs = mysql_fetch_row( $res )); } ?>

Bucle WHILE
Estos bucles se utilizan cuando queremos repetir la ejecucin de unas sentencias un nmero indefinido de veces, siempre que se cumpla una condicin. Se ms sencillo de comprender que el bucle FOR, pues no incorpora en la misma lnea la inicializacin de las variables su condicin para seguir ejecutndose y su actualizacin. Slo se indica, como veremos a continuacin, la condicin que se tiene que cumplir para que se realice

una iteracin. while (condicin){ //sentencias a ejecutar } Un ejemplo de cdigo donde se utiliza este bucle se puede ver a continuacin. var color = "" while (color != "rojo"){ color = prompt("dame un color (escribe rojo para salir)","") } Este es un ejemplo de lo ms sencillo que se puede hacer con un bucle while. Lo que hace es pedir que el usuario introduzca un color y lo hace repetidas veces, mientras que el color introducido no sea rojo. Para ejecutar un bucle como este primero tenemos que inicializar la variable que vamos utilizar en la condicin de iteracin del bucle. Con la variable inicializada podemos escribir el bucle, que comprobar para ejecutarse que la variable color sea distinto de "rojo". En cada iteracin del bucle se pide un nuevo color al usuario para actualizar la variable color y se termina la iteracin, con lo que retornamos al principio del bucle, donde tenemos que volver a evaluar si lo que hay en la variable color es "rojo" y as sucesivamente mientras que no se haya introducido como color el texto "rojo". Nota: Hemos utilizado en este ejemplo la funcin prompt de Javascript, que no hemos visto todava en este manual. Esta funcin sirve para que mostrar una caja de dilogo donde el usuario debe escribir un texto. Esta funcin pertenece al objeto window de Javascript y la comentamos en el artculo Mtodos de window en Javascript.

Bucle DO...WHILE
El bucle do...while es la ltima de las estructuras para implementar repeticiones de las que dispone en Javascript y es una variacin del bucle while visto anteriormente. Se utiliza generalmente cuando no sabemos cuantas veces se habr de ejecutar el bucle, igual que el bucle WHILE, con la diferencia de que sabemos seguro que el bucle por lo menos se ejecutar una vez. Este tipo de bucle se introdujo en Javascript 1.2, por lo que no todos los navegadores los soportan, slo los de versin 4 o superior. En cualquiuer caso, cualquier cdigo que quieras escribir con DO...WHILE se puede escribir tambin utilizando un bucle WHILE, con lo que en navegadores antiguos debers traducir tu bucle DO...WHILE por un bucle WHILE. La sintaxis es la siguiente. do { //sentencias del bucle } while (condicin) El bucle se ejecuta siempre una vez y al final se evala la condicin para decir si se ejecuta otra vez el bucle o se termina su ejecucin.

Veamos el ejemplo que escribimos para un bucle WHILE en este otro tipo de bucle. var color do { color = prompt("dame un color (escribe rojo para salir)","") } while (color != "rojo") Este ejemplo funciona exactamente igual que el anterior, excepto que no tuvimos que inicializar la variable color antes de introducirnos en el bucle. Pide un color mientras que el color introducido es distinto que "rojo".

Ejemplo de uso de los bucles while


Vamos a ver a continuacin un ejemplo ms prctico sobre cmo trabajar con un bucle WHILE. Como resulta muy difcil hacer ejemplos prcticos con lo poco que sabemos sobre Javascript, vamos a adelantar una instruccin que aun no conocemos. En este ejemplo vamos a declarar una variable e inicializarla a 0. Luego iremos sumando a esa variable un nmero aleatorio del 1 al 100 hasta que sumemos 1.000 o ms, imprimiendo el valor de la variable suma despus de cada operacin. Ser necesario utilizar el bucle WHILE porque no sabemos exactamente el nmero de iteraciones que tendremos que realizar (depender de los valores aleatorios que se vayan obteniendo). var suma = 0 while (suma < 1000){ suma += parseInt(Math.random() * 100) document.write (suma + "<br>") } Suponemos que por lo que respecta al bucle WHILE no habr problemas, pero donde si que puede haberlos es en la sentencia utilizada para tomar un nmero aleatorio. Sin embargo, no es necesario explicar aqu la sentencia porque lo tenemos planeado hacer ms adelante. De todos modos, si lo deseas, puedes ver este artculo que habla sobre nmeros aleatorios en Javascript. Podemos ver una pgina con el ejemplo en funcionamiento. Con esto ya hemos conocido todos los tipos de bucles que existen en Javascript, no obstante aun vamos a dedicar un artculo para explicar las sentencias break y continue que nos sirven para alterar el funcionamiento normal de los bucles en dos sentidos.
IF significa SI (condicional) en espaol. Su funcionamiento es simple. Se evala una condicin, si es verdadera ejecuta un cdigo, si es falsa, ejecuta otro cdigo (o contina con la ejecucin del programa). Estructura IF en pseudocdigo:

if (condicin) ejecuta esto si la condicin es verdadera else ejecuta esto si la condicin es falsa Ejemplo de la estructura de seleccin if en lenguaje C: int edad; printf(Ingrese su edad: ); scanf(%d, &edad); if (edad>=18) { printf(Usted es mayor de edad. ); } else { printf(Usted es menor de edad. ); }; En este ejemplo, declaramos una variable llamada numero de tipo entero. Luego imprimimos en pantalla Ingrese su edad, y con la funcin scanf esperamos que el usuario ingrese un nmero entero. Luego entra en juego la estructura de seleccin if. Si la condicin numero>=18 evala verdadero (true), se imprime en pantalla Usted es mayor de edad. En cambio, si se evala en falso (false), se imprime en pantalla Usted es menor de edad. Luego contina con la carga del programa. Puede obviarse la instruccin else si se desea. if (condicin) { ejecuta esto slo si la condicin es verdadera }; La condicin siempre debe devolver un valor de verdad o falsedad. Aqu se utilizan los operadores lgicos.

Estructura condicional if anidada


En ocaciones cuando hay ms de dos caminos posibles es necesario implementar estructuras condicionales anidadas, es decir por la rama del verdadero o falso (else:) disponemos otras estructuras condicionales. Debemos tener cuidado con la indentacin del cdigo para evitar errores. Veamos un ejemplo que requiere utilizar estructuras condicionales anidadas. Generaremos tres nmeros aleatorios y luego imprimiremos el mayor de los tres:
import random x1=random.randint(1,100) x2=random.randint(1,100) x3=random.randint(1,100) print x1 print '-' print x2 print '-' print x3 print '<br>' print 'El mayor es:' if x1>x2: if x1>x3: print x1 else: print x3 else: if x2>x3: print x2 else: print x3

Como podemos observar por el bloque del verdadero del primer if tenemos otra estructura condicional (debemos indentar cada estructura condicional):
if x1>x2: if x1>x3: print x1 else: print x3

Problema resuelto
Generar un valor aleatorio entre 1 y 1000. Luego imprimir un mensaje indicando cuantos dgitos tiene.

import random x1=random.randint(1,1000) print x1 print '<br>' if x1<10: print 'Tiene 1 dgito' else: if x1<100: print 'Tiene 2 dgitos' else: if x1<1000: print 'Tiene 3 dgitos' else: print 'Tiene 4 dgitos'

Problema Propuesto
Generar un valor aleatorio entre -10 y 10. Mostrar un mensaje si el valor generado es negativo, nulo o positivo. Para generar un valor aleatorio en ese rango debemos plantear la siguiente expresin:
x=-10+random.randint(0,20)

Operador
Saltar a: navegacin, bsqueda Para otros usos de este trmino, vase Operador (desambiguacin).

En matemticas, el trmino operador puede usarse con varios significados. Algunas veces, un operador es un smbolo matemtico que indica que debe ser llevada a cabo una operacin especificada1 sobre un cierto nmero de operandos (nmero, funcin, vector, etc.).

Contenido
[ocultar]

1 Operadores en un espacio vectorial 2 Operadores bilineales o bivariantes 3 Tipos generales de operadores o 3.1 Operadores de condicin o 3.2 Operadores lgicos o 3.3 Operaciones aritmticas 4 Otros operadores 5 Temas relacionados 6 Referencias

[editar] Operadores en un espacio vectorial


Un uso frecuente del trmino operador es aplicacin entre dos espacios vectoriales. Se usa con ms frecuencia cuando alguno de ellos tiene dimensin infinita. Este suele ser el caso de un espacio vectorial cuyos elementos son funciones. Si se trata de una aplicacin lineal, podemos llamarle operador lineal. El estudio de los operadores lineales es de particular inters en un espacio de Banach. En este espacio, existe una norma y podemos definir una esfera de radio unidad. Se llama operador lineal acotado al operador lineal que est acotado en esta esfera. Los operadores lineales acotados entre dos espacios de Banach forman a su vez un espacio de Banach cuyo estudio es bastante interesante. Una extensin de la derivada real a los operadores es la derivada de Frechet que es un operador lineal acotado. No todos los operadores lineales interesantes son acotados: hay muchos ejemplos de operadores importantes en mecnica cuntica que no son acotados. El ejemplo ms tpico de operador lineal no acotado es la derivada -considerada como una aplicacin entre dos espacios de funciones reales-. El operador derivada, sobre la funcin : , acta

que se escribe a su derecha, produciendo una nueva funcin de

Si un operador est definido entre dos espacios vectoriales de funciones, acta transformando unas funciones en otras.

[editar] Operadores bilineales o bivariantes


(Para definiciones ms estrictas sobre linealidad y bilinealidad, vanse los temas relacionados) Su nombre depende del autor, son los operadores que actan sobre dos objetos (escritos, generalmente, a ambos lados del operador) produciendo un nico resultado. Vanse los casos siguientes.

[editar] Tipos generales de operadores


[editar] Operadores de condicin

Relacionan un trmino A con otro B estableciendo su igualdad, jerarqua o cualquier otra relacin posible, como ejemplos tenemos:

A = B establece que A es igual que B. En este caso hay que distinguir entre operador = de asignacin y el operador = de comparacin. El primero toma el valor de B y se lo asigna a A; el segundo solamente

compara los valores de A y B sin modificarlos y devuelve un valor lgico o de verdad verdadero si ambos valores son iguales o falso si dichos valores no son iguales.

A B o desigualdad. Este caso es justamente el opuesto al anterior, aunque aqu no podemos hablar de asignacin, pero si de comparacin. Ahora el resultado de esta operacin ser F si los valores A y B son iguales y V si son distintos.

Operadores de orden: establecen o verifican clasificaciones entre nmeros (A < B, A > B, etc.) u otro tipo de valores (caracteres, cadenas, ...). Todo tipo de dato susceptible de ser ordenado por cualquier criterio puede ser comparado con estos operadores; como los anteriores devuelven un valor de verdad en funcin del resultado que tenga la comparacin en cada caso.

A > B Devuelve V si A es estrictamente mayor que B y F en caso contrario A < B Devuelve V si A es estrictamente menor que B y F en caso contrario A B Devuelve V si A es mayor o igual que B y F en caso contrario A B Devuelve V si A es menor o igual que B y F en caso contrario

Otros operadores relacionales menos usuales son los llamados operadores geomtricos: paralelismo (A || B), perpendicularidad y otros

[editar] Operadores lgicos Artculo principal: Operador lgico

Muy utilizados en Informtica, Lgica proposicional y lgebra booleana, entre otras disciplinas. Los operadores lgicos nos proporcionan un resultado a partir de que se cumpla o no una cierta condicin. Esto genera una serie de valores que, en los casos ms sencillos, pueden ser parametrizados con los valores numricos 0 y 1, como se puede apreciar en los ejemplos de abajo. La combinacin de dos o ms operadores lgicos conforma una funcin lgica.

Los ms sencillos son (ntese su relacin con los operadores relacionales): o Operador NO-lgico: 'A' significa todo lo que no es A' o Operador Y-lgico: 'A B' significa 'A y B a la vez'; resultando FALSO (0) si no se cumple y VERDADERO (1) si s lo hace. o Operador O-lgico: 'A B' significa 'O bien A, o bien B, o bien los dos'; resultando FALSO (0) si no se dan ni A ni B y VERDADERO (1) si se da alguno de los dos o los dos a la vez. o Operador =: 'A = B' significa 'A debe ser igual a B'; resultando FALSO (0) si esto no es as y VERDADERO (1) en caso contrario. o Operador <: 'A < B' significa 'A debe ser menor que B'; resultando FALSO (0) si no se satisface y VERDADERO (1) en caso contrario. Los operadores ms complejos se construyen a partir de los anteriores (podra incluirse alguno ms) y ya entran dentro de lo que sera una funcin lgica. Un ejemplo muy utilizado sera 'SI(condicin;A;B)' ('IF condicin THEN A ELSE B' en la mayora de

los lenguajes de programacin) cuyo resultado sera A si se satisface la 'condicin' o B en caso contrario. [editar] Operaciones aritmticas

Las operaciones aritmticas pueden ser entendidas, desde un punto de vista operacional, como operadores bivariantes o como operadores a derecha. Por ejemplo, '2 3' puede ser el operador bivariante de la multiplicacin actuando sobre los nmeros 2 y 3, o el operador '2 ' que acta sobre 3. En este grupo se encuentran la adicin, la sustraccin, multiplicacin y la divisin. Otras operaciones, derivadas de las operaciones aritmticas usuales son la potenciacin, radicacin y logaritmacin.

[editar] Otros operadores switch


La sentencia switch es similar a una serie de sentencias IF en la misma expresin. En muchas ocasiones, es posible que se quiera comparar la misma variable (o expresin) con muchos valores diferentes, y ejecutar una parte de cdigo distinta dependiendo de a que valor es igual. Para esto es exactamente la expresin switch. Nota: Cabe sealar que a diferencia de algunos otros lenguajes, la sentencia continue se aplica a switch y acta de manera similar a break. Si se tiene un switch dentro de un bucle y se desea continuar a la siguiente iteracin de del ciclo exterior, se utiliza continue 2. Nota: Tener en cuenta que switch/case hace comparaciones flexibles.

Constructor y Destructor de Set


Sintaxis:
#include <set> set(); set( const set& conjunto ); set( input_iterator inicio, input_iterator final ); set( input_iterator inicio, input_iterator final, const key_compare& comp ); explicit set( const key_compare& comp ); ~set();

Cada set tiene un constructor por defecto, constructor copia, y destructor.

Constructor Por Defecto

El constructor por defecto no tiene argumentos. Crea un conjunto vaco del tipo indicado, usando los criterios de almacenamiento y comparacin por defecto. Ejecuta en tiempo constante.
Constructor Copia

El constructor copia por defecto crea una copia de un conjunto. Se ejecuta en tiempo lineal.
Destructor

El destructor es invocado automticamente cuando el set deba ser destrudo.


Otros Constructores
set

acepta tambin constructores de rango, como los otros contenedores de la biblioteca STL. Estos constructores toman dos argumentos indicando el inicio y final (uno pasado del ltimo elemento) de un rango externo, y crean un nuevo conjunto copiando los elementos de ese rango en el orden adecuado. Opcionalmente se puede pasar el criterio de comparacin como tercer parmetro comp. Un constructor explcito toma como nico argumento un criterio de comparacin comp, y crea un conjunto vaco que siga ese criterio de comparacin para ordenar sus elementos. Este constructor debiera ejecutarse en tiempo constante.
Ejemplos
const int max_nums = 10; int nums[max_nums] = {3,1,4,1,5,9,2,6,5,8}; set<int> digitos; for( int i = 0; i < max_nums; ++i ) digitos.insert(nums[i]); cout << "Los digitos unicos son: "; for( set<int>::const_iterator iter = digitos.begin(); iter != digitos.end(); ++iter ) { cout << *iter << ' '; } cout << '\n';

Al ser ejecutado, este cdigo muestra lo que sigue:


Los digitos unicos son: 1 2 3 4 5 6 8 9

Para construir el mismo set usando los constructores por rangos, ahorrndose el ciclo for de inicializacin, se puede hacer de la manera siguiente:
const int max_nums = 10; int nums[max_nums] = {3,1,4,1,5,9,2,6,5,8}; set<int> digitos (nums, nums + max_nums);

Polimorfismo

En programacin orientada a objetos el polimorfismo se refiere a la posibilidad de enviar un mensaje a un grupo de objetos cuya naturaleza puede ser heterognea. El nico requisito que deben cumplir los objetos que se utilizan de manera polimrfica es saber responder al mensaje que se les enva. La apariencia del cdigo puede ser muy diferente dependiendo del lenguaje que se utilice, ms all de las obvias diferencias sintcticas. Por ejemplo, en un lenguaje de programacin que cuenta con un sistema de tipos dinmico (en los que las variables pueden contener datos de cualquier tipo u objetos de cualquier clase) como Smalltalk no se requiere que los objetos que se utilizan de modo polimrfico sean parte de una jerarqua de clases. En lenguajes basados en clases y con un sistema de tipos de datos fuerte (independientemente si la verificacin se realiza en tiempo de compilacin o de ejecucin), es posible que el nico modo de poder utilizar objetos de manera polimrfica sea que compartan una raz comn, es decir, una jerarqua de clases, ya que esto proporciona la compatibilidad de tipos de datos necesaria para que sea posible utilizar una misma variable de referencia (que podr apuntar a objetos de diversas subclases de dicha jerarqua) para enviar el mismo mensaje (o un grupo de mensajes) al grupo de objetos que se tratan de manera polimrfica. En Java, es frecuente y profusamente aconsejada la utilizacin de interfaces (que es un mecanismo del lenguaje que se emplea por medio de la palabra clave Interface) para proveer la necesaria concordancia de tipos para hacer posible el polimorfismo, tambin como un contrato que debe cumplir cualquier clase que implemente una cierta interfaz y como una forma de documentacin para los desarrolladores. A veces, en la literatura que refiere especficamente a Java se hace mencin a "herencia y polimorfismo de interfaces", lo que no concuerda con los conceptos de la programacin orientada a objetos porque una clase que implementa una interfaz slo obtiene su tipo de datos y la obligacin de implementar sus mtodos, no obtiene comportamiento ni de atributos. Esto muchas veces resulta paradjico porque en Java frecuentemente se utiliza la mal llamada "herencia de interfaces" para dotar a una clase con un tipo adicional (o varios) para que su uso en combinacin con la agregacin (colaboracin o composicin) permita evitar la necesidad de la herencia mltiple y favorezca una utilizacin ms amplia del polimorfismo. No obstante, el uso de una jerarqua de clases como paso previo, es muy habitual incluso en aquellos lenguajes en los que es posible prescindir de tal jerarqua, ya que, desde una perspectiva conceptual, se puede decir que al pertenecer los "objetos polimrficos" a subclases de una misma jerarqua, se asegura la equivalencia semntica de los mensajes que se invocarn de modo polimrfico. Por esto, en programacin orientada a objetos a veces se denomina al polimorfismo como "polimorfismo de subclase (o de subtipo)".

En resumen, en la programacin orientada a objetos, la esencia del polimorfismo no atae a la clase o prototipo de la que provienen los objetos. An as, en los lenguajes basados en clases, es habitual (y en algunos tal vez sea el nico modo) que dichos objetos pertenezcan a subclases pertenecientes a una misma jerarqua. Entonces, el polimorfismo debe verse como una forma flexible de usar un grupo de objetos (como si fueran slo uno). Podra decirse que el polimorfismo en esencia refiere al comportamiento de los objetos, no a su pertenencia a una jerarqua de clases (o a sus tipos de datos). Lo anterior se hace an ms evidente en lenguajes de programacin orientada a objetos basados en prototipos, como Self, en los que las clases no existen. Adems, es importante remarcar que si un cierto grupo de objetos pueden utilizarse de manera polimrfica es porque, en ltima instancia, todos ellos saben responder a un cierto mensaje (o a varios), pero dado que esos mismos objetos generalmente contendrn otros mtodos (que otros objetos en dicho grupo no contienen), difcilmente se pueda decir lisa y llanamente que los objetos son polimrficos; lo correcto es decir que esos objetos se pueden utilizar de modo polimrfico para un cierto conjunto de mensajes. Un ejemplo. Podemos crear dos clases distintas: Pez y Ave que heredan de la superclase Animal. La clase Animal tiene el mtodo abstracto mover que se implementa de forma distinta en cada una de las subclases (peces y aves se mueven de forma distinta). Entonces, un tercer objeto puede enviar el mensaje mover a un grupo de objetos Pez y Ave por medio de una variable de referencia de clase Animal, haciendo as un uso polimrfico de dichos objetos respecto del mensaje mover. El concepto de polimorfismo, desde una perspectiva ms general, se puede aplicar tanto a funciones como a tipos de datos. As nacen los conceptos de funciones polimrficas y tipos polimrficos. Las primeras son aquellas funciones que pueden evaluarse o ser aplicadas a diferentes tipos de datos de forma indistinta; los tipos polimrficos, por su parte, son aquellos tipos de datos que contienen al menos un elemento cuyo tipo no est especificado.

Contenido
[ocultar]

1 Clasificacin 2 Ejemplo de polimorfismo 3 Polimorfismo desde una interfaz 4 Diferencias entre polimorfismo y sobrecarga

[editar] Clasificacin
Se puede clasificar el polimorfismo en dos grandes clases:

Polimorfismo dinmico (o polimorfismo paramtrico) es aqul en el que el cdigo no incluye ningn tipo de especificacin sobre el tipo de datos sobre el que se trabaja. As, puede ser utilizado a todo tipo de datos compatible. Polimorfismo esttico (o polimorfismo ad hoc) es aqul en el que los tipos a los que se aplica el polimorfismo deben ser explicitados y declarados uno por uno antes de poder ser utilizados. El polimorfismo dinmico unido a la herencia es lo que en ocasiones se conoce como programacin genrica. Tambin se clasifica en herencia por redefinicin de mtodos abstractos y por mtodo sobrecargado. El segundo hace referencia al mismo mtodo con diferentes parmetros. Otra clasificacin agrupa los polimorfismo en dos tipos: Ad-Hoc que incluye a su vez sobrecarga de operadores y coercin, Universal (inclusin o controlado por la herencia, paramtrico o genericidad).

[editar] Ejemplo de polimorfismo


En el siguiente ejemplo hacemos uso del lenguaje C++ para ilustrar el polimorfismo. Se observa a la vez el uso de las funciones virtuales puras, como se les conoce en C++, estas funciones constituyen una interfaz ms consistente cuando se trabaja con una jerarqua de clases, puesto que hacen posible el enlace durante la ejecucin. Sin embargo como se ver, para que el polimorfismo funcione no es una condicin obligatoria que todas las funciones en la clase base sean declaradas como virtuales.

Diagrama de clases UML, que describe grficamente la relacin entre la clase base Figura y sus posibles clases derivadas, y la entidad que utiliza esta estructura: la Aplicacin, tambin identificado como objeto Cliente.

#include<iostream> using namespace std; class Figura { private: float base; float altura; public: void captura(); virtual unsigned float perimetro()=0; virtual unsigned float area()=0; }; class Rectangulo: public Figura { public: void imprime(); unsigned float perimetro(){return 2*(base+altura);} unsigned float area(){return base*altura;} }; class Triangulo: public Figura { public: void muestra(); unsigned float perimetro(){return 2*altura+base} unsigned float area(){return (base*altura)/2;} }; void Figura::captura() { cout << "CALCULO DEL AREA Y PERIMETRO DE UN TRIANGULO ISSCELES Y UN RECTANGULO:" << endl; cout << "escribe la altura: "; cin >> altura; cout << "escribe la base: "; cin >> base; cout << "EL PERIMETRO ES: " << perimetro(); cout << "EL AREA ES: " << area(); }

[editar] Polimorfismo desde una interfaz


Aunque el polimorfismo es el mismo se aplique donde se aplique, el modo en que se aplica desde una interfaz puede resultar un poco ms oscuro y difcil de entender. Se expone un sencillo ejemplo (en VB-NET) comentado para entender como funciona aplicado desde una interfaz, primero se escribe el cdigo y luego se comenta el funcionamiento. Nota: para no enturbiar el cdigo en exceso, todo lo que no se declara privado se sobreentiende pblico.
' Declaramos una interfaz llamada IOperar y declaramos una funcin llamada Operar ' que implementarn las clases deseadas: Interface IOperar Function Operar(valor1 as integer, valor2 as integer) as long End Interface ' Declaramos una clase que trabaja ms alejada del usuario y que contendra funciones comunes

' para las siguiente clase, si no fueran idnticas iran en la interfaz, ' pero al caso de mostrar el polimorfismo se suponen idnticas: Class Operacion Function Calcular(clasellamante as Object) as Long ' aqu ira el cdigo comn a todas las operaciones.... que llaman a esa funcin ' por ejemplo recoger los 2 valores de la operacin, chequear que estn en el rango deseado, etc. ' se supone que la funcin inputValor recoge un valor de algn sitio valor1 as integer = inputValor() valor2 as integer = inputValor() op as New IOperar = clasellamante Return op.Operar(valor1,valor2) 'AQU es donde se utiliza el polimorfismo. End Function End Class ' Declaramos 2 clases: Sumar y Restar que implementan la interfaz y que llaman a la clase Operacion: Class Sumar Implements IOperar Private Function Operar(valor1 as Integer, valor2 as Integer) as Long Implements IOperar.Operar Return valor1 + valor2 End Function Function Calcular() as Long op as New operacion Return op.Calcular(Me) ' se est llamando a la funcin 'Calcular' de la clase 'Operacin' End Function End Class ' segunda clase.... Class Restar Implements IOperar Private Function Operar(valor1 as Integer, valor2 as Integer) as Long Implements IOperar.Operar Return valor1 - valor2 End Function Function Calcular() as Long op as New operacion Return op.Calcular(Me) ' se est llamando a la funcin 'Calcular' de la clase 'Operacin' End Function End Class

Analicemos ahora el cdigo para entender el polimorfismo expuesto en la interfaz: La interfaz expone un mtodo que puede ser implementado por las diferentes clases, normalmente relacionadas entre si. Las clases Sumar y Restar implementan la interfaz pero el mtodo de la interfaz lo declaramos privado para evitar ser accedido libremente y adems tienen un mtodo llamado Calcular que llama a la clase Operacion donde tenemos otro mtodo con el mismo nombre. Es esta clase ltima la que realiza el polimorfismo y debe fijarse como es a travs de una instancia de la interfaz que llama al mtodo operar. La interfaz sabe a qu mtodo de qu clase llamar desde el momento

que asignamos un valor a la variable OP en el mtodo Calcular de la clase Operacion, que a su vez recibi la referencia del mtodo Calcular desde la clase que la llama, sea sta cual sea, se identifica a s misma, mediante la referencia Me This segn el lenguaje empleado. Debe notarse que la instancia de la interfaz accede a sus mtodos aunque en sus clases se hayan declarado privadas.

[editar] Diferencias entre polimorfismo y sobrecarga


El polimorfismo como se muestra en el ejemplo anterior, suele ser bastante ventajoso aplicado desde las interfaces, ya que permite crear nuevos tipos sin necesidad de tocar las clases ya existentes (imaginemos que deseamos aadir una clase Multiplicar), basta con recompilar todo el cdigo que incluye los nuevos tipos aadidos. Si se hubiera recurrido a la sobrecarga durante el diseo exigira retocar la clase anteriormente creada al aadir la nueva operacin Multiplicar, lo que adems podra suponer revisar todo el cdigo donde se instancia a la clase.

La sobrecarga se da siempre dentro de una sola clase, mientras que el polimorfismo se da entre clases distintas. Un mtodo est sobrecargado si dentro de una clase existen dos o ms declaraciones de dicho mtodo con el mismo nombre pero con parmetros distintos, por lo que no hay que confundirlo con polimorfismo. En definitiva: La sobrecarga se resuelve en tiempo de compilacin utilizando los nombres de los mtodos y los tipos de sus parmetros; el polimorfismo se resuelve en tiempo de ejecucin del programa, esto es, mientras se ejecuta, en funcin de la clase a la que pertenece el objeto.

Herencia
En orientacin a objetos la herencia es, despus de la agregacin o composicin, el mecanismo ms utilizado para alcanzar algunos de los objetivos ms preciados en el desarrollo de software como lo son la reutilizacin y la extensibilidad. A travs de ella los diseadores pueden crear nuevas clases partiendo de una clase o de una jerarqua de clases preexistente (ya comprobadas y verificadas) evitando con ello el rediseo, la modificacin y verificacin de la parte ya implementada. La herencia facilita la creacin de objetos a partir de otros ya existentes e implica que una subclase obtiene todo el comportamiento (mtodos) y eventualmente los atributos (variables) de su superclase. Es la relacin entre una clase general y otra clase ms especifica. Por ejemplo: Si declaramos una clase prrafo derivada de una clase texto, todos los mtodos y variables asociadas con la clase texto, son automticamente heredados por la subclase prrafo. La herencia es uno de los mecanismos de los lenguajes de programacin orientada a objetos basados en clases, por medio del cual una clase se deriva de otra de manera que extiende su funcionalidad. La clase de la que se hereda se suele denominar clase base, clase padre, superclase, clase ancestro (el vocabulario que se utiliza suele depender en gran medida del lenguaje de programacin).

En los lenguajes que cuentan con un sistema de tipos fuerte y estrictamente restrictivo con el tipo de datos de las variables, la herencia suele ser un requisito fundamental para poder emplear el Polimorfismo, al igual que un mecanismo que permita decidir en tiempo de ejecucin qu mtodo debe invocarse en respuesta a la recepcin de un mensaje, conocido como enlace tardo (late binding) o enlace dinmico (dynamic binding).

Contenido
[ocultar]

1 Ejemplo en Java 2 Clase Abstracta 3 Herencia y ocultacin de informacin 4 Redefinicin de mtodos 5 Ventajas 6 Estereotipos de herencia

[editar] Ejemplo en Java


public class Mamifero{ private int patas; private String nombre; public void imprimirPatas(){ JOptionPane.showMessageDialog(null," Tiene " + patas + "patas\n","Mamifero", JOptionPane.INFORMATION_MESSAGE); } public Mamifero(String nombre, int patas){ this.nombre = nombre; this.patas = patas; } } public class Perro extends Mamifero { public Perro(String nombre){ super(nombre, 4); } } public class Gato extends Mamifero { public Gato(String nombre){ super(nombre, 4); } } public class CrearPerro { public static void main(String [] args) { Perro perrito = new Perro("Pantaleon"); perrito.imprimirPatas(); /*Est en la clase mamfero*/ } }

Se declaran las clases mamferos, gato y perro, haciendo que gato y perro sean unos mamferos (derivados de esta clase), y se ve como a travs de ellos se nombra al animal pero as tambin se accede a patas dndole el valor por defecto para esa especie. Es importante destacar tres cosas. La primera, es que la herencia no es un mecanismo esencial en el paradigma de programacin orientada a objetos; en la mayora de los lenguajes orientados a objetos basados en prototipos las clases no existen, en consecuencia tampoco existe la herencia y el polimorfismo se logra por otros medios. La segunda, es que el medio preferido para lograr los objetivos de extensibilidad y reutilizacin es la agregacin o composicin. La tercera, es que en lenguajes con un sistema de tipos dbiles, el polimorfismo se puede lograr sin utilizar la herencia. Por otra parte y aunque la herencia no es un concepto indispensable en el paradigma de programacin orientada a objetos, es mucho ms que un mecanismo de los lenguajes basados en clases, porque implica una forma de razonar sobre cmo disear ciertas partes de un programa. Es decir, no slo es un mecanismo que permite implementar un diseo, sino que establece un marco conceptual que permite razonar sobre cmo crear ese diseo.

[editar] Clase Abstracta


La herencia permite que existan clases que nunca sern instanciadas directamente. En el ejemplo anterior, una clase "perro" heredara los atributos y mtodos de la clase "mamfero", as como tambin "gato", "delfn" o cualquier otra subclase; pero, en ejecucin, no habr ningn objeto "mamfero" que no pertenezca a alguna de las subclases. En ese caso, a una clase as se la conocera como Clase Abstracta. La ausencia de instancias especficas es su nica particularidad, para todo lo dems es como cualquier otra clase.

[editar] Herencia y ocultacin de informacin


En ciertos lenguajes, el diseador puede definir qu variables de instancia y mtodos de los objetos de una clase son visibles. En C++ y java esto se consigue con las especificaciones private, protected y public. Slo las variables y mtodos definidos como pblicos en un objeto sern visibles por todos los objetos. En otros lenguajes como Smalltalk, todas las variables de instancia son privadas y todos los mtodos son pblicos. Dependiendo del lenguaje que se utilice, el diseador tambin puede controlar qu miembros de las superclases son visibles en las subclases. En el caso de java y C++ los especificadores de acceso (private, protected, public) de los miembros de la superclase afectan tambin a la herencia:

Private: ningn miembro privado de la superclase es visible en la subclase. Protected: los miembros protegidos de la superclase son visibles en la subclase, pero no visibles para el exterior. Public: los miembros pblicos de la superclase siguen siendo pblicos en la subclase.

[editar] Redefinicin de mtodos


En la clase derivada se puede redefinir algn mtodo existente en la clase base, con el objeto de proveer una implementacin diferente. Para redefinir un mtodo en la subclase, basta con declararlo nuevamente con la misma signatura (nombre y parmetros). Si se invoca un cierto mtodo de un objeto que no est definido en su propia clase, se dispara la bsqueda hacia arriba en la jerarqua a la que dicha clase pertenece. Sin embargo, si existieran dos mtodos con la misma signatura, uno en la clase y otro en una superclase, se ejecutara el de la clase, no el de la superclase. Cuando se redefine un mtodo en una clase es posible acceder explcitamente al mtodo original de su superclase, mediante una sintaxis especfica que depende del lenguaje de programacin empleado (en muchos lenguajes se trata de la palabra clave super).

[editar] Ventajas

Ayuda a los programadores a ahorrar cdigo y tiempo, ya que la clase padre ha sido implementada y verificada con anterioridad, restando solo referenciar desde la clase derivada a la clase base (que suele ser extends, inherits, subclass u otras palabras clave similares, dependiendo del lenguaje). Los objetos pueden ser construidos a partir de otros similares. Para ello es necesario que exista una clase base (que incluso puede formar parte de una jerarqua de clases ms amplia). La clase derivada hereda el comportamiento y los atributos de la clase base, y es comn que se le aada su propio comportamiento o que modifique lo heredado. Toda clase pueden servir como clase base para crear otras.

[editar] Estereotipos de herencia


Herencia simple: Una clase slo puede heredar de una clase base y de ninguna otra. Herencia mltiple: Una clase puede heredar las caractersticas de varias clases base, es decir, puede tener varios padres. En este aspecto hay discrepancias entre los diseadores de lenguajes. Algunos de ellos han preferido no admitir la herencia mltiple debido a que los potenciales conflictos entre mtodos y variables con igual nombre, y eventualmente con comportamientos diferentes crea un desajuste cognitivo que va en contra de los principio de la programacin orientada a objetos. Por ello, la mayora de los lenguajes orientados a objetos admite herencia simple. En contraste, algunos pocos lenguajes admiten herencia mltiple, entre ellos: C++, Python, PHP, Eiffel, mientras que Smalltalk, Java, Ada y C# slo permiten herencia simple.

Mtodos y propiedades (miembros) pblicos, privados y estticos


Al escribir archivos de clases de ActionScript en un archivo de script externo, podr crear cuatro tipos de mtodos y propiedades: pblicos, privados, estticos y estticos privados. Estos mtodos y propiedades definen la forma en que Flash puede acceder a las variables y le permiten especificar qu partes del cdigo pueden acceder a determinados mtodos o propiedades. Al crear aplicaciones basadas en clases, con independencia del tamao de la aplicacin, es particularmente importante tener en cuenta si un mtodo o propiedad debe ser privado o pblico. Al tener en cuenta este aspecto, conseguir que el cdigo sea lo ms seguro posible. Por ejemplo, si est creando una clase User, puede que desee impedir que las personas que usen la clase puedan cambiar un ID de usuario. Al establecer la propiedad de la clase (a veces denominada miembro de instancia) como private, podr limitar el acceso a la propiedad al cdigo situado dentro de la clase o las subclases de dicha clase, lo que significa que ningn usuario podr cambiar la propiedad directamente. Mtodos y propiedades pblicos La palabra clave public especifica que una variable o funcin est disponible para cualquier origen de llamada. Dado que las variables y funciones son pblicas de forma predeterminada, la palabra clave this se utiliza principalmente por motivos de estilo y legibilidad, lo que indica que la variable existe en el mbito actual. Por ejemplo, quiz desee utilizar la palabra clave this para mantener la coherencia de un bloque de cdigo que contenga adems variables privadas o estticas. La palabra clave this se puede utilizar con la palabra clave pblica o privada. La siguiente clase Sample (de muestra) ya tiene un mtodo pblico denominado myMethod():
class Sample { private var ID:Number; public function myMethod():Void { this.ID = 15; trace(this.ID); // 15 trace("myMethod"); } }

Si desea aadir una propiedad public, utilice la palabra "public" en lugar de "private", como puede observarse en el siguiente cdigo de muestra:
class Sample { private var ID:Number; public var email:String; public function myMethod():Void { trace("myMethod"); } }

Dado que la propiedad email es pblica, puede cambiarla dentro de la clase Sample o directamente dentro de un FLA. Mtodos y propiedades privados La palabra clave private especifica que una variable o funcin est nicamente disponible para la clase que la declara o define o para las subclases de dicha clase. De manera predeterminada, una variable o funcin es pblica y est disponible para cualquier origen de llamada. Utilice la palabra clave this si desea restringir el acceso a una variable o funcin, como puede observarse en el siguiente ejemplo:
class Sample { private var ID:Number; public function myMethod():Void { this.ID = 15; trace(this.ID); // 15 trace("myMethod"); } }

Si desea aadir una propiedad privada a la clase anterior, simplemente deber usar la palabra clave private antes de la palabra clave var. Si intenta acceder a la propiedad privada ID desde fuera de la clase Sample, obtendr un error de compilacin y un mensaje en el panel Salida. El mensaje indica que el miembro es privado y no permite el acceso. Mtodos y propiedades estticos La palabra clave static especifica que una variable o funcin se crea nicamente una vez por cada clase, en lugar de crearse en cada objeto basado en dicha clase. Puede acceder a un miembro de clase esttico sin crear una instancia de la clase. Los mtodos y propiedades estticos pueden establecerse en el mbito pblico o privado. Los miembros estticos, tambin conocidos como miembros de clase, se asignan a la clase, no a una instancia de la clase. Para invocar un mtodo de la clase o para acceder a una propiedad de la clase, debe hacer referencia al nombre de la clase en lugar de a una instancia concreta de la misma, como se muestra en el siguiente cdigo:
trace(Math.PI / 8); // 0.392699081698724

Si escribe slo esta lnea de cdigo en el panel Script del panel Acciones, se ve la sentencia trace resultante en el panel Salida. Por ejemplo, en el anterior ejemplo de la clase Sample, podra crear una variable esttica para supervisar cuntas instancias de la clase se crean, como se muestra en el siguiente cdigo:
class Sample { public static var count:Number = 0;

private var ID:Number; public var email:String; public function Sample() { Sample.count++; trace("count updated: " + Sample.count); } public function myMethod():Void { trace("myMethod"); } }

Cada vez que crea una instancia nueva de la clase Sample, el mtodo constructor traza el nmero total de instancias de clase Sample definidas hasta el momento. Algunas de las clases de ActionScript del ms alto nivel tienen miembros de clase (o miembros estticos), como ya hemos visto anteriormente en esta seccin al llamar a la propiedad Math.PI. Se accede o se invoca a los miembros de clase (propiedades y mtodos) desde el propio nombre de la clase, no desde una instancia de la misma. Por consiguiente, no se crea una instancia de la clase para utilizar estas propiedades y mtodos. Por ejemplo, la clase Math del ms alto nivel consta slo de propiedades y mtodos estticos. Para llamar a cualquiera de sus mtodos, no debe crear una instancia de la clase Math. En su lugar, simplemente llame a los mtodos en la propia clase Math. El siguiente cdigo llama al mtodo sqrt() de la clase Math:
var squareRoot:Number = Math.sqrt(4); trace(squareRoot); // 2

El cdigo siguiente invoca el mtodo max() de la clase Math, que determina, entre dos nmeros, cul de ellos es el mayor:
var largerNumber:Number = Math.max(10, 20); trace(largerNumber); // 20

Para ms informacin sobre la creacin de miembros de clases, consulte Miembros de clase y Utilizacin de miembros de clase. Para ver ejemplos que ilustran la creacin de un men dinmico con datos XML y un archivo de clase personalizado, visite la pgina de ejemplos de Flash en www.adobe.com/go/learn_fl_samples_es. El ejemplo llama al constructor XmlMenu() de ActionScript y le pasa dos parmetros: la ruta al archivo de men XML y una referencia a la lnea de tiempo actual. Descargue y descomprima el archivo zip Samples y vaya a la carpeta ActionScript2.0/XML_Menu para acceder a los ejemplos.

XmlMenu.as xmlmenu.fla

string.h
Saltar a: navegacin, bsqueda

string.h es un archivo de la Biblioteca estndar del lenguaje de programacin C que contiene la definicin de macros, constantes, funciones y tipos de utilidad para trabajar con cadenas de caracteres y algunas operaciones de manipulacin de memoria (el nombre string puede ser algo inapropiado). Las funciones declaradas en string.h se han hecho muy populares, por lo que estn garantizadas para cualquier plataforma que soporte C. Sin embargo, existen algunos problemas de seguridad con estas funciones, como el desbordamiento de buffer (buffer overflow), que hacen que algunos programadores prefieran opciones ms seguras frente a la portabilidad que estas funciones ofrecen. Adems, las funciones para cadenas de caracteres slo trabajan con conjuntos de caracteres ASCII o extensiones ASCII compatibles.

Contenido
[ocultar]

1 Constantes y tipos 2 Funciones o 2.1 Extensiones para C ISO 3 Vase tambin

[editar] Constantes y tipos


Nombre
NULL

Descripcin macro que representa la constante puntero nulo; representa un valor de puntero que no apunta a ninguna direccin vlida de objeto alguno en memoria

size_t tipo entero sin signo (positivo); es el tipo devuelto por el operador sizeof

[editar] Funciones
Nombres
memcpy

Descripcin copia n bytes entre dos reas de memoria que no deben solaparse copia n bytes entre dos reas de memoria; al contrario que memcpy las reas deben solaparse busca un valor a partir de una direccin de memoria dada y devuelve un puntero a

memmove memchr

la primera ocurrencia del valor buscado o NULL si no se encuentra


memcmp memset strcat

compara los n primeros caracteres de dos reas de memoria sobre escribe un rea de memoria con un patrn de bytes dado aade una cadena al final de otra

strncat aade los n primeros caracteres de una cadena al final de otra strchr

localiza un carcter en una cadena, buscando desde el principio

strrchr localiza un carcter en una cadena, buscando desde el final strcmp

compara dos cadenas alfabeticamente ('a'!='A')

strncmp compara los n primeros caracteres de dos cadenas numricamente ('a'!='A') strcoll compara dos cadenas segn la colacin actual ('a'=='A') strcpy

copia una cadena en otra

strncpy copia los n primeros caracteres de una cadena en otra strerror

devuelve la cadena con el mensaje de error correspondiente al nmero de error dado devuelve la longitud de una cadena devuelve la posicin del primer carcter de una cadena que no coincide con ninguno de los caracteres de otra cadena dada devuelve la posicin del primer carcter que coincide con alguno de los caracteres de otra cadena dada encuentra la primera ocurrencia de alguno de los caracteres de una cadena dada en otra busca una cadena dentro de otra parte una cadena en una secuencia de tokens

strlen

strspn

strcspn

strpbrk

strstr strtok

strxfrm transforma una cadena en su forma de colacin (??) strrev

invierte una cadena

[editar] Extensiones para C ISO Nombre Descripcin hace un duplicado de la cadena dada reservando dinmicamente la memoria necesaria variante de strcpy que verifica los lmites Especificacin POSIX; originalmente una extensin BSD ISO/IEC WDTR 24731

strdup

strcpy s

mempcpy

variante de memcpy que devuelve un puntero GNU al byte siguiente al ltimo byte escrito variante de memcpy que para al encontrar un UNIX 98? byte determinado anlogo a strerror_r (thread-safe) GNU, POSIX originalmente OpenBSD, actualmente tambin FreeBSD, Solaris, OS X POSIX

memccpy

strerror r

strlcpy

variante de strcpy que verifica los lmites

strtok r

versin thread-safe de strtok

anlogamente a strerror, devuelve la strsignal cadena representacin de la seal sig (no thread safe)

BSDs, Solaris, Linux

UNIDAD 4: JAVA CONTROL DE PROGRAMA JAVA TEMA 7: JAVA INSTRUCCION SWITCH () Tambin existen ocasiones o programas donde se exige evaluar muchas condiciones a la vez, en estos casos, o se usan una condicin compuesta muy grande o se debe intentar convertir el problema a uno que se pueda resolver usando la instruccin switch(); La instruccin switch() es una instruccin de decisin mltiple, donde el compilador prueba o busca el valor contenido en una variable contra una lista de constantes ints o chars, cuando el computador encuentra el valor de igualdad entre variable y constante, entonces ejecuta el grupo de instrucciones asociados a dicha constante, si no encuentra el valor de igualdad entre variable y constante, entonces ejecuta un grupo de instrucciones asociados a un default, aunque este ultimo es opcional. En JAVA jsp, servlets, consola el formato de esta instruccin es el siguiente; capturar o asignar variable de condicin; switch(var int o char)

{ case const1: instruccin(es); break; case const2: instruccin(es); break; case const3: instruccin(es); break; default: instruccin(es); }; Mejor un ejemplo;

Capturar o inicializar variable char llamada opcion; modulo de switch switch(opcion) { case 'a':desplegar aguila; break; case 'b': case 'B': desplegarBorrego; break; default:desplegar No hay; }; }

Notas: 1.- Solo se puede usar como variable de condicin una variable entera o variable char. 2.- Las constantes que estamos buscando y comparando son de tipo char, por eso se deben encerrar entre apstrofes ( ').

5.- Si se quiere resolver el problema de maysculas o minsculas en el teclado, observar que se usan dos case, pero con un solo break; 6.- Recordar que switch() solo trabaja con constantes y variables de tipo char o int, en este ultimo caso; En particular, instrucciones de tipo switch() se utilizaban para construir programas de seleccin de mens, donde al usuario se le planteaban dos o tres problemas distintos y el propio usuario seleccionaba cual de ellos quera ejecutarse. TAREAS JAVA 1.- Construir una ventana que contenga el siguiente men ( java jframe ) conversin de pesos a dlares conversin de libras a kilogramos conversin de kilmetros a millas fin de men seleccionar opcin [ ] aqui se captura el dato de variable opcion 2.- Construir un programa que capture un deporte y despliegue dos implementos deportivos apropiados.( java servlet ) 3.- Evaluar cualquier funcin vista para cuando x =3,-4, 5 ( java jsp )

También podría gustarte