You are on page 1of 89

Programación I – Clase 1

Segundo Cuatrimestre

UCSE - 2021
Java

➢ Lenguaje de programación de propósito general


➢ El paradigma que sigue es el Orientado a Objetos (POO)
➢ Es un lenguaje compilado, fuertemente tipado y multiplataforma
➢ Nació con la idea de que el código de los programas fuese escrito una sola
vez y posteriormente ejecutado en cualquier dispositivo
independientemente de su sistema operativo
➢ Utiliza la llamada Máquina Virtual de Java (JVM) para poder ejecutar los
programas
➢ Uno de los lenguajes más utilizados en la actualidad
➢ Permite escribir programas de escritorio, aplicaciones en Android,
aplicaciones web, entre otros usos
Java
Para trabajar con Java se requieren tres elementos:

➢ JRE (Java Runtime Environment) o entorno de ejecución de Java,


permite ejecutar los programas escritos en Java. Contiene internamente la
máquina virtual (JVM). Utilizado por el usuario final

➢ JDK (Java Development Kit) o kit de desarrollo de Java, permite


desarrollar programas en Java. Utilizado solo por los programadores

➢ IDE (Integrated Development Environment) o entorno de


desarrollo integrado, permite escribir el código de los programas. Ej.
NetBeans, Eclipse, IntelliJ IDEA, etc.
JVM (Java Virtual Machine)
➢ Los programas (código fuente) se escriben en
archivos con extensión .java
➢ El compilador convierte el código fuente a un
conjunto de instrucciones llamado bytecodes que se
guardan en archivos con extensión .class
➢ Estas instrucciones son independientes del
dispositivo
➢ Luego el intérprete de la JVM ejecuta cada una de
estas instrucciones en un dispositivo específico (con
Windows, Linux, Android, etc.)

De esta forma, se compila una vez el programa y luego el mismo se interpreta cada
vez que se ejecuta en un dispositivo
Características de Java
➢ Independiente de Plataforma: dado que utiliza la JVM para ejecutar los programas sin
importar el S.O. del dispositivo
➢ Orientado a Objetos: uno de los paradigmas de programación más utilizados por los
programadores en donde todo es un objeto
➢ Sencillo: fácil de aprender, similar a otros lenguajes como C++, curva de aprendizaje sencilla
➢ Seguro: debido a que los programas se ejecutan en la JVM, se garantiza que no puedan acceder a
nada que esté fuera de la misma
➢ Arquitectura Neutral: no importa si la arquitectura del sistema es 32bits o 64bits, los tipos de
datos siempre ocupan el mismo espacio
➢ Portable: un programa en Java puede ser utilizado en cualquier plataforma que ejecute la JVM
➢ Robusto: tiene un control total de la memoria y controla muchas posibles situaciones de error
mediante el manejo de excepciones
➢ Interpretado: los bytecodes generados luego de la compilación del programa permiten que
sean interpretados en tiempo real a código máquina, para poder ser ejecutados en un dispositivo
NetBeans (IDE para Java)
NetBeans – Crear Proyecto
NetBeans – Crear Proyecto
NetBeans – Crear Proyecto
NetBeans – Crear Proyecto
Método main()

➢ Es el método principal de una clase


➢ Es el lugar donde se escriben las
instrucciones que se quiere que
ejecute el programa
➢ Las instrucciones se ejecutan en el
orden en que se escriben
Crear Proyecto - Consideraciones
Es importante tener en cuenta lo siguiente:

➢ El nombre de cada archivo del proyecto debe comenzar con la primera letra en
MAYUSCULAS y así cada nueva palabra. Ej. “MiPrimeraAplicacion” es un nombre
correcto. Es un lenguaje sensible a mayúsculas
➢ Cada archivo del proyecto tiene la extensión .java. Ej. “MiPrimeraAplicacion.java”
➢ Lo que conocemos como funciones, en Java se llaman métodos ya que TODO es
un objeto y es un concepto del paradigma orientado a objetos que sigue este
lenguaje
➢ Los archivos se organizan en paquetes (packages). Se lo podría entender como un
sistema de “carpetas” de tal manera que se localice fácilmente un archivo .java
dentro del proyecto o se reutilice código de otro proyecto
➢ Toda instrucción finaliza con un punto y coma “;”
Uso básico
Mostrar o imprimir un mensaje por consola

Imprime texto y luego realiza salto de línea


System.out.println("Mi mensaje");

Imprime texto
System.out.print("Mi mensaje");

Imprime texto realizando una concatenación


String mensaje = “ABC123”;
System.out.print("Mi mensaje es " + mensaje) ;

System es una clase, out un atributo, println() y print() son métodos, y lo que
va entre paréntesis () son los parámetros enviados.
Uso básico
Escribir comentarios

Permite escribir un comentario de una línea


//Este es un comentario

Permite escribir comentarios de más de una línea


/*
Este es un comentario
Este es otro comentario en otra línea
*/

Recordar que un comentario NUNCA será ejecutado ni afectará a la


compilación/funcionamiento del programa, solamente es una ayuda memoria para el
programador
Uso básico
Uso de librerías
➢ Las librerías son conjuntos de clases, que poseen métodos y atributos.
➢ Permiten facilitar muchas operaciones.
➢ Permiten reutilizar código.

Un ejemplo de uso de librerías es al momento de hacer una impresión por pantalla con:
System.out.println(“mensaje”);

System es una clase que pertenece al paquete “java.lang”.

Para hacer uso de las librerías (propias o externas o bien propias de Java) se debe utilizar la
palabra reservada “import” seguido de la “ruta” del paquete o clase que se desea agregar al
proyecto.

import java.lang.Math; //Para importar paquete de funciones matemáticas comunes


