miércoles, 30 de julio de 2008

Tips para el SCJP IV

Seguimos con tips para la certificación.
De nuevo hablamos de interfaces. Vemos un poco sobre los casts. Un tema amplio pero no muy dificil de entender, los constructores. Y finalmente vemos la palabra reservada static
.

Casting

  1. Existen dos tipos de cast.
  2. El primero downcasting (hacia abajo), sucede cuando se tiene una referencia más general y se desea una referencia a una subclase. Se debe realizar explícitamente el cast para que funcione y así poder accesar con esta nueva referencia a los miembros de la subclase.
  3. El upcasting (hacia arriba) funciona implícitamente (no se tiene que escribir) ya que cuando se realiza estas restringiendo el número de métodos que puedes invocar.
Interfaces
No te dejes engañar por código que muestre una clase concreta que declara haber implementado una interfaz pero no exista código que lo haga. Antes de decir que el código no es valido cabe mencionar que las superclases de ella pueden haber implementado esas interfaces.

Una clase puede implementar más de una interfaz. Es válido decir
public class Pelota implements Serializable, Runnable, Rebotable
{ ... }

Una interfaz puede extender (heredar) otra interfaz, pero nunca implementarla.
public interface Rebotable extends Movible { } // ok!

Una interfaz si puede extender (heredar) más de una interfaz
public class Programador extends Empleado, Trabajador { } // Illegal!
Aquí sí
public interface Rebotable extends Movible, Esférica { } // ok!


Regresando valores
  1. Puedes regresar null en un método que tenga un objeto como tipo de retorno.
  2. Un arreglo es un tipo legal de tipo de retorno
  3. En un método con un tipo primitivo de retorno, puedes regresar un valor o una variable que pueda ser implícitamente convertida (sin cast) en el tipo de retorno declarado.
  4. En un método con un tipo primitivo de retorno, puedes regresar un valor o una variable que pueda ser explícitamente convertida (usando un cast) en el tipo de retorno declarado.
  5. No debes de regresar ningún valor o variable de un método declarado como void.
  6. En un método con un tipo de retorno objeto, puedes regresar un cualquier objeto que pueda ser implícitamente convertida (sin cast) en el tipo de retorno

Constructores
  1. Los constructores pueden usar cualquier modificador de nivel de acceso, incluyendo private.
  2. El nombre del constructor debe ser el mismo que el nombre de la clase.
  3. Los constructores no tienen un valor o tipo de retorno.
  4. Es valido (pero sin sentido) tener un método con el mismo nombre de la clase, esto no lo hace un constructor. Si tiene un valor de retorno entonces es un método.
  5. Si no escribes un constructor en tu clase, entonces el compilador te hará uno automáticamente.
  6. El constructor generado por default nunca tendrá parámetros
  7. Si quieres un constructor sin argumentos, pero ya creaste otros constructors en tu clase, el compilador NO te proveerá de un constructor automáticamente. Así que tendrás que escribirlo tu mismo.
  8. Cada constructor tiene en su primera línea de código una llamada a un constructor sobrecargado (this()) o una llamada al constructor de la superclase (super()) aunque esta llamada puede ser insertada por el compilador (como primera línea de código)
  9. Una llamada a super() puede ser con o sin argumentos dependiendo del constructor de la superclase.
  10. No puedes hacer una llamada a un método de instancia o acceso a una variable hasta después de que el constructor de la super clase haya sido ejecutado
  11. Solo métodos y variables estáticas puede ser accesadas como parte de la llamada a super() o this, por ejemplo super(Animal.NAME) si NAME esta declarada como static.
  12. Las clases abstractas tienen constructores y son llamadas cuando una instancia de una subclase concretada es creada.
  13. Las interfaces no tienen constructores.
  14. Los constructores no se heredan. No son métodos. Y no pueden ser sobrescritos.
Una ejecución típica de un constructor es:
  1. El constructor llama al constructor de la superclase, que llama a su vez al constructor de su superclase y así sucesivamente hasta llegar al constructor Object.
  2. El constructor Object se ejecuta y regresa al constructor siguiente, hacía abajo de la cadena, hasta el final.
