miércoles, 5 de agosto de 2009

Pregunta simple ...

Bueno, llevaba algunos meses alejada de este blog; pero ahora he regresado para mantenerlo como se debe; así es que sin más preambulos, vamos con la primera pregunta.

Mire
n este simple ejemplo ... la pregunta de siempre es si compilará o no y en caso de que la respuesta sea negativa, entonces cuáles son las causas de los errores. Para algunos la respuesta puede resultar muy, pero muy obvia, pero lo importante como siempre es saber justificar la respuesta.

Analizando el código tenemos:

La clase A se encuentra definida dentro de un package llamado "certification" y la clase tiene una visibildad por 'default' que es distinta a la visibilidad 'public'. Esa clase compila sin ningún problema.

Luego en la clase B se importa la clase A desde su package y se define la clase B como una sub-clase de A ... pero acá está el problema, al tratar de compilar nos encontramos con que no se puede tener acceso a la clase A (aunque la hayamos importado) porque la visibilidad de la clase A es por default, es decir, a nivel de package ... y la clase B se encuentra en otro package, por lo tanto, no tiene acceso a la clase A.

La pregunta ahora es: ¿cómo se puede solucionar el problema?

Entonces, qué podemos decir ahora si intentamos con el siguiente código:

La clase C importa a la clase A, pero la va a utilizar sólo para crear objetos de esa clase, ¿será válido el acceso ahora?

La respuesta sigue siendo la misma ... no se puede acceder a la clase A, la clase C está definida dentro de un package distinto y la clase A tiene acceso por default.

Qué es lo relevante de estos simples ejemplos es la visibilidad de las clases, muchas veces me he encontrado con personas que piensan que el no incluir una visibilidad a la clase se asume que es público, pero NOOOOO, no es lo mismo. Sin embargo, hay una excepción a esa regla y tiene que ver con las interfaces ... pero eso lo dejaré para un próximo post.

Bueno, eso es todo por ahora, un abrazo a todos los que pasan por acá.

Saludos

viernes, 17 de abril de 2009

Una pregunta interesante


Hoy estaba preparando una guía de ejercicios para mi curso de Programación Orientada a Objetos y dentro de mis inventos elaboré el código que se encuentra en la figura (clic para ampliar la imagen)



Primero, se puede preguntar si es válido el tratar de ejecutar el código de la figura de la izquieda.

Luego, se puede preguntar si es válido el código de la imagen anterior y responder luego por lo que imprime y, como siempre, la pregunta más interesante de todas ... ¿podemos justificar la respuesta?

Responder a este tipo de preguntas justifica el conocimiento REAL que se tiene de los conceptos de OO aplicados a un lenguaje de programación.

Saludos

sábado, 11 de abril de 2009

Ranking de los lenguajes de programación

Miren este link de los índices de popularidad de los lenguajes de programación.

Ahora, ya que Java está en el inicio de la lista :-o jeje, miren este código (clic en la imagen para ampliarla ;-) ):

¿Qué se supone que debería imprimir? y la pregunta más importante e interesante es ¿por qué imprime eso?

La respuesta apunta por entender la forma de operar de los métodos de clase respecto de la forma de los métodos de instancia. Agregguemos a eso las declaraciones en distintos niveles de la jerarquía de clases.

Lo otro interesante es probar realizando los siguientes cambios:

  • Quitando el 'static' del methodA(Base b) y
  • Cambiando: Derived d = new Derived(); por: Base d = new Derived();

¿Cambia en algo la salida?, independiente de si cambia o no, ¿podemos justificar la salida?

En el próximo post va la explicación ... mientras tanto, tratemos de entender el comportamiento de los métodos de clase.

Bye

lunes, 2 de marzo de 2009

Algunas curiosidades ...