import java.util.*; //Para importar todo el paquete “útil” de Java
Uso básico
Tipos de datos primitivos o simples

Existen 8 tipos de datos primitivos que se clasifican en:

➢ Número enteros: byte, short, int, long

➢ Números reales: float, double

➢ Carácter: char

➢ Booleano o lógico: boolean (solamente toma los valores true o false)


Uso básico
Tipos de datos primitivos o simples
Uso básico
Tipos de datos complejos o compuestos

En Java existen tipos de datos que son objetos que provienen de clases.
Un ejemplo es String, cuyo nombre comienza con S mayúscula debido a que se trata de una
clase, y por tanto, toda variable de tipo String se tratará de un objeto que heredará todos los
métodos y atributos de dicha clase.
String miVariable = “un valor”;

Algunos tipos de la biblioteca estándar de Java son las clases:


➢ String: para el manejo de cadenas de caracteres
➢ Scanner: para la lectura de la entrada de datos por teclado
➢ ArrayList: para crear listas o colecciones de elementos. Similar a un vector, poseen varios
métodos y atributos que permiten por ej. buscar un elemento, insertar un elemento, eliminar
un elemento, entre otros
Uso básico
Variables
Son espacios de memoria donde almacenamos un valor, la sintaxis es la siguiente:

[privacidad] tipoVariable identificador;

Dado que Java es un lenguaje estático o fuertemente tipado, se debe indicar siempre el tipo de
dato (primitivo o compuesto). La privacidad se verá luego en los Modificadores de Acceso de
Java.

Ejemplos:
int numero = 2; //Tipo primitivo
String cadena = “Hola”; //Tipo compuesto
boolean bandera = true; //Tipo primitivo

Scanner miScanner = new Scanner(System.in); //Tipo compuesto


ArrayList miArray = new ArrayList(); //Tipo compuesto
Uso básico
Constantes
➢ Son datos cuyo valor no cambia durante la ejecución del programa.
➢ Una vez que se asigna un valor a una constante, este valor no podrá ser modificado
y permanecerá así durante toda la ejecución del programa.

Se definen usando la palabra reservada “final” y se les debe asignar un valor de


forma inmediata.

Sintaxis
final tipo identificador = valor;

Ejemplo
final int unaConstante = 10;
Uso básico
Modificadores de acceso
➢ Permiten controlar el acceso a los datos (encapsulamiento de la POO) que conforman un objeto.
➢ Incrementan la seguridad en cuanto al acceso a los datos ya que restringen así el acceso a
diferentes atributos, métodos y constructores definidos en el programa.
➢ Permiten que cuando una aplicación vaya a ser usada por otros usuarios o programadores, los
mismos no modifiquen incorrectamente un valor en particular.

Existen varios tipos:


➢ public: el más permisivo, el elemento se puede acceder desde cualquier clase o instancia.
➢ private: el más restrictivo, el elemento sólo puede ser accedido por la misma clase únicamente.
➢ protected: permite el acceso desde la misma clase, clases del mismo paquete y clases que
hereden de ella.
➢ default: es el utilizado cuando no se especifica ningún modificador de acceso, se puede acceder
al elemento desde la misma clase y el mismo paquete únicamente.
Uso básico
Entrada de datos por teclado
➢ Para solicitar datos al usuario por medio del teclado, se utiliza un objeto de la clase
Scanner y luego se invoca a los métodos que permiten capturar datos tanto
numéricos como textuales.
➢ La clase Scanner pertenece a la librería java.util.

Ejemplo:
Scanner sc = new Scanner(System.in); (siempre que se requiera ingresar datos)
System.out.println(“Ingrese su edad:”);
int edad = sc.nextInt(); (captura la entrada por teclado de dato tipo entero)

System.out.println(“Ingrese su nombre:”);
String nombre = sc.nextLine(); (captura la entrada por teclado de texto completo)

System.out.println(“Su nombre es: ” + nombre + “ y su edad: ” + edad);


Uso básico
Condicional IF

Sintaxis:
if (condición){
//código
}

Ejemplo:
int edad = 20;
if (edad >= 18){
System.out.println(“Es mayor de edad”);
}
Uso básico
Condicional IF-ELSE
Sintaxis:
if (condición){
//código si SE CUMPLE la condición
}else {
//código si NO SE CUMPLE la condición
}

Ejemplo:
int edad = 20;
if (edad >= 18){
System.out.println(“Es mayor de edad”);
}else{
System.out.println(“Es menor de edad”);
}
Uso básico
Condicional SWITCH
Sintaxis:
switch (opción){
case opción1:
//código para opción 1
break;

case opción2:
//código para opción 2
break;

default:
//código opción por defecto
break;
}
Uso básico
Condicional SWITCH
Ejemplo:
int opcion = 2;

switch (opcion){
case 1:
System.out.println(“Elegiste opción 1”);
break;

default:
System.out.println(“Opción incorrecta”);
break;
}
Uso básico
Bucles o Ciclos - FOR

Sintaxis:
for(int i = valorInicial; i <= valorFinal; i = i + incremento) {
//código
}

Ejemplo:
for(int i=0;i<5;i++) {
System.out.println(“El valor de i es: ” + i);
}
Uso básico
Bucles o Ciclos - WHILE

Sintaxis:
while (condición) {
//código
}

Ejemplo:
int contador = 1;
while (contador <= 10) {
System.out.println(contador);
contador++;
}
Uso básico
Bucles o Ciclos – DO-WHILE

Sintaxis:
do {
//código (se ejecuta al menos una vez antes de evaluar la condición)
} while (condición);

