SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
      
Java  World     Capítulo  1     2  
       




       

                                                                                                                                                                        h
                                                                                                                                                                        t
                                                                                                                                                                        t
                                                                                                                                                                        p
                                                                                                                                                                        :
                                                                                                                                                                        /
                                                                                                                                                                        /
                                                                                                                                                                        g
                                                                                                                                                                        u
                                                                                                                                                                        s
                                                                                                                                                                        t
                                                                                                                                                                        a
                                                                                                                                                                        v
                                                                                                                                                                        o
                                                                                                                                                                        a
                                                                                                                                                                        l
                                                                                                                                                                        b
                                                                                                                                                                        e
                                                                                                                                                                        r
                                                                                                                                                                        o
                                                                                                                                                                        l
                                                                                                                                                                        a
                                                                                                                                                                        .
                                                                                                                                                                        b
          Agradecimientos                                                                                                                                               l
                                                                                                                                                                        o
          Quisiera  darle  las  gracias  a  Matias  Emiliano  Alvarez  Durán   (quien  ahora  será  coautor  de  JavaWorld)  por  su  aporte,  y  por  darme            g
          ese  empujón  que  tanta  falta  me  hacía.                                                                                                                   s
          Sin  tu  ayuda    JavaWorld  no  hubiera  visto  nunca  la  luz.    
                                                                                                                                                                        p
                                                                                                                                                     Gracias  
                                                                                                                                                                        o
            
                                                                                                                                                                        t
                                                                                                                                                                        .
                                                                                                                                                                        c
                                                                                                                                                                        o
                                                                                                                                                                        m  




       
3          Java  World     Capítulo  1  

              




h           Paradigmas  de  programación  
t
t           Para  aquellos  que  son  iniciados  en  el  tema  de  la  programación,  es  bueno  tener  en  cuenta  un  poco  la  evolución  en  temas  de  cómo  se  
p           programa.  
:           Desde  siempre  la  programación  fue  una  serie  de  algoritmos  que  resuelven  un  problema,  lo  que  cambió,  fue  la  manera  de  agrupar  y  
            asociar  estos  algoritmos.  
/
/           Paradigma  estructural  
v
a           Este   paradigma   busca   como   objetivo   dividir   un   problema   complejo   (sistema),   en   varios   problemas   menos   complejos   (funciones).  
l           Este  es  un  paradigma  que  ha  ido  quedando  en  desuso  con  el  correr  de  los  tiempos,  aunque  aquellos  que  estén  dando  sus  primeros  
            pasos  en  alguna  institución,  puede  que  lo  vean  en  lenguajes  como  Pascal  o  C++.  
o
r           Paradigma  orientado  a  objetos  
c
r           En  este  paradigma,  cada  elemento  del  sistema  se  divide  en  objetos.  Estos  son  representaciones  de  entidades  que  encontramos  en  la  
e           vida  real.  Por  ejemplo,  si  estuviéramos  diseñando  un  sistema  para  un  aeropuerto,  sería  más  que  factible  encontrarse  con  las  clases  
            Aeroplano,  Pasajero,  Capitan.  
a
            ¿Pero,  y  la  diferencia?  
t           En  este  paradigma,  cada  entidad  es  responsable  de  realizar  las  acciones  que  le  conciernen,  y  solo  las  que  le  conciernen.  
i           Supongamos  que  estamos  diseñando  un  juego,  y  tenemos  un  avión,  según  los  paradigmas  hubiéramos  hecho  lo  siguiente:  
v             
o           Estrucura  procedural  en  lenguaje  C  
.              typedef  
b              struct  Avion  {  
                   int  cantidadPasajerosSoportada;  
l                  float  peso;  
o                  //...  otras  propiedades  de  un  avion  
g              }  Avion_1;  
                 
s              public  void  volar(avion  av)  {  
p                  //...  codigo  
o              }  
                 
t
               public  void  aterrizar(avion  av)  {  
.                  //...codigo  
c              }      
                 
o
               public  main()  {  
m                  volar(Avion_1)  
                   aterrizar(Avion_1)  
               }  
                                                                                                                                                                            
                 
                                                           




              
Java  World     Capítulo  1        4  
  




Estructura  orientada  a  objetos  en  Java  
   class  Avion  {                                                                                                                                                        h
       int  cantidadPasajerosSoportada;  
       float  peso;                                                                                                                                                       t
       //...  otras  propiedades  de  un  avión                                                                                                                           t
                                                                                                                                                                          p
       public  void  volar()  {  
           //...  Codigo                                                                                                                                                  :
       }                                                                                                                                                                  /
                                                                                                                                                                          /
       public  void  aterrizar()  {  
           //...  Codigo                                                                                                                                                  g
       }                                                                                                                                                                  u
   }                                                                                                                                                                      s
     
   static  public  void  main(String[]  args)  {  
                                                                                                                                                                          t
       Avion  avion_01  =  new  Avion();                                                                                                                                  a
       avion_01.volar();                                                                                                                                                  v
       avion_01.aterrizar();  
   }  
                                                                                                                                                                          o
                                                                                                                                                                          a
     
La  diferencia  más  grande  la  podemos  apreciar  al  momento  de  llamar  a  las  acciones  de  volar  y  aterrizar.  En  el  modelo  estructural   se  
llama  a  una  función  a  la  cal  se  le  pasa  un  avión  como  argumento,  pero  en  el  modelo  orientado  a  objetos,  se  le  dice  al  propio  avión  
                                                                                                                                                                          l
que  vuele  o  aterrice.                                                                                                                                                  b
                                                                                                                                                                          e
                                                                                                                                                                          r
                                                                                                                                                                          o
                                                                                                                                                                          l
                                                                                                                                                                          a
                                                                                                                                                                          .
                                                                                                                                                                          b
                                                                                                                                                                          l
                                                                                                                                                                          o
                                                                                                                                                                          g
                                                                                                                                                                          s
                                                                                                                                                                          p
                                                                                                                                                                          o
                                                                                                                                                                          t
                                                                                                                                                                          .
                                                                                                                                                                          c
                                                                                                                                                                          o
                                                                                                                                                                          m  




  
5          Java  World     Capítulo  1  

              




            Definición  de  una  clase  
h
t             public  class  Persona  {  
t                 //Atributos  
                  String  nombre;  
p                 String  apellido;  
:                 int  edad;  
/                 float  peso;  
                    
/
                  //Constructores  
v                 public  Persona(String  nombre,  String  apellido)  {  
a                     //Código  ...  
                  }  
l
                    
o                 //Métodos  
r                 public  void  correr(){  
                      //Código...  
c
                  }  
r                   
e                 public  void  caminar(){  
                      //Código...  
a
                  }  
t                   
i                 public  void  hablar(){  
v                     //Código...  
                  }  
o             }  
.                                                                                                                                                                                         
            Básicamente,  una  clase  contiene  estos  elementos:  
b
l                        Atributos               Definen  el  estado  de  un  objeto  
o                        Métodos                 Definen  el  comportamiento  (pueden  ser  de  clase  o  de  objeto)  
g                        Constructores           Permiten  crear  objetos  
s                   Existen  otros  elementos  que  pertenecen  a  la  clase,  y  no  al  objeto.  Estos  contienen  el  identificador  static.  
p                   Pero  no  te  preocupes,  ya  los  veremos.  
o
t           Diferencia  entre  clase  y  objeto  
.
            Una   clase  representa  una   especie  de   molde  para   cada   objeto.  Cuando  nosotros  creamos  un  objeto,  lo   hacemos  utilizando  alguna  
c           clase   en   particular,   esto   quiere   decir   que   el   objeto   creado,   puede   realizar   el   comportamiento   de   la   clase,   y   contiene   todos   sus  
o           atributos.  
m           Vamos  a  verlo  con  un  ejemplo  más  gráfico.  Utilicemos  la  clase  Persona  que  definimos  anteriormente.  
            Basandonos  en  ella,  podemos  apreciar  que  cada  Persona  (clase),  tendrá  ciertas  características  (atributos).  Por  ejemplo,  supongamos  
            una  persona  llamada  Gabriel  y  otra  Laura.  
              




              
Java  World     Capítulo  1          6  
  




                       Clase                                                          Objetos                                                                               h
                                                                                                                                                                            t
                                                                                                            Gabriel  
                                                                                                                                                                            t
                                                                                                  Gabriel                                                                   p
                                                                                                                                                                            :
                                           Persona                                                Rarara  
                                                                                                                                                                            /
                                                                                                  15                                                                        /
                                  Nombre  
                                                                                                                                                                            g
                                  Apellido                                                        56.3                                                                      u
                                                                                                                                                                            s
                                  Edad  
                                                                                                            Laura                                                           t
                                  Peso                                                                                                                                      a
                                                                                                  Laura                                                                     v
                                                                                                                                                                            o
                                                                                                  Momomo  
                                                                                                                                                                            a
                                                                                                  38                                                                        l
                                                                                                                                                                            b
                                                                                                  65.2  
                                                                                                                                                                            e
                                                                                                                                                                            r
                                                                                                                                                                            o
                                                                                                                                                                   
Al   definir   un   objeto   de   tipo   Persona   estamos   diciendole   a   la   JVM   que   cree   una   estructura   con   tales   propiedades   y   tal                l
comportamiento.  En  el  ejemplo  anterior,  Laura  y  Gabriel  también  tienen  la  capacidad  de  correr(),  caminar(),  y  hablar().                                     a
                                                                                                                                                                            .
                                                                                                                                                                            b
                    Para   todos   aquellos   que   crean   necesario   y/o   quieran   profundizar   en   la   programación   orientada   a   objetos   les  
                                                                                                                                                                            l
                    quisiera  recomendar  la  siguiente  bibliografía:  
                              Head  First  Java   Es   muy   amigable,   y   contiene   una   manera   de   explicar   todo   con   texto   e   imágenes  
                                                                                                                                                                            o
                              (permite  mayor  absorción  de  los  conocimientos).  La  desventaja  es  que  solo  se  encuentra  en  inglés.                               g
                              Thinking  in  Java    Es  muy  extenso  y  detallado,  y  hay  una  versión  en  castellano.  La  desventaja  es  que  en                     s
                              algunos  momentos,  puede  llegar  a  ser  un  tanto  abrumador.                                                                              p
                                                         programacion  +  objetos  +  java                                                                                  o
                              encontrarán  mucha  información  al  respecto.                                                                                                t
                                                                                                                                                                   
                      
                                                                                                                                                                            .
                                                                                                                                                                            c
                                                                                                                                                                            o
                                                                                                                                                                            m  




  
7          Java  World     Capítulo  1  

              




            Más  conceptos  de  la  POO  
h
t           Al  adentrarnos  en  este  nuevo  paradigma,  no  solamente  cambia  la  manera  de  codificar,  sino  que  se  introducen  varios  conceptos  que  
            forman  las  bases  de  este,  tales  como  encapsulamiento,  polimorfismo  y  herencia.  
t
p           Encapsulamiento  
:
/           Algunos  de  los  beneficios  aportados   por  el  paradigma   de   orientación  a   objetos  (OO)  son:  flexibilidad  y  mantenimiento.  Pero  para  
/           lograr  esto,  es  necesario  escribir  las  clases  de  una  manera  en  particular.  
            La  clave  para  lograr  esto  es  encapsular  la  lógica  y  el  estado  de  la  clase  para  que  no  pueda  ser  accedido  de  forma  directa,  y  dejar  de  
v
            manera  publica  un  set  de  métodos  para  poder  interactuar  con  la  clase.  
a           Las  claves  son:  
l
o                        Siempre  mantener  las  variables  de  instancia  protegidas  (con  un  modificador  de  acceso,  generalmente  public)  
r                        Crea  métodos  públicos  (public)  para  acceder  a  las  variables  de  instancia  
                         Para  los  anteriores,  utiliza  la  convención  de  nombres  de  JavaBeans  
c
r           Herencia  
e
a           Cuando   utilizamos   la   herencia,   a   veces   es   necesario   saber   si   un   objeto   pertenece   a   una   clase   en   concreto.   Para   realizar   esto  
t           utilizamos   el   operador   instanceof,   este   devuelve   un   boolean,   siendo   true   en   caso   de   que   pertenezca   a   dicha   clase,   falso   en   caso  
            contrario.  