Modificador Static
  1. Las variables y métodos marcados como static pertenecen a la clase, más que a una instancia. De hecho se pueden usar los métodos o variables estáticas sin tener instancias de esa clase
  2. Un método estático no puede acceder a una variable no estática (de instancia). (Por ejemplo desde main() el cual es un método estático.
  3. Los métodos estáticos no pueden ser sobreescritos (overriden).

lunes, 28 de julio de 2008

Tips para el SCJP III

Ahora veremos dos temas muy importantes y algo complicados de entender. Override y overload, sobreescritura y sobrecarga. Además dos temas sencillos, relaciones y referencias.

Relaciones

  • Relación “Es Un”
  • Esta relación esta basada en el concepto de herencia o implementación de una interfaz. “Es un” quiere decir, “esta cosa es de tipo esta otra cosa”. Por ejemplo un Cocker es un tipo de Perro, en terminos de POO “Cocker Es Un Perro”. En java se usan las palabras reservadas extends e implements (para interfaces)
  • Una clase solo puede tener un padre, es decir no hay herencia múltiple. Solo puede extender de una sola clase.
  • La relación “Tiene Un”
  • Están basadas en uso más que en herencia. En otras palabras, la clase A Tiene Un B si código de la clase A hace referencia a una instancia de la clase B.
Referencias
  • 1. Una referencia puede ser de un solo tipo y una vez declarada ese tipo nunca puede ser cambiado (no obstante el objeto al que referencia si puede cambiar)
  • 2. Una referencia es una variable, por lo tanto puede ser reasignada a diferentes objetos (excepto cuando es declarada como final).
  • 3. El tipo de una referencia determina que métodos pueden ser invocados en el objeto que esta referenciando (muy importante).
  • 4. Una referencia puede “referenciar” a un objeto de ese mismo tipo o a una subclase del tipo declarado.
  • 5. Una referencia puede ser de un tipo de clase o de una interfaz. Si es de interfaz entonces cualquier objeto que implemente esa interfaz puede ser referenciado.
  • 6. El tipo de referencia (no el tipo del objeto), determina que métodos van a ser llamados.
Polimorfirmo y sobreescritura (Override)
  • Polimorfismo es que puedes tratar cualquier subclase de X como X. En otras palabras, puedes escribir código en una clase Z y puedes decir, “No me importa que tipo de objeto seas, siempre y cuando hayas heredado (extendido) de X haz esto”.
  • Siempre que tienes una clase que hereda de una superclase, entonces existe la posibilidad de sobreescribir (Override) el método (a menos que este marcado como final). El beneficio de la sobreescritura es que puedes definir comportamientos específicos para cada subclase en especial.
  • Los métodos polimórficos se pueden aplicar a métodos que hayan sido sobrescritos en métodos de instancia
Las reglas para sobrescribir (override) métodos son:
  • 1. La lista de argumentos debe ser exactamente igual que el método a sobrescribir. Si no son iguales entonces se hará una sobrecarga (cosa que no se deseaba)
  • 2. El tipo de retorno debe ser igual o de una subclase que en la versión original
  • 3. El nivel de acceso no puede ser más restrictivo.
  • 4. El nivel de acceso Si puede ser manos restrictivo.
  • 5. Los métodos de instancia pueden ser sobrescritos sólo si fueron heredados por la subclase.
  • 6. Una subclase en el mismo paquete que la superclase puede sobrescribir cualquier método que no sea marcado como private o final. Una subclase en un paquete diferente puede sobrescribir solo aquellos métodos que estén marcados como public o protected.
  • 7. Los métodos sobrescritos no puede lanzar nuevas o “mayores” excepciones que las de la superclase. Por ejemplo, un método que declara una ArchivoNoEncontradoException no puede sobrescrito por un método que declare una SQLException o Exception, a menos que sea una subclase de ArchivoNoEncontradoException.
  • 8. El método de la subclase puede lanzar menos o “menores” excepciones.
  • 9. No se puede sobrescribir un método declarado como final
  • 10. No se puede sobrescribir un método declarado como static
  • 11. Si un método no puede ser heredado entonces no se puede sobrescribir. Recuerda que los métodos sobrescritos implican que estas reimplementando un método que heredaste.
  • 12. Deben de tener el mismo tipo de retorno. En Java 5 el tipo puede ser una subclase, esto se conoce como covariant retun.
Es común que desees usar la versión de la superclase de un método y además sobrescribirlo con cosas extras. Esto es fácil de hacer con la palabra reservada super.

Sobrecarga de métodos (Overload)
Los métodos sobrecargados te dan la posibilidad de reusar un nombre de método en una clase, pero teniendo diferentes argumentos (y opcionalmente diferente tipo de retorno).
Las reglas para sobrecargar métodos son:
  • 1. Los métodos sobrecargados deben cambiar la lista de argumentos.
  • 2. Los métodos sobrecargados pueden cambiar el tipo de retorno.
  • 3. Los métodos sobrecargados pueden cambiar el modificador de nivel de acceso.
  • 4. Los métodos sobrecargados pueden declarar nuevas o mayores excepciones
  • 5. Un método sobrecargado puede estar en la misma clase o en una subclase ya que los métodos se pueden heredar y una subclase puede definir otro método sólo en esa subclase.
La elección de qué método sobrecargado se va a llamar NO se decide dinámicamente en tiempo de ejecución. Hay que recordar que el tipo de la referencia(no del objeto) determina que método sobrecargado va a ser invocado.

En resumen:
La versión del método sobrescrito se decide dinámicamente basado en el tipo del objeto. Pero lLa elección del método sobrecargado se basa en el tipo de la referencia en tiempo de compilación.

domingo, 27 de julio de 2008

¿Los perros pueden ver la tele?


Estrictamente la respuesta es sí. El problema es que no la entienden y la perciben como nosotros.

Desde el punto de vista técnico la tele tiene una tasa de actualización de 60 Hz aproximadamente y nuestros ojos son más lentos que eso, por eso nosotros vemos imagenes continuas, algunos perros no obstante tienen una capacidad de resolver las imagenes con mayor rapidez y entonces veran un efecto algo extraño y aburrido (flicker), por tanto las imagenes son menos creibles para ellos .
Otro punto muy importante es que la tele solo muestra imagenes y audio, pero no hay olores y el sentido del olfato es el más desarrollado de los perros por lo tanto, no le hacen mucho caso a algo que no produce olores.

Sin embargo hay ciertos perros que a pesar de lo anterior si respoden a sonidos que les parecen extraños o interesantes, a cosas que se mueven por la tele y también a buscar detras de la tele a ver donde se fueron o donde están las cosas que vieron.

Siguiendo con la vista de los perros y hablando de como estan formados los ojos los perros tienen menos conos (los que sirven para percibir el color) y tienen más bastones (los que detectan luz y movimiento) que los humanos, por eso ellos ven menos colores pero ven mucho mejor en la oscuridad ya que su espectro de luz es mayor, también son mas sensibles a detectar movimiento.

Como breviario cultural tenemos que para un humano los colores del arcoiris son;
Violeta, Indigo, Azul, Verde, Amarillo, Naranja y Rojo
Los perros verían algo como
Violeta, Indigo, Azul, Amarillo, Amarillo, Amarillo y Rojo.

Así que los perros no ven en blanco y negro ni en dos colores, tan sólo ven en menos colores que nosotros.

Por cierto que mi perro es uno de los que respoden a sonidos de la tele, en cuanto oye algun sonido de un pajaro empieza a ladrar XD.

sábado, 26 de julio de 2008

La fortaleza digital

Esta novela es la primera de Dan Brown autor del famoso Código Da Vinci.
La verdad es que no es nada del otro mundo, sólo vale la pena leer este libro si no tienes otro a la mano o si quieres leer algo muy (muy) light.
Con su temática de misterio y aventura, con la misma idea de pequeños mensajes ocultos y claves, este libro trata de un "código indecifrable", de una agencia estadounidense y por supuesto una pequeña historia de amor.

A su favor este libro tiene pocas cosas, podemos decir que es fácil de leer, que es algo entretenido y que tiene una que otra cosa que no esta alejada de la realidad, como la agencia de los EU y lo que se dice sobre la privacidad en el mundo actual.

En contra hay muchas cosas malas, a veces llega a ser aburrido ya que puedes adivinar muchas de las cosas que van a pasar, y si ya leiste el Código Da Vinci entonces este libro no es ni tantito mejor. También tiene en contra el hecho de que habla de España como un país tercermundista en especial de la ciudad de Sevilla, en la cual yo no nunca he estado pero creo que el autor exagera o incluso inventa todo, sobre ésto los españoles obviamente se molestaron un poco.

Por cierto que al final aparece un código:
128 - 10 - 93 - 85 - 10 - 128 - 98 - 112 - 6 - 6 - 25 - 126 - 39 - 1 - 68 - 78.
WECGEWHYAAIORTNU

W E C G
E W H Y
A A I O
R T N U
descifrado dice:

We are watching you
.

jueves, 24 de julio de 2008

Tips para el SCJP II

Siguiendo con tips para la certificación de Java, veamos el siguiente capítulo, donde hablaremos de los modificadores, de las variables ya sean de instancia o locales y de otros temas menos conocidos pero importantes como las Enums o los Var-args

Modificadores

  1. Es ilegal tener un solo método abstract si la clase no esta declarada como abstract.
  2. Sin embargo puedes declarar la clase como abstract y no tener métodos abstract.
  3. Un método nunca puede ser marcado como abstract y final.
  4. Un método nunca puede ser marcado como abstract y private
  5. El modificador abstract nunca puede ser combinado como static.
  6. El modificador synchronized sólo se aplica a métodos.
  7. El modificador native solo se aplica a métodos.
  8. El modificador strictfp solo se puede aplicar a clases o métodos
  9. Si un miembtro de una superclase es public, entonces la subclase lo heredará, no importando el paquete.
  10. Los miembros que son accesados mediante el operador punto (.) pertencen a la misma clase.
  11. La palabra this se usa para referise al objeto que se está ejecutando.
  12. this.unMetodo() es lo mismo que invocar unMetodo();

Variables de instancia
  1. Pueden usar cualquier de los cuatro niveles de control de acceso
  2. Pueden ser marcadas como final
  3. Pueden ser marcadas como transient
  4. No pueden ser marcadas como abstract
  5. No pueden ser marcadas como synchronized
  6. No pueden ser marcadas como strictfp
  7. No pueden ser marcadas como native
  8. No pueden ser marcadas como static, porque entonces se convierten en variables de clase.

Variables locales
  1. Las variables locales, de pila, o de método, no pueden tener modificadores de nivel de acceso.
  2. Final es el unico modificador que pueden tener.
  3. Las variables locales no tienen valores iniciales, por eso deben ser inicializadas.

Otros

  1. No es legal incluir el tamaño del arreglo en la declaración int[5]algo; Esto no va a compilar
  2. Las Enum no son ints ni Strings.
  3. Las Enums no puden ser declaradas dentro de un método, pero si dentro o fuera de una clase.
  4. Las Enums pueden contener constructores, métodos, variables y constantes.
  5. Los constructores de Enums no pueden ser invocados directamente
  6. En Java 5 los métodos puede declarar parámetros que acepten de 0 a muchos argumentos, se llaman Var-args.
  7. Un vararg es declarado con su tipo … nombre, por ejemplo : algo (int … x) {}
  8. Un método solo puede tener un parámetro vararg, y si existe debe ser el último en la lista.

Tips para el SCJP I

Dado que estoy estudiando para pasar el SCJP he empezado a leer algunos libros y he ido tomando notas. Así que puedo compartirlas para aquellos que también quieran certificarse en Java o simplemente quieran conocer más acerca de este lenguaje de programación.

Para iniciar hablaremos sobre aspectos fundamentales tales como: Clases, declaraciones, identificadores, niveles de acceso e interfaces.

Estos son tips sencillos y útiles cuando ya se tienen cierta experiencia y conocimiento del lenguaje, son cosas que a veces se nos olvidan o que no prestamos tanta importancia pero en el examen si son tomadas en cuenta.

Clases
  1. El acceso por default se indica si no tiene un modificador precediendo el nombre de la clase. Es el tipo de control que se llama también a nivel de paquete, ya que una clase con acceso default sólo puede ser vista por clases que se encuentren en ese mismo paquete.
  2. Acceso public. Se antepone el modificador public antes del nombre de la clase. Esto indica que todas las clases de todos los paquetes pueden acceder a ella.
  3. Clases finales. Cuando se usa en una declaración de clase, la palabra reservada final indica que la clase no puede ser extendida .En otras palabras ninguna otra clase puede heredar de ella.
  4. Clases abstractas. Es una clase que nunca puede ser instanciada. Su sola razón de existir es ser extendida.
Identificadores
  1. Deben iniciar con una letra, un símbolo de dólar ($), o un guión bajo(_). NO pueden iniciar con un número.
  2. Después del primer carácter pueden contener cualquier combinación de números, letras, símbolos de dólar y guiones bajos
  3. No se pueden usar las palabras clave como identificadores
  4. Java es un lenguaje sensible: Perro y perro son diferentes identificadores.
Declaraciones
  1. Solo puede haber una clase public por archivo fuente.
  2. Si existe una clase pública entonces el nombre del archivo debe de ser el mismo que la clase pública.
  3. Un archivo puede tener más de una clase que no sea publica.
Interfaces
  1. Piensa en una interfaz como una clase 100% abstracta. Pero ten en cuenta que mientras una clase abstracta puede definir métodos abstractos y no abstractos, una interfaz sólo puede tener métodos abstractos.
  2. Todos los métodos de una interfaz son implícitamente públicos y abstractos.
  3. Todas las variables de una interfaz deben ser public, static y final. Es decir solo se pueden declarar constantes, no variables de instancia.
  4. Los métodos de las interfaces no pueden ser marcados como final, strictfp o native.
  5. Una interfaz puede extender una o más interfaces
Niveles de Acceso
  1. Existen 4 niveles de control de acceso para métodos
  • public
  • protected
  • default
  • private
  1. Debes de tener en cuenta el efecto de diferentes combinaciones de acceso. Para ello primero ver el nivel de acceso de la clase y luego de los miembros. Si la clase no es visible en si misma entonces tampoco lo serán los miembros aun cuando éstos sean declarados como public.
  2. Los miembros marcados como private no pueden ser accesados por código escrito en otra clase que no sea la que los declaro como private.
  3. Un miembro que usa nivel de acceso por default puede ser accesado por otra clase solo si pertenece al mismo paquete (package), mientras que un miembro protected puede ser accesado (mediante herencia) por una subclase incluso si la sublclase esta en otro paquete.
  4. El nivel de acceso protected se usa para definir que una subclase de ésta puede acceder al miembro aun cuando la superclase y la subclase se encuentren en paquetes diferentes.

miércoles, 23 de julio de 2008

Acerca del SCJP


Primero hay que decir qué es el SCJP = Sun Certified Java Programmer (SCJP). Es un examen que es considerado uno de los más dificiles en la insdustria de las TI.

Este examen trata de probar tu completo entendimiento del lenguaje Java, no sólo partes de las cuales conoces más. La experiencia de proyectos es importante pero también hay que estudiar y leer mucho ya que aun cuando creas que lo sabes todo, leyendo e informandote verás que no es así y por ello este examen es considerado complicado.

Acutualmente existen 8 certificaciones en Java con sus respectivos exámenes pero el punto de partida es éste.

En resumen el SCJP esta diseñado para:
probar tu conocimiento del lenguaje de programación Java. Requiere conocimiento detallado sobre la sintaxis, conocimientos del núcleo de Java, algunas APIs. También prueba el conocimiento de conceptos de programación orientada a objetos (POO). No necesita prerequisitos


viernes, 18 de julio de 2008

Jai Guru Deva ooooohm (Across the Universe)

Buscando un poco más sobre la canción Across the universe de los Beatles, encontré que el coro
Jai Guru Deva om
es un mantra que está escrito en sascrito que tiene un significado de algo así como
Gracias al guru divino o Guru Dev
quién era el maestro de los Maharishi y quien también conoció a los Beatles. El "om" al final de la linea es el sonido de meditación "oooooohm".

También es curioso que esta canción fue "tocada" hacia el espacio. Fue trasmitida mediante un a antena de la NASA el 4 de febrero de este 2008, esto fue hecho para conmemorar los 40 años de la canción y los 50 años de la NASA.

En fin, unos pequeños datos culturales de una canción tan enigmática como interesante.

Words are flowing out like
Endless rain into a paper cup
They slither while they pass
They slip away across the universe
Pools of sorrow waves of joy
Are drifting thorough my opened mind
Possessing and caressing me

Jai guru deva om
Nothing's gonna change my world
Nothing's gonna change my world
Nothing's gonna change my world
Nothing's gonna change my world

Images of broken light which
Dance before me like a million eyes
They call me on and on across the universe
Thoughts meander like a
Restless wind inside a letter box
They tumble blindly as
They make their way across the universe

Jai guru deva om
Nothing's gonna change my world...

Sounds of laughter shades of life
Are ringing through my opened ears
Inciting and inviting me
Limitless undying love which
Shines around me like a million suns
And calls me on and on across the universe

Jai guru deva om
Nothing's gonna change my world...

miércoles, 16 de julio de 2008

Las aves cantando

Como simepre YouTube no deja de sorprendernos y ahora con unas aves muy particulares, se llaman ninfas o carolinas (en inglés Cockatiel) y tienen la habilidad de silbar muy bien y aprenderse ciertas tonadas o sonidos, en general no aprenden palabras como los loros, pero sí chiflan y mejor que algunas personas.


Primero la marcha imperial:


y ahora una canción más mexicana:

martes, 15 de julio de 2008

¿Qué es Android?



Android es algo así como un Sistema operativo que estará dentro de los dispositivos móviles, entiendase celulares. Fue desarrollado por Google y muchas otras empresas.

Android se puede ver como un conjunto de especificaciones que deben de acatar las compañias que tienen que ver con celulares. Así un programador que conozca el SDK de Android puede realizar aplicaciones que van a funcionar en un Motorola, Nokia incluso un Iphone sin necesidad de hacer malabares o grandes cambios al código.

Lo mejor de Android para los programadores es que es libre y gratis, todos podríamos realizar aplicaciones sin tener que comprar licencias o cosas así.

En características más específicas tenemos que Android:
  • Tiene una Máquina virtual Dalvik, como la de Java pero optimizada para pequeños dispositivos.
  • Esta basado en Linux.
  • Tiene un Navegador integrado: basado en el motor open source WebKit.
  • Ttiene gráficos optimizados, con una librería de gráficos 2D; gráficos 3D basado en la especificación OpenGL ES 1.0 (aceleración de hardware opcional).
  • Tiene soporte para base de datos con SQLite.
  • Soporte para medios con formatos comunes de audio, video e imágenes planas (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
  • Telefonía GSM (dependiente del hardware)
  • Bluetooth, EDGE, 3G, y WiFi (dependiente del hardware)
  • Cámara, GPS, brújula, y acelerómetro (dependiente del hardware)

En fin... tiene muchas cosas. Lo importante a saber es que pronto (se supone que este año) aparecerán en el mercado los teléfonos que ya tengan Android como SO.

Aqui esta un pequeño video que muestra lo que se puede hacer con Android.

jueves, 10 de julio de 2008

Nel a Telcel (por carero$$$$)

NELtelcel.com

Sí una petición (que no creo que prospere más allá de tal vez aparecer en la tele) para que los uleeeeros de Telcel bajen el precio del Iphone.

Es una buena petición y creo que tiene sentido, pero no creo que el señor Slim y su compañia se deje intimidar por una página de internet y unos firmas y enojos...

miércoles, 9 de julio de 2008

El pequeño y gran WALL-E

Un pequeño robot curioso y con mania por guardar cosas que le parecen interesantes.
Un robot que lleva más de medio siglo haciendo la misma cosa.
Un pequeño robot el cual conocerá a alguién que le cambiará su "vida".

Es una gran película que tiene muchos mensajes. Pero lo que vale la pena saber es que es muy interesante y divertida.
Veanla, es genial.


jueves, 3 de julio de 2008

El miedo, las poleas y las borrachas

Tres joyas de videos, el mejor para mi es el de la tipa borracha, pero los dejo a su consideración:


Este señor que es como super héroe región -4.



El señor que le entraron las ñañaras y el miedo



Y por supuesta la señorita que "no choco, la chocaron"