LENGUAJES DE PROGRAMACIÓN
TIPOS
Introducción
Todos los programas se desarrollan en algún lenguaje de programación. Nadie
programa directamente con instrucciones en lenguaje máquina debido a que son
ininteligibles para el ser humano.
Los lenguajes de programación son lenguajes artificiales creado para que al
traducirse a código máquina cada una de las instrucciones de dicho lenguaje dé
lugar a una o varias instrucciones en máquina.
En la actualidad existen multitud de lenguaje de programación.
Lenguajes de programación.
Un lenguaje de programación hace referencia al conjunto de caracteres, reglas
y acciones combinadas y consecutivas que un equipo debe ejecutar.
Constará de los siguientes elementos:
● Alfabeto o vocabulario: conjunto de símbolos permitidos.
● Sintaxis: reglas para realizar correctamente construcciones con los
símbolos.
● Semántica: reglas que determinan el significado de construcción del
lenguaje.
Lenguajes de programación.
Lenguaje de bajo nivel - lenguaje máquina
El lenguaje de más bajo nivel por excelencia es el lenguaje máquina
Características
➢ Sus instrucciones son complejas e ininteligibles. Se componen de 0s y 1s.
➢ No necesita ser traducido. Es el lenguaje que entiende directamente el
ordenador.
➢ Fue el primer lenguaje utilizado.
➢ Los desarrolladores tenían que tener un conocimiento profundo sobre el
hardware.
➢ Es diferente para cada procesador. Las instrucciones no son portables de un
ordenador a otro.
➢ Salvo excepciones, nadie programa en lenguaje máquina.
Lenguaje máquina
Lenguaje de Bajo Nivel
El lenguaje ensamblador (también conocido como "assembly" o ASM) es un
lenguaje de bajo nivel que está estrechamente vinculado a la arquitectura de la
máquina o procesador en el que se ejecuta. Características:
➔ Lenguaje de bajo nivel: Se encuentra justo por encima del código máquina y
permite una interacción directa con el hardware. Cada instrucción en
ensamblador se traduce generalmente en una instrucción de máquina.
➔ Dependiente de la arquitectura: Las instrucciones varían según el tipo de
procesador. El ensamblador para un procesador Intel no será el mismo que
para un procesador ARM, por ejemplo.
➔ Uso de mnemónicos: Las instrucciones del lenguaje ensamblador se
representan mediante mnemónicos, que son abreviaciones legibles para
humanos de las instrucciones de máquina (como MOV, ADD, SUB, etc.).
Lenguaje de Bajo Nivel
➔ Control total del hardware: Ofrece un control sobre los registros del
procesador, la memoria y otros recursos del hardware, lo que permite optimizar
el rendimiento del programa.
➔ Eficiencia en recursos: Al permitir una programación más cercana al
hardware, se pueden crear programas extremadamente eficientes en cuanto a
tiempo de ejecución y uso de memoria, a diferencia de los lenguajes de alto
nivel.
➔ Difícil de programar y mantener: Dado que se trabaja a un nivel muy bajo, el
ensamblador es más complejo de aprender, programar y depurar que los
lenguajes de alto nivel como Python o Java.
➔ Necesita ensamblador: Un ensamblador es el programa encargado de
convertir el código escrito en lenguaje ensamblador en código máquina
ejecutable.
Lenguaje de Bajo Nivel
➔ Instrucciones simples: Cada instrucción en ensamblador realiza una tarea
muy básica, cómo mover datos entre registros o realizar operaciones
aritméticas simples.
➔ Velocidad y optimización: Aunque su uso es más complejo, permite una
optimización extrema del código, algo que es muy valioso en aplicaciones que
requieren un rendimiento muy alto, como en videojuegos de bajo nivel.
El uso del ensamblador es cada vez menos común en el desarrollo general de
software, pero sigue siendo esencial en áreas donde se requiere un control directo
sobre el hardware.
Ejemplo de lenguaje ensamblador
Lenguaje de Nivel Medio - características
Un lenguaje de programación de nivel medio está entre los lenguajes de bajo
nivel (que están muy cerca del hardware, como el ensamblador) y los de alto nivel
(que son más fáciles de entender para las personas, como Python o Java). Los
lenguajes de nivel medio combinan características de ambos mundos: permiten
trabajar más cerca del hardware, pero también con estructuras más comprensibles.
➔ Equilibrio entre control del hardware y facilidad de uso: Te permiten
trabajar directamente con la memoria y el procesador, pero también tienen
características que los hacen más fáciles de usar que los lenguajes de bajo
nivel.
➔ Manipulación directa de hardware: Puedes acceder y manipular directamente
la memoria y los registros del procesador, lo cual es útil para optimizar el
rendimiento de los programas.
Lenguaje de Nivel Medio - características
➔ Eficiencia y velocidad: Los programas escritos en lenguajes de nivel medio
tienden a ser más rápidos y eficientes en cuanto a uso de recursos (memoria y
tiempo de ejecución) que los de alto nivel.
➔ Estructuras comprensibles: Aunque te permite acceder al hardware, los
lenguajes de nivel medio también usan estructuras como bucles (for, while),
condicionales (if, else) y funciones, lo que los hace más fáciles de entender
que los lenguajes de bajo nivel.
➔ Código portátil, pero con acceso a bajo nivel: Aunque no son tan portátiles (es
decir, no se pueden ejecutar fácilmente en cualquier plataforma) como los
lenguajes de alto nivel, los de nivel medio permiten escribir código que puede
funcionar en diferentes tipos de máquinas con algunas modificaciones.
Lenguaje de Nivel Medio - características
¿Por qué son útiles?
Los lenguajes de nivel medio son ideales cuando quieres crear programas que sean
rápidos y eficientes, pero sin tener que escribir en un lenguaje complicado como
ensamblador. Por ejemplo, los sistemas operativos como Windows, Linux y MacOS
se han desarrollado en su mayoría con lenguajes de nivel medio como C.
Lenguaje de Alto Nivel - características
Un lenguaje de alto nivel es un tipo de lenguaje de programación que es más fácil
de entender para los humanos, porque utiliza palabras y estructuras que se
parecen al lenguaje que usamos todos los días. Los lenguajes de alto nivel son
más simples de usar y permiten escribir programas más rápido.
Características de los lenguajes de alto nivel:
➔ Fáciles de leer y escribir: Los lenguajes de alto nivel usan palabras y frases
que parecen inglés o matemáticas. Esto hace que sean más fáciles de
aprender y usar, como if, else, while, o print.
➔ Portabilidad: El mismo código puede ejecutarse en diferentes tipos de
ordenadores sin necesidad de hacer grandes cambios. Por ejemplo, un
programa escrito en Python puede funcionar en Windows, macOS o Linux sin
muchos ajustes.
Lenguaje de Alto Nivel - características
No dependen del hardware: No tienes que preocuparte de cómo funcionan los
componentes internos del ordenador (como la memoria o el procesador) al
escribir el código. El lenguaje de alto nivel se encarga de esos detalles.
Más productivos: Permiten escribir programas más complejos en menos tiempo
que los lenguajes de bajo nivel, porque hacen muchas tareas automáticamente.
Traducidos por un compilador o intérprete: Los lenguajes de alto nivel no son
entendidos directamente por la computadora. Por eso, necesitan un compilador o
un intérprete que los traduzca a lenguaje máquina (el lenguaje que sí entienden
los ordenadores).
Lenguaje de Alto Nivel
➢ En ocasiones ofrecen frameworks para una programación más rápida.
➢ Suelen trabajar con mucha abstracción y orientado a objetos. De esta
manera es más fácil la reutilización y el encapsulamiento.
➢ Algunos ejemplos de lenguajes de alto nivel son: ALGOL, C++, C#, Clipper,
COBOL, Fortran, Java, Logo, Pascal, etc.
Framework
Un framework es una especie de "esqueleto" o "estructura" que te ayuda a
desarrollar aplicaciones de manera más rápida y organizada. Imagina que un
framework es como los cimientos de una casa: ya tienes las paredes y la estructura
básica, y solo te falta construir lo demás encima. Te ofrece una base sólida, para
que no tengas que empezar siempre desde cero.
¿Por qué usar un framework?
Cuando creas una aplicación web desde cero, hay muchas tareas repetitivas, como
conectarte a una base de datos, organizar el código o crear funciones para manejar
errores. Un framework ya tiene todo esto preparado para que puedas enfocarte en
las partes más importantes de tu proyecto, como el diseño y la funcionalidad.
Framework
Ejemplos de frameworks
➔ Frontend (lo que ves en la web).
➔ React: Te ayuda a crear interfaces de usuario interactivas.
➔ Vue.js: Un framework más fácil para principiantes que también sirve para hacer
páginas dinámicas.
➔ Angular: Una opción más completa, pero un poco más compleja.
➔ Backend (lo que pasa detrás de la web):
➔ Django (en Python): Un framework que te facilita gestionar usuarios, bases de
datos, etc.
➔ Laravel (en PHP): Muy usado para crear webs dinámicas y bien estructuradas.
➔ Express (en JavaScript): Muy ligero, perfecto para crear aplicaciones web
rápidas.
Framework
Ventajas de usar un framework
➔ Ahorro de tiempo: Ya tienes muchas funciones listas para usar.
➔ Organización: Facilita mantener el código limpio y estructurado.
➔ Mejores prácticas: Te ayuda a seguir las reglas que usan los programadores
profesionales.
➔ Seguridad: La mayoría de frameworks incluyen medidas de seguridad
básicas.
Según la forma en que los lenguajes son ejecutados
Podemos distinguir:
Lenguajes compilados: como ya vimos se ejecutan de forma más rápida que los
interpretados o virtuales. Ejemplo lenguaje C.
Lenguajes interpretados como ya vimos, no genera código y se encarga de leer
las instrucciones e interpretarlas para seguidamente ejecutarlas: php, javascript.
Los lenguajes virtuales: como ya vimos son lenguajes de programación que no se
ejecutan directamente en el hardware de una computadora, sino que se ejecutan en
un entorno de máquina virtual: java
Paradigmas de programación
El paradigma de programación nos detalla las reglas, los patrones y los estilos
de programación que usan los lenguajes.
➔ Guía la forma en que se diseña y escribe un programa. Es un conjunto de
principios y conceptos que definen cómo se estructura el código, cómo se
resuelven los problemas y cómo interactúan los diferentes componentes del
software
➔ Cada lenguaje puede usar más de un paradigma, el cual resultará más
apropiado que otro según el tipo de problema que queramos resolver.
Paradigmas de programación
Paradigmas de programación - LENGUAJES IMPERATIVOS
Se basa en dar instrucciones secuenciales al ordenador para que realice una serie de
pasos. Características:
➔ Instrucciones paso a paso:
Imagina que le dices a alguien: "Primero, corta las verduras. Luego, ponlas en la
sartén. Después, agrega sal". Estás dando las instrucciones una detrás de la otra.
En un lenguaje imperativo, haces lo mismo con el ordenador.
➔ Cambiar cosas: (variables)
Piensa en una caja donde guardas cosas (como números o palabras). En un
programa, esas cajas se llaman variables, y puedes cambiar lo que tienen dentro.
Por ejemplo, si guardas el número 5 y luego lo cambias a 10, eso es como lo que
hace un programa imperativo: guarda y cambia información.
Paradigmas de programación - LENGUAJES IMPERATIVOS
➔ Control del orden
A veces quieres que el ordenador repita algo o que haga una cosa si pasa algo
especial. Por ejemplo, "si está caliente, retira la sartén del fuego" (sentencias
condicionales) o "repite el paso de mover la sartén hasta que las verduras estén
doradas". En un programa imperativo, puedes decirle al ordenador que haga algo
una y otra vez (como bucles), o que haga algo solo si ocurre una condición especial
(if - else).
Dentro de esta categoría podemos englobar:
➔ Programación modular: se trata de dividir un programa en pequeñas piezas o
módulos. Es como cuando haces una lista de tareas y cada tarea se encarga de
algo específico. Esto ayuda a que sea más fácil entender el código y trabajar
con él.
Paradigmas de programación - Programación orientado a objetos
➔ Programación orientada a objetos (POO): Aquí el enfoque es diferente. En lugar de
simplemente darle instrucciones paso a paso, como en la imperativa, en la orientada a
objetos organizamos el programa en torno a objetos, que son como pequeñas entidades
con sus propias características y comportamientos. Es como si fueras creando cosas en
lugar de sólo escribir instrucciones.
Ejemplo: Imagina que tienes que diseñar un videojuego. En vez de dar una lista de
instrucciones para cada cosa, creas objetos como un "personaje" o "enemigo", y cada uno
tiene sus propias acciones y propiedades. Por ejemplo:
El personaje puede tener un nombre (propiedades) , tipo y puede caminar o saltar (acciones).
El enemigo puede tener su propio nombre, puntos de vida, y puede atacar.
Cada objeto es independiente, pero todos interactúan entre sí para que el juego funcione. Así
es como funciona la programación orientada a objetos: creamos objetos con características y
comportamientos propios, que luego interactúan entre ellos.
Paradigmas de programación - Programación orientado a objetos
Entre las ventajas de este tipo de lenguaje hay que destacar:
➔ Fácil de entender: La POO usa conceptos que ya conocemos del mundo real.
Piensa en objetos como un coche o un perro: cada uno tiene características
(como el color o la raza) y puede hacer cosas (como moverse o ladrar).
Ejemplo: En un juego de coches, puedes tener un "objeto coche" con
características como "color" y "velocidad", y con acciones como "acelerar" o
"frenar".
➔ Organización clara: Al usar objetos y clases, la POO te ayuda a organizar el
código de una forma ordenada. En lugar de escribir todo el código en un solo
lugar, puedes dividir el programa en partes más pequeñas (objetos) que son
más fáciles de manejar. Ejemplo: si estás creando un videojuego, puedes tener
una clase para Personajes, otra para Enemigos y otra para Vehículos, cada una
con sus propias características y acciones.
Paradigmas de programación - Programación orientado a objetos
➔ Reutilización de código: permite reutilizar partes del código, lo que significa
que no tienes que escribir lo mismo una y otra vez. Puedes crear una "plantilla"
(clase) para algo, y luego usar esa misma plantilla para crear muchos objetos
similares, pero con pequeñas diferencias.
➔ Protección de los datos (encapsulamiento): La POO permite proteger la
información que contiene un objeto, de manera que solo se puede cambiar
usando ciertas reglas. Esto ayuda a evitar errores y a que el programa sea más
seguro.
Paradigmas de programación - Programación orientado a objetos
JavaScript.
C++.
Python.
PHP.
Ruby.
Paradigmas de programación - Programación estructurada
• Programación estructurada.
Cuando hablamos de programación
estructurada nos estamos refiriendo a
programas creados a través de módulos,
es decir, pequeñas partes más
manejables que, unidas entre sí, hacen
que el programa funcione. Cada uno de
los módulos poseen una entrada y una
salida, y deben estar perfectamente
comunicados, aunque cada uno de ellos
trabaja de forma independiente.
A continuación, vemos un programa
estructurado en módulos:
Paradigmas de programación - programación declarativa
Lenguajes funcionales:
La programación funcional es un estilo diferente de pensar en cómo programar,
donde en lugar de decirle al ordenador paso a paso lo que debe hacer (como en la
programación imperativa), le dices que calcular usando funciones (como en las
matemáticas).
Están basados en el concepto de función y estarán formados por definiciones de
funciones junto con argumentos que se aplican.
➔ La operación fundamental es la aplicación de una función a una serie de
argumentos y, además, la computación se realiza evaluando expresiones.
➔ Apenas se usan para el software comercial.
Paradigmas de programación - programación declarativa
Lenguajes funcionales:
Existen muchos lenguajes de programación conocidos con los que podremos aplicar
modelos de programación funcional entre sus paradigmas: javascript, ruby phyton,
➔ Se trata de un código más corto, sencillo, legible y preciso.
➔ Fácilmente combinable con la programación orientada a objetos e imperativa.
Ejemplo
En este ejemplo, la problemática es conocer la cantidad de elementos en la lista
mayores a 10.
List<Integer> numeros = List.of(18, 6, 4, 15, 55, 78, 12, 9, 8); // lista de enteros
Long result = numeros.stream().filter(num -> num > 10).count();
System.out.println(result);
Paradigmas de programación - Lenguajes lógicos
Lenguajes lógicos:
➔ Programación lógica es como decirle al ordenador lo que es verdad y las reglas
que debe seguir. Luego, le haces preguntas y él llega a conclusiones.
➔ No le das órdenes paso a paso, sino que dejas que el ordenador "piense" cómo
resolver el problema por sí mismo.
➔ El lenguaje Prolog es uno de los más conocidos para este tipo de programación.
Paradigmas de programación - Lenguajes lógicos
¿Qué es la programación reactiva?
La programación reactiva es un estilo de programación en el que los programas
reaccionan a los cambios que suceden en tiempo real. En lugar de que el programa
haga todo de forma lineal o secuencial, el programa "escucha" eventos o cambios
(como el clic de un botón, la llegada de un mensaje, o el cambio en los datos) y
responde automáticamente cuando ocurren.
En la programación reactiva, el programa está diseñado para estar pendiente de los
cambios o eventos. Cuando algo cambia, el programa reacciona automáticamente.
Esta forma de programar es muy útil para aplicaciones web modernas que necesitan
actualizarse en tiempo real sin que el usuario tenga que hacer nada extra.
Paradigmas de programación - Programación reactiva
Java, NO es un lenguaje de programación reactivo. Sin embargo, esto no significa
que no podamos crear programas reactivos en Java. Con Java 9, el JDK comienza
a admitir programación reactiva, proporcionando algunas clases e interfaces para
este propósito.
Dónde se usa la programación reactiva?
Este tipo de programación se usa mucho en aplicaciones web, especialmente
cuando queremos que el usuario vea los cambios en la pantalla sin tener que
actualizar la página o hacer alguna acción extra. Por ejemplo:
➔ Redes sociales: Cuando recibes notificaciones nuevas sin refrescar la página.
➔ Aplicaciones de chat: Cuando los mensajes aparecen en tu pantalla al instante.
➔ Aplicaciones financieras: Cuando los precios o gráficos cambian en tiempo real.
Paradigmas de programación - Programación reactiva
Lenguajes de programación más difundidos - JAVA
Características principales de Java:
➔ Lenguaje orientado a objetos.
➔ Java organiza el código en objetos, que son como piezas o bloques de
construcción.
➔ Multiplataforma ("escribe una vez, ejecuta en cualquier parte"), esto se
debe a que Java usa JVM (Máquina Virtual de Java).
➔ Es un lenguaje virtual interpretado.
➔ Está pensado para trabajar con redes y protocolos HTTP, FTP, TCP/IP
➔ Ofrece muchos aspectos de seguridad. Actualmente se trabaja en la
encriptación del código fuente para mayor seguridad.
Lenguajes de programación más difundidos - C Y C++
Lenguajes de programación más difundidos - C Y C++
➔ C++ permite a los programadores crear aplicaciones que van desde software de
sistemas hasta videojuegos y aplicaciones de alto rendimiento, gracias a su
capacidad para gestionar memoria y su flexibilidad.
Tipos de programación en C++
Admite múltiples paradigmas de programación, lo que lo convierte en un lenguaje versátil
para diferentes tipos de proyectos. Entre los principales estilos de programación que C++
soporta se encuentran:
➔ Programación orientada a objetos (POO): Con conceptos como clases, herencia y
polimorfismo, C++ permite estructurar el código en objetos, lo que facilita la
reutilización y el mantenimiento.
➔ Programación estructurada, como C, donde el código se organiza en funciones y
procedimientos.
➔ Programación genérica: A través de las plantillas, C++ permite crear código que
puede funcionar con diferentes tipos de datos, promoviendo la reutilización y la
flexibilidad.
Lenguajes de programación más difundidos - JAVASCRIPT
Los lenguajes más difundidos - PHP
MVC - MODELO - VISTA - CONTROLADOR
El MVC o Modelo-Vista-Controlador es un patrón de
arquitectura de software que, utilizando 3 componentes (Vistas,
Models y Controladores) separa la lógica de la aplicación de la
lógica de la vista en una aplicación.
Modelo Se encarga de los datos, generalmente (pero no
obligatoriamente) consultando la base de datos.
Actualizaciones, consultas, búsquedas, etc. todo eso va aquí,
en el modelo.
Controlador: Se encarga de... controlar, recibe las órdenes
del usuario y se encarga de solicitar los datos al modelo y de
comunicarles a la vista.
Vistas: Son la representación visual de los datos, todo lo que
tenga que ver con la interfaz gráfica va aquí. Ni el modelo ni el
controlador se preocupan de cómo se verán los datos, esa
responsabilidad es únicamente de la vista.