i
                      objeto  instanceof  clase  
v
            Es  posible  crear  relaciones  de  herencia  en  Java  extendiendo  una  clase.  Las  dos  características  más  comunes  para  utilizar  la  herencia  
o           son:  
.
b                        Para  promover  la  reutilización  del  código  
                         Para  el  uso  del  polimorfismo  
l
o           El  polimorfismo  nos  permite  tratar  una  subclase  como  si  fuera  una  clase  del  tipo  de  su  superclase.  La  contrapartida  de  esto  es  que  
g           solo  se  podrán  llamar  a  los  atributos  que  se  encuentren  disponibles  para  el  tipo  de  clase  declarada.  
s
p           Is-­‐A  
o           Para  el  examen  es  necesario  saber:  
t
.                        Is-­‐A  indica  que  la  clase  X  es  del  tipo  Y.  Esto  se  logra  a  través  de  extends  o  implements.  
                         Al  termino  Is-­‐A  también  se  lo  puede  llamar:  derived,  subclass,  inherits,  o  subtype.  
c
                                                                                                       
o
m           Has-­‐A  

            Indica  que  una  clase  A  tiene  una  variable  de  instancia  que  contiene  una  referencia  a  B.  

            Polimorfismo  

            Un  objeto  es  polimórfico  cuando  cumple  con  al  menos  una  condicios  Is-­‐A.  Esto  es  cierto  para  todas  las  clases  que  no  sean  de  tipo  
            Object,  ya  que  todas  heredan  de  esta.  
            La  única  manera  de  acceder  a  un  objeto  es  a  través  de  una  variable  de  referencia.  Algunas  pautas  para  recordar  de  estas:  

                         Una  variable  de  referencia  puede  ser  de  un  solo  tipo,  y  una  vez  que  fue  declarada,  ese  tipo  jamás  puede  modificarse.  
                         Una  referencia  es  una  variable,  de  manera  que  puede  ser  reasignada  a  otros  objetos  (a  menos  que  se  declare  como  final).  


              
Java  World     Capítulo  1              8  
  




          Un   tipo   de   variable   de   referencia   determina   los   métodos   que   pueden   ser   invocados   sobre   el   objeto   que   la   variable  
          referencia.  
                                                                                                                                                                                      h
          Una  variable  de  referencia  puede  tomar  como  referencia  cualquier  objeto  del  mismo  tipo,  o  un  subtipo  del  mismo.  
          Una   variable   de   referencia   puede   tener   como   tipo   el   de   una   interface.   Si   es   declarada   de   esta   manera,   podrá   contener                  t
          cualquier  clase  que  implemente  la  interfaz.                                                                                                                            t
                                                                                                                                                                                      p
El  concepto  es  que  solo  los  métodos  de  instancia  son  invocados  dinámicamente.  Esto  es  logrado  por  la  JVM,  la  cual  siempre  tiene  
                                                                                                                                                                                      :
conocimiento  de  que  tipo  de  objeto  es  el  que  se  está  tratando,  así  como  su  árbol  de  herencia.  
                                                                                                                                                                                      /
Sobre  escritura                                                                                                                                                                      /
                                                                                                                                                                                      g
Cada  vez  que  una  clase  hereda  un  método  de  su  superclase,  existe  la  posibilidad  de  sobrescribir  el  método  (a  menos  que  este  haya                                u
sido  declarado  con  el  modificador  de  no  acceso  final).  El  beneficio  de  la  sobre  escritura  es  la  habilidad  de  definir  comportamiento  
                                                                                                                                                                                      s
particular  para  una  clase  específica.  
Características  necesarias  para  hacer  uso  de  la  sobre  escritura:  
                                                                                                                                                                                      t
                                                                                                                                                                                      a
          La  lista  de  argumentos  debe  ser  exactamente  igual  que  el  método  a  sobrecargar.                                                                                  v
          El  valor  de  retorno  debe  ser  del  mismo  tipo,  o  un  subtipo.                                                                                                       o
          El  modificador  de  acceso  no  puede  ser  más  restrictivo  que  el  del  método  a  sobre  escribir.  
                                                                                                                                                                                      a
          El  modificador  de  acceso  puede  ser  menos  restrictivo  que  el  método  a  sobre  escribir.  
                                                                                                                                                                                      l
          Los  métodos  de  instancia  solo  pueden  ser  sobre  escritos  si  es  que  son  heredados  por  la  subclase.  
                                                                                                                                                                                      b
          El   método   sobre   escrito   puede   lanzar   cualquier   excepción   sin   verificación   en   tiempo   de   ejecución,   sin   importar   de   las  
          excepciones  que  hayan  sido  declaradas  en  el  método  de  la  superclase.                                                                                              e
          El   método   no   deberá   lanzar   excepciones   verificadas   que   son   nuevas   o   amplían   a   las   ya   definidas   por   el   método   a   sobre                r
          escribir.                                                                                                                                                                   o
          El  método  sobre  escrito  puede  lanzar  una  cantidad  menor  de  excepciones  que  las  definidas  en  el  método  a  sobre  escribir.                                  l
          No   puedes   sobre   escribir   un   método   que   haya   sido   declarado   como   final   (creo   que   es   la   20ª   vez   que   repetimos   esto,                   a
          pero,  nunca  es  suficiente).  
                                                                                                                                                                                      .
          No  es  posible  sobre  escribir  un  método  que  haya  sido  declarado  como  static.  
                                                                                                                                                                                      b
          Si  un  método  no  puede  ser  heredado,  no  puede  ser  sobre  escrito.  
                                                                                                                                                                                      l
Invocando  la  versión  de  la  superclase  de  un  método  sobre  escrito                                                                                                            o
                                                                                                                                                                                      g
También   es   posible   valerse   del   código   definido   en   la   superclase.   La   manera   de   invocarlo   es   con   la   palabra   super   (esta   hace  
                                                                                                                                                                                      s
referencia  a  la  superclase).  
                                                                                                                                                                                      p
                     En  el  caso  de  que  un  método  sobre  escrito  no  declare  alguna  excepción  del  método  a  sobre  escribir,  si  se  utiliza                             o
                     como  referencia  el  tipo  de  la  superclase,  se  espera  que  pueda  llegar  a  generarse  la  excepción.                                                    t
                                                                                                                                                                                      .
  
                                                                                                                                                                                      c
                                                                                                                                                                                      o
                                                                                                                                                                                      m  




  
9          Java  World     Capítulo  1  

              




                 public  class  Generic  {  
h                    public  void  doSomething()  throws  Exception  {  
t                        //  .  .  .  some  code  here  
                     }  
t                }  
p                  
:                public  class  Specific  extends  Generic  {  
                     public  void  doSomething()  {  
/                        //  .  .  .  some  code  here  
/                    }  
v                }  
                   
a
                 public  class  Program  {  
l                    static  public  void  main  (  String[]  args  )  {  
o                        Generic  obj1  =  new  Specific();  
                         Specific  obj2  =  new  Specific();  
r
                           
c                        obj2.doSomething();  
r                        obj1.doSomething();  //Se  genera  un  error  de  compilación,  dado  que  no  se  declaro  como  recibir  la  excepción  Exception  
                           
e
                         //El  código  podría  solucionarse  con  un  try-­‐catch  
a                        try  {  
t                            obj1.doSomething();  
i                        }  catch  (  Exception  ex  )  {  
                             //.  .  .  some  code  here  
v                        }  
o                    }  
.                }  
                                                                                                                                                                                   
b
l           Sobrecarga  
o
            La   sobrecarga   de   métodos   permite   utilizar   el   mismo   nombre   de   un   método,   el   cual   toma   una   cantidad   y/o   tipo   de   parámetros  
g           diferentes.  
s           Las  reglas  para  la  sobrecarga  son:                         
p
o                        Deben  de  modificarse  la  lista  de  parámetros.  
                         Pueden  modificar  el  tipo  de  valor  de  retorno.  
t
                         Pueden  cambiar  el  modificador  de  acceso.  
.
                         Pueden  declarar  excepciones  nuevas  o  más  abarcativas.  
c                        Pueden  ser  sobrecargados  en  la  misma  clase,  o  en  una  subclase.  
o
m           Básicamente,   un   método   sobrecargado   no   es   más   que   un   método   completamente   diferente,   pero   que   utiliza   un   nombre   que   ya  
            existe.  

            Invocación  de  métodos  sobrecargados  

            Para  invocar   un  método  sobrecargado,  es  necesario  especificar  los  parámetros  del  tipo  esperado  según  el  método  que  queramos  
            invocar.  




              
Java  World     Capítulo  1          10  
  




  public  class  Something  {  
      public  void  doSomething(int  val)  {  
                                                                                                                                                                        h
          //.  .  .  some  code  here  
      }                                                                                                                                                                 t
                                                                                                                                                                        t
      public  void  doSomething(float  val)  {  
                                                                                                                                                                        p
          //.  .  .  some  code  here  
      }                                                                                                                                                                 :
                                                                                                                                                                        /
      static  public  void  main  (String[]  args){  
                                                                                                                                                                        /
          Something  s1  =  new  Something();  
                                                                                                                                                                        g
          int  valor1  =  1;                                                                                                                                            u
          float  valor2  =  2.3;                                                                                                                                        s
            
          s1.doSomething(valor1);  //Se  invoca  al  método  doSomething(int  val)                                                                                      t
          s1.doSomething(valor2);  //Se  invoca  al  método  doSomething(float  val)                                                                                    a
          s1.doSomething(new  Object);  //Error  de  compilación.  No  existe  ningún  método  que  reciba  como  parámetro  un  tipo  Object                           v
      }  
  }                                                                                                                                                                     o
                                                                                                                                                              
    
En  el  caso  de  la  invocación  con  objetos,  se  vuelve  un  poco  más  complicado.                                                                                 a
                                                                                                                                                                        l
  public  class  Generic  {}  
  public  class  Specific  extends  Generic  {}                                                                                                                         b
                                                                                                                                                                        e
  public  class  Program  {                                                                                                                                             r
        
      public  void  doSomething(Generic  obj)  {                                                                                                                        o
          //.  .  .  some  code  here                                                                                                                                   l
      }                                                                                                                                                                 a
        
      public  void  doSomething(Specific  obj)  {                                                                                                                       .
          //.  .  .  some  code  here                                                                                                                                   b
      }                                                                                                                                                                 l
        
      static  public  void  main  (String[]  args)  {                                                                                                                   o
          Generic  obj1  =  new  Generic();                                                                                                                             g
          Specific  obj2  =  new  Specific();                                                                                                                           s
          Generic  obj3  =  new  Specific();  
                                                                                                                                                                        p
          Program  p  =  new  Program();                                                                                                                                o
                                                                                                                                                                        t
          p.doSomething(obj1);    //Se  invoca  al  método  doSomething(Generic  obj)  
          p.doSomething(obj2);    //Se  invoca  al  método  doSomething(Specific  obj)  
                                                                                                                                                                        .
          p.doSomething(obj3);    //Se  invoca  al  método  doSomething(Generic  obj)                                                                                   c
      }                                                                                                                                                                 o
  }  
                                                                                                                                                                        m  
    
En  el  último  caso,  por  más  que  obj3  sea  de  tipo  Specific,  la  referencia  contiene  un  tipo  Generic,  y  es  esta  la  que  determina  a  
que  método  se  invoca.  
                                          




  
11          Java  World     Capítulo  1  

           




         Polimorfismo  en  sobre  escritura  y  sobrecarga  
h
t        El  polimorfismo  no  determina  que  método  invocar  cuando  se  trata  de  sobrecarga,  pero  si  cuando  se  trata  de  sobre  escritura.  
         Tabla  de  diferenciación  entre  sobrecarga  y  sobre  escritura:  
t
                                    Sobrecarga  de  método                       Sobre  escritura  de  método  
p
         Parámetros                      Deben  cambiar.                                 No  deben  cambiar.  
