Uni 1.
Programación
2.- Programas y programación
2.2.- Algoritmos y programas.
Algoritmo: Algoritmo: secuencia ordenada de pasos, descrita sin ambigüedades, que
conducen a la solución de un problema dado.
Programa: A los pasos que permiten resolver el problema, escritos en un lenguaje de
programación, para que puedan ser ejecutados en el ordenador y así obtener la
solución.
La diferencia fundamental entre algoritmo y programa es que, en el segundo, los
pasos que permiten resolver el problema, deben escribirse en un determinado
lenguaje de programación para que puedan ser ejecutados en el ordenador y así
obtener la solución.
Los lenguajes de programación son sólo un medio para expresar el algoritmo, es
decir, establece una serie de normas sintácticas y semánticas para expresarlo.
Características fundamentales que éstos deben cumplir son:
Debe ser preciso e indicar el orden de realización paso a paso.
Debe estar definido, si se ejecuta dos o más veces con los mismos datos de
entrada, debe obtener el mismo resultado cada vez. Además, debe dar una
respuesta a cualquier dato de entrada.
Debe ser finito, debe tener un número finito de pasos.
Para representar gráficamente los algoritmos existen diferentes herramientas:
Diagramas de flujo: Esta técnica utiliza símbolos gráficos para la
representación del algoritmo. Suele utilizarse en las fases de análisis.
Pseudocódigo: Esta técnica se basa en el uso de palabras clave en lenguaje
natural, constantes, variables, otros objetos, instrucciones y estructuras de
programación que expresan de forma escrita la solución del problema. Es la
técnica más utilizada actualmente.
Tablas de decisión: En una tabla son representadas las posibles condiciones
del problema con sus respectivas acciones. Suele ser una técnica de apoyo al
pseudocódigo cuando existen situaciones condicionales complejas.
3.- Paradigmas de la programación.
Paradigma de programación: es un modelo básico para el diseño y la
implementación de programas. Este modelo determinará como será el proceso de
diseño y la estructura final del programa.
Algunos de ellos son:
Programación Declarativa: Se basa en el desarrollo de algoritmos aplicando
una especificación de un conjunto de condiciones, proposiciones, afirmaciones
y restricciones que describen el problema. Las sentencias utilizadas describen
el problema que se quiere solucionar, pero no la instrucciones necesarias para
llegar a la solución. El lenguaje SQL está basado en este paradigma. Dentro de
Uni 1. Programación
este paradigma se encuentran la programación funcional y la programación
lógica.
Programación Imperativa: Se basa en el desarrollo de algoritmos detallando
de forma clara y específica los comandos a ejecutar para, a través del paso por
diferentes estados, llegar a la solución. Se basa en el uso de variables, tipos
de datos, expresiones y estructuras de control del flujo de ejecución. Lenguajes
como Python, Java, C++, C# ... son lenguajes imperativos. Dentro de este
paradigma se encuentran la programación convencional (programación no
estructurada), la programación estructurada, la programación orientada a
objetos, la programación orientada a eventos, la programación orientada a
aspectos
4.- Fases de la programación.
El proceso de creación de software puede dividirse en diferentes fases:
Fase de resolución del problema.
Fase de implementación.
Fase de explotación y mantenimiento.
4.1.- Resolución del problema.
En esta fase es necesario que el problema sea definido y comprendido claramente
para que pueda ser analizado con todo detalle.
2 etapas:
Análisis. Indicará la especificación de requisitos que se deben cubrir. Los
contactos entre el analista/programador y el cliente/usuario serán numerosos.
El análisis inicial ofrecerá una idea general de lo que se solicita, realizando
posteriormente sucesivos refinamientos. Hay que dar respuesta a:
o ¿Cuál es la información que ofrecerá la resolución del problema?.
o ¿Qué datos son necesarios para resolver el problema?.
Diseño. Diseño más detallado, indicando el comportamiento o la secuencia
lógica de instrucciones capaz de resolver el problema planteado. constituyen lo
que conocemos como algoritmo.
4.2.- Implementación.
Codificación o construcción: Esta etapa consiste en transformar o traducir
los resultados obtenidos a un determinado lenguaje de programación. Para
comprobar la calidad y estabilidad de la aplicación se han de realizar una serie
de pruebas que comprueben las funciones de cada módulo (pruebas unitarias),
que los módulos funcionan bien entre ellos (pruebas de interconexión) y que
todos funcionan en conjunto correctamente (pruebas de integración).
Para ello se utiliza la COMPILACION: proceso por el cual se traducen las
instrucciones escritas en un determinado lenguaje de programación a lenguaje
que la máquina es capaz de interpretar, nomalmente código binario.
Uni 1. Programación
Se lleva a cabo 2 formas:
o A través de un compilador: Recibe el código fuente, realiza un análisis
lexicográfico, semántico y sintáctico, genera un código intermedio no
optimizado, optimiza dicho código y finalmente, genera el código
objeto/máquina ejecutable en una plataforma específica.
o A través de un Intérprete: 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.
Prueba de ejecución y validación: necesario implantar la aplicación en el
sistema donde va a funcionar, debe ponerse en marcha y comprobar si su
funcionamiento es correcto. Una vez corregido los errores ya que sino no se
puede proseguir el programa y testeado se documentará mediante:
o Documentación interna: Encabezados, descripciones, declaraciones
del problema y comentarios que se incluyen dentro del código fuente.
o Documentación externa: Son los manuales que se crean para una
mejor ejecución y utilización del programa.
4.3.- Explotación.
Cuando el programa ya está instalado en el sistema y está siendo de utilidad para los
usuarios, será necesario realizar evaluaciones y, si es necesario, modificaciones . Este
proceso recibe el nombre de mantenimiento del software.
Será imprescindible añadir una documentación adecuada que facilite al programador
la comprensión, uso y modificación de dichos programas.
5.- Ciclo de vida del software.
Ciclo de vida del software: es una sucesión de estados o fases por las cuales pasa
un software a lo largo de su "vida".
6.- Lenguajes de programación.
Lenguaje de programación: Conjunto de reglas sintácticas y semánticas, símbolos y
palabras especiales establecidas para la construcción de programas. Es un lenguaje
artificial, una construcción mental del ser humano para expresar programas.
Gramática del lenguaje: Reglas aplicables al conjunto de símbolos y palabras
especiales del lenguaje de programación para la construcción de sentencias correctas.
Cada gramática dispone de:
Léxico: Es el conjunto finito de símbolos y palabras especiales, es el vocabulario del
lenguaje.
Sintaxis: Son las posibles combinaciones de los símbolos y palabras especiales. Está
relacionada con la forma de los programas.
Uni 1. Programación
Semántica: Es el significado de cada construcción del lenguaje, la acción que se
llevará a cabo.
6.1.- Lenguaje máquina.
Es utilizado directamente por el procesador, consta de un conjunto de instrucciones
codificadas en binario. Es el sistema de códigos directamente interpretable por
un circuito microprogramable. Lenguaje de bajo nivel.
Este tipo de lenguaje presentaba los siguientes inconvenientes:
Cada programa era válido sólo para un tipo de procesador u ordenador.
La lectura o interpretación de los programas era extremadamente difícil y, por
tanto, insertar modificaciones resultaba muy costoso.
Los programadores de la época debían memorizar largas combinaciones de
ceros y unos, que equivalían a las instrucciones disponibles para los diferentes
tipos de procesadores.
Los programadores se encargaban de introducir los códigos binarios en el
computador, lo que provocaba largos tiempos de preparación y posibles
errores.
6.2.- Lenguaje Ensamblador.
ya no son secuencias binarias, se sustituyen por códigos de operación que describen
una operación elemental del procesador. Es un lenguaje de bajo nivel, depende del
hardware.
Mnemotécnico: son palabras especiales, que sustituyen largas secuencias de ceros y
unos, utilizadas para referirse a diferentes operaciones disponibles en el juego de
instrucciones que soporta cada máquina en particular.
Uni 1. Programación
presentaba múltiples dificultades:
Los programas seguían dependiendo directamente del hardware que los
soportaba.
Los programadores tenían que conocer detalladamente la máquina sobre la
que programaban, ya que debían hacer un uso adecuado de los recursos de
dichos sistemas.
La lectura, interpretación o modificación de los programas seguía presentando
dificultades.
6.3.- Lenguajes compilados.
Compilador: Es un programa cuya función consiste en traducir el código fuente de un
programa escrito en un lenguaje de alto nivel a lenguaje máquina. Al proceso de
traducción se le conoce con el nombre de compilación.
Ventajas:
Son mucho más fáciles de aprender y de utilizar que sus predecesores.
Se reduce el tiempo para desarrollar programas, así como los costes.
Son independientes del hardware, los programas pueden ejecutarse en
diferentes tipos de máquina.
La lectura, interpretación y modificación de los programas es mucho más
sencilla.
Desventajas:
Código objeto generado es menos eficiente.
6.4.- Lenguajes interpretados.
Intérprete: Es un programa traductor de un lenguaje de alto nivel en el que el proceso
de traducción y de ejecución se llevan a cabo simultáneamente, es decir, la instrucción
se pasa a lenguaje máquina y se ejecuta directamente. No se genera programa objeto,
ni programa ejecutable.
Lenguajes interpretados son: Perl, PHP, Python, JavaScript, etc.
Uni 1. Programación
A medio camino entre los lenguajes compilados y los interpretados, existen los
lenguajes que podemos denominar pseudo-compilados o pseudo-interpretados, es
el caso del Lenguaje Java. Su código fuente se compila para obtener el código binario
en forma de bytecodes. Los ficheros que contienen los bytecodes de Java tienen
extensión .class. La Máquina Virtual Java interpreta este código y, para su ejecución,
lo traducirá a código máquina del procesador en particular sobre el que se esté
trabajando.
7.- El lenguaje de programación Java.
Las características principales de lenguaje Java se resumen a continuación:
El código generado por el compilador Java es independiente de la arquitectura.
Está totalmente orientado a objetos.
Su sintaxis es similar a C y C++.
Es distribuido, preparado para aplicaciones TCP/IP.
Dispone de un amplio conjunto de bibliotecas.
Es robusto, realizando comprobaciones del código en tiempo de compilación y
de ejecución.
La seguridad está garantizada, ya que las aplicaciones Java no acceden a
zonas delicadas de memoria o de sistema.
7.3.- La POO y Java.
Uni 1. Programación
En Java, los datos y el código (funciones o métodos) se combinan en entidades
llamadas objetos.
Al emplear los conceptos de la Programación Orientada a Objetos (POO), Java
incorpora las tres características propias de este paradigma: encapsulación,
herencia y polimorfismo. Los tipos de objetos se denominan clases. Los objetos que
utilizan estos patrones o pertenecen a dichos tipos, se identifican instancias.
7.4.- Independencia de la plataforma y trabajo en red.
Independencia: Los programas escritos en Java pueden ser ejecutados en
cualquier tipo de hardware. El código fuente es compilado, generándose el
código conocido como Java Bytecode (instrucciones máquina simplificadas que
son específicas de la plataforma Java), el bytecode será interpretado y
ejecutado en la Máquina Virtual Java (MVJ o JVM – Java Virtual Machine),
evita tener que realizar un programa diferente para cada CPU o plataforma.
Trabajo en red: existen librerías que permiten el acceso y la interacción con
protocolos como http, ftp, etc., facilitando al programador las tareas del
tratamiento de la información a través de redes vía TCP/IP.
7.5.- Seguridad y simplicidad.
Seguridad: los posibles accesos a zonas de memoria “sensibles” se han
eliminado en Java.
o El código Java es comprobado y verificado para evitar que
determinadas secciones del código produzcan efectos no deseados.
o Java no permite la apertura de ficheros en la máquina local, tampoco
permite ejecutar ninguna aplicación nativa de una plataforma e impide
que se utilicen otros ordenadores como puente.
Simplicidad:
o Posee una curva de aprendizaje muy rápida. han eliminado: la
aritmética de punteros, los registros, la definición de tipos, la gestión de
memoria, etc.
o Recolector de Basura (Garbage collector). Permite al programador
liberarse de la gestión de la memoria y hace que ciertos bloques de
memoria puedan reaprovecharse. Fragmentacion de memoria.
Uni 1. Programación
7.6.- Java y los Bytecodes.
Bytecode: Son un conjunto de instrucciones en lenguaje máquina que no son
específicas a ningún procesador o sistema de cómputo. Un intérprete de código de
bytes (bytecodes) para una plataforma específica será quien los ejecute. El interprete
se llama Maquina Virtual.
Una vez escrito el código fuente (archivos con extensión .Java), éste es
precompilado generándose los códigos de bytes, Bytecodes o
Java Bytecodes (archivos con extensión .class)
Los archivos de bytecodes serán interpretados directamente por la Maquina
Virtual Java y traducidos a código nativo de la plataforma sobre la que se esté
ejecutando el programa.