Download Lenguajes de programación

Document related concepts

Little man computer wikipedia , lookup

Lisp wikipedia , lookup

Programación funcional wikipedia , lookup

Haxe wikipedia , lookup

Transcript
Un lenguaje de programación es un conjunto de símbolos y reglas sintácticas y
semánticas que definen su estructura y el significado de sus elementos y expresiones. Es
utilizado para controlar el comportamiento físico y lógico de una máquina.
Un lenguaje de programación permite a uno o más programadores especificar de
manera precisa sobre qué datos debe operar una computadora, cómo estos datos
deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada
gama de circunstancias. Todo esto, a través de un lenguaje que intenta estar
relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje
Léxico.
Los primeros lenguajes de programación surgieron de la idea de Charles Babagge, la cual
se le ocurrió a este hombre a mediados del siglo XIX. Era un profesor matemático de la
universidad de Cambridge e inventor inglés, que al principio del siglo XIX predijo muchas
de las teorías en que se basan los actuales ordenadores. Consistía en lo que él
denominaba la maquina analítica, pero que por motivos técnicos no pudo construirse
hasta mediados del siglo XX. Con él colaboro Ada Lovedby, la cual es considerada como
la primera programadora de la historia, pues realizo programas para aquélla supuesta
maquina de Babagge, en tarjetas perforadas. Como la maquina no llego nunca a
construirse, los programas de Ada, lógicamente, tampoco llegaron a ejecutarse, pero si
suponen un punto de partida de la programación, sobre todo si observamos que en
cuanto se empezó a programar, los programadores utilizaron las técnicas diseñadas por
Charles Babagge, y Ada, que consistían entre otras, en la programación mediante
tarjetas perforadas. A pesar de ello, Ada ha permanecido como la primera
programadora de la historia. Se dice por tanto que estos dos genios de antaño, se
adelantaron un siglo a su época, lo cual describe la inteligencia de la que se hallaban
dotados.
En 1823 el gobierno Británico lo apoyo para crear el proyecto de una máquina de
diferencias, un dispositivo mecánico para efectuar sumas repetidas. Pero Babagge se
dedico al proyecto de la máquina analítica, abandonando la máquina de diferencias, que
se pudiera programar con tarjetas perforadas, gracias a la creación de Charles Jacquard
(francés). Este hombre era un fabricante de tejidos y había creado un telar que podía
reproducir automáticamente patrones de tejidos, leyendo la información codificada en
patrones de agujeros perforados en tarjetas de papel rígido. Entonces Babagge intento
crear la máquina que se pudiera programar con tarjetas perforadas para efectuar
cualquier cálculo con una precisión de 20 dígitos. Pero la tecnología de la época no
bastaba para hacer realidad sus ideas. Si bien las ideas de Babagge no llegaron a
materializarse de forma definitiva, su contribución es decisiva, ya que los ordenadores
actuales responden a un esquema análogo al de la máquina analítica.
En su diseño, la máquina constaba de cinco unidades básicas:
Unidad de entrada, para introducir datos e instrucciones.
Memoria, donde se almacenaban datos y resultados intermedios.
Unidad de control, para regular la secuencia de ejecución de las operaciones.
Unidad Aritmético-Lógica, que efectúa las operaciones.
Unidad de salida, encargada de comunicar al exterior los resultados.
Charles Babbage, conocido como el "padre de la informática" no pudo completar en
aquella época la construcción del computador que había soñado, dado que faltaba algo
fundamental: la electrónica. El camino señalado de Babbage, no fue nunca abandonado
y siguiéndolo, se construyeron los primeros computadores.
Cuando surgió el primer ordenador, el famoso ENIAC (Electronic Numerical Integrator
And Calculator), su programación se basaba en componentes físicos, o sea, que se
programaba, cambiando directamente el Hardware de la maquina, exactamente lo que
sé hacia era cambiar cables de sitio para conseguir así la programación de la maquina. La
entrada y salida de datos se realizaba mediante tarjetas perforadas.
Los lenguajes de programación se pueden clasificar atendiendo a varios criterios:
Según el nivel de abstracción.
Según el paradigma de programación que poseen cada uno de ellos.
I.
Según su nivel de abstracción:
1.1 Lenguajes de Máquina
Están escritos en lenguajes directamente legibles por la máquina (computadora), ya que
sus instrucciones son cadenas binarias (0 y 1). Da la posibilidad de cargar (transferir un
programa a la memoria) sin necesidad de traducción posterior lo que supone una
velocidad de ejecución superior, solo que con poca fiabilidad y dificultad de verificar y
poner a punto los programas.
Ejemplos: lenguaje máquina:
00000
00001
00010
00011
00100
00101 00000000 HALT
1001110
10110100
10011110
11010100
10111111
LOAD
STOR
LOAD
ADD
STOR
11110
10100
11110
10100
11111
1.2Lenguajes de bajo nivel (ensamblador):
Los lenguajes de bajo nivel son lenguajes de programación que se acercan al
funcionamiento de una computadora. El lenguaje de más bajo nivel por excelencia es el
código maquina. A éste le sigue el lenguaje ensamblador, ya que al programar en
ensamblador se trabajan con los registros de memoria de la computadora de forma
directa.
Ejemplo: Un ejemplo de este tipo de lenguajes es el ensamblador. En él, las
instrucciones se escriben en códigos alfabéticos conocidos como mnemotécnicos
(generalmente, abreviaturas de palabras inglesas).
Las palabras mnemotécnicas son mucho más fáciles de recordar que las secuencias de
ceros y unos. Una instrucción típica de ensamblador puede ser: ADD x, y, z Esta
instrucción significaría que se deben sumar los números almacenados en las direcciones
de memoria.
1.3 Lenguajes de medio nivel:
Es un lenguaje de programación informática como el lenguaje C, que se encuentran
entre los lenguajes de alto nivel y los lenguajes de bajo nivel
Suelen ser clasificados muchas veces de alto nivel, pero permiten ciertos manejos de
bajo nivel. Son precisos para ciertas aplicaciones como la creación de sistemas
operativos, ya que permiten un manejo abstracto (independiente de la máquina, a
diferencia del ensamblador), pero sin perder mucho del poder y eficiencia que tienen
los lenguajes de bajo nivel.
1.4 Lenguajes de alto nivel:
Los lenguajes de alto nivel son normalmente fáciles de aprender porque están formados
por elementos de lenguajes naturales, como el inglés. En BASIC, uno de los lenguajes de
alto nivel más conocidos, los comandos como "IF CONTADOR = 10 THEN STOP" pueden
utilizarse para pedir a la computadora que pare si el CONTADOR es igual a 10.
Esta forma de trabajar puede dar la sensación de que las computadoras parecen
comprender un lenguaje natural; en realidad lo hacen de una forma rígida y sistemática,
sin que haya cabida, por ejemplo, para ambigüedades o dobles sentidos
II.
Según el paradigma de programación
Un paradigma de programación representa un enfoque particular o filosofía para la
construcción del software. No es mejor uno que otro, sino que cada uno tiene ventajas y
desventajas. Dependiendo de la situación un paradigma resulta más apropiado que otro.
Atendiendo al paradigma de programación, se pueden clasificar los lenguajes en:
El paradigma imperativo o por procedimiento es considerado el
mas comun y esta representado por el lenguaje C o el lenguaje
BASIC
El paradigma Funcional está representado por la familia de
lenguajes LISP ( en particular SCHEME) ML HASKELL
El paradihma Logico. Ejemplo PROLOG
El paradigma orientado a Objetos. Un lenguaje completamente
orientado a Objetos es SMALLTALK.
Actualmente el paradigma de programación más usado debido a múltiples ventajas
respecto a sus anteriores, es la programación orientados a objetos.
2.1 Lenguajes imperativos:
Son los lenguajes que dan instrucciones a la computadora, es decir, órdenes.
2.2 Lenguajes Funcionales:
Este paradigma concibe a la computación como la evaluación de funciones matemáticas
y evita declarar y cambiar datos.
En otras palabras, hace hincapié en la aplicación de las funciones y composición entre
ellas, más que en los cambios de estados y la ejecución secuencial de comandos (como
lo hace el paradigma procedimental). Permite resolver ciertos problemas de forma
elegante y los lenguajes puramente funcionales evitan los efectos secundarios comunes
en otro tipo de programaciones.
2.3 Lenguajes Lógicos
La computación lógica direcciona métodos de procesamiento basados en el
razonamiento formal. Los objetos de tales razonamientos son "hechos" o reglas "if
then". Para computar lógicamente se utiliza un conjunto de tales estamentos para
calcular la verdad o falsedad de ese conjunto de estamentos. Un estamento es un hecho
si sus tuplas verifican una serie de operaciones.
Un hecho es una expresión en la que algún objeto o conjunto de objetos satisface una
relación específica. Una tupla es una lista inmutable. Una tupla no puede modificarse de
ningún modo después de su creación.
Un regla if then es un estamento que informa acerca de conjuntos de tuplas o
estamentos relacionados que pueden predecir si otras tuplas satisfacerán otras
relaciones.
2.4 Lenguajes orientados a objetos:
La Programación Orientados a Objetos (POO u OOP según sus siglas en inglés) es un
paradigma de programación que usa objetos y sus interacciones para diseñar
aplicaciones y programas de computadora. Está basado en varias técnicas, incluyendo
herencia, modularidad, polimorfismo y encapsulamiento.
La implementación de un lenguaje es la que provee una manera de que se ejecute un
programa para una determinada combinación de software y hardware. Existen
básicamente dos maneras de implementar un lenguaje: Compilación e interpretación.
Compilación es la traducción a un código que pueda utilizar la máquina. Los programas
traductores que pueden realizar esta operación se llaman Compiladores. Éstos, como los
programas ensambladores avanzados, pueden generar muchas líneas de código de
máquina por cada proposición del programa fuente.
Se puede también utilizar una alternativa diferente de los compiladores para traducir
lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma
permanente el código objeto que se produce durante la compilación para utilizarlo en
una ejecución futura, el programador sólo carga el programa fuente en la computadora
junto con los datos que se van a procesar.
Programación
Es un proceso por el cual se escribe (en un Lenguaje de Programación), se prueba, se
depura y se mantiene el código fuente de un programa informático. Dentro de la
informática, los programas son los elementos que forman el software, que es el
conjunto de las instrucciones que ejecuta el hardware de una computadora para realizar
una tarea determinada. Por lo tanto, la programación es una de las principales áreas
dentro de la informática.
Tipos de Programación
La programación estructurada (en adelante simplemente PE), es un estilo de
programación con el cual el programador elabora programas, cuya estructura es la más
clara posible, mediante el uso de tres estructuras básicas de control lógico, a saber:
Secuencia.
Selección.
Iteración.
1.- SECUENCIA
Indica que las instrucciones de un programa se ejecutan una después de la otra, en el
mismo orden en el cual aparecen en el programa. Se representa gráficamente como una
caja después de otra, ambas con una sola entrada y una única salida.
2.- SELECCIÓN
También conocida como la estructura SI-CIERTO-FALSO, plantea la selección entre dos
alternativas con base en el resultado de la evaluación de una condición o predicado;
equivale a la instrucción IF de todos los lenguajes de programación y se representa
gráficamente de la siguiente manera:
3.- ITERACIÓN
También llamada la estructura HACER-MIENTRAS-QUE, corresponde a la ejecución
repetida de una instrucción mientras que se cumple una determinada condición. El
diagrama de flujo para esta estructura es el siguiente :
Programación Modular
Costa de varias secciones divididas de forma que interactúan de forma llamadas
procedimientos, que integran el programa en su totalidad. El programa principal
coordina la llamada a los módulos secundarios y pasa los datos necesarios en formas de
parámetros. A su vez cada modulo puede contener sus propios datos.
Programación Orientada a Objetos (POO)
Se trata de una técnica que aumenta considerablemente la velocidad de desarrollo de
los programas gracias a la reutilización de los objetos. El elemento principal orientado a
objeto es el objeto.
El objeto es un conjunto complejo de datos y programas que poseen estructura u
forman parte de una organización.
Programación concurrente
Este tipo de programación se utiliza cuando tenemos que realizar varias acciones a la
vez. Se suele utilizar para controlar los accesos de usuarios y programas a un recurso de
forma simultánea. Se trata de una programación más lenta y laboriosa, obteniendo unos
resultados lentos en las acciones.
Programación funcional
Se caracteriza principalmente por permitir declarar y llamar a funciones dentro de otras
funciones.
Programación lógica
Se suele utilizar en la inteligencia artificial y pequeños programas infantiles. Se trata de
una programación basada en el cálculo de predicados (una teoría matemática que
permite lograr que un ordenador basándose en hecho y reglas lógicas, pueda dar
soluciones inteligentes).
Los principales pasos que se deben seguir al elaborar un programa son:
Requer
imient
o
Revision
y Mejora
Especific
acion del
Program
a
Diseño
del
Codigo
Manteni
miento
Codificac
ion
Release
Dubug
ging
Pruebas
1. Requerimientos: Los programas empiezan cuando alguien tiene la idea de hacer
algo y comienza a implementarlo. El documento con los requerimientos del
sistema describen, en términos generales, qué es lo que se quiere hacer.
2. Especificación del programa: La especificación es una breve descripción de qué
es lo que el programa hace.
En un principio, una especificación preliminar describe qué es lo que va a hacer
el programa. Después, mientras el programa se va refinando, de la misma
manera se va refinando la especificación del mismo.
3. Diseño del código: El programador tiene que llevar a cabo un diseño del código a
implementar. En él se deben incluir los algoritmos utilizados, las definiciones de
los módulos a utilizar, archivos utilizados y estructuras de datos usadas en el
programa. Es aquí en donde se desarrolla el pseudocódigo del programa. El uso
de diagramas de flujo también nos permitirá obtener una abstracción sobre el
problema, tanto en entradas, salidas, flujo y procesamiento de la información.
4. Codificación: El siguiente paso es empezar a escribir el programa. Este primer
paso involucra primero escribir un prototipo y después irlo puliendo para crear el
programa final.
5. Pruebas: El programador debe diseñar un plan de pruebas para posteriormente
utilizarlo para probar su programa. Cuando es posible, debe existir un equipo de
pruebas, diferente del equipo de programadores.
6. Debugging: Desafortunadamente, pocos son los programas que funcionan a la
primera. Los programas deben ser corregidos y probados nuevamente.
7. Release: El programa es empaquetado, documentado y mandado al mundo a ser
usado.
8. Mantenimiento: Los programas rara vez, o nunca son perfectos.
9. Revisión y mejora: Después de que un programa ha sido usado, los usuarios
querrán realizarle algún cambio al funcionamiento del programa, tal como
alguna nueva funcionalidad o un cambio en algún algoritmo. En este punto se
crea una nueva especificación y el proceso comienza de nuevo.
Fases de la Programación
Las Fases de la Programación son:
 Definición del problema
 Análisis del problema
 Diseño de la solución
 Codificación
 Prueba y depuración (puesta a punto o testing)
 Documentación
 Implementación (producción)
 Mantenimiento