:        Valor  de  retorno              Puede  cambiar  el  tipo.                       No  puede  cambiar,  salvo  por  alguna  covariante  (subclass).  
/        Excepciones                     Pueden  cambiar.                                Pueden   reducirse   o   eliminarse.   No   se   pueden   lanzar   nuevas  
/                                                                                        excepciones  u  otras  más  abarcativas.  
v        Modificadores            de   Pueden  cambiar                                   No  pueden  ser  más  restrictivos  (pueden  ser  menos  restrictivos).  
a        acceso  
         Invocación                      El  tipo  de  la  referencia  determina   que   El   tipo   del   objeto   determina   que   método   invocar.   Sucede   en  
l
                                         método  invocar.                                tiempo  de  ejecución.  
o          
r                                                       
c
r
e
a
t
i
v
o
.
b
l
o
g
s
p
o
t
.
c
o
m  




           
Java  World     Capítulo  1           12  
  




Casteo  de  variables  de  referencia  

En  ciertas  ocasiones,  es  necesario  utilizar  un  método  de  la  clase  específica  (subclase),  pero  la  referencia  es  de  la  superclase.  En  estos  
                                                                                                                                                                                          h
casos  se  utiliza  un  casteo  denominado   downcast.  El  problema  con  este  tipo  de  casteos,  es  que  no  generar  errores  en  tiempo  de                                        t
compilación,  pero  pueden  generarlos  en  tiempo  de  ejecución.                                                                                                                        t
  public  class  Generic  ()  {                                                                                                                                                           p
      public  void  doSomething()  {                                                                                                                                                      :
          //  .  .  .  some  code  here                                                                                                                                                   /
      }  
  }                                                                                                                                                                                       /
                                                                                                                                                                                          g
  public  class  Specific  (){                                                                                                                                                            u
      public  void  doSomethingMoreSpecific()  {  
          //  .  .  .  some  code  here                                                                                                                                                   s
      }                                                                                                                                                                                   t
  }                                                                                                                                                                                       a
    
  public  class  Program  {  
                                                                                                                                                                                          v
      static  public  void  main  (String[]  args)  {                                                                                                                                     o
          Generic  g1  =  new  Specific();                                                                                                                                                a
          Generic  g2  =  new  Generic();  
            
                                                                                                                                                                                          l
          g1.doSomething();                                                                                                                                                               b
          g1.doSomethingMoreSpecific();  //Genera  un  error  de  compilación  "cannot  find  symbol",  esto  indica  que  la  clase  Generic  no                                         e
  contiene  un  método  doSomethingMoreSpecific  
                                                                                                                                                                                          r
          Specific  s1  =  (Specific)g1;  
          s1.doSomethingMoreSpecific();  //En  este  caso,  la  instancia  es  de  tipo  Specific,  de  manera  que  conoce  el  método                                                   o
  doSomethingMoreSpecific                                                                                                                                                                 l
            
                                                                                                                                                                                          a
          g2.doSomething();  
          g2.doSomethingMoreSpecific();  //Genera  un  error  de  compilación  "cannot  find  symbol",  esto  indica  que  la  clase  Generic  no                                         .
  contiene  un  método  doSomethingMoreSpecific                                                                                                                                           b
          s1  =  (Specific)g2;  //Se  genera  un  error  en  tiempo  de  ejecución  "java.lang.ClassCastException"  
                                                                                                                                                                                          l
            
          //Para  prevenir  esto  en  tiempo  de  ejecución,  antes  de  realizar  el  downcast  verificamos  que  el  objeto  sea  del  tipo  a  castear                                 o
          if  (  g2  instanceof  Specific  )  {  //Como  el  objeto  no  es  de  tipo  Specific,  ni  un  subtipo  del  mismo,  la  sentencia  if  resulta  false,  y  no                 g
  se  entra  en  la  condición,  previniendo  el  error  en  tiempo  de  ejecución  
                                                                                                                                                                                          s
              s1  =  (Specific)g2;  
              s1.doSomethingMoreSpecific();                                                                                                                                               p
  //También  se  puede  realizar  un  casteo  directo  como  el  siguiente                                                                                                                o
  ((Specific)g2).doSomethingMoreSpecific();                                                                                                                                               t
          }  
      }                                                                                                                                                                                   .
  }                                                                                                                                                                                       c
                                                                                                                                                                                
                                                                                                                                                                                          o
Lo  único  que  el  compilador  verifica  es  que  el  tipo  de  la  variable  con  el  tipo  a  castear  se  encuentren  en  el  mismo  árbol  de  herencia.  
Lo  que  si  puede  generar  un  error  de  casteo  es  al  intentar  realizar  un  upcasting.                                                                                            m  




  
13          Java  World     Capítulo  1  

           




           public  class  Generic  {}  
h          public  class  Specific  extends  Generic{}  
t          public  class  Another  {}  
             
t          public  class  Program  {  
p              static  public  void  main  (String[]  args)  {  
:                  Specific  sp  =  new  Specific();  
                   Another  an  =  new  Another();  
/                    
/                  Generic  s1  =  (Generic)sp;  
v                  Generic  an  =  (Generic)an;  //Error  de  compilación  al  intentar  realizar  un  upcasting  "inconvertible  types"  
             
a
                   //El  upcasting  también  se  puede  escribir  de  la  siguiente  manera  
l                  Generic  s1  =  sp;  //Esta  sintaxis  automáticamente  está  realizando  un  upcasting  
o              }  
           }  
r                                                                                                                                                             
             
c        También,  puede  darse  un  caso  como  el  planteado  a  continuación:  
r          public  interface  Doable  {  
e              void  doSomething();  
           }  
a            
t          public  class  Generic  implements  Doable  {  
i              public  void  doSomething()  {  
                   //.  .  .  some  code  here  
v              }  
o          }  
.          public  class  Specific  extends  Generic  {}  
                                                                                                                                                             
             
         La  clase  Specific  puede  ser  tanto  de  tipo:  Specific,  Generic,  o  Doable,  dado  que  su  superclase  la  implementa,  y  ya  se  hizo  
b
l        cargo  de  darle  un  cuerpo  a  los  métodos  definidos  en  la  interfaz.  

o                                                    
g
s
p
o
t
.
c
o
m  




           
Java  World     Capítulo  1         14  
  




Implementar  (implements)  una  interfaz  

Cuando  se  implementa  una   interfaz,  lo  que  se  hace   es  aceptar  el  contrato  provisto  por  esta,  e  implementarlo   en  la  clase.  Para  el  
                                                                                                                                                                                   h
compilador,   lo   único   que   requiere   es   que   se   le   dé   una   implementación   legal   al   método,   pudiendo   ser   esta   un   cuerpo   vacío   por              t
ejemplo  ({}).                                                                                                                                                                     t
Para   que   la   implementación   de   una   interfaz   sea   legal,   la   primer   clase   no   abstracta   del   árbol   de   herencia   debe   cumplir   con   las            p
siguientes  reglas:                                                                                                                                                                :
           Especificar  una  implementación  concreta  para  todos  los  métodos  definidos  en  el  contrato  de  la  interfaz.  
                                                                                                                                                                                   /
           Seguir  todas  las  reglas  para  la  sobre  escritura  de  métodos.                                                                                                    /
           Declarar  sin  excepciones  controles  sobre  los  métodos  de  ejecución  distintos  de  los  declarados  por  el  método  de  interfaz,  o                            g
           subclases  de  los  declarados  por  el  método  de  interfaz.                                                                                                          u
           Mantener  la  misma  firma  del  método,  y  devolver  un  valor  del  mismo  tipo  (o  subtipo).                                                                       s
                                                                                                                                                                                   t
                                                                                                                                                                                   a
Tipos  de  valor  de  retorno  válidos                                                                                                                                             v
                                                                                                                                                                                   o
Esta  sección  implica  dos  cosas:  
                                                                                                                                                                                   a
           Lo  que  se  puede  declarar  como  un  valor  de  retorno.                                                                                                             l
           Qué  tipo  de  dato  se  puede  devolver  realmente  como  valor  de  retorno.                                                                                          b
                                                                                                                                                                                   e
Declaración  de  tipos  de  valor  de  retorno  (Return  types  declaration)  
                                                                                                                                                                                   r
Esta  sección  indica  que  tipo  de  valor  de  retorno  puedes  escribir  en  la  declaración  del  método,  dependiendo  si  se  trata  de  un  método:                         o
                                                                                                                                                                                   l
           Sobrecargado  
                                                                                                                                                                                   a
           Sobre  escrito  
                                                                                                                                                                                   .
           Nuevo  
                                                                                                                                                                                   b
Tipos  de  valor  de  retorno  en  métodos  sobrecargados                                                                                                                          l
                                                                                                                                                                                   o
El  tipo  de  valor  de  retorno  puede  ser  cualquiera  (el  método  debe  calificar  para  la  declaración  de  sobrecarga).  
                                                                                                                                                                                   g
Tipos  de  valor  de  retorno  en  métodos  sobre  escritos                                                                                                                        s
                                                                                                                                                                                   p
Se   puede   especificar   el   mismo   tipo,   o   un   subtipo   (sublass),   como   tipo   de   valor   de   retorno   (el   método   debe   calificar   para   la              o
declaración  de  sobre  escritura).  
                                                                                                                                                                                   t
NOTA:  esto  es  posible  a  partir  de  Java  5,  en  versiones  anteriores,  solo  es  posible  utilizar  el  mismo  tipo.  
                                                                                                                                                                                   .
Devolviendo  un  valor                                                                                                                                                             c
                                                                                                                                                                                   o
Solo  existen  seis  reglas:                                                                                                                                                       m  
          Puedes  devolver  un  null  cuando  el  tipo  es  un  objeto.  
          Un  array  representa  un  tipo  de  dato  valido  como  retorno.  
          En  un  método  con  un  valor  de  retorno  de  tipo  primitivo,  es  posible  devolver  un  tipo  de  dato  de  otro  tipo,  que  sea  casteado  
          implícitamente  al  tipo  de  retorno.  
          Idem  anterior  con  un  tipo  que  puede  ser  casteado  explícitamente  (se  debe  realizar  el  cast  antes  de  devolver  el  valor).  
          Si  el  tipo  es  void,  el  método  no  puede  contener  ningún  return.  
          Si  el  tipo  es  un  objeto,  se  puede  devolver  cualquier  objeto  que  sea  del  mismo  tipo  o  que  pertenezca  al  árbol  de  herencia  (no  
          superclases  ni  superiores).  Cualquier  tipo  que  pase  la  condición  instanceof  del  tipo  de  valor  de  retorno  es  válido.  



  
15          Java  World     Capítulo  1  

           




         Constructores  e  instanciación  
h
t        Los  objetos  son  construidos.  No  es  posible  construir  un  nuevo  objeto,  sin  antes  invocar  el  constructor.  
         Los  constructores  representan  bloques  de  inicialización,  los  cuales  pueden  llegar  a  ser  invocados  con  el  operador  new  (no  es  el  caso  
t
         de  los  bloques  de  inicialización  estáticos).  
p
:        Conceptos  básicos  de  los  constructores  (Constructor  basics)  
/
/        Toda  clase,  incluidas  aquellas  que  sean  abstractas,  deberán  de  tener  un  constructor.  Pero  esto  no  implica  que  el  programador  tenga  
         que  especificarlo.  
v
a        Llamadas  en  cadena  a  constructores  (Constructor  chaining)  
l
o        Suponiendo  el  siguiente  árbol  de  herencia:  
r
c                                                    Clase                                Clase                                 Clase  
r                                                 Especifico                            Generico                               Objeto  
e
a                                                                                                                                                                                          
t          
i        Al  invocar  la  creación  de  un  objeto  de  tipo  Especifico,  el  proceso  de  inicialización  es  el  siguiente:  
v        1.           Se  invoca   el  constructor  se   Especifico.  Este  invoca   el  constructor  de   Generico  (esta  invocación  puede  ser  implícita   o  
o                     explícita).  
.        2.           Se  invoca  el  constructor  de  Generico.  Este  invoca  el  constructor  de  Objeto  (esta  invocación  es  siempre  implícita).  
b        3.           Las  variables  de  instancia  del  objeto  Objeto  reciben  sus  valores  explícitos.  
l        4.           Se  ejecuta  el  constructor  de  Objeto.  
         5.           Las  variables  de  instancia  del  objeto  Generico  reciben  sus  valores  explícitos.  
