ATENCIÓN! SON APUNTES Y EN BORRADOR!!
Hoy me he dado cuenta de lo mucho, muchísimo que tengo que repasar de programación y de aprender sobre Java! Mucho que practicar!
LIBRO RECOMENDADO: “Aprenda Java como si estuviera en primero”
REPASO:
developer.android.com
Portal
Explosión hacia las Best Practices
“Patrón MVC”
Portal muy bien estructurado

Super interesante

intellij – Creó Kodlin – Entorno para la parte de Java
Android Virtual Device (AVD)
Importante el compromiso de la orquilla (versiones SDK desde x hasta Y)
NFC Near Field Communication -> Funcionalidad secundaria
Manifiesto: es la configuración
Otras tiendas de Apps: Amazon, Samsung
PERMISOS – Permisos de ejecución – Cuenta Google? Cámara? Conactos? etc…
Importancia del VALOR de la App para que triunfe. Si no hay valor = se convierte en aplicación zombie
POO Programacion Orientada a Objetos es 3D
Estamos iniciando programación en Java en 2D
hashtable=diccionario
notacion “pascal case”: marcaAnterior para métodos o variables?
else if
//TODO:
//trozos de comentario de cosas pendientes por hacer
i=i+1
i+=1
i++
if((a!=1) || (b>2))
| = “pipe”
try {
// Ejecuta código que es susceptible de poder tener algún problema
} catch(ArrayIndexOutOfBoundsException ex){
Captura error
System.out.println(“Se ha excedido el límite del array”);
} finally {
// este codigo siempre se ejecuta
Aunque haya habido un problema o no, hacer ultimas operaciones: cerrar base de datos, cerrar conexiones, etc…
}
if AA && BB && CC… Si AA ya es False, no sigue evaluando la condición
if((finalistas[i] != null) && (i<finalistas.length) ) peta si i llega a 5, porque llega a evaluar finalistas[5], que no existe. Por eso lo arreglamos así:
if((i<finalistas.length) && (finalistas[i] != null))
Codigo tolerante a fallos.
Optimización de código.
if ternario, muy utilizado en java, que queda en una única línea (diferente al if clásico):
return (marca1 > marca2) ? ganador : finalista;
si la condición entre paréntesis es verdadera, devuelve ganador, si es falsa devuelve el valor de finalista
Trozear el código en funciones: parte de la optimización
Creacion de estructuras dinamicas de crecimiento dinamico
Array lists:
ArrayList<E>
E=concepto en JAva: los generics: no te determinan el tipo en concreto, array generico de cualquiero tipo de dato en JAva:
ArrayList<String> finalistas;
ambito o scope: donde es visible la variable
ambito total
private static ArrayList<String> finalistas;
finalistas = new ArrayList<String>(); -> instanciamos el objeto ArrayList
coleccion dinamica llamada “finalistas”:
finalistas.add(atletas[i]); -> crecimiento dinamico, el array solo ocupa lo que tenga que ocupar, depende del numero de lementos que contenga
refactorizacion: mejorando y optimizando el código

