Bienvenida

jueves, 4 de febrero de 2016

PROGRAMACIÓN ORIENTADA A OBJETOS (POO) EN JAVA NETBEANS

Introducción

En este capitulo de introducción se muestran los orígenes del lenguaje de programación Java, sus principales características y las diferencias con respecto a C++, lenguaje del que hereda gran parte de la sintaxis.

En la segunda parte del capítulo se presenta en Entorno de Desarrollo Integrado Eclipse, los fundamentos para crear proyectos Java utilizando este Entorno y como se puede enriquecer su funcionalidad mediante la instalación de plug-ins.

Característica de Java

Java es un lenguaje de programación orientado a objetos y de propósito general que toma de otros lenguajes de programación algunas ideas fundamentales, en particular toma de Smalltalk el hecho de que los programas Java se ejecutan sobre una máquina virtual . Y del lenguaje de programación C++ toma su sintaxis.

El uso de la máquina virtual garantiza la independencia de la plataforma en Java. Si disponemos de una máquina virtual para nuestra plataforma, podremos ejecutar el mismo programa escrito en Java sin necesidad de volverlo a compilar.

En el proceso de compilación de un programa en Java, se genera un código intermedio, llamado bytecode, que la maquina virtual interpreta y traduce a llamadas nativas del sistema sobre el que se ejecuta la maquina virtual. As , una maquina virtual para una plataforma Windows 7 de 64 bits, traducir a los bytecodes a código nativo para esta plataforma, y otra maquina virtual para una plataforma Linux de 64 bits traducir a los mismos bytecodes a código nativo para esta otra plataforma. Los bytecodes son los mismos en ambos casos, las maquinas virtuales sobre las que se ejecutan son nativas de la plataforma correspondiente.

Estructuras de Datos en Java

1. Antecedentes

Introducción a la Orientación a Objetos: 

La programación orientada a objetos (POO) es una nueva manera de enfocar la programación. Desde sus comienzos, la programación ha estado gobernada por varias metodologías. En cada punto crítico de la evolución de la programación se creaba un nuevo enfoque para ayudar al programador a manejar programas cada vez más complejos. Los primeros programas se crearon mediante un proceso de cambio de los conmutadores del panel frontal de la computadora. Obviamente, este enfoque solo es adecuado para programas pequeños. A continuación se invento el lenguaje ensamblador que permitió escribir programas más largos. El siguiente avance ocurrió en los años 50 cuando se invento el primer lenguaje de alto nivel (FORTRAN).

Mediante un lenguaje de alto nivel, un programador estaba capacitado para escribir programas que tuvieran una longitud de varios miles de líneas. Sin embargo, el método de programación usado en el comienzo era un enfoque adhoc que no solucionaba mucho. Mientras que esto esta bien para programas relativamente cortos, se convierte en “código espagueti” ilegible y difícil de tratar cuando se aplica a programas más largos. La eliminación del código espagueti se consiguió con la creación de los lenguajes de programación estructurados en los años sesenta. Estos lenguajes incluyen ALGOL y PASCAL. En definitiva, C es un lenguaje estructurado, y casi todos los tipos de programas que se han estado haciendo se podrían llamar programas estructurados.

Los programas estructurados se basan en estructuras de control bien definidas, bloques de código, la ausencia del GOTO, y subrutinas independientes que soportan recursividad y variables locales. La esencia de la programación estructurada es la reducción de un programa a sus elementos constitutivos. Mediante la programación estructurada un programador medio puede crear y mantener programas de una longitud superior a 50,000 líneas.

Aunque la programación estructurada nos ha llevado a excelentes resultados cuando se ha aplicado a programas moderadamente complejos, llega a fallar en algún punto cuando el programa alcanza un cierto tamaño. Para poder escribir programas de mayor complejidad se necesitaba de un nuevo enfoque en la tarea de programación. A partir de este punto nace la programación orientada a objetos (POO). La POO toma las mejores ideas incorporadas en la programación estructurada y las combina con nuevos y potentes conceptos que permiten organizar los programas de forma más efectiva. La POO permite descomponer un problema en subgrupos relacionados. Cada subgrupo pasa a ser un objeto autocontenido que contiene sus propias instrucciones y datos que le relacionan con ese objeto. De esta manera, la complejidad se reduce y el programador puede tratar programas más largos.