1. Definición del Problema
Consiste en la obtención sin ambigüedades de una visión general y clara del problema.
Ayuda a identificar los elementos claves del problema y los de la futura solución, así
como fijar los límites de los mismos basados en su planteamiento textual sobre el papel.
Un problema mal planteado, incompleto o mal comprendido es un mal inicio para la
programación.
2. Análisis del Problema
Es la comprensión a fondo del problema y sus detalles y es un requisito para lograr una
solución eficaz. Es precisamente en esta fase donde se definen formal y correctamente
la Entrada que recibirá el programa (datos o materia prima), la Salida que producirá
(información o resultados) y el Proceso necesario para su solución (el método para
convertir los datos de entrada en información de salida). Cada uno de estos aspectos
coincide respectivamente con las preguntas planteadas en la fase de Definición del
Problema. A este enfoque se le conoce comúnmente como E-P-S (Entrada-ProcesoSalida).
3. Diseño de la solución
En esta fase se diseña la lógica de la solución a usar, o sea, cómo hará el programa la
tarea que se desea automatizar usando los datos de entrada para generar los datos de
salida, enfatizándose los diseños limpios, sencillos y claros. Pueden plantearse
diferentes alternativas de solución al problema y elegir la más adecuada, la que
produzca los resultados esperados en el menor tiempo y al menor costo. El proceso de
diseño se realiza en dos pasos:
3.1 Elaboración del Algoritmo
Un algoritmo es una secuencia lógica y cronológica de pasos encaminados a resolver un
problema. Las acciones básicas que puede llevar a cabo un algoritmo son: pedir datos,
desplegar datos, evaluar condiciones y ejecutar operaciones.
Los programas se estructuran a partir de los algoritmos, los cuales se pueden escribir
utilizando la técnica convencional del pseudocódigo (mezcla de lenguaje común,
términos técnicos de computación, símbolos y palabras reservadas de algún lenguaje de
programación) y los diagramas de flujo que son la representación gráfica de un
algoritmo, plasmados en papel para su estudio.
En el caso de emplear diagramas de flujo pueden emplearse herramientas de software
tales como el DFDv1.0 Si se opta por el pseudocódigo, se recomienda escribirlos a doble
interlínea para efecto de facilitar modificaciones o adición de acciones no consideradas
y dotarlos de las siguientes características.
3.1.1 Características de los Algoritmos