o
         6.           Se  ejecuta  el  constructor  de  Generico.  
g        7.           Las  variables  de  instancia  del  objeto  Especifico  reciben  sus  valores  por  defecto.  
s        8.           Se  ejecuta  el  constructor  de  Especifico.  
p
o        Reglas  de  los  constructores  (Rules  for  constructors)  
t
.
                                Las  siguientes  reglas  representan  las  bases  de  los  constructores,  y  serán  necesarias  para  rendir  el  examen.  
c
o                                                                                                                                                                                          
m                     Los  constructores  pueden  utilizar  cualquier  modificador  de  acceso.  
                      El  nombre  del  constructor  debe  ser  igual  al  de  la  clase.  
                      Los  constructores  no  deben  de  tener  un  valor  de  retorno.  
                      Es   legal   tener   un   método   que   tenga   el   mismo   nombre   que   la   clase.   Siempre   que   este   tenga   un   valor   de   retorno,   es   un  
                      método.  
                      Si   no   se   especifica   explícitamente   un   constructor   en   la   clase,   implícitamente   se   genera   un   constructor   que   no   recibe  
                      parámetros.  
                      Si   se   especifica   al   menos   un   constructor,   el   constructor   implícito   no   será   generado,   de   manera   que   si   es   necesario   un  
                      constructor  con  argumentos,  y  el  por  defecto,  es  necesario  especificarlo  explícitamente.  
                      Todos  los  constructores  tienen  en  la  primer  línea,  una  llamada  a  un  constructor  sobrecargado  (this()),  o  una  llamada  a  un  
                      constructor  de  la  superclase  (super()).  


           
Java  World     Capítulo  1              16  
  




          La  llamada  a  un  constructor  de  la  superclase  puede  ser  con  o  sin  argumentos.  
          Un    constructor  sin  argumentos  no  es  necesariamente  un  constructor  por  defecto  (este  es  el  que  especifica  el  compilador,  
                                                                                                                                                                                      h
          en  caso  de  no  declarar  explícitamente  ningún  constructor).  
          No   es   posible   acceder   a   una   variable   de   instancia,   o   método   de   instancia,   hasta   que   se   ejecute   el   constructor   de   la                 t
          superclase.                                                                                                                                                                 t
          Solo  variables  y/o  métodos  estáticos  pueden  ser  llamados  al  invocar  un  constructor  mediante  this()  o  super().                                                p
          Las  clases  abstractas  también  tienen  constructores,  y  estos  son  ejecutados  cuando  se  instancie  una  subclase.                                                  :
          Las  interfaces  no  tienen  constructores.  Las  interfaces  no  forman  parte  del  árbol  de  herencia.                                                                  /
          La  única  manera  de  invocar  un  constructor  es  desde  otro  constructor.                                                                                              /
Determinar  cuándo  se  creará  el  constructor  por  defecto                                                                                                                         g
                                                                                                                                                                                      u
El  constructor  por  defecto  será  creado  por  el  compilador,  siempre  que  no  se  haya  declarado  ningún  constructor  en  la  clase.                                         s
                                                                                                                                                                                      t
Como  es  el  constructor  por  defecto?  
                                                                                                                                                                                      a
          Tiene  el  mismo  modificador  de  acceso  que  la  clase.                                                                                                                  v
          No  recibe  ningún  argumento  (no  tiene  parámetros  en  su  definición).                                                                                                 o
          Llama  al  constructor  de  la  superclase  sin  argumentos.                                                                                                                a
                                                                                                                                                                                      l
Qué  pasa  si  el  constructor  de  la  superclase  requiere  argumentos?  
                                                                                                                                                                                      b
          Es   necesario   crear   explícitamente   los   constructores   en   la   clase,   y   dentro   de   la   implementación   de   estos,   llamar   al                        e
          constructor  de  la  superclase  pasando  los  argumentos  necesarios.                                                                                                      r
                                                                                                                                                                                      o
Sobrecarga  de  constructores                                                                                                                                                         l
Simplemente   se   comporta   al   igual   que   los   métodos.   Para   sobrecargar   un   constructor   basta   con   declarar   varios   de   estos   con  
                                                                                                                                                                                      a
diferentes  parámetros.                                                                                                                                                               .
                                                                                                                                                                                      b
                                                                                                                                                                                      l
                    Regla   absoluta   de   los   constructores.   La   primer   línea   de   estos   deberá   ser   una   llamada   a   super()   o   this()  
                                                                                                                                                                                      o
                    (pueden  contener  parámetros  en  la  llamada,  siempre  que  la  llamada  no  la  realice  el  compilador).  
                                                                                                                                                                                      g
                                                                                                                                                                                      s
Alguno  de  los  constructores  de  la  clase  deberá  de  llamar  a  super(),  y  verificar  que  todos  los  demás  constructores  terminen  yendo                                  p
al  que  realiza  dicha  llamada.                                                                                                                                                     o
                                                                                                                                                                                      t
                                                                                                                                                                                      .
                                                                                                                                                                                      c
                                                                                                                                                                                      o
                                                                                                                                                                                      m  




  
17          Java  World     Capítulo  1  

           




         Métodos  y  variables  estáticos  
h
t        Todos   los   métodos   y   atributos   declarados   con   el   modificador   de   no   acceso  
         static  pertenecen  a  la  clase  y  no  al  objeto  (instancia  de  la  clase).  
t
         Para   saber   cuándo   debemos   deberíamos   de   crear   un   atributo   o   método  
p
         estático,   simplemente   necesitamos   saber   si   este   requiere   o   no   acceder   a  
:        algún  atributo  de  la  clase  (en  el  caso  de  los  métodos),  o  si  debe  ser  un  valor  
/        compartido  para  todos  los  objetos  (en  el  caso  de  los  atributos).  
/        Características  de  los  atributos  y  métodos  estáticos:  
v
                        No  es  necesario  inicializar  ningún  objeto  para  poder  acceder  a  estos.  
a
                        Los   atributos   estáticos   son   compartidos   por   todos   los   objetos   (en  
l                       realidad  son  de  la  clase,  y  dado  que  el  objeto  pertenece  a  dicha  clase,                                   Lo  que  se  viene  
o                       también  tiene  acceso  a  los  atributos  y  métodos  de  esta).                                                      En   la   próxima   entrega   estaremos  
r                       Las  variables  estáticas  tienen  la  misma  inicialización  por  defecto  que  
                                                                                                                                               adentrándonos  en  las  asignaciones.  
c                       las  variables  de  clase.  
                        Un  método  estático  no  puede  acceder  a  ningún  miembro  no  estático  
                                                                                                                                                 
r
                        (main  es  estático!).                                                                                                 Veremos   que   clases   de   literales   existen  
e
                        No  existe  la  sobre  escritura  (overriding)  de  métodos  estáticos,  pero  si                                      en   el   mundo   de   Java,   y   como   utilizar  
a
                        la  sobrecarga  (overloading).                                                                                         cada   uno   de   ellos,   así   como   sus  
t
                                                                                                                                               compatiblidades  e  incompatibilidades.  
i        Accediendo  a  métodos  y  variables  estáticas  
v                                                                                                                                                
o        Dado   que   podemos   acceder   a   miembros   estáticos   sin   siquiera   haber                                                    Aprenderemos   a   inicializar   y   utilizar  
         instanciado   una   clase,   para   referenciarlos,   utilizamos   el   nombre   de   la   clase                                      arrays,   matrices,   e   hipermatrices.   Como  
.
         con  el  .  para  acceder.  
b                                                                                                                                              referenciarlos   y   acceder   a   cada   uno   de  
l             public  class  Generic  {                                                                                                        sus  elementos.  
o                 static  public  int  numero  =  0;                                                                                             
              }  
g                                                                                                                                              Descubriremos   bloques   de   inicialización  
s             public  class  Specific  extends  Generic  {                                                                                     de  clase  y  objeto.  
p                 static  public  int  numero  =  1;                                                                                             
                    
o                 static  public  void  main  (String[]  args)  {                                                                              Y  conoceremos  sobre  las  clases  Wrapper  
t                     int  tmp  =  Specific.numero;        //Nomenclatura  utilizada  para  acceder  a                                         de   Java   que   existen   para   cada   tipo   de  
.             miembros  estáticos  (NombreClase.Miembro)  
                        
                                                                                                                                               valor  primitivo.  
c                     Generic  c  =  new  Specific();    //Es  válido  por  el  compilador.  Utiliza  los                                        
o             miembros  estáticos  del  tipo  de  dato  declarado.                                                                          
m                     tmp  =  c.numero();                  //En  este  caso,  el  valor  al  que  se  accede  es  el  0  
                  }  
              }  
                                                                                                                                    
         En   caso   de   utilizar   un   identificador   que   no   sea   el   nombre   de   la   clase   (una  
         variable  de  referencia),  se  accede  a  los  miembros  estáticos  del  tipo  declarado  
         de  la  referencia  (no  el  tipo  real  contenido).    
                             
           
           
           
                                                        


           
Java  World     Capítulo  1     18  
  




  

                                            h
                                            t
                                            t
                                            p
                                            :
                                            /
                                            /
                                            g
                                            u
                                            s
                                            t
                                            a
                                            v
                                            o
                                            a
                                            l
                                            b
                                            e
                                            r
                                            o
                                            l
                                            a
                                            .
                                            b
                                            l
                                            o
                                            g
                                            s
                                            p
                                            o
                                            t
                                            .
                                            c
                                            o
                                            m  




  

Más contenido relacionado

La actualidad más candente

Diagranacion periodico
Diagranacion periodicoDiagranacion periodico
Diagranacion periodicoJUan Feria
 
Programación Enero Febrero 2011
Programación Enero Febrero 2011Programación Enero Febrero 2011
Programación Enero Febrero 2011Zaragoza Activa
 
Monigote raro deforme
Monigote raro deformeMonigote raro deforme
Monigote raro deformearuiperezgil
 
Trampas de luz 09 al 15 de nov de 2012
Trampas de luz 09 al 15 de nov de 2012Trampas de luz 09 al 15 de nov de 2012
Trampas de luz 09 al 15 de nov de 2012Macarena Casuso
 
Los reciclados y sus proyectos
Los reciclados y sus proyectosLos reciclados y sus proyectos
Los reciclados y sus proyectosMeli Sanchez
 
National instruments presentation human capital group dirk willems
National instruments presentation human capital group   dirk willemsNational instruments presentation human capital group   dirk willems
National instruments presentation human capital group dirk willemsDirk Willems
 
Diagrama mcti
Diagrama mctiDiagrama mcti
Diagrama mctigrenyjoel
 
Processos de Improbidade Administrativa do Aloisio Vieira
Processos de Improbidade Administrativa do Aloisio VieiraProcessos de Improbidade Administrativa do Aloisio Vieira
Processos de Improbidade Administrativa do Aloisio VieiraLuciano Viana
 
Plano esquemático de Bueu
Plano esquemático de BueuPlano esquemático de Bueu
Plano esquemático de BueuConcello de Bueu
 
Presentación atletismo
Presentación atletismoPresentación atletismo
Presentación atletismonachoydiego
 
Presentación Objetivos enfermería de hospitalización
Presentación Objetivos enfermería de hospitalización Presentación Objetivos enfermería de hospitalización
Presentación Objetivos enfermería de hospitalización 982531786
 
Quemaduras en la Tercera Edad.
Quemaduras en la Tercera Edad. Quemaduras en la Tercera Edad.
Quemaduras en la Tercera Edad. Jorge Villegas
 
Entrega finaaaaal
Entrega finaaaaalEntrega finaaaaal
Entrega finaaaaalnacho_0
 

La actualidad más candente (19)

JavaWorld - SCJP - Capitulo 6
JavaWorld - SCJP - Capitulo 6JavaWorld - SCJP - Capitulo 6
JavaWorld - SCJP - Capitulo 6
 
Diagranacion periodico
Diagranacion periodicoDiagranacion periodico
Diagranacion periodico
 
Programación Enero Febrero 2011
Programación Enero Febrero 2011Programación Enero Febrero 2011
Programación Enero Febrero 2011
 
