Retomando el reto Java.

Soy una novata comenzando en la aventura de Java, este es mi diario de avance personal.

Todo comienza con un: ¡Hola mundo!

En este blog no encontrarás a una experta en programación, solo presenciarás el desarrollo de esta aventura personal.

No soy programadora.

No estudié nada relacionado a informática, solo soy una entusiasta más con hambre de aprender.

Todo comienza con la primera línea.

Pero con esa línea se difumina el lenguaje, no desistir es la clave.

Todo suma...

El aprendizaje de hoy suma con el de mañana y así sucesivamente. Mantener este diario como demostración a mí misma de que se puede.

domingo, 28 de febrero de 2016

Operadores de asignación compuestos.

Los operadores son palabras o símbolos que hacen que permiten realizar operaciones con los datos de un programa, para cada tipo de datos hay una serie de operadores definidos.

Entre todos los operadores se distingue el operador de asignación “=”, que se puede leer como “guarda un valor en la variable indicada”, el valor puede ser una constante literal o el resultado de una expresión.

Existen los operadores de incremento “++” y decremento “--“, éstos tienen el efecto de aumentar o decrementar en una unidad el valor de una variable, supongamos que estamos trabajando con la variable x:

x++;  /* equivale a hacer: x  =  x + 1;*/

x--;  /* equivale a hacer: x  =  x – 1;*/

Los operadores de la asignación compuestos abrevian expresiones de la asignación. Declaraciones como:

variable = variable operador expresión;

En donde el operador es in de los operadores binarios como: +, - , * , / o % y pueden ser escritos de la siguiente forma:

variable operador = expresión;

Por ejemplo, podemos abreviar:

c = c + 3;

Con el operador de asignación compuesto, += , como:

c += 3;

El += operador suma el valor de la expresión a su derecha el valor de la variable de su izquierda y almacena el resultado en la variable a la izquierda del operador.

Seguimos con más teoría...

¡Saludos!


sábado, 27 de febrero de 2016

Diseño descendente (top-down).

La descomposición de un programa en módulos más pequeños se conoce como el método de divide y vencerás (divide and conquer) o diseño descendente (top-down). Consiste en dividir un problema en unidades más pequeñas sucesivas hasta que sean directamente ejecutadas, en otras palabras, la solución del problema se divide una y otra vez hasta que esté expresada en términos de estructuras de control, cada uno de los niveles o pasos sucesivos se conoce como refinamiento (stepwise).

La metodología del diseño descendente consiste en efectuar una relación entre las etapas de estructuración de manera que se relacionen entre sí a través de entradas y salidas de datos. Es decir, se descompone el problema en etapas de estructuración jerárquicas, de forma que se pueda considerar cada estructura desde dos puntos de vista: ¿qué hace? y ¿cómo lo hace?

Con lo anterior podemos decir que: un módulo se caracteriza por realizar una tarea específica, posee sus propios datos de entrada – llamados parámetros de entrada – y su resultado – llamado salida o valor de retorno –. El diseño de cada módulo debe ser independiente de los otros; si es necesario que exista comunicación entre ellos, ésta únicamente podrá realizarse a través de los parámetros de entrada y del valor de retorno. En este sentido, puede ser visto, por otros módulos, como una caja negra que hacia el exterior sólo muestra qué hace y qué necesita, pero no cómo lo hace.

La creación de un modulo conlleva dos partes: la definición del módulo y la llamada o invocación (ejecución). La primera consta de tres partes:

- Definir los parámetros de entrada;
- Definir el valor de retorno;
- Escribir todas las instrucciones que le permitirán llevar a cabo la tarea, es decir, un algoritmo.

La llamada o invocación a un módulo es el proceso de ejecutar el conjunto de instrucciones definidas en el módulo dado un conjunto de entradas específico. La forma general de invocar un módulo es escribiendo su nombre y entre paréntesis los valores de cada uno de los parámetros de entrada, respetando el orden que con el que se definió.

No existe un método para saber en cuántos módulos se debe dividir un problema, sin embargo es importante tener en cuenta los siguientes principios del diseño modular:

- Las partes altamente relacionadas deben pertenecer a un mismo módulo. 
- Las partes no relacionadas deben residir en módulos diferentes.