Todos los lenguajes de POO comparten tres características: encapsulación, polimorfismo y herencia.

Encapsulación.

La encapsulación es el mecanismo que agrupa el código y los datos que maneja y los mantiene protegidos frente a cualquier interferencia y mal uso. En un lenguaje orientado a objetos, el código y los datos suelen empaquetarse de la misma forma en que se crea una “caja negra” autocontenida. Dentro de la caja son necesarios tanto el código como los datos. Cuando el código y los datos están enlazados de esta manera, se ha creado un objeto. En otras palabras, un objeto es el dispositivo que soporta encapsulación.
En un objeto, los datos y el código, o ambos, pueden ser privados para ese objeto o públicos. Los datos o el código privado solo los conoce o son accesibles por otra parte del objeto. Es decir, una parte del programa que esta fuera del objeto no puede acceder al código o a los datos privados. Cuando los datos o el código son públicos, otras partes del programa pueden acceder a ellos, incluso aunque este definido dentro de un objeto. Normalmente, las partes públicas de un objeto se utilizan para proporcionar una interfaz controlada a las partes privadas del objeto.
Para todos los propósitos, un objeto es una variable de un tipo definido por el usuario. Puede parecer extraño que un objeto que enlaza código y datos se pueda contemplar como una variable. Sin embargo, en programación orientada a objetos, este es precisamente el caso. Cada vez que se define un nuevo objeto, se esta creando un nuevo tipo de dato. Cada instancia específica de este tipo de dato es una variable compuesta.

Polimorfismo.

Polimorfismo (del Griego, cuyo significado es “muchas formas”) es la cualidad que permite que un nombre se utilice para dos o más propósitos relacionados pero técnicamente diferentes. El propósito del polimorfismo aplicado a la POO es permitir poder usar un nombre para especificar una clase general de acciones. Dentro de una clase general de acciones, la acción específica a aplicar está determinada por el tipo de dato. Por ejemplo, en C, que no se basa significativamente en el polimorfismo, la acción de valor absoluto requiere tres funciones distintas: abs(), labs() y fabs(). Estas tres funciones calculan y devuelven el valor absoluto de un entero, un entero largo y un valor real, respectivamente. Sin embargo, en C++, que incorpora polimorfismo, a cada función se puede llamar abs().
El tipo de datos utilizado para llamar a la función determina que versión específica de la función se esta usando, es decir, es posible usar un nombre de función para propósitos muy diferentes. Esto se llama sobrecarga de funciones.
De manera general, el concepto de polimorfismo es la idea de “una interfaz, múltiples métodos”. Esto significa que es posible diseñar una interfaz genérica para un grupo de actividades relacionadas. Sin embargo, la acción específica ejecutada depende de los datos. La ventaja del polimorfismo es que ayuda a reducir la complejidad permitiendo que la misma interfaz se utilice para especificar una clase general de acción. Es trabajo del compilador seleccionar la acción específica que se aplica a cada situación. El programador no necesita hacer esta selección manualmente, solo necesita recordar y utilizar la interfaz general.
El polimorfismo se puede aplicar tanto a funciones como a operadores, prácticamente todos los lenguajes de programación contienen una aplicación limitada de polimorfismo cuando se relaciona con los operadores aritméticos, por ejemplo, en C, el signo + se utiliza par añadir enteros, enteros largos, caracteres y valores reales. En estos casos, el compilador automáticamente sabe que tipo de aritmética debe aplicar, en C++, se puede ampliar este concepto a otros tipos de datos que se definan, este tipo de polimorfismo se llama sobrecarga de operadores.

Herencia.

