He creado una estructura de diapositivas detallada y profesional basada en el
contenido de tu trabajo sobre arquitecturas modernas y programación.
Presentación: Arquitecturas Modernas, Microservicios
y Programación Avanzada
Diapositiva 1: Portada
Título: Arquitecturas Modernas y Microservicios: El Nuevo Estándar del
Desarrollo de Software.
Subtítulo: De Monolitos a Sistemas Distribuidos y Alta Concurrencia.
Presentadores: Valeska Barrios, Yhadiel Díaz.
Profesor: José Toledo.
Institución: Universidad Nacional Experimental Rómulo Gallegos
(UNERG).
Fecha: Marzo, 2026.
Diapositiva 2: Introducción
Evolución: El software ha pasado de bloques monolíticos rígidos a
sistemas nativos en la nube, escalables y resilientes.
Objetivo de la exposición: Explorar el ecosistema de microservicios,
herramientas de comunicación (APIs, gRPC, Brokers), contenerización y
paradigmas de programación modernos.
Diapositiva 3: Arquitecturas Modernas y Microservicios
Definición: Enfoque cloud-native que prioriza la entrega continua y la
resiliencia.
Pilares:
Automatización: Infraestructura como código.
Elasticidad: Adaptación automática a la demanda.
Observabilidad: Monitoreo profundo en tiempo real.
¿Qué son los Microservicios? Conjunto de servicios pequeños,
autónomos y débilmente acoplados que realizan una función de negocio
única.
Diapositiva 4: De Monolitos a Microservicios
Analogía del Monolito: Un bloque sólido; cambiar una parte puede
afectar a toda la estructura.
Analogía de Microservicios: Una ciudad modular; se puede remodelar
una casa sin afectar al resto.
Ventajas: Escalabilidad independiente, agilidad tecnológica y mayor
resiliencia ante fallos.
Desafíos: Complejidad operativa, latencia de red y retos en la
consistencia de datos.
Diapositiva 5: Comunicación entre Servicios
RESTful APIs: El estándar síncrono basado en HTTP y JSON. Fácil de
implementar pero con mayor carga de texto.
gRPC: Framework de Google de alto rendimiento. Usa formato binario
(Protobuf) sobre HTTP/2, ideal para comunicación interna ultrarrápida.
Message Brokers (Asíncronos): El emisor envía un mensaje y
continúa su trabajo sin esperar respuesta.
RabbitMQ: Ideal para colas de tareas y entrega garantizada (ej.
envío de correos).
Apache Kafka: Plataforma de event streaming para procesar
millones de eventos y análisis en tiempo real.
Diapositiva 6: Contenerización y Orquestación
Docker: Permite empaquetar aplicaciones con todas sus dependencias
en "Contenedores" ligeros, garantizando que funcionen igual en
cualquier entorno.
Kubernetes (K8s): El "director de orquesta" que automatiza el
despliegue y escalado de cientos de contenedores.
Conceptos Clave de K8s: Pods (unidades mínimas), Nodos (máquinas),
Clusters y Despliegues auto-curativos.
Diapositiva 7: Paradigmas Modernos y Concurrencia
Concurrencia vs. Paralelismo:
Concurrencia: Gestionar múltiples tareas que progresan al
mismo tiempo (estructura).
Paralelismo: Ejecución física simultánea en múltiples núcleos de
CPU.
Programación Funcional:
Inmutabilidad: Los datos no cambian tras su creación,
eliminando errores de "condición de carrera".
Funciones de Orden Superior: Map, Filter y Reduce para código
declarativo y limpio.
Diapositiva 8: Manejo de Hilos y Seguridad en APIs
Hilos (Threads): Unidades de ejecución que comparten memoria;
riesgo de "Condiciones de Carrera".
Sincronización: Uso de Mutex (exclusión mutua) y Semáforos para
proteger el acceso a datos.
Seguridad en APIs:
JWT (JSON Web Tokens): Tokens sin estado firmados
digitalmente para autenticación eficiente.
OAuth2: Marco estándar para autorización segura.
Diapositiva 9: Diseño de APIs Avanzado
API-First Development: Definir la interfaz antes de programar para
facilitar el trabajo en paralelo.
GraphQL: Permite al cliente pedir solo los datos exactos que necesita,
evitando el over-fetching.
HATEOAS: Nivel avanzado de REST donde el servidor guía al cliente
mediante enlaces en cada respuesta.
Versionamiento: Estrategias por URI, parámetros o cabeceras para
evolucionar sin romper sistemas antiguos.
Diapositiva 10: Conclusión
La migración a sistemas distribuidos es esencial para la agilidad del
mercado actual.
La infraestructura como código (Docker/K8s) ha eliminado las barreras
entre desarrollo y operaciones.
El éxito depende de equilibrar modularidad, rendimiento y seguridad.
Reflexión final: Como futuros ingenieros, dominar estos patrones es
vital para liderar la innovación tecnológica.
República Bolivariana de Venezuela
Ministerio del Poder Popular Para La Educación
Universidad Nacional Experimental Rómulo Gallegos
Área de ingeniería de sistemas
Ingeniería en Informática
Materia: Lenguaje de Programación
Estado Guárico
Introducción a la programación y a sus
diversas características que influyen en el día
a día de la tecnología
Profesor: Estudiantes:
José Toledo Carlos Pérez C.I: 30.874.347
José Palma C.I: 30.811.305
Josriana Rojas C.I: 31.197.748
San Juan de los Morros, 24/04/2025
Introducción
En el presente trabajo se iniciará con una pequeña introducción a la
programación, la cual es una habilidad fundamental en el mundo digital
actual, donde la tecnología se encuentra en casi todos los aspectos de
nuestra vida cotidiana. Se comenzará con los fundamentos de la
programación, que abarcan desde la lógica básica y las estructuras de control
hasta las variables y los tipos de datos. Estos elementos son cruciales para
entender cómo se construyen y ejecutan los programas que son creados para
realizar tareas específicas u resolver problemas. Así mismo, nos
adentraremos en las estructuras de datos básicas, que son herramientas
fundamentales para organizar y manipular información de manera eficiente.
Se tocará el tema sobre listas (arrays), tuplas, diccionarios, operaciones con
cadenas, funciones, cómo crearlas, manipularlas, y en qué momento
utilizarlas. Finalmente, abordaremos el tema de la programación orientada a
objetos (POO), un paradigma que permite modelar el mundo real a través de
objetos y clases. Fomentando la reutilización de código para mayor
flexibilidad.
Unidad #1: Introducción a la Programación:
Para comenzar entendiendo un poco el tema primero necesitamos saber, ¿qué es
la programación?
La programación es el proceso de diseñar y construir un conjunto de instrucciones
que una computadora puede seguir para realizar tareas específicas o resolver
problemas. Estas instrucciones se escriben en lenguajes de programación, que
puede ser entendido por la máquina.
La programación implica varias etapas, estas son:
1)Análisis del problema: Comprender qué se necesita resolver.
2)Diseño: Planificar cómo se va a estructurar el programa y qué algoritmos se
utilizarán.
3)Codificación: Escribir el código en un lenguaje de programación (como Python,
Java, C++, entre otros).
4)Pruebas: Verificar que el programa funcione correctamente y corregir errores
(bugs).
5)Mantenimiento: Actualizar y mejorar el programa a lo largo del tiempo de uso.
La finalidad de la programación es crear software, que puede incluir aplicaciones,
sistemas operativos, juegos y más. Esta es fundamental en la era digital actual, ya
que permite automatizar tareas, analizar datos y desarrollar tecnologías
innovadoras.
•Conceptos básicos: Algoritmos, programas, lenguajes de
programación
*Algoritmos:
Los algoritmos podrían decirse que son los planos para programar algo, es decir,
son secuencias de pasos o instrucciones bien definidas que se utilizan para
resolver problemas o realizar tareas específicas. Se pueden considerar como un
conjunto de reglas o procedimientos que guían la toma de decisiones y la
ejecución de acciones en un orden determinado. Los algoritmos permiten a las
computadoras procesar datos y ejecutar operaciones de manera eficiente.
Ejemplos con tipos de algoritmos:
-Algoritmos de búsqueda: Para encontrar un elemento en una lista (array).
-Algoritmos de ordenamiento: Para organizar elementos en un cierto orden (como
el algoritmo de orden alfabético, ascendente o descendiente.
-Algoritmos matemático: El cálculo de la factorial de un número
*Programas:
Los programas son conjuntos de instrucciones (algoritmos) escritas en un lenguaje
de programación que indican a una computadora cómo realizar tareas específicas.
Estos pueden variar en complejidad y propósito, desde aplicaciones simples, como
calculadoras, hasta sistemas operativos completos que gestionan el hardware y
software de un dispositivo.
Los programas se componen de código fuente, que es el texto legible por
humanos, y se traducen a código máquina para que la computadora pueda
ejecutarlos.
Existen diferentes tipos de programas, incluyendo los siguientes, acompañados de
unos cuantos ejemplos:
-Aplicaciones: Diseñado para realizar tareas específicas para el usuario (por
ejemplo, procesadores de texto, navegadores web).
-Sistemas operativos: Programas que gestionan los recursos del hardware y
permiten la ejecución de otras aplicaciones a través de una interfaz de usuario
(por ejemplo, Windows, macOS, Linux).
-Utilidades: Herramientas que realizan tareas de mantenimiento o gestión del
sistema (por ejemplo, antivirus, desfragmentadores, limpieza de espacio de
almacenamiento).
-Lenguajes de programación: Herramientas utilizadas para escribir programas (por
ejemplo, Python, JavaScript).
*Lenguajes de programación:
Los lenguajes de programación son sistemas de comunicación que permiten a los
programadores escribir instrucciones que una computadora puede entender y
ejecutar. Estos lenguajes se utilizan para desarrollar software, aplicaciones, sitios
web y otros sistemas informáticos. Estos se clasifican de la siguiente manera:
-Lenguajes de bajo nivel: Se acercan más al lenguaje máquina y permiten un
control más directo sobre el hardware. Por ejemplo: Lenguaje Ensamblador).
-Lenguajes de alto nivel: Son más abstractos y fáciles de usar, permitiendo a los
programadores escribir código más legible y comprensible (ejemplo: Python, Java,
C++, JavaScript).
-Lenguajes interpretados vs. compilados: Aparte de los lenguajes de bajo y alto
nivel, existen los compilados y los interpretados. Estos lenguajes interpretados son
ejecutados línea por línea por un intérprete (ejemplo: JavaScript), mientras que los
compilados son transformados en código máquina antes de su ejecución (ejemplo:
C). Variando mucho en que el interpretado es muy útil para corregir un error de
manera flexible y en tiempo real, parecido a una metodología ágil. En cambio, el
compilado tienes que volver atrás para corregir correctamente el error, algo
parecido a una metodología lineal.
•Historia y evolución de los lenguajes de programación
La evolución de los lenguajes de programación continúa adaptándose a las
necesidades cambiantes del desarrollo tecnológico, reflejando avances en
hardware, metodologías ágiles y nuevas áreas como inteligencia artificial y big
data.
A continuación, se muestra una resumida línea de tiempo de la evolución de los
lenguajes de programación con el paso del tiempo:
•Década inicial de los primeros lenguajes (1940-1950)
-Lenguaje Máquina: Los primeros programas se escribían en código binario,
directamente en lenguaje máquina, lo que era extremadamente tedioso y
propenso a errores.
-Ensamblador: Se desarrollaron lenguajes ensambladores que permitían usar
mnemotécnicos para representar instrucciones en lugar de números binarios.
Facilitando un poco la escritura y comprensión de los códigos.
•Década inicial de los lenguajes de alto nivel (1950-1960):
-FORTRAN (1957): Desarrollado por IBM, fue uno de los primeros lenguajes de
programación de alto nivel, diseñado para cálculos científicos y matemáticos.
-LISP (1958): Creado por John McCarthy, se convirtió en el lenguaje principal para
la inteligencia artificial.
-COBOL (1959): Diseñado para aplicaciones comerciales, enfatizando la
legibilidad y el manejo de datos.
•Década de desarrollo y diversificación (1960-1970):
-ALGOL: Introdujo conceptos como la estructura de control y fue influyente en el
desarrollo posterior de muchos lenguajes.
-PL/I: Un intento por combinar las capacidades de FORTRAN y COBOL.
-Simula (1967): Introdujo conceptos fundamentales sobre la programación
orientada a objetos.
•Década para la programación orientada a objetos (1970-1980):
-Smalltalk: Uno de los primeros lenguajes puramente orientados a objetos (POO),
influyó en muchos lenguajes posteriores.
-C (1972): Desarrollado por Dennis Ritchie, se convirtió en un lenguaje
fundamental para sistemas operativos y aplicaciones debido a su eficiencia.
•Década de los lenguajes modernos y paradigmas nuevos (1980-1990):
-C++: Una extensión del lenguaje de programación C que incorporó características
orientadas a objetos (POO).
-Pascal: Utilizado principalmente en educación para enseñar conceptos básicos de
programación.
•La década de la era del internet y lenguajes dinámicos (1990-2000)
-Java (1995): Diseñado para ser portable entre plataformas; su lema "escribir una
vez, ejecutar en cualquier lugar" lo hizo popular para aplicaciones web.
-JavaScript: Creado inicialmente para agregar interactividad a las páginas web; se
ha convertido en uno de los lenguajes más utilizados gracias a su flexibilidad del
desarrollo web.
•Actualidad de lenguajes funcionales y nuevas tendencias (2000-
Presente)
-Python: Ganó popularidad por su simplicidad y versatilidad; utilizado tanto en
desarrollo web como en ciencia de datos e inteligencia artificial, siendo hoy en día
uno de los lenguajes más utilizados.
-Ruby on Rails: Un marco que popularizó Ruby como un lenguaje fácil para
desarrollar aplicaciones web rápidamente.
-La aparición del aprendizaje automático que ha llevado al uso intensivo de
Python, R y Julia.
-El auge del desarrollo móvil que ha impulsado el uso de Swift para iOS y Kotlin
para Android.
•Entornos de desarrollo integrado (IDEs)
Los Entornos de Desarrollo Integrado (IDEs, por sus siglas en inglés) son
aplicaciones que proporcionan herramientas completas para facilitar el desarrollo
de software. Un IDE combina varias funcionalidades en una sola interfaz, lo que
permite a los programadores escribir, depurar y compilar código de manera más
eficiente.
*Componentes y características clave de los IDEs:
-Editor de Código: Proporciona resaltado de sintaxis, autocompletado y
sugerencias para facilitar la escritura del código.
-Compilador/Intérprete: Permite traducir el código fuente a un lenguaje que la
máquina pueda entender, ya sea compilando o interpretando el código.
-Depurador: Permite a los desarrolladores ejecutar su código paso a paso,
establecer puntos de interrupción y examinar variables para identificar errores.
-Gestión de Proyectos: Facilita la organización de archivos y recursos del
proyecto, permitiendo una mejor estructura y acceso a los mismos.
-Integración con Control de Versiones: Permite gestionar cambios en el código
fuente mediante sistemas como Git, facilitando la colaboración entre varios
desarrolladores.
-Interfaz Gráfica: Muchos IDEs ofrecen interfaces gráficas para diseñar
aplicaciones visualmente, especialmente útiles en desarrollo web o aplicaciones
móviles.
-Plugins y Extensiones: Muchos IDEs permiten personalizar su funcionalidad
mediante complementos que añaden características adicionales según las
necesidades del desarrollador.
*Ejemplos:
Ejemplos populares de IDEs pueden incluir a Visual Studio, Eclipse, IntelliJ IDEA y
PyCharm. La elección del IDE adecuado depende del lenguaje de programación
utilizado, las preferencias personales del desarrollador y las características
específicas requeridas para el proyecto en cuestión.
Unidad #2 - Fundamentos de la Programación:
La programación es el proceso de diseñar y construir un conjunto de instrucciones
(Algoritmos) para que un dispositivo realice tareas específicas, normalmente
siendo una solución a un problema. Estos fundamentos son esenciales para
cualquier lenguaje de programación.
•Variables y Tipos de Datos
*Variables: Son palabras que se pueden utilizar para almacenar datos dentro de la
memoria. Cada variable tiene un nombre que la identifica, y puede contener
diferentes tipos de valores.
•Tipos de Datos:
*Enteros (int): Números sin decimales, como -1, 0, 42.
*Flotantes (float): Números con decimales, como 3.14, -0.001, 2.0
*Cadenas (string): Secuencia de caracteres, como "Hola", "123", "Hola Mundo".
*Booleanos (boolean): Representan valores que se basan en una decisión, es
decir, True o False (verdadero o falso).
•Operadores Aritméticos, Lógicos y Relacionales
*Operadores Aritméticos: Se utilizan para realizar operaciones matemáticas
básicas, pueden variar según el lenguaje de programación. Algunos ejemplos son
los siguientes:
-Suma (+)
-Resta (-)
-Multiplicación (*)
-División (/)
-Módulo (%): Devuelve el residuo de una división.
*Operadores Lógicos: Se utilizan para combinar expresiones booleanas y están
son:
-AND ("y", "&&", conjunción): Verdadero si ambas expresiones son verdaderas.
-OR ("o", "||", disyunción): Verdadero si al menos una expresión es verdadera.
-NOT (¡negación, “! o !!"): Invierte el valor de verdad de una expresión.
•Operadores Relacionales:
Se utilizan para comparar valores, ellos son:
-Igualdad (==)
-Desigualdad (! =)
-Mayor que (>)
-Menor que (<)
-Mayor o igual que (>=)
-Menor o igual que (<=)
•Estructuras de Control
*Condicionales: Permiten tomar decisiones en función de ciertas condiciones.
-if (sí): Ejecuta un proceso sí la condición establecida se cumple.
-else (sino): Ejecuta un proceso sí la condición establecida en el if no se cumple.
*elif (sino sí): Se utiliza para comprobar múltiples condiciones.
Ejemplo:
var numero=5;
if(numero>4) {
[Link]("Hola mundo");
}
else {
[Link]("Numero menor a 4");
};
En este caso se muestra un ejemplo basado en JavaScript. Sí la variable "numero"
tiene un valor mayor a 4 se muestra el mensaje "Hola mundo", sí no se cumple la
condición se muestra el mensaje "Número menor a 4".
•Bucles:
Permiten repetir un bloque de código varias veces.
*for (para): Se utiliza para repetir un proceso en caso de cumplirse una condición.
Ejemplo:
for(i=1;i<=5;i++){
[Link]("Hola ",i);
};
En este caso se utiliza un contador i con valor inicial de 1, el cual se detendrá al
llegar a valor 5, y su valor irá aumentando de 1 en 1 cada vez que se muestre el
mensaje "Hola" y el valor del contador en ese momento. Es decir, "Hola 1", "Hola
2", y así sucesivamente.
*while (mientras): Repite un proceso mientras que se siga cumpliendo una
condición.
Ejemplo:
var contador = 1;
while(contador <= 5){
[Link]("Procede", contador);
contador++;
};
Se mostrará el mensaje "Procede" acompañado del valor del contador en esa
repetición, siempre y cuando la variable contador tenga valor menor o igual 5.
•Entrada y Salida de Datos
Entrada de Datos: Se refiere a cómo se reciben datos del usuario o de otras
fuentes. En Python, se puede utilizar la función input() para recibir datos desde la
consola.
*Salida de Datos: Se refiere a cómo se muestran datos al usuario.
Unidad #3 - Estructuras de Datos Básicas:
Las estructuras de datos son formas de organizar y almacenar datos de manera
eficiente para que puedan ser accedidos y modificados fácilmente. Las estructuras
de datos básicas son los bloques de construcción fundamentales para estructuras
más complejas.
•Listas (Arrays)
Una lista (o array) es una estructura de datos lineal que almacena una colección
de elementos del mismo tipo (en lenguajes de tipado estático como C++ o Java) o
de diferentes tipos (en lenguajes dinámicos como Python). Los elementos en una
lista están ordenados y se acceden mediante un índice numérico [n] que
generalmente comienza desde 0.
•Creación de Listas (Arrays)
La forma de crear una lista varía según el lenguaje de programación. En este caso
se usará un lenguaje basado en JavaScript:
var lista = [ ];
// Lista con elementos iniciales
var MiLista = [10, 20, 30, 40, 50];
var OtraLista = ["rojo, verde, azul"];
var ListaMixta = [100, "mundo", 2.71, false];
[Link](ListaMixta)
En este caso se crearon tres listas con valores ingresados. Así mismo se muestra
en pantalla el contenido de la última lista llamada "ListaMixta", la cual contiene los
valores "100, mundo, 2.71, y false"
•Acceso a Elementos de una Lista (Array)
Los elementos de una lista se acceden utilizando su valor de índice [n].
Normalmente comenzando con un valor 0
Ejemplo:
var MiLista = [100, 200, 300, 400, 500];
var primerElemento = MiLista[0]; // Accede al elemento en el índice 0 (valor: 100)
var cuartoElemento = MiLista[3]; // Accede al elemento en el índice 3 (valor: 400)
var ultimoElemento = MiLista[[Link] - 1]; // Accede al último elemento
(valor: 500)
[Link]('Primer elemento:', primerElemento);
[Link]('Cuarto elemento:', cuartoElemento);
[Link]('Último elemento:', ultimoElemento);
•Manipulación de Listas (Arrays)
La manipulación de listas (arrays) implica modificar su contenido, ya sea
agregando, eliminando o actualizando elementos.
Ejemplo:
var MiLista = [10, 20, 30];
// Agregar elementos
[Link](40); // Agrega al final: [10, 20, 30, 40]
[Link](1, 0, 15); // Inserta en el índice 1 (sin eliminar nada): [10, 15, 20, 30,
40]
[Link]([50, 60]); // Crea un nuevo array con la concatenación: [10, 15, 20,
30, 40, 50, 60] (no modifica el original)
// Eliminar elementos
delete MiLista[0]; // Elimina el elemento, dejando un “hueco” (undefined):
[undefined, 15, 20, 30, 40, 50, 60]
[Link](0, 1); // Elimina 1 elemento desde el índice 0: [15, 20, 30, 40, 50,
60]
[Link](); // Elimina y devuelve el último: [15, 20, 30, 40, 50]
[Link](); // Elimina y devuelve el primer elemento: [20, 30, 40, 50]
[Link](MiLista)
// Actualizar elementos
MiLista[0] = 25; // Cambia el valor en el índice 0: [25, 30, 40, 50]
[Link](MiLista);
•Aspectos importantes a considerar:
*Indexación Base Cero: La mayoría de los lenguajes de programación utilizan una
indexación o valor inicial de array que comienza en 0.
*Tamaño Fijo vs. Dinámico: En algunos lenguajes (como C++ y Java para arrays
nativos), el tamaño de un array se define al crearlo y no se puede cambiar
fácilmente. Otros lenguajes (como Python y JavaScript) ofrecen listas o arrays
dinámicos que pueden crecer o reducirse según sea necesario.
•Tuplas:
Una tupla es una estructura de datos secuencial e inmutable. Esta se clasifica en
dos formas:
-Secuencial: Los elementos dentro de una tupla mantienen un orden específico, y
se puede acceder a ellos mediante un índice.
-Inmutable: Una vez que se crea una tupla, no se pueden modificar sus elementos
(no se pueden agregar, eliminar o cambiar elementos).
Las tuplas son útiles para representar colecciones de elementos que no deberían
cambiar, como coordenadas, registros o configuraciones.
•Creación de Tuplas
Las tuplas se crean utilizando paréntesis () y separando los elementos con comas.
Ejemplo:
// Simulación de una tupla con un array (sin inmutabilidad forzada) en javascript
var EjemploTupla = [10, 20, 30];
•Acceso a Elementos de una Tupla
Los elementos de una tupla se acceden de manera similar a las listas (arrays),
utilizando su índice (que comienza en 0).
Ejemplo:
var TuplaEjemplo = [100, 200, 300];
var SegundoElemento = TuplaEjemplo[1]; // Accede al elemento en el índice 0 o
posición "1" (valor: 100)
[Link]('Elemento seleccionado:', SegundoElemento);
En este ejemplo de javascript declaramos en una variable el elemento que vamos
a mostrar, en este caso es el elemento de la posición 2 o índice "1" (el 200). A
continuación, lo mostramos en pantalla
•Manipulación de Tuplas
Debido a su inmutabilidad, las tuplas no se pueden manipular directamente
después de su creación. No hay métodos para agregar, eliminar o modificar
elementos. Sin embargo, se pueden realizar las siguientes operaciones:
*Crear una nueva tupla: Se puede crear una nueva tupla basada en tuplas
existentes mediante concatenación.
*Desempaquetado: Los elementos de una tupla se pueden asignar a variables
individuales.
Ejemplo:
Como se usan arrays, se pueden realizar operaciones de manipulación de arrays,
pero esto iría en contra de la idea de una tupla inmutable.
var EjemploTupla = [10, 20, 30];
// [Link](40); // Esto modificaría el array
// var NuevoEjemploTupla = [EjemploTupla, 40]; // Se podría crear un nuevo array
•Diccionarios
Un diccionario (también conocido como mapa, tabla hash o arreglo asociativo) es
una estructura de datos que almacena pares clave-valor. A diferencia de las listas
o tuplas, los elementos en un diccionario no están ordenados por un índice
numérico, sino que se acceden utilizando sus claves. Las claves deben ser únicas
dentro de un diccionario.
Creación de Diccionarios: Los diccionarios se crean utilizando llaves {} y
separando los pares clave-valor con dos puntos:
Ejemplo:
JavaScript utiliza objetos ( {} ) para almacenar colecciones de pares clave-valor.
// Objeto vacío
var ObjetoVacio = {};
// Objeto con propiedades iniciales
var MiObjeto = { nombre: "María", edad: 25, pais: "Venezuela" };
var OtroObjeto = { 1: "one", 2: "two", 3: "three" };
•Acceso a Elementos de un Diccionario
Los elementos de un diccionario se acceden utilizando su clave.
Ejemplo:
var miObjeto = { nombre: "María", edad: 25 };
var nombre = miObjeto["nombre"]; // Accede usando notación de corchetes
var edad = [Link]; // Accede usando notación de punto
[Link]("Nombre:", nombre, "Edad:", edad);
// Si la clave no existe, devuelve undefined
var ciudad = [Link];
[Link]("Ciudad:", ciudad);
•Manipulación de Diccionarios
Los diccionarios son estructuras de datos mutables, lo que permite agregar,
eliminar y actualizar pares clave-valor.
Ejemplo:
var miObjeto = { nombre: "María", edad: 25 };
// Agregar o actualizar una propiedad
[Link] = "Venezuela";
miObjeto["edad"] = 26;
// Eliminar una propiedad
delete [Link];
[Link](miObjeto);
•Cuándo usar Diccionarios
Para almacenar datos que se acceden por una clave única en lugar de un índice.
Para representar relaciones entre pares de información. En situaciones donde la
búsqueda eficiente de valores basada en una clave es importante. Para
implementar estructuras de datos más complejas como grafos o tablas.
Cadenas de Caracteres (Strings): Una cadena de caracteres, o string, es una
secuencia ordenada de caracteres. Estos caracteres pueden ser letras, números,
símbolos o espacios en blanco. Aunque en algunos lenguajes las cadenas pueden
ser tratadas como arrays de caracteres, a menudo tienen sus propias operaciones
y métodos específicos.
•Creación de Cadenas de Caracteres
La forma de crear cadenas de caracteres varía ligeramente entre lenguajes:
Ejemplo:
var cadenaSimple = "Hola, JavaScript!";
var otraCadena = 'También puedo usar comillas simples.';
var plantillaLiteral = `Esto permite interpolación: ${1 + 1} `;
•Operaciones Básicas con Cadenas:
Las cadenas de caracteres admiten varias operaciones fundamentales:
*Concatenación: Combinar dos o más cadenas para formar una nueva cadena.
*Longitud: Obtener el número de caracteres en una cadena.
*Acceso por Índice: Acceder a un carácter específico dentro de la cadena
utilizando su posición (índice).
*Slicing (Subcadenas): Extraer una porción de una cadena para crear una nueva
subcadena.
Ejemplo:
var cadena1 = "Hola";
var cadena2 = "JavaScript";
// Concatenación
var resultado = cadena1 + ", " + cadena2 + "!";
[Link](resultado); // Salida: Hola, JavaScript!
// Longitud
var longitud = [Link];
[Link](` Longitud: ${longitud}`); // Salida: Longitud: 17
// Acceso por índice
var primerCaracter = resultado[0];
var septimoCaracter = resultado[6];
var ultimoCaracter = resultado[[Link] - 1];
[Link](` Primer carácter: ${primerCaracter}`); // Salida: Primer carácter: H
[Link](` Séptimo carácter: ${septimoCaracter}`); // Salida: Séptimo carácter: J
[Link](` Último carácter: ${ultimoCaracter}`); // Salida: Último carácter: ¡
// Slicing (substring, slice)
var subcadena1 = [Link](0, 4); // Desde el índice 0 hasta el 4 (sin incluir)
var subcadena2 = [Link](6); // Desde el índice 6 hasta el final
var subcadena3 = [Link](0, 5); // Similar a slice para índices positivos
var subcadena4 = [Link](6); // Similar a slice para el resto
[Link](` Subcadena 1: ${subcadena1}`); // Salida: Subcadena 1: Hola
[Link](` Subcadena 2: ${subcadena2}`); // Salida: Subcadena 2: JavaScript!
[Link](` Subcadena 3: ${subcadena3}`); // Salida: Subcadena 3: Hola,
[Link](` Subcadena 4: ${subcadena4}`); // Salida: Subcadena 4: JavaScript!
•Manipulación de Cadenas
Además de las operaciones básicas, las cadenas ofrecen una amplia gama de
métodos para su manipulación:
Cambio de Caso: Convertir a mayúsculas o minúsculas.
*Eliminación de Espacios en Blanco: Remover espacios al principio y/o al final.
*Búsqueda: Encontrar la posición de una subcadena o carácter.
*Reemplazo: Sustituir una subcadena por otra.
*División (Splitting): Dividir una cadena en una lista de subcadenas basadas en un
delimitador.
*Unión (Joining): Unir una lista de cadenas en una sola cadena con un separador.
Ejemplo:
var cadena = " Ejemplo de Cadena ";
// Cambio de caso
var mayusculas = [Link]();
var minusculas = [Link]();
[Link](` Mayúsculas: '${mayusculas}'`); // Salida: Mayúsculas: ' EJEMPLO
DE CADENA '
[Link](` Minúsculas: '${minusculas}'`); // Salida: Minúsculas: ' ejemplo de
cadena '
// Eliminación de espacios en blanco
var sinEspaciosInicioFin = [Link]();
var sinEspaciosInicio = [Link]();
var sinEspaciosFin = [Link]();
[Link](` Sin espacios (inicio/fin): '${sinEspaciosInicioFin}'`); // Salida: Sin
espacios (inicio/fin): 'Ejemplo de Cadena'
[Link](` Sin espacios (inicio): '${sinEspaciosInicio}'`); // Salida: Sin
espacios (inicio): 'Ejemplo de Cadena '
[Link](` Sin espacios (fin): '${sinEspaciosFin}'`); // Salida: Sin espacios
(fin): ' Ejemplo de Cadena'
// Búsqueda
var indice = [Link]("de");
[Link](Índice de 'de': ${indice}); // Salida: Índice de 'de': 10
var indiceNoEncontrado = [Link]("xyz");
[Link](` Índice de 'xyz': ${indiceNoEncontrado}`); // Salida: Índice de 'xyz': -1
// Reemplazo
var nuevaCadena = [Link]("Cadena", "Texto");
[Link](` Cadena reemplazada: '${nuevaCadena}'`); // Salida: Cadena
reemplazada: ' Ejemplo de Texto '
// División
var listaPalabras = [Link](" ");
[Link](` Lista de palabras: ${listaPalabras}`); // Salida: Lista de palabras:
['Ejemplo', 'de', 'Cadena']
// Unión
var palabras = ["Esto", "es", "una", "frase"];
var fraseUnida = [Link](" ");
[Link](` Frase unida: '${fraseUnida}'`); // Salida: Frase unida: 'Esto es una
frase'
•Funciones Definición
Una función es un bloque de código con un nombre asociado que realiza una
tarea específica. Puede recibir datos (a través de parámetros) y puede devolver un
resultado (un valor de retorno).
*Nombre: Un identificador único para la función, que se utiliza para llamarla o
invocarla.
*Parámetros (opcional): Variables que reciben los datos de entrada cuando se
llama a la función.
*Cuerpo: El bloque de código que contiene las instrucciones que se ejecutarán
cuando se invoque la función.
*Valor de Retorno (opcional): El resultado que la función puede devolver después
de su ejecución.
Ejemplo:
// Declaración de función (function declaration)
function nombreDeLaFuncion(parametro1, parametro2) {
// Cuerpo de la función
var resultado = algunaOperacion;
return resultado; // Opcional: devuelve un valor
}
// Expresión de función (function expression)
const otraFuncion = function(parametroA, parametroB) {
// Cuerpo de la función
return parametroA + parametroB;
};
// Función de flecha (arrow function) – sintaxis más concisa
const funcionFlecha = (parametroX, parametroY) => {
return parametroX * parametroY;
};
// Si la función solo tiene una expresión de retorno, se puede omitir el ‘return’ y
las llaves
const funcionFlechaCorta = (a, b) => a - b;
•Parámetros
Los parámetros son variables que se declaran en la definición de una función y
que actúan como “marcadores de posición” para los valores que se pasarán a la
función cuando se la invoque.
•Parámetros Formales
Son los nombres de las variables listadas en la definición de la función. En los
ejemplos anteriores, parametro1, parametro2, numero1, numero2, a, b, nombre
son parámetros formales de ese código.
•Argumentos (o Parámetros Actuales)
Son los valores reales que se pasan a la función cuando se la llama.
•Tipos de Parámetros
Los lenguajes de programación pueden soportar diferentes tipos de parámetros:
*Parámetros Posicionales: Los argumentos se asocian a los parámetros en
función de su orden. En el ejemplo anterior, 5 se asigna a x y 3 a y por su
posición.
*Parámetros con Valores por Defecto: Se especifica un valor predeterminado para
un parámetro en la definición de la función. Si no se proporciona un argumento
para ese parámetro durante la llamada, se utiliza el valor por defecto.
*Parámetros Nombrados (o por Palabra Clave): Al llamar a la función, se
especifica el nombre del parámetro seguido del signo igual (=) y el valor. Esto
permite pasar los argumentos fuera de orden y mejora la legibilidad.
*Número Variable de Argumentos: Algunas funciones pueden aceptar un número
variable de argumentos.
Ejemplo:
function multiplicarTodos(factor, ...numeros) {
return [Link](num => num * factor);
}
[Link](multiplicarTodos(2, 5, 10, 15)); // Salida: [ 10, 20, 30 ]
•Retorno de Valores
Una función puede devolver un valor (o múltiples valores) al código que la llamó
utilizando la instrucción return. El tipo de valor que se retorna debe coincidir con el
tipo de retorno declarado en la definición de la función (en lenguajes con tipado
estático como Java y C++). Si una función no tiene una instrucción return explícita
(o si se ejecuta un return sin ningún valor), a menudo se considera que retorna un
valor nulo o undefined.
Ejemplo:
function calcularAreaRectangulo(base, altura) {
return base * altura;
}
let area = calcularAreaRectangulo(10, 5);
[Link](` Área: ${area}`); // Salida: Área: 50
function obtenerInformacionUsuario(id) {
if (id === 1) {
return { nombre: "Pedro", email: "pedro@[Link]" }; // Retorna un objeto
} else {
return null; // Retorna un valor nulo
}
}
let usuario = obtenerInformacionUsuario(1);
[Link](usuario); // Salida: { nombre: ‘Pedro’, email: ‘pedro@[Link]’ }
En conclusión: Las funciones son bloques de código reutilizables que pueden
recibir datos a través de parámetros y devolver resultados mediante la instrucción
return. Su correcta definición y uso son esenciales para escribir código limpio,
organizado y eficiente.
Unidad #4: Programación Orientada a Objetos (OOP):
La POO es ampliamente utilizada en muchos lenguajes de programación
modernos, como Java, C++, Python, Ruby, entre otros, debido a su capacidad
para organizar el código de manera más intuitiva y modular, facilitando su
mantenimiento y escalabilidad.
•Conceptos básicos (Clases, objetos, herencia, polimorfismo)
*Clases: Es una plantilla o modelo que define las propiedades (atributos) y
comportamientos (métodos) que tendrán los objetos creados a partir de ella. Por
ejemplo: Animales
*Objetos: Es una instancia de una clase. Cada objeto tiene su propio estado y
puede interactuar con otros objetos. Por ejemplo: Un teléfono
*Herencia: Permite crear nuevas clases basadas en clases existentes, heredando
sus atributos y métodos. Esto promueve la reutilización del código y establece una
jerarquía entre clases. Por ejemplo: Un padre que hereda ciertas características a
su hijo (Color de cabello, color de ojos, color de piel
*Polimorfismo: Es la capacidad de diferentes clases para ser tratadas como
instancias de la misma clase a través de una interfaz común, permitiendo que un
mismo método se comporte de diferentes maneras según el objeto que lo invoque.
Por ejemplo: Una clase Mascota con un metodo de Saludar. Tenemos un perro y
un gato, ambos pueden cumplir el metodo de saludar a su dueño, pero el perro
saluda con un guau, y el gato con un miau.
•Creación y manipulación de objetos
•Creación de Objetos
En la programación orientada a objetos, un objeto es una instancia de una clase.
Una clase es como un plano que define las propiedades (atributos) y
comportamientos (métodos) que tendrán los objetos creados a partir de ella.
•Manipulación de Objetos
Una vez que has creado un objeto, puedes manipular sus atributos y llamar a sus
métodos. Esto incluye:
-Acceder y modificar atributos: Puedes acceder a los atributos directamente
usando la notación de punto (.).
-Llamar métodos: Puedes invocar métodos definidos en la clase para realizar
acciones específicas.
Ejemplo de creación y manipulación de objeto en JavaScript:
// Creación de un objeto persona
let persona = {
nombre: "Juan",
edad: 30,
ciudad: "Madrid"
};
// Mostrar el objeto original
[Link]("Objeto original:", persona);
// Acceder a propiedades del objeto
[Link]("Nombre:", [Link]);
[Link]("Edad:", [Link]);
// Modificar una propiedad del objeto
[Link] = 31;
[Link]("Edad actualizada:", [Link]);
// Agregar una nueva propiedad al objeto
[Link] = "Ingeniero";
[Link]("Objeto después de agregar profesión:", persona);
// Eliminar una propiedad del objeto
delete [Link];
[Link]("Objeto después de eliminar ciudad:", persona);
// Método para mostrar información sobre la persona
[Link] = function() {
[Link](` Hola, soy ${[Link]} y tengo ${[Link]} años.`);
};
// Llamar al método creado
[Link]();
•Encapsulamiento y abstracción
•Encapsulamiento:
El encapsulamiento se refiere al principio de ocultar los detalles internos de una
clase y exponer solo lo necesario a través de una interfaz pública. Esto significa
que los atributos (datos) y métodos (funciones) de una clase están protegidos de
accesos no autorizados, lo que ayuda a prevenir modificaciones indeseadas y
errores.
•Abstracción:
La abstracción es el proceso de simplificar un sistema complejo al enfocarse en
las características esenciales mientras se ignoran los detalles innecesarios. En
POO, esto se logra mediante el uso de clases e interfaces que representan
conceptos del mundo real sin entrar en detalles sobre cómo funcionan
internamente.
Ejemplo de encapsulamiento y abstracción:
class CuentaBancaria {
// Propiedad privada
#saldo;
constructor() {
this.#saldo = 0; // Inicia el saldo con un valor en 0
}
// Método para depositar dinero
depositar(cantidad) {
if (cantidad > 0) {
this.#saldo += cantidad;
[Link](Se han depositado $${cantidad}. Nuevo saldo: $${this.#saldo});
} else {
[Link]("La cantidad a depositar debe ser mayor que cero.");
}
}
// Método para retirar dinero
retirar(cantidad) {
if (cantidad > 0 && cantidad <= this.#saldo) {
this.#saldo -= cantidad;
[Link](Se han retirado $${cantidad}. Nuevo saldo: $${this.#saldo});
} else {
[Link]("Fondos insuficientes o cantidad inválida.");
}
}
// Método para consultar el saldo (abstracción)
consultarSaldo() {
return El saldo actual es: $${this.#saldo};
}
}
// Uso de la clase CuentaBancaria
const miCuenta = new CuentaBancaria();
[Link](100); // Deposita 100
[Link](50); // Retira 50
[Link]([Link]()); // Muestra el saldo actual
•Lenguaje de Programación Sugerido:
*Python: por su sintaxis sencilla y amplia aplicabilidad:
Creado por Guido van Rossum. Python es un lenguaje de programación de alto
nivel conocido por su sintaxis sencilla y clara, lo que facilita su aprendizaje y uso,
especialmente para principiantes. Su diseño enfatiza la legibilidad del código, lo
que permite a los desarrolladores escribir programas de manera más rápida y
eficiente.
Ejemplo de Hola Mundo en Python: print("Hola Mundo")
*Java: por su robustez y uso en aplicaciones empresariales:
Creado por James Gosling. Java es un lenguaje de programación de propósito
general, orientado a objetos y diseñado para ser robusto, seguro y portátil. La
robustez del lenguaje Java junto con su versatilidad y capacidad para manejar
aplicaciones empresariales complejas lo convierten en una opción preferida para
muchas organizaciones alrededor del mundo.
Ejemplo de Hola Mundo en Java:
public class HolaMundo {
public static void main(String[] args) {
[Link]("Hola, Mundo!");
}
}
*C++: por su rendimiento y uso en programación de sistemas:
Creado por Bjarne Stroustrup. C++ es un lenguaje de programación de propósito
general que se destaca por su rendimiento y eficiencia, combina características
avanzadas con un alto rendimiento, lo que lo convierte en una herramienta
poderosa para desarrolladores que trabajan en programación de sistemas. Su
capacidad para manejar tareas complejas con eficiencia ha asegurado su
relevancia continua en el campo del desarrollo software moderno. Todo esto lo
convierte en una opción popular para la programación de sistemas.
Ejemplo de Hola Mundo en C++:
#include <iostream>
int main ()
{
std::cout << "Hola, mundo";
return 0;
}
Conclusión
En conclusión, el presente trabajo quiere dar a entender lo importante que
es La introducción a la programación y los fundamentos de la programación,
siendo esenciales para desarrollar habilidades que permitan resolver
problemas de manera eficiente y estructurada. A través del estudio de las
estructuras de datos básicas, los programadores aprenden a organizar y
manipular la información de manera efectiva, lo que es crucial para el
rendimiento de cualquier aplicación. La programación orientada a objetos,
por su parte, proporciona un enfoque modular y reutilizable que facilita el
mantenimiento y la escalabilidad del código.
En conjunto, estos conceptos forman la base sobre la cual se construyen
aplicaciones complejas y se desarrollan soluciones innovadoras.