POO VS. programacion “clasica” ( o como sobrevivir al efecto “pero esto que es?”)

Agosto 10, 2008 por java4noobs

personalmente, esta fue mi primera reaccion cuando me enfrenté a la POO;  es, en mi opinion,  el paradigma más complicado de entender y a la vez, el más util; voy a intentar explicarlo tomando como base la programacion clasica, la tradicional, la de toda la vida ( el paradigma de la programacion imperativa);

para empezar, en la programacion clasica, tenemos una serie de instrucciones ordenadas consecutivamente, que se ejecutan en estricto orden descendente ( salvo que exista una sentencia de salto, aunque gracias a dijstra, est´an en desuso); puede que creemos por separado, trozos de codigo que sabemos que van a repetirse muchas veces en nuestro programa, y los agrupemos en forma de procedimientos (que pueden no devolver nada o no tener ningun parametro de entrada ) o funciones ( que por definicion, devuelven algo con unos datos de entrada); esto, unido a una serie de variables definidas dentro de la estructura principal, el programa en si, nos da una idea más o menos clara de lo que es un codigo estandar de programacion clásica.

pues bien, la POO podemos plantearnosla así: imaginad un monton de mini programas todos enlazados; y ya está?, eso es todo?. menuda tonteria, ¿verdad? no os preocupeis, voy a explicarme mejor:

un programa escrito en POO se compone de clases; y las clases pueden poseer dentro atributos y metodos. que son los atributos? pues las variables que definen la clase. y los metodos? las sentencias que transforman dichas variables o que generan algun tipo de salida dada algun tipo de entrada…hum…no os suena? claro, es un programa de programacion clásica!

entonces, no viene a ser lo msimo que la programacion clásica? pues no exactamente, ahora explicaré la diferencia.

cuando ejecutamos un codigo de programacion clásica, digamos que lo ejecutamos todo de un golpe, a cascoporro, es decir, TODO se carga en memoria y se almacena en memoria hasta que el progrma termina. cuando estamos hablando de un programa con miles de millones de sentencias ( que los hay), creedme que puede significar el colapso de vuestro ordenador.

pero la POO es distinta, por que en ella hablamos de objetos…y eso que es lo que es? es la pregunta que todos los que hemos empezado en el paradigma de la programacion clasica nos hacemos. pues bien, un objeto es la expresion en memoria de una clase. en palabras poco tecnicas y probablemente muy inexactas, es un miniprograma en ejecucion, o listo para ejecutarse.

lo bueno es que en todo momento, al estar hablando de clases, podemos elegir que clase “instanciar” ( cargar en memoria); a diferencia de la programacion clásica, en la que todo se carga en memoria ( las llamadas a funciones a la hora de la ejecucion, se sustituyen por el mismo numero de sentencias ejecutadas, es decir si llamamos a una funcion que tiene 8 sentencias 3 veces, realmente tendremos cargadas en memoria 24 sentencias que se repiten…no es más que comodidad para el programador) en la POO nosotros decimos a que parte del codigo llamar, y, en algunos lenguajes, que parte del codigo ya no nos interesa llamar más.

en un post anterior hablé del recolector de basura, bien, este es el momento perfecto para explicarlo:  hasta ahora solo estamos cargando el codigo que nos interesa en memoria, pero… esto no nos vale para nada si no podemos hacer “borron y cuenta nueva” cuando el codigo ya no nos interesa. esa es precisamente la funcion del recolector de basura: analizar cuando no se va a necesitar más un cierto objeto y destruirlo, o lo que es lo mismo, liberar la memoria que estaba utilizando ( recordemos que en java esto se hace automaticamente, no hace falta explicitarlo, a diferencia de C++);

en conclusion: la POO es una version optimizada de la programaicon clasica, ya que requiere muchos menos recursos que la programacion normal. imaginad hacer una aplicacion grafica grande con programacion imperativa…seria un suicidio para la RAM, pues todo se basaria en cargar en memoria bucles enormes de lso que se saldría cuando un evento ocurriera ( como escribir algo o cerrar una ventana).

