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;

martes, 22 de mayo de 2018

El Proceso de Programación 3

Finalmente obtenido el diagrama UML se lo implementa en código de java.
Para esto es necesario conocer un poco la sintaxis que utilizar este lenguaje de programación.
Java fue un lenguaje desarrollado por Sun Microsystems.En un principio fue diseñado con el objetivo de poder ejecutarlo en diferentes electrodométicos. Ya que un gran inconveniente al momento de desarrollar código era la ejecución ya que esta dependía de la arquitectura predeterminada por el procesador. En cambio Java primero pasa por un programa intermediario que se ocupa de interpretar el codigo y traducirlo directamente al lenguaje de máquina con el que se encontraba en ese momento. Esto fue de gran utilidad ya que así no se debía escribir una y otra vez el mismo código para diferentes máquinas. Sino que un solo código servía para la mayoría de las arquitecturas.
Resultado de imagen para sun microsystems logo
En sí la sintaxis del java se basa en la sintaxis de C. Por lo que algunas estructuras básicas de control, iteración, impresión, y funciones que en java se llaman métodos. Poseen la misma lógica de funcionamiento y muchos casos hasta se escriben de la misma forma.


El Proceso de Programación 2

Una vez realizado todo el paso anterior se procede a realizar el diagrama UML del problema
Pero antes de hacerlo es necesario identificar las entidades que están presentes dentro del problema.
Ejemplo:



CARACTERÍSTICAS
Entidad: Empleado.
Nombre
Posibles valores
Tipo
nombre
Brandon
Cadena de caracteres
apellido
Rueda
Cadena de caracteres
genero
1 (Masculino)
Booleano
fechanacimiento
09/10/1998
Fecha
fechaingreso
06/03/2017
Fecha
salario
625,38
Real

Entidad: Fecha.
Nombre
Posibles valores
Tipo
día 
09
Entero
mes
10
Entero
anio
1998
Entero



Una vez identificada correctamente cada una de las entidades se procede a realizar el diagrama UML
Para realizarlo nos podemos guiar del siguiente grafico

Ejemplo 

Diagrama UML

Empleado
-                 nombre:String
-                 apellido:String
-                 genero:Boolean
-                 salario:double

           Fechanacimiento



Fecha ingreso
Fecha
-                 dia:int
-                 mes:int
-                 anio:int





























El Proceso de la Programación 1

Antes de empezar a escribir código es necesario realizar algunos pasos que nos permitirán entender mejor la lógica  del problema o enunciado

Aspectos que hacen parte del Problema

Cliente

Se refiere a una empresa que requiere de los servicios del ingeniero. Esto con el objeto de implementar una mayor agilidad en la ejecución de los procesos

Usuario

Se refiere al individuo que utilizará el programa en sus actividades diarias. En algunos casos el usuario y el cliente pueden ser el mismo.

Requerimientos funcionales

Son aquellos que necesita la empresa como base para poder cumplir las espectativas finales al momento de la entrega del producto o programa.
Nombre del requerimiento: en codigo con R#
Resumen: describir el requerimiento Permieempezando por un verbo infinitivo
Entrada:Lo que el usuario tenga que ingresar
Resultados: Almacenar la informacion, mostrar inoformacion, hacer calculos y mostrar resultados.

Si los valores ingresados son correctos almaceno sino no.

Mundo del Problema

Son todos los datos necesarios para poder llevar a cabo los requerimientos funcionales. Pueden ser fórmulas, datos que se requiere de la empresa entre otras cosas.

Requerimientos no Funcionales

Son aquellos que no son escenciales o de vital importancia para satisfacer las necesidades del cliente. Por ejemplo una interfaz gráfica llamativa, velocidad del programa, optimizaciones de memoria entre otros. Estos requerimientos tanto como los funcionales dependen mucho del cliente.

Introducción a la Programación Orientada a Objetos

La programación orientada a objetos se trata de un paradigma de programación el cual se basa en la creación y diseño de los objetos.

Qué es un Objeto?

Un objeto es una entidad fisica. En este caso se tomara a los objetos como la instancia de una clase

Qué es una clase?

Una clase es una descripción de un grupo de objetos


Una clase es capaz de contener a otras clases que pueden expandir las características finales al instanciar objetos nuevos de las clases derivadas de la clase original.

por ejemplo:
Una clase puede Automóvil
Resultado de imagen para planos automovil
y un objeto de esa clase puede ser un automóvil rojo.
Resultado de imagen para automovil rojo
otro objeto de esa misma clase puede ser un automovil verde
Resultado de imagen para automovil verde

Y asi se pueden seguir nombrando tantos objetos como se desee.

Diagramas UML

Unified Modeling Language por sus siglas en inglés. También conocido como lenguaje de modelación unificado es un lenguaje utilizado en varias ingenierías para describir un esquema de procesos. Utiliza graficos contenedores y flechas que determinan el tipo de aosciación de las diferentes clases.
Ejemplo
Resultado de imagen para diagramas UML