4. 1.La programación en la sociedad actual
El propósito de la programación informática es desarrollar aplicaciones
que faciliten las tareas cotidianas, tales como hacer compras, escuchar
música, comunicarse con otros usuarios, etc.; en definitiva, mejorar
localidad de vida de la sociedad.
Para la comunicación con un ordenador se utilizan los lenguajes de
programación. Estos lenguajes son un conjunto de símbolos y reglas que,
siguiendo una estructura lógica, permiten escribir las líneas de código que
componen las aplicaciones.
En los inicios de la era informática, era necesario crear programas a partir
de un lenguaje muy complejo de ceros y unos. La evolución de los
ordenadores ha llevado consigo el desarrollo de nuevos lenguajes de
programación que permiten crear entornos de desarrollo visuales que no
requieren escribir ningún código para la creación de aplicaciones.
La tecnología necesita profesionales capaces de ampliar sus horizontes, por
lo que la tendencia actual es potenciar el pensamiento creativo y el
razonamiento sistemático a edades cada vez más tempranas. Para ello, hay
lenguajes diseñados para ser utilizados por niños y adolescentes, como
Scratch, App Inventor…
5. 2.Creación de un programa informático
En informática, los algoritmos son la base para crear los programas. Se
denomina algoritmo al conjunto de instrucciones y reglas ordenadas que
guían el desarrollo de estas actividades.
Un programa informático es un conjunto de instrucciones, escritas en un
lenguaje de programación para que el ordenador lo pueda entender. Para
crear un programa informático se siguen diferentes fases de desarrollo
conocidas como Ciclo de vida del software:
o Análisis del problema.
o Diseño del algoritmo.
o Codificación del programa
o Pruebas y depuración
o Documentación
2.1 Análisis del problema
Consiste en hacer un estudio detallado del problema a resolver, con
la finalidad de que el resultado final coincida con lo que se esperaba.
Esta es una de las fases más complejas, ya que requiere hacer un
estudio exhaustivo del problema para conocer todas las
características, propiedades y restricciones que debe tener el
programa desarrollado.
En esta fase hay que identificar correctamente aspectos como a quién
va dirigido el software, qué debe hacer exactamente, etc.
2.2 Diseño de algoritmos
En esta fase se crean los algoritmos que permiten resolver el
problema. Para representarlos se utilizan diagramas de flujo y
pseudocódigos. Estos se basan en la utilización de símbolos gráficos
denominados bloques, en los que escribimos las acciones que tiene
que realizar el algoritmo.
6. 2.3 Codificación del problema
Es la traducción del lenguaje algorítmico a un lenguaje de
programación que el ordenador puede entender, como Java, Python…
Para crear los programas, se utilizan entornos de desarrollo que
facilitan la escritura de las instrucciones. Estas instrucciones se
almacenan en ficheros denominados código fuente, que se traducen
con un compilador a lenguaje máquina, es decir, a programas
ejecutables.
2.4 Pruebas y depuración
Una vez escrito el programa, hay que someterlo a una serie de
pruebas para detectar posibles errores de funcionamiento. Es
importante examinar todas las opciones y posibilidades del programa,
ya que si se da por finalizada la fase de pruebas sin haber realizado
un chequeo completo, se corre el riesgo de que el programa pueda
fallar en cualquier momento durante su ejecución. En caso de
detectar algún error, este debe corregirse en el programa antes de
crear el programa ejecutable definitivo. Las actualizaciones corrigen
errores detectados en las aplicaciones tras su lanzamiento.
2.5 Documentación
Cada uno de los pasos anteriores debe llevar asociado un documento
con todas las especificaciones necesarias. Durante la programación es
importante añadir comentarios al código fuente con el objeto de
clarificar y explicar cada elemento del programa. Esta documentación
sirve para hacer más comprensible el código a otros programadores
que tengan que hacer futuras revisiones. Para ello, se suelen utilizar
símbolos como // y /*..*/.
El código de apertura es el siguiente: <!– y el cierre del comentario
se escribe así: –>
Ejemplo:
8. 3.Diseño de algoritmos
3.1 Algoritmo: definición y características que
debe cumplir
Un algoritmo es un conjunto prescrito de instrucciones o reglas
bien definidas, ordenadas y finitas que permite llevar a cabo una
actividad mediante pasos sucesivos que no generen dudas a quien
deba hacer dicha actividad. Dados un estado inicial y una entrada,
siguiendo los pasos sucesivos se llega a un estado final y se
obtiene una solución.
En términos de programación, un algoritmo es una secuencia de
pasos lógicos que permiten solucionar un problema.
Las características que debe cumplir todo algoritmo son:
Un algoritmo debe ser preciso e indicar el orden de
realización de cada paso.
Un algoritmo debe estar definido. Si se sigue un
algoritmo dos veces, se debe obtener el mismo resultado
cada vez.
Un algoritmo debe ser finito. el algoritmo se debe
terminar en algún momento; o sea, debe tener un número
finito de pasos.
Un algoritmo debe ser legible. El texto que describe debe
ser claro, tal que permita leerlo y entenderlo fácilmente.
Los diagramas de flujo sirven
para representar algoritmos de
manera gráfica
9. 3.2 Diagramas de flujo: símbolos utilizados
El diagrama de flujo es la representación gráfica de un algoritmo.
Cuando este diagrama incluye símbolos específicos para su resolución
con un ordenador, también se le denomina ordinograma.
Líneas de flujo: indican la secuencia en la que se van a
ejecutar los pasos del algoritmo.
Terminal: se utiliza para representar el inicio y el final de la
tarea a realizar. También puede representar una pausa o
interrupción.
Proceso: representa una o varias instrucciones que se realizan
de forma secuencial.
Decisión: se usa para representar una operación lógica o una
comparación de datos para que, en función del resultado se
siga por un camino u otro. Si tiene más de 2 salidas se
denomina decisión múltiple.
Función: es un modelo independiente que realiza una tarea
determinada. Permite agrupar varias instrucciones que se
realizan de forma repetitiva.
Entrada/Salida: simboliza la introducción de datos o la salida
de 9información a través de cualquier medio.
10. 3.3 Pseudocódigo
El pseudocódigo es una forma de escribir los pasos que van a realizar
un programa de la forma más cercana al lenguaje de programación
que vamos a utilizar posteriormente.
Una de las mayores dificultades con las que se encuentran los
hispanoparlantes que empiezan a programar es el idioma. Por eso es
bueno utilizar el pseudocódigo, que ayuda a asimilar con más
facilidad las ideas básicas. Este pseudocódigo vale para pasarlo
posteriormente a cualquier lenguaje de programación, no importa el
que quieras usar.
Ventajas de utilizar un Pseudocódigo a un Diagrama de
Flujo
Ocupa menos espacio en una hoja de papel.
Permite representar de forma fácil operaciones repetitivas
complejas.
Es muy fácil pasar de Pseudocódigo a un programa en un algún
lenguaje de programación.
Si se siguen las reglas se puede observar claramente los
niveles que tiene cada operación.
¿Qué quiero
hacer?
Lo escribo en
pseudocódigo
Escribo el
programa en
mi lenguaje de
programación
11. 4.Lenguajes de programación
4.1 Evolución histórica de los lenguajes
Atendiendo a la evolución histórica, se realiza una clasificación
general de los lenguajes desde su aparición.
Primera generación: Lenguaje máquina
Los primeros ordenadores se programaban en código binario (0,1). Cada
ordenador tenía que ser programado utilizando un conjunto de
instrucciones específicas, por lo que se llama lenguaje máquina. En la
actualidad, aunque se utilizan lenguajes de alto nivel, todos los
programas deben ser convertidos a lenguaje máquina para que el
ordenador los pueda ejecutar.
Segunda generación: Lenguaje ensamblador
El lenguaje ensamblador utilizaba instrucciones sencillas, en lugar de
código binario propio del lenguaje máquina. Este lenguaje utiliza un
traductor para convertir cada instrucción a su equivalente en lenguaje
máquina. Algunos lenguajes utilizan instrucciones en lenguaje
ensamblador para hacer más eficientes los programas.
Tercera generación: Lenguajes de alto nivel
Los lenguajes de alto nivel sustituyen las instrucciones simbólicas por
códigos independientes de la máquina y mucho más cercanos al lenguaje
natural. Necesitan un compilador para generar el programa en código
máquina. Inicialmente se desarrollaron lenguajes no estructurados, que
utilizaban alguna instrucción para indicar o modificar la secuencia de
ejecución de las instrucciones. No obstante, la mayoría de los lenguajes
de esta generación siguen el paradigma de la programación
estructurada, basada en que todo programa puede escribirse utilizando
únicamente instrucciones secuenciales, selectivas y repetitivas.
Cuarta generación: Programación orientada a
objetos
Es una modalidad de programación más cercana a la vida real, ya que
los programas se escriben en términos de objetos sobre los que se
realizan acciones y que interaccionan mediante el envío de mensajes
entre ellos. La mayoría de lenguajes actuales están orientados a objetos:
C++, Java, etc.
12. Quinta generación: Lenguaje natural e inteligencia
artificial
Se basan en el uso del lenguaje natural, o muy similar, para describir
problemas que, utilizando técnicas de inteligencia artificial, el ordenador
es capaz de resolver. Destacan lenguajes como Prolong.
4.2 Sintaxis de los lenguajes de programación
A la forma visible de un lenguaje de programación se le conoce como
sintaxis. La mayoría de los lenguajes de programación son puramente
textuales, es decir, utilizan secuencias de texto que incluyen
palabras, números y puntuación, de manera similar a los lenguajes
naturales escritos. Por otra parte,
hay algunos lenguajes de
programación que son más gráficos
en su naturaleza, utilizando
relaciones visuales entre símbolos
para especificar un programa.
La sintaxis de un lenguaje de
programación describe las
combinaciones posibles de los
símbolos que forman un programa
sintácticamente correcto. El
significado que se le da a una
combinación de símbolos es
manejado por su semántica (ya sea
formal o como parte del código duro
de la referencia de implementación).
4.3 Variables y constantes
Los sistemas informáticos descomponen la información en datos
sobre los que se opera hasta obtener el resultado deseado.
Si un dato no va a cambiar durante la ejecución del programa se
puede definir como constante, mientras que los datos cuyos valores
pueden cambiar son variables. Es mejor entender el concepto
variable como un contenedor de un dato, que podrá cambiar tantas
veces como sea necesario y que siempre estará disponible en dicho
contenedor. En ocasiones se trabaja con un conjunto de variables que
del mismo tipo, que se almacenan de forma consecutiva, lo que se
define en programación como array o cadena.
Las variables y constantes se crean especificando su nombre y tipo
de datos que almacenan.
Con frecuencia se resaltan los
elementos de la sintaxis con colores
diferentes para facilitar su lectura. Este
ejemplo está escrito en Python.
13. 4.4 Tipos de datos
Para programar, es necesario identificar a qué tipo de datos
pertenecen cada una de las variables o constantes, ya sean estos
números, letras, palabras, frases, entre otros y cada uno corresponde
a un tipo de dato, que requerirá de una manipulación específica para
obtener los resultados deseados. Cada lenguaje de programación
dispone de un conjunto de tipos de datos que puede manipular; sin
embargo los que aquí se presentan corresponden a aquellos que
todos los lenguajes de programación disponen, y que se conocen
como tipos de datos estándares.
Tipo de dato Subtipo Descripción
Numéricos
Enteros
Este tipo dato corresponde a
aquellas variables que
exclusivamente pueden
recibir VALORES SIN PARTE
DECIMAL.
Reales
Este tipo de dato, en cambio
corresponde a aquellas variables
cuyos VALORES TIENEN PARTE
DECIMAL, aunque al mismo tiempo
puede contener valores enteros.
Texto
Caracteres
En este tipo de dato se encuentran
todos los caracteres conocidos, una
letra, un número, un símbolo
especial. Por lo tanto, está
conformado por los DÍGITOS:'0',
'1', '2', ... , '9';
LETRAS: 'a', 'b', 'c', ... , 'z';
MAYÚSCULAS: 'A', 'B', 'C', ...
, 'Z'; y CARACTERES
ESPECIALES: '%', '*', '?', ... , '/'
Cadenas
Constituyen conjuntos de caracteres,
es decir la UNIÓN DE VARIOS
CARACTERES, que pueden ser
palabras o frases. El valor de este
tipo de datos se encierra
generalmente entre comillas (" ").
Lógicos Boolean
Únicamente reciben dos valores:
true ó false. Se utilizan
generalmente como banderas, para
identificar si se realizó o no un
proceso.
14. 4.5 Estructuras secuenciales
Proporcionan técnicas que facilitan la tarea de programar, ya que
reducen el tiempo requerido para escribir, verificar, depurar y
modificar los programas.
Una estructura secuencial es aquella en la que cada instrucción sigue
a la anterior, de modo que se realizan todas sin saltarse ni repetir
ninguna de ellas.
Se pueden encontrar diferentes expresiones:
Sentencias
Son instrucciones que realizan acciones. Cada sentencia se coloca en
una línea del programa, seguida de un “;”. Para agrupar un conjunto de
sentencias se utilizan {}.
Llamadas a funciones
Ejecutan instrucciones que se encuentran fuera del programa, ya sea en
una biblioteca o en otra parte del programa.
Asignación
Es la que permite el almacenamiento de un valor en una variable o una
constante. La asignación se realiza se realiza con el símbolo =, por lo
que es importante no confundirlo con el operador de comparación ==.
Operaciones aritméticas
Los operadores aritméticos (+,-,*,/) realizan sumas, restas, productos,
divisiones y calculan el resto.
La mayoría de lenguajes permiten simplificar las instrucciones
aritméticas en que se modifica el valor de una variable a partir de su
valor anterior.
Ejemplos:
+= Incrementa el valor de la variable x en y.
-= Resta el valor de la variable x el valor y
*= Multiplica el valor de la variable x por y
/= Divide el valor de la variable x por y
%= Asigna a la variable x el resto de dividir x por y
++ Incrementa el valor de la variable x en uno.
15. 4.6 Estructuras selectivas
Se utilizan para tomar decisiones lógicas. En ellas, se evalúa una
condición y, en función del resultado, se realizan unas u otras
acciones.
Sentencia if-else
La estructura de selección if permite realizar una acción concreta en
caso de cumplirse una condición.
Se puede utilizar la sentencia if-else, de modo que si la condición
evaluada es verdadera, se ejecutan las sentencias de bloque if, y en
caso de ser falsa se ejecutan las secuencias del bloque else.
Sentencia switch
Se utiliza para las decisiones múltiples, es decir, cuando la evaluación de
una expresión puede dar como resultado varios valores.
El programa asignará un valor a una variable mediante la expresión
escrita al comienzo de la sentencia. Posteriormente, irá comparando el
valor de esa variable con los valores especificados en los distintos
subapartados (case); cuando localice el caso del valor que tiene la
variable, solo se realizarían las sentencias escritas en el bloque default.
Para evaluar condiciones, se utilizan operadores de comparación y
lógicos:
== Igual.
> Mayor.
< Menor.
>= Mayor o igual.
<= Menor o igual
&& Y. si tanto a como b son verdaderas.
4.7 Estructuras repetitivas
Se utilizan para repetir la ejecución de un determinado grupo de
sentencias, dependiendo de determinadas condiciones. Las más
comunes son:
Mientras (while)
Tiene como función repetir un bloque de sentencias mientras se cumpla
una condición. La evaluación de la condición se realiza antes de la
ejecución de las sentencias, de modo que:
o Si es verdadera, las sentencias se realizan y se vuelve a
evaluar la condición.
16. o Si es falsa, la estructura Mientras finaliza y el control pasa a
la siguiente instrucción del programa.
Hacer-Mientras (do-while)
Tiene como propósito repetir un bloque de sentencias mientras se
cumpla una condición. La condición se evalúa al final de las sentencias,
de modo que:
o Si es verdadera, las sentencias se vuelven a repetir.
o Si es falsa, la estructura Hacer-Mientras finaliza y el control pasa
a la siguiente instrucción del programa.
Para (for)
Permite fijar el número de veces que se ha de repetir un bloque de
sentencias. Para ello, se utiliza un contador que comienza con un valor
inicial que incrementa o disminuye en cada iteración del bucle. La
estructura finaliza cuando se deje de cumplir una condición.
4.8 Funciones
Las funciones son un conjunto de instrucciones que realizan una
tarea específica. Toman ciertos valores de entrada llamados
parámetros y proporcionan un valor de salida (return), aunque
ambos son opcionales y pueden no existir.
4.9 Funciones recursivas
Es aquella que se llama así misma para resolverse. En cada llamda
varían los parámetros y se obtienen los resultados necesarios para
resolver la función inicial.
5. Algunos lenguajes de programación
5.1 C++
C++ es un lenguaje de programación diseñado a mediados de los
años 1980. La intención de su creación fue el extender al lenguaje de
programación C mecanismos que permiten la manipulación
de objetos. En ese sentido, desde el punto de vista de los lenguajes
orientados a objetos, el C++ es un lenguaje híbrido.
Posteriormente se añadieron facilidades de programación genérica,
que se sumaron a los paradigmas de programación
estructurada y programación orientada a objetos. Por esto se suele
decir que el C++ es un lenguaje de programación multiparadigma.
17. Actualmente existe un estándar, denominado ISO C++, al que se han
adherido la mayoría de los fabricantes de compiladores más
modernos. Existen también algunos intérpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir
los operadores, y de poder crear nuevos tipos que se comporten
como tipos fundamentales.
5.2 Java
Java es un lenguaje de programación de propósito
general, concurrente, orientado a objetos, que fue diseñado
específicamente para tener tan pocas dependencias de
implementación como fuera posible. Su intención es permitir que
los desarrolladores de aplicaciones escriban el programa una vez y lo
ejecuten en cualquier dispositivo (conocido en inglés como WORA, o
"write once, run anywhere"), lo que quiere decir que el código que es
ejecutado en una plataforma no tiene que ser recompilado para
correr en otra. Java es, a partir de 2012, uno de los lenguajes de
programación más populares en uso, particularmente para
aplicaciones de cliente-servidor de web, con unos diez millones de
usuarios reportados.
5.3 JavaScript
Es un lenguaje de programación interpretado, dialecto del
estándar ECMAScript. Se define como orientado a objetos, basado en
prototipos, imperativo, débilmente tipado y dinámico.
Se utiliza principalmente en su forma del lado del cliente (client-side),
implementado como parte de un navegador web permitiendo mejoras
en la interfaz de usuario y páginas web dinámicas aunque existe una
forma de JavaScript del lado del servidor (Server-side JavaScript o
SSJS). Su uso en aplicaciones externas a la web, por ejemplo en
documentos PDF, aplicaciones de escritorio es también significativo.
5.4 PHP
Es un lenguaje de programación de propósito general de código del
lado del servidor originalmente diseñado para el desarrollo
web de contenido dinámico. Fue uno de los primeros lenguajes de
programación del lado del servidor que se podían incorporar
directamente en un documento HTML en lugar, de llamar a un archivo
externo que procese los datos. El código es interpretado por un
servidor web con un módulo de procesador de PHP que genera el
HTML resultante.
18. PHP ha evolucionado por lo que ahora incluye también una interfaz
de línea de comandos que puede ser usada en aplicaciones gráfica sin
dependientes. Puede ser usado en la mayoría de los servidores web
al igual que en muchos sistemas operativos y plataformas sin ningún
costo.
5.5 Python
Es un lenguaje de programación interpretado cuya filosofía hace
hincapié en una sintaxis que favorezca un código legible.
Se trata de un lenguaje de programación multiparadigma, ya que
soporta orientación a objetos, programación imperativa y, en menor
medida, programación funcional. Es un lenguaje interpretado,
usa tipado dinámico y es multiplataforma.