Magic Space

Magic Space

viernes, 20 de julio de 2018

Clases Abstractas

Una clase abstracta es aquella que se declara para heredar distintos parametros desde otras clases. Contiene metodos abstractos que tambien se los ejecuta desde diferentes clases heredadas.
Para declarar una clase como abstracta se utiliza la palabra reservada "abstract" por ejemplo

secuela abstract class(){

}

Metodos Abstractos

Tienen las siguientes características:

a) No tiene cuerpo (llaves): sólo consta de signatura con paréntesis.
b) Su signatura termina con un punto y coma.
c) Sólo puede existir dentro de una clase abstracta. De esta forma se evita que haya métodos que no se puedan ejecutar dentro de clases concretas. Visto de otra manera, si una clase incluye un método abstracto, forzosamente la clase será una clase abstracta.
d) Los métodos abstractos forzosamente habrán de estar sobreescritos en las subclases. Si una subclase no implementa un método abstracto de la superclase tiene un método no ejecutable, lo que la fuerza a ser una subclase abstracta. Para que la subclase sea concreta habrá de implementar métodos sobreescritos para todos los métodos abstractos de sus superclases.
Ejemplo:

package abstracto;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

/**
 *
 * @author Personal
 */
public class Abstracto {
    static double base;
    static double altura;
    static String nombre;
    static double radio;
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) 
        {
        // TODO code application logic here
        
        List<Figura> figuras = new ArrayList<Figura>(); 
        Triangulo triangulo= new Triangulo(base,altura,nombre);
        Circulo circulo=new Circulo(nombre,radio);
        //figuras.add(new Figura("Hola"));
        int opc;
        opc=LecturaScan.leerInt("Ingrese una opcion");
        do 
            {
                System.out.println("****MENU DE OPCIONES*****");
                System.out.println("1) Ingresar el circulo\n2) Ingresar el triangulo\n3)Mostrar Figura\n4)Salir");
                System.out.print("Ingrese la opcion que desee ingresar: ");
            

                switch (opc) 
                    {
                    case 1: 
                    System.out.println("Ingrese el radio del circulo");
                    leerDatos();
                    figuras.add(new Circulo(nombre,radio));
                    break;
                    case 2:
                    System.out.println("Ingrese la base de triangulo: ");
                    System.out.println("Ingrese la altura del triangulo: ");
                    leerDatos();
                    figuras.add(new Triangulo(base, altura,nombre));
                    break;
                    case 3: 
                     imprimirSinCasting((ArrayList)figuras);
                    break;
            }
        }while(opc!=4);
    }
public static void imprimirSinCasting(ArrayList<Figura>lista)
{
    for(int i=0;i<lista.size();i++){
        lista.get(i).calcularArea();
        lista.get(i).imprimir();
    }
}        
public static void leerDatos()
{
    nombre=LecturaScan.leerString("Ingrese el nombre");   
}
}
    

Polimorfismo

Es la propiedad que tienen los objetos de permitir invocar genéricamente un comportamiento (método) cuya implementación será delegada al obejto correspondiente recien en tiempo de ejecución. En otras palabras es la combinación de herencia con colecciones.

Polimorfismo significa muchas formas. Es por eso que como se heredan diferentes tipos de clases cada una tiene diferentes tipos de objetos.
Ejemplo:

package polimorfismo;

import java.util.ArrayList;
import java.util.List;