Ventajas que proporciona un diseño modular:

1. Es posible reutilizar código, ésta indudablemente es una de las más importantes ya que no es necesario escribir el mismo código cada vez que deseamos realizar una tarea semejante.

2. Fácil detección y corrección de errores, dado que el problema fue divido en pequeños módulos cada uno responsable de una tarea, si en algún momento existiera un error en la solución global, basta identificar cuál de las tareas es la que no se está resolviendo adecuadamente y corregir únicamente aquellos módulos involucrados.

3. Fácil modificación o extensión, si se requiere modificar una tarea del problema o agregar una nueva, no será necesario rediseñar todo el algoritmo, basta con hacer las modificaciones en los módulos pertinente.

4. Un problema se vuelva más sencillo de solucionar si pensamos de manera modular.

Seguimos con más teoría...

¡Saludos!

viernes, 26 de febrero de 2016

Contadores, acumuladores e interruptores.

En la mayor parte del diseño o implementación de las soluciones que se plantea a problemas específicos nos encontramos con instrucciones que deben ejecutarse un número determinado de veces, si hacemos un análisis más profundo de estas situaciones, en la mayoría de las ocasiones nos encontramos que las instrucciones son las mismas, pero que los datos varían, esto se hace posible utilizando las estructuras repetitivas, generalmente llamadas ciclos.

Existen varias estructuras de repetición implementadas por los diferentes lenguajes de programación, todas con la misma idea: repetir un conjunto de instrucciones, llamadas cuerpo del ciclo, dependiendo de la condición. En la mayoría de los ciclos el cuerpo se repiten siempre y cuando la condición se cumpla, sin embargo, también existe una estructura repetitiva que se repite en tanto que no se cumple la condición. Cabe mencionar que a cada una de las veces que se repite el ciclo se le conoce como iteración.

Cuando se utilizan ciclos dentro de un programa, te puedes enfrentar a dos posibles situaciones:

- Que conozcas desde el diseño cuántas veces deben repetirse las instrucciones (repetición
definida),

- Que el número de veces que se deban repetir las instrucciones dependa de un valor que se
conoce hasta el momento de la ejecución del ciclo (repetición indefinida).

En el primer caso se necesitará una variable que funja como un contador, en la cual se registre el número de iteraciones que se vayan ejecutando. En cambio, en las repeticiones indefinidas generalmente se controlan mediante interruptores o banderas, o bien, con valores centinela.

La repetición controlada de la centinela a menudo es llamada la repetición indefinida porque el número de repeticiones no es conocido antes de que el bucle comience a ejecutarse.


Con los anterior puedes darte cuenta que para las estructuras de control repetitivas es muy importante el uso de variables auxiliares y que por la frecuencia con la que se utilizan dentro de un algoritmo y por la función que realizan dentro del mismo toman un nombre especial: contadores, acumuladores e interruptores.

Un contador es una variable comúnmente de tipo entero destinada a almacenar un valor que se irá incrementando o decrementando en una cantidad constante. Se suelen utilizar mucho en procesos repetitivos definidos, para contabilizar el número de veces que se repite un conjunto de acciones o eventos, es decir en los cuerpos de las instrucciones repetitivas.

Sobre una variable contadora se realizan dos operaciones básicas: inicialización e incremento o decremento, según sea el caso. Todo contador se debe inicializar con un valor inicial (0, 1...)

contador = Valor_Inicial

Cada vez que aparezca el evento a contar se ha de incrementar o decrementar en una cantidad fija (I, D respectivamente) el valor del contador.

contador = contador + I; 
contador = contador - D;

Los contadores más utilizados tienen incrementos o decrementos de uno en uno.

En contraste, un interruptor o bandera es una variable que puede tomar dos posibles valores a lo largo de la ejecución del programa, éstos son: 1 (encendido/abierto) y 0 (apagado/cerrado), de ahí su nombre. Y se utilizan principalmente para registrar la ocurrencia o no de un suceso.