Un algoritmo debe tener un punto de inicio o partida.
Debe ser preciso e indicar el orden de realización de cada paso.
Debe estar bien definido. Si se sigue un algoritmo dos veces, se debe obtener el
mismo resultado cada vez.
Debe ser finito (tener un número finito de pasos). Si se sigue un algoritmo, se
debe terminar en algún momento.
La definición de un algoritmo debe describir con claridad las tres partes fundamentales
del problema: Entrada, Proceso y Salida encontrados en las fases de Definición y Análisis
del problema.
3.2 Realización de Pruebas de Escritorio
O sea, comprobaciones a mano del algoritmo planteado (en pseudocódigo o en
diagrama de flujo) con datos y resultados de prueba conocidos, papel, lápiz y
calculadora (si es necesaria) para simular su ejecución y evaluar su correcta operación. Si
la lógica es correcta, los resultados serán satisfactorios. Si no, el algoritmo deberá
modificarse y volverlo a probar hasta que esté correcto. Algunos programas no son
fáciles de probar a mano por su complejidad y/o tamaño, pero en tu ayuda está la
verificación durante la programación inicial (la creación del algoritmo), el trace and
debugging (rastreo y detección de errores) automático que incorporan los lenguajes de
compiladores de los lenguajes de programación y otras técnicas. Se hace notar que éste
acápite depende de los anteriores. Si la definición y el análisis son errados, el diseño del
programa también lo será, por lo que se tendrá que rehacer, retrocediendo quizá hasta
la fase de Definición del Problema.
4. Codificación
En este paso se traduce el algoritmo ya estructurado, verificado y comprobado a mano,
al lenguaje de programación que vaya a utilizarse.
Sólo se convierten las acciones del algoritmo en instrucciones de computadora usando
la sintaxis de un lenguaje particular, pero requiere de conocimientos del lenguaje y de
sumo cuidado en la colocación de las instrucciones, las que deben apegarse y seguir
fielmente a la lógica del algoritmo y la semántica y sintaxis del lenguaje.
La digitación, el acto de teclear el algoritmo codificado, se lleva a cabo para almacenar el
programa en la memoria de la computadora (virtual o física) y pueda ser aceptado por
esta. Con frecuencia los programadores realizan la codificación y la digitación al mismo
tiempo a fin de ahorrar tiempo, pero esto puede conducir a errores debido a la pérdida
de concentración que implica el uso de un editor.
La compilación, o corrección de los errores sintácticos y semánticos del código, es la
eliminación de los errores "gramaticales" según las reglas de construcción de
instrucciones particulares del propio lenguaje (la sintaxis). Puede hacerse a medida que
se traduce, pero es mejor al final para no perder la secuencia de la codificación. Al
terminar debe tenerse el código libre de los errores antes mencionados.
4. Prueba y Depuración (Puesta a Punto o Testing)
Una vez compilado el programa, este es sometido a pruebas a fin de determinar si
resuelve o no el problema planteado en forma satisfactoria. El programa codificado y
compilado no garantiza que funcione correctamente. Debe depurarse (librarse de
errores de lógica o de ejecución) realizando corridas de prueba continuas con datos y
respuestas conocidas
Las pruebas que se aplican al programa son de diversa índole y generalmente dependen
del tipo de problema que se está resolviendo. Comúnmente se inicia la prueba de un
programa introduciendo datos válidos, inválidos e incongruentes y observando cómo
reacciona en cada ocasión.
Los resultados obtenidos en las pruebas pueden ser cualquiera de los siguientes:
a. La lógica del programa está bien, pero hay errores sencillos, los cuales los
corregimos eliminando o modificando algunas instrucciones o incluyendo nuevas.
b. Hay errores ocasionados por fallas en la lógica, lo que nos obliga a regresar a las
fases de Diseño y Codificación para revisión y modificación del diagrama.
c. Hay errores muy graves y lo más aconsejable es que regresemos para analizar
nuevamente el problema, y repetir todo el proceso.
d. No hay errores y los resultados son los esperados. En este caso guardamos el
programa permanentemente en un medio de almacenamiento.
5. Documentación
Es la fase más ignorada por la mayoría de los programadores noveles, por razones de
tiempo, costos o simple pereza. Pero no documentar los programas es un mal hábito en
programación y un gran error. Será muy difícil a los usuarios entender un programa si no
cuentan con un manual de operaciones (el Manual de Usuario).
También para los programadores que necesiten darle mantenimiento o hacerle
modificaciones si no existe ninguna documentación acerca de sus fases de desarrollo.
Incluso será difícil de entender para el mismo autor, algún tiempo después.
La documentación es la guía o comunicación escrita en sus variadas formas, ya sea en
enunciados, procedimientos, dibujos o diagramas y sirve para ayudar a comprender o
usar un programa o para facilitar futuras modificaciones (mantenimiento). Recoge todos
los elementos encontrados y material creado en las diferentes fases del desarrollo,
además de las normas de instalación o las recomendaciones para la ejecución del
programa.
La documentación se divide en tres partes:



Documentación Interna
Documentación Externa
Manual del Usuario
Documentación Interna: Son los comentarios que se añaden al código fuente para
clarificarlo.
Documentación Externa: Es todo el material creado y empleado en las diferentes fases
del desarrollo del programa. Incluye:







Descripción del Problema.
Narrativo con la descripción de la solución.
Autor(s).
Algoritmo (diagrama de flujo y/o pseudocódigo).
Código Fuente (programa).
Relación de los elementos utilizados en el programa, cada uno con su respectiva
función.
Limitaciones del programa.
Manual del Usuario: Describe paso a paso la manera cómo funciona el programa, con el
fin de que los usuarios pueda operarlo correctamente y obtener los resultados
deseados.
7. Implementación (Producción)
El programa ya probado, revisado y mejorado se considera terminado y puede utilizarse
con un alto grado de confianza para resolver los problemas que dieron origen a su
creación. Si se está automatizando alguna tarea manual, ésta última se desecha para
emplear solamente la programa.
8. Mantenimiento
Es posible que el programa deba revisarse cada cierto tiempo para ajustes. Estos
cambios pueden ser por la dinámica del problema, por la naturaleza del código, las
exigencias del tiempo o las modernas necesidades que surgen frecuentemente, por lo
que se considera que ningún programa es estático. Los programas siempre son
susceptibles de mejoras y de mantenimiento. Por tales razones, es común que se tenga
que retornar a una de las fases iníciales de desarrollo para corregir o añadir
funcionalidades, repitiendo el proceso en cada fase subsiguiente para introducir los
cambios pertinentes y lograr que el programa funcione correctamente con los cambios
realizados. Se enfatiza el hecho de que cualquier actualización o cambio en el programa
deberá reflejarse en su documentación para que ésta mantenga su vigencia.
Escribir un programa es establecer el comportamiento de una máquina mediante una
serie de algoritmos que definirán su funcionamiento. En el estado actual de la ciencia,
este algoritmo se plasma por escrito utilizando un lenguaje artificial comprensible por el
humano-programador. Generalmente estas instrucciones, que aquí se denominan
código fuente, vienen acompañadas de algunos datos en forma de texto o imágenes,
contenidas en uno o varios ficheros denominados ficheros de recursos.
Sin embargo, las instrucciones y recursos solo pueden ser
utilizadas por la máquina después de un proceso de traducción
que es realizado por la propia máquina (puede ser distinta de
la que ejecuta el programa).
¡Un Programa nunca
está terminado del todo!
El proceso exige que el código fuente sea transformado en una nueva secuencia de
instrucciones según un nuevo sistema de codificación (el lenguaje máquina), y que los
recursos adopten una disposición particular.
Este conjunto de instrucciones y datos, que constituyen el denominado ejecutable,
corresponden a acciones concretas y datos, que pueden ser entendidas, ejecutadas y
utilizados por la máquina.
En general este comportamiento pretende modelar o mimetizar el comportamiento de
una entidad del mundo real, o de una abstracción que hemos imaginado; y es de tipo
genérico. Se pretende que la máquina se comporte como una función que acepta un
conjunto de condiciones de entrada y devuelve como salida un comportamiento
concreto y predecible para cada combinación de las condiciones de entrada.
Existen básicamente dos tipos de software: El software de sistema y el de aplicación. El
software de aplicación es aquel capaz de resolver un problema requerido por el usuario.
Existen infinidad de actividades donde se deben resolver problemas en forma cotidiana,
allí está el trabajo del software de aplicación, resolviendo a medida.
Se define como Proceso al conjunto ordenado de pasos a seguir para llegar a la solución
de un problema u obtención de un producto, en este caso particular, para lograr la
obtención de un producto software que resuelva un problema.
El proceso de creación de software puede llegar a ser muy complejo, dependiendo de su
porte, características y criticidad del mismo. Considerando los de gran porte, es
necesario realizar tantas y tan complejas tareas, tanto técnicas, de gerenciamiento,
fuerte gestión y análisis diversos que toda una ingeniería hace falta para su estudio y
realización: es la Ingeniería de Software.
En tanto que en los de mediano porte, pequeños equipos de trabajo pueden realizar la
tarea. Aunque, siempre en casos de mediano y gran porte (y a veces también en algunos
de pequeño porte, según su complejidad), se deben seguir ciertas etapas que son
necesarias para la construcción del software. Tales etapas, si bien deben existir, son
flexibles en su forma de aplicación, de acuerdo a la metodología o Proceso de Desarrollo
escogido y utilizado por el equipo de desarrollo o por el analista-programador solitario.
Los "procesos de desarrollo de software" poseen reglas preestablecidas, y deben ser
aplicados en la creación del software de mediano y gran porte, ya que en caso contrario
lo más seguro es que el proyecto o no logre concluir o termine sin cumplir los objetivos
previstos, y con variedad de fallos inaceptables. Entre tales "procesos" los hay ágiles o
livianos, pesados y lentos y variantes intermedias; y normalmente se aplican de acuerdo
al tipo, porte y tipología del software a desarrollar, a criterio del líder del equipo de
desarrollo. Algunos de esos procesos son Extreme Programming (XP), Rational Unified
Process (RUP), Feature Driven Development.
Cualquiera sea el "proceso" utilizado y aplicado al desarrollo del software (RUP, FDD), y
casi independientemente de él, siempre se debe aplicar un "Modelo de Ciclo de Vida".
Se estima que, del total de proyectos software grandes emprendidos, un 28% fracasan,
un 46% caen en severas modificaciones que lo retrasan y un 26% son totalmente
exitosos. Cuando un proyecto fracasa, rara vez es debido a fallas técnicas, la principal
causa de fallos y fracasos es la falta de aplicación de una buena metodología o proceso
de desarrollo. Entre otras, una fuerte tendencia, desde hace pocas décadas, es mejorar
las metodologías o procesos de desarrollo, o crear nuevas y concientizar a los
profesionales en su utilización adecuada.
Normalmente los especialistas en el estudio y desarrollo de estas áreas (metodologías) y
afines son los Ingenieros en Software, es su orientación. Los especialistas en cualquier
otra área de desarrollo informático (analista, programador, Lic. en Informática,
Ingeniero en Informática, Ingeniero de Sistemas, etc.) normalmente aplican sus
conocimientos especializados pero utilizando modelos, paradigmas y procesos ya
elaborados.
Es común para el desarrollo de software de mediano porte que los equipos humanos
involucrados apliquen sus propias metodologías, normalmente un híbrido de los
procesos anteriores y a veces con criterios propios.
El proceso de desarrollo puede involucrar numerosas y variadas tareas, desde lo
administrativo, pasando por lo técnico y hasta la gestión y el gerenciamiento. Pero casi
rigurosamente siempre se cumplen ciertas etapas mínimas; las que se pueden resumir
como sigue:






Captura, Especificación y Análisis de requisitos (ERS)
Diseño
Codificación
Pruebas (unitarias y de integración)
Instalación y paso a Producción
Mantenimiento
Desarrollo y diseño en el Proceso de Creación de un Programa
El análisis del problema: Luego del requerimiento del programa, se debe
comprender en forma cierta la problemática que se debe resolver, en este
aspecto no puede haber ambigüedades o inconsistencias. Se deben establecer
las salidas necesarias del programa y las entradas que serán requeridas al
usuario, para tal fin. La comprensión de esta etapa evita problemas serios a
futuro.
Desarrollo de la solución: Aquí se determinan los pasos que tendrá nuestro
algoritmo. Los algoritmos se van refinando a lo largo del proyecto hasta que sean
completos, robustos y confiables.
Escribiendo el código de la aplicación: En esta etapa el desarrollo planteado en
los pasos anteriores es llevado a código del lenguaje C++.
Hay algunos patrones que se deben considerar en la creación del programa ya
que son determinantes de la forma de ejecución del mismo:
 Secuencia: Definen el orden en que se ejecutarán las instrucciones de un
programa.
 Selección: Permite elegir entre diferentes operaciones, dependiendo del
resultado de alguna operación.
 Iteración: Permite que la misma operación se repita, establecida en el valor
de una condición.
 Invocación: Consiste en la solicitud de un conjunto de instrucciones
(habitualmente separadas), cuando se necesiten.
Prueba y corrección del programa
Esta etapa permite comprobar si el funcionamiento del programa es acorde a lo
previsto. Un conjunto de datos de prueba deben permitir la verificación de la salida.
Las últimas etapas
Documentación: Estas etapas se ocupan de documentar el programa, esto es
muy importante, ya que mucho esfuerzo se suele perder por la falta de registros.
Se debe, por lo menos, describir el programa, el desarrollo y cambios en el
algoritmo, los resultados de las pruebas efectuadas y al desarrollo de manuales
para el usuario, si fuese necesario.
Mantenimiento: Aquí se trabaja en forma permanente en la optimización del
programa, el agregado de nuevas funciones, ya sea, por nuevas versiones o
solicitud expresa del cliente. Se deben mantener copias de seguridad.
Modelos de proceso o ciclo de vida
El modelo de proceso o modelo de ciclo de vida utilizado para el desarrollo define el
orden para las tareas o actividades involucradas también definen la coordinación entre
ellas, enlace y realimentación entre las mencionadas etapas. Entre los más conocidos se
puede mencionar: modelo en cascada o secuencial, modelo espiral, modelo iterativo
incremental. De los antedichos hay a su vez algunas variantes o alternativas, más o
menos atractivas según sea la aplicación requerida y sus requisitos.
Modelo cascada
Es también llamado "modelo clásico", "modelo tradicional" o "modelo lineal secuencial".
El modelo en cascada puro difícilmente se utilice tal cual, pues esto implicaría un previo
y absoluto conocimiento de los requisitos, la no volatilidad de los mismos (o rigidez) y
etapas subsiguientes libres de errores; ello sólo podría ser aplicable a escasos y
pequeños desarrollos de sistemas. En estas circunstancias, el paso de una etapa a otra
de las mencionadas sería sin retorno.
Modelo Cascada
Algún cambio durante la ejecución de una cualquiera de las etapas en este modelo
secuencial implicaría reiniciar desde el principio todo el ciclo completo.
El modelo lineal o en Cascada es el paradigma más antiguo y extensamente utilizado, sin
embargo las críticas a él han puesto en duda su eficacia.
Desventajas del modelo cascada:



Los cambios introducidos durante el desarrollo pueden confundir al equipo
profesional en las etapas tempranas del proyecto. Si los cambios se producen en
etapa madura (codificación o prueba) pueden ser catastróficos para un proyecto
grande.
No es frecuente que el cliente o usuario final explicite clara y completamente los
requisitos (etapa de inicio); y el modelo lineal lo requiere. La incertidumbre
natural en los comienzos es luego difícil de acomodar.
El cliente debe tener paciencia ya que el software no estará disponible hasta
muy avanzado el proyecto. Un error detectado por el cliente (en fase de
operación) puede ser desastroso, implicando reinicio del proyecto, con altos
costos.
Modelos evolutivos
El software evoluciona con el tiempo. Los requisitos del usuario y del producto suelen
cambiar conforme se desarrolla el mismo. Las fechas de mercado y la competencia
hacen que no sea posible esperar a poner en el mercado un producto absolutamente
completo, por lo que se debe introducir una versión funcional limitada de alguna forma
para aliviar las presiones competitivas.
Los evolutivos son modelos iterativos, permiten desarrollar versiones cada vez más
completas y complejas, hasta llegar al objetivo final deseado; incluso evolucionar más
allá, durante la fase de operación.
Los modelos “Iterativo Incremental” y “Espiral” son dos de los más conocidos y
utilizados del tipo evolutivo.
Modelo iterativo incremental
En términos generales, podemos distinguir los pasos generales que sigue el proceso de
desarrollo de un producto software. En el modelo de ciclo de vida seleccionado, se
identifican claramente dichos pasos. La Descripción del Sistema es esencial para
especificar y confeccionar los distintos incrementos hasta llegar al Producto global y
final. Las actividades concurrentes (Especificación, Desarrollo y Validación) sintetizan el
desarrollo pormenorizado de los incrementos, que se hará posteriormente.
Modelo espiral
El modelo espiral fue propuesto inicialmente por Barry Boehm. Es un modelo evolutivo
que conjuga la naturaleza iterativa del modelo MCP con los aspectos controlados y
sistemáticos del Modelo Cascada. Proporciona potencial para desarrollo rápido de
versiones incrementales. En el modelo Espiral el software se construye en una serie de
versiones incrementales. En las primeras iteraciones la versión incremental podría ser
un modelo en papel o bien un prototipo. En las últimas iteraciones se producen
versiones cada vez más completas del sistema diseñado.
El modelo se divide en un número de Actividades de marco de trabajo, llamadas
"regiones de tareas". En general existen entre tres y seis regiones de tareas (hay
variantes del modelo). En la figura 6 se muestra el esquema de un Modelo Espiral con 6
regiones. En este caso se explica una variante del modelo original de Boehm, expuesto
en su tratado de 1988; en 1998 expuso un tratado más reciente.
Las regiones definidas en el modelo de la figura son:






Región 1 - Tareas requeridas para establecer la comunicación entre el cliente y el
desarrollador.
Región 2 - Tareas inherentes a la definición de los recursos, tiempo y otra
información relacionada con el proyecto.
Región 3 - Tareas necesarias para evaluar los riesgos técnicos y de gestión del
proyecto.
Región 4 - Tareas para construir una o más representaciones de la aplicación
software.
Región 5 - Tareas para construir la aplicación, instalarla, probarla y proporcionar
soporte al usuario o cliente (Ej. documentación y práctica).
Región 6 - Tareas para obtener la reacción del cliente, según la evaluación de lo
creado e instalado en los ciclos anteriores.
Las actividades enunciadas para el marco de trabajo son generales y se aplican a
cualquier proyecto, grande, mediano o pequeño, complejo o no. Las regiones que
definen esas actividades comprenden un "conjunto de tareas" del trabajo: ese conjunto
sí se debe adaptar a las características del proyecto en particular a emprender. Nótese
que lo listado en los ítems de 1 a 6 son conjuntos de tareas, algunas de las ellas
normalmente dependen del proyecto o desarrollo en sí.
Lenguajes de programación
Cuando se programa, se indica una serie de instrucciones para que la computadora las
ejecute. Para asegurarse que la computadora entienda las instrucciones, se han
establecido lenguajes bien definidos para especificar y poder generar la comunicación
con al computadora. Estos lenguajes tienen características similares a los lenguajes
comunes que utilizan las personas para comunicarse unas con otras, pues cuentan con
reglas y estructuras que deben seguirse.
En computación, un lenguaje de
programación es cualquier lenguaje
artificial, el cual, se utiliza para definir
adecuadamente una secuencia de
instrucciones
que
puedan
ser
interpretadas y ejecutadas en una
computadora. Se asume que las instrucciones así escritas son traducidas luego a un
código que la máquina pueda comprender. El proceso de traducción es realizado
normalmente por la computadora, usando un programa especializado para tal fin.
Los lenguajes de programación intentan conservar una similitud con el lenguaje
humano, con la finalidad de que sean más naturales a quienes los usan. Establecen un
conjunto de reglas sintácticas y semánticas, las cuales rigen la estructura del programa
de computación que se escribe o edita. De esta forma, permiten a los programadores o
desarrolladores, poder especificar de forma precisa los datos sobre los que se va a
actuar, su almacenamiento, transmisión y demás acciones a realizar bajo las distintas
circunstancias consideradas.
Uso de los lenguajes de programación
Una vez que se identifica una tarea y se conoce el algoritmo para resolverla, el
programador debe codificarlo en una lista de instrucciones, propias de algún lenguaje de
computación. Los programas pueden ser escritos en cualquier lenguaje de la amplia
gama disponibles.
La escogencia del más adecuado, dependerá de factores como la experiencia del
programador con un lenguaje, determinar cuál producirá el programa menos
complicado, la flexibilidad y la compatibilidad del programa como resultado del lenguaje
usado.
A continuación se presenta como ejemplo un sencillo programa fuente, escrito en C, el
cual, es un lenguaje de programación que llegó a ser muy popular, y justo al lado se
explica la acción que realizará la computadora en respuesta a los comandos del
programa. El programa tiene como finalidad el cálculo del promedio de una lista de
cinco números.
Instrucciones en Lenguaje C
int datos[ ] = { 25, 88, 20, 75, 62 };
int nDatos = 5;
int promedio ()
Acción de la computadora
1.- Define una matriz (datos) de números
enteros y le asigna los valores 25, 88, 20, 75, 62.
2.- Define la variable (nDatos) de tipo entero y le
asigna el valor 5.
3.- Define la función (promedio) que devuelve
un número entero.
{
int suma;
4.- Define la variable (suma) de tipo entero.
int prom;
5.- Define la variable (prom) de tipo entero.
int cont;
6.- Define la variable (cont) de tipo entero.
suma = 0;
7.- Asigna a suma el valor 0.
for
(cont=0;
cont<nDatos; 8.- Para cada elemento de la matriz datos, añade
cont++)
su valor a la variable suma.
{
suma += datos [cont];
}
9.- Asigna a prom el resultado de dividir la
prom=suma/nDatos;
variable suma por la variable nDatos.
10.- Devuelve como resultado de la función el
return (prom);
contenido de la variable prom.
}
Clasificación de los lenguajes de programación
Niveles y Generaciones
En computación se suele hablar de niveles y generaciones de los lenguajes de
programación. Respecto al nivel, se clasifican en lenguajes de bajo y alto nivel.
Los lenguajes de bajo nivel, son aquellos que se asemejan al lenguaje empleado por la
computadora, mientras que los lenguajes de alto nivel, son aquellos que se asemejan al
lenguaje humano.
Niveles de los lenguajes de programación
Los lenguajes de alto nivel son resultado de una evolución, desde los lenguajes de bajo
nivel. La computadora sólo es capaz de comprender su lenguaje máquina. Pero para las
personas no es fácil entender y manejar este código máquina de combinaciones
binarias. Las investigaciones dieron un primer paso que llevó a la evolución desde las
hileras de números binarios del código máquina, a un lenguaje ensamblador, que las
representaba como una serie de comandos más entendibles. Los lenguajes de nivel
superior están orientados más hacia lo que se quiere realizar, que en la manera como se
ejecutarán los comandos.
1.- Lenguajes de bajo nivel
A nivel de circuitos, los microprocesadores sólo son capaces de procesar señales
electrónicas binarias. Estas instrucciones binarias que se envían al microprocesador, se
componen de series de unos y ceros, espaciadas en el tiempo de una forma
determinada. Esta secuencia de señales se denomina código máquina. El código
representa normalmente datos y números, así como instrucciones para manipularlos.
Para hacer más fácil el manejo del código máquina, se dio a cada instrucción un
mnemónico, como por ejemplo STORE (Almacenar), ADD (Adicionar) o JUMP (Saltar).
Tal abstracción da como resultado el ensamblador, que es un lenguaje de muy bajo nivel
basado en mnemónicos y que es específico para cada microprocesador.
De esta forma, son llamados lenguajes de bajo nivel, a aquellos constituidos por
instrucciones en lenguaje máquina o próximos a él. Tales lenguajes permiten crear
programas muy rápidos y eficientes, pero en contrapartida, estos lenguajes suelen ser
difíciles de aprender, programar y depurar.
Un hecho importante es, que los programas escritos en un bajo nivel, son prácticamente
específicos para cada procesador, lo que implica, que si se quiere ejecutar el programa
en otra máquina de arquitectura diferente, es necesario volver a escribir el programa
desde el principio.
2.- Lenguajes de alto nivel
Al pensar en una computadora, normalmente se concibe como una máquina que realiza
tareas de procesamiento de texto y cálculos.
Esta es una percepción bastante sintética y esquemática de entender la computadora.
Existe un alto nivel de abstracción entre lo que se pide a la computadora y lo que
realmente comprende. De un modo paralelo se presenta una relación compleja entre
los lenguajes de alto nivel y el código máquina. Un programa escrito en un lenguaje de
alto nivel, debe ser compilado o interpretado para traducir su código, en otro de bajo
nivel (lenguaje máquina). Como ejemplo de lenguajes de alto nivel se tienen Pascal,
BASIC, FORTRAN, COBOL, Java, C y C++.
En los lenguajes de alto nivel las instrucciones son independientes de la máquina, son
más fáciles de aprender porque están formados por elementos de lenguajes naturales
(del inglés). En BASIC, comandos como "IF CONTADOR = 10 THEN STOP" son usados para
ordenar a la computadora, que pare si CONTADOR es igual a 10. Pero aunque las
computadoras parecieran comprender el lenguaje natural, lo hacen de una manera
bastante rígida y sistemática, lo cual podría parecer un poco frustrante e inspira la
búsqueda de lenguajes más cercanos aún al natural.
Compiladores e Intérpretes
Se ha señalado que la computadora sólo puede ejecutar instrucciones en código de
máquina, por lo cual, todos los programas escritos en cualquiera de los lenguajes de
programación deben ser convertidos o traducidos.
Este proceso es llevado a cabo por unos programas especiales, los compiladores y los
intérpretes. Para darse una idea de cómo funcionan, es útil comparar su actuación con
la de un profesional humano encargado de traducir. Un compilador equivale a que el
traductor humano, partiendo de un texto, prepare otro texto nuevo e independiente,
traducido a la otra lengua.
En contraste, un intérprete equivale a que tal profesional traduzca de forma hablada,
cada grupo de palabras o instrucción, a medida que la oye, sin dejarlas por escrito.
La traducción del código fuente, escrito en lenguaje ensamblador, a código máquina (o
código objeto), no representa un proceso complicado y se lleva a cabo mediante un
compilador. De manera similar, la traducción de código fuente de lenguajes de alto nivel
puede ser realizada por un compilador, o también mediante un intérprete. Con base en
el código fuente suministrado, el compilador crea una lista de instrucciones de código
máquina:
Proceso de compilación
El código objeto.
Este código objeto obtenido, es un programa rápido y ya listo para funcionar, pero está
expuesto a poseer errores que pueden provocar fallas en la computadora. En el proceso
de compilación pueden resultar varios archivos de código objeto, los cuales deben
enlazarse para obtener un archivo ejecutable. Esto se logra mediante un programa
llamado enlazador.
Por otra parte, los intérpretes recorren línea a línea el código fuente en el momento de
su ejecución. Esto los hace más lentos, debido a la necesidad de traducir el programa
mientras se ejecuta, pero a cambio, son más flexibles como entornos de programación y
depuración.
Es natural que los lenguajes de programación utilicen sólo uno de estos métodos para
producir el código fuente, sin embargo muchos también disponen de versiones
interpretadas y compiladas. En cuanto a las generaciones de lenguaje, se tienen cinco
diferentes, considerando que cada generación sucesiva se establece con lenguajes más
poderosos y fáciles de usar que los de la generación precedente. Los lenguajes
calificados como de alto nivel, comienzan a partir de la tercera generación.
Generaciones de los lenguajes de programación
El lenguaje máquina consiste de códigos binarios
• Primera generación: Lenguaje máquina Son los lenguajes más básicos. Los lenguajes
de máquina se representan en bytes, los cuales, están compuestos de bits, que son
números binarios o que consisten únicamente de ceros (0) o unos (1). Estos valores
pueden corresponder a que la electricidad esté encendida o apagada en la máquina, o a
la presencia o ausencia de carga magnética en un medio de almacenamiento. A partir de
estos dos estados se forman los esquemas de codificación (como el código ASCII) que
permiten generar letras, números, signos de puntuación y caracteres especiales. Una
computadora sólo es capaz de comprender su lenguaje máquina original, el conjunto de
instrucciones para realizar sus operaciones elementales.
• Segunda generación: lenguajes ensambladores
Están constituidos por nemotécnicos similares a palabras en idioma inglés. En primer
lugar, se
crea un archivo fuente con las instrucciones que se desea que la
computadora ejecute, usando un editor, que es una especie de procesador de palabras.
El código fuente es traducido al lenguaje máquina mediante programas traductores
(compiladores). Los programadores rara vez escriben programas de tamaño relevante
en este tipo de lenguajes, debido a que, a pesar que es mucho más fácil que utilizar
código de máquina, siguen siendo altamente detallados (instrucciones muy básicas).
Sólo se hace en los casos donde la velocidad es clave (como en la
programación de
juegos de video) y para afinar partes importantes de los programas que son escritos en
lenguajes superiores.
• Tercera generación: Lenguajes de alto nivel:
Son llamados de alto nivel porque se asemejan más al lenguaje que utilizan los
humanos al
comunicarse. Fueron desarrollados con la finalidad de facilitar el
proceso de programación.
Cuentan con comandos que se acercan más a las palabras
de uso común en lugar de tener que
usar combinaciones binarias del código
máquina o los comandos básicos del ensamblador.
Esto lenguajes hacen más fácil la lectura, escritura y comprensión de los programas,
aunque de
manera semejante a los lenguajes ensambladores, deben ser convertidos
a lenguaje máquina, para poder ser usados en la computadora.
Los programas de la tercera generación son
capaces
de
soportar
programación
estructurada, es decir, permiten el uso de
estructuras de programación específicas para
ramificaciones y ciclos en el flujo del
programa. Por otro lado, resultan más claros
puesto que usan palabras o comandos
semejantes al lenguaje normal, lo que
permite compartir el desarrollo entre
diferentes programadores. Los programadores que conforman un equipo pueden leer el
código realizado por los demás y comprender la lógica y el flujo de control del programa.
Entre los lenguajes de tercera generación se incluyen:
- FORTRAN (Traductor de Fórmulas: Formula translator), diseñado específicamente para
programas matemáticos y de ingeniería, motivo por el cual, no fue de amplio uso en
computadoras personales. Su uso se dirige especialmente a equipos de cómputo
dedicados a la investigación y la educación.
La versión más actual (1990) fue denominada FORTRAN-90.
- COBOL (Lenguaje simbólico de programación, orientado hacia aplicaciones comerciales
y de gestión: Common Business Oriented Languaje) desarrollado en 1960, con el fin de
solucionar las incompatibilidades de los fabricantes de computadoras. Ganó amplia
aceptación como lenguaje estandarizado llegándose a utilizar ampliamente en los
negocios, pero perdió seguidores en la pasada década. Motivado al problema del año
2000 fueron requeridos programadores
especializados en este lenguaje para
reprogramar las millones de líneas de código escritas en COBOL para que tales
programas continuasen funcionando.
- BASIC (Código de instrucción simbólica universal para principiantes: Begginners
Allpurpose Symbolic Instruction Code) comienza como una herramienta para enseñar
sobre programación a estudiantes. Fue desarrollado por Jhon Kemeny y Thomas Kurtz
en 1964. Por su simplicidad se volvió ampliamente popular y usado en educación y
entre los programadores aficionados, pero no ha llegado a ser un lenguaje viable para
aplicaciones comerciales. Esto último se debe a que no posee un amplio repertorio de
herramientas como el que ofrecen otros lenguajes.
Además, sus compiladores no producen archivos ejecutables tan compactos, rápidos y
eficientes como los que producen otros lenguajes.
- PASCAL, nombrado en honor del inventor francés Blas Pascal, es introducido por
Niklaus Wirth en 1971. El Pascal, buscaba superar las limitaciones de los otros
lenguajes de programación y demostrar la manera adecuada de implementar un
lenguaje de cómputo. Ha llegado a considerarse un excelente lenguaje de enseñanza.
Las personas que se inician en la programación le consideran fácil para implementar
algoritmos, su compilador es estricto con el uso de programación estructurada,
asegurándose de que los errores sean señalados al principio.
- C, desarrollado a principios de los sesenta por Brian Kernighan y Dennis Ritchie,
quienes buscaban un mejor lenguaje de integrar con el sistema operativo UNIX, para
que los usuarios pudiesen hacer modificaciones y mejoras con facilidad. El código
ejecutable obtenido del lenguaje C, es rápido y eficiente. El C es poderoso, puesto que
brinda la libertad de conseguir que se realice casi cualquier cosa en una computadora.
Esta es una de las razones por la cual se ha vuelto tan popular entre quienes
desarrollan software para aplicaciones comerciales profesionalmente.
Su dificultad
lenguajes.
estriba, en que no es tan sencillo de aprender en comparación con otros
- C++, Es un lenguaje de principios de los ochenta desarrollado por Bjarne Stroustrup. Es
extremadamente poderoso y eficiente igual que el C. Su aprendizaje implica aprender
todo acerca de C y además aprender sobre la programación orientada a objetos y su
aplicación mediante el C++. Desde su origen ha ido ganando terreno entre quienes
desarrollaban en C.
- Java (1991) es desarrollado por Sun Microsistema. Cuando Internet comenzó a ganar
popularidad como red de comunicaciones a mediados de los noventa, Sun redirige a
Java para convertirlo en un ambiente de programación que permitiese crear sistemas
interactivos y dinámicos (denominados applets) para las páginas Web. La complejidad
de Java es similar a C++, pero ha ido ganando popularidad por la demanda de
aplicaciones para páginas Web, incluso se estima que puede llegar a desplazar a C++
como ambiente de programación.
• Cuarta generación: Lenguajes de propósito especial:
Estos lenguajes de cuarta generación (4GL) son usados en programación, de propósitos
específicos, caracterizados por una mayor facilidad de uso comparados con los de la
tercera
generación, permitiendo la creación de prototipos de una aplicación
rápidamente. Los prototipos
permiten tener una idea del aspecto y funcionamiento
de la aplicación antes que el código sea
terminado. Esto implica que quienes estén
involucrados en el desarrollo de la aplicación pueden
aportar retroalimentación en
aspectos como, estructura y diseño desde el principio del proceso.
A cambio de esta
capacidad para trabajar más velozmente, debe sacrificarse parte de la flexibilidad con
la que se disponía con los lenguajes anteriores.
Muchos de estos lenguajes tienen capacidad para bases de datos, permitiendo crear
programas que sirvan de enlace con las mismas. Los programas incluyen formas y
cuadros para introducir datos, así como solicitar reportes de información de las bases de
datos. En general, ahorran tiempo puesto que el código requerido para conectar los
cuadros de diálogo y las formas se genera de forma automática.
Entre los programas de cuarta generación se tienen:
- Los programas de ambientes visuales: Existen versiones de programas populares como
el Visual BASIC o el Visual C, los cuales, soportan características y métodos orientados a
objetos y que permiten crear programas en un ambiente visual. Por ejemplo, si se desea
ubicar un cuadro de texto en un formulario para entrada de datos sólo se requiere
arrastrarlo desde la barra de herramientas hasta la posición deseada sobre el
formulario. Con los programas de tercera generación se requiere escribir el código,
indicando el tamaño y ubicación exacta del cuadro de texto.
La creación de formularios es más fácil en ambientes
visuales.
En el ambiente visual, simplemente se ubica el cuadro
en el lugar que se requiere y se da el tamaño
adecuado arrastrando sus bordes con el ratón, el
código se genera automáticamente.
- Ambientes de autoría: Conformados por herramientas de programación para
propósitos
especiales, se usan para crear multimedia, capacitación basada en
computadora, páginas Web y otros. Un ambiente de autoría es Macromedia Director
el cual se usa para crear títulos multimedia que combinen, cortos de música, texto,
animación, gráficos y demás. Son ambientes de desarrollo visuales en el cual gran
parte del código se escribe automáticamente, pero la mayoría de ambientes de
autoría robustos también incluyen sus propios lenguajes, lenguajes de escritura, que
proporcionan un control extra sobre el producto final.
• Quinta generación: Lenguajes naturales:
Esta generación incluye la inteligencia artificial y sistemas expertos. En lugar de sólo
ejecutar un conjunto de órdenes, el objetivo de estos sistemas es pensar y anticipar las
necesidades de los usuarios.
Estos sistemas se encuentran aún en desarrollo. Aunque los sistemas de inteligencia
artificial han demostrado ser más complicados para desarrollar de lo que se anticipaba,
los investigadores afirman que pronto serán capaces de tomar como entrada hechos y
luego usar un procesamiento de datos que formule una respuesta adecuada, de modo
similar a como responden los humanos.
Las cinco generaciones de lenguajes de programación
Generación Nombre
Particularidad
Primera
De máquina
Específico para cada microprocesador, uso de
código binario
Segunda
Ensamblador
Uso de nemotécnicos que abstraen del
lenguaje máquina.
Tercera
De procedimientos
Lenguajes estructurados con
cercanos al lenguaje común.
Cuarta
Orientados
procesos
Quinta
Natural
a Programas
específicos.
orientados
Incluye inteligencia
expertos.
comandos
a
artificial
problemas
y
sistemas
Nuevas tendencias
La disponibilidad de programas de calidad desarrollados más rápidamente, se ve
acrecentada con el pasar del tiempo motivada por dos aspectos. Por un lado, la
acumulación del conocimiento de cómo hacer las cosas, organizado mediante técnicas y
metodologías bien definidas y estructuradas, que plantean alternativas como guías a
seguir. Por otro lado, la disponibilidad de lenguajes de programación los cuales proveen
mejores medios para que los desarrolladores sean capaces de aplicar su creatividad,
ingenio y experiencia.
Una tendencia marcada desde hace algunos años, es la dependencia creciente de
componentes de software reusable por parte de programadores y equipos de
desarrollo. El enfoque de la programación orientada a objetos es muestra de ello, así
como su incorporación en los lenguajes de programación.
De tal modo, es muy probable que incluso lleguen a existir proveedores de objetos
componentes de software, que los ofrezcan a los programadores, como en la actualidad
se ofrecen componentes hardware. Entonces el enfoque del trabajo de los
desarrolladores de software cambiará, tal vez, dividiéndolos en dos grupos.
Por un lado, quienes se encarguen de la integración de
los objetos cuando se trata de desarrollar programas
específicos, más que de desarrollar a detalle cada
componente desde el principio. En tanto que los
surtidores de tales componentes se especializan en
desarrollar los objetos que les son demandados, que
podrán ser componentes estándar o a la medida (con
especificaciones únicas).
Otra gran influencia en el desarrollo de programas, es
resultado de la expansión en el uso de Internet en lo personal y en lo comercial. Es
posible que pronto se generalice el uso de programas los cuales se ejecuten en Internet
y los desarrolladores produzcan programas que además de enviar y recibir mensajes y
archivos, hagan uso de los inmensos recursos mundiales disponibles. Los programadores
podrían estar desarrollando programas que se ejecuten en Internet, requiriendo
entonces, lenguajes de programación más adaptados a este tipo de empresas.