además de esto, existen muchisimas otras cosas que hacen a la POO un paradigma muy interesante, como la herencia y la multiherencia, por citar un ejemplo, además del hecho de que podemos comprobar la funcionalidad de cada clase por separado ( recuerda que son miniprogramas), y depurar errores de una forma mucho más rapida

sin embargo, como todo, no es perfecto, y tenemos que tener en cuenta una serie de desventajas importantes: la primera es el mayor tiempo de preparacion de un programa: hace falta mucho más esfuerzo para abstraer todas las clases que vamos a necesitar y como van a interactuar entre si. tambien hay que tener en cuenta que puede resultar un poco caotico tener el programa “a trozos”, con una parte del codigo en un archivo distinto a otra. y por ultimo, destacar que desaparecen muchos conceptos y otros son sustituidos por versiones mucho más abstractas de ellos, lo que dificulta su comprension enormemente, por ejemplo, ya no existen las bibliotecas de funciones como tales, ahora son paquetes de clases instanciables. es lo mismo, pero distinto xD

mi consejo, plantearos cada clase como un programa pequeño, y luego pensad en como interactua con el resto de programas pequeños para ahcer un programa grande. así es como yo conseguí entenderlo mejor.

espero que este post os sea util en vuestro viaje a través de la POO. un saludo a todos!

Por que razon elegir java

Agosto 10, 2008 por java4noobs

Creo que va siendo hora de que explique los pros, los contras y todos los aspectos relevantes sobre Java, una vez hemos probado el Holamundo y como compilarlo ( y que, OMG, funciona!;si no ha ocurrido eso, deverias volver a revisarlo todo)

para empezar, aclarar que java es un lenguaje orientado a objetos. ¿que significa esto? que si no has programado nunca, y vas poco a poco, no tendrás problema, pero si eres programador acostumbrado al paradigma de la programacion imperativa o funcional, te recomiendo que te armes de paciencia para entenderlo todo.(mi proximo post hablará especificamente sobre las diferencias entre la programacion orientada a objetos o POO y la programacion imperativa)

además, la ventaja de java, la que hace que sea en lenguaje muy atractivo, es simple: es multiplataforma. expliquemos esto: normalmente un programa viene definido por un codigo fuente; dicho codigo fuente, al compilarlo, se transforma en una serie de sentencias escritas en lenguaje maquina. ¿cual es el problema? que todo depende del sistema operativo en el que se haya compilado, pues cada codigo se traducirá a las sentencias maquina especificas ( e incompatibles) de cada SO. expresado con una metafora sería como traducir un texto ( codigo fuente) al inglés, al chino o al francés. logicamente, un inglés no podría leer un texto en chino ( en esta metafora nadie sabe idiomas :P ) y así sucesivamente. y ¿cómo soluciona esto java? facil, cuando compilamos en java lo hacemos a un lenguaje más o menos unificado ( siguiendo con la metafora de los idiomas, que sea el esperanto), que se traduce en tiempo real por una maquina virtual, que no es más que un interprete, desde el bitecode de java a las sentencias maquina de cada ordenador ( traductor en tiempo real de esperanto-chino, por ejemplo). ¿la ventaja? como dije anteriormente, un mismo codigo YA COMPILADO ( esto es muy importante) puede utilizarse en GNU/linux, en Windows, en MacOS… parece que no, pero para usuarios multiplataforma ( vease mi caso, que tengo que usar windows aunque no me guste mucho) es una enorme ventaja.

pero esta portabilidad no se limita a ordenadores, ya que Sun ( la empresa que lo creó) pensó en java como una especie de lenguaje universal, y para ello creó una version más pequeña y minimalista de su API pensada exclusivamente para dispositivos pequeños y moviles. exacto, ese hola mundo, con los paquetes adecuados, podría funcionar en tu terminal movil. sinceramente, me parece una idea bastante atractiva que, solo cambiando unas pocas sentencias, podamos llevarnos nuestro programa a cualquier lado ( teniendo en cuenta, claro está, las limitaciones tecnicas del movil).

es probable que en un futuro investigue como utilizar el java en moviles, pero de momento, intentemos usarlo en ordenadores, que no es moco de pavo.

