Fundamentos de la programación
Evolución de la programación:
Sobre los últimos 50 años, los idiomas
que programan han evolucionado del código binario de máquina a herramientas
poderosas que crean las abstracciones complejas. Es importante entender por qué
los idiomas han evolucionado, y qué capacidades que los idiomas más nuevos nos
dan.
Tan largo como no había máquinas,
programar era ningún problema; cuando tuvimos unos pocas computadoras débiles,
programar llegó a ser un problema templado y ahora que tenemos las computadoras
gigantescas, programar ha llegado a ser un problema igualmente gigantesco. Cada
vez más, los lenguajes de programación tienden representar un modelo del mundo
basándose en elementos que se alejan de la máquina y se acercan al humano. En
los extremos encontramos el lenguaje puro de la máquina y la Programación
Orientada a Objetos. Los lenguajes de alto nivel procedurals (Pascal, C)
ganaron confianza entre los programadores para quienes, de no existir un
impulse hacia la POO, no hallaban la necesidad de cambiarse. En esta unidad se
mostrará la evolución de los lenguajes a través del tiempo a la par con las tecnologías
que influyen en el desarrollo de software, y como esas tecnologías hacen que la
POO se mantengan como el paradigma de programación más usado en la actualidad.
Primera
Generación
Al desarrollarse las primeras
computadoras electrónicas, se vio la necesidad de programarlas, es decir, de
almacenar en memoria la información sobre la tarea que iban a ejecutar. Las
primeras se usaban como calculadoras simples; se les indicaban los pasos de
cálculo, uno por uno.
John Von Neumann desarrolló el modelo
que lleva su nombre, para describir este concepto de “programa almacenado”. En
este modelo, se tiene una abstracción de la memoria como un conjunto de celdas,
que almacenan simplemente números. Estos números pueden representar dos cosas:
los datos, sobre los que va a trabajar el programa; o bien, el programa en sí.
¿Cómo es que describimos un programa
como números? Se tenía el problema de representar las acciones que iba a
realizar la computadora, y que la memoria, al estar compuesta por switches
correspondientes al concepto de bit, solamente nos permitía almacenar números
binarios.
La programación en esos momentos era
sumamente tediosa, pues el programador tenía que “bajarse” al nivel de la
máquina y decirle, paso a pasito, cada punto de la tarea que tenía que
realizar. Además, debía expresarlo en forma numérica; y por supuesto, este
proceso era propenso a errores, con lo que la productividad del programador era
muy limitada. Sin embargo, hay que recordar que en estos momentos, simplemente
aún no existía alternativa.
Segunda
Generación
El primer gran avance que se dio, como
ya se comentó, fue la abstracción dada por el Lenguaje Ensamblador, y con él,
el nacimiento de las primeras herramientas automáticas para generar el código
máquina. Esto redujo los errores triviales, como podía ser el número que
correspondía a una operación, que son sumamente engorrosos y difíciles de
detectar, pero fáciles de cometer. Sin embargo, aún aquí es fácil para el
programador perderse y cometer errores de lógica, pues debe bajar al nivel de
la forma en que trabaja el CPU, y entender bien todo lo que sucede dentro de
él.
Tercera
Generación
Con el desarrollo en los 50s y 60s de
algoritmos de más elevado nivel, y el aumento de poder del hardware, empezaron
a entrar al uso de computadoras científicos de otras ramas; ellos conocían
mucho de Física, Química y otras ramas similares, pero no de Computación, y por
supuesto, les era sumamente complicado trabajar con lenguaje Ensamblador en vez
de fórmulas. Así, nació el concepto de Lenguaje de Alto Nivel, con el primer
compilador de FORTRAN (FORmula TRANslation), que, como su nombre indica, inició
como un “simple” esfuerzo de traducir un lenguaje de fórmulas, al lenguaje
ensamblador y por consiguiente al lenguaje de máquina. A partir de FORTRAN, se
han desarrollado innumerables lenguajes, que siguen el mismo concepto: buscar
la mayor abstracción posible, y facilitar la vida al programador, aumentando la
productividad, encargándose los compiladores o intérpretes de traducir el
lenguaje de alto nivel, al lenguaje de computadora.
Hay que notar la existencia de lenguajes
que combinan características de los de alto nivel y los de bajo nivel (es
decir, Ensamblador). Mi ejemplo favorito es C: contiene estructuras de
programación de alto nivel, y la facilidad de usar librerías que también son
características de alto nivel; sin embargo, fue diseñado con muy pocas
instrucciones, las cuales son sumamente sencillas, fáciles de traducir al
lenguaje de la máquina; y requiere de un entendimiento apropiado de cómo
funciona la máquina, el uso de la memoria, etcétera. Por ello, muchas personas
consideramos a lenguajes como C (que fue diseñado para hacer sistemas
operativos), lenguajes de nivel medio.
Cuarta
Generación
Los idiomas de la cuarta generación
parecen según las instrucciones a las de la tercera generación. Lo nuevo de
estas lenguajes son conceptos como clases, objetos y eventos que permiten
soluciones más fáciles y lógicos. Lenguajes como C++, java y C# se llaman
lenguajes orientadas al objeto.
Los idiomas modernos, tal como C++ y
Java, no sólo permite las abstracciones, pero permite la implementación
impuesta de restricciones en abstracciones. La mayoría de los idiomas modernos
son objetivas orientado, que permite que mí modele el mundo verdadero que usa
mi idioma. Además, puedo limitar el acceso para modelar las restricciones de
mundo verdadero en datos. La llave es que usé el término “mundo verdadero”. Por
la primera vez, yo modelo mi solución en términos del problema. Quiero que mi
solución sea orientado de problema, para que la solución refleje el mundo
verdadero en términos de estructuras de datos y acceso a los datos. Yo también
puedo aplicar directamente y para poder modelar objetos de mundo verdadero
usando las clases (en C + + o Java).
Quinta Generación
Como la quinta generación están
conocidos los Lenguajes de inteligencia artificial. Han sido muy valorados al
principio de las noventa - mientras ahora el desarrollo de software toma otras
caminos.
Lo que veremos en el futuro es menos
dependencia en el idioma, y más en el modelando herramientas, tal como el
Unificado Modelando el Idioma (UML). La salida del modelando herramienta
producirá mucho de nuestro código para nosotros; en el muy menos, producirá
arquitectónico y los modelos del diseño y la estructura de nuestro código. Esto
producirá un diseño (y posiblemente código) eso puede ser validado por el
cliente antes de completar la implementación y probar. Cuando los problemas
diarios que resolvemos llegan a ser más grande, nosotros tenemos cada vez menos
tiempo “volver a hacer” el código. Los días de decir, “acabamos de escribir una
versión de Beta y el cliente entonces pueden decir nosotros lo que ellos
quieren realmente, son pasados”. Las organizaciones que fallan de obtener
completa y corrige los requisitos de cliente antes de escribir el código saldrá
del negocio. ¿Por qué? Porque toma demasiado largo, y cuesta también mucho,
para escribir código dos o más vez. Las organizaciones que tienen un compromiso
a la comprobación y la validación antes de producir código prosperarán - los
otros fallarán.
Lenguajes de programación más
importantes.
Algunos de los lenguajes de programación
más importantes por año son:
·
1943
- Plankalkül (Konrad Zuse)
·
1943
- ENIAC
·
1949
- C-10
·
1951
- Regional Assembly Language
·
1952
- Autocode
·
1954
- FORTRAN
·
1958
- LISP
·
1958
- ALGOL
·
1959
- COBOL
·
1962
- APL
·
1962
- Simula
·
1964
- BASIC
·
1964
- PL/I
·
1966
- BCPL
·
1969
- B
·
1970
- Pascal
·
1972
- C
·
1972
– Smalltalk
·
1972
- Prolog
·
1973
- ML
·
1974
- Comandos Guardados
·
1978
- SQL
·
1983
- Ada
·
1983
- C++
·
1985
- Eiffel
·
1987
- Perl
·
1989
- FL (Backus)
·
1990
- Haskell
·
1990
- Python
·
1991
- Java
·
1993
- Ruby
·
2000
- C#
·
2007
- UAP
Conceptos fundamentales de la
programación:
Para empezar a entender lo que es la
programación, primero tenemos que tener ciertos conocimientos sobre todo lo que
la rodea.
1.
Paradigma de programación.
Un paradigma de programación es la
propuesta tecnológica adoptada e implementada como metodología para resolver
problemas definidos, su núcleo no varía en absoluto y su esquema básico
tampoco.
Existen actualmente muchos paradigmas de
programación, entre los más comunes se encuentran los siguientes:
·
Programación
imperativa.
·
Programación
estructurada.
·
Programación
lógica.
·
Programación
declarativa.
·
Programación
orientada a objetos.
·
Programación
dirigida por eventos.
A día de hoy el paradigma de
programación más utilizado es el de la programación orientada a objetos, aunque
lo más normal es que un mismo lenguaje de programación soporte más de un
paradigma, estos lenguajes son conocidos como multiparadigma y algunos de estos
lenguajes son C++, Visual Basic o PHP.
2.Lenguaje
de programación.
Un
lenguaje de programación es un conjunto de palabras y expresiones que
conforman un idioma artificial y que sirven para expresar en lenguaje humano
las operaciones y procesos que debe realizar un computador. Surge de la
necesidad de encontrar una forma de mandar instrucciones a la computadora sin
usar el lenguaje máquina, el único que la computadora comprende.
Cada lenguaje de programación contiene
sus propias normas sintácticas y semánticas que hay que respetar para que el
programa comprenda perfectamente lo que le queremos transmitir.
Los lenguajes se pueden clasificar en
muchos grupos dependiendo de sus funcionalidades y características.
Lenguajes de programación fuertemente o
débilmente tipados.
Lenguajes de bajo, medio o alto nivel.
Lenguajes compilados o interpretados.
Lenguajes de programación declarativos,
imperativos, orientados a objetos, etc. Es decir, clasificados según su
paradigma.
3.Algoritmo
y programa informático.
Un algoritmo es un término usado en
ciencias de la computación, matemáticas y lógica, se define como un conjunto de
instrucciones ordenadas, sucesivas y perfectamente definidas gracias a las
cuales se puede realizar una actividad sin interrupciones ni errores.
Un programa informático es la
representación de un algoritmo en un lenguaje de programación ciñéndose a las
normas de éste. Al conjunto de texto que conforman las instrucciones que una
computadora debe ejecutar se le conoce como código fuente.
4.Compilación
y depuración.
La compilación es el procedimiento por
el cual un programa traduce un lenguaje de programación a lenguaje máquina para
que la computadora pueda interpretarlo. Al programa encargado de realizar ésta
tarea se le conoce como compilador.
La depuración es el proceso de búsqueda,
identificación y corrección de errores de programación. Existen varios métodos
de depuración como técnicas de revisión, programas de detección de errores
(depuradores), herramientas integradas en el entorno de desarrollo o revisión
manual por parte del programador usando un papel y bolígrafo o sentencias
auxiliares dentro del programa.
5.Identificadores
y palabras reservadas.
Los identificadores son palabras o
símbolos léxicos que sirven para nombrar entidades y elementos dentro de un
programa y que hacen posible la referencia a ellos. Los lenguajes de
programación cuentan con restricciones para el uso de los caracteres posibles
en identificadores.
Las palabras reservadas son un conjunto
de términos que forman parte del lenguaje de programación y tiene significado
gramatical dentro de él, por lo que no pueden usarse como identificadores.
6.Variables
y constantes.
Una variable es un espacio reservado en
la memoria de un computador durante la ejecución de un programa y que contiene
valores susceptibles de alterarse con el tiempo.
Una constante es exactamente lo mismo
que una variable pero a diferencia de ésta, en una constante el valor que
contiene no puede ser alterado.
Las variables y constantes tienen la
característica de tener longitud, esto es, el espacio que ocupará en la memoria
principal, pudiendo ser de dos tipos:
Fija – El tamaño definido inicialmente
no se altera, es aplicable a variables y constantes.
Variable – El tamaño definido
inicialmente varía a lo largo de la ejecución de un programa.
7.Tipos
de datos.
Las variables y las constantes (y otras
cosas) tienen otra característica que es el tipo de dato, un atributo que
indica a la computadora la clase de datos que va a manejar dentro de una celda
de memoria concreta, imponiendo así restricciones acerca de las operaciones que
se pueden hacer con ellos.
Los hay de varios tipos:
Simples.
Compuestos.
Abstractos.
Puntero.
Objeto.
Etc.
8.Operadores
de datos.
Un operador de datos es un elemento del
programa que se aplica a uno o varios operandos (variables, constantes, etc.) y
por los cuales se construye una expresión o instrucción.
Existen de varios tipos:
Aritméticos.
Lógicos.
Relacionales.
Asignación.
Dirección.
Etc.
9.Estructuras
de control.
Las estructuras de control permiten al
programador poder modificar el flujo de ejecución de un programa, obligando a
éste a realizar repetidamente una serie de acciones o seleccionar para su
ejecución una entre varias de ellas.
Existen dos tipos básicos de estructuras
de control.
Selectivas – Ejecutan una instrucción u
otra dependiendo de que se cumplan o no una o varias condiciones.
Iterativas – Ejecutan una o varias
instrucciones repetidamente mientras se cumpla una condición.
10.Comentarios.
Los comentarios son anotaciones legibles
y aclaratorias que el programador introduce dentro del código fuente de un
programa.
Los comentarios son posibles gracias a
algún símbolo característico de cada lenguaje de programación, éstos serán
completamente ignorados por los compiladores y el contenido no se atiene a
ninguna norma lingüística más allá de la lengua natural del programador.
Con estos terminamos por hoy, estos
términos no son los únicos que existen pero sí son los más básicos, su
comprensión y asimilación es esencial para iniciarse en el maravilloso mundo de
la programación.
Fuentes:
https://desarrolloweb.com/articulos/2357.php
http://programavideojuegos.blogspot.mx/2013/04/10-conceptos-basicos-de-programacion.html
http://www.marcoteorico.com/curso/51/fundamentos-de-programacion/385/evolucion-de-la-programacion
http://wiki.elhacker.net/programacion/introduccion/historia-de-la-programaci%C3%B3n#lenguajes
Comentarios
Publicar un comentario