Introducción a la programación

Antes de comenzar con la programación en Java, les explico a mis alumnos un tema de introducción a la programación. Les cuento en que consiste programar, lo que es un algoritmo, un diagrama de flujo y un seudocódigo. Pero por encima de todo, les insisto en que programar es acerca de resolver problemas.

Conceptos preliminares

Existen una serie de conceptos que conviene interiorizar antes de ponerse a programar. Al menos deberíamos tener bien claros los siguientes:

Ciencias de la computación

Conjunto de disciplinas que emplean la computación para el estudio y resolución de problemas.

Las ciencias de la computación tienen como propósito resolver problemas utilizando ordenadores para desarrollar la solución.

Las ciencias de la computación NO son el estudio de los computadores.

¿Qué es programar?

Programar es el proceso de crear un conjunto de instrucciones para indicar al ordenador como debe realizar una tarea concreta.

¿Qué es un algoritmo?

Un algoritmo es una secuencia inequívoca de instrucciones que permiten al ordenador resolver un problema.

Diagramas de Flujo

Como su nombre indica es un diagrama que explica el flujo de instrucciones para solucionar el problema. Para ello se emplean una serie de símbolos, con un significado concreto, y conectados mediante flechas que indican el flujo.

Permite que muchas personas participen en la creación del algoritmo que soluciona el problema. No se necesita saber programar.

Hay programas para el desarrollo de diagramas de flujo, aunque no es extraño hacer un primer boceto a papel y lápiz.

Ejemplo: Solucionar el problema de que no arranca el coche.

El proceso para solucionar este problema sería:

  1. Comprobar que se ha introducido la llave en el contacto.
  2. Asegurarnos de que se ha hecho contacto: se ha arrancado.
  3. Comprobar que el coche tiene Gasolina.
  4. Tras las anteriores comprobaciones, si el coche ha arrancado todo va bien. Si por el contrario, no ha arrancado, llamamos a la grúa y lo llevaríamos al taller.

Este proceso dibujado en un diagrama de flujo, podría tener el siguiente aspecto:

Ejemplo de diagrama de Flujo
Ejemplo de diagrama de flujo

En su implementación he utilizado los siguientes símbolos:

Simbolo de inicio - finalInicio/ final: Representa el punto de inicio y el punto final del proceso que se esté describiendo.
Símbolo de procesoProceso: Indicamos la operación a realizar.
Símbolo de decisiónDecisión: Se evalúa si una condición es verdadera o falsa, tomando el proceso uno u otro camino en función del resultado de dicha evaluación.
línea de flujoLínea de flujo: Marca el orden en que vamos ejecutando las distintas operaciones y comprobaciones de nuestro diagrama. La flecha apunta hacia la siguiente acción.
Símbolos básicos empleados en los diagramas de flujo

Existe todo un conjunto de símbolos para definir en detalle los procesos. Las notaciones más conocidas son: flujograma y BPMN. Para el propósito de este cuaderno nos vale con entender y manejar los cuatro símbolos mostrados arriba.

Pseudocódigo

También podemos expresar un algoritmo mediante un pseudocódigo, que no es otra cosa que expresar las instrucciones del mismo en un lenguaje natural, fácil de entender para un ser humano. Secuenciando las instrucciones como se llevarían a cabo en la ejecución del proceso.

Ejemplo: Solucionar el problema de que no arranca el coche.

Ejemplo 1 de pseudocódigo

Lenguajes de programación

Cada sistema de computación entiende un lenguaje de muy bajo nivel que es específico al tipo de hardware del mismo. Este lenguaje es denominado código máquina.

Por el contrario, los programadores, cuando escriben software, utilizan un lenguaje de alto nivel mucho más cercano al lenguaje humano y por tanto mucho más sencillo de entender para una persona.

Podemos distinguir tres niveles de lenguajes de programación:

Código máquina

Lenguaje de muy bajo nivel que es el que entiende el ordenador.

Código máquina
  • Instrucciones que pueden ser directamente ejecutadas por la CPU.
  • Lenguaje numérico compuesto estrictamente por ceros y unos.
  • Lenguaje más rápido posible de ejecución.
  • Tedioso para detectar y corregir errores. Lenguaje muy poco amigable.

Bajo nivel: Lenguaje de bajo nivel próximo al código máquina, pero adaptado para que resulte más sencillo de programar a una persona.

código ensamblador
  • Muy próximo al código máquina.
  • El más conocido es el lenguaje ensamblador.
  • Necesita ser “Traducido” por un compilador (el ensamblador) a código máquina para que sea entendido por el ordenador.

Alto nivel: Lenguaje con juego de instrucciones próximo al leguaje humano por lo que resulta mucho más intuitivo programar en él.

  • Proveen un alto nivel de abstracción del código máquina.
  • Son sencillos de aprender.
  • Necesitan un traductor para comunicarse con el ordenador, que sólo entiende código máquina.
  • Hay cientos de lenguajes de este tipo.

Los lenguajes de programación más populares en 2018 fueron: Java, Python, Javascript, C++, C#, PHP, PERL, SWIFT, R y RUST

Compilación Vs Ejecución

Normalmente programaremos en un lenguaje de alto nivel, muy rara vez en un lenguaje de bajo nivel y nunca en código máquina.

Como el ordenador sólo entiende código máquina, vamos a necesitar un traductor para el código programado en un lenguaje de alto nivel. Tenemos dos posibilidades para traducirlo a código máquina:

  1. Compilador: Traducimos directamente todo el programa a código máquina y ejecutamos.
  2. Interprete: Vamos traduciendo las instrucciones a código máquina una a una, según tengamos que ejecutarlas.

Un programa compilado va a ser más rápido en la ejecución. Un programa interpretado permitirá hacer cambios durante la ejecución.

Introducción a Java

Java es un lenguaje de alto nivel con las siguientes características:

  • Orientado a objetos
  • Simple
  • Seguro
  • Independiente de la plataforma (JVM)
  • Robusto
  • Portable
  • Arquitectura neutral (object file)
  • Dinámico
  • Interpretado
  • Alto performance
  • Multi hilo
  • Distribuido

Java es compilado e interpretado a la vez. El código programado en Java se compila a “bytecode” por el compilador de Java, funcionando en cualquier plataforma. El “bytecode” generado no es exactamente código máquina, es más bien una especie de ensamblador que es independiente de la plataforma. Es decir, vale para todos los Sistemas Operativos.

Sistemas Operativos en Java

En nuestro ordenador, tendremos instalada la JVM (Java Virtual Machine), que es específica para cada plataforma, ya que será la encargada de traducir el “bytecode” a código máquina. Para esto último, utiliza un intérprete que funciona bastante rápido al no tener que hacer una traducción desde lenguaje de alto nivel, sino desde bytecode.

No obstante, las JVMs modernas usan compilación JIT (just in time) para compilar el bytecode a código máquina.

En la siguiente figura se puede apreciar lo comentado:

Máquina virtual Java

NOTA:

Este post es parte de la colección “Java” que reproduce los apuntes de la clase que imparto sobre el tema en ESIC. Puedes ver el índice de esta colección aquí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *