UNIVERSIDAD MAYOR DE SAN SIMÓN
FACULTAD DE CIENCIAS Y TECNOLOGÍA
DEPARTAMENTO DE INFORMÁTICA Y SISTEMAS
Curso de programación
con JAVA
Andy Daniel Ortiz Flores
Temario
● Introducción y fundamentos
● Estructuras de control y funciones
● Arreglos y matrices
● Programación orientada a objetos (POO)
● Interfaces y recursividad
ANDY D. ORTIZ F.
¿Qué es programar?
● Proceso de diseñar y escribir instrucciones que una computadora puede
ejecutar.
● Permite resolver problemas por medio de la computación y automatizar
tareas.
Programa: Serie de instrucciones escritas en un lenguaje de programación que
una computadora ejecuta para realizar una tarea específica.
● Un programa se construye a partir de algoritmos.
Algoritmo: conjunto de pasos ordenados, finitos y precisos que permiten
resolver un problema o realizar una tarea.
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Programación imperativa
● Se centra en cómo resolver un problema.
● El programador indica paso a paso qué hacer.
● Usa variables, asignaciones y estructuras de control.
Programación secuencial y estructurada:
● Instrucciones ejecutadas en orden lineal.
● Divide el código en bloques con estructuras de control
● Facilita detectar errores y reutilizar fragmentos de código.
Programación orientada a objetos:
● Organiza el programa en objetos que representan entidades del mundo real.
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Lenguajes de programación
● Son medios de comunicación entre humanos y computadoras.
● Alto nivel (más cercanos al humano) vs. bajo nivel (más cercanos a la
máquina).
Conjunto de reglas, símbolos y palabras clave (sintaxis y semántica) que se
utiliza para escribir instrucciones (código fuente) que una computadora puede
entender y ejecutar para realizar tareas específicas
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Lenguaje Java
● Creado en 1995 por Sun Microsystems (hoy Oracle).
● Multiplataforma: “Write once, run anywhere” (WORA).
Frameworks en Java
● Spring / Spring Boot: Desarrollo web y APIs
● Hibernate: manejo de bases de datos y mapeo objeto-relacional.
● Apache Struts: Framework MVC para aplicaciones web.
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Características de Java
● Tipado fuerte y seguro.
● Orientado a objetos.
● Soporta multihilo (concurrencia).
● Amplia comunidad y bibliotecas.
● Robusto y confiable
● Interpretado y compilado
● Portabilidad de código
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Compiladores, IDEs
Compilador: Es un programa informático que traduce un código fuente escrito
en un lenguaje de programación de alto nivel (como C++ o Java) a código
máquina o un lenguaje de bajo nivel que la computadora pueda entender y
ejecutar directamente. (JDK)
IDE (Entorno de Desarrollo Integrado): es una aplicación que combina todas
las herramientas necesarias para el desarrollo de aplicaciones, como un editor
de texto, un depurador y un compilador, en una única interfaz gráfica para
aumentar la eficiencia del programador
[Link]
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Sintaxis Java
● Es estrictamente tipado, lo que significa que cada variable debe declararse
con un tipo de dato.
● Su sintaxis se basa en el uso de clases y métodos como bloques principales
de código.
Estructura básica
● Definición de la clase: todo programa se organiza dentro de clases.
● Método principal (main): punto de entrada de la aplicación.
● Sentencias: cada instrucción termina con punto y coma ;
● Bloques de código: delimitados por llaves { }.
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Convenciones de sintaxis
● Sensibilidad a mayúsculas/minúsculas: Variable ≠ variable.
● Nombres de clases: inician con mayúscula (MiClase).
● Nombres de variables y métodos: inician con minúscula (miVariable,
calcularTotal()).
● Comentarios: Empieza con dos barras //
CamelCase: Notación que se aplica a nombres de métodos y variables,
comienzan con minúscula y cada palabra posterior inicia con mayúscula.
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Tipos de datos en Java
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Variables
● Una variable es un espacio de memoria en el que se puede almacenar un
valor.
● Tiene un nombre, un tipo de dato y un valor.
● Sirven para guardar datos que serán usados en un programa.
● Es como una “caja” donde guardamos información que puede cambiar
durante la ejecución del programa.
Tipadas: cada variable debe declararse con un tipo (int, double, String …).
Nombradas: deben tener un nombre identificador (ej: edad, nombre)
Alcance: pueden ser locales (dentro de un método), globales (atributos de
clase) o parámetros de un método.
Inicialización: Si no se les da valor, algunas toman un valor por defecto según
el tipo
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Operadores
Son símbolos especiales que indican al compilador que debe realizar una
operación matemática, lógica o de asignación sobre variables y valores.
Operadores aritméticos: + - * / %
Operadores de asignación: = += -= /= *= %=
Operadores relacionales: == != < > >= <=
Operadores lógicos: && (and) || (or) ! (not)
Operadores unarios y operador ternario
INTRODUCCIÓN Y FUNDAMENTOS ANDY D. ORTIZ F.
Introducción a las estructuras de control
● Permiten decidir qué instrucciones ejecutar y en qué orden.
● Alteran la secuencia lineal de un programa
Tipos principales:
● Condicionales (decisiones)
● Repetitivas(bucles)
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Condicionales
Una condicional es una estructura de control que permite que un programa tome
decisiones en función a una expresión lógica.
Todas las estructuras condicionales en Java dependen de una expresión lógica
(que devuelve true o false).
● if: ejecuta un bloque si la condición es verdadera.
● if- else: ejecuta un bloque si la condición es verdadera, otro si no lo es.
● if - else if - else: permite múltiples condiciones.
● switch: selecciona entre varias opciones según un valor.
if ( condición ) { } else if ( condición) { }
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Ejercicios de condicionales
● Dado la edad de un usuario mostrar si es mayor de edad (18 o más) o
menor de edad.
● Dado una nota de 0 a 100 muestra los siguientes mensajes si corresponde:
90 o más → “Excelente”
70 a 89 → “Aprobado”
50 a 69 → “Regular”
Menos de 50 → “Reprobado”
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Ejercicios de condicionales
● El usuario ingresa un número del 1 al 7 y el programa muestra el día
correspondiente: 1 = Lunes, 2 = Martes, …, 7 = Domingo. Si el número es
inválido, mostrar un mensaje de error.
● Un banco aprueba un préstamo si se cumplen todas estas condiciones:
El solicitante tiene edad entre 18 y 65 años.
Su ingreso mensual es mayor o igual a 1000.
No tiene deudas pendientes (booleano: true = sí tiene deuda, false = no
tiene).
Si alguna de estas condiciones no se cumple, el préstamo no se aprueba.
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Estructuras de repetición
Las estructuras de repetición nos permiten ejecutar un bloque varias veces.
● while: repite mientras la condición sea verdadera.
● do-while: igual que while, pero se ejecuta al menos una vez.
● for: ideal cuando se conoce el número de repeticiones.
while ( condición ) { } while ( numero > 10)
do { } while ( condición);
for ( inicialización, condición, incremento ) { }
for ( int i = 0; i < 10; i++) { }
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Ejercicios con repetición
● Escribe un programa que imprima los números del 1 al 50 usando
un ciclo for.
● Crea un programa que pida al usuario 10 números enteros y
muestre la suma total utilizando un ciclo while.
● Escribe un programa que imprima todos los números pares del 1 al
100 usando un ciclo for.
● Haz un programa que calcule el factorial de un número entero
positivo ingresado por el usuario usando un ciclo while.
● Escribe un programa que pida números al usuario y los sume hasta
que el usuario ingrese un 0. Usa un ciclo do-while.
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Ejercicios con repetición
● Escribe un programa para sumar los digitos de un número.
● Escribe un programa que imprima los primeros n números de la
serie de Fibonacci, donde n es ingresado por el usuario.
● Crea un programa que lea un número entero y lo imprima al revés
(por ejemplo, si ingresa 1234, debe mostrar 4321).
● Haz un programa que pida al usuario una contraseña y siga
pidiendo hasta que ingrese la correcta ("Java123"). Muestra un
mensaje de éxito al ingresar la contraseña correcta.
● Escribe un programa que lea una cadena y cuente cuántos
caracteres son letras, cuántos son dígitos y cuántos son otros
caracteres.
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Ejercicios con repetición
● Crea un juego donde la computadora “piense” un número entre 1 y
50 y el usuario tenga que adivinarlo. Después de cada intento,
indica si el número ingresado es mayor o menor hasta que acierte.
● Crea un programa que lea una palabra o frase y determine si es un
palíndromo (se lee igual de izquierda a derecha que de derecha a
izquierda).
● Crea un programa que lea un número entero positivo n y genere la
secuencia de Collatz:
Si el número es par dividirlo entre 2. Si es impar multiplicarlo por 3 y
sumar 1 Repetir hasta llegar a 1
Por ejemplo, para n = 6: 6, 3, 10, 5, 16, 8, 4, 2, 1
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Estructuras de control anidadas
● Un if dentro de otro.
● Un bucle dentro de otro.
● Se usan para problemas más complejos (ej: imprimir tablas, buscar en
matrices, recorridos).
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
sum += i + j;
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Introducción a las funciones
● Bloques de código
que realizan una
tarea específica.
● Mejoran la
organización y
modularidad.
● Se pueden llamar
varias veces desde
cualquier parte del
programa
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Definición y uso de funciones
Una función tiene:
● Nombre identificador: Para poder llamarlo.
● Parámetros (opcionales): Datos que recibe para trabajar.
● Tipo de retorno: El tipo de dato que devuelve, o void si no devuelve nada.
● Bloque de código: El conjunto de instrucciones entre { }.
Tipos de funciones
● Funciones sin parámetros y sin retorno. (void)
● Funciones con parámetros (reciben datos).
● Funciones con retorno (devuelven resultados).
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Estructura de una función
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Ejercicios con funciones
● Escribe un programa que pida al usuario dos números enteros a y b
y muestre todos los números primos entre a y b usando ciclos.
● Crea un método contarVocales que reciba un String y devuelva la
cantidad de vocales que contiene.
● Crea un método invertirCadena que reciba un String y devuelva el
mismo texto invertido.
ESTRUCTURAS DE CONTROL Y FUNCIONES ANDY D. ORTIZ F.
Conceptos básicos
● Arreglo: estructura que almacena múltiples valores del mismo tipo
en posiciones contiguas.
● Cada elemento se accede por un índice (empieza en 0 en Java).
● Ventajas: acceso rápido a los datos.
● Limitaciones: tamaño fijo, no se puede cambiar una vez definido.
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
Arreglos unidimensionales
● Declaración: int[ ] numeros;
● Inicialización: numeros = new int[ 5 ];
● Acceso: numeros[ 0 ] = 10;
● Recorrido con ciclos: for, while, for-each.
● Operaciones comunes: suma, promedio, buscar mayor/menor,
búsqueda de un elemento.
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
Ejercicios
● Crea un programa que lea 5 números enteros en un arreglo y
muestre la suma total.
● Pide al usuario ingresar 10 números en un arreglo y muestra cuál es
el mayor y cuál el menor.
● Llena un arreglo con 8 números y luego muéstralo en orden inverso.
● Llena un arreglo con 12 enteros y muestra cuántos son pares y
cuántos impares.
● Ingresa las notas de 6 estudiantes en un arreglo y calcula el
promedio.
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
Recorrido for each
● Es un tipo especial de ciclo en Java.
● Sirve para recorrer todos los elementos de un arreglo o colección sin
usar índices.
● Hace el código más limpio y legible.
for (Tipo variable : arreglo) {
// acciones con variable
}
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
Arreglos Bidimensionales (Matrices)
● Representan tablas de datos.
● Declaración: int[][] matriz = new int[3][3];
● Se recorren con ciclos anidados.
● Ejemplos de uso:
● Tablas de calificaciones.
● Juegos (tableros).
● Procesar datos en filas y columnas.
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
Arreglos Bidimensionales (Matrices)
● Llena una matriz cuadrada n x n y muestra los elementos de la
diagonal principal y la diagonal secundaria.
● Genera una matriz 5x5 con números aleatorios del 1 al 100.
● Crea una matriz y genera otra que sea el reflejo horizontal de la
primera.
● Dada una matriz 3x4, calcula la suma total de todos los elementos.
● Suma de dos matrices y multiplicación por un escalar
● Suma dos matrices 2x3 y luego multiplica cada elemento de la
matriz resultante por 2.
● Crea una matriz cuadrada y genera otra matriz que sea la original
rotada 90° a la derecha.
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
ArrayList en Java
● Una clase de Java que implementa una lista dinámica.
● Similar a un arreglo, pero su tamaño puede crecer o disminuir
automáticamente.
● Pertenece al paquete [Link].
Diferencias con Arreglos
● Arreglo: tamaño fijo.
● ArrayList: tamaño dinámico.
● En ArrayList no se usan índices para asignar, sino métodos.
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
Declaración y creación
import [Link];
ArrayList<String> nombres = new ArrayList<>();
Métodos principales:
● add(elemento): agrega un elemento.
● get(indice): obtiene un elemento.
● set(indice, valor): modifica un elemento.
● remove(indice): elimina un elemento.
● size(): devuelve el tamaño de la lista.
● clear(): elimina todos los elementos.
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
Ventajas
● Más flexible que un arreglo.
● Métodos ya implementados facilitan el manejo.
● Compatible con for-each para recorrer fácilmente.
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
Ejercicios ArrayList
● Crea un ArrayList<String> para almacenar nombres. Pide al usuario
ingresar 5 nombres y luego muéstralos todos.
● Usa un ArrayList<Integer> para guardar números. Luego pide al
usuario un número y elimínalo de la lista si existe.
● Ingresa varios colores en un ArrayList<String>. Pregunta al usuario
un color y muestra si está en la lista.
● Crea un ArrayList<Double> que almacene calificaciones y muestre
cuántas son mayores a 51 (aprobadas).
ARREGLOS Y MATRICES ANDY D. ORTIZ F.
Programación Orientada a Objetos en Java
● Paradigma que organiza el software en torno a objetos.
● Java es un lenguaje orientado a objetos puro.
● Facilita la reutilización, mantenimiento y escalabilidad.
Qué es la POO?
● Paradigma de programación basado en objetos que representan
entidades del mundo real.
● Cada objeto combina datos (atributos) y comportamientos
(métodos).
● Principio clave: pensar en modelar problemas como objetos.
PROGRAMACIÓN ORIENTADA A OBJETOS ANDY D. ORTIZ F.
Conceptos básicos
● Clase: plantilla o molde para crear objetos.
● Objeto: instancia de una clase.
● Atributos: características o propiedades del objeto.
● Métodos: acciones o comportamientos del objeto.
Principios de la POO
● Abstracción: Resalta lo esencial, ignora detalles irrelevantes.
● Encapsulamiento: Oculta datos internos, se accede con métodos.
● Herencia: Permite crear nuevas clases a partir de otras.
● Polimorfismo: Un método puede tener diferentes formas de
ejecución.
PROGRAMACIÓN ORIENTADA A OBJETOS ANDY D. ORTIZ F.
Abstracción
● Definición: Proceso de resaltar lo importante y ocultar los detalles
innecesarios.
● En Java: se logra con clases abstractas y interfaces.
Encapsulamiento
● Definición: Ocultar los datos internos de un objeto y controlar el
acceso a ellos mediante métodos.
● En Java: se logra con modificadores de acceso (private, public,
protected) y métodos get/set.
PROGRAMACIÓN ORIENTADA A OBJETOS ANDY D. ORTIZ F.
Herencia
● Definición: Permite crear nuevas clases a partir de otras ya
existentes, heredando atributos y métodos.
● En Java: se usa la palabra clave extends.
Polimorfismo
● Definición: Un mismo método puede comportarse de distintas
formas dependiendo del objeto que lo use.
● En Java: se logra con sobrescritura (override) y sobrecarga
(overload).
PROGRAMACIÓN ORIENTADA A OBJETOS ANDY D. ORTIZ F.
Beneficios de la POO
● Reutilización de código (herencia, clases reutilizables).
● Facilidad de mantenimiento y actualización.
● Organización modular.
● Mayor claridad al modelar problemas reales.
PROGRAMACIÓN ORIENTADA A OBJETOS ANDY D. ORTIZ F.
Programación Orientada a Objetos en Java
La Universidad desea un sistema informático que ayude a administrar la información de las
personas que forman parte de su comunidad académica. Dentro de esta comunidad existen
tanto estudiantes como docentes, cada uno con características particulares pero
compartiendo elementos comunes como nombre completo, cédula de identidad y correo
institucional.
Registrar a los estudiantes, incluyendo su matrícula universitaria, la carrera a la que
pertenecen y su promedio académico. Además, se debe contar con un método que determine
si un estudiante se encuentra en riesgo académico (cuando su promedio es menor a 51).
Registrar a los docentes, incorporando datos como su departamento académico (p. ej.,
Sistemas, Matemáticas, Física), su grado académico y la lista de materias que imparten.
Mostrar la información general de cada persona registrada en el sistema (sea estudiante o
docente), y en el caso de los estudiantes, indicar también si se encuentran o no en riesgo
académico.
PROGRAMACIÓN ORIENTADA A OBJETOS ANDY D. ORTIZ F.
Interface
● Se parece a una clase abstracta, pero solo contiene declaraciones
de métodos
● Permite que diferentes clases implementen la misma interfaz y se
comporten distinto.
● Una clase puede implementar varias interfaces, a diferencia de la
herencia de clases que solo permite una.
● Fuerza a las clases a definir un conjunto común de métodos.
● Se utiliza la palabra << implements >>
PROGRAMACIÓN ORIENTADA A OBJETOS ANDY D. ORTIZ F.
PROGRAMACIÓN ORIENTADA A OBJETOS ANDY D. ORTIZ F.
¿Qué es la Recursividad?
● Cuando una función que se llama a sí misma.
● Se usa para resolver problemas dividiéndolos en
subproblemas más pequeños que podemos resolver.
RECURSIVIDAD ANDY D. ORTIZ F.
Estructura de una Función Recursiva
● Caso base: Tiene una solución directa.
● Caso recursivo: Llamada a sí misma con un
problema más pequeño.
● Condiciones de Contexto: Situaciones donde la
solución es correcta
RECURSIVIDAD ANDY D. ORTIZ F.
Pila de recursión
● Cada llamada recursiva se almacena en la memoria
usando una pila.
RECURSIVIDAD ANDY D. ORTIZ F.
Recursividad vs Iteración
● Recursividad usa más memoria debido a la pila de
llamadas.
● Muchos problemas que se resuelven con bucles (for,
while) también se pueden resolver con recursión.
● La iteración mantiene una única copia de las variables
en memoria.
● La recursión genera una pila de llamadas: cada llamada
recursiva almacena su propio estado (variables locales,
dirección de retorno).
● La recursión consume más memoria, y si se profundiza
demasiado puede provocar stack overflow.
RECURSIVIDAD ANDY D. ORTIZ F.
Ventajas de la Recursividad
Eficiencia: En algunos casos, la recursividad es más
eficiente que los bucles tradicionales.
Simplicidad: El código recursivo es más claro y conciso, lo
que facilita su comprensión y mantenimiento.
Flexibilidad: La recursividad se adapta a una amplia gama
de problemas.
Jerarquía: La recursividad es una herramienta natural para
procesar estructuras jerárquicas, como árboles o listas
anidadas.
RECURSIVIDAD ANDY D. ORTIZ F.
Ejemplo de Factorial
3! = 3 x 2 x 1 = 6
5! = 5 x 4 x 3 x 2 x 1
Ejemplo de Fibonacci
1, 1, 2, 3, 5, 8, 13, 21, 34 ……
0, 1, 2, 3, 4, 5, 6, 7, 8
n: 5 -> 5 n : 7 -> 13
RECURSIVIDAD ANDY D. ORTIZ F.
Deducción
● La deducción es un razonamiento lógico que va de lo
general a lo particular.
● Permite construir la función recursiva pensando “qué
debo hacer en un caso general para llegar al caso base”.
Calcular la suma de los dígitos de un número entero positivo
n usando recursión.
● Pensamos cómo reducir el problema a un subproblema
más pequeño
N = 4387 -> 22
RECURSIVIDAD ANDY D. ORTIZ F.
Ejercicios
RECURSIVIDAD ANDY D. ORTIZ F.
Paso de parámetros en Java
● En Java, los parámetros se pasan por valor.
● Para tipos primitivos (int, double, boolean…), se copia el
valor.
● Para objetos y arreglos, se copia la referencia (no el objeto
en sí).
● Esto significa que los cambios hechos dentro de un método
sobre el objeto/arreglo afectan al original.
Ejemplo: Búsqueda Binaria
RECURSIVIDAD ANDY D. ORTIZ F.
¿Qué es el Backtracking?
● Estrategia de resolución de problemas que explora todas las
posibilidades.
● Consiste en avanzar paso a paso, y si una decisión no lleva
a la solución, se retrocede (backtrack) y se prueba otra
opción.
Idea general del Backtracking
● Elegir una opción.
● Avanzar recursivamente con esa opción.
● Si no es válida, retroceder y probar otra.
● Repetir hasta encontrar la solución o agotar opciones.
RECURSIVIDAD ANDY D. ORTIZ F.