SlideShare una empresa de Scribd logo
1 de 184
Descargar para leer sin conexión
Explicar la Tecnología Java



Docente:
Freddy Mendez Ortiz
Que es la Tecnología Java?
• La tecnología Java es:
   – Un lenguaje de programación
   – Un ambiente de desarrollo
   – Un ambiente de aplicación
• Tiene sintaxis similar a C++
• Es usada para desarrollar tanto aplicaciones como
  applets
Principales Metas de la
       Tecnología Java?
• Provee un lenguaje fácil de usar por:
   – Evita muchas fallas presentes en         otros
     lenguajes.
   – Usa el paradigma Orientado a Objetos
   – Permite crear código estable y limpio.
• Provee un ambiente interpretado para:
   – Mejora la velocidad de desarrollo.
   – Portabilidad del código
Principales Metas de la
        Tecnología Java?
• Permite ejecutar mas de una actividad
• Cargar clases dinámicamente; esto es, cuando
  ellas son realmente necesitadas
• Permite cambiar programas dinámicamente
  durante la ejecución por la carga de clases desde
  fuentes distantes
• Proveer mejor seguridad
Principales Metas de la
       Tecnología Java?
• Las siguientes características satisfacen estas
  metas:
   – La maquina virtual de Java JVM
   – El colector de basura
   – El ambiente de ejecución de Java JRE
   – Herramientas de interface de JVM
Maquina Virtual de Java
• Una maquina imaginaria que es implementada
  para emular esta en software en una maquina real.
  El código para la JVM es almacenado en archivos
  .class, cada uno de los cuales contiene a lo mas
  una clase publica.
Maquina Virtual de Java
• Provee las especificaciones del hardware de la
  plataforma
• Lee archivos compilados (Bytecodes) que son
  independientes de la plataforma
• Es implementada en software o hardware
• Es implementada en las herramientas de
  desarrollo de la Tecnología Java o en un
  navegador Web
Maquina Virtual de Java
• La mayoría de los chequeos           de tipo son
  realizados cuando el código es compilado
• La implementación de la JVM aprobada por Sun
  Microsystems debe ser capas de ejecutar cualquier
  archivo class compilado
• La JVM se ejecuta en diferentes sistemas
  operativos (Solaris, Linux, Mac, Windows)
Colector de Basuras
• Memoria asignada que no esta siendo necesitada
  debería ser desasignada
• En otros lenguajes desasignar la memoria es
  responsabilidad del programador
• El lenguaje de programación de Java provee un
  hilo de nivel del sistema para monitorear memoria
  asignada
Colector de Basuras
• El colector de basura tiene las siguientes
  características:
   – Cheque y libera memoria no necesitada.
   – Se realizado automáticamente.
   – Puede variar drásticamente entre las diferentes
     implementaciones de la JVM
Ambiente de ejecución de Java
Operación del JRE con JIT
     (Just-In-Time)
Tareas de la JVM
• La JVM realiza tres tareas principales:
   – Cargar el código
   – Verificar el código
   – Ejecutar el código
Cargador de Clases
• Carga todas las clases necesarias para la
  ejecución de un programa
• Mantiene las clases de los archivos locales del
  sistema en nombre de espacio (namespaces)
  separados
• Previene la suplantación (spoofing)
Verificador de Bytecode
Asegura que:
• El código cumple con las especificaciones de la
  JVM.
• El código no viola integridad del sistema.
• El código no causa operaciones de stack overflows
• Los tipos de parámetros para todas las
  operaciones de código son correctas.
Ambiente de ejecución de la
   Tecnología de Java
Declaración de Clases en la
     Tecnología Java
• Sintaxis básica de una clase en Java:
   <modifidor>* class <nombre_clase> {
   <declaración_atributos>*
   < declaración_constructor>*
   < declaración_metodos>*
   }
Declaración de Clases en la
     Tecnología Java
• Ejemplo:
  1 public class Vehiculo {
  2 private double maxCarga;
  3 public void setMaxCarga(double valor) {
  4 maxCarga = valor;
  5 }
  6}
Declaración de Atributos en
    la Tecnología Java
• Sintaxis básica de un atributo en Java:
   <modificador>* <tipo> <nombre>[=<initial_valor>];
• Ejemplo:
   1 public class Valores {
   2 private int x;
   3 private float y = 10000.0F;
   4 private String nombre = "Bates Motel";
   5}
Declaración de Métodos en
     la Tecnología Java
• Sintaxis básica de un método en Java:
   <modificador>* <tipo_retorno> <nombre>
      (<argumentos>*) {
     <declaraciones>*
   }
Declaración de Métodos en
     la Tecnología Java
• Ejemplo:
  1 public class Perro {
  2 private int peso;
  3 public int getPeso() {
  4    return peso;
  5 }
  6 public void setPeso(int nuevoPeso) {
  7    if (nuevoPeso > 0 ) {
  8      peso = nuevoPeso;
  9    }
  10 }
  11 }
Accediendo a miembros de
            un Objeto
• La notación punto es:<objeto>.<miembro>
• Esta es usada para acceder a los miembros de un
  objeto incluyendo atributos y métodos
• Ejemplo de la notación punto:
   – d.setPeso(42);
   – d.peso = 42; // Solo si el atributo peso es public
Ocultar Información
• El problema:
Ocultar Información
• El código del cliente tiene acceso directo a los
  datos internos (d referencia un objeto de tipo
  MiFecha)
• d.dia = 32; // Día invalido
• d.mes = 2; d.dia = 30; // posible pero erróneo
• d.dia = d.dia + 1; // no chequea si da la vuelta
Ocultar Información
Ocultar Información
• El código del cliente debe usar los métodos getters
  y setters para acceder a los datos internos
• d.setDia(32); // Día invalido, retorna false

• d.setMes(2); // posible pero erróneo,
• d.setDia(30); // setDia retorna false

• d.setDia(d.getDia() + 1); // día invalido, retorna
  false
Encapsulamiento
• Oculta la implementación de detalles de la clase
• Obliga al usuario a usar una interface para acceder
  a los datos
• Hace el código mantenible
Encapsulamiento
Declaración de
      Constructores en Java
•     Sintaxis básica de un constructor en Java:
    <modificador>* <nombre_clase> (<argumentos>*) {
      <declaraciones>*
    }
Declaración de
      Constructores en Java
•    Ejemplo:
    1 public class Dog {
    2 private int weight;
    3 public Dog() {
    4 weight = 42;
    5 }
    6}
Constructor por defecto
• Siempre debe existir por lo menos un constructor
  en cada clase
• Si no se escribe ninguno, el constructor por defecto
  se presenta automáticamente:
   – No recibe argumentos
   – El cuerpo es vació
• El constructor por defecto permite crear instancias
  de objetos de la forma new XXX(); sin tener ningún
  constructor definido
Esquema archivo fuente
• Sintaxis básica de un archivo fuente en Java:
   [<declaración_paquetes>]
   <declaración_import>*
   <declaración_clase>+
Esquema archivo fuente
• Por        ejemplo,          el                     archivo
  ReporteCapacidadVehiculo.java es:
  1 package shipping.reports;
  2
  3 import shipping.domain.*;
  4 import java.util.List;
  5 import java.io.*;
  6
  7 public class ReporteCapacidadVehiculo {
  8 private List vehiculos;
  9 public void generarReporte(Writer salida) {...}
  10 }
Paquetes de Software
• Los paquetes ayudan a administrar grandes
  sistemas de software
• Los paquetes pueden contener clases y sub
  paquetes
Paquetes de Software
Declaración de Paquetes
• Sintaxis básica de la declaración de paquetes:
   package <top_pkg_nombre>[.<sub_pkg_nombre>]*;
• Ejemplo de la declaración:
  package shipping.gui.reportscreens;
• Específicamente la declaración de paquetes va al
  inicio del archivo fuente
• Solamente una declaración de paquete por archivo
  fuente
Declaración de Paquetes
• Si ningún paquete es declarado, entonces la clase
  es colocada dentro de un paquete por default
• El nombre de los paquetes debe ser jerárquico y
  separado por puntos.
Declaración de import
• Sintaxis básica de la declaración de import:
   import <pkg_nombre>[.<sub_pkg_nombre>]*.<class_nombre>;
   o
   import <pkg_nombre>[.<sub_pkg_nombre>]*.*;
• Ejemplo de la declaración:
   import java.util.List;
   import java.io.*;
   import shipping.gui.reportscreens.*;
Declaración de import
• La declaración de import hace lo siguiente:
   – Precede todas las declaraciones de clases
   – Le indica al compilador donde puede encontrar
     las clases
Identificadores, palabras
 reservadas y tipos de datos


Docente:
Freddy Mendez Ortiz
Comentarios
• Los tres estilos permitidos de comentarios en los
  programas de la Tecnología de Java son:
   //Comentarios de línea

   /*Comentarios de bloque
   *una o mas líneas
   */

   /**Comentarios de documentación
   *se pueden extender una o mas líneas
   */
Puntos y coma, bloques y
    espacios en blanco
• Una declaración es una o mas líneas de código
  terminadas por un punto y coma ( ; ):
   total = a + b + c
           + d + e + f;
• Un bloque es una colección de declaraciones
  limitadas por llaves que abren ( { ) y cierran ( } )
   {
       x = y + 1;
       y = x + 1;
   }
Identificadores
• Los     identificadores    tienen   las siguientes
  características:
   – Son nombres dados a variables, clases o
     métodos
   – Pueden iniciar con una letra Unicode, guion de
     piso ( _ ), o signo de moneda ( $ )
   – Son sensibles a mayúsculas y minúsculas, y no
     tiene longitud máxima
Identificadores
• Ejemplos:
   identificadores
   nombreUsuario
   nombre_usuario
   _var_sys_1
   $cambio
Palabras reservadas de Java
abstract     continue      for           new         switch
assert       default       goto          package     synchronized
boolean      do            if            private     this
break        double        implements    protected   throw
byte         else          import        public      throws
case         enum          instanceof    return      transient
catch        extends       int           short       try
char         final         interface     static      void
class        finally       long          strictfp    volatile
const        float         native        super       while

Palabras literales reservadas: null, true y false
Tipos primitivos
• El lenguaje de programación Java define ocho
  tipos de datos primitivos:
   – Lógicos : boolean
   – Textuales : char
   – Enteros : byte, short, int, long
   – Flotantes : float, double
Lógico - boolean
• El primitivo boolean tiene las siguientes
  características:
   – El tipo de dato boolean tiene dos valores
     literales, true y false
       Por ejemplo la siguiente declaración:
       boolean bandera = true;
       Declara la variable bandera como tipo boolean
       y asigna a esta un valor de true
Textual - char
• El textual primitivo char tiene las siguientes
  características:
   – Representa un carácter Unicode de 16-bit
   – Debe estar entre comillas sencillas (‘ ‘)
   – Usa las siguientes notaciones:
     • ‘a’      La letra a
     • ‘ t ’   El carácter tabulador
     • ‘u????’ Un especifico carácter Unicode, ????, es
                reemplazado con exactamente cuatro
                digitos hexadecimales
Textual - String
• El textual tipo String tiene las siguientes
  características:
   – No es un tipo de dato primitivo, es un tipo de
     clase
   – Tiene declaración literal entre comillas dobles
     (“”). Ej: “Java es el mejor lenguaje del mundo”
   – Puede ser usado como sigue:
      • String saludo = “Buenos días !! n";
      • String mensajeError = "Registro no encontrado !";
Enteros – byte, short, int y
             long
• Los primitivos enteros tienen las siguientes
  características:
   – Primitivos enteros usan tres formas: Decimal,
     Octal y Hexadecimal
      2                 077                0xBAAC
   – Los literales tiene como tipo por defecto int
   – Los literales con el sufijo L o l son de tipo long
Enteros – byte, short, int y
             long
• Los primitivos enteros tienen los siguientes rangos:

Longitud del Entero    Nombre o tipo       Rango
       8 bits               byte       -27 hasta 27-1
       16 bits             short       -215 hasta 215-1
       32 bits               int       -231 hasta 231-1
       64 bits              long       -263 hasta 263-1
Punto flotante – float y
             double
• Los primitivos punto flotante tienen las siguientes
  características:
   – Los literales punto flotante incluyen una de dos
     punto decimal o un de los siguientes caracteres:
      • E or e (agrega un valor exponencial)
      • F or f (float)
      • D or d (double)
Punto flotante – float y
          double
– Ejemplos:
   •   3.14        Un simple valor punto flotante (double)
   •   6.02E23     Un gran valor punto flotante
   •   2.718F      Un simple valor de tamaño float
   •   123.4E+306D Un gran valor double con redundante D

• Los literales tienen como tipo por defecto
  double
Punto flotante – float y
             double
• Los primitivos punto flotante tienen los siguientes
  tamaños:

       Longitud del Flotante Nombre o tipo
              32 bits             float
              64 bits            double
Variables, declaraciones y
        asignaciones
public class Asigna {
  public static void main (String args [ ]) {
     // declara variables enteras
     int x, y;
     // declara y asigna un punto flotante
     float z = 3.414f;
     // declara y asigna un double
     double w = 3.1415;
     // declara y asigna un boolean
     boolean bandera = true;
Variables, declaraciones y
      asignaciones
 // declara variable carácter
 char c;
 // declara variable String
 String str;
 // declara y asigna variable String
 String str1 = “chao";
 // asigna valor a variable tipo char
 c = 'A';
 // asigna valor a variable String
 str = “Hola, alguien en casa!";
Variables, declaraciones y
          asignaciones
        // asigna valores a las variables int
        x = 6;
        y = 1000;
    }
}
Tipos de referencia en Java
• En la Tecnología Java, aparte de los tipos
  primitivos, todos los demás son tipos de referencia
• Una variable de referencia contiene un
  identificador a un objeto
Tipos de referencia en Java
• Por ejemplo:
   public class MiFecha {
     private int dia = 1;
     private int mes = 1;
     private int anio = 2000;
     public MiFecha(int d, int m, int a) { ... }
     public String toString() { ... }
   }
Tipos de referencia en Java
• Por ejemplo:
   public class PruebaMiFecha {
     public static void main(String [ ] args) {
        MiFecha hoy = new MiFecha (22, 7, 1964);
     }
   }
Construyendo e
        Inicializando Objetos
• Llamando a new Xyz() desarrolla las siguientes
  acciones:
  –   La memoria es asignada para el Objeto
  –   La inicialización explicita de atributos es desarrollada
  –   Un constructor es ejecutado.
  –   La referencia del Objeto es retornada por el operador
      new
Construyendo e
      Inicializando Objetos
• La referencia de un Objeto es asignada a la
  variable
• Un ejemplo es:
   – MiFecha hoy = new MiFecha (22, 7, 1964);
Asignación y Organización
        de memoria
• Una declaración permite almacenar solamente una
  referencia
   – MiFecha hoy = new MiFecha (22, 7, 1964);
   – hoy     ????
Asignación y Organización
        de memoria
• Usar el operador new asigna espacio para el
  Objeto MiFecha
   – MiFecha hoy = new MiFecha (22, 7, 1964);
   – hoy     ????



  – dia      0

  – mes      0

  – anio     0
Inicialización explicita de
            atributos
• Inicializa los atributos como sigue:
   – MiFecha hoy = new MiFecha (22, 7, 1964);
   – hoy         ????


   – dia       1

   – mes       1

   – anio    2000
Inicialización explicita de
           atributos
• Los valores por defecto son tomados de la
  declaración de atributos de la clase :
   – private int dia = 1;
   – private int mes = 1;
   – private int anio = 2000;
Ejecutando el constructor
• Ejecuta el correspondiente constructor:
   – MiFecha hoy = new MiFecha (22, 7, 1964);
   – hoy       ????


   – dia       22

   – mes       7

   – anio     1964
Ejecutando el constructor
• En el caso de la sobrecarga de constructores, el
  primer constructor puede llamar a otros
Asignando a la variable
• Ejecuta el correspondiente constructor:
   – MiFecha hoy = new MiFecha (22, 7, 1964);
   – hoy    0x01abcdef


   – dia      22

   – mes       7

   – anio    1964
Asignación de referencias
• Dos variables referencian al mismo objeto:
   –   int x = 7;
   –   int y = x;
   –   MiFecha s = new MiFecha(22, 7, 1964);
   –   MiFecha t = s;

   –   x         7                   22   7   1964

   –   y         7

   –   s     0x01abcdef
   –   t     0x01abcdef
Asignación de referencias
• Se reasignan dos variables apuntan a dos objetos:
   – t = new MiFecha(22, 12, 1964);

   –   x       7                      22   7    1964
   –   y       7                      22   12   1964
   –   s   0x01abcdef
   –   t   0x123456fa
Paso por valor
• En una sencilla maquina virtual, el lenguaje de
  programación     de    Java   únicamente      pasa
  argumentos por valor
• Cuando la instancia de un objeto es pasada como
  argumento de un método, el valor del argumento
  es una referencia del objeto
• El contenido del objeto puede ser cambiado en el
  llamado del método, pero la referencia original del
  objeto nunca cambia
Paso por valor
public class PruebaPaso {
// El método cambia el valor actual
public static void cambiaInt(int valor) {
valor = 55;
}
public static void cambiaRefObjeto(MiFecha ref) {
ref = new MiFecha (1, 1, 2000);
}
public static void cambiaAtribObjeto(MiFecha ref){
ref.setDia(4);
}
Paso por valor
public static void main(String args [ ] ) {
MiFecha fecha;
int val;
// Asigna el int
val = 11;
// Trata de cambiar el valor
cambiaInt(val);
// Cual es el valor actual?
System.out.println("Int valor es: " + val);


• El resultado es: Int valor es 11
Paso por valor
// Asigna la fecha
fecha = new MiFecha(22, 7, 1964);
// Trata de cambiar el objeto
cambiaRefObjeto(fecha);
// Cual es el valor actual?
System.out.println("MiFecha: " + fecha);


• El resultado es: MiFecha: 22-7-1964
Paso por valor
// Ahora cambia el atributo día
// a través de la referencia del objeto
cambiaAtribObjeto(fecha);
// Cual es el valor actual?
System.out.println("MiFecha: " + fecha);
}
}


• El resultado es: MiFecha: 4-7-1964
La referencia this
• Unos pocos usos de la palabra reservada this son:
   – Resolver ambigüedad entre variables de
     instancia y parámetros
   – Pasar el actual objeto como parámetro a otro
     método o constructor
La referencia this
public class MiFecha {
private int dia = 1;
private int mes = 1;
private int anio = 2000;

public MiFecha(int dia, int mes, int anio) {
this. dia = dia;
this. mes = mes;
this. anio = anio;
}
La referencia this
public MiFecha (MiFecha fecha) {
this. dia = fecha. dia;
this. mes = fecha. mes;
this. anio = fecha. anio;
}

public String toString() {
return "" + dia + "-" + mes + "-" + anio;
}
La referencia this
public MiFecha addDias(int numDias) {
MiFecha nuevaFecha = new MiFecha(this);
nuevaFecha.dia = nuevaFecha.dia + numDias;
// Resto de la implementación de código...
return nuevaFecha;
}
}
La referencia this
public class PruebaMiFecha {
public static void main(String [ ] args) {
MiFecha miFecha = new MiFecha (22, 7, 1964);
MiFecha siguienteSemana = miFecha.addDias(7);
System.out.println(siguienteSemana);
}
}
Expresiones y control de
            flujo


Docente:
Freddy Mendez Ortiz
Variables y alcance
• Variables locales son:
   – Variables que son definidas dentro de un
     método y son llamadas: locales, automáticas,
     temporales o de pila
   – Variables que son creadas cuando el método se
     ejecuta y destruidas cuando el método termine.
Variables y alcance
• La inicialización de variables incluye lo siguiente:
   – Las variables locales requieren inicialización
     explicita
   – Las variables de instancia son inicializadas
     automáticamente
Ejemplo alcance variables
public class EjemploAlcance {
   private int i=1;
   public void primerMetodo() {
         int i=4, j=5;
         this.i = i + j;
         segundoMetodo(7);
   }
   public void segundoMetodo (int i) {
         int j=8;
         this.i = i + j;
   }
}
Ejemplo alcance variables
public class TestScoping {
   public static void main(String[] args) {
          EjemploAlcance alcance = new EjemploAlcance();
          alcance.primerMetodo();
   }
}
Ejemplo alcance variables
                          Stack de
                                           Heap
                          Ejecución
                                          Memory


                      j       8       EjemploAlcance
segundoMetodo
                      i       7       i     1
                   this
                      j       5
 primerMetodo
                      i       4
                   this
         main   alcance
Inicialización variables
          Variable             Valor
  byte                 0
  short                0
  int                  0
  long                 0L
  float                0.0F
  double               0.0D
  char                 'u0000'
  boolean              false
  Todos los tipos de   null
  referencia
Principio Inicializar antes de
             usar
• El compilador puede verificar que las variables
  locales tiene que ser inicializadas antes de usarse
   public void hacerComputo() {
     int x = (int)(Math.random() * 100);
     int y;
     int z;
     if (x > 50) {
        y = 9;
     }
     z = y + x; // Posible uso antes de inicializar
   }
Precedencia operadores
                Operadores                  Asociatividad
++ -- ~ ! ( )                            R to L
*/%                                      L to R
+-                                       L to R
<< >> >>>                                L to R
< > <= >= instanceof                     L to R
== !=                                    L to R
&                                        L to R
^                                        L to R
|                                        L to R
&&                                       L to R
||                                       L to R
<boolean_expr> ? <expr1> : <expr2>       R to L
= *= /= %= += -= <<= >>= >>>= &= ^= |=   R to L
Operadores Lógicos
• Los operadores boolean son:
   ! – NOT    & – AND
   | – OR     ^ – XOR
• Los operadores boolean short-circuit are:
   && – AND          || – OR