sin embargo, como no todo el monte es oregano, hay que recalcar como desventajas que al ser un lenguaje que se traduce en tiempo real, requiere un porcentaje más elevado de recursos que un programa nativo ( cosa que, para aplicaciones pequeñas como las que vamos a crear aqui, y en ordenadores potentes como los que se comercializan ahora, no es un gran problema). además, tambien hay que tener instalada la maquina virtual, con el consiguiente marron de tener que buscarla, instalarla, etc… por que, amigos mios, NUNCA viene instalada.

hablando de su sintaxis, prefiero hacer una comparacion con el lenguaje que parece ser el estandar de la programacion: C ( o su equivalente en POO, C++); como ventaja destacar que, pese a que java ha sido escrito en C/C++ , su sintaxis es infinitamente más clara e intuitiva; además, desaparecen tanto los punteros ( con los problemas asociados que causan) como la basura que generan los objetos y que hay que recojer a mano en C++ ( de ello se encarga un recolector de basura especifico que se encuentra en la maquina virtual); no os preocupeis si no entendeis esto bien ahora, en el proximo post lo explicaré más a fondo. como desvenmtajas, el java tiene limitada la herencia a una sola clase, es decir, no existe la multiherencia ( que, bien mirado, con los problemas que puede generar, casi es una ventaja).

en conclusion: si quereis un lenguaje que sirva para todas las plataformas, que sea facil y potente al mismo tiempo, y con el que podais aprender POO de una forma bastante intuitiva, java es la mejor eleccion.

no obstante, voy a recomendar algun otro lenguaje más especifico, pues mucha gente lo que realmente busca es que la aplicacion funcione al pulsar un boton en una ventana y ya está, escribiendo el menos codigo posible: para ello visual basic ( VB en windows, y gambas en linux) es la mejor opcion: programaicon grafica del tipo arrastrar y listo, con una sintaxis minimalista y bastante eficaz ( pero, como siempre, no es portable). y para los que busquen una programacion profunda, casi a nivel de bit, ya sea para programas grandes y complejos que necesiten ser muy optimizados o para plataformas que no admitan una maquina virtual, la mejor opcion es C/C++, que pese a su complejidad a niveles avanzados, es el estandar de la programacion actual ( y te deja hacer unas barrabasadas que no veas, creedme)

espero que con este post haya dejado un poco más claro por qué he elegido java, per no obstante hay una razon más, esta muy personal:

escribir la interfaz grafica de java es tremendamente facil si sabes como, y no hay que buscar tampoco una interfaz para cada plataforma ( a direfencia de directx para windows, o qt o GTK para GNU/llinux, por citar ejemplos) con sus bibliotecas y sus funciones. en java solo existen el AWT y el Swing, y una es casi una pequeña ampliacion de la otra ( ya explicaré la diferencia más adelante); es decir, a efectos practicos, no necesitas má que un bloc de notas para empezar a programar, nada de paquetes graficos que hay que instalar aparte, solo programar y listo ( pues ya viene todo instalado en el JDK); personalmente, lo veo una ventaja: cuanto más sencillo sea todo, mucho mejor.

por hoy me despido, y espero haber aclarado algunas cosas; proximo post, diferencias entre la programacion imperativa y la programacion orientada a objetos.

Compilando nuestro Holamundo

Agosto 9, 2008 por java4noobs

Hola de nuevo! vamos a terminar de compilar nuestro prollecto “HolaMundo.java”, y así, de psao, explico un poco por encima como instalar los compiladores para GNU/Linux y para Windows. al tajo!

1º paso: instalar los compiladores y las maquinas virtuales

para empezar una aclaracion: Java es multiplataforma ( esto, entre otras cosas es lo que explicaré en el proximo post) y por tanto el mismo codigo puede ser utilizado en cualquier plataforma. hablando en terminos menos tecnicos, el mismo “programa” se puede ejecutar en GNU/Linux, en Windows, en MacOS… para ello tenemos que tener instalada la maquina virtual de java, una especie de traductor del codigo ( tranquilos, el proximo post aclararé esto mejor).

para los usuarios de Windows, teneis que acceder a esta pagina:

http://java.sun.com/javase/downloads/ea/6u10/6u10rcDownload.jsp#6u10JDKs

en esta pagina, al final, donde dice 6u10 JDKs encontrareis un ejecutable que os instalará todo lo necesario para compilar y ejecutar vuestros programas en java. tan sencillo como descargar y ejecutar, darle a aceptar todo y ya está!

para los usuarios de linux, debereis acceder al terminal y escribir:

javac

probablemente no lo tengais instalados y os pedirá que lo instaleis desde otro paquete, cojed el nombre de alguno y ya está.(seguid la formula de sudo apt-get install … tambien podeis intentarlo desde vuestro gestor de paquetes favorito)

para instalar java, lo mismo, escribis java en la consola y si no lo teneis instalado, os pedirá que instaleis algun paquete.

y ya está, tirando millas!

ahora establecer las variables del sistema (para windows, en GNU/Linux yo no tuve que hacerlo en ningun momento). tan sencillo como abrir el simbolo de sistema y escribir:

PATH = c:\windows\comand; c:\j2sdk1.6.0\bin

set CLASSPATH = .;

Atencion: estos datos los estoy copiando de un libro en el que la version era la 1.6.0, aśi que probablemente estén obsoletos ( pero e sla que yo uso); dejad algun comentario si encontrais algun problema y lo editaré.

muy bien, una vez tenemos el compilador y el archivo HolaMundo.java…a que esperamos? vamos a compilarlo:

para los usuarios de windows y tambien para los de GNU/linux, ejecutamos desde el simbolo del sistema/terminal (situados, claro está, en la carpeta en la que se encuentre el archivo):

javac HolaMundo.java

y despues:

java HolaMundo

si todo ha ido como debería, aparecerá el mensaje que hemos escrito en el programa. facil, verdad? pues así todo xD

en el proximo post explicaré mejor todas las ventajas, los inconvenientes y las caracteristicas principales del lenguaje de programacion java, así como una breve explicaicon del paradigma de la POO y un apunte pequeño sobre las maquinas virtuales. ambicioso, verdad? espero estar a la altura! xD

cualquier duda no dudeis en dejarla en los comentarios y intentaré buscar una solucion rapida, limpia y elegante…o al menos una solucion xD

Hola Mundo!

Agosto 9, 2008 por java4noobs

Hola a todos y sed bienvenidos a J4N, es decir, java4noobs! antes de nada me gustaría aclarar un par de cosas:

1º yo soy el primero que no tengo casi ni idea de java, pero si que he descubierto algo: la informacion que hay en internet está, a mi modo de ver, bastante mal explicada ( sobre todo para los que no conocemos el paradigma de la programación orientada a objetos, o POO…que que es eso? paciencia y lo descubrireis pronto! ) así que mi idea principal es recopilar toda la informacion util y expresarla de la forma más clara y comprensible posible. no siempre lo lograré pero bueno, al menos se intentará.

2º personalmente soy usuario de GNU/linux ( Ubuntu 8.04 y Linux Mint 5.1 Elyssa, concretamente) ya que pienso que, para los programadores, es la plataforma más comoda. en este blog no encontrareis tutoriales sobre como manejar programas como eclipse o glade, nada de eso. Aqui las cosas a la antigua, bloc de notas y tirando millas xD y respecto a los compiladores, tanto para GNU/Linux como para Windows, proximamente escribiré una entrada sobre como instalarlos y ejecutarlos ( Probablemente tambien haga algun tipo de script).

y ya sin más dilación, pasemos a ver algo de java, por que el movimiento se demuestra caminando! para empezar, abrid un archivo de texto nuevo en el blog de notas y cambiadle la extension, de .txt a .java. ya? perfecto, ahora, escribid esto:

class HolaMundo {

public static void main (String arg[]){

System.out.println(“Hola mundo! bienvenidos a J4N!”);

}

}

una vez escrito esto, guardad el archivo como HolaMundo.java ( es importantisimo que respeteis las mayusculas de todo el texto y del nombre).

bueno, y ¿esto que hace? basicamente, cuando lo compileis, obtendreis un precioso mensaje de Hola mundo! bienvenidos a J4N! en la consola del sistema ; pero de momento, no os preocupeis por eso, ¿de acuerdo?

se que dejamos el programa a medio hacer, pues falta compilarlo, pero aun nos quedan instalar los compiladores y todo este tinglado engorroso. proxima entrada, compiladores!

sed felices!