Ejemplo:
do {
System.out.println(“Ingrese un número: ”);
nro = sc.nextInt();
System.out.println(nro);
} while (nro != 0); //Mientras el nro. sea distinto de cero, se ejecuta el
código
Uso básico
Funciones, métodos y procedimientos
➢ Funciones: conjunto de instrucciones que forman parte de un bloque, reciben parámetros y
retornan un valor. El valor retornado puede ser de algún tipo primitivo o compuesto.
➢ Métodos: idénticos a las funciones pero con la única diferencia que SIEMPRE están asociados
a objetos, es decir, pertenecen a un objeto (en cambio una función existe por sí sola sin
necesidad de un objeto).
➢ Procedimientos: conjunto de instrucciones que forman parte de un bloque, reciben
parámetros y no retornan ningún valor. El tipo de dato que emplean es “void”.

La sintaxis, uso y paso de parámetros es idéntica a la forma vista en C++.


Java
Ejemplo 1

Leer números enteros y por cada uno indicar si el mismo es par o impar y
si es positivo o negativo. Cuando se ingrese el número cero finalizar el
programa.
Utilizar estructuras condicionales y de bucle.
Utilizar funciones.
Java
Ejercicio 1

Solicitar al usuario que ingrese el precio de un producto y la cantidad de unidades


que desea comprar.
Teniendo en cuenta las unidades ingresadas se deberá calcular si se aplica un
descuento o no al precio ingresado.
Se aplicará un descuento del 4% únicamente si las unidades son mayores a o iguales
a 6 y menores o iguales que doce;
y se aplicará un descuento del 10% si las unidades son mayores que 12.
Devolver como resultado por pantalla una indicación sobre si tiene descuento o no
tiene y el precio final a pagar.
Usar funciones.

Nota: la declaración de una función se realiza:


public static tipoDato identificador(parámetros) { … }
Clases
➢ Es una representación o una abstracción de un objeto del
mundo real
➢ Es un modelo con el que se construyen los objetos
➢ Asumen el principio de encapsulación, se describe una vista
pública que representa la funcionalidad de la misma, y una
vista privada que describe los detalles de implementación
Objetos
➢ Son representaciones de cosas, de algo en particular
➢ Son, específicamente, entidades o ejemplares o instancias de una clase
concreta, que se estructuran y comportan según lo definido en dicha clase
➢ Siempre pertenecen a una clase, de la que toman su estructura y
comportamiento
➢ Tienen un estado independiente del resto de las otras instancias de la
misma clase
➢ Pueden ser simples o complejos
➢ Pueden ser reales o imaginarios
➢ El proceso de crear un objeto se conoce también como instanciar una
clase
➢ Tienen un estado (valores de los datos en un instante dado) y un
comportamiento (operaciones que puede realizar)
Atributos - Estado
➢ Son rasgos o características de los objetos
➢ Definen lo que se conoce como el estado de un objeto
➢ Cada una de estas características tendrá un valor determinado para cada objeto
➢ Por ejemplo, para un objeto en particular de una clase Auto se podrían tener los atributos:

➢ Marca

➢ Modelo

➢ Color

➢ Kilómetros

➢ Año
Comportamiento
➢ Ningún objeto existe en forma aislada
➢ Los objetos reciben acciones, y ellos mismos actúan sobre otros
➢ El comportamiento es cómo actúa y reacciona un objeto, en términos de
sus cambios de estado y paso de mensajes
➢ Representa su actividad visible y comprobable exteriormente
➢ Una operación es una acción que un objeto efectúa sobre otro con el fin
de provocar una reacción. Las operaciones que los objetos cliente
pueden realizar sobre un objeto, suelen declararse como métodos y
forman parte de la declaración de la clase a la que pertenece ese objeto
Clase

this: referencia al objeto de la clase actual

Objeto
Sobrecarga de métodos
➢ Útil para que el mismo método opere con parámetros de distinto tipo o que un método
reciba una lista de parámetros diferente
➢ Puede haber dos métodos con el mismo nombre que realizan dos funciones distintas
➢ La diferencia entre los métodos sobrecargados está en su declaración

public double calcularDescuento() {


//Código
}

public double calcularDescuento(double porcentaje) {


//Código
}

Los dos métodos se diferencian por la declaración de sus parámetros y ambos métodos
realizan operaciones distintas
Clase

Objeto
Arreglos
➢ Estructura de almacenamiento que permite almacenar muchos objetos de la misma clase e
identificarlos con el mismo nombre
➢ También conocidos como arrays. Existen unidimensionales y multidimensionales.

Sintaxis:
tipoDato[ ] identificador;
o
tipoDato identificador[ ]; Ambas declaraciones son equivalentes, el tipo de
dato base del arreglo es int y el nombre es
Ejemplo de declaración de array “numeros”.
de enteros: Todos los elementos del arreglo “números[ ]”
int[ ] numeros; almacenan un int.
o
int numeros[ ];
Arreglos
➢ Un arreglo también puede ser de tipo completo o formado por tipos de datos definidos por el
usuario.
Ejemplo de declaración de array:
Auto miArreglo[ ];
“miArreglo” es un array de elementos de la clase “Auto”. Cada elemento del mismo
referencia a una instancia u objeto de la clase “Auto”.

➢ Cuando un arreglo se declara, solo se crea una referencia del arreglo. Para realmente crear o
dar memoria al arreglo, se puede crear un arreglo de la siguiente manera

Sintaxis:
int miArreglo[ ]; //Declaración
miArreglo = new int[10]; //Instanciación indicando el tamaño = 10 elementos
O
int[ ] miArreglo = new int[10]; //Se declara e instancia el arreglo
Arreglos - Instanciación
A tener en cuenta sobre la inicialización e instanciación:

➢ Los elementos en el arreglo siempre se inicializarán automáticamente a cero (para tipos


numéricos), false (para booleano) o null (para tipos de referencia, Ej. Clases).
➢ Obtener un arreglo es un proceso de dos pasos. Primero, debe declarar una variable del tipo de
arreglo deseado. En segundo lugar, se debe asignar la memoria que mantendrá el arreglo, usar y
asignarla a la variable del arreglo. Por lo tanto, en Java, todos los arreglos se asignan
dinámicamente.
Existe una forma de inicializar arreglos en Java, la cual permite que se le asigne directamente el
contenido al mismo:

tipoDato array[ ] = {elemento1, elemento2,..., elementoN};

Ejemplo: char array[ ] = {'a','b','c','d','e'}; //Arreglo de 5 elementos

De esta forma, el tamaño del arreglo declarado se “amoldará” a la cantidad de elementos con
los que se lo inicializa.
Arreglos - Utilización
El acceso a los elementos de un arreglo, para su lectura o para su asignación, se realiza de
manera directa por el número de índice del mismo:

Ejemplo de lectura de un valor: char x = arregloCaracteres[2];

Ejemplo de asignación de un valor: arregloCaracteres[2] = 'b';

Recordar que todo índice de arreglo comienza siempre en 0 (cero)


Muchas veces es necesario determinar el tamaño de un arreglo, para así saber el número de
elementos que contiene el mismo, para poder hacerlo se utiliza el atributo o variable .length:

Ejemplo:
char miArreglo[ ];
miArreglo = new char[10];

int cantElementos = miArreglo.length


Arreglos - Utilización
Recorrer un arreglo: Debido a que el acceso a un arreglo es a través de su índice (que
comienza siempre en 0 y termina en tamaño total de arreglo -1), se puede recorrer y acceder a
cada elemento del mismo utilizando el bucle FOR:

Ejemplo: int miArreglo[ ] = {10,60,2,5};


for (int i = 0; i < miArreglo.length; i++) {
System.out.println("Elemento en el índice " + i + " : "+ miArreglo);
}

De la misma manera, puede realizarse el recorrido a través del bucle FOR-EACH (similar a
FOR):

Ejemplo: int miArreglo[ ] = {10,60,2,5};


for (int x: miArreglo) {
System.out.println("Elemento: " + x);
}
Arreglos - Utilización
Recorrer un arreglo:

De la misma manera, puede realizarse el recorrido a través del bucle FOR-EACH (similar a
FOR):

➢ Comienza con la palabra clave for al igual que un bucle for normal.
➢ En lugar de declarar e inicializar una variable contador del bucle, declara una variable que es
del mismo tipo que del array, seguido de dos puntos y seguido del nombre del array.
➢ En el cuerpo del bucle, puede usar la variable del bucle que creó en lugar de usar un
elemento indexado del array.
➢ Se usa comúnmente para iterar sobre un array o una clase de colecciones (por ejemplo,
ArrayList).
Arreglos - Objetos
Se pueden tener también arreglos de objetos de una clase en Particular.

Ejemplo:
Si se tiene una clase Auto y se quiere crear un arreglo de objetos de tipo Auto se hace lo
siguiente:

Auto[] arrAuto = new Auto[5]; //Arreglo de 5 elementos


arrAuto[0] = new Auto(“ABC123", “Ford", ”Mondeo”); //Se agrega un objeto a la primera
posición
arrAuto[1] = new Auto(“DEF456", “Fiat", ”Argo”); //Se agrega un objeto a la segunda posición

//Se recorre el arreglo y se imprime la patente de cada uno


for (int i=0;i<arrAuto.length;i++){
System.out.println(“Patente: ” + arrAuto[i].getPatente());
}
Java
Ejemplo 1

Crear un arreglo con puntajes del 1 al 100


Recorrer el arreglo e imprimir el mayor puntaje del mismo

Ejemplo 2

Crear una clase Auto


Crear un arreglo con objetos de la clase Auto
Recorrer el arreglo e imprimir cada objeto
Java
Ejercicio 1

Crear una clase para modelar una Computadora.


Agregar los atributos que podría tener una computadora tal como en el mundo real
(definir 5), incluir un atributo llamado precio.
Definir constructor, atributos y métodos get()/set().
Crear un arreglo de computadoras, solicitándole al usuario por pantalla cada uno de
los atributos.
Recorrer arreglo e imprimir la computadora más cara, la más barata y el precio
promedio.
Java
Ejercicio 2

Crear un vector de números y otro de String de 10 posiciones donde se insertarán (solicitando


al usuario) notas de exámenes entre 0 y 10 (es importante controlar que cada nota sea válida
entre 0 y 10), pudiendo ser decimal la nota en el vector de números, en el vector de Strings se
insertarán los nombres de los alumnos (solicitando al usuario).

Después, crear un vector de String donde se guardará el resultado de la nota con palabras, las
cuales son:
-Si la nota esta entre 0 y 4,99 será "Insuficiente"
-Si está entre 5 y 6,99 será "Bueno".
-Si está entre 7 y 8,99 será "Muy Bueno".
-Si está entre 9 y 10 será "Excelente".

Mostrar por pantalla: el alumno, su nota (en número) y su resultado en palabras. }


Utilizar los métodos (funciones/procedimientos) que se crean convenientes.
Java
Ejercicio 3

Usando menú de opciones, arreglos y funciones/procedimientos


Se tiene la declaración de la siguiente clase:
Articulo:
--codigo: Int,
--descripcion: String,
--precio: Float

Definir un Arreglo con 4 elmentos de tipo Articulo.


Implementar dos funciones:
-Una en la que se le envíe el Array y muestre todos sus componentes (objetos)
-Otra que también reciba el Array de artículos y proceda a aumentar en 10% a
todos los productos
Java
Ejercicio 4

Usando menú de opciones, arreglos y funciones/procedimientos


Se quiere guardar los nombres y las edades de los alumnos de un curso. Realizar un
programa que introduzca el nombre y la edad de cada alumno. El proceso de lectura
de datos terminará cuando se introduzca como nombre un asterisco (*).

Al finalizar se mostrarán los siguientes datos:


-Todos los alumnos mayores de edad
-Los 3 alumnos mayores (los que tienen más edad)
Java
Ejercicio 5

Usando menú de opciones, arreglos y funciones/procedimientos


Crear una clase llamada Cuenta que tendrá los siguientes atributos:
-titular (que es una persona)
-saldo (puede tener decimales)
El 'titular' será obligatorio y el 'saldo' es opcional (asignar 0 en caso de no ingresarlo)

Crear los siguientes métodos para la clase:


-Un constructor, donde los datos pueden estar vacíos
-Los getters y setters para cada uno de los atributos. El atributo 'saldo' no se puede
modificar directamente, sólo ingresando o retirando dinero
-mostrar(): Muestra los datos de la cuenta
-ingresar(importe): se ingresa un importe a la cuenta, si el importe introducido es negativo,
no se hará nada
-retirar(importe): se retira un importe de la cuenta. La cuenta puede quedar en saldo
negativo
Java
Ejercicio 6

Usando menú de opciones, arreglos y funciones/procedimientos


Crear una clase Libro que contenga los siguientes atributos:
– ISBN
– Titulo
– Autor
– Número de páginas

Crear sus respectivos métodos get y set correspondientes para cada atributo. Crear el método
toString() para mostrar la información relativa al libro con el siguiente formato:
“El libro con ISBN creado por el autor tiene páginas”
En el fichero main, crear 2 objetos Libro (los valores que se quieran) y mostrarlos por pantalla.
Por último, indicar cuál de los 2 tiene más páginas.
Java - Listas
LISTAS

https://jarroba.com/arraylist-en-java-ejemplos/
http://panamahitek.com/el-uso-de-listas-en-java/
https://www.arquitecturajava.com/java-arraylist-for-y-sus-opciones/
http://puntocomnoesunlenguaje.blogspot.com/2012/12/arraylist-en-java.html
https://curiotecnology.blogspot.com/2012/09/manejo-de-listas-java.html
https://www.tutorialcup.com/es/java/arraylist-java.htm

https://es.gadget-info.com/difference-between-list
https://programmerclick.com/article/25531500270/
Listas
➢ Una lista es una estructura de datos que conforma una secuencia de elementos
dispuesto en un cierto orden, en la que cada elemento tiene como mucho un
predecesor y un sucesor.
➢ El número de elementos de la lista no suele estar fijado, ni suele estar limitado
por anticipado (a diferencia de los arrays o vectores).
➢ Es una de las estructuras de datos más utilizadas en Java.
➢ Se puede representar la estructura de datos de forma gráfica con cajas y flechas.
Las cajas son los elementos y las flechas simbolizan el orden de los elementos.

➢ La estructura de datos deberá permitir determinar cuál es el primer elemento y


el último de la estructura, cuál es su predecesor y su sucesor (si existen de
cualquier elemento dado). Cada uno de los elementos de información suele
denominarse nodo o ítem o elemento.
Listas
➢ La lista también puede representarse de forma simbólica escribiendo sus
elementos separados por comas y encerrados entre corchetes.
Ejemplo:
["rojo","verde","azul","amarillo"]

➢ Dado que las listas mantienen una secuencia particular, admiten ciertas
operaciones como son insertar un nodo adicional, borrar un nodo, obtener un
nodo, acceder a un elemento por su índice dentro de la lsita, etc.
➢ Si se quiere acceder a un elemento de la lista utilizando el índice, recordar que los
índices siempre comienzan desde cero (0).
➢ En síntesis, es una estructura de datos que almacena datos en memoria de forma
similar a un array pero con la ventaja de que el número de elementos que
almacena es definido de manera dinámica a medida que se van agregando o
quitando elementos a la misma.
Listas – Jerarquía de Listas
Listas – Declaración
Sintaxis:
ArrayList identificador = new ArrayList();

La lista será creada con su contenido vacío.


Declarada de esta forma, la lista podrá contener objetos de cualquier tipo.

Ejemplo:
ArrayList miLista = new ArrayList();
miLista.add("Lenguaje"); //Se añaden elementos con el método “add()”
miLista.add(3);
miLista.add('a');
miLista.add(23.5);
Listas – Declaración
Debido a que la lista puede contener objetos de distinto tipo, esto puede ocasionar problemas
y complicaciones a la hora de trabajar con la lista, por esta razón siempre se le deberá asignar
un tipo de dato específico a la lista.

Sintaxis:
ArrayList<tipoDato> identificador = new ArrayList();

Donde “tipoDato” deberá ser una clase ya que no se pueden usar tipos primitivos de forma
directa (int, float, etc.).
Para poder usar tipos primitivos, se deberá utilizar su clase envolvente.

Ejemplo:
ArrayList<Integer> miLista = new ArrayList(); //”Integer” es la clase envolvente del tipo
primitivo “int”
Listas – Declaración
Aclaración sobre las clases envolventes:

Java es un lenguaje de programación orientado a objetos, por tanto, un programa Java


debe contener objetos y las operaciones entre ellos.
La única excepción a esto en un programa Java son los tipos de datos primitivos (int,
double, char, etc.).

Los tipos de datos primitivos no son objetos pero en ocasiones es necesario


tratarlos como tales. Por ejemplo, hay determinadas clases que manipulan objetos
(ArrayList, HashMap, …).
Para poder utilizar tipos primitivos con estas clases Java provee las llamadas clases
envolventes también llamadas clases contenedoras o wrappers.
Listas – Declaración
Cada tipo primitivo tiene su correspondiente clase envolvente:

- Estas clases proporcionan métodos


que permiten manipular el tipo de
dato primitivo como si fuese un
objeto
Listas – Operaciones Básicas
Los métodos que ofrece la clase ArrayList son:

Listado oficial de todos


los métodos en la
documentación de Java:
https://docs.oracle.com/j
avase/9/docs/api/java/ut
il/ArrayList.html
Listas – Operaciones Básicas
Ejemplos de uso de operaciones de ArrayList:
//Declaración de un ArrayList de "String". Puede ser de cualquier otro tipo.
ArrayList<String> nombreArrayList = new ArrayList<String>();

//Añade el elemento al ArrayList


nombreArrayList.add("Elemento");

//Añade el elemento al ArrayList en la posición 'n'


nombreArrayList.add(n, "Elemento 2");

//Devuelve el numero de elementos del ArrayList


nombreArrayList.size();

//Devuelve el elemento que esta en la posición '2' del ArrayList


nombreArrayList.get(2);
Listas – Operaciones Básicas
Ejemplos de uso de operaciones de ArrayList:

//Comprueba se existe del elemento ('Elemento') que se le pasa como parametro


nombreArrayList.contains("Elemento");

//Devuelve la posición de la primera ocurrencia ('Elemento') en el ArrayList


nombreArrayList.indexOf("Elemento");

//Devuelve la posición de la última ocurrencia ('Elemento') en el ArrayList


nombreArrayList.lastIndexOf("Elemento");

//Borra el elemento de la posición '5' del ArrayList


nombreArrayList.remove(5);
Listas – Operaciones Básicas
Ejemplos de uso de operaciones de ArrayList:

//Borra la primera ocurrencia del 'Elemento' que se le pasa como parametro.


nombreArrayList.remove("Elemento");

//Borra todos los elementos de ArrayList


nombreArrayList.clear();

//Devuelve True si el ArrayList esta vacio. Sino Devuelve False


nombreArrayList.isEmpty();

//Copiar un ArrayList
ArrayList arrayListCopia = (ArrayList) nombreArrayList.clone();
Listas – Recorrido
El recorrido puede hacerse utilizando el bucle FOR o el bucle FOR EACH

Sintaxis con bucle FOR:


for(int i = 0;i < miLista.size();i++){
System.out.println(miLista.get(i));
}

Sintaxis con bucle FOR EACH:


for(Integer i: miLista){
System.out.println(i);
}
Listas – Iteradores
Una alternativa a FOR/FOR EACH es usar un Iterador .
Un Iterador es un interfaz de Java que dispone de los métodos “hasNext()” y “next()”
y permite recorrer una colección de elementos.

Sintaxis con Iterator:


ArrayList<String> miLista = new ArrayList<String>();

Iterator<String> it = miLista.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
Listas – Iteradores
hasNext:devuelve true si hay más elementos en la lista
next: devuelve el siguiente objeto contenido en la lista

Sintaxis con Iterator:


ArrayList<String> miLista = new ArrayList<String>();

Iterator<String> it = miLista.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
Listas – Pasar como Parámetro
Muchas veces es necesario enviar como parámetro de un método una lista en
particular, para ello se procede la siguiente manera:

Teniendo el método “imprimir” escrito de la siguiente forma:


public static void imprimir(ArrayList<String> listaDatos) {
//Hago algo con la lista recibida como parámetro
}

Se llama desde el programa principal (u otro lado del programa) de la siguiente


manera:
//…
ArrayList<String> miLista = new ArrayList<String>();
imprimir(miLista);
//…
Listas – Ejercicio
Ejercicio 1

Utilizando menú de opciones, métodos/funciones/procedimientos:


Definir dos listas, una con los nombres de personas y la otra con la altura de cada
uno
Solicitar al usuario que ingrese nombres de personas y sus edades. El final del ingreso
será cuando ingrese el valor 0. Guardar la información en las listas.

Imprimir todas las personas junto con sus edades.


Imprimir la persona más alta junto con su altura.
Imprimir la persona más baja junto con su altura.
Listas de Objetos
Hasta ahora se vio como crear listas de tipos básicos (usando su clase envolvente):
Integer, Long, Float, etc. pero también es posible crear listas de tipos complejos o
clases. Un ejemplo de esto es al crear listas con elementos de tipo String (recordar
que String es una clase de Java).

La sintaxis sigue siendo la misma:


ArrayList<MiClase> miLista = new ArrayList<MiClase>();

Donde “MiClase” es una clase en particular que existe dentro del proyecto. De modo
tal que al acceder a un elemento se podrán acceder a los atributos y métodos que
tenga dicha instancia de clase (objeto).
El resto del funcionamiento es exactamente el mismo que de las listas vistas hasta
ahora.
Listas de Objetos
Ejemplo 1

Se tiene una clase Empleado con los atributos: id, nombre, cargo.
Se necesita crear una lista que contenga 3 empleados.
Se necesita imprimir el contenido de la lista.
Listas de Objetos
Ejercicio 1: usando menú de opciones, clases/objetos y listas.
Crear una clase Libro que contenga los siguientes atributos:
– ISBN
– Titulo
– Autor
– Número de páginas
Crear sus respectivos métodos get y set correspondientes para cada atributo. Crear
el método getDatos() para mostrar la información relativa al libro con el siguiente
formato:
“El libro con ISBN XXXX creado por el autor XXXX tiene XX páginas”
Crear 5 libros (solicitando datos al usuario), agregarlos a una lista y mostrarlos por
pantalla (todos).
Mostrar el segundo libro.
Mostrar cuál es el libro que tiene más páginas.
Listas de Objetos
Ejercicio 2: usando menú de opciones, clases/objetos y listas.
Crear una clase Producto que contenga los siguientes atributos:
– Código
– Nombre
– Precio
– Stock
Crear sus respectivos métodos get y set correspondientes para cada atributo.
Crear 5 productos (solicitando datos al usuario), agregarlos a una lista y mostrarlos por pantalla (todos).
Permitir realizar la búsqueda de un producto por su código, esto se hace recorriendo la lista y comparando el
código ingresado por el usuario contra el código de cada elemento de la lista, usando el método:
miElemento.equalsIgnoreCase(codigoDelUsuario) devuelve true si es igual, false si no es igual. (Consultar
método equalsIgnoreCase() en documentación de Java si hay alguna duda). Si se encuentra el producto,
imprimir sus datos.
Modificar el stock de un producto previa búsqueda en la lista por su código. Se busca por código, si se
encuentra se modifica el valor de stock con su método set() y luego finaliza la búsqueda.
Imprimir todos los productos.
Herencia
➢ Es la capacidad de crear clases que adquieren de manera automática los
miembros (atributos y métodos) de otras clases que ya existen, pudiendo al
mismo tiempo añadir atributos y métodos propios.
➢ Es uno de los pilares de la POO.
➢ Java soporta la herencia permitiendo una clase a incorporar otra clase en su
declaración. Esto se hace mediante el uso de la palabra clave extends. Por lo
tanto, la subclase se añade (se extiende) a la superclase.
Herencia – Conceptos básicos
En la herencia, es importante entender los siguientes conceptos básicos:

➢ Superclase: la clase cuyas características se heredan se conoce como superclase


(o una clase base o una clase principal).
➢ Subclase: la clase que hereda la otra clase se conoce como subclase (o una clase
derivada, clase extendida o clase hija). La subclase puede agregar sus propios
atributos y métodos además de los atributos y métodos de la superclase.
➢ Reutilización: la herencia respalda el concepto de “reutilización”, es decir,
cuando se quiere crear una clase nueva y ya hay una clase que incluye parte del
código que se necesita, se puede derivar a la nueva clase de la clase existente. Al
hacer esto, se están reutilizando los atributos y métodos de la clase existente.
Herencia - Ventajas
Entre las principales ventajas que ofrece la herencia en el desarrollo de
aplicaciones, están:

➢ Reutilización del código:en aquellos casos donde se necesita crear una clase
que, además de incluir métodos propios, deba incluir los métodos definidos en
otra, la herencia evita tener que reescribir todos esos métodos en la nueva clase.
Lo mismo para los atributos.

➢ Mantenimiento de aplicaciones existentes: utilizando la herencia, si se tiene


una clase con una determinada funcionalidad y se tiene también la necesidad de
ampliar dicha funcionalidad, no se necesita modificar la clase existente (la cual se
puede seguir utilizando para el tipo de programa para la que fue diseñada) sino
que se puede crear una clase que herede a la primera, adquiriendo toda su
funcionalidad y añadiendo la suya propia.
Herencia - Ejemplo
Teniendo en cuenta que se quiere crear un programa en Java que permita definir un
objeto bidimensional con los atributos base y altura; y también uno o más objetos
triángulo con el atributo estilo (para indicar si es triángulo rectángulo, isósceles, etc.)
Utilizar herencia de clases.

C14EJ1
Herencia – Control de Acceso a
Miembros
A menudo una variable de instancia de una clase se declarará
privada (private) para evitar su uso no autorizado o alteración.
Heredar una clase no anula la restricción de acceso privado. Por
lo tanto, aunque una subclase incluye a todos los miembros
(atributos) de su superclase, no puede acceder a los miembros
de la superclase que se han declarado privados.
Herencia – Control de Acceso a
Miembros
Ejemplo:
Si se modifica la clase Bidimensional y se hacen privados sus atributos:
class Bidimensional{
private double base;
private double altura;

void mostrarDimension(){
System.out.println("La base y altura es: "+base+" y "+altura);
}
}

La clase Triangulo no podrá acceder a los atributos heredados base y altura:


class Triangulo extends Bidimensional {
String estilo;

double area(){
return base*altura/2; //Error! no se puede acceder a estos atributos
}
}
Herencia – Control de Acceso a
Miembros
En este caso, solamente se podrá acceder a los atributos privados altura y base
de Bidimensional desde sus propios métodos. Por tanto solo se los podrá
acceder desde su propia clase, no desde las subclases.
Por esta razón, siempre se utilizan métodos de acceso o métodos get()/set() que
permitan acceder a los atributos privados de la superclase.

Ejemplo de herencia utilizando el control de acceso a miembros.


C14EJ2
Herencia – Constructores
En una jerarquía, es posible que tanto las superclases como las subclases tengan sus propios
constructores.

Entonces… ¿qué constructor es responsable de construir un objeto de la subclase, el


de la superclase, el de la subclase o ambos?

La respuesta es: el constructor para la superclase construye la porción de la


superclase del objeto, y el constructor para la subclase construye la parte de la
subclase.
Esto tiene sentido porque la superclase no tiene conocimiento ni acceso a ningún elemento en
una subclase. Por lo tanto, su construcción debe estar separada.

Ejemplo de Herencia y Constructores.


C14EJ3
Herencia – Constructores
Cuando tanto la superclase como la subclase definen constructores, el
proceso es un poco más complicado porque deben ejecutarse tanto los
constructores de la superclase como los constructores de
subclase. En este caso, se debe usar otra de las palabras clave de
Java, super, que tiene dos formas generales:

➢ El primero llama a un constructor de superclase.


