Saltar al contenido
LaPlazaFija

Este temario no se imprime

El temario de LaPlazaFija se estudia en la web, sección a sección, con tu progreso al lado. Si quieres practicar en papel, usa el cuadernillo de Simulacros oficiales: está hecho para imprimirse, con el formato del examen real.

E15

Lenguajes: C/C++, Java, Python

DES

Cuatro lenguajes comparados: C y su gestión manual de memoria, C++ y la POO, Java y su máquina virtual, y Python, con la sintaxis que suele caer.

En este tema · 10 secciones
  1. Objetivos
  2. Sección 1 · Panorama comparativo
  3. Sección 2 · C
  4. Sección 3 · C++
  5. Sección 4 · Java
  6. Sección 5 · Python
  7. Errores frecuentes
  8. Resumen exprés
  9. Esquema de repaso
  10. Mapa mental del tema

Objetivos

Al terminar este tema sabrás: (1) comparar C, C++, Java y Python (paradigma, tipado, compilación, gestión de memoria, usos); (2) leer código C (punteros, memoria manual); (3) reconocer C++ (OO sobre C, STL); (4) manejar Java (JVM, colecciones, recolección de basura); y (5) escribir Python (tipado dinámico, listas/diccionarios). Además, dominar los conceptos comunes (estructuras de control, funciones, recursividad, complejidad) que el práctico pregunta con fragmentos de código.

⚠ Cae en examen. E15 tiene poco peso en el teórico pero 4 preguntas del práctico con fragmentos de código a interpretar (predecir la salida, detectar el error, elegir la sintaxis correcta). Memorístico en las diferencias entre lenguajes; de razonamiento al leer código.


Sección 1 · Panorama comparativo

CC++JavaPython
Año / autor1972, Ritchie1985, Stroustrup1995, Sun Microsystems (Oracle, propietario posterior)1991, van Rossum
ParadigmaEstructuradoMultiparadigma (OO)Orientado a objetosMultiparadigma
TipadoEstático, débilEstáticoEstático, fuerteDinámico, fuerte
EjecuciónCompilado a nativoCompilado a nativoBytecode → JVMInterpretado
MemoriaManual (malloc/free)Manual + RAII/smart pointersAutomática (GC)Automática (GC)
Usos típicosSistemas, embebido, kernelsSistemas, juegos, alto rendimientoEmpresarial, Android, webScripting, datos, IA, web

El modelo de ejecución de cada lenguaje se resume en este esquema:

Figura 1 · Modelos de ejecución: compilado, bytecode e interpretado · Toca la imagen para ampliarla