Comic
ComicComic
Comic
 
Monigote raro deforme
Monigote raro deformeMonigote raro deforme
Monigote raro deforme
 
Anaga
AnagaAnaga
Anaga
 
Podemoscast
PodemoscastPodemoscast
Podemoscast
 
Trampas de luz 09 al 15 de nov de 2012
Trampas de luz 09 al 15 de nov de 2012Trampas de luz 09 al 15 de nov de 2012
Trampas de luz 09 al 15 de nov de 2012
 
Los reciclados y sus proyectos
Los reciclados y sus proyectosLos reciclados y sus proyectos
Los reciclados y sus proyectos
 
National instruments presentation human capital group dirk willems
National instruments presentation human capital group   dirk willemsNational instruments presentation human capital group   dirk willems
National instruments presentation human capital group dirk willems
 
Diagrama mcti
Diagrama mctiDiagrama mcti
Diagrama mcti
 
Xen Summit Asia 2009 Xen Arm Talk
Xen Summit Asia 2009 Xen Arm TalkXen Summit Asia 2009 Xen Arm Talk
Xen Summit Asia 2009 Xen Arm Talk
 
Processos de Improbidade Administrativa do Aloisio Vieira
Processos de Improbidade Administrativa do Aloisio VieiraProcessos de Improbidade Administrativa do Aloisio Vieira
Processos de Improbidade Administrativa do Aloisio Vieira
 
Plano esquemático de Bueu
Plano esquemático de BueuPlano esquemático de Bueu
Plano esquemático de Bueu
 
Lopez
LopezLopez
Lopez
 
Presentación atletismo
Presentación atletismoPresentación atletismo
Presentación atletismo
 
Presentación Objetivos enfermería de hospitalización
Presentación Objetivos enfermería de hospitalización Presentación Objetivos enfermería de hospitalización
Presentación Objetivos enfermería de hospitalización
 
Quemaduras en la Tercera Edad.
Quemaduras en la Tercera Edad. Quemaduras en la Tercera Edad.
Quemaduras en la Tercera Edad.
 
Entrega finaaaaal
Entrega finaaaaalEntrega finaaaaal
Entrega finaaaaal
 

Destacado

Gbi metodos de busqueda
Gbi metodos de busquedaGbi metodos de busqueda
Gbi metodos de busquedakrespolok
 
"Fertilizacion asistida" o "Reproduccion Asistida"
"Fertilizacion asistida" o "Reproduccion Asistida""Fertilizacion asistida" o "Reproduccion Asistida"
"Fertilizacion asistida" o "Reproduccion Asistida"Fernandez Moreno
 
Curso de power point
Curso de power point Curso de power point
Curso de power point Johanna solis
 
Planificaciones propuesta dida ctica 05
Planificaciones propuesta dida ctica 05Planificaciones propuesta dida ctica 05
Planificaciones propuesta dida ctica 05Michell Guillen
 
09 25-2011 - globalizacion del derecho ambiental
09 25-2011 - globalizacion del derecho ambiental09 25-2011 - globalizacion del derecho ambiental
09 25-2011 - globalizacion del derecho ambientalRuben Stefani
 
Ana diapositivas de ofimatica 1234
Ana diapositivas de ofimatica 1234Ana diapositivas de ofimatica 1234
Ana diapositivas de ofimatica 1234frezita_02
 
Presentación7 terminado
Presentación7 terminadoPresentación7 terminado
Presentación7 terminadoGissele León
 
Cdc Y Tcee Foto Presentacion 2102
Cdc Y Tcee  Foto  Presentacion  2102Cdc Y Tcee  Foto  Presentacion  2102
Cdc Y Tcee Foto Presentacion 2102CDCMEXICALI
 
Trabajo Práctico de Teoría de las Organizaciones
Trabajo Práctico de Teoría de las OrganizacionesTrabajo Práctico de Teoría de las Organizaciones
Trabajo Práctico de Teoría de las Organizacionesmanupicotto
 
Planificacion clase 3 terminada
Planificacion clase 3 terminadaPlanificacion clase 3 terminada
Planificacion clase 3 terminadaMaca Vargas Arias
 

Destacado (20)

Gbi metodos de busqueda
Gbi metodos de busquedaGbi metodos de busqueda
Gbi metodos de busqueda
 
"Fertilizacion asistida" o "Reproduccion Asistida"
"Fertilizacion asistida" o "Reproduccion Asistida""Fertilizacion asistida" o "Reproduccion Asistida"
"Fertilizacion asistida" o "Reproduccion Asistida"
 
Curso de power point
Curso de power point Curso de power point
Curso de power point
 
La infancia
La infanciaLa infancia
La infancia
 
Buscadores
BuscadoresBuscadores
Buscadores
 
Guion docente 07
Guion docente 07Guion docente 07
Guion docente 07
 
1 presentacion 102951
1 presentacion 1029511 presentacion 102951
1 presentacion 102951
 
Planificaciones propuesta dida ctica 05
Planificaciones propuesta dida ctica 05Planificaciones propuesta dida ctica 05
Planificaciones propuesta dida ctica 05
 
Exposicion
ExposicionExposicion
Exposicion
 
09 25-2011 - globalizacion del derecho ambiental
09 25-2011 - globalizacion del derecho ambiental09 25-2011 - globalizacion del derecho ambiental
09 25-2011 - globalizacion del derecho ambiental
 
Ana diapositivas de ofimatica 1234
Ana diapositivas de ofimatica 1234Ana diapositivas de ofimatica 1234
Ana diapositivas de ofimatica 1234
 
Guia 03 parte 10
Guia 03 parte 10Guia 03 parte 10
Guia 03 parte 10
 
Presentación7 terminado
Presentación7 terminadoPresentación7 terminado
Presentación7 terminado
 
Cdc Y Tcee Foto Presentacion 2102
Cdc Y Tcee  Foto  Presentacion  2102Cdc Y Tcee  Foto  Presentacion  2102
Cdc Y Tcee Foto Presentacion 2102
 
Escapadaregalo
EscapadaregaloEscapadaregalo
Escapadaregalo
 
Trabajo Práctico de Teoría de las Organizaciones
Trabajo Práctico de Teoría de las OrganizacionesTrabajo Práctico de Teoría de las Organizaciones
Trabajo Práctico de Teoría de las Organizaciones
 
Madera alex
Madera alexMadera alex
Madera alex
 
Neural tools5 es
Neural tools5 esNeural tools5 es
Neural tools5 es
 
La materia
La materiaLa materia
La materia
 
Planificacion clase 3 terminada
Planificacion clase 3 terminadaPlanificacion clase 3 terminada
Planificacion clase 3 terminada
 

Similar a Capitulo 2

Cap1 javaworld
Cap1 javaworldCap1 javaworld
Cap1 javaworldevanlitos
 
Historietas iznogud el malvado-horacio germán garcía
Historietas iznogud el malvado-horacio germán garcíaHistorietas iznogud el malvado-horacio germán garcía
Historietas iznogud el malvado-horacio germán garcíaHoracio Germán García
 
Unidad 5.- Sistemas de cruzamiento
Unidad 5.- Sistemas de cruzamientoUnidad 5.- Sistemas de cruzamiento
Unidad 5.- Sistemas de cruzamientoElenaRaimundez
 
Examen de matematicas sexto grado supervision
Examen de matematicas sexto grado supervisionExamen de matematicas sexto grado supervision
Examen de matematicas sexto grado supervisiondemonia28
 
1963 bar
1963 bar1963 bar
1963 baredusor
 
Web enabled 2012
Web enabled 2012Web enabled 2012
Web enabled 2012Wiyingi
 
Folleto del museo_del_romanticismo
Folleto del museo_del_romanticismoFolleto del museo_del_romanticismo
Folleto del museo_del_romanticismoalvarpau
 
Moodle 1.9 Configuración del curso
Moodle 1.9  Configuración del cursoMoodle 1.9  Configuración del curso
Moodle 1.9 Configuración del cursoRamón OVELAR
 
Malla vial Tunja
Malla vial TunjaMalla vial Tunja
Malla vial Tunjakamilo1021
 

Similar a Capitulo 2 (15)

Cap1 javaworld
Cap1 javaworldCap1 javaworld
Cap1 javaworld
 
Historietas iznogud el malvado-horacio germán garcía
Historietas iznogud el malvado-horacio germán garcíaHistorietas iznogud el malvado-horacio germán garcía
Historietas iznogud el malvado-horacio germán garcía
 
Unidad 5.- Sistemas de cruzamiento
Unidad 5.- Sistemas de cruzamientoUnidad 5.- Sistemas de cruzamiento
Unidad 5.- Sistemas de cruzamiento
 
Examen de matematicas sexto grado supervision
Examen de matematicas sexto grado supervisionExamen de matematicas sexto grado supervision
Examen de matematicas sexto grado supervision
 
Linea desarrollo institucional
Linea  desarrollo institucionalLinea  desarrollo institucional
Linea desarrollo institucional
 
1963 bar
1963 bar1963 bar
1963 bar
 
Yo me anticipo!!
Yo me anticipo!!Yo me anticipo!!
Yo me anticipo!!
 
Web enabled 2012
Web enabled 2012Web enabled 2012
Web enabled 2012
 
Folleto del museo_del_romanticismo
Folleto del museo_del_romanticismoFolleto del museo_del_romanticismo
Folleto del museo_del_romanticismo
 
Marifé Soria_Patrimonio Arq.
Marifé Soria_Patrimonio Arq.Marifé Soria_Patrimonio Arq.
Marifé Soria_Patrimonio Arq.
 
Moodle 1.9 Configuración del curso
Moodle 1.9  Configuración del cursoMoodle 1.9  Configuración del curso
Moodle 1.9 Configuración del curso
 
Mapa Valle
Mapa ValleMapa Valle
Mapa Valle
 
Malla vial Tunja
Malla vial TunjaMalla vial Tunja
Malla vial Tunja
 
Torre eiffel 2
Torre eiffel 2Torre eiffel 2
Torre eiffel 2
 
Rotativo
RotativoRotativo
Rotativo
 

Más de jorg_marq

Clase9 threads
Clase9 threadsClase9 threads
Clase9 threadsjorg_marq
 
Clase8 innerclasses
Clase8 innerclassesClase8 innerclasses
Clase8 innerclassesjorg_marq
 
Clase7 generics
Clase7 genericsClase7 generics
Clase7 genericsjorg_marq
 
Clase6 collections
Clase6 collectionsClase6 collections
Clase6 collectionsjorg_marq
 
Clase5 controldeflujo
Clase5 controldeflujoClase5 controldeflujo
Clase5 controldeflujojorg_marq
 
Clase4 operadores
Clase4 operadoresClase4 operadores
Clase4 operadoresjorg_marq
 
Clase3 asignaciones
Clase3 asignacionesClase3 asignaciones
Clase3 asignacionesjorg_marq
 
Clase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpooClase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpoojorg_marq
 
Clase1 introduccinalcurso
Clase1 introduccinalcursoClase1 introduccinalcurso
Clase1 introduccinalcursojorg_marq
 
Capitulos 8 9-10
Capitulos 8 9-10Capitulos 8 9-10
Capitulos 8 9-10jorg_marq
 
Clase10 stringsio
Clase10 stringsioClase10 stringsio
Clase10 stringsiojorg_marq
 
Whither cman
Whither cmanWhither cman
Whither cmanjorg_marq
 
Ex300 objectives
Ex300   objectivesEx300   objectives
Ex300 objectivesjorg_marq
 
Ex200 objectives
Ex200   objectivesEx200   objectives
Ex200 objectivesjorg_marq
 

Más de jorg_marq (16)

Clase9 threads
Clase9 threadsClase9 threads
Clase9 threads
 
Clase8 innerclasses
Clase8 innerclassesClase8 innerclasses
Clase8 innerclasses
 
Clase7 generics
Clase7 genericsClase7 generics
Clase7 generics
 
Clase6 collections
Clase6 collectionsClase6 collections
Clase6 collections
 
Clase5 controldeflujo
Clase5 controldeflujoClase5 controldeflujo
Clase5 controldeflujo
 
Clase4 operadores
Clase4 operadoresClase4 operadores
Clase4 operadores
 
