1) Tema: Programación Estructurada

Orígenes de la programación estructurada

A finales de los años 1970 surgió una nueva forma de programar que no solamente daba lugar a programas fiables y eficientes, sino que además estaban escritos de manera que facilitaba su mejor comprensión, no sólo proveyendo ventajas durante la fase de desarrollo, sino también posibilitando una más sencilla modificación posterior.
El teorema del programa estructurado, propuesto por Böhm-Jacopini, demuestra que todo programa puede escribirse utilizando únicamente las tres instrucciones de control siguientes:
  • Secuencia
  • Instrucción condicional.
  • Iteración (bucle de instrucciones) con condición al principio.
Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles. Si bien los lenguajes de programación tienen un mayor repertorio de estructuras de control, éstas pueden ser construidas mediante las tres básicas citadas.
 

Programación estructurada

La programación estructurada es un paradigma de programación orientado a mejorar la claridad, calidad y tiempo de desarrollo de un programa de computadora, utilizando únicamente subrutinas y tres estructuras: secuencia, selección (if y switch) e iteración (bucles for y while), considerando innecesario y contraproducente el uso de la instrucción de transferencia incondicional (GOTO), que podría conducir a "código espagueti", que es mucho más difícil de seguir y de mantener, y era la causa de muchos errores de programación.
 

 Hay tres tipos de Programacíon Estructurada.

Estructura Secuencial.

 
 La estructura secuencial es aquella en la que una accion (instrucción) sigue a otra en secuencia.
Las tareas se suceden de tal modo que la salida de una es la entrada de la siguiente y asi sucesivamente hasta el fin del proceso.
 

Ejemplo:

Estructura Selectiva.

 
La estructura logicas selectivas se encuentran en la solución algoritmicas de casi todo tipo de problemas.
Las utilizamos cuando en el desarrollo de la solución de un problema debemos tomar una desición, para establecer un proceso o señalar un cambio alternativo a segui.
 

Ejemplo:

 

 

Estructura Interacción.

 
Con frecuencia es necesario que exitan mas de dos elecciones posibles.
Este problema se podria resolver por estructuras selectivas simples o dobles, anidadas o en cascada, para si el número de alternativos es grande puede plantear serias problemas de escritura y de legibilidas.
 

Ejemplo:

 
 

2) Tema: Selección ( if else, switch)

 
Bueno en este tema veremos ejemplos de codigos en el programa eclipse y su salidas.
 

Ejemplo:

 
Programa que pide un número de dúa de la semanma e imprime el nombre correspondiente utilizando el if - else
 

Codigo

 

Salida:

Salida no Valida

 
 

Segundo Ejemplo:

 
Programa que pida un número de dúa de la semana e imprima el nombre correspondiente utilisando switch
 

Cogido:

 

Salida:

 

Salida no Valida

 

3) Tema: Repetición ( while, for, do)

 
Un ciclo, o interacción en java es una estructura que permite repetir un sierto número de acciones mediante una condición, tomando como, referencia el contador.
Existen 3 tipos de ciclos que maneja java:
Ciclo while
Ciclo do while
Ciclo for
 

Ciclo While

 
Este ciclo primero evalúa una condición y si esta condición  es cierta se llevan a cabo las siguientes acciones:El ciclo funciona mientras la condición es verdadera, en el momento de que la condición deja de  cumplirse el ciclo termina.
 

 

Ciclo Do While

 
Este ciclo primero realiza las acciones mientras la condición sea falsa, en el momento que esta condición se cumpla el ciclo se termina;
Este ciclo también requiere de un contador.
 
 

Ciclo For

 
Este ciclo a diferencia al ciclo while y do while no le importa si la condición es falsa o verdadera, ya que este ciclo desde se propia estructura cuenta con un valor final y su propio contador;
Esta estructura maneja cuerpo siempre y cuando las acciones sean más de dos.
 
 
 

Ejemplo:

 
Crear un código que me imprima como salida los primeros 10 números pares
 
 
 

Salida en Consola

 
 

Ejemplo:

 
Crear un código que me imprima como salida los primeros 10 números impares.
 
 

Salida en Consola

 

4) Tema: Como Escribir Clases (public, private)

 
En este tema le mostraremos el código, la ventana y la estructura de su ciclo.
 

Ejemplo:

 
Escribir un programa que pida 3 calificaciones parciales y si el promedio es menor o igual a 7 el alumno hace examen final si no el alumno queda exento.
 
 

Si es Verdad

 
 
 
 
 
 
 

Si es Falso

 
 
 
 
 
 
 
 