La herencia es el proceso mediante el cual un objeto puede adquirir las propiedades de otro. Mas en concreto, un objeto puede heredar un conjunto general de propiedades a alas que puede añadir aquellas características que son específicamente suyas. La herencia es importante porque permite que un objeto soporte el concepto de clasificación jerárquica. Mucha información se hace manejable gracias a esta clasificación, por ejemplo, la descripción de una casa. Una casa es parte de una clase general llamada edificio, a su vez, edificio es una parte de la clase mas general estructura, que es parte de la clase aun más general de objetos que se puede llamar obra-hombre.
En cualquier caso, la clase hija hereda todas las cualidades asociadas con la clase padre y le añade sus propias características definitorias. Sin el uso de clasificaciones ordenadas, cada objeto tendría que definir todas las características que se relacionan con él explícitamente.
Sin embargo, mediante el uso de la herencia, es posible describir un objeto estableciendo la clase general (o clases) a las que pertenece, junto con aquellas características específicas que le hacen único.

Tipos de Datos Abstractos

Abstracción: consiste en ignorar los detalles de la manera particular en que está hecha una cosa, quedándonos solamente con su visión general. Tipo de Dato Abstracto (TDA) se define como un conjunto de valores que pueden tomar los datos de ese tipo, junto a las operaciones que los manipulan.
Un TDA es un modelo matemático de estructuras de datos que especifican los tipos de datos almacenados, las operaciones definidas sobre esos datos y los tipos de parámetros de esas operaciones.
                                         TAD = Valores (tipo de dato) + operaciones

Un TDA define lo que cada operación debe hacer, más no como la debe hacer. En un lenguaje de programación como Java un TDA puede ser expresado como una interface, que es una simple lista de declaraciones de métodos.
Un TDA es materializado por una estructura de datos concreta, en Java, es modelada por una clase. Una clase define los datos que serán almacenados y las operaciones soportadas por los objetos que son instancia de la clase. Al contrario de las interfaces, las clases especifican como las operaciones son ejecutadas (implementación).
Ejemplos de tipos de datos abstractos son las Listas, Pilas, Colas, etc., que se discutirán más adelante.

Estructuras de Datos

En programación, una estructura de datos es una forma de organizar un conjunto de datos elementales (un dato elemental es la mínima información que se tiene en el sistema) con el objetivo de facilitar la manipulación de estos datos como un todo y/o individualmente.
Una estructura de datos define la organización e interrelacionamiento de estos, y un conjunto de operaciones que se pueden realizar sobre él. Las operaciones básicas son:
 Alta, adicionar un nuevo valor a la estructura.
 Baja, borrar un valor de la estructura.
 Búsqueda, encontrar un determinado valor en la estructura para se realizar una operación con este valor, en forma SECUENCIAL o BINARIO (siempre y cuando los datos estén ordenados).
Otras operaciones que se pueden realizar son:
 Ordenamiento, de los elementos pertenecientes a la estructura.
 Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.

Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y eficiencia para la realización de cada operación. De esta forma, la elección de la estructura de datos apropiada para cada problema depende de factores como las frecuencias y el orden en que se realiza cada operación sobre los datos.

Algunas estructuras de datos utilizadas en programación son:

 Arrays (Arreglos)
o Vectores
o Matrices
 Listas Enlazadas
o Listas simples
o Listas dobles
o Listas Circulares
 Pilas
 Colas
 Árboles
o Árboles binarios
o Árboles Multicamino
 Conjuntos
 Grafos
 Montículos

Acceso directo y secuencial a los datos

 Secuencial. Para acceder a un objeto se debe acceder a los objetos almacenados previamente en el archivo. El acceso secuencial exige elemento a elemento, es necesario una exploración secuencial comenzando desde el primer elemento.

 Directo o Aleatorio. Se accede directamente al objeto, sin recorrer los anteriores. El acceso directo permite procesar o acceder a un elemento determinado haciendo una referencia directamente por su posición en el soporte de almacenamiento.



LA PROGRAMACIÓN Y LOS ALGORITMOS