➢ El segundo se usa para acceder a un miembro de la superclase que
ha sido ocultado por un miembro de una subclase.
Herencia – Super en Constructores
Ejemplo de Constructores en Superclase y Subclase usando “super”.
C14EJ4

➢ La llamada a super() debe ser la primera instrucción en el constructor de la subclase


(Estudiante en el ejemplo).
➢ Si un constructor no invoca explícitamente un constructor de superclase, el compilador de
Java inserta automáticamente una llamada al constructor sin argumento de la superclase. Si la
superclase no tiene un constructor sin argumentos, obtendrá un error en tiempo de
compilación.
➢ Si un constructor de una subclase invoca un constructor de su superclase, ya sea explícita o
implícitamente, puede pensar que se llamó a toda una cadena de constructores, todo el
camino de regreso al constructor de Object. Esto, de hecho, es el caso. Se
llama encadenamiento de constructores.
Herencia – Super en Miembros de
Clase
Ejemplo de Miembros en Superclase y Subclase usando “super”.
C14EJ5

Esto se usa cuando se quiere llamar al método de clase padre (superclase). Entonces,
cuando una clase padre e hijo (subclase) tienen los mismos métodos nombrados,
entonces para resolver la ambigüedad se utiliza la palabra clave super.
Herencia – Datos importantes
➢ Superclase predeterminada: excepto la clase Object, que no tiene superclase, cada clase
tiene una y solo una superclase directa (herencia única). En ausencia de cualquier otra
superclase explícita, cada clase es implícitamente una subclase de la clase Object.
➢ La superclase solo puede ser una: una superclase puede tener cualquier cantidad de
subclases. Pero una subclase solo puede tener una superclase. Esto se debe a que Java no
admite herencia múltiple con clases. Aunque con interfaces, la herencia múltiple es compatible
con java.
➢ Heredar constructores: una subclase hereda todos los miembros (campos, métodos y
clases anidadas) de su superclase. Los constructores no son miembros, por lo que no son
heredados por subclases, pero el constructor de la superclase puede invocarse desde la
subclase (usando “super”).
➢ Herencia de miembros privados: una subclase no hereda los miembros privados de su
clase principal. Sin embargo, si la superclase tiene métodos públicos o protegidos (como get()
y set()) para acceder a sus campos privados, estos también pueden ser utilizados por la
subclase.
Herencia – Sobre las subclases
En las subclases se pueden heredar los miembros tal como están, reemplazarlos,
ocultarlos o complementarlos con nuevos miembros:

➢ Los campos heredados se pueden usar directamente, al igual que cualquier otro
campo.
➢ Se pueden declarar nuevos campos en la subclase que no están en la superclase.
➢ Los métodos heredados se pueden usar directamente tal como son.
➢ Se puede escribir un nuevo método de instancia en la subclase que tenga la misma
firma que el de la superclase, anulándolo.
➢ Se pueden declarar nuevos métodos en la subclase que no están en la superclase.
➢ Se puede escribir un constructor de subclase que invoca el constructor de la
superclase, ya sea implícitamente o mediante la palabra reservada “super”.
Herencia – Ejercicio 1
Definir una clase Auto y una clase Moto que desciendan de la clase Vehiculo.
Definir los atributos a gusto teniendo en cuenta que atributos tienen esas clases en
los objetos del mundo real.
Definir los métodos de acceso get()/set().
Definir constructores donde corresponda para facilitar la inicialización de los
atributos del objeto.
Definir un método obtenerDatos() en la clase Vehiculo y en la clase Auto.
Crear dos objetos, uno Auto y otro Moto, asignar valores a sus atributos y llamar al
método obtenerDatos() y mostrar todos los atributos que tiene ese objeto Auto (de
la clase Auto y Vehiculo).
Usar herencia.
Herencia – Ejercicio 2
Utilizando menú de opciones, listas y herencia:

Se tiene que crear un sistema de gestión para una empresa que cuenta con varios empleados.
Cada empleado tiene un nro. de legajo, puesto y salario. Se necesita que el sistema permita:
-Aumentar el salario de un empleado en un porcentaje X.
-Modificar el puesto de un empleado por otro.
-Buscar empleado por número de legajo y mostrar sus datos.
-Eliminar un empleado de la lista de empleados buscándolo por número de legajo.
-Listar todos los empleados.
Definir los atributos a gusto teniendo en cuenta los atributos que existen en el mundo real para
los objetos de las clases identificadas.
Definir los atributos, métodos de acceso, constructores y métodos modificadores que
correspondan en base al problema y a la imaginación para abstraer el mundo real dentro del
dominio planteado.
Herencia – Ejercicio 3
Utilizando menú de opciones, listas y herencia:
Se tiene que crear un sistema de gestión para una expendedora de bebidas.
De cada bebida solamente interesa su numero de identificación (ID, único), cantidad de litros, precio y marca.
Las bebidas pueden ser agua mineral o bebidas azucaradas.
Si se trata de agua mineral, también interesará saber de cuál manantial es (un nombre del origen).
Si se trata de una bebida azucarada, interesará saber cuál es el porcentaje de azúcar y si tiene o no alguna
promoción. En caso de tener promoción, al precio se le descontará siempre un 10%.
Se necesita que el sistema permita:
-Cargar una bebida indicando los datos que correspondan según si es agua mineral o bebida azucarada. (El ID
de la bebida NO debe repetirse, debe ser único).
-Eliminar una bebida dado su ID.
-Buscar una bebida por ID y mostrar sus datos.
-Calcular el precio promedio de todas las bebidas existentes.
-Calcular el precio promedio de una marca de bebida en particular.
-Listar todas las bebidas
Definir los atributos, métodos de acceso, constructores y métodos modificadores que correspondan en base
al problema y a la imaginación para abstraer el mundo real dentro del dominio planteado.

You might also like