Estructura de su Ciclo

 
 
 
 

Ejemplo

 
Una empresa solicita personal para el puesto de gerencia, bajo las siguientes condiciones si la edad del aspirante es mayor a 18 años y menor a 30 años cubrirá el puesto de gerencia, si no cubrirá el puesto de departamento de ventas.
 
 

Si es Mayor de 18

 
 
 
 

Si es menor de  18

 
 
 
 
 

Estructura de su Ciclo

 
 
 

Ejemplo:

 
 
En esta clase solo mostraremos código y ventana.
 

Salida en Ventana

 
 
 

Ejemplo:

 
En esta clase solo mostraremos código y ventana.
 
 

Salida en Ventana

 
 
 
 
 

5) Tema: Herencia

Introduccion

 
Los programas se crean a partir de objetos los cuales son instancias de clases.
Algunas clases están en la biblioteca de java y otras las escribe el programador.
Cuando empezamos a escribir un nuevo programa, buscamos clases útiles en la biblioteca y vemos las clases que hemos escrito en el pasado.
Este metodología OO para la programación significa que en vez de empezar los programas desde cero, nos basamos en el trabajo anterior.
 
 

Herencia

 
La herencia constituye una manera  de resolver este problema.
Con la herencia podemos usar clases existente como la base para crear una clase modificar.
Considera la siguiente analogía.
Suponga que desea comprar  un automóvil nuevo y v a una agencia en donde hay una variable de automóviles producidos en masa.
A usted le gusto uno en especial, pero no tiene esa característica especial que está buscando.
Al igual que la descripción de una clase, el automóvil se fabrico a partir de planos que describen a muchos automóviles idénticos.
Si estuviera disponible la herencia, usted podría especificar un automóvil que tuviera todas las características del automóvil producido en masa, pero con las características o cambios adicionales que usted requiere.
 

Como Usar la Herencia

 
Vamos a empezar con una clase similar a la que ya hemos usado varias veces en el libro.
En una clase para respetar a una esfera.
Una esfera tiene un radio y una posición en el espacio.
Al  mostrar una esfera en la pantalla, debe  aparecer como un circulo (el método para mostrar una esfera simplemente invoca al método de biblioteca drawOval).
El diámetro de la esfera esta fijo en 2 pixeles.
Solo hemos modelado las coordenadas x y yde una esfera (y no la coordenada z) debido a que vamos a mostrar una presentación bidimensional en la pantalla.
 

Ejemplo:

 
 

Protected

 
Esto se debe a que escribimos la clase de tal forma que se pueda utilizar para la herencia.
En el transcurso de este capítulo veremos lo que significa estos  nuevos elementos.
Vamos a suponer que alguien escribió y probó esta clase, y la puso a disposición de otros para que la utilicen.
Ahora vamos a escribir un nuevo programa y necesitamos una clase muy parecida a esta, solo que para describir burbujas.
Esta nueva clase llamada Burbuja nos permite hacer cosas adicionales: modificar el tamaño de una burbuja y moverla en sentido vertical.
La limitación de la clase Esfera es que describe objetos que no se mueven y cuyo tamaño no se puede cambiar.
Primero necesitamos un método adicional que nos permita establecer un nuevo valor para el radio de la burbuja.
Podemos hacer esto sin alterar la clase existente; para ello debemos escribir una clase diferente que utilice el código que ya se encuentra en la clase Esfera.
Decimos que la nueva clase hereda las variables y los métodos de la clase anterior.
La nueva clase se convierte en una subclase de la anterior.
A la clase anterior se le llama la superclase de la nueva clase.
He aquí cómo podemos escribir la nueva clase:
 

Ejemplo;


 

La Herencia en Accion

 
Al igual que la clase Burbuja, es como que una clase tenga una superclase, la que a su vez tiene una superclase y así sucesivamente, hasta llegar a la parte superior del árbol de herencia.
No solo se heredan los elementos public y protected de la superclase inmediata, sino también todas las variables y los métodos public y protected de todas las superclase en el árbol de herencia.
Esto es similar al árbol genealógico: ustedes hereda de su madre, su abuela y así de manera sucesiva
 

