UTN Programacion JAVA
UTN Programacion JAVA
a Algoritmos y Java
“Desarrollador Java Inicial”
Java
● Lenguaje de desarrollo de propósito general
● Portable: Funciona en todos los sistemas operativos
● Gran Comunidad y base de un gran número de proyectos
● Maduro
● Orientado a Objetos
● Compilado
Java - Sintaxis Básica - Variables y Tipos de datos primitivos
Op Binarias básicas
int miPrimerContador = 66;
double unValor = 1.68;
10 + 20
15 - 12
miPrimerContador + 20
10 * 3
15 - 12
8 / 3
10 * 3
8 % 3 // 2
unValor / 3
2 ** 3 // 8
8 % 3
Precedencia
3 * 2 + 3
(3 * 2) + 3
Java - Sintaxis Básica - Booleanos
Operaciones y predicados
int miPrimerContador = 66;
10 > 20 double unValor = 1.68;
15 >= 12 double otroValor = 1.67;
10 == 3
8 != 3
unValor == (otroValor + 0.01)
! unBooleano // false
unBooleano && otroBooleano // false Relacionar con condiciones
unBooleano || otroBooleano // true “Monotributo”
if(unValor < otroNum) { char unaLetra = 'a'; unBooleano && (otroBooleano || True)
//una accion switch (unaLetra){ if(unValor < otroNum) {
} case 'b': //una accion
if(unValor < otroNum) { //Hacer A }
//una accion break;
} else { case 'a': int unValor = 1;
//otra accion //Hacer B int otroValor = 2;
} break;
default: boolean unaCond = unValor == (otroValor + 1);
//Hacer Z
}
if(unaCond) {
// hacer algo
}
Todos los lenguajes de programación tienen una forma de enviar información al usuario, ya
sea mediante ventanas o lo que llamamos la “consola”. En este curso, utilizaremos mucho
mostrar contenidos de variables e información usando el comando:
} }
● Arrays
○ Definición
○ Declaración
○ Iteración
● Strings
○ Declaración
○ Uso
○ Métodos principales
Arrays
Definición
… … …
Etc
Ejemplo de array de números
int numeros[] = new int[3]; // Así se declara un arreglo de enteros
se crea el
se declara array
la variable
1 Elemento número 0 “cero”
numeros[0] = 1; // asignación
numeros[1] = 37; Elemento número 1
37
numeros[2] = 16;
16 Elemento número 2
System.out.println(numeros.length)
// imprime por pantalla: 3
// La sintaxis de punto “.” indica que estamos accediendo a una propiedad de
la variable. Lo que vimos como “tipos primitivos” no lo permiten, pero los
arrays tienen una fundamental: “length”, que nos dice el tamaño del array.
for(int indice=0;indice<indice;indice++){
System.out.println(otroNum);// imprime por pantalla cada elemento
}
Java - Sintaxis Básica - Vectores/Arrays básicos
int numeros[] = new int[10];
char letras[] = {'a','b','c'};
numeros[0] = 10;
numeros[5] = 14;
System.out.println(numeros[5] / 7);
//2
for (char letra : letras){
System.out.println(letra);
}
// a
// b
// c
Java - Vectores/Arrays básicos - Importante
● Se puede pensar como un array del tipo de dato “char”, aunque como veremos,
tiene muchas operaciones particulares. Por ejemplo para acceder a un carácter
en particular se puede hacer:
txt1.charAt(2); // "l"
String - Operaciones
● Existen numerosas operaciones que se pueden hacer con los strings, vamos a tomar las
variables de ejemplo:
String txt1 = "Hola!";
String txt2 = "Chau!";
● Comparar
txt1.equals(txt2); // false
txt1.equals(txt1); // true
-> notar que NO debe usarse el operador == para comparar Strings
● Largo de un String
txt1.length(); // 5
String - Operaciones
String unTexto = "laLA";
● Reemplazar "hola","chau").toUpperCase();
Quizás la operación más usada de String, es “split” el cual convierte un String en un String[ ]
(es decir un array de strings), a partir de un separador. Por ejemplo:
● Escribir una comilla doble: si con “ declaramos un string, como hacemos para que aparezca en el
medio del texto que queremos escribir?
"hola, \"que tal\" " // con \ decimos que “escapamos” el caracter
La pregunta es como representamos esa “sumatoria(numeros)”, para utilizarla en nuestro programa de promedios.
Primer función reutilizable
Entonces queda algo así:
import java.nio.file.Files;
import java.nio.file.Path;
El código mostrado en esta
public class MiPrograma {
PPT funciona con la
versión 17 de la JDK
public static void main(String[] args) {
//...
Archivos - Operaciones - Lectura
Lectura de las líneas de un archivo
Files.readAllLines(Paths.get("C:\\Users\\JuanPablo\\unArchivo.txt" )
- De esto hay varios comentarios para hacer
2) readAllLines recibe la ruta generada por Paths.get y retorna una lista de Strings. Aún no vimos
ese tipo de dato, pero sabemos que puede ser iterado. Por ejemplo:
1) Esta forma es útil siempre y cuando el archivo no sea muy grande (unos pocos megas)
Archivos - Operaciones - Escritura
writeString recibe la ruta generada y como segundo parámetro un String con contenido. Nuevamente,
este método es efectivo, cuando el String a escribir no es muy grande.
Manipulación de archivos, creación e información extra
Path unArchivo = Paths.get("../recursos/algo.txt");
System.out.println(unArchivo.toAbsolutePath());
Files.write(utfFile, (System.lineSeparator() +
"y acentos á ").getBytes(),StandardOpenOption.APPEND);
System.out.println(Files.readAllLines(utfFile) .size());
● Una clase es la representación de una entidad o concepto, la cual posee atributos (concepto similar a
variable) y métodos ( concepto similar a función). Sin embargo la clase describe características
generales
● La forma más sencilla de definir un objeto, es describirla como una instancia de una clase. Es decir,
posee las características generales de la misma, pero con valores concretos
Clases y Objetos - Java
El paquete de una clase se declara en la primer línea y permite que existan
package ar.edu.utn;
varias clases con el mismo nombre
import java.time.LocalDate; Los import permiten utilizar clases de otros paquetes más convenientemente
private static final Double minPrecio = 0.1; Atributos de clase o estáticos, su valor es compartido por todos los
objetos de la clase
public Producto(String nombre) {
this.nombre = nombre; Constructor, se utiliza para crear objetos de la clase en cuestión. En
this.fechaAlta = LocalDate.now(); este caso si queremos crear un nuevo producto la sintaxis es:
this.precio = minPrecio; Producto prod = new Producto("Atún");
}
public String getNombre() { Métodos de instancia, funciones que se ejecutan en el contexto del
return this.nombre; objeto. Con la palabra clave “this” se accede al estado (valores de los
} atributos) de un objeto en particular. Por ejemplo, el método
public String getDescripcion() { prod1.getNombre( ) y prod2.getNombre( ) retornan el valor
return this.descripcion; correspondiente a su instancia.
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
}
Clase
● Comportamiento y atributos (no valores) compartidos por un conjunto de objetos. Los atributos son
de una clase o tipo primitivo determinado
● Elementos de Instancia:
○ Variables: tienen un valor distinto por Objeto
○ Métodos: código a ejecutar, tiene acceso a variables de instancia
● De Clase o Estáticos
○ Variables: compartida por todos las instancias de una clase
○ Constantes: Variable de clase que no se puede cambiar en tiempo de ejecución, hay que recompilar.
○ Métodos: código a ejecutar, no está asociado con una instancia en particular
○ Por ejemplo:
■ LocalTime.now()
■ Integer.parseInt("1234")
■ Math.abs(-37)
Objetos
● Un objeto es una instancia de una determinada Clase
● Todo objeto se crea a través de un constructor. Con Java, el mismo se llama utilizando la palabra reservada new. Si no
se declara ninguno, por defecto tienen un constructor vacío. Si se declara uno con parámetros, el constructor vacío
debe declararse explícitamente.
this.nombre = nombre;
public Producto() {
● Para utilizar un método de un objeto, decimos que al mismo se le envía un “mensaje”. Para representar esto, se pone
un punto “.” luego de una variable referenciando un objeto:
objetoX.metodo(param1,param2,...)
Clase - Visibilidad / Alcance
● Público: atributos o métodos pueden ser utilizados por instancias de cualquier clase.
● Protected: atributos o métodos pueden ser utilizados sólo por instancias de la misma clase o sus
subclases.
● Paquete: atributos o métodos pueden ser utilizados sólo por instancias de clases que están en el
mismo paquete. (propio de Java)
● Privado: atributos o métodos pueden ser utilizados sólo por instancias de la misma clase.
Alcance o scope
Herencia en java
“Desarrollador Java Inicial”
Clase - Herencia
● Concepto: Si X hereda de Y, “una instancia de X es también una instancia de Y”. Por ejemplo:
○ Un Perro es un Mamífero
○ Un Docente es un Empleado y un Empleado es una Persona
● Herencia Simple
○ Una clase puede heredar sólo de una
● En Java:
○ Se heredan los atributos y métodos de instancia
○ Todas las clases heredan de la clase Object
○ Los atributos / métodos de clase no se heredan
○ Los constructores no se heredan
public abstract class Descuento {
● La misma tiene varios métodos, que por lo que establecimos antes, los van a compartir TODOS los
objetos que creemos. En principio hablaremos de estos 2:
○ toString:
■ Muestra una representación en String del objeto
■ Orientado al desarrollador
■ X defecto muestra el nombre de la clase y el “identificador” del objeto
○ equals
■ Determina si 2 objetos son “iguales”
■ X defecto es una operación de identidad
● Contrato a cumplir
● Sin estado
● Se pueden implementar múltiples
● Se pueden definir constantes
● Semánticamente != heredar
Este es un mecanismo indicado para cuestiones sencillas (por ejemplo en la mayoría de los SO un proceso
que termina correctamente retorna cero y si hay algún error cualquier otro número), pero cuando las
situaciones de error son más complejas son poco adecuadas
Excepciones
1. Arrojar la Excepción
public class ItemCarrito {
public float precio() throws NoHayStockException {
if (!producto.hayStock()) {
throw new NoHayStockException(producto);
}
return this.cantidad * this.producto.getPrecio();
}}
Implementación
3. “Subir” la Exception
public class CarritoCompra {
public float precio() throws
NoHayStockException {
return item1.precio() + item2.precio()
+ item3.precio();
}
}
4. Tratar la excepción
public static void main(String[] args) {
CarritoCompra carrito = new CarritoCompra();
// Se arma el carrito …
try {
Float precio = carrito.precio();
System.out.println("el precio del carrito es: " + precio.toString());
} catch (NoHayStockException e) {
System.out.println("No hay stock de al menos uno de los productos"
);
}
}
Excepciones Comunes
Java y algunas librerías base, ya establecieron excepciones
comunes y algunas de ellas deberían ser utilizadas o
heredadas antes de crear otras.
No chequeadas
● NullPointerException
● DivisionByCeroException
● IllegalStateException
Chequeadas
● FileNotFoundException
● IOException
….
Para tener en cuenta
● Depende un poco de mi marco de referencia, pero en general hay que pensar que errores un “usuario”
puede llegar a cometer (olvidarse de la UI)
● ¿Cuántas Crear?
○ Tampoco sirve tener muchos tipos de error…
○ No se puede tener en cuenta todo
Gestión de dependencias
“Desarrollador Java Inicial”
Dependencias de Software
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>nombre-proyecto</groupId>
<artifactId>nombre-proyecto</artifactId>
<version>1</version>
</project>
Maven - ¿Cómo usarlo?
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
……………………….
</project>
Maven - ¿Cómo agrego dependencias?
● DB Relacionales
○ Introducción
○ Tipos
○ Relacionales
○ Relaciones
○ Claves
● Introducción SQL
○ Definición de Datos (DDL)
○ Manipulación de Datos (DML)
○ Consultas (DQL)
DB Relacionales
DB Relacionales - Introducción
Según la RAE:
https://db-engines.com/en/ranking
DB Relacionales - Relacionales
Entidades
Relaciones
DB Relacionales - Relacionales
DB Relacionales - Relaciones
DB Relacionales - Claves
Clave Primaria (PK) → Las claves primarias (Primary Key) son las que
identifican de manera única cada fila o registro de una tabla, es decir, que no
se puede repetir en una tabla el valor de un campo o columna que se le es
asignado como PK.
Clave Foránea (FK) → Una clave foránea (Foreign Key) es un campo de una
tabla “X” que sirve para relacionar con otra tabla “Y” en la cual el campo de
esta tabla es una clave primaria (PK). Esta clave nos permite mantener la
integridad referencial en la base de datos.
Introducción
SQL
Introducción SQL
● Dentro de SQL, existe entre otros un lenguaje de definición de datos (DDL) y un lenguaje
de manipulación de datos (DML).
PRINCIPALES
Introducción SQL - Definición de Datos (DDL)
Nombre de la tabla
CREATE TABLE idioma (
id INT(11),
codigo VARCHAR(45), Tipo de dato
nombre VARCHAR(45)
)
Nombre de la columna
Introducción SQL - Manipulación de Datos (DML)
Valores a insertar
Introducción SQL - Consultas (DQL)
Nombre de la tabla
Condición
Introducción SQL - Consultas (DQL)
Nombre de la tabla
Condición
Introducción SQL - Consultas (DQL)
Nombre de columnas
Filtro de filas
JDBC
“Desarrollador Java Inicial”
JDBC
● JDBC (Java Database Connectivity) conecta una aplicación Java a una fuente de datos como
puede ser una DB.
Java Data
JDBC
Application Source
JDBC - API
JDBC
SQLite driver SQLite
JDBC
… driver …
DBMS
Database Management System
JDBC - API
● JDBC (Java Database Connectivity) conecta una aplicación Java a una fuente de datos como
puede ser una DB.
Java Data
JDBC
Application Source
JDBC - Implementación
01 Registrar driver
02 Crear conexión
03 Crear sentencia
04 Ejecutar consulta
05 Cerrar conexión
JDBC - Implementación
1. Registrar la ‘clase’ del driver - Este método se utiliza para registrar la clase que se utilizará como driver.
2. Crear el objeto de conexión - Este método se utiliza para establecer conexión con la DB.
Para conectarnos a una DB (por ej. mysql) debemos conocer la siguiente información:
Repositorios
¿Para qué se (públicos –
¿Qué es GIT? ¿Cómo se usa?
usa? privados, local
–remoto)
● GitHub
● GitLab
● Bitbucket
● Gogs
GitHub
https://git-scm.com/downloads
Instalación en el Sistema Operativo
https://desktop.github.com/
Configuraciones Globales
git status
git pull
“En este caso, git pull descargará todos los cambios desde el punto de
separación de la rama local y la rama principal. En el ejemplo, ese punto
es E.
El comando git pull recuperará las confirmaciones remotas
divergentes, que son A, B y C. A continuación, el proceso de
incorporación de cambios creará otra confirmación de fusión local que
incluya el contenido de las nuevas confirmaciones remotas
divergentes.”
Git Pull
Git Pull