public class Polimorfismo {
        public static String marca;
         public static String modelo;
          public static double precio;

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        //Tomar objetos de la clase autobus y vehiculo
        int asientos;
        int puertas;
        int opc;
        List<Vehiculo>vehiculos=new ArrayList<Vehiculo>();//No se puede aplicar new en interfaces como
        do{
            System.out.println("1.- Ingrese Autobus");
            System.out.println("2.- Ingrese Turismo");
            System.out.println("3.- Imprimir Vehiculos");
            System.out.println("4.- Salir");
            opc=LecturaScan.leerInt("Ingrese una opcion:");
            switch(opc){
                case 1:
                {
                leerDatos();
                asientos=LecturaScan.leerInt("Ingrese número de asientos");
                vehiculos.add(new Autobus(marca,modelo,precio,asientos));
                }break;
                 case 2:
                {
                leerDatos();
                puertas=LecturaScan.leerInt("Ingrese número de puertas");
                vehiculos.add(new Turismo(marca,modelo,precio,puertas));
                }break;
                 case 3:
                {
                    imprimir((ArrayList)vehiculos);
                    imprimirSinCasting((ArrayList<Vehiculo>)vehiculos);
                   
                }break;
            }
        }while(opc!=4);
       
    }
   
        public static void leerDatos()
    {
        marca=LecturaScan.leerString("Ingrese la marca:");
        modelo=LecturaScan.leerString("Ingrese el modelo:");
        precio=LecturaScan.leerDouble("Ingrese el precio:");       
    }
    public static void imprimir(ArrayList lista){
        for(int i=0;i<lista.size();i++)
        {
            if (lista.get(i) instanceof Autobus){
                Autobus a= (Autobus)lista.get(i);
                System.out.println("Tipo"+a.tipo());
                a.imprimirAtributos();
            }
            if(lista.get(i) instanceof Turismo){
               Turismo a=(Turismo)lista.get(i);
               System.out.println("Tipo: "+a.tipo());
               a.imprimirAtributos();
         
//Cuando necesito llamar un metodo que no esta en el papa pregunta
            }
               
                //Autobus at=(Autobus)lista.get(i);
            /*Vehiculo ve=(Vehiculo)lista.get(i);
            if(ve instanceof Autobus)
            //lista.get(i).(Vehiculo)lista.get(i);
            System.out.println("Tipo:"+ve.);//consultar getclass
            ve.imprimirAtributos();*/
        }
    }
    public static void imprimirSinCasting(ArrayList<Vehiculo>lista)
    {
        for(int i=0;i<lista.size();i++)
        {
            lista.get(i).imprimirAtributos();//Revisar todas las formas de recorrer colecciones
        }
    }    //size metodo que estan en las listas y lenght es una propiedad que tienen los arraylists
    }
   





miércoles, 11 de julio de 2018

Colecciones

Para entender colecciones es necesario entender primero el concepto de arreglos

Arreglos

Se maneja una estructura que almacena varios objetos en memoria estática y todos los objetos del mismo tipo de dato.Un array es considerado un tipo específico de objeto.
Ejemplo: tipo nombre [tamaño];

Colecciones

Una coleccion es un objeto que permite agrupar objetos. El manejo y estructura de las colecciones son un poco más complejas pero a lavez facilitan el uso de arreglos y extienden funcionalides. Además al ser dinámicas optimizan memoria y recursos de hardware.

List

Una lista es un tipo de colección secuencial en la que cada elemento tiene su posición. Y además permite duplicar elementos. Y se puede controlar sus posiciones muy fácilmente.

Arraylist

Es un arreglo dinámico . Esto significa que se puede extender o comprimir en tiempo de ejecución sin ningun problema. Esto será en base a la cantidad de parámetros que se necesiten. Para lograr esto sus elementos deben ser objetos y para agregarlos se utiliza la palabra "add" y para recogerlos "get".

Iterator

Es un método comunmente utilizado para moverse a través de una lista. Se utiliza junto con ciclos repetitivos como una forma de llamar a la coleccion.






Herencia

Se trata de una forma útil de reciclar código. Las clases heredan atributos y los utilizan a su conveniencia. Permite mejorar las clases padres con la especialización de las clases hijas. Las clases hijas usan los métodos de las clases padres.

Para hacer que una clase herede de otra se utiliza la palabra "extends"

Ejemplo:

public class Padre{
//Clase Heredada
}

public class Hijo extends Padre {
//Clase que hereda
}

Excepciones: No se hereda propiedades privadas no constructores tampoco existe la herencia múltiple, esto quiere decir que una clase hija no puede tener varios padres

Constructores

Se pueden utilizar la herencia en métodos constructores utilizando la palabra reservada super junto con los parámetros del padre.





Manejo de Excepciones

Excepciones


Son los errores que suceden por diferentes motivos:
  • Al tratar de acceder a elementos de arreglos con un indice mayor al último elemento del arreglo
  • Inconsistencias matemáticos
  • Manejo de archivos
  • Acceso a bases de datos
  • Errores defnidos por el usuario: Rangos permitidos, valores nulos prohibidos etc.