• Los operadores se pueden usar como:
   MiFecha d = reservacion.getFechaSalida();
   if ( (d != null) && (d.dia > 31) {
   // Hacer algo con d
   }
Operadores Lógicos a
           Bitwise
• Los operadores bitwise a enteros son:
   ~ – Complemento      & – AND
   ^ – XOR              | – OR
• Los operadores se pueden usar como:
Operadores Right-Shift >> y
           >>>
• Operador Right-Shift:
• Ejemplos son:
   – 128 >> 1 retorna 128/21 = 64
   – 256 >> 4 retorna 256/24 = 16
   – -256 >> 4 retorna -256/24 = -16
• El bit del signo es copiado durante el corrimiento
Operadores Right-Shift >> y
           >>>
• Operador unsigned Right-Shift:
• Este operador es usado para patrones de bit
• El bit del signo no es copiado durante el
  corrimiento
Operador Left-Shift <<
• Operador Left-Shift trabaja como:
  – 128 << 1 retorna 128 * 21 = 256
  – 16 << 2 retorna 16 * 22 = 64
Ejemplo Operadores Shift
Concatenar String con +
• El operador + funciona como sigue:
   – Realiza concatenación de String
   – Produce un nuevo String
     String titulo = “Dr.”;
     String nombre = “Luis” + “ ” + “Perez”;
     String saludo = titulo + “ ” + nombre;
• Un argumento debe ser un objeto String
• No Strings son convertidos a objetos String de
  forma automática
Casting
• Si información podría perderse en una asignación,
  el programador debe confirmar la asignación con
  un casting
• La asignación entre lont e int requiere un casting
  explicito
   long granValor = 99L;
   int valor = granValor; // Incorrecto, necesita casting
   int valor = (int) granValor; // OK
   int valor = 99L; // Incorrecto, necesita casting
   int valor = (int) 99L; // OK
   int valor = 99; // Por defecto int
Promoción y Casting de
           expresiones
• Las variables se promueven automáticamente a su
  forma mas grande (como int a long)
• La expresión es compatible de asignar si el tipo de
  la variable es al menos igual de grande (mismo
  numero de bits) como el tipo de la expresión
   –   long x = 6; // 6 es un tipo int, OK
   –   int y = 99L; // 99L es un tipo long, ilegal
   –   double z = 12.414F; // 12.414F es un tipo float, OK
   –   float z1 = 12.414; // 12.414 es double, illegal
Declaración de if simple
• La sintaxis de la declaración del if es:
   if ( <expresión_boolean> )
   <declaración_o_bloque>
• Ejemplo:
   if ( x < 10 )
       System.out.println(“Usted ha terminado?");
• o (recomendado):
   if ( x < 10 ) {
       System.out.println(“Usted ha terminado?");
   }
Declaración de if, else
            complejo
• La sintaxis de la declaración del if-else es:
   if ( <expresión_boolean> )
   <declaración_o_bloque>
   else
   <declaración_o_bloque>
Declaración de if, else
            complejo
• La sintaxis de la declaración del if-else-if es:
   if ( <expresión_boolean> )
   <declaración_o_bloque>
   else if ( <expresión_boolean> )
   <declaración_o_bloque>
Declaración de switch
• La sintaxis de la declaración de switch es:
   switch ( <expresión> ) {
   case <constante1>:
   <declaración_o_bloque>*
   [break;]
   case <constante2>:
   <declaración_o_bloque>*
   [break;]
   default:
   <declaración_o_bloque>*
   [break;]
   }
Declaración de switch
• Un ejemplo de la declaración switch es:
   switch ( carModel ) {
     case DELUXE:
       addAire();
       addRadio();
       addLlantas();
       addMotor();
       break;
Declaración de switch
    case STANDARD:
     addRadio();
     addLlantas();
     addMotor();
     break;
    default:
     addLlantas();
     addMotor();
}
Declaración de switch
• Esta declaración switch es equivalente al ejemplo
  anterior:
   switch ( carModel ) {
     case DELUXE:
       addAire();
     case STANDARD:
       addRadio();
     default:
       addLlantas();
       addMotor();
   }
Declaración de switch
• Sin la declaración break, la ejecución continua a
  través de cada subsiguiente cláusula case
Declaración de ciclos
• Ciclo for:
   for ( <init_expr>; <test_expr>; <alter_expr> )
   <declaración_o_bloque>
• Ejemplo:
   for ( int i = 0; i < 10; i++ )
      System.out.println(i + " el cuadrado es " + (i*i));
• o (recomendado):
   for ( int i = 0; i < 10; i++ ) {
      System.out.println(i + " el cuadrado es " + (i*i));
   }
Declaración de ciclos
• Ciclo while:
   while ( <test_expr> )
   <declaración_o_bloque>
• Ejemplo:
   int i = 0;
   while ( i < 10 ) {
      System.out.println(i + " el cuadrado es " + (i*i));
      i++;
   }
Declaración de ciclos
• Ciclo do/while:
   do
   <declaración_o_bloque>
   while ( <test_expr> );
• Ejemplo:
   int i = 0;
   do {
      System.out.println(i + " el cuadrado es " + (i*i));
      i++;
   } while ( i < 10 );
Controles de flujo
              especiales
•   El comando break [<label>];
•   El comando continue [<label>];
•   El   comando     <label>:<declaración>,   donde
    <declaración> debe ser un ciclo
Declaración break
do {
   declaración;
   if ( condición ) {
     break;
   }
   declaración;
} while ( <test_expr> );
Declaración continue
do {
   declaración;
   if ( condición ) {
     continue;
   }
   declaración;
} while ( <test_expr> );
Usando la declaración break
        con Labels
 outer:
 do {
    declaración1;
    do {
      declaración2;
      if ( condición ) {
                break outer;
      }
      declaración3;
    } while ( test_expr );
    declaración4;
 } while ( test_expr );
Usando la declaración
     continue con Labels
outer:
do {
   declaración1;
   do {
     declaración2;
     if ( condición ) {
               continue outer;
     }
     declaración3;
   } while ( test_expr );
   declaración4;
} while ( test_expr );
Arreglos



Docente:
Freddy Mendez Ortiz
Declaración de Arreglos
• Grupo de datos de un mismo tipo. Colección
  Homogénea
• Declaración de arreglos de tipo primitivo y de
  clase:
   – char s [ ];
   – MiPunto p [ ];
• Crea espacio para una referencia
• Un arreglo es un objeto, este se debe crear con
  new
Creación de Arreglos
•   Se usa la palabra new para crear un Objeto arreglo
•   Ejemplo de arreglo de tipo primitivo (char):
    public char[] crearArreglo() {
      char[] s;
      s = new char[26];
      for ( int i=0; i<26; i++ ) {
        s[i] = (char) (’A’ + i);
      }
      return s;
    }
Creación de Arreglo de char
                                   Heap
                      Stack de    Memory
                      Ejecución
                                   char [ ]
                                     A
                                     B
                                     C
                                     D
                 s                   …
crearArreglo
               this
      main
Creación de Arreglos de
          Referencia
• Ejemplo de arreglo de tipo de referencia de objeto:
   public MiPunto[] crearArreglo() {
      MiPunto[] p;
     p = new MiPunto[10];
     for ( int i=0; i<10; i++ ) {
       p[i] = new MiPunto(i, i+1);
     }
     return p;
   }
Creación de Arreglo de
       Referencia MiPunto
                                            Heap
                      Stack de             Memory
                      Ejecución
                                  MiPunto [ ]       MiPunto
                                                x        0
                                                y        1
                                                         MiPunto
                                                     x       1
crearArreglo     p                                   y       2
                                     …
               this
      main
Inicialización de Arreglos
•   Inicializar un elemento del arreglo
•   Crear un arreglo con valores iniciales
    String[] nombres;
    nombres = new String[3];
    nombres[0] = "Georgianna";
    nombres[1] = "Jen";
    nombres[2] = "Simon";

    String[] nombres = { "Georgianna", "Jen", "Simon“ };
Inicialización de Arreglos
MiFecha[] fechas;
fechas = new MiFecha[3];
fechas[0] = new MiFecha(22, 7, 1964);
fechas[1] = new MiFecha(1, 1, 2000);
fechas[2] = new MiFecha(22, 12, 1964);

MiFecha[] fechas = { new MiFecha(22, 7, 1964),
new MiFecha(1, 1, 2000), new MiFecha(22, 12, 1964) };
Arreglos Multidimencionales
• Arreglos de arreglos
   int[][] dosDim = new int[4][];
   dosDim[0] = new int[5];
   dosDim[1] = new int[5];
   int[][] dosDim = new int[][4]; // ilegal
Arreglos Multidimencionales
• Arreglos de arreglos no rectangulares
   int[][] dosDim = new int[4][];
   dosDim[0] = new int[2];
   dosDim[1] = new int[4];
   dosDim[2] = new int[6];
   dosDim[3] = new int[8];
• Arreglo de 4 arreglos de 5 enteros
   int[][] dosDim = new int[4][5];
Limites de los Arreglos
• Todos los arreglos inician en la posición cero (0)
   public void imprimirElementos(int[] lista) {
     for (int i = 0; i < lista.length; i++) {
       System.out.println(lista[i]);
     }
   }
Ciclo for mejorado

   public void imprimirElementos(int[] lista) {
     for (int elemento : lista) {
       System.out.println(elemento);
     }
   }

• Se puede leer para cada elemento en la lista haga
Redimensión de Arreglos
•   Un arreglo no se puede redimensionar
•   Se puede usar la misma variable de referencia
    para apuntar a un nuevo arreglo:
    int[] miArreglo = new int[6];
    miArreglo = new int[10];
Copiando Arreglos
• El método System.arraycopy() permite copiar el
  contenido
  1 //arreglo original
  2 int[] miArreglo = { 1, 2, 3, 4, 5, 6 };
  3
  4 //nuevo arreglo mas grande
  5 int[] hold = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 };
  6
  7 // copia todo el arreglo miArreglo en el arreglo hold,
  8 // iniciando desde la posición 0
  9 System.arraycopy(miArreglo, 0, hold, 0, miArreglo.length);
Diseño de Clases



Docente:
Freddy Mendez Ortiz
Subclases
• La clase Empleado:
  public class Empleado {
    public String nombre = "";
    public double salario;
    public Date fechaNacimiento;
    public String getDetalles() {...}
  }
Subclases
• La clase Administrador:
   public class Administrador {
     public String nombre = "";
     public double salario;
     public Date fechaNacimiento;
     public String departamento;
     public String getDetalles() {...}
   }
Diagrama de clase del uso
      de Herencia
public class Empleado {
  public String nombre = "";
  public double salario;
  public Date fechaNacimiento;
  public String getDetalles() {...}
}

public class Administrador
   extends Empleado {
  public String departamento;
}
Herencia Simple
• Cuando una clase hereda solo de una clase padre,
  se llama Herencia Simple
• Interfaces proveen los beneficios de herencia
  simple sin inconvenientes
• Sintaxis de una clase de Java:
   <modificador> class <nombre> [extends <superclase>] {
   <declaración>*
   }
Herencia Simple
Control de Acceso
Modificador   Misma   Mismo     Subclase   Universo
              Clase   Paquete
   private      Si

   default      Si       Si

  protected     Si       Si         Si

   public       Si       Si         Si         Si
Sobrescritura de Métodos
• Una clase puede modificar el comportamiento
  heredado de una clase Padre
• Una subclase puede crear un método con diferente
  funcionalidad que el método de su Padre pero con
  mismo:
   –   Nombre
   –   Tipo de retorno *
   –   Lista de argumentos

   * El tipo de retorno puede ser una subclase
   del tipo retornado J2SE 5.0
Sobrescritura de Métodos
public class Empleado {           public class Administrador extends
protected String nombre;          Empleado {
protected double salario;         protected String departamento;
protected Date fechaNacimiento;
                                  public String getDetalles () {
                                  return “Nombre: “ + nombre +
public String getDetalles() {     “n” + “Salario: “ + salario +
return “Nombre: “ + nombre +      “Admin de: “ + departamento;
                                  }
“n” + “Salario: “ + salario;
                                  }
}
}
Métodos Sobrescritos no
pueden ser menos accesibles
public class Padre {                     public class UseAmbos {
public void hacerAlgo () {}              public void hacerOtraCosa() {
}                                        Padre p1 = new Padre();
                                         Padre p2 = new Hijo();
                                         p1. hacerAlgo ();
public class Hijo extends Padre {        p2. hacerAlgo ();
private void hacerAlgo () {} // ilegal   }
}                                        }
Invocación de métodos
         sobrescritos
• Un método de una subclase puede invocar un
  método de la clase Padre usando la palabra
  reservada super
  – La palabra super es usada en una clase para referirse a
    la superclase
  – La palabra super es usada en una clase para referirse a
    los miembros de la superclase, tanto atributos como
    métodos
  – El comportamiento invocado no tiene que ser el de la
    superclase, este puede subir jerárquicamente
Invocación de métodos
                   sobrescritos
public class Empleado {
public class Empleado {           public class Administrador extends
protected String nombre;          Empleado {
protected double salario;         protected String departamento;
protected Date fechaNacimiento;
                                  public String getDetalles () {
                                  return super.getDetalles() +
public String getDetalles() {     “Admin de: “ + departamento;
return “Nombre: “ + nombre +      }
                                  }
“n” + “Salario: “ + salario;
}
}
Polimorfismo
• La habilidad de tener varias formas. Ej; La clase
  Administrador tiene acceso a los métodos desde la
  clase Empleado
• Un objeto tiene una sola forma
• Una variable de referencia puede referenciar a
  objetos de diferentes formas
Polimorfismo
•   Empleado e = new Administrador();
•   e.departamento = “Ventas”;
•   ilegal tratar de asignar al atributo de Administrador
•   La variable es declarada de tipo Empleado, aun
    cuando el objeto Administrador tenga este atributo
Invocación virtual de
            métodos
• La invocación virtual de métodos es desarrollada
  de la siguiente forma:
   Empleado e = new Administrador();
   e.getDetalles();
• El tipo en tiempo de compilación y en tiempo de
  ejecución tiene las siguientes características:
Invocación virtual de
          métodos
– El nombre del método debe ser un miembro del
  tipo de variable declarada; en este caso
  Empleado      tiene   un     método     llamado
  getDetalles()
– La implementación del método usado es basado
  en el tipo de Objeto en tiempo de ejecución; en
  este     caso     Administrador   tiene     una
  implementación del método getDetalles()
Colecciones Heterogéneas
• Las colecciones de objetos del mismo tipo son
  llamadas colecciones homogéneas. Por ejemplo:
   MiFecha[] fechas = new MiFecha[2];
   fechas[0] = new MiFecha(22, 12, 1964);
   fechas[1] = new MiFecha(22, 7, 1964);
• Las colecciones de objetos de diferente tipo son
  llamadas colecciones heterogéneas. Por ejemplo:
   Empleado [] staff = new Empleado[1024];
   staff[0] = new Administrador();
   staff[1] = new Empleado();
   staff[2] = new Ingeniero();
Argumentos Polimorficos
• Puesto que un Administrador es un Empleado, lo
  siguiente es valido:
  public class ImpuestoServicio {
  public TasaImp buscarTasaImp(Empleado e) {
  // calcula la tasa de impuesto del empleado
  }
  }
  // Mientras tanto, en otra parte de la aplicación
  ImpuestoServicio impSer = new ImpuestoServicio();
  Administrador m = new Administrador();
  TasaImp t = impSer.buscarTasaImp(m);
El operador instanceof
public class Empleado extends Object
public class Administrador extends Empleado
public class Ingeniero extends Empleado
----------------------------------------
public void hacerAlgo(Empleado e) {
if ( e instanceof Administrador ) {
// Procesa un Administrador
} else if ( e instanceof Ingeniero ) {
// Procesa un Ingeniero
} else {
// Procesa cualquier otro tipo de Empleado
}
}
Casting de Objetos
public void hacerAlgo(Empleado e) {
if ( e instanceof Administrador ) {
    Administrador m = (Administrador) e;
    System.out.println(“Este es el Administrador de ”
    + m.getDepartamento());
} // Resto del código
}
Casting de Objetos
• Use el operador instanceof para probar el tipo de
  un Objeto.
• Devuelve la funcionalidad de un objeto usando
  casting.
• Compruebe un correcto casting usando los
  siguientes lineamientos:
• Casting hacia arriba en la jerarquía es realizado
  implícitamente.
Casting de Objetos
• Casting hacia abajo debe ser a una subclase y es
  chequeado por el compilador.
• El tipo del objeto es chequeado en tiempo de
  ejecución cuando un error de ejecución ocurre.
Sobrecarga de Métodos
• Uso de la sobrecarga:
    public void println(int i)
    public void println(float f)
    public void println(String s)
•   Lista de argumentos debe ser diferente.
•   Tipo de retorno puede ser diferente.
Métodos usando variable de
       argumentos
• Los métodos usando variables de argumentos
  permite múltiples números de argumentos en el
  método. Por ejemplo:
  public class Estadisticas {
  public float promedio(int... nums) {
  int sum = 0;
  for ( int x : nums ) {
  sum += x;
  }
  return ((float) sum) / nums.length;
  }
  }
Métodos usando variable de
       argumentos
• El parámetro varargs es tratado como un arreglo.
  Por ejemplo:
   float gradoPromedio = stats.promedio(4, 3, 4);
   float edadPromedio = stats.promedio(24, 32, 27, 18);
Sobrecarga de constructores
• public class EjemploAlcance {
• Como con los métodos, los constructores pueden
  ser sobrecargados. Por ejemplo:
   public Empleado(String nombre, double salario, Date fn)
   public Empleado(String nombre, double salario)
   public Empleado(String nombre, Date fn)
• La lista de argumentos debe ser diferente.
• Ud puede usar la referencia this como primera
  linea del constructor para llamar a otro constructor.
Sobrecarga de constructores
public class Empleado {
private static final double BASE_SALARIO = 15000.00;
private String nombre;
private double salario;
private Date fechaNacimiento;

public Empleado(String nombre, double salario, Date fn) {
this. nombre = nombre;
this. salario = salario;
this.fechaNacimiento = fn;
}
Sobrecarga de constructores
public Empleado(String nombre, double salario) {
this(nombre, salario, null);
}
public Empleado(String nombre, Date fn) {
this(nombre, BASE_SALARIO, fn);
}
// mas código de Empleado...
}
Constructores no se heredan
• Una subclase hereda todos los métodos y
  variables de la superclase (clase Padre).
• Una subclase no hereda el constructor de la
  superclase.
• Dos formas para incluir un constructor son:
• Usar el constructor por default.
• Escribir uno o mas constructores explícitamente.
Invocando el constructor de
        la superclase
• Para invocar el constructor del Padre, debe colocar
  el llamado a super en la primera línea de el
  constructor.
• Ud puede llamar a un constructor especifico del
  Padre por los argumentos que se usen al llamar a
  super.
Invocando el constructor de
        la superclase
• Si los llamados this o super no son usados en el
  constructor, entonces el compilador agrega un
  llamado implícito a super() que llama al constructor
  del Padre sin argumentos (el cual podría ser el
  constructor por default).
• Si la clase Padre define constructores, pero no
  provee uno sin argumentos, entonces el
  compilador genera un mensaje de error.
Invocando el constructor de
        la superclase
public class Administrador extends Empleado {
private String departamento;

public Administrador(String nombre, double salario, String dept) {
super(nombre, salario);
this. departamento = dept;
}
Construyendo e Inicializando
         Objetos
• La memoria es asignada y la inicialización por
  defecto ocurre.
• La inicialización de variables de instancia usa estos
  pasos recursivamente:
   1. Vincula los parámetros del constructor.
   2. Si existe llamado explicito a this(), este llama
   recursivamente, y salta al paso 5.
Construyendo e Inicializando
         Objetos
 3. Llamado recursivo de al super explicita o
 implícitamente, excepto para Object.
 4. Ejecuta la inicialización explicita de variables
 de instancia.
 5. Ejecuta el cuerpo de el actual constructor.
Ejemplo Construcción e
     Inicialización
public class Object {
public Object() {}
}
Ejemplo Construcción e
     Inicialización
public class Empleado extends Object {
private String nombre;
private double salario = 15000.00;
private Date fechaNacimiento;
public Empleado(String n, Date fn) {
// llamado a super() implícito;
nombre = n;
fechaNacimiento = fn;
}
public Empleado(String n) {
this(n, null);
}
}
Ejemplo Construcción e
     Inicialización
public class Administrador extends Empleado {
private String departamento;

public Administrador(String n, String d) {
super(n);
departamento = d;
}
}
Ejemplo Construcción e
     Inicialización
0 Inicialización básica
0.1 Asigna memoria para el objeto completo Administrador
0.2 Inicializa todas las variables de instancia con su valor por
defecto (0 or null)
1 Llama al constructor Administrador("Joe Smith", “Ventas")
1.1 Vincula los parámetros del constructor: n="Joe Smith",
d="Ventas"
1.2 No existe llamado explicito a this()
1.3 Llamado al super(n) para Empleado(String)
1.3.1 Vincula los parámetros del constructor: n="Joe Smith"
1.3.2 Llama this(n, null) para Empleado(String, Date)
Ejemplo Construcción e
     Inicialización
1.3.2.1 Vincula los parámetros del constructor: n="Joe Smith",
fn=null
1.3.2.2 No existe llamado explicito a this
1.3.2.3 Llamado al super() para Object()
1.3.2.3.1 Vinculación no es necesaria
1.3.2.3.2 No existe llamado explicito a this
1.3.2.3.3 No existe llamado a super (Object es la raiz)
1.3.2.3.4 No existe inicialización explicita de variables para
Object
1.3.2.3.5 No existe cuerpo en el constructor llamado
1.3.2.4 inicialización explicita de variables de Empleado:
salario=15000.00;
Ejemplo Construcción e
     Inicialización
1.3.2.5 Ejecuta el cuerpo: nombre="Joe Smith";
fechaNacimiento=null;
1.3.3 - 1.3.4 Pasos saltados
1.3.5 Ejecuta el cuerpo: No existe cuerpo en Empleado(String)
1.4 No existe inicialización explicita de variables para
Administrador
1.5 Ejecuta el cuerpo: departamento=“Ventas"
La clase Object
• La clase Object es la raíz de todas las clases en
  Java
• Una declaración que no tenga la cláusula extends,
  implica que hereda de Object.
   public class Empleado
• Es equivalente a:
   public class Empleado extends Object
• Dos métodos importantes son:
• equals()
• toString()
El método equals
• El operador == determina if dos referencias son
  iguales (esto es, referenciar al mismo objeto).
• El método equals determina si los objetos son
  iguales pero no necesariamente idénticos.
• La implementación de Object de el método equals
  usa el operador ==.
El método equals
• Usuarios de clases pueden sobrescribir el método
  equals para implementar una prueba especifica
  para igualdad.
• Nota: Ud debería sobrescribir el método
  hashCodemethod si sobrescribe el método equals.
Un ejemplo de equals
public class MiFecha {
private int dia;
private int mes;
private int anio;

public MiFecha(int dia, int mes, int anio) {
this.dia = dia;
this.mes = mes;
this.anio = anio;
}
Un ejemplo de equals
public boolean equals(Object o) {
  boolean resultado = false;
  if ( (o != null) && (o instanceof MiFecha) ) {
  MiFecha d = (MiFecha) o;
  if ( (dia == d.dia) && (mes == d.mes) && (anio == d.anio) ) {
         resultado = true;
  }
  }
  return resultado;
}
Un ejemplo de equals
public int hashCode() {
return (dia ^ mes ^ anio);
}
}
Un ejemplo de equals
class TestEquals {
public static void main(String[] args) {
MiFecha fecha1 = new MiFecha(14, 3, 1976);
MiFecha fecha2 = new MiFecha(14, 3, 1976);

if ( fecha1 == fecha2 ) {
System.out.println("fecha1 idéntica a fecha2");
} else {
System.out.println("fecha1 no es idéntica a fecha2");
}
Un ejemplo de equals
if ( fecha1.equals(fecha2) ) {
System.out.println("fecha1 es igual a fecha2");
} else {
System.out.println("fecha1 no es igual a fecha2");
}

System.out.println(“fijar fecha2 = fecha1;");
fecha2 = fecha1;
Un ejemplo de equals
if ( fecha1 == fecha2 ) {
System.out.println("fecha1 es idéntica a fecha2");
} else {
System.out.println("fecha1 no es idéntica a fecha2");
}
}
}
Un ejemplo de equals
• Este ejemplo genera la siguiente salida:
   fecha1 no es idéntica a fecha2
   fecha1 es igual a fecha2
   fijar fecha2 = fecha1;
   fecha1 es idéntica a fecha2
El método toString
• El método toString()          tiene   las    siguientes
  características:
  – Este método convierte un objeto en un String
  – Este método se usa durante la concatenación de String
  – Sobrescribir este método para proveer información sobre
    un objeto definido por el usuario en formato legible.
  – Usado por las clases wrappers (toString static método)
    para convertir tipos primitivos a String.
Clases Wrapper
      • Mirando elementos de tipo primitivo como un
        objeto
  Tipo de dato primitivo           Clase wrapper
boolean                    Boolean
byte                       Byte
char                       Character
short                      Short
int                        Integer
long                       Long
float                      Float
double                     Double
Clases Wrapper
• Un ejemplo para la clase wrapper es:
   int pInt = 420;
   Integer wInt = new Integer(pInt); // Esto es llamado boxing
   int p2 = wInt.intValue(); // Esto es llamado unboxing
• Otros métodos son:
   int x = Integer.valueOf(str).intValue();
   int x = Integer.parseInt(str);
Autoboxing de tipos
             primitivos
• Autoboxing tiene la siguiente descripción:
• Conversión de tipos primitivos a los objetos
  equivalentes
• Las clases wrapes no son siempre necesarias
• Ejemplo:
   int pInt = 420;
   Integer wInt = new Integer(pInt); // Esto es autoboxing
   int p2 = wInt.intValue(); // Esto es autoboxing
Autoboxing de tipos
          primitivos
• Wrapped primitivos también son usables en
  expresiones aritméticas.

Más contenido relacionado

La actualidad más candente

9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetosClara Patricia Avella Ibañez
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoAlvaro Enrique Ruano
 
Modelo Orientado A Objetos
Modelo Orientado A ObjetosModelo Orientado A Objetos
Modelo Orientado A Objetosjose_rob
 
POO Programación Orientada a Objetos
POO Programación Orientada a ObjetosPOO Programación Orientada a Objetos
POO Programación Orientada a ObjetosLuis Berganza
 
Programación orientada a objetos presentacion
Programación    orientada    a objetos presentacionProgramación    orientada    a objetos presentacion
Programación orientada a objetos presentacionfranciscocain
 
Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herenciajlmanmons
 
Diagramas de objetos
Diagramas de objetosDiagramas de objetos
Diagramas de objetosstill01
 
Normalizacion boyce codd_4_fn
Normalizacion boyce codd_4_fnNormalizacion boyce codd_4_fn
Normalizacion boyce codd_4_fnLuis Jherry
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetosjent46
 
6. tda arrayu generico
6. tda arrayu generico6. tda arrayu generico
6. tda arrayu genericoAna Ocaña
 
Herencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosHerencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosMario Villaseñor
 

La actualidad más candente (20)

9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos9 Curso de POO en java - variables, constantes y objetos
9 Curso de POO en java - variables, constantes y objetos
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismo
 
Modelo Orientado A Objetos
Modelo Orientado A ObjetosModelo Orientado A Objetos
Modelo Orientado A Objetos
 
Fundamentos de BD - Unidad 5 algebra relacional
Fundamentos de BD - Unidad 5 algebra relacionalFundamentos de BD - Unidad 5 algebra relacional
Fundamentos de BD - Unidad 5 algebra relacional
 
POO Programación Orientada a Objetos
POO Programación Orientada a ObjetosPOO Programación Orientada a Objetos
POO Programación Orientada a Objetos
 
Programación orientada a objetos presentacion
Programación    orientada    a objetos presentacionProgramación    orientada    a objetos presentacion
Programación orientada a objetos presentacion
 
Poo 3 herencia
Poo 3 herenciaPoo 3 herencia
Poo 3 herencia
 
Ado net
Ado netAdo net
Ado net
 
Polimorfismo y herencia
Polimorfismo y herenciaPolimorfismo y herencia
Polimorfismo y herencia
 
Encapsulamiento poo
Encapsulamiento pooEncapsulamiento poo
Encapsulamiento poo
 
Diagramas de objetos
Diagramas de objetosDiagramas de objetos
Diagramas de objetos
 
Taller de Base de Datos - Unidad 7 Conectividad
Taller de Base de Datos - Unidad 7 ConectividadTaller de Base de Datos - Unidad 7 Conectividad
Taller de Base de Datos - Unidad 7 Conectividad
 
Normalizacion boyce codd_4_fn
Normalizacion boyce codd_4_fnNormalizacion boyce codd_4_fn
Normalizacion boyce codd_4_fn
 
Semana 6 Bases de Datos Relacionales
Semana 6   Bases de Datos RelacionalesSemana 6   Bases de Datos Relacionales
Semana 6 Bases de Datos Relacionales
 
Programación Orientada a Objetos
Programación Orientada a ObjetosProgramación Orientada a Objetos
Programación Orientada a Objetos
 
programacion orientada a objetos
programacion orientada a objetosprogramacion orientada a objetos
programacion orientada a objetos
 
DOM HTML Javascript
DOM HTML JavascriptDOM HTML Javascript
DOM HTML Javascript
 
Lenguaje PHP
Lenguaje PHPLenguaje PHP
Lenguaje PHP
 
6. tda arrayu generico
6. tda arrayu generico6. tda arrayu generico
6. tda arrayu generico
 
Herencia - Programación Orientada a Objetos
Herencia - Programación Orientada a ObjetosHerencia - Programación Orientada a Objetos
Herencia - Programación Orientada a Objetos
 

Similar a Información básica Java

Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónFabiolaCastilloCanci
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraArisbethBernalSalina
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2mellcv
 
2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02Krizztiina Pacheko
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje javaMargarita Romero
 
Estructura basica de un programa
Estructura basica de un programaEstructura basica de un programa
Estructura basica de un programaRay-kun Olivera
 
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...
Fundamentos de Java /   15 consejos prácticos sobre Java que cambiarán la for...Fundamentos de Java /   15 consejos prácticos sobre Java que cambiarán la for...
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...Eudris Cabrera
 
2.1 caracteristicas de lenguajes de programación
2.1 caracteristicas de lenguajes de programación2.1 caracteristicas de lenguajes de programación
2.1 caracteristicas de lenguajes de programaciónoviedospablo
 
iNTRODUCCION AL LENGUAJE JAVA
iNTRODUCCION AL LENGUAJE  JAVAiNTRODUCCION AL LENGUAJE  JAVA
iNTRODUCCION AL LENGUAJE JAVAJesus Alex Haro
 
lenguajejava.pptx
lenguajejava.pptxlenguajejava.pptx
lenguajejava.pptxMiguelAmc
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosDoris Aguagallo
 

Similar a Información básica Java (20)

Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitaciónJava1-Intro.pptbbjjjfdzvñutfdnmj habitación
Java1-Intro.pptbbjjjfdzvñutfdnmj habitación
 
Java introduccion conceptos basicos una mira
Java introduccion conceptos basicos una miraJava introduccion conceptos basicos una mira
Java introduccion conceptos basicos una mira
 
Semana9 Vbr
Semana9 VbrSemana9 Vbr
Semana9 Vbr
 
Programacion orientada a objetos 2
Programacion orientada a objetos 2Programacion orientada a objetos 2
Programacion orientada a objetos 2
 
2introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate022introduccionallenguajejava 141109171757-conversion-gate02
2introduccionallenguajejava 141109171757-conversion-gate02
 
INTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVAINTRODUCCION LENGUAJE JAVA
INTRODUCCION LENGUAJE JAVA
 
2) introduccion al lenguaje java
2) introduccion al lenguaje java2) introduccion al lenguaje java
2) introduccion al lenguaje java
 
Estructura basica de un programa
Estructura basica de un programaEstructura basica de un programa
Estructura basica de un programa
 
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...
Fundamentos de Java /   15 consejos prácticos sobre Java que cambiarán la for...Fundamentos de Java /   15 consejos prácticos sobre Java que cambiarán la for...
Fundamentos de Java / 15 consejos prácticos sobre Java que cambiarán la for...
 
r124736.PPT
r124736.PPTr124736.PPT
r124736.PPT
 
2.1 caracteristicas de lenguajes de programación
2.1 caracteristicas de lenguajes de programación2.1 caracteristicas de lenguajes de programación
2.1 caracteristicas de lenguajes de programación
 
iNTRODUCCION AL LENGUAJE JAVA
iNTRODUCCION AL LENGUAJE  JAVAiNTRODUCCION AL LENGUAJE  JAVA
iNTRODUCCION AL LENGUAJE JAVA
 
JAVA.PPT
JAVA.PPTJAVA.PPT
JAVA.PPT
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
 
JAVA (1).PPT
JAVA (1).PPTJAVA (1).PPT
JAVA (1).PPT
 
TUTORIAL JAVA
TUTORIAL JAVATUTORIAL JAVA
TUTORIAL JAVA
 
Java12
Java12Java12
Java12
 
lenguajejava.pptx
lenguajejava.pptxlenguajejava.pptx
lenguajejava.pptx
 
Tipos de datos
Tipos de datosTipos de datos
Tipos de datos
 
Lenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetosLenguajes de programación orientados a objetos
Lenguajes de programación orientados a objetos
 

Información básica Java

  • 1. Explicar la Tecnología Java Docente: Freddy Mendez Ortiz
  • 2. Que es la Tecnología Java? • La tecnología Java es: – Un lenguaje de programación – Un ambiente de desarrollo – Un ambiente de aplicación • Tiene sintaxis similar a C++ • Es usada para desarrollar tanto aplicaciones como applets
  • 3. Principales Metas de la Tecnología Java? • Provee un lenguaje fácil de usar por: – Evita muchas fallas presentes en otros lenguajes. – Usa el paradigma Orientado a Objetos – Permite crear código estable y limpio. • Provee un ambiente interpretado para: – Mejora la velocidad de desarrollo. – Portabilidad del código
  • 4. Principales Metas de la Tecnología Java? • Permite ejecutar mas de una actividad • Cargar clases dinámicamente; esto es, cuando ellas son realmente necesitadas • Permite cambiar programas dinámicamente durante la ejecución por la carga de clases desde fuentes distantes • Proveer mejor seguridad
  • 5. Principales Metas de la Tecnología Java? • Las siguientes características satisfacen estas metas: – La maquina virtual de Java JVM – El colector de basura – El ambiente de ejecución de Java JRE – Herramientas de interface de JVM
  • 6. Maquina Virtual de Java • Una maquina imaginaria que es implementada para emular esta en software en una maquina real. El código para la JVM es almacenado en archivos .class, cada uno de los cuales contiene a lo mas una clase publica.
  • 7. Maquina Virtual de Java • Provee las especificaciones del hardware de la plataforma • Lee archivos compilados (Bytecodes) que son independientes de la plataforma • Es implementada en software o hardware • Es implementada en las herramientas de desarrollo de la Tecnología Java o en un navegador Web
  • 8. Maquina Virtual de Java • La mayoría de los chequeos de tipo son realizados cuando el código es compilado • La implementación de la JVM aprobada por Sun Microsystems debe ser capas de ejecutar cualquier archivo class compilado • La JVM se ejecuta en diferentes sistemas operativos (Solaris, Linux, Mac, Windows)
  • 9. Colector de Basuras • Memoria asignada que no esta siendo necesitada debería ser desasignada • En otros lenguajes desasignar la memoria es responsabilidad del programador • El lenguaje de programación de Java provee un hilo de nivel del sistema para monitorear memoria asignada
  • 10. Colector de Basuras • El colector de basura tiene las siguientes características: – Cheque y libera memoria no necesitada. – Se realizado automáticamente. – Puede variar drásticamente entre las diferentes implementaciones de la JVM
  • 12. Operación del JRE con JIT (Just-In-Time)
  • 13. Tareas de la JVM • La JVM realiza tres tareas principales: – Cargar el código – Verificar el código – Ejecutar el código
  • 14. Cargador de Clases • Carga todas las clases necesarias para la ejecución de un programa • Mantiene las clases de los archivos locales del sistema en nombre de espacio (namespaces) separados • Previene la suplantación (spoofing)
  • 15. Verificador de Bytecode Asegura que: • El código cumple con las especificaciones de la JVM. • El código no viola integridad del sistema. • El código no causa operaciones de stack overflows • Los tipos de parámetros para todas las operaciones de código son correctas.
  • 16. Ambiente de ejecución de la Tecnología de Java
  • 17. Declaración de Clases en la Tecnología Java • Sintaxis básica de una clase en Java: <modifidor>* class <nombre_clase> { <declaración_atributos>* < declaración_constructor>* < declaración_metodos>* }
  • 18. Declaración de Clases en la Tecnología Java • Ejemplo: 1 public class Vehiculo { 2 private double maxCarga; 3 public void setMaxCarga(double valor) { 4 maxCarga = valor; 5 } 6}
  • 19. Declaración de Atributos en la Tecnología Java • Sintaxis básica de un atributo en Java: <modificador>* <tipo> <nombre>[=<initial_valor>]; • Ejemplo: 1 public class Valores { 2 private int x; 3 private float y = 10000.0F; 4 private String nombre = "Bates Motel"; 5}
  • 20. Declaración de Métodos en la Tecnología Java • Sintaxis básica de un método en Java: <modificador>* <tipo_retorno> <nombre> (<argumentos>*) { <declaraciones>* }
  • 21. Declaración de Métodos en la Tecnología Java • Ejemplo: 1 public class Perro { 2 private int peso; 3 public int getPeso() { 4 return peso; 5 } 6 public void setPeso(int nuevoPeso) { 7 if (nuevoPeso > 0 ) { 8 peso = nuevoPeso; 9 } 10 } 11 }
  • 22. Accediendo a miembros de un Objeto • La notación punto es:<objeto>.<miembro> • Esta es usada para acceder a los miembros de un objeto incluyendo atributos y métodos • Ejemplo de la notación punto: – d.setPeso(42); – d.peso = 42; // Solo si el atributo peso es public
  • 24. Ocultar Información • El código del cliente tiene acceso directo a los datos internos (d referencia un objeto de tipo MiFecha) • d.dia = 32; // Día invalido • d.mes = 2; d.dia = 30; // posible pero erróneo • d.dia = d.dia + 1; // no chequea si da la vuelta
  • 26. Ocultar Información • El código del cliente debe usar los métodos getters y setters para acceder a los datos internos • d.setDia(32); // Día invalido, retorna false • d.setMes(2); // posible pero erróneo, • d.setDia(30); // setDia retorna false • d.setDia(d.getDia() + 1); // día invalido, retorna false
  • 27. Encapsulamiento • Oculta la implementación de detalles de la clase • Obliga al usuario a usar una interface para acceder a los datos • Hace el código mantenible
  • 29. Declaración de Constructores en Java • Sintaxis básica de un constructor en Java: <modificador>* <nombre_clase> (<argumentos>*) { <declaraciones>* }
  • 30. Declaración de Constructores en Java • Ejemplo: 1 public class Dog { 2 private int weight; 3 public Dog() { 4 weight = 42; 5 } 6}
  • 31. Constructor por defecto • Siempre debe existir por lo menos un constructor en cada clase • Si no se escribe ninguno, el constructor por defecto se presenta automáticamente: – No recibe argumentos – El cuerpo es vació • El constructor por defecto permite crear instancias de objetos de la forma new XXX(); sin tener ningún constructor definido
  • 32. Esquema archivo fuente • Sintaxis básica de un archivo fuente en Java: [<declaración_paquetes>] <declaración_import>* <declaración_clase>+
  • 33. Esquema archivo fuente • Por ejemplo, el archivo ReporteCapacidadVehiculo.java es: 1 package shipping.reports; 2 3 import shipping.domain.*; 4 import java.util.List; 5 import java.io.*; 6 7 public class ReporteCapacidadVehiculo { 8 private List vehiculos; 9 public void generarReporte(Writer salida) {...} 10 }
  • 34. Paquetes de Software • Los paquetes ayudan a administrar grandes sistemas de software • Los paquetes pueden contener clases y sub paquetes
  • 36. Declaración de Paquetes • Sintaxis básica de la declaración de paquetes: package <top_pkg_nombre>[.<sub_pkg_nombre>]*; • Ejemplo de la declaración: package shipping.gui.reportscreens; • Específicamente la declaración de paquetes va al inicio del archivo fuente • Solamente una declaración de paquete por archivo fuente
  • 37. Declaración de Paquetes • Si ningún paquete es declarado, entonces la clase es colocada dentro de un paquete por default • El nombre de los paquetes debe ser jerárquico y separado por puntos.
  • 38. Declaración de import • Sintaxis básica de la declaración de import: import <pkg_nombre>[.<sub_pkg_nombre>]*.<class_nombre>; o import <pkg_nombre>[.<sub_pkg_nombre>]*.*; • Ejemplo de la declaración: import java.util.List; import java.io.*; import shipping.gui.reportscreens.*;
  • 39. Declaración de import • La declaración de import hace lo siguiente: – Precede todas las declaraciones de clases – Le indica al compilador donde puede encontrar las clases
  • 40. Identificadores, palabras reservadas y tipos de datos Docente: Freddy Mendez Ortiz
  • 41. Comentarios • Los tres estilos permitidos de comentarios en los programas de la Tecnología de Java son: //Comentarios de línea /*Comentarios de bloque *una o mas líneas */ /**Comentarios de documentación *se pueden extender una o mas líneas */
  • 42. Puntos y coma, bloques y espacios en blanco • Una declaración es una o mas líneas de código terminadas por un punto y coma ( ; ): total = a + b + c + d + e + f; • Un bloque es una colección de declaraciones limitadas por llaves que abren ( { ) y cierran ( } ) { x = y + 1; y = x + 1; }
  • 43. Identificadores • Los identificadores tienen las siguientes características: – Son nombres dados a variables, clases o métodos – Pueden iniciar con una letra Unicode, guion de piso ( _ ), o signo de moneda ( $ ) – Son sensibles a mayúsculas y minúsculas, y no tiene longitud máxima
  • 44. Identificadores • Ejemplos: identificadores nombreUsuario nombre_usuario _var_sys_1 $cambio
  • 45. Palabras reservadas de Java abstract continue for new switch assert default goto package synchronized boolean do if private this break double implements protected throw byte else import public throws case enum instanceof return transient catch extends int short try char final interface static void class finally long strictfp volatile const float native super while Palabras literales reservadas: null, true y false
  • 46. Tipos primitivos • El lenguaje de programación Java define ocho tipos de datos primitivos: – Lógicos : boolean – Textuales : char – Enteros : byte, short, int, long – Flotantes : float, double
  • 47. Lógico - boolean • El primitivo boolean tiene las siguientes características: – El tipo de dato boolean tiene dos valores literales, true y false Por ejemplo la siguiente declaración: boolean bandera = true; Declara la variable bandera como tipo boolean y asigna a esta un valor de true
  • 48. Textual - char • El textual primitivo char tiene las siguientes características: – Representa un carácter Unicode de 16-bit – Debe estar entre comillas sencillas (‘ ‘) – Usa las siguientes notaciones: • ‘a’ La letra a • ‘ t ’ El carácter tabulador • ‘u????’ Un especifico carácter Unicode, ????, es reemplazado con exactamente cuatro digitos hexadecimales
  • 49. Textual - String • El textual tipo String tiene las siguientes características: – No es un tipo de dato primitivo, es un tipo de clase – Tiene declaración literal entre comillas dobles (“”). Ej: “Java es el mejor lenguaje del mundo” – Puede ser usado como sigue: • String saludo = “Buenos días !! n"; • String mensajeError = "Registro no encontrado !";
  • 50. Enteros – byte, short, int y long • Los primitivos enteros tienen las siguientes características: – Primitivos enteros usan tres formas: Decimal, Octal y Hexadecimal 2 077 0xBAAC – Los literales tiene como tipo por defecto int – Los literales con el sufijo L o l son de tipo long
  • 51. Enteros – byte, short, int y long • Los primitivos enteros tienen los siguientes rangos: Longitud del Entero Nombre o tipo Rango 8 bits byte -27 hasta 27-1 16 bits short -215 hasta 215-1 32 bits int -231 hasta 231-1 64 bits long -263 hasta 263-1
  • 52. Punto flotante – float y double • Los primitivos punto flotante tienen las siguientes características: – Los literales punto flotante incluyen una de dos punto decimal o un de los siguientes caracteres: • E or e (agrega un valor exponencial) • F or f (float) • D or d (double)
  • 53. Punto flotante – float y double – Ejemplos: • 3.14 Un simple valor punto flotante (double) • 6.02E23 Un gran valor punto flotante • 2.718F Un simple valor de tamaño float • 123.4E+306D Un gran valor double con redundante D • Los literales tienen como tipo por defecto double
  • 54. Punto flotante – float y double • Los primitivos punto flotante tienen los siguientes tamaños: Longitud del Flotante Nombre o tipo 32 bits float 64 bits double
  • 55. Variables, declaraciones y asignaciones public class Asigna { public static void main (String args [ ]) { // declara variables enteras int x, y; // declara y asigna un punto flotante float z = 3.414f; // declara y asigna un double double w = 3.1415; // declara y asigna un boolean boolean bandera = true;
  • 56. Variables, declaraciones y asignaciones // declara variable carácter char c; // declara variable String String str; // declara y asigna variable String String str1 = “chao"; // asigna valor a variable tipo char c = 'A'; // asigna valor a variable String str = “Hola, alguien en casa!";
  • 57. Variables, declaraciones y asignaciones // asigna valores a las variables int x = 6; y = 1000; } }
  • 58. Tipos de referencia en Java • En la Tecnología Java, aparte de los tipos primitivos, todos los demás son tipos de referencia • Una variable de referencia contiene un identificador a un objeto
  • 59. Tipos de referencia en Java • Por ejemplo: public class MiFecha { private int dia = 1; private int mes = 1; private int anio = 2000; public MiFecha(int d, int m, int a) { ... } public String toString() { ... } }
  • 60. Tipos de referencia en Java • Por ejemplo: public class PruebaMiFecha { public static void main(String [ ] args) { MiFecha hoy = new MiFecha (22, 7, 1964); } }
  • 61. Construyendo e Inicializando Objetos • Llamando a new Xyz() desarrolla las siguientes acciones: – La memoria es asignada para el Objeto – La inicialización explicita de atributos es desarrollada – Un constructor es ejecutado. – La referencia del Objeto es retornada por el operador new
  • 62. Construyendo e Inicializando Objetos • La referencia de un Objeto es asignada a la variable • Un ejemplo es: – MiFecha hoy = new MiFecha (22, 7, 1964);
  • 63. Asignación y Organización de memoria • Una declaración permite almacenar solamente una referencia – MiFecha hoy = new MiFecha (22, 7, 1964); – hoy ????
  • 64. Asignación y Organización de memoria • Usar el operador new asigna espacio para el Objeto MiFecha – MiFecha hoy = new MiFecha (22, 7, 1964); – hoy ???? – dia 0 – mes 0 – anio 0
  • 65. Inicialización explicita de atributos • Inicializa los atributos como sigue: – MiFecha hoy = new MiFecha (22, 7, 1964); – hoy ???? – dia 1 – mes 1 – anio 2000
  • 66. Inicialización explicita de atributos • Los valores por defecto son tomados de la declaración de atributos de la clase : – private int dia = 1; – private int mes = 1; – private int anio = 2000;
  • 67. Ejecutando el constructor • Ejecuta el correspondiente constructor: – MiFecha hoy = new MiFecha (22, 7, 1964); – hoy ???? – dia 22 – mes 7 – anio 1964
  • 68. Ejecutando el constructor • En el caso de la sobrecarga de constructores, el primer constructor puede llamar a otros
  • 69. Asignando a la variable • Ejecuta el correspondiente constructor: – MiFecha hoy = new MiFecha (22, 7, 1964); – hoy 0x01abcdef – dia 22 – mes 7 – anio 1964
  • 70. Asignación de referencias • Dos variables referencian al mismo objeto: – int x = 7; – int y = x; – MiFecha s = new MiFecha(22, 7, 1964); – MiFecha t = s; – x 7 22 7 1964 – y 7 – s 0x01abcdef – t 0x01abcdef
  • 71. Asignación de referencias • Se reasignan dos variables apuntan a dos objetos: – t = new MiFecha(22, 12, 1964); – x 7 22 7 1964 – y 7 22 12 1964 – s 0x01abcdef – t 0x123456fa
  • 72. Paso por valor • En una sencilla maquina virtual, el lenguaje de programación de Java únicamente pasa argumentos por valor • Cuando la instancia de un objeto es pasada como argumento de un método, el valor del argumento es una referencia del objeto • El contenido del objeto puede ser cambiado en el llamado del método, pero la referencia original del objeto nunca cambia
  • 73. Paso por valor public class PruebaPaso { // El método cambia el valor actual public static void cambiaInt(int valor) { valor = 55; } public static void cambiaRefObjeto(MiFecha ref) { ref = new MiFecha (1, 1, 2000); } public static void cambiaAtribObjeto(MiFecha ref){ ref.setDia(4); }
  • 74. Paso por valor public static void main(String args [ ] ) { MiFecha fecha; int val; // Asigna el int val = 11; // Trata de cambiar el valor cambiaInt(val); // Cual es el valor actual? System.out.println("Int valor es: " + val); • El resultado es: Int valor es 11
  • 75. Paso por valor // Asigna la fecha fecha = new MiFecha(22, 7, 1964); // Trata de cambiar el objeto cambiaRefObjeto(fecha); // Cual es el valor actual? System.out.println("MiFecha: " + fecha); • El resultado es: MiFecha: 22-7-1964
  • 76. Paso por valor // Ahora cambia el atributo día // a través de la referencia del objeto cambiaAtribObjeto(fecha); // Cual es el valor actual? System.out.println("MiFecha: " + fecha); } } • El resultado es: MiFecha: 4-7-1964
  • 77. La referencia this • Unos pocos usos de la palabra reservada this son: – Resolver ambigüedad entre variables de instancia y parámetros – Pasar el actual objeto como parámetro a otro método o constructor
  • 78. La referencia this public class MiFecha { private int dia = 1; private int mes = 1; private int anio = 2000; public MiFecha(int dia, int mes, int anio) { this. dia = dia; this. mes = mes; this. anio = anio; }
  • 79. La referencia this public MiFecha (MiFecha fecha) { this. dia = fecha. dia; this. mes = fecha. mes; this. anio = fecha. anio; } public String toString() { return "" + dia + "-" + mes + "-" + anio; }
  • 80. La referencia this public MiFecha addDias(int numDias) { MiFecha nuevaFecha = new MiFecha(this); nuevaFecha.dia = nuevaFecha.dia + numDias; // Resto de la implementación de código... return nuevaFecha; } }
  • 81. La referencia this public class PruebaMiFecha { public static void main(String [ ] args) { MiFecha miFecha = new MiFecha (22, 7, 1964); MiFecha siguienteSemana = miFecha.addDias(7); System.out.println(siguienteSemana); } }
  • 82. Expresiones y control de flujo Docente: Freddy Mendez Ortiz
  • 83. Variables y alcance • Variables locales son: – Variables que son definidas dentro de un método y son llamadas: locales, automáticas, temporales o de pila – Variables que son creadas cuando el método se ejecuta y destruidas cuando el método termine.
  • 84. Variables y alcance • La inicialización de variables incluye lo siguiente: – Las variables locales requieren inicialización explicita – Las variables de instancia son inicializadas automáticamente
  • 85. Ejemplo alcance variables public class EjemploAlcance { private int i=1; public void primerMetodo() { int i=4, j=5; this.i = i + j; segundoMetodo(7); } public void segundoMetodo (int i) { int j=8; this.i = i + j; } }
  • 86. Ejemplo alcance variables public class TestScoping { public static void main(String[] args) { EjemploAlcance alcance = new EjemploAlcance(); alcance.primerMetodo(); } }
  • 87. Ejemplo alcance variables Stack de Heap Ejecución Memory j 8 EjemploAlcance segundoMetodo i 7 i 1 this j 5 primerMetodo i 4 this main alcance
  • 88. Inicialización variables Variable Valor byte 0 short 0 int 0 long 0L float 0.0F double 0.0D char 'u0000' boolean false Todos los tipos de null referencia
  • 89. Principio Inicializar antes de usar • El compilador puede verificar que las variables locales tiene que ser inicializadas antes de usarse public void hacerComputo() { int x = (int)(Math.random() * 100); int y; int z; if (x > 50) { y = 9; } z = y + x; // Posible uso antes de inicializar }
  • 90. Precedencia operadores Operadores Asociatividad ++ -- ~ ! ( ) R to L */% L to R +- L to R << >> >>> L to R < > <= >= instanceof L to R == != L to R & L to R ^ L to R | L to R && L to R || L to R <boolean_expr> ? <expr1> : <expr2> R to L = *= /= %= += -= <<= >>= >>>= &= ^= |= R to L
  • 91. Operadores Lógicos • Los operadores boolean son: ! – NOT & – AND | – OR ^ – XOR • Los operadores boolean short-circuit are: && – AND || – OR • Los operadores se pueden usar como: MiFecha d = reservacion.getFechaSalida(); if ( (d != null) && (d.dia > 31) { // Hacer algo con d }
  • 92. Operadores Lógicos a Bitwise • Los operadores bitwise a enteros son: ~ – Complemento & – AND ^ – XOR | – OR • Los operadores se pueden usar como:
  • 93. Operadores Right-Shift >> y >>> • Operador Right-Shift: • Ejemplos son: – 128 >> 1 retorna 128/21 = 64 – 256 >> 4 retorna 256/24 = 16 – -256 >> 4 retorna -256/24 = -16 • El bit del signo es copiado durante el corrimiento
  • 94. Operadores Right-Shift >> y >>> • Operador unsigned Right-Shift: • Este operador es usado para patrones de bit • El bit del signo no es copiado durante el corrimiento
  • 95. Operador Left-Shift << • Operador Left-Shift trabaja como: – 128 << 1 retorna 128 * 21 = 256 – 16 << 2 retorna 16 * 22 = 64
  • 97. Concatenar String con + • El operador + funciona como sigue: – Realiza concatenación de String – Produce un nuevo String String titulo = “Dr.”; String nombre = “Luis” + “ ” + “Perez”; String saludo = titulo + “ ” + nombre; • Un argumento debe ser un objeto String • No Strings son convertidos a objetos String de forma automática
  • 98. Casting • Si información podría perderse en una asignación, el programador debe confirmar la asignación con un casting • La asignación entre lont e int requiere un casting explicito long granValor = 99L; int valor = granValor; // Incorrecto, necesita casting int valor = (int) granValor; // OK int valor = 99L; // Incorrecto, necesita casting int valor = (int) 99L; // OK int valor = 99; // Por defecto int
  • 99. Promoción y Casting de expresiones • Las variables se promueven automáticamente a su forma mas grande (como int a long) • La expresión es compatible de asignar si el tipo de la variable es al menos igual de grande (mismo numero de bits) como el tipo de la expresión – long x = 6; // 6 es un tipo int, OK – int y = 99L; // 99L es un tipo long, ilegal – double z = 12.414F; // 12.414F es un tipo float, OK – float z1 = 12.414; // 12.414 es double, illegal
  • 100. Declaración de if simple • La sintaxis de la declaración del if es: if ( <expresión_boolean> ) <declaración_o_bloque> • Ejemplo: if ( x < 10 ) System.out.println(“Usted ha terminado?"); • o (recomendado): if ( x < 10 ) { System.out.println(“Usted ha terminado?"); }
  • 101. Declaración de if, else complejo • La sintaxis de la declaración del if-else es: if ( <expresión_boolean> ) <declaración_o_bloque> else <declaración_o_bloque>
  • 102. Declaración de if, else complejo • La sintaxis de la declaración del if-else-if es: if ( <expresión_boolean> ) <declaración_o_bloque> else if ( <expresión_boolean> ) <declaración_o_bloque>
  • 103. Declaración de switch • La sintaxis de la declaración de switch es: switch ( <expresión> ) { case <constante1>: <declaración_o_bloque>* [break;] case <constante2>: <declaración_o_bloque>* [break;] default: <declaración_o_bloque>* [break;] }
  • 104. Declaración de switch • Un ejemplo de la declaración switch es: switch ( carModel ) { case DELUXE: addAire(); addRadio(); addLlantas(); addMotor(); break;
  • 105. Declaración de switch case STANDARD: addRadio(); addLlantas(); addMotor(); break; default: addLlantas(); addMotor(); }
  • 106. Declaración de switch • Esta declaración switch es equivalente al ejemplo anterior: switch ( carModel ) { case DELUXE: addAire(); case STANDARD: addRadio(); default: addLlantas(); addMotor(); }
  • 107. Declaración de switch • Sin la declaración break, la ejecución continua a través de cada subsiguiente cláusula case
  • 108. Declaración de ciclos • Ciclo for: for ( <init_expr>; <test_expr>; <alter_expr> ) <declaración_o_bloque> • Ejemplo: for ( int i = 0; i < 10; i++ ) System.out.println(i + " el cuadrado es " + (i*i)); • o (recomendado): for ( int i = 0; i < 10; i++ ) { System.out.println(i + " el cuadrado es " + (i*i)); }
  • 109. Declaración de ciclos • Ciclo while: while ( <test_expr> ) <declaración_o_bloque> • Ejemplo: int i = 0; while ( i < 10 ) { System.out.println(i + " el cuadrado es " + (i*i)); i++; }
  • 110. Declaración de ciclos • Ciclo do/while: do <declaración_o_bloque> while ( <test_expr> ); • Ejemplo: int i = 0; do { System.out.println(i + " el cuadrado es " + (i*i)); i++; } while ( i < 10 );
  • 111. Controles de flujo especiales • El comando break [<label>]; • El comando continue [<label>]; • El comando <label>:<declaración>, donde <declaración> debe ser un ciclo
  • 112. Declaración break do { declaración; if ( condición ) { break; } declaración; } while ( <test_expr> );
  • 113. Declaración continue do { declaración; if ( condición ) { continue; } declaración; } while ( <test_expr> );
  • 114. Usando la declaración break con Labels outer: do { declaración1; do { declaración2; if ( condición ) { break outer; } declaración3; } while ( test_expr ); declaración4; } while ( test_expr );
  • 115. Usando la declaración continue con Labels outer: do { declaración1; do { declaración2; if ( condición ) { continue outer; } declaración3; } while ( test_expr ); declaración4; } while ( test_expr );
  • 117. Declaración de Arreglos • Grupo de datos de un mismo tipo. Colección Homogénea • Declaración de arreglos de tipo primitivo y de clase: – char s [ ]; – MiPunto p [ ]; • Crea espacio para una referencia • Un arreglo es un objeto, este se debe crear con new
  • 118. Creación de Arreglos • Se usa la palabra new para crear un Objeto arreglo • Ejemplo de arreglo de tipo primitivo (char): public char[] crearArreglo() { char[] s; s = new char[26]; for ( int i=0; i<26; i++ ) { s[i] = (char) (’A’ + i); } return s; }
  • 119. Creación de Arreglo de char Heap Stack de Memory Ejecución char [ ] A B C D s … crearArreglo this main
  • 120. Creación de Arreglos de Referencia • Ejemplo de arreglo de tipo de referencia de objeto: public MiPunto[] crearArreglo() { MiPunto[] p; p = new MiPunto[10]; for ( int i=0; i<10; i++ ) { p[i] = new MiPunto(i, i+1); } return p; }
  • 121. Creación de Arreglo de Referencia MiPunto Heap Stack de Memory Ejecución MiPunto [ ] MiPunto x 0 y 1 MiPunto x 1 crearArreglo p y 2 … this main
  • 122. Inicialización de Arreglos • Inicializar un elemento del arreglo • Crear un arreglo con valores iniciales String[] nombres; nombres = new String[3]; nombres[0] = "Georgianna"; nombres[1] = "Jen"; nombres[2] = "Simon"; String[] nombres = { "Georgianna", "Jen", "Simon“ };
  • 123. Inicialización de Arreglos MiFecha[] fechas; fechas = new MiFecha[3]; fechas[0] = new MiFecha(22, 7, 1964); fechas[1] = new MiFecha(1, 1, 2000); fechas[2] = new MiFecha(22, 12, 1964); MiFecha[] fechas = { new MiFecha(22, 7, 1964), new MiFecha(1, 1, 2000), new MiFecha(22, 12, 1964) };
  • 124. Arreglos Multidimencionales • Arreglos de arreglos int[][] dosDim = new int[4][]; dosDim[0] = new int[5]; dosDim[1] = new int[5]; int[][] dosDim = new int[][4]; // ilegal
  • 125. Arreglos Multidimencionales • Arreglos de arreglos no rectangulares int[][] dosDim = new int[4][]; dosDim[0] = new int[2]; dosDim[1] = new int[4]; dosDim[2] = new int[6]; dosDim[3] = new int[8]; • Arreglo de 4 arreglos de 5 enteros int[][] dosDim = new int[4][5];
  • 126. Limites de los Arreglos • Todos los arreglos inician en la posición cero (0) public void imprimirElementos(int[] lista) { for (int i = 0; i < lista.length; i++) { System.out.println(lista[i]); } }
  • 127. Ciclo for mejorado public void imprimirElementos(int[] lista) { for (int elemento : lista) { System.out.println(elemento); } } • Se puede leer para cada elemento en la lista haga
  • 128. Redimensión de Arreglos • Un arreglo no se puede redimensionar • Se puede usar la misma variable de referencia para apuntar a un nuevo arreglo: int[] miArreglo = new int[6]; miArreglo = new int[10];
  • 129. Copiando Arreglos • El método System.arraycopy() permite copiar el contenido 1 //arreglo original 2 int[] miArreglo = { 1, 2, 3, 4, 5, 6 }; 3 4 //nuevo arreglo mas grande 5 int[] hold = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; 6 7 // copia todo el arreglo miArreglo en el arreglo hold, 8 // iniciando desde la posición 0 9 System.arraycopy(miArreglo, 0, hold, 0, miArreglo.length);
  • 131. Subclases • La clase Empleado: public class Empleado { public String nombre = ""; public double salario; public Date fechaNacimiento; public String getDetalles() {...} }
  • 132. Subclases • La clase Administrador: public class Administrador { public String nombre = ""; public double salario; public Date fechaNacimiento; public String departamento; public String getDetalles() {...} }
  • 133. Diagrama de clase del uso de Herencia public class Empleado { public String nombre = ""; public double salario; public Date fechaNacimiento; public String getDetalles() {...} } public class Administrador extends Empleado { public String departamento; }
  • 134. Herencia Simple • Cuando una clase hereda solo de una clase padre, se llama Herencia Simple • Interfaces proveen los beneficios de herencia simple sin inconvenientes • Sintaxis de una clase de Java: <modificador> class <nombre> [extends <superclase>] { <declaración>* }
  • 136. Control de Acceso Modificador Misma Mismo Subclase Universo Clase Paquete private Si default Si Si protected Si Si Si public Si Si Si Si
  • 137. Sobrescritura de Métodos • Una clase puede modificar el comportamiento heredado de una clase Padre • Una subclase puede crear un método con diferente funcionalidad que el método de su Padre pero con mismo: – Nombre – Tipo de retorno * – Lista de argumentos * El tipo de retorno puede ser una subclase del tipo retornado J2SE 5.0
  • 138. Sobrescritura de Métodos public class Empleado { public class Administrador extends protected String nombre; Empleado { protected double salario; protected String departamento; protected Date fechaNacimiento; public String getDetalles () { return “Nombre: “ + nombre + public String getDetalles() { “n” + “Salario: “ + salario + return “Nombre: “ + nombre + “Admin de: “ + departamento; } “n” + “Salario: “ + salario; } } }
  • 139. Métodos Sobrescritos no pueden ser menos accesibles public class Padre { public class UseAmbos { public void hacerAlgo () {} public void hacerOtraCosa() { } Padre p1 = new Padre(); Padre p2 = new Hijo(); p1. hacerAlgo (); public class Hijo extends Padre { p2. hacerAlgo (); private void hacerAlgo () {} // ilegal } } }
  • 140. Invocación de métodos sobrescritos • Un método de una subclase puede invocar un método de la clase Padre usando la palabra reservada super – La palabra super es usada en una clase para referirse a la superclase – La palabra super es usada en una clase para referirse a los miembros de la superclase, tanto atributos como métodos – El comportamiento invocado no tiene que ser el de la superclase, este puede subir jerárquicamente
  • 141. Invocación de métodos sobrescritos public class Empleado { public class Empleado { public class Administrador extends protected String nombre; Empleado { protected double salario; protected String departamento; protected Date fechaNacimiento; public String getDetalles () { return super.getDetalles() + public String getDetalles() { “Admin de: “ + departamento; return “Nombre: “ + nombre + } } “n” + “Salario: “ + salario; } }
  • 142. Polimorfismo • La habilidad de tener varias formas. Ej; La clase Administrador tiene acceso a los métodos desde la clase Empleado • Un objeto tiene una sola forma • Una variable de referencia puede referenciar a objetos de diferentes formas
  • 143. Polimorfismo • Empleado e = new Administrador(); • e.departamento = “Ventas”; • ilegal tratar de asignar al atributo de Administrador • La variable es declarada de tipo Empleado, aun cuando el objeto Administrador tenga este atributo
  • 144. Invocación virtual de métodos • La invocación virtual de métodos es desarrollada de la siguiente forma: Empleado e = new Administrador(); e.getDetalles(); • El tipo en tiempo de compilación y en tiempo de ejecución tiene las siguientes características:
  • 145. Invocación virtual de métodos – El nombre del método debe ser un miembro del tipo de variable declarada; en este caso Empleado tiene un método llamado getDetalles() – La implementación del método usado es basado en el tipo de Objeto en tiempo de ejecución; en este caso Administrador tiene una implementación del método getDetalles()
  • 146. Colecciones Heterogéneas • Las colecciones de objetos del mismo tipo son llamadas colecciones homogéneas. Por ejemplo: MiFecha[] fechas = new MiFecha[2]; fechas[0] = new MiFecha(22, 12, 1964); fechas[1] = new MiFecha(22, 7, 1964); • Las colecciones de objetos de diferente tipo son llamadas colecciones heterogéneas. Por ejemplo: Empleado [] staff = new Empleado[1024]; staff[0] = new Administrador(); staff[1] = new Empleado(); staff[2] = new Ingeniero();
  • 147. Argumentos Polimorficos • Puesto que un Administrador es un Empleado, lo siguiente es valido: public class ImpuestoServicio { public TasaImp buscarTasaImp(Empleado e) { // calcula la tasa de impuesto del empleado } } // Mientras tanto, en otra parte de la aplicación ImpuestoServicio impSer = new ImpuestoServicio(); Administrador m = new Administrador(); TasaImp t = impSer.buscarTasaImp(m);
  • 148. El operador instanceof public class Empleado extends Object public class Administrador extends Empleado public class Ingeniero extends Empleado ---------------------------------------- public void hacerAlgo(Empleado e) { if ( e instanceof Administrador ) { // Procesa un Administrador } else if ( e instanceof Ingeniero ) { // Procesa un Ingeniero } else { // Procesa cualquier otro tipo de Empleado } }
  • 149. Casting de Objetos public void hacerAlgo(Empleado e) { if ( e instanceof Administrador ) { Administrador m = (Administrador) e; System.out.println(“Este es el Administrador de ” + m.getDepartamento()); } // Resto del código }
  • 150. Casting de Objetos • Use el operador instanceof para probar el tipo de un Objeto. • Devuelve la funcionalidad de un objeto usando casting. • Compruebe un correcto casting usando los siguientes lineamientos: • Casting hacia arriba en la jerarquía es realizado implícitamente.
  • 151. Casting de Objetos • Casting hacia abajo debe ser a una subclase y es chequeado por el compilador. • El tipo del objeto es chequeado en tiempo de ejecución cuando un error de ejecución ocurre.
  • 152. Sobrecarga de Métodos • Uso de la sobrecarga: public void println(int i) public void println(float f) public void println(String s) • Lista de argumentos debe ser diferente. • Tipo de retorno puede ser diferente.
  • 153. Métodos usando variable de argumentos • Los métodos usando variables de argumentos permite múltiples números de argumentos en el método. Por ejemplo: public class Estadisticas { public float promedio(int... nums) { int sum = 0; for ( int x : nums ) { sum += x; } return ((float) sum) / nums.length; } }
  • 154. Métodos usando variable de argumentos • El parámetro varargs es tratado como un arreglo. Por ejemplo: float gradoPromedio = stats.promedio(4, 3, 4); float edadPromedio = stats.promedio(24, 32, 27, 18);
  • 155. Sobrecarga de constructores • public class EjemploAlcance { • Como con los métodos, los constructores pueden ser sobrecargados. Por ejemplo: public Empleado(String nombre, double salario, Date fn) public Empleado(String nombre, double salario) public Empleado(String nombre, Date fn) • La lista de argumentos debe ser diferente. • Ud puede usar la referencia this como primera linea del constructor para llamar a otro constructor.
  • 156. Sobrecarga de constructores public class Empleado { private static final double BASE_SALARIO = 15000.00; private String nombre; private double salario; private Date fechaNacimiento; public Empleado(String nombre, double salario, Date fn) { this. nombre = nombre; this. salario = salario; this.fechaNacimiento = fn; }
  • 157. Sobrecarga de constructores public Empleado(String nombre, double salario) { this(nombre, salario, null); } public Empleado(String nombre, Date fn) { this(nombre, BASE_SALARIO, fn); } // mas código de Empleado... }
  • 158. Constructores no se heredan • Una subclase hereda todos los métodos y variables de la superclase (clase Padre). • Una subclase no hereda el constructor de la superclase. • Dos formas para incluir un constructor son: • Usar el constructor por default. • Escribir uno o mas constructores explícitamente.
  • 159. Invocando el constructor de la superclase • Para invocar el constructor del Padre, debe colocar el llamado a super en la primera línea de el constructor. • Ud puede llamar a un constructor especifico del Padre por los argumentos que se usen al llamar a super.
  • 160. Invocando el constructor de la superclase • Si los llamados this o super no son usados en el constructor, entonces el compilador agrega un llamado implícito a super() que llama al constructor del Padre sin argumentos (el cual podría ser el constructor por default). • Si la clase Padre define constructores, pero no provee uno sin argumentos, entonces el compilador genera un mensaje de error.
  • 161. Invocando el constructor de la superclase public class Administrador extends Empleado { private String departamento; public Administrador(String nombre, double salario, String dept) { super(nombre, salario); this. departamento = dept; }
  • 162. Construyendo e Inicializando Objetos • La memoria es asignada y la inicialización por defecto ocurre. • La inicialización de variables de instancia usa estos pasos recursivamente: 1. Vincula los parámetros del constructor. 2. Si existe llamado explicito a this(), este llama recursivamente, y salta al paso 5.
  • 163. Construyendo e Inicializando Objetos 3. Llamado recursivo de al super explicita o implícitamente, excepto para Object. 4. Ejecuta la inicialización explicita de variables de instancia. 5. Ejecuta el cuerpo de el actual constructor.
  • 164. Ejemplo Construcción e Inicialización public class Object { public Object() {} }
  • 165. Ejemplo Construcción e Inicialización public class Empleado extends Object { private String nombre; private double salario = 15000.00; private Date fechaNacimiento; public Empleado(String n, Date fn) { // llamado a super() implícito; nombre = n; fechaNacimiento = fn; } public Empleado(String n) { this(n, null); } }
  • 166. Ejemplo Construcción e Inicialización public class Administrador extends Empleado { private String departamento; public Administrador(String n, String d) { super(n); departamento = d; } }
  • 167. Ejemplo Construcción e Inicialización 0 Inicialización básica 0.1 Asigna memoria para el objeto completo Administrador 0.2 Inicializa todas las variables de instancia con su valor por defecto (0 or null) 1 Llama al constructor Administrador("Joe Smith", “Ventas") 1.1 Vincula los parámetros del constructor: n="Joe Smith", d="Ventas" 1.2 No existe llamado explicito a this() 1.3 Llamado al super(n) para Empleado(String) 1.3.1 Vincula los parámetros del constructor: n="Joe Smith" 1.3.2 Llama this(n, null) para Empleado(String, Date)
  • 168. Ejemplo Construcción e Inicialización 1.3.2.1 Vincula los parámetros del constructor: n="Joe Smith", fn=null 1.3.2.2 No existe llamado explicito a this 1.3.2.3 Llamado al super() para Object() 1.3.2.3.1 Vinculación no es necesaria 1.3.2.3.2 No existe llamado explicito a this 1.3.2.3.3 No existe llamado a super (Object es la raiz) 1.3.2.3.4 No existe inicialización explicita de variables para Object 1.3.2.3.5 No existe cuerpo en el constructor llamado 1.3.2.4 inicialización explicita de variables de Empleado: salario=15000.00;
  • 169. Ejemplo Construcción e Inicialización 1.3.2.5 Ejecuta el cuerpo: nombre="Joe Smith"; fechaNacimiento=null; 1.3.3 - 1.3.4 Pasos saltados 1.3.5 Ejecuta el cuerpo: No existe cuerpo en Empleado(String) 1.4 No existe inicialización explicita de variables para Administrador 1.5 Ejecuta el cuerpo: departamento=“Ventas"
  • 170. La clase Object • La clase Object es la raíz de todas las clases en Java • Una declaración que no tenga la cláusula extends, implica que hereda de Object. public class Empleado • Es equivalente a: public class Empleado extends Object • Dos métodos importantes son: • equals() • toString()
  • 171. El método equals • El operador == determina if dos referencias son iguales (esto es, referenciar al mismo objeto). • El método equals determina si los objetos son iguales pero no necesariamente idénticos. • La implementación de Object de el método equals usa el operador ==.
  • 172. El método equals • Usuarios de clases pueden sobrescribir el método equals para implementar una prueba especifica para igualdad. • Nota: Ud debería sobrescribir el método hashCodemethod si sobrescribe el método equals.
  • 173. Un ejemplo de equals public class MiFecha { private int dia; private int mes; private int anio; public MiFecha(int dia, int mes, int anio) { this.dia = dia; this.mes = mes; this.anio = anio; }
  • 174. Un ejemplo de equals public boolean equals(Object o) { boolean resultado = false; if ( (o != null) && (o instanceof MiFecha) ) { MiFecha d = (MiFecha) o; if ( (dia == d.dia) && (mes == d.mes) && (anio == d.anio) ) { resultado = true; } } return resultado; }
  • 175. Un ejemplo de equals public int hashCode() { return (dia ^ mes ^ anio); } }
  • 176. Un ejemplo de equals class TestEquals { public static void main(String[] args) { MiFecha fecha1 = new MiFecha(14, 3, 1976); MiFecha fecha2 = new MiFecha(14, 3, 1976); if ( fecha1 == fecha2 ) { System.out.println("fecha1 idéntica a fecha2"); } else { System.out.println("fecha1 no es idéntica a fecha2"); }
  • 177. Un ejemplo de equals if ( fecha1.equals(fecha2) ) { System.out.println("fecha1 es igual a fecha2"); } else { System.out.println("fecha1 no es igual a fecha2"); } System.out.println(“fijar fecha2 = fecha1;"); fecha2 = fecha1;
  • 178. Un ejemplo de equals if ( fecha1 == fecha2 ) { System.out.println("fecha1 es idéntica a fecha2"); } else { System.out.println("fecha1 no es idéntica a fecha2"); } } }
  • 179. Un ejemplo de equals • Este ejemplo genera la siguiente salida: fecha1 no es idéntica a fecha2 fecha1 es igual a fecha2 fijar fecha2 = fecha1; fecha1 es idéntica a fecha2
  • 180. El método toString • El método toString() tiene las siguientes características: – Este método convierte un objeto en un String – Este método se usa durante la concatenación de String – Sobrescribir este método para proveer información sobre un objeto definido por el usuario en formato legible. – Usado por las clases wrappers (toString static método) para convertir tipos primitivos a String.
  • 181. Clases Wrapper • Mirando elementos de tipo primitivo como un objeto Tipo de dato primitivo Clase wrapper boolean Boolean byte Byte char Character short Short int Integer long Long float Float double Double
  • 182. Clases Wrapper • Un ejemplo para la clase wrapper es: int pInt = 420; Integer wInt = new Integer(pInt); // Esto es llamado boxing int p2 = wInt.intValue(); // Esto es llamado unboxing • Otros métodos son: int x = Integer.valueOf(str).intValue(); int x = Integer.parseInt(str);
  • 183. Autoboxing de tipos primitivos • Autoboxing tiene la siguiente descripción: • Conversión de tipos primitivos a los objetos equivalentes • Las clases wrapes no son siempre necesarias • Ejemplo: int pInt = 420; Integer wInt = new Integer(pInt); // Esto es autoboxing int p2 = wInt.intValue(); // Esto es autoboxing
  • 184. Autoboxing de tipos primitivos • Wrapped primitivos también son usables en expresiones aritméticas.