Clase3 asignaciones
Clase3 asignacionesClase3 asignaciones
Clase3 asignaciones
 
Clase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpooClase2 ejemplosdeenumpoo
Clase2 ejemplosdeenumpoo
 
Clase1 introduccinalcurso
Clase1 introduccinalcursoClase1 introduccinalcurso
Clase1 introduccinalcurso
 
Capitulos 8 9-10
Capitulos 8 9-10Capitulos 8 9-10
Capitulos 8 9-10
 
Capitulo 5
Capitulo 5Capitulo 5
Capitulo 5
 
Capitulo 4
Capitulo 4Capitulo 4
Capitulo 4
 
Clase10 stringsio
Clase10 stringsioClase10 stringsio
Clase10 stringsio
 
Whither cman
Whither cmanWhither cman
Whither cman
 
Ex300 objectives
Ex300   objectivesEx300   objectives
Ex300 objectives
 
Ex200 objectives
Ex200   objectivesEx200   objectives
Ex200 objectives
 

Capitulo 2

  • 1.    
  • 2. Java  World    Capítulo  1   2       h t t p : / / g u s t a v o a l b   e r o l a . b Agradecimientos   l o Quisiera  darle  las  gracias  a  Matias  Emiliano  Alvarez  Durán   (quien  ahora  será  coautor  de  JavaWorld)  por  su  aporte,  y  por  darme   g ese  empujón  que  tanta  falta  me  hacía.     s Sin  tu  ayuda    JavaWorld  no  hubiera  visto  nunca  la  luz.     p Gracias   o   t . c o m    
  • 3. 3   Java  World    Capítulo  1     h Paradigmas  de  programación   t t Para  aquellos  que  son  iniciados  en  el  tema  de  la  programación,  es  bueno  tener  en  cuenta  un  poco  la  evolución  en  temas  de  cómo  se   p programa.   : Desde  siempre  la  programación  fue  una  serie  de  algoritmos  que  resuelven  un  problema,  lo  que  cambió,  fue  la  manera  de  agrupar  y   asociar  estos  algoritmos.   / / Paradigma  estructural   v a Este   paradigma   busca   como   objetivo   dividir   un   problema   complejo   (sistema),   en   varios   problemas   menos   complejos   (funciones).   l Este  es  un  paradigma  que  ha  ido  quedando  en  desuso  con  el  correr  de  los  tiempos,  aunque  aquellos  que  estén  dando  sus  primeros   pasos  en  alguna  institución,  puede  que  lo  vean  en  lenguajes  como  Pascal  o  C++.   o r Paradigma  orientado  a  objetos   c r En  este  paradigma,  cada  elemento  del  sistema  se  divide  en  objetos.  Estos  son  representaciones  de  entidades  que  encontramos  en  la   e vida  real.  Por  ejemplo,  si  estuviéramos  diseñando  un  sistema  para  un  aeropuerto,  sería  más  que  factible  encontrarse  con  las  clases   Aeroplano,  Pasajero,  Capitan.   a ¿Pero,  y  la  diferencia?   t En  este  paradigma,  cada  entidad  es  responsable  de  realizar  las  acciones  que  le  conciernen,  y  solo  las  que  le  conciernen.   i Supongamos  que  estamos  diseñando  un  juego,  y  tenemos  un  avión,  según  los  paradigmas  hubiéramos  hecho  lo  siguiente:   v   o Estrucura  procedural  en  lenguaje  C   . typedef   b struct  Avion  {      int  cantidadPasajerosSoportada;   l    float  peso;   o    //...  otras  propiedades  de  un  avion   g }  Avion_1;     s public  void  volar(avion  av)  {   p    //...  codigo   o }     t public  void  aterrizar(avion  av)  {   .    //...codigo   c }         o public  main()  {   m      volar(Avion_1)      aterrizar(Avion_1)   }              
  • 4. Java  World    Capítulo  1   4     Estructura  orientada  a  objetos  en  Java   class  Avion  {   h    int  cantidadPasajerosSoportada;      float  peso;   t    //...  otras  propiedades  de  un  avión   t       p    public  void  volar()  {          //...  Codigo   :    }   /       /    public  void  aterrizar()  {          //...  Codigo   g    }   u }   s   static  public  void  main(String[]  args)  {   t    Avion  avion_01  =  new  Avion();   a    avion_01.volar();   v    avion_01.aterrizar();   }   o   a   La  diferencia  más  grande  la  podemos  apreciar  al  momento  de  llamar  a  las  acciones  de  volar  y  aterrizar.  En  el  modelo  estructural   se   llama  a  una  función  a  la  cal  se  le  pasa  un  avión  como  argumento,  pero  en  el  modelo  orientado  a  objetos,  se  le  dice  al  propio  avión   l que  vuele  o  aterrice.   b     e r o l a . b l o g s p o t . c o m    
  • 5. 5   Java  World    Capítulo  1     Definición  de  una  clase   h t public  class  Persona  {   t    //Atributos      String  nombre;   p    String  apellido;   :    int  edad;   /    float  peso;         /    //Constructores   v    public  Persona(String  nombre,  String  apellido)  {   a        //Código  ...      }   l       o    //Métodos   r    public  void  correr(){          //Código...   c    }   r       e    public  void  caminar(){          //Código...   a    }   t       i    public  void  hablar(){   v        //Código...      }   o }   .     Básicamente,  una  clase  contiene  estos  elementos:   b l Atributos   Definen  el  estado  de  un  objeto   o Métodos   Definen  el  comportamiento  (pueden  ser  de  clase  o  de  objeto)   g Constructores   Permiten  crear  objetos   s Existen  otros  elementos  que  pertenecen  a  la  clase,  y  no  al  objeto.  Estos  contienen  el  identificador  static.   p Pero  no  te  preocupes,  ya  los  veremos.   o t Diferencia  entre  clase  y  objeto   . Una   clase  representa  una   especie  de   molde  para   cada   objeto.  Cuando  nosotros  creamos  un  objeto,  lo   hacemos  utilizando  alguna   c clase   en   particular,   esto   quiere   decir   que   el   objeto   creado,   puede   realizar   el   comportamiento   de   la   clase,   y   contiene   todos   sus   o atributos.   m   Vamos  a  verlo  con  un  ejemplo  más  gráfico.  Utilicemos  la  clase  Persona  que  definimos  anteriormente.   Basandonos  en  ella,  podemos  apreciar  que  cada  Persona  (clase),  tendrá  ciertas  características  (atributos).  Por  ejemplo,  supongamos   una  persona  llamada  Gabriel  y  otra  Laura.      
  • 6. Java  World    Capítulo  1   6     Clase   Objetos   h t Gabriel   t Gabriel   p : Persona   Rarara   / 15   / Nombre   g Apellido   56.3   u s Edad   Laura   t Peso   a Laura   v o Momomo   a 38   l b 65.2   e r o   Al   definir   un   objeto   de   tipo   Persona   estamos   diciendole   a   la   JVM   que   cree   una   estructura   con   tales   propiedades   y   tal   l comportamiento.  En  el  ejemplo  anterior,  Laura  y  Gabriel  también  tienen  la  capacidad  de  correr(),  caminar(),  y  hablar().   a   . b Para   todos   aquellos   que   crean   necesario   y/o   quieran   profundizar   en   la   programación   orientada   a   objetos   les   l quisiera  recomendar  la  siguiente  bibliografía:   Head  First  Java   Es   muy   amigable,   y   contiene   una   manera   de   explicar   todo   con   texto   e   imágenes   o (permite  mayor  absorción  de  los  conocimientos).  La  desventaja  es  que  solo  se  encuentra  en  inglés.   g Thinking  in  Java    Es  muy  extenso  y  detallado,  y  hay  una  versión  en  castellano.  La  desventaja  es  que  en   s algunos  momentos,  puede  llegar  a  ser  un  tanto  abrumador.   p programacion  +  objetos  +  java o encontrarán  mucha  información  al  respecto.   t         . c o m    
  • 7. 7   Java  World    Capítulo  1     Más  conceptos  de  la  POO   h t Al  adentrarnos  en  este  nuevo  paradigma,  no  solamente  cambia  la  manera  de  codificar,  sino  que  se  introducen  varios  conceptos  que   forman  las  bases  de  este,  tales  como  encapsulamiento,  polimorfismo  y  herencia.   t p Encapsulamiento   : / Algunos  de  los  beneficios  aportados   por  el  paradigma   de   orientación  a   objetos  (OO)  son:  flexibilidad  y  mantenimiento.  Pero  para   / lograr  esto,  es  necesario  escribir  las  clases  de  una  manera  en  particular.   La  clave  para  lograr  esto  es  encapsular  la  lógica  y  el  estado  de  la  clase  para  que  no  pueda  ser  accedido  de  forma  directa,  y  dejar  de   v manera  publica  un  set  de  métodos  para  poder  interactuar  con  la  clase.   a Las  claves  son:   l o Siempre  mantener  las  variables  de  instancia  protegidas  (con  un  modificador  de  acceso,  generalmente  public)   r Crea  métodos  públicos  (public)  para  acceder  a  las  variables  de  instancia   Para  los  anteriores,  utiliza  la  convención  de  nombres  de  JavaBeans   c r Herencia   e a Cuando   utilizamos   la   herencia,   a   veces   es   necesario   saber   si   un   objeto   pertenece   a   una   clase   en   concreto.   Para   realizar   esto   t utilizamos   el   operador   instanceof,   este   devuelve   un   boolean,   siendo   true   en   caso   de   que   pertenezca   a   dicha   clase,   falso   en   caso   contrario.   i objeto  instanceof  clase   v Es  posible  crear  relaciones  de  herencia  en  Java  extendiendo  una  clase.  Las  dos  características  más  comunes  para  utilizar  la  herencia   o son:   . b Para  promover  la  reutilización  del  código   Para  el  uso  del  polimorfismo   l o El  polimorfismo  nos  permite  tratar  una  subclase  como  si  fuera  una  clase  del  tipo  de  su  superclase.  La  contrapartida  de  esto  es  que   g solo  se  podrán  llamar  a  los  atributos  que  se  encuentren  disponibles  para  el  tipo  de  clase  declarada.   s p Is-­‐A   o Para  el  examen  es  necesario  saber:   t . Is-­‐A  indica  que  la  clase  X  es  del  tipo  Y.  Esto  se  logra  a  través  de  extends  o  implements.   Al  termino  Is-­‐A  también  se  lo  puede  llamar:  derived,  subclass,  inherits,  o  subtype.   c   o m   Has-­‐A   Indica  que  una  clase  A  tiene  una  variable  de  instancia  que  contiene  una  referencia  a  B.   Polimorfismo   Un  objeto  es  polimórfico  cuando  cumple  con  al  menos  una  condicios  Is-­‐A.  Esto  es  cierto  para  todas  las  clases  que  no  sean  de  tipo   Object,  ya  que  todas  heredan  de  esta.   La  única  manera  de  acceder  a  un  objeto  es  a  través  de  una  variable  de  referencia.  Algunas  pautas  para  recordar  de  estas:   Una  variable  de  referencia  puede  ser  de  un  solo  tipo,  y  una  vez  que  fue  declarada,  ese  tipo  jamás  puede  modificarse.   Una  referencia  es  una  variable,  de  manera  que  puede  ser  reasignada  a  otros  objetos  (a  menos  que  se  declare  como  final).    
  • 8. Java  World    Capítulo  1   8     Un   tipo   de   variable   de   referencia   determina   los   métodos   que   pueden   ser   invocados   sobre   el   objeto   que   la   variable   referencia.   h Una  variable  de  referencia  puede  tomar  como  referencia  cualquier  objeto  del  mismo  tipo,  o  un  subtipo  del  mismo.   Una   variable   de   referencia   puede   tener   como   tipo   el   de   una   interface.   Si   es   declarada   de   esta   manera,   podrá   contener   t cualquier  clase  que  implemente  la  interfaz.   t p El  concepto  es  que  solo  los  métodos  de  instancia  son  invocados  dinámicamente.  Esto  es  logrado  por  la  JVM,  la  cual  siempre  tiene   : conocimiento  de  que  tipo  de  objeto  es  el  que  se  está  tratando,  así  como  su  árbol  de  herencia.   / Sobre  escritura   / g Cada  vez  que  una  clase  hereda  un  método  de  su  superclase,  existe  la  posibilidad  de  sobrescribir  el  método  (a  menos  que  este  haya   u sido  declarado  con  el  modificador  de  no  acceso  final).  El  beneficio  de  la  sobre  escritura  es  la  habilidad  de  definir  comportamiento   s particular  para  una  clase  específica.   Características  necesarias  para  hacer  uso  de  la  sobre  escritura:   t a La  lista  de  argumentos  debe  ser  exactamente  igual  que  el  método  a  sobrecargar.   v El  valor  de  retorno  debe  ser  del  mismo  tipo,  o  un  subtipo.   o El  modificador  de  acceso  no  puede  ser  más  restrictivo  que  el  del  método  a  sobre  escribir.   a El  modificador  de  acceso  puede  ser  menos  restrictivo  que  el  método  a  sobre  escribir.   l Los  métodos  de  instancia  solo  pueden  ser  sobre  escritos  si  es  que  son  heredados  por  la  subclase.   b El   método   sobre   escrito   puede   lanzar   cualquier   excepción   sin   verificación   en   tiempo   de   ejecución,   sin   importar   de   las   excepciones  que  hayan  sido  declaradas  en  el  método  de  la  superclase.   e El   método   no   deberá   lanzar   excepciones   verificadas   que   son   nuevas   o   amplían   a   las   ya   definidas   por   el   método   a   sobre   r escribir.   o El  método  sobre  escrito  puede  lanzar  una  cantidad  menor  de  excepciones  que  las  definidas  en  el  método  a  sobre  escribir.   l No   puedes   sobre   escribir   un   método   que   haya   sido   declarado   como   final   (creo   que   es   la   20ª   vez   que   repetimos   esto,   a pero,  nunca  es  suficiente).   . No  es  posible  sobre  escribir  un  método  que  haya  sido  declarado  como  static.   b Si  un  método  no  puede  ser  heredado,  no  puede  ser  sobre  escrito.   l Invocando  la  versión  de  la  superclase  de  un  método  sobre  escrito   o g También   es   posible   valerse   del   código   definido   en   la   superclase.   La   manera   de   invocarlo   es   con   la   palabra   super   (esta   hace   s referencia  a  la  superclase).   p En  el  caso  de  que  un  método  sobre  escrito  no  declare  alguna  excepción  del  método  a  sobre  escribir,  si  se  utiliza   o como  referencia  el  tipo  de  la  superclase,  se  espera  que  pueda  llegar  a  generarse  la  excepción.   t     .   c o m    
  • 9. 9   Java  World    Capítulo  1     public  class  Generic  {   h    public  void  doSomething()  throws  Exception  {   t        //  .  .  .  some  code  here      }   t }   p   : public  class  Specific  extends  Generic  {      public  void  doSomething()  {   /        //  .  .  .  some  code  here   /    }   v }     a public  class  Program  {   l    static  public  void  main  (  String[]  args  )  {   o        Generic  obj1  =  new  Specific();          Specific  obj2  =  new  Specific();   r           c        obj2.doSomething();   r        obj1.doSomething();  //Se  genera  un  error  de  compilación,  dado  que  no  se  declaro  como  recibir  la  excepción  Exception             e        //El  código  podría  solucionarse  con  un  try-­‐catch   a        try  {   t            obj1.doSomething();   i        }  catch  (  Exception  ex  )  {              //.  .  .  some  code  here   v        }   o    }   . }       b l Sobrecarga   o La   sobrecarga   de   métodos   permite   utilizar   el   mismo   nombre   de   un   método,   el   cual   toma   una   cantidad   y/o   tipo   de   parámetros   g diferentes.   s Las  reglas  para  la  sobrecarga  son:     p o Deben  de  modificarse  la  lista  de  parámetros.   Pueden  modificar  el  tipo  de  valor  de  retorno.   t Pueden  cambiar  el  modificador  de  acceso.   . Pueden  declarar  excepciones  nuevas  o  más  abarcativas.   c Pueden  ser  sobrecargados  en  la  misma  clase,  o  en  una  subclase.   o m   Básicamente,   un   método   sobrecargado   no   es   más   que   un   método   completamente   diferente,   pero   que   utiliza   un   nombre   que   ya   existe.   Invocación  de  métodos  sobrecargados   Para  invocar   un  método  sobrecargado,  es  necesario  especificar  los  parámetros  del  tipo  esperado  según  el  método  que  queramos   invocar.    
  • 10. Java  World    Capítulo  1   10     public  class  Something  {      public  void  doSomething(int  val)  {   h        //.  .  .  some  code  here      }   t       t    public  void  doSomething(float  val)  {   p        //.  .  .  some  code  here      }   :       /    static  public  void  main  (String[]  args){   /        Something  s1  =  new  Something();             g        int  valor1  =  1;   u        float  valor2  =  2.3;   s                  s1.doSomething(valor1);  //Se  invoca  al  método  doSomething(int  val)   t        s1.doSomething(valor2);  //Se  invoca  al  método  doSomething(float  val)   a        s1.doSomething(new  Object);  //Error  de  compilación.  No  existe  ningún  método  que  reciba  como  parámetro  un  tipo  Object   v    }   }   o     En  el  caso  de  la  invocación  con  objetos,  se  vuelve  un  poco  más  complicado.   a l public  class  Generic  {}   public  class  Specific  extends  Generic  {}   b   e public  class  Program  {   r          public  void  doSomething(Generic  obj)  {   o        //.  .  .  some  code  here   l    }   a          public  void  doSomething(Specific  obj)  {   .        //.  .  .  some  code  here   b    }   l          static  public  void  main  (String[]  args)  {   o        Generic  obj1  =  new  Generic();   g        Specific  obj2  =  new  Specific();   s        Generic  obj3  =  new  Specific();             p        Program  p  =  new  Program();   o           t        p.doSomething(obj1);    //Se  invoca  al  método  doSomething(Generic  obj)          p.doSomething(obj2);    //Se  invoca  al  método  doSomething(Specific  obj)   .        p.doSomething(obj3);    //Se  invoca  al  método  doSomething(Generic  obj)   c    }   o }     m     En  el  último  caso,  por  más  que  obj3  sea  de  tipo  Specific,  la  referencia  contiene  un  tipo  Generic,  y  es  esta  la  que  determina  a   que  método  se  invoca.        
  • 11. 11   Java  World    Capítulo  1     Polimorfismo  en  sobre  escritura  y  sobrecarga   h t El  polimorfismo  no  determina  que  método  invocar  cuando  se  trata  de  sobrecarga,  pero  si  cuando  se  trata  de  sobre  escritura.   Tabla  de  diferenciación  entre  sobrecarga  y  sobre  escritura:   t   Sobrecarga  de  método   Sobre  escritura  de  método   p Parámetros   Deben  cambiar.   No  deben  cambiar.   : Valor  de  retorno   Puede  cambiar  el  tipo.   No  puede  cambiar,  salvo  por  alguna  covariante  (subclass).   / Excepciones   Pueden  cambiar.   Pueden   reducirse   o   eliminarse.   No   se   pueden   lanzar   nuevas   / excepciones  u  otras  más  abarcativas.   v Modificadores   de   Pueden  cambiar   No  pueden  ser  más  restrictivos  (pueden  ser  menos  restrictivos).   a acceso   Invocación   El  tipo  de  la  referencia  determina   que   El   tipo   del   objeto   determina   que   método   invocar.   Sucede   en   l método  invocar.   tiempo  de  ejecución.   o   r     c r e a t i v o . b l o g s p o t . c o m    
  • 12. Java  World    Capítulo  1   12     Casteo  de  variables  de  referencia   En  ciertas  ocasiones,  es  necesario  utilizar  un  método  de  la  clase  específica  (subclase),  pero  la  referencia  es  de  la  superclase.  En  estos   h casos  se  utiliza  un  casteo  denominado   downcast.  El  problema  con  este  tipo  de  casteos,  es  que  no  generar  errores  en  tiempo  de   t compilación,  pero  pueden  generarlos  en  tiempo  de  ejecución.   t public  class  Generic  ()  {   p    public  void  doSomething()  {   :        //  .  .  .  some  code  here   /    }   }   /   g public  class  Specific  (){   u    public  void  doSomethingMoreSpecific()  {          //  .  .  .  some  code  here   s    }   t }   a   public  class  Program  {   v    static  public  void  main  (String[]  args)  {   o        Generic  g1  =  new  Specific();   a        Generic  g2  =  new  Generic();             l        g1.doSomething();   b        g1.doSomethingMoreSpecific();  //Genera  un  error  de  compilación  "cannot  find  symbol",  esto  indica  que  la  clase  Generic  no   e contiene  un  método  doSomethingMoreSpecific   r        Specific  s1  =  (Specific)g1;          s1.doSomethingMoreSpecific();  //En  este  caso,  la  instancia  es  de  tipo  Specific,  de  manera  que  conoce  el  método   o doSomethingMoreSpecific   l           a        g2.doSomething();          g2.doSomethingMoreSpecific();  //Genera  un  error  de  compilación  "cannot  find  symbol",  esto  indica  que  la  clase  Generic  no   . contiene  un  método  doSomethingMoreSpecific   b        s1  =  (Specific)g2;  //Se  genera  un  error  en  tiempo  de  ejecución  "java.lang.ClassCastException"   l                  //Para  prevenir  esto  en  tiempo  de  ejecución,  antes  de  realizar  el  downcast  verificamos  que  el  objeto  sea  del  tipo  a  castear   o        if  (  g2  instanceof  Specific  )  {  //Como  el  objeto  no  es  de  tipo  Specific,  ni  un  subtipo  del  mismo,  la  sentencia  if  resulta  false,  y  no   g se  entra  en  la  condición,  previniendo  el  error  en  tiempo  de  ejecución   s            s1  =  (Specific)g2;              s1.doSomethingMoreSpecific();   p //También  se  puede  realizar  un  casteo  directo  como  el  siguiente   o ((Specific)g2).doSomethingMoreSpecific();   t        }      }   . }   c     o Lo  único  que  el  compilador  verifica  es  que  el  tipo  de  la  variable  con  el  tipo  a  castear  se  encuentren  en  el  mismo  árbol  de  herencia.   Lo  que  si  puede  generar  un  error  de  casteo  es  al  intentar  realizar  un  upcasting.   m    
  • 13. 13   Java  World    Capítulo  1     public  class  Generic  {}   h public  class  Specific  extends  Generic{}   t public  class  Another  {}     t public  class  Program  {   p    static  public  void  main  (String[]  args)  {   :        Specific  sp  =  new  Specific();          Another  an  =  new  Another();   /           /        Generic  s1  =  (Generic)sp;   v        Generic  an  =  (Generic)an;  //Error  de  compilación  al  intentar  realizar  un  upcasting  "inconvertible  types"     a        //El  upcasting  también  se  puede  escribir  de  la  siguiente  manera   l        Generic  s1  =  sp;  //Esta  sintaxis  automáticamente  está  realizando  un  upcasting   o    }   }   r     c También,  puede  darse  un  caso  como  el  planteado  a  continuación:   r public  interface  Doable  {   e    void  doSomething();   }   a   t public  class  Generic  implements  Doable  {   i    public  void  doSomething()  {          //.  .  .  some  code  here   v    }   o }   . public  class  Specific  extends  Generic  {}       La  clase  Specific  puede  ser  tanto  de  tipo:  Specific,  Generic,  o  Doable,  dado  que  su  superclase  la  implementa,  y  ya  se  hizo   b l cargo  de  darle  un  cuerpo  a  los  métodos  definidos  en  la  interfaz.   o     g s p o t . c o m    
  • 14. Java  World    Capítulo  1   14     Implementar  (implements)  una  interfaz   Cuando  se  implementa  una   interfaz,  lo  que  se  hace   es  aceptar  el  contrato  provisto  por  esta,  e  implementarlo   en  la  clase.  Para  el   h compilador,   lo   único   que   requiere   es   que   se   le   dé   una   implementación   legal   al   método,   pudiendo   ser   esta   un   cuerpo   vacío   por   t ejemplo  ({}).   t Para   que   la   implementación   de   una   interfaz   sea   legal,   la   primer   clase   no   abstracta   del   árbol   de   herencia   debe   cumplir   con   las   p siguientes  reglas:   : Especificar  una  implementación  concreta  para  todos  los  métodos  definidos  en  el  contrato  de  la  interfaz.   / Seguir  todas  las  reglas  para  la  sobre  escritura  de  métodos.   / Declarar  sin  excepciones  controles  sobre  los  métodos  de  ejecución  distintos  de  los  declarados  por  el  método  de  interfaz,  o   g subclases  de  los  declarados  por  el  método  de  interfaz.   u Mantener  la  misma  firma  del  método,  y  devolver  un  valor  del  mismo  tipo  (o  subtipo).   s t a Tipos  de  valor  de  retorno  válidos   v o Esta  sección  implica  dos  cosas:   a Lo  que  se  puede  declarar  como  un  valor  de  retorno.   l Qué  tipo  de  dato  se  puede  devolver  realmente  como  valor  de  retorno.   b e Declaración  de  tipos  de  valor  de  retorno  (Return  types  declaration)   r Esta  sección  indica  que  tipo  de  valor  de  retorno  puedes  escribir  en  la  declaración  del  método,  dependiendo  si  se  trata  de  un  método:   o l Sobrecargado   a Sobre  escrito   . Nuevo   b Tipos  de  valor  de  retorno  en  métodos  sobrecargados   l o El  tipo  de  valor  de  retorno  puede  ser  cualquiera  (el  método  debe  calificar  para  la  declaración  de  sobrecarga).   g Tipos  de  valor  de  retorno  en  métodos  sobre  escritos   s p Se   puede   especificar   el   mismo   tipo,   o   un   subtipo   (sublass),   como   tipo   de   valor   de   retorno   (el   método   debe   calificar   para   la   o declaración  de  sobre  escritura).   t NOTA:  esto  es  posible  a  partir  de  Java  5,  en  versiones  anteriores,  solo  es  posible  utilizar  el  mismo  tipo.   . Devolviendo  un  valor   c o Solo  existen  seis  reglas:   m   Puedes  devolver  un  null  cuando  el  tipo  es  un  objeto.   Un  array  representa  un  tipo  de  dato  valido  como  retorno.   En  un  método  con  un  valor  de  retorno  de  tipo  primitivo,  es  posible  devolver  un  tipo  de  dato  de  otro  tipo,  que  sea  casteado   implícitamente  al  tipo  de  retorno.   Idem  anterior  con  un  tipo  que  puede  ser  casteado  explícitamente  (se  debe  realizar  el  cast  antes  de  devolver  el  valor).   Si  el  tipo  es  void,  el  método  no  puede  contener  ningún  return.   Si  el  tipo  es  un  objeto,  se  puede  devolver  cualquier  objeto  que  sea  del  mismo  tipo  o  que  pertenezca  al  árbol  de  herencia  (no   superclases  ni  superiores).  Cualquier  tipo  que  pase  la  condición  instanceof  del  tipo  de  valor  de  retorno  es  válido.    
  • 15. 15   Java  World    Capítulo  1     Constructores  e  instanciación   h t Los  objetos  son  construidos.  No  es  posible  construir  un  nuevo  objeto,  sin  antes  invocar  el  constructor.   Los  constructores  representan  bloques  de  inicialización,  los  cuales  pueden  llegar  a  ser  invocados  con  el  operador  new  (no  es  el  caso   t de  los  bloques  de  inicialización  estáticos).   p : Conceptos  básicos  de  los  constructores  (Constructor  basics)   / / Toda  clase,  incluidas  aquellas  que  sean  abstractas,  deberán  de  tener  un  constructor.  Pero  esto  no  implica  que  el  programador  tenga   que  especificarlo.   v a Llamadas  en  cadena  a  constructores  (Constructor  chaining)   l o Suponiendo  el  siguiente  árbol  de  herencia:   r c Clase   Clase   Clase   r Especifico   Generico   Objeto   e a   t   i Al  invocar  la  creación  de  un  objeto  de  tipo  Especifico,  el  proceso  de  inicialización  es  el  siguiente:   v 1. Se  invoca   el  constructor  se   Especifico.  Este  invoca   el  constructor  de   Generico  (esta  invocación  puede  ser  implícita   o   o explícita).   . 2. Se  invoca  el  constructor  de  Generico.  Este  invoca  el  constructor  de  Objeto  (esta  invocación  es  siempre  implícita).   b 3. Las  variables  de  instancia  del  objeto  Objeto  reciben  sus  valores  explícitos.   l 4. Se  ejecuta  el  constructor  de  Objeto.   5. Las  variables  de  instancia  del  objeto  Generico  reciben  sus  valores  explícitos.   o 6. Se  ejecuta  el  constructor  de  Generico.   g 7. Las  variables  de  instancia  del  objeto  Especifico  reciben  sus  valores  por  defecto.   s 8. Se  ejecuta  el  constructor  de  Especifico.   p o Reglas  de  los  constructores  (Rules  for  constructors)   t . Las  siguientes  reglas  representan  las  bases  de  los  constructores,  y  serán  necesarias  para  rendir  el  examen.   c o   m   Los  constructores  pueden  utilizar  cualquier  modificador  de  acceso.   El  nombre  del  constructor  debe  ser  igual  al  de  la  clase.   Los  constructores  no  deben  de  tener  un  valor  de  retorno.   Es   legal   tener   un   método   que   tenga   el   mismo   nombre   que   la   clase.   Siempre   que   este   tenga   un   valor   de   retorno,   es   un   método.   Si   no   se   especifica   explícitamente   un   constructor   en   la   clase,   implícitamente   se   genera   un   constructor   que   no   recibe   parámetros.   Si   se   especifica   al   menos   un   constructor,   el   constructor   implícito   no   será   generado,   de   manera   que   si   es   necesario   un   constructor  con  argumentos,  y  el  por  defecto,  es  necesario  especificarlo  explícitamente.   Todos  los  constructores  tienen  en  la  primer  línea,  una  llamada  a  un  constructor  sobrecargado  (this()),  o  una  llamada  a  un   constructor  de  la  superclase  (super()).    
  • 16. Java  World    Capítulo  1   16     La  llamada  a  un  constructor  de  la  superclase  puede  ser  con  o  sin  argumentos.   Un    constructor  sin  argumentos  no  es  necesariamente  un  constructor  por  defecto  (este  es  el  que  especifica  el  compilador,   h en  caso  de  no  declarar  explícitamente  ningún  constructor).   No   es   posible   acceder   a   una   variable   de   instancia,   o   método   de   instancia,   hasta   que   se   ejecute   el   constructor   de   la   t superclase.   t Solo  variables  y/o  métodos  estáticos  pueden  ser  llamados  al  invocar  un  constructor  mediante  this()  o  super().   p Las  clases  abstractas  también  tienen  constructores,  y  estos  son  ejecutados  cuando  se  instancie  una  subclase.   : Las  interfaces  no  tienen  constructores.  Las  interfaces  no  forman  parte  del  árbol  de  herencia.   / La  única  manera  de  invocar  un  constructor  es  desde  otro  constructor.   / Determinar  cuándo  se  creará  el  constructor  por  defecto   g u El  constructor  por  defecto  será  creado  por  el  compilador,  siempre  que  no  se  haya  declarado  ningún  constructor  en  la  clase.   s t Como  es  el  constructor  por  defecto?   a Tiene  el  mismo  modificador  de  acceso  que  la  clase.   v No  recibe  ningún  argumento  (no  tiene  parámetros  en  su  definición).   o Llama  al  constructor  de  la  superclase  sin  argumentos.   a l Qué  pasa  si  el  constructor  de  la  superclase  requiere  argumentos?   b Es   necesario   crear   explícitamente   los   constructores   en   la   clase,   y   dentro   de   la   implementación   de   estos,   llamar   al   e constructor  de  la  superclase  pasando  los  argumentos  necesarios.   r o Sobrecarga  de  constructores   l Simplemente   se   comporta   al   igual   que   los   métodos.   Para   sobrecargar   un   constructor   basta   con   declarar   varios   de   estos   con   a diferentes  parámetros.   .   b l Regla   absoluta   de   los   constructores.   La   primer   línea   de   estos   deberá   ser   una   llamada   a   super()   o   this()   o (pueden  contener  parámetros  en  la  llamada,  siempre  que  la  llamada  no  la  realice  el  compilador).     g   s Alguno  de  los  constructores  de  la  clase  deberá  de  llamar  a  super(),  y  verificar  que  todos  los  demás  constructores  terminen  yendo   p al  que  realiza  dicha  llamada.   o     t . c o m    
  • 17. 17   Java  World    Capítulo  1     Métodos  y  variables  estáticos   h t Todos   los   métodos   y   atributos   declarados   con   el   modificador   de   no   acceso   static  pertenecen  a  la  clase  y  no  al  objeto  (instancia  de  la  clase).   t Para   saber   cuándo   debemos   deberíamos   de   crear   un   atributo   o   método   p estático,   simplemente   necesitamos   saber   si   este   requiere   o   no   acceder   a   : algún  atributo  de  la  clase  (en  el  caso  de  los  métodos),  o  si  debe  ser  un  valor   / compartido  para  todos  los  objetos  (en  el  caso  de  los  atributos).   / Características  de  los  atributos  y  métodos  estáticos:   v No  es  necesario  inicializar  ningún  objeto  para  poder  acceder  a  estos.   a Los   atributos   estáticos   son   compartidos   por   todos   los   objetos   (en   l realidad  son  de  la  clase,  y  dado  que  el  objeto  pertenece  a  dicha  clase,   Lo  que  se  viene   o también  tiene  acceso  a  los  atributos  y  métodos  de  esta).   En   la   próxima   entrega   estaremos   r Las  variables  estáticas  tienen  la  misma  inicialización  por  defecto  que   adentrándonos  en  las  asignaciones.   c las  variables  de  clase.   Un  método  estático  no  puede  acceder  a  ningún  miembro  no  estático     r (main  es  estático!).   Veremos   que   clases   de   literales   existen   e No  existe  la  sobre  escritura  (overriding)  de  métodos  estáticos,  pero  si   en   el   mundo   de   Java,   y   como   utilizar   a la  sobrecarga  (overloading).   cada   uno   de   ellos,   así   como   sus   t compatiblidades  e  incompatibilidades.   i Accediendo  a  métodos  y  variables  estáticas   v   o Dado   que   podemos   acceder   a   miembros   estáticos   sin   siquiera   haber   Aprenderemos   a   inicializar   y   utilizar   instanciado   una   clase,   para   referenciarlos,   utilizamos   el   nombre   de   la   clase   arrays,   matrices,   e   hipermatrices.   Como   . con  el  .  para  acceder.   b referenciarlos   y   acceder   a   cada   uno   de   l public  class  Generic  {   sus  elementos.   o    static  public  int  numero  =  0;     }   g   Descubriremos   bloques   de   inicialización   s public  class  Specific  extends  Generic  {   de  clase  y  objeto.   p    static  public  int  numero  =  1;           o    static  public  void  main  (String[]  args)  {   Y  conoceremos  sobre  las  clases  Wrapper   t        int  tmp  =  Specific.numero;        //Nomenclatura  utilizada  para  acceder  a   de   Java   que   existen   para   cada   tipo   de   . miembros  estáticos  (NombreClase.Miembro)             valor  primitivo.   c        Generic  c  =  new  Specific();    //Es  válido  por  el  compilador.  Utiliza  los                                 o miembros  estáticos  del  tipo  de  dato  declarado.     m          tmp  =  c.numero();                  //En  este  caso,  el  valor  al  que  se  accede  es  el  0      }   }       En   caso   de   utilizar   un   identificador   que   no   sea   el   nombre   de   la   clase   (una   variable  de  referencia),  se  accede  a  los  miembros  estáticos  del  tipo  declarado   de  la  referencia  (no  el  tipo  real  contenido).                                    
  • 18. Java  World    Capítulo  1   18       h t t p : / / g u s t a v o a l b e r o l a . b l o g s p o t . c o m