Tipos de Excepciones

Cualquier excepción en Java es una subclase de la clase Throwable:
  • Exception: Representan excepciones que deben capturarse y tratarse pero el programa sigue corriendo
  • Error: Representan fallos de tipo catastróficos que paran el programa

Manejo de Excepciones

Para manejar excepciones se utiliza el bloque try catch:

try
{
//Error
}
catch(IOException )
{
//codigo para tratar error
}
catch (Exception e)
{
//codigo para otros errores
}

El bloque try tiene dentro el código que podría producir errores. El bloque catch tiene el código para tratar el error. El resto puede atrapar otro tipo de excepciones.




Constructores y Método toString

Constructores

Los constructores son utilizados para crear objetos de una clase. Para crear un constructor se debe poner el mismo nombre de la clase deben tener acceso publico y no retornan nigun valor.
Los constructores pueden ser de dos tipos por parámetro o por defecto.
Por Parámetro asigna los valores de los parámetros a los atributos del objeto
Por Defecto Se genera automáticamente en java y no tiene parámetros

Ejemplo:

public class Animal{
private int edad;

public Animal(){//constructor por defecto
}

public Animal(int edad){//constructor por parámetro
edad=10;
}
}

Método toString

Este método es principalmente utilizado para convertir cualquier tipo de dato en una cadena de caracteres. Generalmente es utilizado para la múltiples propósitos que requieran exclusivamente de las cadenas de caracteres.

Ejemplo:

public String toString(){

return "valores a imprimir";

}

Notas adicionales

Sobreescritura de métodos

Es implementar el código de algunos métodos que sólo están declarados en las clases.

Sobrecarga de métodos

Es crear varios métodos con el mismo nombre pero que toman diferentes tipos de datos.





Estructuras de Control en Java

Las estructuras de control en Java se basan en el lenguaje C por lo que la lógica utilizada es muy parecida.

Estructuras Condicionales

La primera estructura condicional y la más básica es el If-else

If-Else

Es una estructura que sirve para tomar decisiones en java basadándose en una condición. Si se cumple dicha condición se procede a realizar una porción de código. Caso contrario se ejecuta el código dentro del Else si existiera. La parte Else no siempre es obligatoria para que compile el código por lo que si no existiera simplemente no se realiza ninguna accion en caso de que no se cumpla la condición.
Ejemplo: 
If(condición){ 
                     Código en caso de cumplirse condición;

}
else{
                    Código en caso de cumplirse la condición
}

Switch

Sirve principalmente para realizar toma de decisiones con múltiples opciones al mismo tiempo y con la posibilidad de volver a decidir repitiendo el proceso. Para poder decidir la opcion se utiliza una variable de control entera que escogera el numero de caso a decidir.

Ejemplo
Switch(Variable de control)
{
case 1:{ Opcion 1}
case 2:{Opcion 2}
case 3:{Opcion 3}
case n:{Opción n}
}


For

El For es una estructura de control repetitiva que genera un ciclo que se repetirá tantas veces como se haya designado desde un principio por el programador. En este caso también se utiliza una variable de control que designa las veces que se desee repetir el proceso.
Ejemplo:

for(i=0, i<n, i=1+1)
{
Proceso a repetirse
}

While 

El ciclo while es como un mientras que es una estructura que toma desiciones y repite un proceso mientras la condición se cumpla. Hay que tomar en cuenta que la variable de control debe cambiar dentro del proceso.De no hacerlo el ciclo se convertiria en un bucle sin fin ya que la condición siempre se cumple. 

Ejemplo
while(condición){

Proceso Repetitivo
cambio de variable
}

Do While

El do while es un ciclo muy parecido al anterior, la unica diferencia es el orden en el que se ejecutan las ordenes. Es decir en el do While la primera vez siempre se ejecuta el codigo sin importar si la condición se cumple o no. Después se comprueba si se cumple la condición en la segunda repetición y asi hasta concluir el ciclo. En cambio en el while primero se verifica la condición antes de ejecutar el código.El do while es la única estrcutura que lleva un punto y coma ";" al final de su condición.

Ejemplo:

{
Proceso Repetitivo
cambio de variable
}do while;