Introducción a la programación
��Lenguajes de programación
Lenguajes de programación
Lenguajes de programación
Lenguaje máquina
Lenguaje de máquina es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de una computadora o el microcontrolador de un autómata .
Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la máquina.
Un programa consiste en una cadena de estas instrucciones de lenguaje de máquina (más los datos).
El lenguaje de máquina es específico de cada máquina o arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre ellas.
Lenguajes de programación
Ensambladores y microensambladores.
Ensambladores y microensambladores.
Lenguajes de programación
Compiladores
Un compilador es un programa que permite traducir el código fuente de un programa en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de máquina).
De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano, para luego compilarlo a un programa más manejable por una computadora.
En las primeras épocas de la informática, el software de los compiladores era considerado como uno de los más complejos existentes.
Los primeros compiladores se realizaron programándolos directamente en lenguaje máquina o en ensamblador.
Tipos de compiladores
Los compiladores se puede dividir en varias categorías:
Intérpretes
Es un programa informático capaz de analizar y ejecutar otros programas, escritos en un lenguaje de alto nivel.
Los intérpretes se diferencian de los compiladores en que mientras estos traducen un programa desde su descripción en un lenguaje de programación al código de máquina del sistema, los intérpretes sólo realizan la traducción a medida que sea necesaria, típicamente, instrucción por instrucción, y normalmente no guardan el resultado de dicha traducción.
Intérpretes
Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta.
A cambio permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete, sino del propio intérprete (lo que se conoce comúnmente como máquina virtual).
Esto permite que un mísmo código se pueda ejecutar en múltiples configuraciones de hardware.
Intérpretes
Este tipo de programas tienen una amplia implantación en entornos Web en los que es preciso que una misma información sea visualizada de la misma manera en cualquier tipo de dispositivo, desde PCs, Macs, servidores, Tablets, Telefonos móviles, etc, con independencia tanto del Hardware como del Sistema Operativo sobre el que se ejecuten.
De tal manera se puede clasificar a todos los navegadores web como Intérpretes.
Intérpretes
Las aplicaciones Java suelen estar compiladas en un bytecode.
En tiempo de ejecución, el bytecode es normalmente interpretado a código nativo para la ejecución sobre una Máquina Virtual Java.
De esta forma es suficiente con tener instalada la máquina virtual adecuada al sistema, la cual será la encargada de ejecutar el código.
También usa el sistema de los bytecodes el lenguaje ActionScript usado en las aplicaciones Adobe Flash.
Intérpretes
Listado de lenguajes interpretados:
Lenguajes de programación
Traductores/Compiladores cruzados
Los compiladores cruzados (cross-compiler) permiten la generación de un código para una máquina distinta a la que se está usando.
Un ejemplo de estos compiladores son los de los sistemas operativos móviles, que permiten crear la aplicación sobre un PC y ejecutar la aplicación sobre un terminal móvil con otro sistema operativo.
Son muy utilizados en los siguientes casos:
Traductores/Compiladores cruzados
Ejemplos de estos lenguajes son:
Emuladores
Los emuladores son programas que simulan una máquina o un sistema operativos distinto del instalado, permitiendo ejecutar aplicaciones para creadas para estos.
Se usan para emular Consolas de juegos, Autómatas, etc.
Virtualización
Existe una vertiente en la emulación que puede ser realizada por virtualización, consistente en crear una capa de abstracción, pero ejecutando instrucciones en una máquina del mismo tipo, y da como resultados obtener una computadora dentro de otra.
Actualmente está en auge el uso de la virtualización para crear servidores configurables, o múltiples servidores virtuales sobre la misma máquina real.
Ejemplos de esto son:
Comparativo Compiladores - Intérpretes
Ventajas de compilar frente a interpretar:�Solo es preciso compilar una vez, posteriormente siempre se ejecuta el mismo código compilado.
�En los bucles repetitivos, los intérpretes tienen que traducir las instrucciones tantas veces como se repite, pero el compilador genera un código único para todo el bucle.
�Los compiladores permiten una mayor información de errores que los intérpretes, debido a que para crear el ejecutable deben recorrer todo el código. �
Comparativo Compiladores - Intérpretes
�Ventajas del intérprete frente al compilador:
�Los intérpretes necesitan menos memoria que los compiladores.
�Permiten interactuar con mayor facilidad con el código fuente durante el desarrollo de la aplicación.
Lenguajes de programación
Fases de ejecución de un lenguaje de alto nivel.
El proceso de compilación se compone internamente de varias etapas o fases:
Análisis léxico
Se lee el programa fuente de izquierda a derecha y se agrupa en componentes léxicos (tokens), que son secuencias de caracteres que tienen un significado.
Todos los espacios en blanco, líneas en blanco, comentarios y demás información innecesaria se elimina del programa fuente.
Se comprueba que los símbolos del lenguaje (palabras clave, operadores,...) se han escrito correctamente.
Fases de ejecución de un lenguaje de alto nivel.
Análisis sintáctico
Los caracteres o componentes léxicos se agrupan jerárquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida.
Se comprueba si lo obtenido de la fase anterior es sintácticamente correcto (obedece a la gramática del lenguaje)
Fases de ejecución de un lenguaje de alto nivel.
Análisis semántico
Se revisa el programa fuente para tratar de encontrar errores semánticos y reúne la información sobre los tipos para la fase posterior de generación de código.
Se utiliza la estructura jerárquica determinada por la fase de análisis sintáctico para identificar los operadores y operandos de expresiones y proposiciones.
Fases de ejecución de un lenguaje de alto nivel.
Mediante la verificación de tipos, el compilador verifica si cada operador tiene operandos permitidos por la especificación del lenguaje fuente.
Por ejemplo, las definiciones de muchos lenguajes de programación requieren que el compilador indique un error cada vez que se use un número real como índice de una matriz. Sin embargo, la especificación del lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un operador aritmético binario se aplica a un número entero y a un número real. Revisa que los arreglos tengan definido el tamaño correcto.
Fases de ejecución de un lenguaje de alto nivel.
Fase de síntesis
Consiste en generar el código objeto equivalente al programa fuente.
Sólo se genera código objeto cuando el programa fuente está libre de errores de análisis, lo cual no quiere decir que el programa se ejecute correctamente, ya que un programa puede tener errores de concepto o expresiones mal calculadas.
Por lo general el código objeto es código de máquina relocalizable o código ensamblador.
Fases de ejecución de un lenguaje de alto nivel.
Generación de código intermedio
Después de los análisis sintáctico y semántico, algunos compiladores generan una representación intermedia explícita del programa fuente.
Esta representación intermedia debe tener dos propiedades importantes; debe ser fácil de producir y fácil de traducir al programa objeto.
Fases de ejecución de un lenguaje de alto nivel.
Optimización de código
Consiste en mejorar el código intermedio, de modo que resulte un código máquina más rápido de ejecutar.
Hay mucha variación en la cantidad de optimización de código que ejecutan los distintos compiladores.
En los que hacen mucha optimización, llamados "compiladores optimizadores", una parte significativa del tiempo del compilador se ocupa en esta fase.
Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo de ejecución del programa objeto sin retardar demasiado la compilación.
Fases de ejecución de un lenguaje de alto nivel.
Tras haber obtenido el código objeto, el enlazador genera el código ejecutable.
En Windows este fichero ejecutable suele tener extensión *.exe.
HTML
C++
JAVA
// Hello.java
import javax.swing.JApplet;
import java.awt.Graphics;
public class Hello extends JApplet {
public void paintComponent(final Graphics g) {
g.drawString("Hello, world!", 65, 95);
}
}
PHP
PYTHON
Estructura general de un programa
ELEMENTOS Y CONCEPTOS FUNDAMENTALES
Desde el punto de vista informático, el elemento físico utilizado para el tratamiento de la información es el computador, computadora u ordenador, que puede ser definido de la siguiente manera:
Es una máquina compuesta de elementos físicos, en su mayoría de origen electrónico, capaz de realizar una gran variedad de trabajos a gran velocidad y con gran precisión, siempre que se le den las instrucciones adecuadas.
El conjunto de órdenes que se dan a una computadora para realizar un proceso determinado se denomina programa, mientras que el conjunto de uno o varios programas más la documentación correspondiente para realizar un determinado trabajo, se denomina aplicación informática.
ELEMENTOS Y CONCEPTOS FUNDAMENTALES
Al conjunto de operaciones que se realiza sobre una información se le denomina tratamiento de la información.
Estas operaciones siguen una división lógica que se representa en el siguiente esquema:
ELEMENTOS Y CONCEPTOS FUNDAMENTALES
En términos generales se denomina entrada al conjunto de operaciones cuya misión es tomar los datos del exterior y enviarlos a la computadora; para ello en ocasiones es necesario realizar operaciones de depuración o validación de los mismos (eliminar espacios, comprobar que el tipo de datos es adecuado, comprobar códigos de error en dni,etc.).
Estos datos deben quedar en la memoria de la computadora para su posterior tratamiento.
ELEMENTOS Y CONCEPTOS FUNDAMENTALES
A las operaciones que tratan los datos de entrada para obtener los resultados se le llama proceso o algoritmo.
Salida son las operaciones que proporcionan los resultados de un proceso.
Se engloban en la salida también aquellas operaciones que dan forma a los resultados y los distribuyen adecuadamente (añadir separadores decimales o de millares, maquetar salida dni, etc.).
ELEMENTOS Y CONCEPTOS FUNDAMENTALES
El algoritmo necesario para la resolución de un problema queda definido cuando una aplicación informática es analizada.
La automatización de un problema para que pueda ser desarrollado por una computadora implica un proceso como el siguiente:
CICLO DE VIDA DE UNA APLICACION INFORMATICA
Una aplicación informática se compone de uno o varios programas interrelacionados que tienen por objeto la realización de una determinada tarea.
El ciclo de vida de una aplicación informática es el proceso que se sigue desde el planteamiento de un problema hasta que se tiene una solución instalada en la computadora, y en funcionamiento por los usuarios finales mientras sea de utilidad
CICLO DE VIDA DE UNA APLICACION INFORMATICA
DISEÑO DEL PROGRAMA
Fase de análisis: Consiste en el examen y descripción detallada de los siguientes aspectos relativos al problema:
- Equipo a utilizar (computador, periféricos, soportes, material auxiliar, etc.).
- Personal informático.
- Estudio de los datos de entrada (INPUT)
- Estudio de los datos de salida (OUTPUT)
- Relación entre la salida y la entrada.
- Descomposición del problema en módulos.
El resultado de esta fase se denomina especificación del problema.
CICLO DE VIDA DE UNA APLICACION INFORMATICA
DISEÑO DEL PROGRAMA
Fase de programación:
Se diseña el algoritmo del programa.
Se debe abordar en forma sistemática, aplicando explícitamente un conjunto de técnicas, como programación estructura y diseño descendente.
El resultado es el algoritmo o descripción del conjunto de acciones que deberán ser realizadas por el computador.
Para su representación se utilizan diferentes notaciones, como ordinogramas, pseudocódigo, etc.
CICLO DE VIDA DE UNA APLICACION INFORMATICA
DISEÑO DEL PROGRAMA
Fase de codificación:
Se pasa el algoritmo creado en la fase anterior a un lenguaje de programación concreto.
Al resultado se le denomina programa.
#include <stdio.h>
int main()
{
printf("Hola mundo");
return 0;
}
CICLO DE VIDA DE UNA APLICACION INFORMATICA
INSTALACION Y EXPLOTACION DE PROGRAMA
Fase de edición:
Escritura del programa fuente a partir de las hojas de codificación en la memoria del computador, grabando en algún soporte permanente.
Se realiza con la ayuda de un programa del sistema denominada editor.
CICLO DE VIDA DE UNA APLICACION INFORMATICA
Fase de compilación:
Traducción del programa fuente a lenguaje de máquina cuyo resultado es el programa objeto. Para ello se dispone de programas compiladores o intérpretes, que, además, comprueban la correcta sintaxis de programa.
Fase de montaje:
En los programas compilados es necesario añadir al programa objeto algunas rutinas del sistema o algunos subprogramas externos que se hayan compilados separadamente. De ello se encarga el programa montador (linker)
CICLO DE VIDA DE UNA APLICACION INFORMATICA
Fase de ejecución:
Consiste en ejecutar el programa sucesivas veces con diferentes datos de prueba para asegurar su correcto funcionamiento.
Fase de explotación y mantenimiento:
La explotación consiste en e uso continuo y habitual por parte de os usuarios de la aplicación mientras tenga utilidad.
Paralelamente a la explotación de una aplicación se realiza el mantenimiento de la misma, consistente en la comprobación periódica de su buen funcionamiento.
ERRORES
ERRORES
Según el momento fase en que se detectan, los errores se clasifican de la siguiente manera:
Errores de compilación: Los errores en tiempo de compilación o sintácticos, corresponden al incumplimiento de las reglas sintácticas del lenguaje, por ejemplo una palabra reservada del lenguaje mal escrita, una instrucción incompleta, etc.
Estos errores son los más fáciles de corregir, ya que son detectados por el compilador, el cual dará información sobe el lugar donde está y la naturaleza de cada uno de ellos mediante un mensaje de error.
ERRORES
Errores de ejecución:
Se deben generalmente a operaciones no permitidas, como dividir por cero, leer un dato no numérico en una variable numérica.
Se detectan porque se produce una parada anormal del programa durante su ejecución y se dice entonces que el programa se ha caído o que ha sido abortado por el sistema.
Son más difíciles de detectar corregir que os errores sintácticos, ya que ocurren o no.
ERRORES
Errores de lógica:
Corresponden a la obtención por el programa de resultados que no son correctos, y la única manera de detectarlos es realizando un numero suficiente de ejecuciones de prueba con una gama lo más amplia posible de juegos de datos de prueba, comparando los datos producidos por el programa con los obtenidos a mano para esos mismos datos.
Son los más difíciles de corregir, no sólo por a dificultad para detectarlos, sino porque se deben a la propia concepción y diseño del programa.
ERRORES
Errores de especificación:
Es posiblemente el peor tipo de error y el más costoso de corregir.
Se deben a la realización de unas especificaciones incorrectas motivadas por una mala comunicación entre el programador y quien plantea en problema.
Se detectan normalmente cuando ya ha concluido e diseño e instalación del programa, por lo que su corrección puede suponer la repetición de gran parte del trabajo realizado.
CALIDAD DE LOS PROGRAMAS
CALIDAD DE LOS PROGRAMAS
Para un determinado problema se pueden construir diferentes algoritmos de resolución o programas. Las características generales que debe reunir un programa son las siguientes:
CALIDAD DE LOS PROGRAMAS
ESTRUCTURA GENERAL DE UN PROGRAMA
Un programa puede considerarse como una secuencia lógica de acciones (instrucciones) que manipulan un conjunto de objetos (datos) para obtener unos resultados que serán la solución al problema que resuelve dicho programa.
ESTRUCTURA GENERAL DE UN PROGRAMA
Todo programa, en general contiene dos bloques bien diferenciados para la descripción de los dos aspectos anteriormente citados:
PARTES PRINCIPALES DE UN PROGRAMA
Las partes principales de un programa están relacionadas con sus dos bloques ya mencionados.
Dentro del bloque de instrucciones podemos diferenciar tres partes fundamentales, como se muestra en la siguiente figura:
PARTES PRINCIPALES DE UN PROGRAMA
Entrada de Datos: La constituyen todas las instrucciones que toman los datos de entrada desde un dispositivo externo y los almacena en la memoria principal para que puedan ser procesados.
Proceso o algoritmo: Está formado por las instrucciones que modifican los objetos a partir de su estado inicial (datos de entrada) hasta el estado final (resultados) dejando los objetos que lo contiene disponibles en la memoria principal.
Salida de resultados: Conjunto de instrucciones que toman los datos finales (resultado) de la memoria principal y los envían a los dispositivos externos.
CLASIFICACION DE LAS INSTRUCCIONES
Según la función que desempeñan dentro de un programa, las instrucciones se clasifican de la siguiente manera:
Instrucciones de declaración:
Su misión es anunciar la utilización de objetos en un programa indicando que identificador, tipo y otras características corresponden a cada uno de ellos.
CLASIFICACION DE LAS INSTRUCCIONES
Instrucciones primitivas:
Son aquellas que ejecuta el procesador de modo inmediato.
Es decir, no dependen de otra cosa que de su propia aparición en el programa para ser ejecutadas.
Las instrucciones primitivas pueden ser de entrada, de asignación o de salida.
CLASIFICACION DE LAS INSTRUCCIONES
Instrucciones de control:
Son instrucciones que no realizan trabajo efectivo alguno salvo la evaluación de expresiones, generalmente lógicas, con el objetivo de controlar la ejecución de otras instrucciones o alterar el orden de ejecución normal de las instrucciones de un programa.
Existen tres grandes grupos de instrucciones de control:
VARIABLES AUXILIARES DE UN PROGRAMA
Son objetos que utiliza un programa y por la función que realizan dentro del mismo toman un nombre especial, modelando su funcionamiento debido a su frecuente utilización.
Contadores: Es un objeto que se utiliza para contar cualquier evento que pueda ocurrir dentro de un programa. Se utilizan realizando sobre ellos dos operaciones básicas:
Algoritmos y Pseudocódigo
Pseudocódigo
Estructura deseable a seguir en su realización:�
Imprimir numero mayor
Estructuras selectivas�
Selectiva doble (alternativa)�
Selectiva múltiple�
Selectiva múltiple-Casos
Bucle mientras
Bucle repetir
Bucle para
Bucle para cada
El anidamiento
Reglas para dibujar un diagrama de flujo.�
Los Diagramas de flujo se dibujan generalmente usando algunos símbolos estándares.
FreeDFD permite crear fácilmente diagramas de flujo y ejecutarlos.
Videos
Ejemplo
Reparar un PC
Reparar un PC v2
Diagrama de flujo que encuentra la suma de los primeros 50 números naturales
Pseudocódigo
Ejemplos
Ejemplos Pseudocódigo
Leer de teclado un número decimal, y mostrar por pantalla la parte entera.
INICIO
NUMERO=0,0; PE=0;
LEER A
PE = PARTEENTERA NUMERO
MOSTRAR "La parte entera del número introducido es: " PE
FIN
Ejemplos Pseudocódigo
Leer de teclado un número decimal, y mostrar por pantalla la parte entera y la parte decimal por separado.
INICIO
NUMERO = 0,0; PE=0; PD=0,0;
LEER NUMERO
PE = PARTEENTERA NUMERO
PD = PARTEDECIMAL NUMERO
MOSTRAR "La parte entera es: " PE
MOSTRAR "La parte decimal es: " PD
FIN
Ejemplos Pseudocódigo
Leer de teclado dos números enteros mayores de cero (no hace falta comprobarlo), y mostrar un mensaje por pantalla indicando si son divisibles o no.
INICIO
A=0; B=0; RES=0;
LEER A, B
RES = RESTO A / B
SI RES > 0
MOSTRAR "Los dos números no son divisibles"
SINO
MOSTRAR "Los dos números son divisibles"
FIN SI
FIN
Ejemplos Pseudocódigo
Leer de teclado dos números enteros mayores de cero (no hace falta comprobarlo), y mostrar un mensaje por pantalla indicando si son divisibles o no.
INICIO
A=0; B=0; RES=0; DIVISIBLE="";
LEER A, B
RES = RESTO A / B
SI RES > 0
DIVISIBLE = "Los dos números no son divisibles"
SINO
DIVISIBLE = "Los dos números son divisibles"
FIN SI
MOSTRAR DIVISIBLE
FIN
Ejemplos Pseudocódigo
Ejercicio 2006 - Nombre alumno
Leer de teclado enteros mayores de cero (no hace falta comprobarlo), y mostrar un mensaje por pantalla indicando si es par.
INICIO
A=0; RES=0;
LEER A
RES = RESTO A / 2
SI RES > 0
MOSTRAR "El número es impar"
SINO
MOSTRAR "El número es par"
FIN SI
FIN
Ejemplos Pseudocódigo
Leer de teclado un número entero mayores de cero (no hace falta comprobarlo), y mostrar por pantalla el siguiente número.
Ej: Nos dan el 8 y mostramos el 9.
INICIO
A=0;
LEER A
A = A + 1
MOSTRAR "El siguiente número es: " A
FIN
Ejemplos Pseudocódigo
Leer de teclado un número entero (no hace falta comprobarlo), y mostrar por pantalla si es positivo o negativo.
Se asume que el cero es positivo.
Ej: Nos dan el -1 y mostramos "El valor es negativo".
INICIO
A=0;
LEER A
SI A < 0
MOSTRAR "El número introducido es NEGATIVO"
SINO
MOSTRAR "El número introducido es POSITIVO"
FIN SI
FIN