Por último, un acumulador es una variable cuyo objetivo es acumular cantidades sucesivas obtenidas al realizar la misma operación. El uso más habitual de un acumulador es obtener sumas y productos. Al igual que con los contadores, para poder utilizar un acumulador hay que realizar sobre ellos dos operaciones básicas: inicialización e incremento.

En el caso de obtener sumas el acumulador se inicializa en cero y en el caso de los productos en uno, para no afectar el resultado.

SumaTotal = 0; 
ProductoFinal = 1;

Una vez obtenido y almacenado en una variable la cantidad a acumular la añadimos a la variable acumulador:



En resumen, los contadores permiten llevar la cuenta del número de iteraciones que se realizan en un ciclo (definido o indefinido), y en el caso específico de ciclos definidos son el medio por el cual se controla el fin del ciclo. Por otro lado los acumuladores nos permiten guardar resultados parciales de operaciones que se realizan como parte del cuerpo de un ciclo (puede ser definido o indefinido). 

Seguimos con más teoría...

¡Saludos!

jueves, 25 de febrero de 2016

Estructura iterativa while.

Para sintetizar cómo se lleva a cabo las estructuras selectivas o condicional, a continuación se muestra el psedocódigo, en Java y el diagrama de flujo de las acciones que en un diagrama UML se realizarán en un while:


Debemos prestar atención en colocar correctamente la condición dentro del while para evitar ciclos infinitos.

¡Seguimos!

miércoles, 24 de febrero de 2016

Operador condicional ?:

Al conocer este operador condicional ?: me ha parecido fabuloso poder usarlo en vez del if-else, creo que el código puede ser más claro y más corto aún. Este operador condicional es el único operador ternario, es decir que maneja tres operandos.

El primer operador que se encuentra  a la izquierda del ? es la condición que dará la pauta para devolver un valor "true" o "false"(boolean expression), según sea el caso; el segundo operador se encuentra entre ? y : que será el valor que deberá imprimir en caso de que la condición se cumpla es decir si es "true" , en este caso se lo asignamos de antemano y el tercer operador que se encuentra a la derecha de : es el valor que deberá imprimir en caso de que la condición no se cumpla es decir si es "false".

Por ejemplo:

System.out.println(studentGrade >= 60 ? "Passed" : "Failed");


En este ejemplo, si la condición de que el alumno tenga una nota mayor o igual a 60 se cumple imprimirá: "Passed", en caso de que no se cumpla la condición imprimirá "Failed".

No sé ustedes, pero me ha encantado este operador condicional, voy hacer mis planas para que no se me olvide jajaja.

¡Nos vemos en la siguiente entrada de este blog!


martes, 23 de febrero de 2016

Uso de if-else de manera reiterada...

A continuación se muestra el uso de if-else de manera reiterada para la solución de un problema, al parecer va a ser más común de lo que pensaba el uso del if-else tal como se muestra a continuación:

En lo personal, me ha gustado más la segunda opción de cómo presentar el código en Java, ya que se ve  más compacto y es entendible; lo que eliminamos fueron espacios en blanco e indentación. La primera y segunda forma de presentar en Java son válidas, dependerá del gusto de cada persona.

¡Seguimos en pie de lucha! :)

¡Saludos!

lunes, 22 de febrero de 2016

Estructuras selectivas: if, if-else.

Para sintetizar cómo se lleva a cabo las estructuras selectivas o condicional, a continuación se muestra el psedocódigo, en Java y el diagrama de flujo de las acciones que en un diagrama UML se realizarán en un if:


A continuación se muestra el pseudocódigo, en Java y el diagrama de flujo de las acciones que se realizarán en un diagrama UML de un if-else:


¡Ya quiero entrar en acción!, pero bueno la teoría es importante...

¡Saludos!

viernes, 19 de febrero de 2016

Un pseudocódigo para elegir la estructura iterativa correcta...

A continuación les comparto un pequeño pseudocódigo que nos ayudará a elegir la mejor estructura iterativa para la solución de problemas.


Si se conoce el número de iteraciones al entrar en el bucle. Utilizar la estructura "for"
     Ejemplo: for (k = 1; k<=10; k+=)

sino

      si  el bucle debe ejecutarse como mínimo cero veces . Utilizar la estructura "while"
          Ejemplo: while (a != 20)
                          { instrucciones}

          sino
                 Utilizar la estructura "do...while"
      fin si

fin si

Espero sea de utilidad...

¡Saludos!

jueves, 18 de febrero de 2016

Estructuras de control...

He comenzado con el capítulo 4 de Deitel, en el cual se trabajará con algunas estructuras de control, entre el capítulo 4 y 5 se verá cada una a detalle con ejemplos y ejercicios propuestos. Pero para conocer de manera rápida ¿Qué son las estructuras de control? Les dejo este pequeño vídeo en donde se resume dichas estructuras.

¡Saludos!

miércoles, 17 de febrero de 2016

Casting entre variables.

Hacer casting se trata de convertir información en distintos formatos.

Existen varios tipos de casting, los más comunes son:

- Conversión entre variables.
- Conversión entre objetos.
- Conversión de objetos a variables.
- Conversión de variables a objetos.

En esta ocasión les comparto únicamente el casting entre variables, mediante el siguiente vídeo:

Espero sea de ayuda esta breve introducción.

¡Nos vemos en la siguiente entrada!

martes, 16 de febrero de 2016

Explicación programa 8: Calculadora de ritmo cardíaco.

A continuación les comparto el código de cómo se realizó esta app de calculadora de ritmo cardíaco, a mi parecer una app muy entretenida y muy útil, ya que amo hacer ejercicio.


Espero les sea de utilidad y recuerden que solo soy una novata en Java.

¡Saludos!

lunes, 15 de febrero de 2016

Código mejorado del programa 8...

Después de divertirme con este entretenido programa, se realizaron algunas mejoras de usabilidad, les comparto una parte:

¡Nos vemos en la siguiente entrada!

sábado, 13 de febrero de 2016

Captura de pantalla del programa 8: Target-Heart. Corriendo en Netbeans.

A continuación les comparto la captura de pantalla  de cómo corre en Netbeans el programa 8: Calculadora Target - Heart:



En la siguiente entrada, les presentaré una breve explicación de esta solución.

¡Saludos!

miércoles, 10 de febrero de 2016

Programa 8: Target-Heart Calculadora. UML