¿Que es un algoritmo?..

Un algoritmo es una sucesión de pasos ordenados lógicamente para llegar a un resultado correcto y dar solución a un determinado problema.

 Para entender mejor un algoritmo es necesario entenderlo en pseudocodigo.

  El Pseudo-código

Las características del este pseudolenguaje fueron propuestas en 2001 por el responsable de la asignatura Fundamentos de Programación (Horacio Loyarte) de la carrera de Ingeniería Informática de la FICH-UNL.
 Las premisas son:
-.Sintaxis sencilla.
-.Manejo de las estructuras básicas de control.
 -.Solo 3 tipos de datos básicos: numérico, carácter /cadenas de caracteres y lógico (verdadero-falso). -.Estructuras de datos: arreglos.

Forma General de un Algoritmo en Pseudocódigo

Todo algoritmo en pseudocódigo tiene la siguiente estructura general:

INICIO O ENTRADA DE DATOS
 . 
 . 
    PROCESO : (Los datos ingresados son procesados 
para luego convertirse en información.)
 .
 .
 SALIDA DE INFORMACIÓN 

En otros libros o programas pueden encontrar la siguiente estructura:

Proceso SinTitulo
          acción 1;
          acción 1;
               .
               .
               .
          acción n;
     FinProceso

 Ejemplo:

El ejemplo más simple es hacer una Suma, que muestra un pequeño algoritmo para sumar dos números y mostrar el resultado, sirve como ejemplo para observar la estructura básica de un programa. Además de la sintaxis obligatoria, se incluyen comentarios que ayudan a entender el código, y se separan claramente sus tres partes: carga de datos, cálculo, y presentación del resultado.

// este es el ejemplo más simple de esta ayuda, 
// toma dos numeros, los suma y muestra el resultado

Proceso Suma

Definir A,B,C como Reales;

    // para cargar un dato, se le muestra un mensaje al usuario
    // con la instrucción Escribir, y luego se lee el dato en 
    // una variable (A para el primero, B para el segundo) con 
    // la instrucción Leer

    Escribir "Ingrese el primer numero:";
    Leer A;

    Escribir "Ingrese el segundo numero:";
    Leer B;


    // ahora se calcula la suma y se guarda el resultado en la
    // variable C mediante la asignación (<-)
   
    C <- A+B;


    // finalmente, se muestra el resultado, precedido de un 
    // mensaje para avisar al usuario, todo en una sola
    // instrucción Escribir
   
    Escribir "El resultado es: ",C;

FinProceso


 Variables 

Una variable en un algoritmo computacional es una posición de memoria donde se puede almacenar información. 
Por ejemplo, si un programa debe obtener el área de un triángulo, seguramente la base del mismo y su altura se carguen en memoria en dos variables para poder realizar el cálculo.
 El resultado, probablemente también se asigne en una variable luego del cálculo para luego informarlo al usuario. 
Como su nombre lo indica, el valor almacenado en una variable puede ir variando a medida que el programa avanza. 
En un pseudocódigo el concepto es similar. 
Una variable representa un lugar donde guardar cierta información.
 En un algoritmo o programa se hace referencia a una variable mediante un identificador (el nombre de la variable). 
Un identificador debe comenzar con letras, y puede contener solo letras, números y el guión bajo. 
No puede contener ni espacios ni operadores, ni coincidir con una palabra reservada o función del lenguaje, para no generar ambigüedad. 

Ejemplos de identificadores válidos son: A, B, C, Lado1, Total, Nombre_y_Apellido, DireccionCorreo, ... 

En la mayoría de los lenguajes reales los nombres de variables no pueden contener acentos, ni diéresis, ni eñes. 
En algunos lenguajes se puede guardar cualquier información en cualquier variable, mientras en otros las variables solo pueden guardar cierto tipo de información.

 Por ejemplo, si una variable se utiliza para guardar números, no puede utilizarse luego para guardar texto. Este tipo se puede declarar explícitamente con la palabra clave adecuada dependiendo del lenguaje de programación que se este utilizando, o se puede dejar que el intérprete intente deducirlo a partir de los datos que se guardan en la misma y la forma en que se la utiliza en el algoritmo.

 Tipos de Datos Tipos Simples: Numérico, Lógico, Carácter.