Con el CTRL, podemos ir al método, si tb le damos a click
finalistas.get(i) -> Metodo get de los ArrayList
finalistas.size()
Unitest – JUnit – Unit Testing, cuando quieres probar un metodo o una clase ara probarlo a ver si peta o no: accion automatizada, para estresarlo y ponerlo a prueba
private static ArrayList<int> marcas; INCORRECTO! int es de tipo primitivo
private static ArrayList<Integer> marcas; correcto: Integer es un objeto
Metodo
var arts String… (Antiguamente String[]
var arts es una notación más moderna
var arts (paso de argumentos variables: pudes pasar 1 nombre de persona, 3, 5, 50 o lo que sean necesarios)
“condicion frontera” ¿que pasa si se inscriben 0 atletas? ¿qué le pasa a mi programa si no le paso ningún argumento?
marcas.add(marca)
marcas.size() -> si es de objetos
marcas.lenght()->si es un array de ints primitivos
Debug: método paso a paso



Step into.
refactorizar: no introducimos mejores, solo lo optimizamos
evolucionar, nuevas funcionalidades
test de regresion
if (deportistas!=null)
{
}
else
{
throw new Exception(“Sin inscripciones”);
}
Pasemos a
Cuando yo me creo una casa, primero me creo un plano:
class Plano
{
//
float ancho;
float largo;
int numeroHabitaciones;
double superficie;
//comportamiento (metodos)
int obtenerNumeroHabitaciones()
{
return numeroHabitaciones;
}
}
¿Cómo convierto ese plano en una casa? Instanciando:
Plano casa = new Plano();
Plana casa2 = new Plano();
class Atleta{
//atributos //principio de encapsulacion, nadie puede acceder a los atributos libremente
private String nombre;
//comportamiento
String getNombre(){
return nombre;
}
}
Código hasta ahora:
[java]<br/><br/>package es.pue.android;<br/><br/>import java.util.ArrayList;<br/>import java.util.Arrays;<br/>import java.util.Random;<br/><br/>public class Main {<br/><br/> private static ArrayList&lt;String> atletas;<br/> private static ArrayList&lt;String> finalistas;<br/> private static ArrayList&lt;Integer> marcas;<br/><br/> public static void main(String[] args) {<br/> //tenemos 5 atletas lanzadores de martillo...<br/> //Solo puede ganar uno<br/> //El tope de longitud en la final es de 200m<br/> /*<br/> Hay una fase eliminatoria donde quedarán los<br/> que superen o igualen la marca de 120m<br/> */<br/><br/> //creacion de atletas<br/> /*<br/> String atleta1 = "Ricardo";<br/> String atleta2 = "Pepe";<br/> String atleta3 = "Marta";<br/> String atleta4 = "Berta";<br/> String atleta5 = "Alberto" ;<br/> */<br/><br/><br/><br/><br/><br/> //creacion de un array donde guardar las marcas de<br/> // los 5 atletas<br/> //int[] marcas = new int[5];<br/> //int[] finalistas = new int[5];<br/> //String[] finalistas = new String[5];<br/><br/><br/><br/><br/> try{<br/> init();<br/> inscribirAtletas(null);<br/> //lanzar martillo tantas veces como atletas haya<br/> //entero [0 .. 200]<br/> //declaracion variable<br/> ejecutarEliminatoria();<br/><br/> obtenerFinalistas();<br/><br/> verFinalistas();<br/><br/> //obtener finalistas (los que han syperado 120m)<br/> //obtener ganador (de entre todos los finalistas)<br/> String ganadorMartillo = ejecutarFinal();<br/> System.out.println("Ganador: " + ganadorMartillo);<br/> } catch (Exception ex){<br/> System.out.println(ex.getMessage());<br/> }<br/> }<br/><br/> private static void init(){<br/><br/> /*<br/> atletas[0] = "Ricardo";<br/> atletas[1] = "Pepe";<br/> atletas[2] = "Marta";<br/> atletas[3] = "Berta";<br/> atletas[4] = "Alberto";<br/> */<br/> atletas = new ArrayList&lt;String>();<br/> //crecimiento dinamico<br/> finalistas = new ArrayList&lt;String>();<br/> marcas = new ArrayList&lt;Integer>();<br/><br/> }<br/><br/> private static void obtenerFinalistas() {<br/> //int j = 0;<br/> for(int i=0;i &lt; marcas.size();i++){<br/> int marca = marcas.get(i);<br/> if (marca >= 120){<br/> //finalistas[j] = atletas[i];<br/> //j = j + 1;<br/> //coleccion dinamica<br/> finalistas.add(atletas.get(i));<br/> }<br/> }<br/> }<br/><br/> private static void ejecutarEliminatoria() {<br/> //estructura iterativa<br/> for(int i=0;i &lt; atletas.size();i++){<br/> int marca = tirarMartillo();<br/> //marcas[i] = marca;<br/> marcas.add(marca);<br/> }<br/> }<br/><br/> private static String deshacerEmpate(String ganador, String finalista){<br/><br/> int marca1,marca2;<br/> do {<br/> marca1 = tirarMartillo();<br/> marca2 = tirarMartillo();<br/> }while (marca1 == marca2);<br/><br/> //aseguramos que marca1 != marca2<br/><br/><br/> /* forma clasica<br/> if (marca1 > marca2){<br/> return ganador;<br/> }<br/> else if (marca1 &lt; marca2){<br/> return finalista;<br/> }<br/> */<br/><br/> //if ternario<br/> return (marca1 > marca2) ? ganador : finalista;<br/><br/><br/> }<br/><br/> private static String ejecutarFinal(){<br/> int i = 0;<br/> String ganador = "";<br/> int marcaAnterior = 0;<br/><br/> try {<br/> //ejecuta código susceptible de poder tener algun problema<br/> while ((i &lt; finalistas.size())<br/> &amp;&amp; (finalistas.get(i) != null)) {<br/> int marca = tirarMartillo();<br/> if (marca > marcaAnterior) {<br/> ganador = finalistas.get(i);<br/> marcaAnterior = marca;<br/> } else if (marca == marcaAnterior){ //empate<br/> ganador = deshacerEmpate(ganador,finalistas.get(i));<br/> }<br/> i = i + 1;<br/> //i += 1;<br/> }<br/><br/> } catch (ArrayIndexOutOfBoundsException ex) {<br/> System.out.println("****Se ha excedido limite de array");<br/> } catch (Exception ex){<br/><br/> } finally {<br/> System.out.println("Este codigo siempre se ejecuta");<br/> }<br/><br/> //tenemos ganador<br/> return ganador;<br/> }<br/><br/> private static int tirarMartillo() {<br/> int resultado = 0;<br/> Random generador = new Random();<br/> resultado = generador.nextInt(200);<br/><br/> return resultado;<br/> }<br/><br/> private static void verFinalistas(){<br/> for(int i=0; i &lt; finalistas.size() ;i++){<br/> System.out.println(finalistas.get(i));<br/> }<br/> }<br/><br/> private static void inscribirAtletas(String... deportistas) throws Exception {<br/> if (deportistas != null){<br/> for(int i=0;i &lt; deportistas.length;i++){<br/> inscribirAtleta(deportistas[i]);<br/> }<br/> } else {<br/> throw new Exception("Sin inscripciones");<br/> }<br/><br/> }<br/> private static void inscribirAtleta(String atleta){<br/> if (atleta != null){<br/> atletas.add(atleta);<br/> }<br/> }<br/>}<br/><br/>[/java]
método constructor: es un metodo especial que se tiene que llamar como la clase, y no devuelve nada. Se ejecuta cuando se crea la clase
Veamos:
class Atleta{
//atributos //principio de encapsulacion, nadie puede acceder a los atributos libremente
private String nombre;
//comportamiento
String getNombre(){
return nombre;
}
public Atleta(String nomAtleta){
nombre=nomAtleta; //(se aconseja poner: this.nombre=nomAtleta)
}
}
Y luego: Atleta atle= new Atleta(“pepito”);
[java] package es.pue.android; import java.util.ArrayList; import java.util.Arrays; import java.util.Random; public class Main { private static ArrayList <String> atletas; private static ArrayList <String> finalistas; private static ArrayList <Integer> marcas; public static void main(String[] args) { //tenemos 5 atletas lanzadores de martillo… //Solo puede ganar uno //El tope de longitud en la final es de 200m /* Hay una fase eliminatoria donde quedarán los que superen o igualen la marca de 120m */ //creacion de atletas /* String atleta1 = "Ricardo"; String atleta2 = "Pepe"; String atleta3 = "Marta"; String atleta4 = "Berta"; String atleta5 = "Alberto" ; */ //creacion de un array donde guardar las marcas de // los 5 atletas //int[] marcas = new int[5]; //int[] finalistas = new int[5]; //String[] finalistas = new String[5]; try{ init(); inscribirAtletas(null); //lanzar martillo tantas veces como atletas haya //entero [0 .. 200] //declaracion variable ejecutarEliminatoria(); obtenerFinalistas(); verFinalistas(); //obtener finalistas (los que han syperado 120m) //obtener ganador (de entre todos los finalistas) String ganadorMartillo = ejecutarFinal(); System.out.println("Ganador: " + ganadorMartillo); } catch (Exception ex){ System.out.println(ex.getMessage()); } } private static void init(){ /* atletas[0] = "Ricardo"; atletas[1] = "Pepe"; atletas[2] = "Marta"; atletas[3] = "Berta"; atletas[4] = "Alberto"; */ atletas = new ArrayList <String>(); //crecimiento dinamico finalistas = new ArrayList <String>(); marcas = new ArrayList <Integer>(); } private static void obtenerFinalistas() { //int j = 0; for(int i=0;i < marcas.size();i++){ int marca=m arcas.get(i); if (marca>= 120){ //finalistas[j] = atletas[i]; //j = j + 1; //coleccion dinamica finalistas.add(atletas.get(i)); } } } private static void ejecutarEliminatoria() { //estructura iterativa for(int i=0;i < atletas.size();i++){ int marca=t irarMartillo(); //marcas[i]=m arca; marcas.add(marca); } } private static String deshacerEmpate(String ganador, String finalista){ int marca1,marca2; do { marca1=t irarMartillo(); marca2=t irarMartillo(); }while (marca1==m arca2); //aseguramos que marca1 !=m arca2 /* forma clasica if (marca1> marca2){ return ganador; } else if (marca1 < marca2){ return finalista; } */ //if ternario return (marca1> marca2) ? ganador : finalista; } private static String ejecutarFinal(){ int i = 0; String ganador = ""; int marcaAnterior = 0; try { //ejecuta código susceptible de poder tener algun problema while ((i < finalistas.size()) && (finalistas.get(i) !=n ull)) { int marca=t irarMartillo(); if (marca> marcaAnterior) { ganador = finalistas.get(i); marcaAnterior = marca; } else if (marca == marcaAnterior){ //empate ganador = deshacerEmpate(ganador,finalistas.get(i)); } i = i + 1; //i += 1; } } catch (ArrayIndexOutOfBoundsException ex) { System.out.println("****Se ha excedido limite de array"); } catch (Exception ex){ } finally { System.out.println("Este codigo siempre se ejecuta"); } //tenemos ganador return ganador; } private static int tirarMartillo() { int resultado = 0; Random generador = new Random(); resultado = generador.nextInt(200); return resultado; } private static void verFinalistas(){ for(int i=0; i < finalistas.size() ;i++){ System.out.println(finalistas.get(i)); } } private static void inscribirAtletas(String… deportistas) throws Exception { if (deportistas !=n ull){ for(int i=0;i < deportistas.length;i++){ inscribirAtleta(deportistas[i]); } } else { throw new Exception( "Sin inscripciones"); } } private static void inscribirAtleta(String atleta){ if (atleta !=n ull){ atletas.add(atleta); } } } [/java]