Durante el ejercicio, usted puede utilizar un monitor de ritmo cardíaco para ver que su ritmo cardíaco se mantenga dentro de un rango seguro sugerido por sus entrenadores y médicos. Según la American Heart Association (AHA), la fórmula para el cálculo de su máximo ritmo cardíaco en pulsaciones por minuto es 220 menos su edad en años. Su meta de ritmo cardíaco es un rango entre 50-85% de su ritmo cardíaco máximo. [Nota: estas fórmulas son estimaciones de la AHA. El ritmo cardíaco máximo objetivo puede variar basado en la salud, aptitud y el sexo del individuo. Siempre consulte con un médico o profesional de salud calificado antes de comenzar o modificar el programa de ejercicios.

Crear una clase llamada pulsaciones. Debe incluir los atributos de clase de la persona, nombre, apellido y fecha de nacimiento (consistente de atributos separados para el mes, día y año de nacimiento). Su clase debe tener un constructor que recibe esta información como parámetros. Para cada atributo de conjunto y métodos.  La clase también debe incluir un método que calcula y devuelve la edad de la persona en años, un método que calcula y devuelve el pulso de la persona objetivo. Escribir una aplicación en java que solicita información de la persona, crea una instancia de un objeto de clase pulsaciones e imprime la información de ese objeto, incluyendo el nombre de la persona, apellido y fecha de nacimiento, entonces calcula e imprime la edad de la persona en años, frecuencia cardíaca máxima y rango meta de ritmo cardíaco.

A continuación dejaré planteado el diagrama UML para dar solución a este interesante y útil ejercicio.


En la siguiente entrada mostraré esta app corriendo.

¡Saludos! 

martes, 9 de febrero de 2016

Programa 7: Explicación app DateTest.

Crear una clase llamada Date que incluya tres variables de instancia: año, mes y día. Proporciona un constructor que inicialice tres variables de instancia y asume que los valores  proporcionados son correctos. Proporciona un método set y un método get para cada variable de instancia. Proporciona un método displayDate que muestre el año, mes y día separados por barras inclinadas (/). Escribir una aplicación denominada DateTest que muestre las capacidades de la clase Date.

A continuación muestro el diagrama UML de la clase Date, en base a este diagrama UML iré desarrollando la clase Date y la app DateTest.


A continuación les muestro cómo resolví este ejercicio y cómo corre la app:




¡Saludos!






lunes, 8 de febrero de 2016

Ejemplo de Graphical User Interfaces (GUIs).

En esta ocasión para concluir la parte teórica del capítulo 3 muestro el código del ejemplo de uso de GUIs.

Viene la parte interesante... que es realizar los ejercicios propuestos por Deitel al final del capítulo 3, en la realización de ejercicios me daré cuenta de que tan bien comprendí los conceptos de este capítulo lleno de conceptos nuevos.

¡Saludos!

domingo, 7 de febrero de 2016

Métodos constructor.

¿Qué hace Java cuando la palabra clave "new" crea un nuevo objeto?

- Localiza memoria para el objeto.
- Inicializa las variables instancia de ese objeto (null, false, etc.)
- Llama al método constructor de la clase.

Una de las razones para usar el método constructor es para inicializar con valores las variables de instancia y sin el método constructor se inicializa con los valores por defecto las variables de instancia:

- Para los números el valor por defecto es cero.
- Para los booleans el valor por defecto es falso.
- Por referencias de objeto es nulo --> null

En el siguiente vídeo vemos un poco más acerca del método constructor:
¡Saludos!




sábado, 6 de febrero de 2016

Encapsulamiento en Java...

A continuación les comparto una breve introducción sobre encapsulamiento en Java, ojalá sea de ayuda para comprender un poco acerca de este término.

Me falta afinar el término interface, conforme vaya avanzando seguro que tendré bases más sólidas para compartirles a mi entender este concepto.

¡Saludos!

viernes, 5 de febrero de 2016

Diagrama UML.

En este ocasión les comparto un vídeo en el que vemos las partes de un diagrama UML, el cual nos sirve para mostrar de manera gráfica y simplificada cada una de las clases y sus relaciones.

Mediante el uso del diagrama UML mostramos cada clase que esté involucrada en el desarrollo de software sin necesidad de incorporar el código que hay detrás de éstas.


¡Saludos!

jueves, 4 de febrero de 2016

Explicación de la aplicación AccountTest...

En esta entrada les comparto la explicación del código de la entrada anterior, según mi entender en este fascinante mundo de Java que apenas comienza.

Ojalá sea de gran utilidad, al menos para mí lo ha sido. Aquí les dejo el vídeo:


¡Saludos!

miércoles, 3 de febrero de 2016

Código de la clase Account y el código del ambiente AccountTest.

A continuación les comparto el código de la clase Account y el ambiente en el que vemos correr esta clase en la aplicación AccountTest, en la siguiente entrada me explico a mi misma el ejemplo de Account, en el que vemos en forma la ejecución en tiempo real de los métodos accesor y setName() y getName().

Código de la clase Account:

Código del ambiente en donde corre la aplicación Account, conocido como Driver Class:
App corriendo en NetBeans:

¡Nos vemos en la siguiente entrada!



lunes, 1 de febrero de 2016

Breve introducción a métodos Accesor.

He iniciado con el estudio del capítulo 3 del libro de Deitel, el cual es una introducción a: clases, métodos, objetos y Strings.

Parece más complicado de lo que realmente es, pero es normal porque se mencionan términos nuevos , al menos yo no me desanimo al contrario ya quiero avanzar más para poder realizar más programas en Java, creando mis propias clases. 

A continuación les comparto el siguiente video, sino queda muy claro, lo seguiré tratando conforme avance en el estudio de este importante capítulo.

¡Saludos!

Introducción al concepto: Instance Variable.

Para cada clase se definen sus propiedades, es decir sus atributos: que son los datos que diferencian a uno objetos de otros. 

Los atributos se almacenan en variables que pueden ser: variables de instancia y variables de clase.

A continuación les comparto el siguiente vídeo de introducción al concepto de: variable de instancia, que más adelante estaremos compartiendo en diferentes programas.


¡Saludos!