Estructuras de Datos: Arreglos.

Definición explícita de variables. 

La instrucción definir permite explicitar el tipo de una o más variables. Esta definición puede ser opcional u obligatoria dependiendo del tipo de lenguaje en el que se este programando.

Una variable debe definirse antes de ser utilizada por primera vez. Los arreglos, se definen utilizando su identificador (sin subíndices ni dimensiones) antes o después de dimensionarlos, y el tipo aplica para todos los elementos del mismo (ya que se trata de una estructura de datos homogénea).

    Los tipos posibles son NUMERO, NUMERICO, REAL, ENTERO, LOGICO, CARACTER, TEXTO, CADENA.

NUMERO, NUMERICO y REAL son sinónimos para el tipo de datos numérico básico, que puede almacenar tanto números reales como enteros. El tipo ENTERO es una especialización que sólo permite almacenar valores enteros; cualquier valor no entero que se lea o asigne en una variable de este tipo será truncado.

    Una variable de tipo LOGICO sólo puede tomar los valores VERDADERO y FALSO, pero cuando se lee una variable ya definida como lógica, el usuario puede ingresar también las abreviaciones V y F, o 0 y 1.

    CARACTER, TEXTO y CADENA son sinónimos para definir variables de tipo carácter. Estas pueden contener cero, uno o más caracteres arbitrarios y no tienen una longitud máxima. Si se declara una variable de este tipo y en una lectura el usuario ingresa un número o un valor lógico, se asignará una cadena que contiene el texto ingresado (ejemplo: "1", "VERDADERO", etc).

Estructuras de Control 

Condicionales

-.Si-Entonces 

-.Selección Múltiple 

Repetitivas

-.Mientras 

-.Repetir 

-.Para

Condicional Si-Entonces 

  La secuencia de instrucciones ejecutadas por la instrucción Si-Entonces-Sino depende del valor de una condición lógica.
      Si <condición> Entonces
            <instrucciones> 
      Sino 
            <instrucciones>
      FinSi 
   Al ejecutarse esta instrucción, se evalúa la condición y se ejecutan las instrucciones que correspondan: las instrucciones que le siguen al Entonces si la condición es verdadera, o las instrucciones que le siguen al Sino si la condición es falsa. La condición debe ser una expresión lógica, que al ser evaluada retorna Verdadero o Falso. 
   La cláusula Entonces debe aparecer siempre, pero la clausula Sino puede no estar. En ese caso, si la condición es falsa no se ejecuta ninguna instrucción y la ejecución del programa continúa con la instrucción siguiente.
 
 El ejemplo Triángulo lee las medidas de los tres lados de un triángulo y utiliza esta estructura para determinar cual es el mayor de los tres, y verificar luego si se trata de un triángulo rectángulo o no.

//    Lee los tres lados de un triangulo rectangulo, determina 
// si corresponden (por Pitargoras) y en caso afirmativo 
// calcula el area

Proceso TrianguloRectangulo


// cargar datos
Definir l1,l2,l3 Como Real;
Escribir "Ingrese el lado 1:";
Leer l1;
Escribir "Ingrese el lado 2:";
Leer l2;
Escribir "Ingrese el lado 3:";
Leer l3;

// encontrar la hipotenusa (mayor lado)
Definir cat1,cat2,hip Como Real;
Si l1>l2 Entonces
cat1<-l2;
Si l1>l3 Entonces
hip<-l1;
cat2<-l3;
Sino
hip<-l3;
cat2<-l1;
FinSi
Sino
cat1<-l1;
Si l2>l3 Entonces
hip<-l2;
cat2<-l3;
Sino
hip<-l3;
cat2<-l2;
FinSi
FinSi