Durante mi preparación del examen de certificación de Java tuve que comenzar a analizar código y fijarme en detalles en los cuales nunca antes había ni siquiera pensado en fijarme. Muchas veces decimos que manejamos un lenguaje bien porque hemos programado un par de aplicaciones en él y con eso nos sentimos "expertos", pero de ser "experto" a conocer el lenguaje es otra cosa ... este post va dedicado a un par de curiosidades de ese tipo que encontré y la idea es que quienes se interesen traten de responder a las preguntas sin necesidad de compilar ... si, si sé, ustedes dirán ... pero cómo voy a responder si yo no soy un compilador ... pero dejenme decirles que justamente ahí está la gracia ... las primeras veces, las respuestas que damos no están ni cerca de lo correcto, pero luego aprendes y luego te basta con mirar un trozo de código y saber cuál podría ser la razón del problema ... y creanme que se los digo por experiencia propia ... yo siempre me he definido como una persona auto-didacta y nunca, mientras estudiaba, me quedaba simplemente con lo que los profesores nos entregaban en clases ... y creo que eso me ha ayudado a aprender todo lo que sé ... así es que si las primeras respuestas a las preguntas "capciosas" que acá voy a ir dejando de los distintos lenguajes en los cuales me va a tocar trabajar este año no son en un principio correctas, no importa, sigan intentando y se van a dar cuenta de que, poco a poco, van a ir ganando terreno en el lenguaje.

Bueno, después de esta breve introducción :-o ... vamos con la primera pregunta:

Observando el siguiente código, ¿qué debería imprimir?

Se trata de un ejemplo del uso de colecciones usando Generics y el tratamiento de los métodos característicos de tratamiento de colecciones: add y delete.

Dentro de las posibles respuestas están 0 y 100. Según lo que se lee se agregan y se quitan elementos a la colección que hemos creado. Se entiende que agrega un elemento y debería eliminar el elemento anterior ... y fíjense que en la primera iteración debería eliminar el número 0. La colección es un objeto HashSet que se almacena en un objeto declarado como Set ... ¿saben lo que imprime?, pero la mejor pregunta es: ¿pueden justificar la respuesta? ... la respuesta la voy a dejar stand-by y la respuesta la daré en el próximo post ... a ver si llegan algunos comentarios dando la opinión de por qué creen que imprime lo que imprime.

El código que sigue si que es curioso y ha sido uno de los que más me ha desconcertado ... jejeje, observen:

En este caso la pregunta de rigor es: ¿por qué imprime lo que imprime en la salida estándar?

La respuesta pasa por el comportamiento del null cuando se asigna a un objeto. El constructor de la clase Uno se encuentra sobrecargado y la clase Object tiene mayor prioridad, recuerden que la clase Object es la clase raíz (la clase padre de todas las clases) y por lo mismo está en el mayor nivel de jerarquía. La pregunta que debería quedar ahora es lo que se debería hacer para que imprima un "2" en la salida estándar, es decir, para que se ejecute el segundo constructor de la clase Uno.

Finalmente, una utilidad, han leído algo sobre la clase TestCase ... bueno acá hay una aplicación de esa clase ... permite trabajar con casos de prueba para ir depurando nuestros métodos ... si bien es cierto las aserciones es muy poco probable que aparezcan en la prueba de certificación no es malo saber cómo funcionan.

Para poder probar el código anterior necesitan el .jar asociado a junit, el cual lo pueden encontrar en el siguiente link.


Bueno, creo que eso sería mi primer post ... relacionado con Java, luego vendrán otros en .NET y C para ir variando un poco ... todos con algunas curiosidades y utilidades que nos ayuden a conocer más los lenguajes de programación.

Saludos a todos y que Dios los bendiga

Bye

sábado, 21 de febrero de 2009

Creación de blog técnico


Hi!!!

Este es el post de inicio en mi blog técnico. Acá trataré de traspasar algunos trucos relacionados con la programación, una de las pasiones que tengo en mi vida :-). Normalmente, son varios los lenguajes en los que me toca programar, por cuestiones académicas tengo que pasar por C, Java y ahora C# y Visual Basic .NET.

En épocas pasadas (nótese que son épocas y no vidas pasadas jeje) estuve programando en Prolog, Scheme; pero hace tiempo que no veo la programación lógica ...

Bueno, esto es el resultado de mi primer post ... como decía antes acá trataré de ir posteando cuestiones relacionadas con la programación. Algunos tutoriales que he ido elaborando, por si pierdo la memoria, tengo que tener un registro que respalde lo que he aprendido jejeje.

Un saludo a todos los que pasan por acá y espero mantener este blog de manera más o menos razonable.

Bye