Super

 
Algunas veces una clase necesita llamar a un método de su superclase inmediata, o de alguna de las clases del nivel superior en el árbol.
No hay problema con esto, ya que los métodos de todas las clases en los niveles superiores del árbol de herencia están disponibles, siempre y cuando estén etiquetados como public o protected.
El único problema que puede sugerir es cuando el método deseado de la superclase tiene  el mismo nombre que un método  de la clase actual (cuando se utiliza la redefinición o sobre escritura).
Para corregir este problema hay que anteponer al nombre del método la palabra clave súper.
Por ejemplo, para llamar el método mostrar de una superclase use lo siguiente:
super.mostrar (papel);
En general esto  es más ordenado y corto que duplicar instrucciones, y nos puede ayudar a que un programa sea más conciso al utilizar al máximo los métodos existentes.
 

Ejemplo;

 
Si ahora escribimos una nueva clase llamada GloboDiferente que herede de la clase Globo, las opciones son:
1)   No escribir un constructor en la subclase. Java supondrá que hay un constructor sin parámetros.
2)   Escribir uno o más constructores sin llamadas a los constructores de la superclase.
3)   Escribir uno o más constructores que llamen a un constructor apropiado de la superclase, utilizando súper.
 

Ejemplo;

 

Final

 
Los procesos de heredar y redefinir, se enfocan en cambiar el comportamiento de las clases y los objetos.
La herencia es muy poderosa, pero algunas veces es reconfortante que algunas cosas estén fijas y no se puedan modificar.
Por ejemplo, es bueno saber exactamente qué es lo que hace sqrt, que es lo que hace drawLine, etcétera.
En la POO siempre existe el peligro de que alguien extienda las clases a las que estas pertenecen y en consecuencias cambie lo que hace.
Esto podría ser por error o en un intento inadvertido de ser útil.
Para evitar esto el programa puede describir un método como final.
Eso significa que no se puede redefinir.
La mayoría de los métodos de la biblioteca se describen como final.
Esto significa que cada vez que los use, puede  estar completamente seguro de lo que hace.
Como hemos visto desde los primeros capítulos del libro, las variables también se pueden declarar como final.
Esto significa también que no podemos cambiar sus valores.
Son constantes.
Por ejemplo;
Final doublé cmPerInch = 2.54;
Declara una variable cuyo valor no se puede alterar.
Así, el prefijo final tiene el mismo significado sin importar que se utilice en una variable o en un método.
 
 

Abstractas

 
Considera un programa que mencione formas graficas de todos tipos y tamaños: círculos, rectángulos, cuadrados, triángulos, etc.
Estas distintas formas, similares a las clases que ya hemos visto en este capítulo, tiene información en común: su posición, coló y tamaño.
Vamos a declarar una superclase llamada Forma que describa los datos comunes.
Cada clase individua hereda esta información común.
He aquí la forma de describir esta superclase común:
 

Ejemplo;

 

MATRICES

en este capítulo conoceremos cómo:
  • Declarar una matriz (o arreglo bidimensional).
  • Utilizar los índices con las matrices.
  • Obtener el tamaño de una matriz.
  • Pasar matrices como parámetros.
  • Inicializar una matriz

INTRODUCCIÓN

Las matrices o arreglo bidimensionales (también conocidas como tablas) son muy comunes en la vida diaria:
  • Un tablero de ajedrez.
  • El itinerario de los trenes.
  • Una hoja de cálculo.

En el capítulo anterior vimos los arreglos unidimensionales.

Java cuenta con una forma natural para extender los arreglos unidimensionales a dos dimensiones.

Por ejemplo, la siguiente declaración:

         int [ ] [ ] ventas = new int [4] [7];

Declara una matriz o arreglo bidimensional de enteros.

Contiene las cifras de las ventas de computadoras en cada una de cuatro tiendas para cada uno de los siete días de una semana.

La matriz se llama ventas.

Podemos considerar que tiene cuatro filas y seis columnas.

Cada fila representar una semana en una tienda especifica.

Cada columna  representa un día individual  en cada una de las cuatro tiendas.

Los índices de las filas van de 0 a 3.

Los índices de las columnas van de 0 a 6.

La columna 0 es el lunes, la columna 1 es martes, etc.

                Una matriz o arreglo bidimensional.

 

Comó Declarar una Matriz

Al igual que con otras variables y ojetos, para declarar una matriz utilizamos new, ya sea en la parte superior de la clase o de un método.
El programador asigna un nombre a la matriz, como en el siguiente ejemplo:
 
                  int [  ]  [  ] ventas  = new int [ 4] [ 7];
                  double [  ] [  ] temps =  new double [ 10] [ 24];

Al declarar una matriz es necesario indicar cúantas filas y columnas tiene.

La matriz ventas tiene cuatro filas: una para cada una de las cuatro tiendas.

Tiene siete columnas: una para cada día de la semana.