// ver si cumple con Pitagoras
Si hip^2 = cat1^2 + cat2^2 Entonces
// calcualar area
Definir area como real;
area<-(cat1*cat2)/2;
Escribir "El area es: ",area;
Sino
Escribir "No es un triangulo rectangulo.";
FinSi

FinProceso
 

Selección Múltiple (según)


La secuencia de instrucciones ejecutada por una instrucción Segun depende del valor de una variable numérica.
      Segun <variable> Hacer
            <número1>: <instrucciones>
            <número2>,<número3>: <instrucciones>
            <...>
            De Otro Modo: <instrucciones>
      FinSegun

   Esta instrucción permite ejecutar opcionalmente varias acciones posibles, dependiendo del valor almacenado en una variable de tipo numérico. Al ejecutarse, se evalúa el contenido de la variable y se ejecuta la secuencia de instrucciones asociada con dicho valor.
   Cada opción está formada por uno o más números separados por comas, dos puntos y una secuencia de instrucciones. Si una opción incluye varios números, la secuencia de instrucciones asociada se debe ejecutar cuando el valor de la variable es uno de esos números.
   Opcionalmente, se puede agregar una opción final, denominada De Otro Modo, cuya secuencia de instrucciones asociada se ejecutará sólo si el valor almacenado en la variable no coincide con ninguna de las opciones anteriores.

   El ejemplo Menú muestra un programa muy simple que utiliza esta estructura de control para elegir que salida mostrar en pantalla de acuerdo a qué opción el usuario selecciona mediante un menú.

// Muestra como hacer un menú simple con las estructuras Repetir-Hasta Que y Según

Proceso sin_titulo
Definir OP Como Entero;
Repetir
// mostrar menu
Limpiar Pantalla;
Escribir "Menú de recomendaciones";
Escribir "   1. Literatura";
Escribir "   2. Cine";
Escribir "   3. Música";
Escribir "   4. Videojuegos";
Escribir "   5. Salir";
// ingresar una opcion
Escribir "Elija una opción (1-5): ";
Leer OP;
// procesar esa opción
Segun OP Hacer
1:
Escribir "Lecturas recomendables:";
Escribir " + Esperándolo a Tito y otros cuentos de fúbol (Eduardo Sacheri)";
Escribir " + El juego de Ender (Orson Scott Card)";
Escribir " + El sueño de los héroes (Adolfo Bioy Casares)";
2:
Escribir "Películas recomendables:";
Escribir " + Matrix (1999)";
Escribir " + El último samuray (2003)";
Escribir " + Cars (2006)";
3:
Escribir "Discos recomendables:";
Escribir " + Despedazado por mil partes (La Renga, 1996)";
Escribir " + Búfalo (La Mississippi, 2008)";
Escribir " + Gaia (Mägo de Oz, 2003)";
4:
Escribir "Videojuegos clásicos recomendables";
Escribir " + Día del tentáculo (LucasArts, 1993)";
Escribir " + Terminal Velocity (Terminal Reality/3D Realms, 1995)";
Escribir " + Death Rally (Remedy/Apogee, 1996)";
5:
Escribir "Gracias, vuelva prontos";
De otro modo:
Escribir "Opción no válida";
FinSegun
Escribir "Presione enter para continuar";
Esperar Tecla;
Hasta Que OP=5
FinProceso

Estructuras de Control Repetitivas 

-.Lazos Mientras 



  La instrucción Mientras ejecuta una secuencia de instrucciones mientras una condición sea verdadera.

      Mientras <condición> Hacer

            <instrucciones>

      FinMientras

