← CC2008

Introducción a POO

Semestre 02, 2026

Contexto

  • El software moderno es cada vez más complejo.
  • Los programas requieren modelar entidades del mundo real.
  • El paradigma estructurado resulta limitado con grandes volúmenes de datos y relaciones.
  • Necesitamos organizar el código de forma más cercana a cómo pensamos.

Paradigma estructurado

  • Basado en funciones y procedimientos que operan sobre datos.
  • El flujo de control es difícil de seguir en sistemas grandes.
  • Baja reutilización de código.
  • Difícil mantenimiento y escalabilidad.
  • Poca correspondencia entre el problema y la solución en código.

Evolución del software

En el mundo real interactuamos con "cosas" con estado y comportamiento.
Queremos representar entidades: clientes, productos, autos, sensores…
La POO propone objetos: unidades que encapsulan datos + lógica.
Permite modelar sistemas complejos de forma más natural.

Programación Orientada a Objetos

Definición

Paradigma de programación basado en el concepto de objetos, creados a partir de estructuras llamadas clases.

Atributos: representan su estado.
Métodos: representan su comportamiento.
Encapsula datos y lógica en una unidad coherente.

Estructurada vs. POO

Estructurada
  • Funciones y datos separados
  • Reutilización limitada
  • Baja escalabilidad
  • Mantenimiento difícil
POO
  • Entidades combinadas (objetos)
  • Alta reutilización (herencia, composición)
  • Alta escalabilidad
  • Mantenimiento modular

Ventajas

Mejor organización del código
Mayor modularidad y reutilización
Facilita mantenimiento y escalabilidad
Más cercano al modelo mental humano

Desventajas

  • Mayor curva de aprendizaje.
  • Puede haber sobreingeniería.
  • No siempre es necesario para problemas simples.

Aplicaciones

Software a gran escala y sistemas empresariales
Aplicaciones móviles (Android: Java / Kotlin)
Videojuegos y simulaciones
Interfaces gráficas de usuario (GUI)

Objetos en el mundo real

Videojuego

Jugador · Enemigo · Arma

Sistema bancario

Cuenta · Cliente · Transacción

Mensajería

Usuario · Mensaje · Chat

El compilador

Definición

Programa que traduce el código fuente de un lenguaje de alto nivel a código máquina (binario) o a un formato intermedio ejecutable.

Etapas de compilación

1Análisis léxico
  • Divide el código en tokens (palabras clave, identificadores, operadores).
2Análisis sintáctico
  • Verifica la gramática y construye un árbol sintáctico.
3Análisis semántico
  • Comprueba tipos, declaraciones y significado de las instrucciones.

Etapas de compilación

4Código intermedio
  • Traduce a un lenguaje intermedio independiente del hardware.
5Optimización
  • Mejora el código intermedio para mayor eficiencia.
6Código máquina
  • Convierte el código optimizado en binario ejecutable.

Compiladores vs. Intérpretes

Compilador
  • Traduce todo el código a ejecutable
  • Ejecución más rápida
  • Depuración menos flexible
  • Salida: binario (.exe, .out)
  • C, C++, Rust, Go
Intérprete
  • Traduce y ejecuta línea a línea
  • Ejecución más lenta
  • Depuración más fácil (error en tiempo real)
  • Sin archivo binario
  • Python, Ruby, JavaScript

Java: enfoque híbrido

1Compilación
  • javac traduce el fuente .java a bytecode .class.
2Bytecode
  • No es código máquina; lo ejecuta la JVM.
3Ejecución
  • La JVM interpreta/compila con JIT en tiempo de ejecución.

Ventajas de Java

Portabilidad: el bytecode corre en cualquier plataforma con JVM.
Seguridad: la JVM ofrece un sandbox para el código.
Optimización en tiempo real gracias al compilador JIT.

Flujo en Java

Código fuente .java
Compilador javac
Bytecode .class
Máquina Virtual de Java (JVM)
Código máquina (ejecución en tiempo real)