Conceptos comunes a todos (los que caen en el práctico):

  • Estructuras de control: secuencia, selección (if/else, switch), iteración (for, while, do-while).
  • Funciones: parámetros por valor vs por referencia; recursividad.
  • Operadores: aritméticos (como el módulo %, el resto de la división, que sirve para comprobar si un número es par o impar: en Python, if num % 2 == 0: es verdadero cuando num es par; la división entera es 7 // 2 = 3, mientras que 7 / 2 = 3.5; en C, 7 / 2 entre enteros ya da 3. Con negativos difieren: -7 // 2 en Python da -4 (redondea hacia menos infinito) y -7 / 2 en C da -3 (trunca hacia 0)), relacionales, lógicos (&&, ||, ! en C, C++ y Java; and, or, not en Python), asignación.
  • Paso por valor y por referencia: por valor, la función recibe una copia y no puede cambiar el original (en C, void inc(int x) { x = x + 1; } deja intacta la variable del que llama); por referencia (en C++ existe la referencia real, void inc(int &x) { x = x + 1; }), la función modifica el original. Rigurosamente, C solo tiene paso por valor: lo que se copia es el valor de un puntero (void inc(int *p) { *p = *p + 1; } y se llama inc(&a)), y por eso se puede modificar el dato apuntado, pero no el puntero del que llama. Java copia el valor de la referencia y Python pasa «por asignación»: con listas o ArrayList, lista.append(4) dentro de la función cambia la lista del que llama, pero reasignar lista = [0] solo cambia la variable local. Un swap que intercambia solo copias falla en C; funciona con punteros o con referencias de C++.
  • Bucles y acumuladores (qué cae en el práctico): se traza con una tabla de valores. En Python, range(5) produce 0, 1, 2, 3, 4 (el final no se incluye) y range(1, 6), de 1 a 5.
total = 0
for i in range(1, 6):
    if i % 2 == 1:      # solo los impares
        total += i      # acumulador
print(total)            # 1 + 3 + 5 = 9
  • Complejidad (Big-O): O(1), O(log n), O(n), O(n log n), O(n²) — la eficiencia de un algoritmo. Se mide sobre un tipo de operación y el tamaño de la entrada n, y distingue casos (mejor, medio y peor): por ejemplo, la búsqueda lineal es O(n) en el peor caso, y la binaria, O(log n) sobre datos ordenados.
  • Lambdas en Java: una lambda (x -> x * 2) es una función anónima que implementa una interfaz funcional (con un único método abstracto, como Runnable o Function); permite pasar comportamiento como argumento, p. ej. lista.forEach(x -> System.out.println(x));.
  • Recursión: debe alcanzar siempre el caso base; no basta con declararlo, hay que validar el dominio (el factorial de un negativo nunca lo alcanza) y vigilar el desbordamiento (el factorial en C con int desborda a partir de 13!).

⚠ Cae en examen. C compilado y memoria manual; Java bytecode + GC; Python interpretado y tipado dinámico. Estructuras de control comunes. En el práctico, predecir la salida de un bucle o una recursión.

Bibliotecas estáticas y dinámicas

  • Biblioteca estática (.lib, .a): su código se copia dentro del ejecutable al enlazar; el programa es más grande y, para actualizar la biblioteca, hay que reenlazar (no necesariamente recompilar todo); no hace autónomo a cualquier ejecutable, y solo se copia lo que se usa.
  • Biblioteca dinámica (DLL en Windows, .so en Linux, .dylib en macOS): el código se carga en tiempo de ejecución y se comparte entre programas. Ventajas del enlazado dinámico: menos memoria y disco (una copia para todos), arquitectura modular, instalación y actualización más sencillas (basta cambiar la biblioteca, sin recompilar los programas que la usan, siempre que se mantenga la compatibilidad ABI/de versión). Las bibliotecas dinámicas comparten el código, no necesariamente todos los datos entre procesos.

Código nativo en Android: NDK y JNI

El Android NDK (Native Development Kit) es un conjunto de herramientas para implementar partes de una aplicación Android en C y C++. Genera bibliotecas binarias para cada arquitectura de procesador que la parte Java o Kotlin invoca mediante JNI (Java Native Interface; es la vía habitual, no la única: también hay aplicaciones totalmente nativas). El código Java de Android no se ejecuta en la misma JVM de escritorio sino en ART (formato DEX). Se recomienda para código intensivo en cálculo (juegos, procesamiento de imagen o audio) y permite reutilizar código y bibliotecas de terceros en C/C++.

Otros lenguajes que han caído en examen

  • Swift: creado por Apple (2014) y de código abierto (licencia Apache 2.0); sustituye a Objective-C en iOS y macOS, pero no es exclusivo de iOS: se usa también en macOS, watchOS, tvOS y en servidores. Tipos básicos: String, Int, Double, Bool.
  • F#: lenguaje funcional de la plataforma .NET (con rasgos imperativos y orientados a objetos). let enlaza un nombre a un valor o a una función (los valores son inmutables por defecto; let mutable para variables mutables); los comentarios de varias líneas son (* … *) y los de línea //.
  • Perl, Ruby, Lua y Python son lenguajes de script (interpretados): Perl (texto y administración), Ruby (Ruby on Rails) y Lua (ligero, embebido en juegos). Java y C++ no se consideran de script, y HTML es de marcado.

Sigue leyendo cuando abramos

Apúntate a la lista de espera y te avisamos en cuanto abramos: podrás leer los temas de muestra completos, guardar tu progreso y entrenar con tests del formato real. Te quedan 8 secciones de este tema por delante.

LaPlazaFija usa tu correo solo para avisarte del lanzamiento.Más información

Gratis y sin spam: te avisamos al abrir, entras con acceso anticipado y te contamos lo que se mueva en tu convocatoria. Te das de baja con un clic.
Tu correo lo trata LaPlazaFija solo para avisarte del lanzamiento, con tu consentimiento —te pediremos que lo confirmes por email— y hasta que te des de baja. Más detalle y tus derechos, en la política de privacidad.