La matriz contiene cifras de ventas para cada una de las cuatro tiendas durante cada día de la semana.

La matriz temps contiene información sobre las temperaturas en cada una de 10 hornos, para cada hora durante un perioda de 24 horas.

Al igual que con cualquier otra  variable, es común ( y conveniente) elegir un nombre para la matriz que describa con claridad para qué se va a utilizar.

El nombre es para la matriz completa: para toda la colección de datos.

Índices

Para hacer referencia a un elmento endividual en una matriz, un programador debe especificar los valores de los índices enteros (también conocidos como subíndices).

Por lo tanto, ventas [ 3] [ 2] se refiere al elemento de la matriz  que se encuentra en la fila 3 y columna 2, lo cual representa a la tienda número 3 y el día número 2 (miercoles).

De manera similar, tableroAjedrez [ 2 ] [7 ] podría contener la cadena de texto "peón"

Para entroducir un valor para un elemnto de una matriz podemos utilizar el siguiente código:

      ventas[ 3] [2 ] = Integer.parseInt(campoTexto.getText());

       tableroAjedrez [ 3] [4 ] = campoTexto.getText();

y de manera  similar podemos mostrar los valores de los elemntos de una matriz mediante cuatros de texto.

Podemos modificar los valores con intrucciones de asignación, como en el siguiente ejemplo:

        ventana [ 3 ] [ 2 ] = 99

         tableroAjedrez [ 2 ] [ 7 ] = "caballo";  // coloca un caballo en uno de los cuadros

En todos los fragmentos de programas, para referirnos a los elementos individuales de una matriz declaramos los valores de los índices que identifican al elemnto específico en el que estamos interesado.

A menudo es necesario hacer referencia a un elemento de una matriz mediante la especificación de variables para cada uno de los dos índices.

Ésta es la forman en la que podemos aprovechar el poder de las matrices.

Como ejemplo, suponga que queremos sumar todos los números en una matriz de números que contiene datos sobre las ventas de computadoras en cuatro tiendas, durante en periodo de siete días:

         int [  ] [  ] ventas = new int [ 4 ] [ 7 ];

La manera burda de sumar las ventas sería esrcibir lo siguiente:

   suma =

                  ventas [ 0 ] [ 0 ]  +  ventas [ 0 ] [ 1 ]  +  ventas[ 0 ] [ 2 ]  +  ventas [ 0 ] [ 3 ]

                              + ventas [ 0 ] [ 4 ]  +  ventas [ 0 ] [ 5 ]  +  ventas [ 0 ] [ 6 ]

              +  ventas [ 1 ] [ 0 ]  +  ventas [ 1 ] [ 2 ]

                             +  ventas [ 1 ] [ 3 ]  +  ventas [ 1 ] [ 3 ]  +  ventas [ 1 ] [ 4 ]  +  ventas [ 1 ] [ 5 ]  +  ventas [ 1 ] [6

                             +  etcétera;

el código anterior  es largo, dificil de entender y propenso a errores, pero es correcto.

Sin embargo, no aprovecha la regularidad de una matriz.

La alternativa sería utilizar in ciclo for.

Se utilizann variables para guardar los valores de los índices.

Al principio cada índice  se hace igual a 0 y después se incrementa cada vez que se repite el ciclo:

 

int [ ]  [ ] ventas  new int [ 4]  [ 7];
int suma;
suma  = 0; 
for  (int tienda = 0; tienda  <= 3;  tienda++) {
       for  (int númeroDía = 0;  númeroDía <= 6;  númeroDía++  )  {
                suma = suma + ventas[ tienda] [ númeroDía];
     }
}
lo cual es mucho más corto y ordenado que si hubiéramos escrito todas las sumas con mucho detalle.
 

El Tamaño de una Matriz

Cuando creamos una matriz de la siguiente forma:
 
double [ ]  [ ]  info = new double [20] [ 40];
tiene un tamaño fijo que no se puede modificar, a menos que volvamos a crear la matriz completa mediante new.
Siempre podemos obtener el tamaño de una matriz mediante la propiedad legnth.
Por ejemplo, para la matriz anterior podemos usar:
 
int  tamañoFila  =  info.legnth;
lo cual nos da un valor de 20, es tanto que:
 
int tamañoColumna  =  info [ 0].legnth;
nos da un valorde 40.
Esta instrucción  proporciona la longitud de la fila cero de la matriz, pero como todas las filas son del mismo tamaño, está bien hacerlo.
Cabe mencionar que no se colocan paréntesis ( ) después de la propiedad length.