Al ejecutarse esta instrucción, la condición es evaluada. Si la condición resulta verdadera, se ejecuta una vez la secuencia de instrucciones que forman el cuerpo del ciclo. Al finalizar la ejecución del cuerpo del ciclo se vuelve a evaluar la condición y, si es verdadera, la ejecución se repite. Estos pasos se repiten mientras la condición sea verdadera.
   Note que las instrucciones del cuerpo del ciclo pueden no ejecutarse nunca, si al evaluar por primera vez la condición resulta ser falsa.
   Si la condición siempre es verdadera, al ejecutar esta instrucción se produce un ciclo infinito. A fin de evitarlo, las instrucciones del cuerpo del ciclo deben contener alguna instrucción que modifique la o las variables involucradas en la condición, de modo que ésta sea falsificada en algún momento y así finalice la ejecución del ciclo.


   El ejemplo Adivina Número le da al usuario 10 intentos para adivinar un número generado aleatoriamente, utilizando esta estructura para verificar si el usuario acierta el número o si se agotan los intentos.

// Juego simple que pide al usuario que adivine un numero en 10 intentos

Proceso Adivina_Numero

Definir intentos,num_secreto,num_ingresado Como Entero;
intentos<-10;
num_secreto <- azar(100)+1;

Escribir "Adivine el numero (de 1 a 100):";
Leer num_ingresado;
Mientras num_secreto<>num_ingresado Y intentos>1 Hacer
Si num_secreto>num_ingresado Entonces
Escribir "Muy bajo";
Sino
Escribir "Muy alto";
FinSi
intentos <- intentos-1;
Escribir "Le quedan ",intentos," intentos:";
Leer num_ingresado;
FinMientras

Si num_secreto=num_ingresado Entonces
Escribir "Exacto! Usted adivino en ",11-intentos," intentos.";
Sino
Escribir "El numero era: ",num_secreto;
FinSi

FinProceso

-.Lazos Repetir


La instrucción Repetir-Hasta Que ejecuta una secuencia de instrucciones hasta que la condición sea verdadera.

      Repetir 

            <instrucciones> 

      Hasta Que <condición> 

   Al ejecutarse esta instrucción, la secuencia de instrucciones que forma el cuerpo del ciclo se ejecuta una vez y luego se evalúa la condición. Si la condición es falsa, el cuerpo del ciclo se ejecuta nuevamente y se vuelve a evaluar la condición. Esto se repite hasta que la condición sea verdadera. 

   Note que, dado que la condición se evalúa al final, las instrucciones del cuerpo del ciclo serán ejecutadas al menos una vez. 

   Además, a fin de evitar ciclos infinitos, el cuerpo del ciclo debe contener alguna instrucción que modifique la o las variables involucradas en la condición de modo que en algún momento la condición sea verdadera y se finalice la ejecución del ciclo.

El ejemplo Menú muestra un programa muy simple que utiliza esta estructura de control para mostrar un menú repetidamente hasta que el usuario seleccione la opción para salir.

// Muestra como hacer un menú simple con las estructuras Repetir-Hasta Que y Según

Proceso sin_titulo
Definir OP Como Entero;
Repetir
// mostrar menu
Limpiar Pantalla;
Escribir "Menú de recomendaciones";
Escribir "   1. Literatura";
Escribir "   2. Cine";
Escribir "   3. Música";
Escribir "   4. Videojuegos";
Escribir "   5. Salir";
// ingresar una opcion
Escribir "Elija una opción (1-5): ";
Leer OP;
// procesar esa opción
Segun OP Hacer
1:
Escribir "Lecturas recomendables:";
Escribir " + Esperándolo a Tito y otros cuentos de fúbol (Eduardo Sacheri)";
Escribir " + El juego de Ender (Orson Scott Card)";
Escribir " + El sueño de los héroes (Adolfo Bioy Casares)";
2:
Escribir "Películas recomendables:";
Escribir " + Matrix (1999)";
Escribir " + El último samuray (2003)";
Escribir " + Cars (2006)";
3:
Escribir "Discos recomendables:";
Escribir " + Despedazado por mil partes (La Renga, 1996)";
Escribir " + Búfalo (La Mississippi, 2008)";
Escribir " + Gaia (Mägo de Oz, 2003)";
4:
Escribir "Videojuegos clásicos recomendables";
Escribir " + Día del tentáculo (LucasArts, 1993)";
Escribir " + Terminal Velocity (Terminal Reality/3D Realms, 1995)";
Escribir " + Death Rally (Remedy/Apogee, 1996)";
5:
Escribir "Gracias, vuelva prontos";
De otro modo:
Escribir "Opción no válida";
FinSegun
Escribir "Presione enter para continuar";
Esperar Tecla;
Hasta Que OP=5
FinProceso


-.Lazos Para


La instrucción Para ejecuta una secuencia de instrucciones un número determinado de veces. 

      Para <variable> <- <inicial> Hasta <final> Con Paso <paso> Hacer 
            <instrucciones> 
      FinPara 

   Al ingresar al bloque, la variable <variable> recibe el valor <inicial> y se ejecuta la secuencia de instrucciones que forma el cuerpo del ciclo. Luego se incrementa la variable <variable> en <paso> unidades y se evalúa si el valor almacenado en <variable> superó al valor <final>. Si esto es falso se repite hasta que <variable> supere a <final>. Si se omite la cláusula Con Paso <paso>, la variable <variable> se incrementará en 1.

La primer variante consiste en reemplazar el operador de asignación por la palabra clave Desde:
      Para <variable> Desde <inicial> Hasta <final> Con Paso <paso> Hacer ... 
De esta forma, la lectura de la sentencia resulta más obvia. Además, con sintaxis flexible, si no se especifica el paso pero el valor final es menor al inicial, el bucle recorrerá los valores en orden inverso como si el paso fuera -1. La segunda variante solo sirve para recorrer arreglos de una o más dimensiones. Se introduce con la construcción Para Cada seguida de un identificador, la palabra clave De y otro identificador:
      Para Cada <elemento> De <Arreglo> Hacer ... 
El segundo identificador debe corresponder a un arreglo. El primero será el que irá variando en cada iteración. El ciclo realizará tantas iteraciones como elementos contenga el arreglo y en cada uno el primer identificador servirá para referirse al elemento del arreglo en cuestión.

   El ejemplo Promedio utiliza un bucle de este tipo para leer N valores numéricos con los cuales calcula un promedio.

// Calcula el promedio de una lista de N datos

Proceso Promedio

Definir i,N como Entero;
Definir acum,dato,prom como Reales;
Escribir "Ingrese la cantidad de datos:";
Leer n;
acum<-0;
Para i<-1 Hasta n Hacer
Escribir "Ingrese el dato ",i,":";
Leer dato;
acum<-acum+dato;
FinPara
prom<-acum/n;
Escribir "El promedio es: ",prom;
FinProceso


   El ejemplo Para utiliza las tres variantes de este tipo de bucles para recorrer un arreglo.

// Para poder ejecutar correctamente este ejemplo debe tener
// habilitada la sintaxis flexible en su perfil de lenguaje

Proceso sin_titulo


Definir A,i,elemento Como Enteros;
// declara un arreglo de 10 elementos
Dimension A[10];
// recorre los 10 elementos y va asignandoles enteros aleatorios
para cada elemento de A Hacer
// elemento toma el contenido de cada posicion del arreglo
// y si se modifica elemento se modifica el arreglo
elemento <- azar(100);
FinPara
Escribir "Los elementos del arreglo son:";
// recorre los 10 elementos utilizando subindices y los muestra en pantalla
para i desde 0 hasta 9 Hacer
escribir "Posición " i ": " A[i];
FinPara
Escribir ""; // deja una linea en blanco
Escribir "En orden inverso:";
// recorre los 10 elementos en orden inverso y los muestra en una misma linea
para i desde 9 hasta 0 Hacer
escribir sin bajar A[i] " ";
FinPara
FinProceso
  

NOTAS IMPORTANTES

*Los comentarios o explicaciones son los que están después de los slash ( // ).
*Luego estaremos añadiendo informacion pero ya en un lenguaje de programación especifico en este caso java.
* Tambien estaremos conociendo informacion basica de como programar en Visual Studio.