<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12945868</id><updated>2011-12-14T18:40:38.238-08:00</updated><category term='operadores'/><category term='varios'/><title type='text'>Diario de un Aprendiz de Java</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>27</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12945868.post-6388744387252021122</id><published>2007-10-19T01:26:00.000-07:00</published><updated>2007-10-29T01:03:47.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='operadores'/><title type='text'>Operador instanceof</title><content type='html'>El operador &lt;b&gt;instanceof&lt;/b&gt; sirve para consultar si un objecto es una instancia de una clase determinada, o de su padre. Por ejemplo, si tenemos la clase Punto :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;import java.lang.Math;&lt;br /&gt;&lt;br /&gt;public class Punto {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp protected int x, y;&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp public Punto ( int x, int y ) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp this.x = x;&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp this.y = y;&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp // Devuelve la distancia al eje de coordenadas&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp public float distancia() { &lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp return Math.sqrt(Math.pow(x,2.0)+Math.pow(y,2.0));&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Y luego la clase Punto3D, que hereda a Punto y extiende sus atributos, a parte de sobreescribir el método distancia :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;import java.lang.Math;&lt;br /&gt;&lt;br /&gt;public class Punto3D extends Punto {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp private int z;&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp public Punto3D ( int x, int y, int z ) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp super(x,y);&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp this.z = z;&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp // Devuelve la distancia al eje de coordenadas&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp public float distancia() { &lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp return Math.sqrt(Math.pow(x,2.0)+Math.pow(y,2.0)+Math.pow(z,2.0));&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Como vemos, sobreescribimos el método distancia() en Punto3D para que devuelva la distancia al eje de coordenadas de una posición en el espacio tridimensional. &lt;br /&gt;&lt;br /&gt;Si tenemos que escribir algún método general, que pueda tratar tanto con Puntos como con Puntos3D, posiblemente deberemos hacer algún &lt;i&gt;casting&lt;/i&gt; de objetos, y para saber con que clase instanciada estamos tratando deberemos usar el operador &lt;b&gt;instanceof&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;public class Main {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp public Main() {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp public static boolean is3D(Punto p) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp  return (p instanceof Punto3D);&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp  Punto p2 = new Punto(0,0);&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp  Punto p3 = new Punto3D(0,0,10);&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp  System.out.println(is3D(p2));&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Como vemos, esto devuelve un &lt;i&gt;false&lt;/i&gt;, puesto que p2 no es una instancia de Punto3D. Obviamente, una llamada a is3D con p3 como parámetro si que devolvería un valor verdadero! Pero, y si hacemos &lt;code&gt;p3 instanceof Punto&lt;/code&gt;, que devolvera? En este caso, un &lt;i&gt;true&lt;/i&gt;, puesto que todo objeto también es instancia de su padre.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-6388744387252021122?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/6388744387252021122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=6388744387252021122' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/6388744387252021122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/6388744387252021122'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2007/10/operador-instanceof.html' title='Operador instanceof'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-336582140945730853</id><published>2007-10-14T12:31:00.001-07:00</published><updated>2007-10-14T12:31:32.637-07:00</updated><title type='text'>Punteros de java</title><content type='html'>&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/vm5MNP7pn5g"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/vm5MNP7pn5g" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-336582140945730853?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/336582140945730853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=336582140945730853' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/336582140945730853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/336582140945730853'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2007/10/punteros-de-java.html' title='Punteros de java'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-3102172602975265455</id><published>2007-10-06T10:08:00.000-07:00</published><updated>2007-10-07T05:31:23.356-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='varios'/><title type='text'>He vuelto!</title><content type='html'>Que nostalgia! Hace más de dos años que no escribía en este blog. Durante este tiempo mi vida a dado giros importantes; dejé Java y la programación orientada a objetos de lado, acabé el bachillerato y llegué a la universidad. Exactamente a la &lt;acronym title="Universidad de las Islas Baleares"&gt;UIB&lt;/acronym&gt;, dónde estoy cursando segundo de Ingeniería Técnica en Informática de Sistemas. &lt;br /&gt;&lt;br /&gt;Vuelvo para quedarme. Me ha dado el empujón necesario para retomar este blog la asignatura de &lt;b&gt;Tecnología de la Programación&lt;/b&gt;, dónde nos enseñan algo programación orientada a objetos, complejidad algoritmica y demás, con &lt;b&gt;Java&lt;/b&gt; como envoltorio.&lt;br /&gt;&lt;br /&gt;Contaré mis aventuras y desventuras con Java y la programación orientada objetos en general, espero ser útil para alguien y que escribir aquí me ayude también a mi. Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-3102172602975265455?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/3102172602975265455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=3102172602975265455' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/3102172602975265455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/3102172602975265455'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2007/10/he-vuelto.html' title='He vuelto!'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111945292992773333</id><published>2005-06-22T07:57:00.000-07:00</published><updated>2005-06-22T08:08:49.930-07:00</updated><title type='text'>Convertir cadenas en enteros</title><content type='html'>A veces, necesitamos convertir una cadena que contenga cifras en un número. Por ejemplo, si pasamos un valor como parametro en tiempo de ejecución, y queremos operar con el, lo tendremos que transformar en entero. Para ello he escrito este código :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;class Array {&lt;br /&gt;&amp;nbsp public static int stringToInt(String cadena) {&lt;br /&gt;&amp;nbsp&amp;nbsp int resultado = 0, x, longi = cadena.length();&lt;br /&gt;&amp;nbsp&amp;nbsp for(x = 0; x &lt; longi; x++) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp resultado += ( ((int) cadena.charAt(x)) - 48 ) * (Math.pow(10,longi - 1 - x));&lt;br /&gt;&amp;nbsp&amp;nbsp }&lt;br /&gt;&amp;nbsp&amp;nbsp return resultado;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println(stringToInt(args[0]));&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111945292992773333?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111945292992773333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111945292992773333' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111945292992773333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111945292992773333'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/06/convertir-cadenas-en-enteros.html' title='Convertir cadenas en enteros'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111936275581322520</id><published>2005-06-21T06:54:00.000-07:00</published><updated>2005-06-21T07:05:55.816-07:00</updated><title type='text'>Scaffolding</title><content type='html'>En el post anterior he publicado un código que implementa un método que duplica un array de enteros. Realmente he publicado una clase entera, que contiene el método citado, y el método main. Dentro del método main, he escrito un codigo que hace una prueba del método &lt;code&gt;cloneArray&lt;/code&gt;, para comprobar que realmente funciona.&lt;br /&gt;&lt;br /&gt;El código que escribes cuando estás desarrollando una aplicación, pero que realmente no tiene otra utilidad que la de asegurar al programador que su código hace lo que tiene que hacer, se llama &lt;b&gt;código andamio&lt;/b&gt; (en inglés, &lt;b&gt;scaffloding&lt;/b&gt;). &lt;br /&gt;&lt;br /&gt;Por ejemplo, toda la clase main del código del otro post. O unas lineas de código que impriman el int que devuelve un método que acabas de hacer;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;public static int sumarDosInts(int a, int b) {&lt;br /&gt;&amp;nbsp return a + b;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static void main(String[] args) {&lt;br /&gt;&amp;nbsp //Código andamio&lt;br /&gt;&amp;nbsp System.out.println("El resultado tiene que ser siete : " + sumarDosInts(5,2));&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;El código andamio es una buena manera de asegurarse de hacer lo correcto, aunque algunas veces puede engañar. Seguro que muchos de vosotros lo usabais sin saber que se llamaba así, como yo :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111936275581322520?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111936275581322520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111936275581322520' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111936275581322520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111936275581322520'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/06/scaffolding.html' title='Scaffolding'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111936152345764318</id><published>2005-06-21T06:37:00.000-07:00</published><updated>2005-06-21T06:45:23.463-07:00</updated><title type='text'>Jugando con arrays</title><content type='html'>&lt;b&gt;Enunciado&lt;/b&gt;&lt;br /&gt;&lt;quote&gt;As an exercise, qrite a method called cloneArray that takes an array of integers as parameter, creates a new array that is the same size, copies the elements from the first array into the new one, and then returns a reference to the new array.&lt;/quote&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Codigo&lt;/b&gt;&lt;br /&gt;&lt;code&gt;class Array {&lt;br /&gt;&amp;nbsp public static int[] cloneArray(int[] aCopiar) {&lt;br /&gt;&amp;nbsp&amp;nbsp  int[] copiado = new int[aCopiar.length];&lt;br /&gt;&amp;nbsp&amp;nbsp for(int contador = aCopiar.length; contador &gt; 0; contador --) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp  copiado[contador - 1] = aCopiar[contador - 1];&lt;br /&gt;&amp;nbsp&amp;nbsp }&lt;br /&gt;&amp;nbsp&amp;nbsp return copiado;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp int[] unArray = new int[4];&lt;br /&gt;&amp;nbsp&amp;nbsp unArray[0] = 12;&lt;br /&gt;&amp;nbsp&amp;nbsp unArray[1] = 24 / unArray[0];&lt;br /&gt;&amp;nbsp&amp;nbsp unArray[2] = unArray[1] * 3;&lt;br /&gt;&amp;nbsp&amp;nbsp unArray[3] = 5;&lt;br /&gt;&amp;nbsp&amp;nbsp int[] otroArrayIgual = cloneArray(unArray);&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println("Esto es igual a 5 ... " + otroArrayIgual[3]);&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111936152345764318?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111936152345764318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111936152345764318' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111936152345764318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111936152345764318'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/06/jugando-con-arrays.html' title='Jugando con arrays'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111917628047736543</id><published>2005-06-19T02:25:00.000-07:00</published><updated>2005-06-19T03:18:00.483-07:00</updated><title type='text'>Glosario</title><content type='html'>&lt;b&gt;Instancia&lt;/b&gt; : Un miembro de una clase. Todos los objetos son instancias.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Constructor&lt;/b&gt; : Un método especial que inicia las variables de instancia de un objeto recien creado.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Clase de arranque&lt;/b&gt; (startup class) : La clase que contiene el método main a partir del qual empieza el flujo de código.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Función&lt;/b&gt; : Un método cuyo resultado depende únicamente de sus parámetros, y no tien otro cometido que devolver un valor. Por ejemplo :&lt;br /&gt;&lt;code&gt;int suma(int a, int b) {&lt;br /&gt;&amp;nbsp&amp;nbsp return a + b;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Programación funcional&lt;/b&gt; : Estilo de programación en el que la mayoría de métodos son funciones.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Modificador&lt;/b&gt; : Método que cambia uno o más de los objetos que recibe como parámetros, y normalmente devuelve un &lt;code&gt;void&lt;/code&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Método de relleno&lt;/b&gt; (fill-in method) : Un tipo de método que coge un objeto vacio como parámetro y "rellena" sus variables de instancia en lugar de generar un valor de retorno.&lt;br /&gt;&lt;br /&gt;[*]Parte del glosario del tema 9 del líbro &lt;a href="http://aprendiendojava.blogspot.com/2005/05/leyendo-sobre-java.html"&gt;How to Think Like a Computer Scientist, Java Edition&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111917628047736543?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111917628047736543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111917628047736543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111917628047736543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111917628047736543'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/06/glosario.html' title='Glosario'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111893333266298495</id><published>2005-06-16T07:30:00.000-07:00</published><updated>2005-06-16T07:48:53.573-07:00</updated><title type='text'>Divine Law</title><content type='html'>Sigo leyendo el libro de Allen B. Downey, &lt;a href="http://aprendiendojava.blogspot.com/2005/05/leyendo-sobre-java.html"&gt;How to think like a Computer Scientist&lt;/a&gt;, y me encanta.&lt;br /&gt;Se vé que el autor está muy rodado en el mundo de la enseñanza, y explica las cosas de forma muy clara y amena.&lt;br /&gt;Me he reido a carcajada limpia con la clasificación que hace en el capítulo cuarto de tipos de convenciones usadas en los codigos fuente, que según él se clasifican en&lt;br /&gt;&lt;br /&gt;  · &lt;b&gt;Ley divina&lt;/b&gt; (divine law). En este subgrupo se incluyen todos aquellos hechos que derivan de las matemáticas o la lógica, como que una comparación entre dos números iguales sea cierta (&lt;code&gt;5 == 5&lt;/code&gt;). El ejemplo que el pone es que la suma es conmutativa. Todas las "leyes divinas" están presentes en todos los lenguajes de programación, no solo en Java.&lt;br /&gt; · &lt;b&gt;Normas de Java&lt;/b&gt; (rules of Java). Aquellas peculiaridades sintácticas y semánticas de Java frente a los otros lenguajes de programación, como que el símbolo '+' sirva para concatenar dos cadenas, además de para sumar dos números. O que la palabra reservada 'extends' sirva para indicar una herencia.&lt;br /&gt;  · &lt;b&gt;Estilo y convención&lt;/b&gt; (style and convention). Todas esas "normas no escritas" que hacen el codigo entendible para el ojo humano. Por nombrar algunas, las convenciones a la hora de nombrar clases/variables/métodos, el uso del tabulador y/o espacios para hacer un código estructurado, etc ...&lt;br /&gt;&lt;br /&gt;Personalmente creo que es una clasificación muy acertada. Además nos sirve para recordar, una vez más, que el codigo debe ser limpio y ordenado, en la medida de lo posible.&lt;br /&gt;&lt;br /&gt;[&lt;span style="font-weight: bold;"&gt;OFFTOPIC&lt;/span&gt;] Nadie me ha comentado aún nada de las librerías 2D, y sigo más perdido que un pulpo en un garaje. En un foro me han hablado de AWT y SWING, pero si os digo la verdad, no me lo he mirado demasiado. ¿Alguna opinión?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111893333266298495?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111893333266298495/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111893333266298495' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111893333266298495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111893333266298495'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/06/divine-law.html' title='Divine Law'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111869019492616453</id><published>2005-06-13T12:03:00.000-07:00</published><updated>2005-06-13T12:16:34.933-07:00</updated><title type='text'>Primero proyecto medianamente serio</title><content type='html'>Hola, mundo!&lt;br /&gt;Después de dos semanas sin postear nada, ni dedicar el más mínimo resquicio de tiempo a aprender cosas nuevas de Java con la excusa de los examenes, vuelvo a las andadas, con más ganas que nunca (y con más tiempo, que también es un ingrediente esencial :D).&lt;br /&gt;&lt;br /&gt;Para compensar todo el tiempo que he estado parado, me he propuesto hacer un pequeño programita con aspiración a ser considerado serio. Mi idea es buscar una libreria de gráficos 2D para Java, algo al estilo de OpenGL o SDL, para representar funciones. &lt;br /&gt;Hasta aqui es bastante sencillo, se puede hacer sin aplicar nada de Programación Orientada a Objetos (de hecho tengo hecho algo muy parecido en C, usando la librería OpenGL). Pero ya que estoy, y ya que en definitiva lo hago para aprender, me gustaría añadir algunas funcionalidades que pudiera implementar usando clases, heréncia, y otras peculiaridades de la POO. Eso si, no haré un codigo complicado, intentaré factorizar lo máximo posible y hacer algo comentado, entendible, y ampliable.&lt;br /&gt;&lt;br /&gt;Otro problema que se me presenta es como hacer que el usuario introduzca la función a representar. Siempre puedo usar alguno de los "lenguajes" matemáticos, tipo MathML, que se pueden parsear mediante varias librerías (como hizo un buen amigo mio, [SPAM]que con C++ se ha montado un buen programita, el KAlgebra, buscad información porque es muy interesante ;)[/SPAM]). Pero el problema es que el usuario debería conocer MathML, y eso no es lo que busco. Yo quiero hacer un programa que pueda usar cualquier persona con unos conocimientos matemáticos básicos (como que es una función :P). &lt;br /&gt;Así que se aceptan sugerencias en cuanto a la entrada de la función por parte del usuario.&lt;br /&gt;También pediría alguna recomendación en cuanto a librerías gráficas, que no tengo ni idea y me voy ahora mismo a ver si me informo un poco.&lt;br /&gt;&lt;br /&gt;¡Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111869019492616453?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111869019492616453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111869019492616453' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111869019492616453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111869019492616453'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/06/primero-proyecto-medianamente-serio.html' title='Primero proyecto medianamente serio'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111754947726836393</id><published>2005-05-31T07:15:00.000-07:00</published><updated>2005-05-31T07:24:37.273-07:00</updated><title type='text'>Otro ejercicio de seguimiento de flujo</title><content type='html'>Los ejercicios que encontré ayer en el libro de Java del que tanto he hablado en las últimas entradas del blog me encantaron. Así que hoy, mientras la profesora de física impartía nociones de dinámica durante su soporífera hora, he escrito algo por el estilo. Es un poco más complicado que los anteriores, pero sigue en la misma linea. Consiste en &lt;i&gt;predecir&lt;/i&gt; el resultado que imprimiria en pantalla su ejecución. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;class Lio {&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void changed(int uno, int dos) {&lt;br /&gt;&amp;nbsp&amp;nbsp if((uno + dos) &lt;= 3 &amp;&amp; (uno + dos) &gt;= 0) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp System.out.print(uno + dos);&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp geo("kirai",12);&lt;br /&gt;&amp;nbsp&amp;nbsp } else if(uno &gt; 3) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp System.out.println("Buuuzz!!");&lt;br /&gt;&amp;nbsp&amp;nbsp }&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void geo(String paco, int llamada) {&lt;br /&gt;&amp;nbsp&amp;nbsp changed(llamada, llamada);&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println(paco);&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static int topstar(int capo) {&lt;br /&gt;&amp;nbsp&amp;nbsp int staedler = 15;&lt;br /&gt;&amp;nbsp&amp;nbsp staedler += capo;&lt;br /&gt;&amp;nbsp&amp;nbsp if(capo &gt; staedler) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp System.out.println("Tas k si ... ");&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp return 5;&lt;br /&gt;&amp;nbsp&amp;nbsp } else {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp System.out.println("Pac||");&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp changed(capo,staedler);&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp return 10;&lt;br /&gt;&amp;nbsp&amp;nbsp }&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp int tipo = topstar(4);&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.print("Hola " + tipo);&lt;br /&gt;&amp;nbsp changed(tipo,-8);&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Por ahora, no salimos de la clase, pero me han rondado por la cabeza muchas ideas ... que si usar el operador if-else (si, ese tan extraño &lt;a href="http://aprendiendojava.blogspot.com/2005/05/operador-if-else.html"&gt;del que hablé&lt;/a&gt;), usar condicionales tipo switch para meter mucha paja y despistar, usar otras clases generando métodos, un poco de herencia, etc ... Solo hay que ser un poco cruel xD&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111754947726836393?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111754947726836393/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111754947726836393' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111754947726836393'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111754947726836393'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/otro-ejercicio-de-seguimiento-de-flujo.html' title='Otro ejercicio de seguimiento de flujo'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111748572126902671</id><published>2005-05-30T13:12:00.000-07:00</published><updated>2005-05-30T13:42:01.286-07:00</updated><title type='text'>Ejercicios y bajadas de intensidad</title><content type='html'>Estos últimos días no he posteado tan activamente como &lt;i&gt;de costumbre&lt;/i&gt; (si es que una costumbre puede establecerse en un periodo tan corto de tiempo), pero tengo excusa por dos motivos. Primero, estoy hasta el cuello de exámenes de evaluación, y, aunque poco, me quitan algo de tiempo. El otro motivo es &lt;a href="http://aprendiendojava.blogspot.com/2005/05/leyendo-sobre-java.html"&gt;el libro que comentava ayer&lt;/a&gt;, con el que estoy intentando asimilar conceptos básicos, a la par que repaso mi pobre inglés técnico.&lt;br /&gt;Del citado libro os paso unos ejercicios la mar de interesantes. La cosa consiste en predecir el resultado de la ejecución del codigo, es decir, averiguar lo que imprimiría el codigo en pantalla. Estos son bastante sencillos :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;public class Buzz {&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void baffle (String blimp) {&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println(blimp);&lt;br /&gt;&amp;nbsp&amp;nbsp zippo ("ping", -5);&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void zippo (String quince, int flag) {&lt;br /&gt;&amp;nbsp&amp;nbsp if (flag &lt; 0) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp System.out.println(quince + " zoop");&lt;br /&gt;&amp;nbsp&amp;nbsp } else {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp System.out.println("ik");&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp baffle(quince);&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp System.out.println("boo-wa-ha-ha");&lt;br /&gt;&amp;nbsp&amp;nbsp }&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp zippo("rattle",13);&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;public class Narf {&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void zoop(String fred, int bob) {&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println(fred);&lt;br /&gt;&amp;nbsp&amp;nbsp if (bob == 5) {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp ping("not ");&lt;br /&gt;&amp;nbsp&amp;nbsp } else {&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp System.out.println("!");&lt;br /&gt;&amp;nbsp&amp;nbsp }&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp int bizz = 5;&lt;br /&gt;&amp;nbsp&amp;nbsp int buzz = 2;&lt;br /&gt;&amp;nbsp&amp;nbsp zoop("just for", bizz);&lt;br /&gt;&amp;nbsp&amp;nbsp clink(2*buzz);&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void clink(int fork) {&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.print("It's ");&lt;br /&gt;&amp;nbsp&amp;nbsp zoop("breakfast ", fork);&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp public static void ping(String strangStrung) {&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println("any" + strangStrung + "more ");&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Son unos ejercicios muy sencillos, pero muy entretenidos. Además son muy útiles, porque muchas veces nos encontraremos con que la salida del programa que acabamos de escribir no será exactamente lo que teníamos en mente, así que tendremos que recorrer el codigo en busca del error de planteamiento, y ejercicios tipo este, en el que tienes que seguir el flujo del codigo, sirven para entrenar esta faceta del programador.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111748572126902671?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111748572126902671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111748572126902671' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111748572126902671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111748572126902671'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/ejercicios-y-bajadas-de-intensidad.html' title='Ejercicios y bajadas de intensidad'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111738032037256856</id><published>2005-05-29T08:14:00.000-07:00</published><updated>2005-05-29T08:25:20.376-07:00</updated><title type='text'>Leyendo sobre Java</title><content type='html'>He encontrado un libro muy interesante sobre Java, titulado &lt;a href="http://greenteapress.com/thinkapjava/thinkapjava.pdf"&gt;How to think like a Computer Scientist, Java Version&lt;/a&gt;. Su autor, Allen B. Downey, lo escribió por el mismo motivo que muchos escriben libros básicos sobre temas técnicos; daba clases y no encontró ningún texto que se adaptara a sus necesidades. Además esta licenciado bajo GNU Free Documentation License. &lt;br /&gt;Con el estoy aprendiendo, aparte de Java, a empezar a pensar como un programador y a llamar a las cosas por su nombre, y es que al autor pone mucho énfasis en la nomenclatura.&lt;br /&gt;También estoy reaprendiendo (en extensión y en calidad) muchas cosas básicas sobre Java y sus métodos más típicos. Por ejemplo, no sabía que &lt;i&gt;println&lt;/i&gt; fuera la unión de &lt;i&gt;print line&lt;/i&gt;, ni que existiera el &lt;i&gt;print&lt;/i&gt;, que no escribe un salto de linea al final del texto, al estilo del printf de C. Y es que, como dice un amigo ...&lt;br /&gt;&lt;blockquote&gt;Creerse sabio es caer en lo más profundo de la ignorancia.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111738032037256856?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111738032037256856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111738032037256856' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111738032037256856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111738032037256856'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/leyendo-sobre-java.html' title='Leyendo sobre Java'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111728176278433240</id><published>2005-05-28T04:49:00.000-07:00</published><updated>2005-05-28T05:02:42.786-07:00</updated><title type='text'>El modificador STATIC</title><content type='html'>Una de los posibles usos de el modificador &lt;b&gt;static&lt;/b&gt; es compartir el valor de una variable miembro entre objetos de una misma clase. Si declaramos una variable miembro de una clase, todos los objetos que declaremos basandonos en esa clase compartiran el valor de aquellas variables a las que se les haya aplicado el modificador &lt;i&gt;static&lt;/i&gt;, y se podrá modificar el valor de este desde todas. &lt;br /&gt;Un caso en el que nos podría ser muy util este modificador, es en una clase que nos diga la cantidad de objetos que se han creado basandose en ella. Podemos meter una linea de codigo en el constructor que incremente la variable contador con el modificador static, y asi cada vez que se declare un objeto el contador se incrementará. Desde cualquier objeto podremos consultar el valor del contador. El codigo sería algo asi&lt;br /&gt;&lt;code&gt;class Clase {&lt;br /&gt;&amp;nbsp static int contador;&lt;br /&gt;&lt;br /&gt;&amp;nbsp Clase() {&lt;br /&gt;&amp;nbsp&amp;nbsp  contador++;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp int getContador() {&lt;br /&gt;&amp;nbsp&amp;nbsp  return contador;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class Codigo {&lt;br /&gt;&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp  Clase uno = new Clase();&lt;br /&gt;&amp;nbsp&amp;nbsp  Clase dos = new Clase();&lt;br /&gt;&amp;nbsp&amp;nbsp  Clase tres = new Clase();&lt;br /&gt;&amp;nbsp&amp;nbsp  Clase cuatro = new Clase();&lt;br /&gt;&amp;nbsp&amp;nbsp  System.out.println("Hemos declarado " + uno.getContador() + " objetos.");&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Esto tiene varias ventajas, porque además de ahorrarnos algunas posiciones de memoria (porque todos objetos comparten la misma) podemos crear variables compartidas, cosa que abre la puerta a suculentas posibilidades.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111728176278433240?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111728176278433240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111728176278433240' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111728176278433240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111728176278433240'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/el-modificador-static.html' title='El modificador STATIC'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111727414973900792</id><published>2005-05-28T02:19:00.000-07:00</published><updated>2005-05-28T02:55:49.743-07:00</updated><title type='text'>Las palabras reservadas THIS y SUPER</title><content type='html'>Después de un tiempo sin postear (y sin dedicarle demasiado a Java) por culpa de determinadas obligaciones académicas, vuelvo a la carga para explicar una cosa muy sencilla. &lt;br /&gt;Java nos da estas herramientas para poder hacer nuestro codigo más entendible. La palabra reservada &lt;b&gt;this&lt;/b&gt; permite especificar que la variable que señala (y la señala haciendo &lt;i&gt;this.nombreVariable&lt;/i&gt;) es de la misma clase en la que se usa. &lt;br /&gt;Os podeis preguntar .. ¿para que me sirve esto, si ya se sobreentiende? ¡Yo nunca voy a usar dos variables con el mismo nombre!&lt;br /&gt;Pues yo os voy a comentar un caso en el que &lt;i&gt;this&lt;/i&gt; nos permite crear codigo mucho más facil de entender para aquel que lo lee (y por tanto, más sencillo para nosotros cuando lo tengamos que releer/modificar/mejorar). Mirad el siguiente codigo :&lt;br /&gt;&lt;code&gt;class RGB {&lt;br /&gt;&amp;nbsp int red, green, blue;&lt;br /&gt; &lt;br /&gt;&amp;nbsp RGB(int red, int green, int blue) {&lt;br /&gt;&amp;nbsp&amp;nbsp  this.red = red;&lt;br /&gt;&amp;nbsp&amp;nbsp  this.green = green;&lt;br /&gt;&amp;nbsp&amp;nbsp  this.blue = blue;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Como veis, el nombre de los argumentos que se pasan en el constructor son los mismos que las variables de la clase, así que para asignar los valores sin hacer tonterias (tipo &lt;i&gt;red = red&lt;/i&gt;, :D) debemos usar &lt;i&gt;this&lt;/i&gt;. En este caso, el poder usar los nombres red/green/blue en los argumentos nos permite evitar comentar el codigo para indicar que eso es el constructor principal y tal (como nos pasaría si hicieramos algo como &lt;code&gt;RGB(int x, int y, int z)&lt;/code&gt;), ya que solo dandole un vistazo al codigo se entiende perfectamente su función.&lt;br /&gt;&lt;br /&gt;No me cansaré de decirlo. Para lograr un buen source es importante no repetir fragmentos de codigo, usar tipos de variables acorde a la necesidad (si vas a hacer un bucle que solo se repita 50 veces, ¿porque usar un int como contador, cuando puedes usar un byte y ahorrar memoria?), establecer nombres de variables que expresen con claridad lo que van a contener, y comentar solo cuando haga falta. Estas son las claves más sencillas, pero también las más fundamentales.&lt;br /&gt;&lt;br /&gt;La palabra reservada &lt;b&gt;super&lt;/b&gt; sirve para indicar que una variable o un método es de la superclase (espero que os acordeis de nuestra querida heréncia :D). Os pongo un codigo para que entendais su uso&lt;br /&gt;&lt;code&gt;class SuperClase {&lt;br /&gt;&amp;nbsp boolean variableBool;&lt;br /&gt;&lt;br /&gt;&amp;nbsp void setVariableBool() {&lt;br /&gt;&amp;nbsp&amp;nbsp variableBool = true;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class SubClase extends SuperClase {&lt;br /&gt;&amp;nbsp boolean variableBool;&lt;br /&gt;&lt;br /&gt;&amp;nbsp void setVariableBool() {&lt;br /&gt;&amp;nbsp&amp;nbsp variableBool = false;&lt;br /&gt;&amp;nbsp&amp;nbsp super.setVariableBool();&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println("La variable de aqui es " + variableBool);&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println("La de la superclase es " + super.variableBool);&lt;br /&gt;&amp;nbsp  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Codigo {&lt;br /&gt;&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp  SubClase objetoPrueba = new SubClase();&lt;br /&gt;&amp;nbsp&amp;nbsp  objetoPrueba.setVariableBool();&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Como veis, en este codigo la superclase y la subclase tienen una variable y un método que tienen el mismo nombre, pero que hacen funciones diferentes, y los distingimos usando &lt;i&gt;super&lt;/i&gt;. &lt;br /&gt;Aún asi, el poner el mismo nombre a dos variables diferentes no es una buena manera de hacer las cosas, porque puede llevar a confusiones, e incluso el JavaCompiler nos indica &lt;i&gt;warning&lt;/i&gt; cuando compilamos el codigo &lt;br /&gt;&lt;blockquote&gt;servomac@ubuntu:~/coding/java $ javac Codigo.java&lt;br /&gt;&lt;br /&gt;Issued 1 semantic warning compiling "Codigo.java":&lt;br /&gt;&lt;br /&gt;    10.   boolean variableBool;&lt;br /&gt;                  ^----------^&lt;br /&gt;*** Semantic Warning: Field "variableBool" shadows a field of the same name in "SuperClase".&lt;/blockquote&gt;&lt;br /&gt;De nuevo me limpio las manos, y dejo a elección del programador el uso de distintos métodos/variables con el mismo nombre. &lt;br /&gt;Espero que tanto &lt;i&gt;this&lt;/i&gt; como &lt;i&gt;super&lt;/i&gt; os ayuden a entender un poco mejor a Java. ¡Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111727414973900792?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111727414973900792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111727414973900792' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111727414973900792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111727414973900792'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/las-palabras-reservadas-this-y-super.html' title='Las palabras reservadas THIS y SUPER'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111695763279943509</id><published>2005-05-24T10:11:00.000-07:00</published><updated>2005-05-24T11:00:32.813-07:00</updated><title type='text'>Sobrecarga, de métodos y de constructores</title><content type='html'>Los constructores son métodos, con el mismo nombre de la clase, que sirven para definir el valor de las variables de la clase cuando creas el objeto. &lt;br /&gt;Un ejemplo sería este &lt;br /&gt;&lt;code&gt;class UnaClase {&lt;br /&gt;&amp;nbsp byte unaVariable, otraVariable;&lt;br /&gt;&lt;br /&gt;/*Ahora crearemos el constructor. Como veis, tiene el mismo nombre que la clase.*/&lt;br /&gt;&amp;nbsp UnaClase(byte x, byte y) { &lt;br /&gt;&amp;nbsp&amp;nbsp unaVariable = x; otraVariable = y;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Con este constructor ya definido, podremos asignar valores a las variables de la clase justo en el momento en que creamos el objeto. &lt;br /&gt;&lt;code&gt;UnaClase objeto1 = new UnaClase(10,12)&lt;/code&gt;&lt;br /&gt;Como podeis ver, en este caso la variable unaVariable del objeto objeto1 tendría el valor 10, y objeto1.otraVariable valdría 12.&lt;br /&gt;&lt;br /&gt;Por otro lado, es muy posible que diferentes objetos que se basan en la misma clase no necesiten usar el mismo constructor. Imaginemos una clase Clientes, con su nombre, su edad y el nombre de la empresa como variables. De algunos de los objetos que creemos basandonos en esta base conoceremos todos los datos, pero siempre habrá alguno del que desconozcamos la edad, o incluso su nombre. Aqui entra en juego la &lt;b&gt;sobrecarga de constructores&lt;/b&gt;, que consiste en crear un constructor para cada posibilidad (real[*]) que tengamos.&lt;br /&gt;&lt;br /&gt;[*]Como estoy cansado de decir, se tiene que conseguir un equilibrio entre usabilidad (muchos constructores) y codigo entendible (pocos constructores). El programador eficiente debe ser capaz de declarar solo aquellos constructores que realmente se van a usar, sin caer en la tentació de crear constructores para todos los posibles casos, por muy incoherentes que parezcan.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;class Cliente {&lt;br /&gt;&amp;nbsp String nombre, nombreEmpresa;&lt;br /&gt;&amp;nbsp int edad;&lt;br /&gt;&lt;br /&gt;/*El constructor que viene a continuación se usará en el caso de que se conozcan todas las variables*/&lt;br /&gt;&amp;nbsp Cliente(String nombre, String nombreEmpresa, int edad) {&lt;br /&gt;&amp;nbsp&amp;nbsp  this.nombre = nombre; &lt;br /&gt;&amp;nbsp&amp;nbsp this.nombreEmpresa = nombreEmpresa;&lt;br /&gt;&amp;nbsp&amp;nbsp  this.edad = edad;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;/*También es provable que conozcamos el nombre del cliente, y el nombre de su empresa, pero desconozcamos su edad. Por esto vamos a declarar un constructor asi. */&lt;br /&gt;&amp;nbsp Cliente(String nombre, String nombreEmpresa) {&lt;br /&gt;&amp;nbsp&amp;nbsp  this.nombre = nombre;&lt;br /&gt;&amp;nbsp&amp;nbsp this.nombreEmpresa = nombreEmpresa;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Sobrecarga {&lt;br /&gt;&amp;nbsp public static void main(String [] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp  String nombre, empresa;&lt;br /&gt;&amp;nbsp&amp;nbsp  int edad;&lt;br /&gt;&lt;br /&gt;/*Ahora creamos un objeto basandonos en la clase cliente, imaginando que conocemos todos los valores*/&lt;br /&gt;&amp;nbsp&amp;nbsp Cliente paco = new Cliente("Paco","EmpresaFalsa",55);&lt;br /&gt;/*Aqui un objeto de la clase Cliente del que desconocemos la edad*/&lt;br /&gt;&amp;nbsp&amp;nbsp Cliente julian = new Cliente("Julian","EmpresaFalsa");&lt;br /&gt; &lt;br /&gt;&amp;nbsp&amp;nbsp nombre = paco.nombre;&lt;br /&gt;&amp;nbsp&amp;nbsp empresa = paco.nombreEmpresa;&lt;br /&gt;&amp;nbsp&amp;nbsp edad = paco.edad;&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println(nombre + ", de " + empresa + ", tiene " + edad);&lt;br /&gt; &lt;br /&gt;&amp;nbsp&amp;nbsp nombre = julian.nombre;&lt;br /&gt;&amp;nbsp&amp;nbsp empresa = julian.nombreEmpresa;&lt;br /&gt;&amp;nbsp&amp;nbsp edad = julian.edad;&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println(nombre + " trabaja en " + empresa + ".");  &lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;La &lt;b&gt;sobrecarga de métodos&lt;/b&gt; es justo lo mismo; creamos varios métodos con el mismo nombre que actuen diferente segun el tipo de los parámetros de entrada. Por ejemplo, queremos hacer un método que devuelva el resultado de la suma de los dos parametros de entrada, pero no sabemos si será un entero o si tendrá decimales, así que tendremos que hacer un método para el caso de los decimales, y otro con el mismo nombre para el caso de los enteros.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;class Calculadora {&lt;br /&gt;&amp;nbsp int suma(int x, int y) {&lt;br /&gt;&amp;nbsp&amp;nbsp  return (x + y);&lt;br /&gt;&amp;nbsp }&lt;br /&gt; &lt;br /&gt;&amp;nbsp float suma(float x, float y) {&lt;br /&gt;&amp;nbsp&amp;nbsp return (x + y);&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Servo {&lt;br /&gt;&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp int operacion1;&lt;br /&gt;&amp;nbsp&amp;nbsp float operacion2;&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp Calculadora sumador = new Calculadora();&lt;br /&gt;&amp;nbsp&amp;nbsp operacion1 = sumador.suma(2,3);&lt;br /&gt;&amp;nbsp&amp;nbsp operacion2 = sumador.suma(0.23F, 12.53F);&lt;br /&gt;  &lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println("La suma de los enteros 2 y 3 es " + operacion1);&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println("Sumando 0.23 y 12.53, se consigue " + operacion2);&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111695763279943509?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111695763279943509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111695763279943509' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111695763279943509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111695763279943509'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/sobrecarga-de-mtodos-y-de.html' title='Sobrecarga, de métodos y de constructores'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111686787668387278</id><published>2005-05-23T09:47:00.000-07:00</published><updated>2005-05-29T09:06:10.390-07:00</updated><title type='text'>Ejercicios básicos</title><content type='html'>Buscando por la red he encontrado unos &lt;a href="http://dis.um.es/~bmoros/privado/practicas/Curso04-05/ejercicios1.pdf&lt;br /&gt;"&gt;ejercicios propuestos de clases y objetos&lt;/a&gt;, y he empezado a hacerlos. Son parte de la asignatura de &lt;b&gt;Programación Orientada a Objetos&lt;/b&gt; de la Universidad de Murcia. Podeis encontrar su página web en &lt;a href="http://dis.um.es/~bmoros/"&gt;este enlace&lt;/a&gt;. En la parte teórica de la asignatura se trabaja con los lenguajes orientados a objetos &lt;i&gt;Eiffel&lt;/i&gt;, &lt;i&gt;C++&lt;/i&gt; y &lt;i&gt;Java&lt;/i&gt;, pero las prácticas se entregan solo en este último, Java.&lt;br /&gt;&lt;br /&gt;El enunciado de lo primero que he hecho dice asi :&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;1.- Implementar la &lt;b&gt;clase Posicion&lt;/b&gt; que represente un punto (x,y) en el eje de las coordenadas. Cada posición viene definida por dos valores enteros &lt;b&gt;x&lt;/b&gt; e &lt;b&gt;y&lt;/b&gt;. Las operaciones disponibles son:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt; &lt;il&gt; · Constructor por defecto, se corresponde con la posición (0,0).&lt;br /&gt; &lt;il&gt; · Constructor al que se le pasa como parámetro los valores inciales de las coordenadas X e Y.&lt;br /&gt; &lt;il&gt; · Constructor de copia.&lt;br /&gt; &lt;il&gt; · Métodos para modificación y consulta (set/get) de los atributos de la clase.&lt;br /&gt; &lt;il&gt; · Métodos para incrementar y decrementar los valores de cada una de las coordenadas de la posición (incX, incY, decX, decY).&lt;br /&gt; &lt;il&gt; · Un método para establecer los valores de las coordenadas (setXY).&lt;br /&gt;&lt;/ul&gt; &lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Y siguiendo este enunciado, he escrito este codigo &lt;br /&gt;&lt;br /&gt;&lt;code&gt;class Posicion {&lt;br /&gt;&amp;nbsp int x, y;&lt;br /&gt;&lt;br /&gt;/*Constructor por defecto*/&lt;br /&gt;&amp;nbsp Posicion() {&lt;br /&gt;&amp;nbsp&amp;nbsp  this.x = 0;&lt;br /&gt;&amp;nbsp&amp;nbsp  this.y = 0;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;/*Constructor al que se le pasa como parámetro los valores&lt;br /&gt;iniciales de las coordenadas X e Y.*/&lt;br /&gt;&amp;nbsp Posicion(int x, int y) { &lt;br /&gt;&amp;nbsp&amp;nbsp  this.x = x;&lt;br /&gt;&amp;nbsp&amp;nbsp  this.y = y;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;/*Métodos para modificación y consulta*/&lt;br /&gt;&amp;nbsp void setX(int x) {&lt;br /&gt;&amp;nbsp&amp;nbsp  this.x = x;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp void setY(int y) {&lt;br /&gt;&amp;nbsp&amp;nbsp  this.y = y;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp int getX() {&lt;br /&gt;&amp;nbsp  return x;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp int getY() {&lt;br /&gt;&amp;nbsp&amp;nbsp  return y;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;/* Métodos para incrementar y decrementar los atributos*/&lt;br /&gt;&amp;nbsp void incX() {&lt;br /&gt;&amp;nbsp&amp;nbsp  x++;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp void incY() {&lt;br /&gt;&amp;nbsp&amp;nbsp  y++;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp void decX() {&lt;br /&gt;&amp;nbsp&amp;nbsp x--;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp void decY() {&lt;br /&gt;&amp;nbsp&amp;nbsp  y--;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;/*Método para establecer los valores de las coordenadas*/&lt;br /&gt;&amp;nbsp void setXY(int x, int y) {&lt;br /&gt;&amp;nbsp&amp;nbsp  this.x = x;&lt;br /&gt;&amp;nbsp&amp;nbsp  this.y = y;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Como veis, lo único que me falta es el constructor de copia, pero es algo que no he hecho nunca y aún desconozco. Queda en la lista de cosas TO-LEARN (pero en la lista que realmente se va siguiendo, no el otra en la que dejas los temas imposibles .. xD).&lt;br /&gt;¡Aprovecho para pedir rectificaciones y/o ayudas en el codigo, se agradece mucho si alguien lo revisa! ¡Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111686787668387278?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111686787668387278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111686787668387278' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111686787668387278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111686787668387278'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/ejercicios-bsicos.html' title='Ejercicios básicos'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111678218032400899</id><published>2005-05-22T09:55:00.000-07:00</published><updated>2005-05-22T10:16:20.326-07:00</updated><title type='text'>Operador if-else</title><content type='html'>Java tiene un operador que nos sirve para asignar un valor a una varible, dependiendo de una condición determinada. Tiene esta estructura :&lt;br /&gt;&lt;code&gt;[variable] = [condicion]?[valorSiVerdadero]:[valorSiFalso];&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;He aqui algun ejemplo :&lt;br /&gt;&lt;code&gt;byte numero; &amp;nbsp&amp;nbsp //Declaramos la variable numero&lt;br /&gt;numero = 10; &amp;nbsp&amp;nbsp //Le asignamos el entero 10&lt;br /&gt;boolean variBoleana; &amp;nbsp&amp;nbsp //Declaramos la variable variBoleana&lt;br /&gt;variBoleana = numero &lt; 50 ? true : false; &amp;nbsp&amp;nbsp /*como 10 es menor que 50, a variBoleana le es asignado el valor true*/ &lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Esto puede suponer un ahorro de lineas de codigo, y es una ventaja si se conoce bien este operador, pero tiene sus repercusiones negativas; si se desconoce el codigo puede parecer un poco &lt;i&gt;críptico&lt;/i&gt; en aquellos casos en que el programador abuse de este asignador. Así que la elección de su uso o desuso se deja en manos del programador experimentado, que debe elegir dependiendo de la situación.&lt;br /&gt;Personalmente creo que lo ideal es que los que lean codigo fuente conozcan el lenguaje que estan manteniendo, así que lo importante es conocer realmente bien el funcionamiento de este operador y no hacerse lios. Si tu realmente dominas el lenguaje Java (y esto incluye este tipo de operadores) no hace falta sacrificar más tiempo codeando en pos del codigo entendible. Hay que saber encontrar un equilibrio entre codigo facil de mantener en un futuro, cómodo a la hora de escribir, y potente y adequado a la hora de ejecutarse.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111678218032400899?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111678218032400899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111678218032400899' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111678218032400899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111678218032400899'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/operador-if-else.html' title='Operador if-else'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111678069050374765</id><published>2005-05-22T09:05:00.000-07:00</published><updated>2005-05-22T09:51:30.513-07:00</updated><title type='text'>Sentencia condicional IF en Java</title><content type='html'>La sentencia condicional if/else tiene esta forma &lt;br /&gt;&lt;code&gt;if(condicion)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp //Codigo a ejecutar si se cumple la condición&lt;br /&gt;}&lt;br /&gt;else&lt;br /&gt;{&lt;br /&gt;&amp;nbsp //Codigo a ejecutar si la condición es falsa&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;La condición debe ser un enunciado boleano (verdadero o falso), i se pueden usar varios operadores. Los más importantes son los de igualdad (&lt;i&gt;variable1 == variable2&lt;/i&gt;, devuelve true si ambas variables contienen lo mismo), diferencia (&lt;i&gt;variable1 != variable2&lt;/i&gt;, devuelve true si son diferentes), mayor que (&lt;i&gt;variable1 &gt; variable2&lt;/i&gt;, con el resultado verdadero si la primera variable es mayor a la segunda), menor que (&lt;i&gt;variable1 &lt; variable2&lt;/i&gt;, con el resultado verdadero si la primera variable es menor a la segunda), mayor o igual que (&lt;i&gt;variable1 &gt;= variable2&lt;/i&gt;, que devuelve true cuando la variable1 es mayor o igual que la variable 2), menor o igual que (&lt;i&gt;variable1 &lt;= variable2&lt;/i&gt;, también devuelve true cuando la segunda variable es mayor o igual que la primera).&lt;br /&gt;&lt;br /&gt;Como condición también podemos tener a un booleano. He aqui un ejemplo &lt;br /&gt;&lt;code&gt;boolean verdadero = true;&lt;br /&gt;if(verdadero) {&lt;br /&gt;&amp;nbsp System.out.println("Esto se ejecutará, porque la condición resulta verdadera.");&lt;br /&gt;}&lt;br /&gt;else {&lt;br /&gt;&amp;nbsp System.out.println("Esto no se ejecutará.");&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;También podemos usar operadores lógicos para crear sentencias condicionales algo más complejas, como &amp;&amp; (AND), || (OR) o ! (NOT). Por ejemplo, imaginad que tenemos un numero entero, i queremos que se imprima en pantalla cuando este comprendido entre 10 y 20. Para esto tenemos que comprovar que el numero sea mayor o igual que 10, pero también debe ser menor o igual que 20, así que usaremos el &amp;&amp; (AND).&lt;br /&gt;&lt;code&gt;if (numero &gt;= 10 &amp;&amp; numero &lt;= 20)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp System.out.println(numero);&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Ahora imaginad que queremos imprimir un numero que este comprendido entre 10 y 20 o entre 30 y 40. Si el numero es 15, se imprimirá en pantalla, si es 25 no, pero si es 35 también se imprimirá. Para esto tenemos que mezclar los operadores AND (&amp;&amp;) y OR (||).&lt;br /&gt;&lt;code&gt;&lt;br /&gt;if ( (numero &gt;= 10 &amp;&amp; numero &lt;= 20) || (numero &gt;= 30 &amp;&amp; numero &lt;= 40) )&lt;br /&gt;{&lt;br /&gt;&amp;nbsp System.out.println("El numero " + numero + " esta comprendido entre 10 y 20 o entre 30 y 40");&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Hasta aqui (y más en extensión, porque yo solo he comentado los mecanismos que más conozco) el IF que se implementa en Java es igual al de PHP, C, y otros lenguajes, usando incluso los mismos operadores.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111678069050374765?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111678069050374765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111678069050374765' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111678069050374765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111678069050374765'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/sentencia-condicional-if-en-java.html' title='Sentencia condicional IF en Java'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111669064868817988</id><published>2005-05-21T08:32:00.000-07:00</published><updated>2005-05-21T08:50:48.693-07:00</updated><title type='text'>¿Qué es esto de la herencia?</title><content type='html'>Una de las características de los lenguajes de programación orientada a objetos (POO) es la &lt;i&gt;herencia&lt;/i&gt;. La herencia es un mecanismo que nos permite crear nuevas clases basandonos en clases ya creadas, y nos ayuda a evitar la repetición de codigo.&lt;br /&gt;Imaginemad que necesitamos crear una aplicación que nos ayude a catalogar los animales que nos encontremos cuando paseemos por el bosque. Todos tendran elementos en común (todos tendrán patas, así como todos tendrán un nombre científico, etc ...), que podremos establecer como variables en la clase principal, que llamaremos Animal. Pero también tendrán peculiaridades dependiendo de si són mamiferos u otros, así que tendremos que hacer subclases que contengan las peculiaridades de los insectos y demás, además de las própias de todos los animales. Aqui es cuando entra en juego la herencia, ya que gracias a ella podemos crear subclases que heredaran las variables y los métodos de su clase "madre", además de poder añadir nuevos métodos y nuevas variables a la nueva subclase.&lt;br /&gt;En Java especificamos cual es la clase de la que debe heredar variables y métodos mediante inclusión de la palabra reservada &lt;i&gt;extends&lt;/i&gt; seguida del nombre de la clase madre, justo después de el nombre de la subclase.&lt;br /&gt;&lt;code&gt;class nombreSubclase extends claseMadre {&lt;br /&gt;&amp;nbsp /*Variables y métodos própias de la subclase*/&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;En este caso la clase nombreSubclase heredaría las variables y los métodos de la clase claseMadre.&lt;br /&gt;&lt;br /&gt;Añado un pequeño codigo que ejemplifica el uso de la herencia de manera muy básica. Ya sabeis que para compilar el codigo le debeis dar el nombre de la clase en la que este el método main seguido de la extensión &lt;i&gt;.java&lt;/i&gt; (en este caso seria &lt;i&gt;Herencia.java&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;&lt;code&gt;class Animal { &amp;nbsp&amp;nbsp//La clase madre&lt;br /&gt;&amp;nbsp String nombre;&lt;br /&gt;&amp;nbsp byte numeroPatas;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Mamifero extends Animal { &amp;nbsp&amp;nbsp /*Toma Animal como clase madre*/&lt;br /&gt;&amp;nbsp byte mesesGestacion;&lt;br /&gt;&lt;br /&gt;&amp;nbsp void nombreAnimal() {&lt;br /&gt;&amp;nbsp&amp;nbsp  System.out.println(nombre);&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Herencia {&lt;br /&gt;&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp  Mamifero humano = new Mamifero(); &amp;nbsp&amp;nbsp //Creamos el objeto humano&lt;br /&gt;&amp;nbsp&amp;nbsp  humano.nombre = "Homo Sapiens";&lt;br /&gt;&amp;nbsp&amp;nbsp  humano.numeroPatas = 2;&lt;br /&gt;&amp;nbsp&amp;nbsp  humano.mesesGestacion = 9;&lt;br /&gt;&amp;nbsp&amp;nbsp  humano.nombreAnimal();&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111669064868817988?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111669064868817988/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111669064868817988' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111669064868817988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111669064868817988'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/qu-es-esto-de-la-herencia.html' title='¿Qué es esto de la herencia?'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111662997911925603</id><published>2005-05-20T15:43:00.000-07:00</published><updated>2005-05-20T15:59:39.123-07:00</updated><title type='text'>Fe de erratas</title><content type='html'>Ya he encontrado dos errores en mis anteriores posts, y estoy muy orgulloso de ello :D. No, no soy como el gilipollas de Buenafuente, pero es que mi intención con este blog era ir corrigiendome y a la vez transmitiendo algo, para quien quisiera leer a alguien en apuros xD.&lt;br /&gt;Lo que he visto que estava mal, es que cuando hablé de los tipos de variables me dejé a un tipo muy importante, las variables tipo &lt;i&gt;String&lt;/i&gt;. Como debeis saber los que conozcais algun lenguaje de programación, los strings són cadenas de caracteres. Un ejemplo práctico :&lt;br /&gt;&lt;code&gt;String cadenaCaracteres;&lt;br /&gt;cadenaCaracteres = "hola, soy una variable tipo string";&lt;br /&gt;System.out.println(cadenaCaracteres);&lt;/code&gt;&lt;br /&gt;Debeis fijaros en que esta va a contracorriente, ya que todos los tipos de variables se indican en minúscula (int, char, boolean), y en canvio esta va en mayúscula. Cuando me entere realmente porque lo publicaré :P.&lt;br /&gt;&lt;br /&gt;El otro error es que, en el codigo en el que explicava (o intentava explicar) lo que eran los métodos, creé métodos que servian para definir el valor de las variables que formavan la clase. Esto puede dar lugar a confusiones, ya que parece que las variables de una clase no se pueden definir/establecer desde otro método, y no es asi, simplemente pones el nombre del objeto y el nombre de la variable a definir separados por un punto, como si fuera un método. De nuevo me respaldo en el código para intentar explicarme, porque tampoco me doy demasiado a entender :P&lt;br /&gt;&lt;code&gt;class Zapato {&lt;br /&gt;&amp;nbsp String marca;&lt;br /&gt;&amp;nbsp byte numeroPie;&lt;br /&gt;&amp;nbsp byte precioEuros;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class Principal {&lt;br /&gt;&amp;nbsp public static void main(String[] args) &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp //Método principal&lt;br /&gt;&amp;nbsp&amp;nbsp Zapato allStar = new Zapato(); &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp /*Creamos el objeto allStar, con la clase Zapato como plantilla*/&lt;br /&gt;&amp;nbsp&amp;nbsp allStar.marca = "Converse"; &amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp /*A la variable marca del objeto allStar de asignamos el string Converse*/ &lt;br /&gt;&amp;nbsp&amp;nbsp allStar.numeroPie = "40";&lt;br /&gt;&amp;nbsp&amp;nbsp allStar.precioEuros = "50";&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;¡¡Espero que lo entendais, almenos yo me quedo más tranquilo y digo un par de chorradas menos en el blog :D!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111662997911925603?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111662997911925603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111662997911925603' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111662997911925603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111662997911925603'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/fe-de-erratas.html' title='Fe de erratas'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111652302767234713</id><published>2005-05-19T10:12:00.000-07:00</published><updated>2005-05-19T10:17:07.676-07:00</updated><title type='text'>Clases, métodos y objetos</title><content type='html'>Para todos aquellos que nos iniciamos en el mundo de la programación orientada a objetos y en especial en el mundo de Java, hay tres vocablos técnicos que oimos hasta la saciedad en los manuales, tutoriales y cursos, pero que tanto para quien empiezan en el mundo de la programación como para aquellos que vienen del paradigma de la programación estructurada son un tanto dificiles de entender; las &lt;i&gt;clases&lt;/i&gt;, &lt;i&gt;objetos&lt;/i&gt; y &lt;i&gt;métodos&lt;/i&gt;. Por esto intentaré explicar por encima "quien es quien" en el mundo de la POO, y como podemos implementarlo en Java, ya que son la espina dorsal de este lenguaje de programación.&lt;br /&gt;Una &lt;i&gt;clase&lt;/i&gt; es un conjunto de primitivos y métodos relacionados entre si. &lt;a href="http://aprendiendojava.blogspot.com/2005/05/variables.html"&gt;Ya expliqué&lt;/a&gt; lo que eran los primitivos,&lt;br /&gt;ahora le toca a los métodos. Un &lt;i&gt;método&lt;/i&gt; es parecido a lo que, en programación estructurada se llama función. Es decir, un fragmento de codigo al que se llama, acompañado de unos datos de entrada, y produce una determinada salida. Para esto tenemos que indicar el tipo de los primitivos de entrada, el tipo de los de salida, el nombre del método y el trabajo que realizara.&lt;br /&gt;&lt;code&gt;[tipoPrimitivoSalida] [nombreMétodo] ([tipoPrimitivoEntrada] [nombrePrimitivoEntrada]) {&lt;br /&gt;&amp;nbsp//Codigo del método&lt;br /&gt;&amp;nbsp return primitivoSalida;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Para ser más explicitos, vamos a poner un ejemplo porque no creo que me haya explicado demasiado bien. Imagina que queremos hacer un método al que le pasamos un parametro determinado (un primitivo tipo int) y devuelva el resultado del primitivo de entrada más 5. Primero definimos el tipo del primitivo de entrada y el de salida (en nuestro caso ambos seran tipo int). Seguidamente, le damos un nombre (en este caso lo he bautizado como sumaCinco) y lo escribimos :&lt;br /&gt;&lt;code&gt;int sumaCinco(int entrada) {&lt;br /&gt;&amp;nbsp return entrada + 5;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Para usar este método, podemos hacer lo siguiente&lt;br /&gt;&lt;code&gt;int numero;&lt;br /&gt;numero = sumaCinco(10);&lt;br /&gt;System.out.println("El resultado es " + numero + ".");&lt;/code&gt;&lt;br /&gt;Como podeis imaginar, el resultado es, efectivamente, 5. &lt;br /&gt;Un detalle importante que me he olvidado comentar es el tema de los &lt;i&gt;modificadores&lt;/i&gt;. No entraré demasiado en detalle con esto, pero debemos saber que para usar un método desde otro método tipo &lt;i&gt;static&lt;/i&gt; (como el método main, que se declara como &lt;i&gt;public static void main(String[] args)&lt;/i&gt;). Otro tipo de modificador es el &lt;i&gt;public&lt;/i&gt;, que permite que el método sea usado desde otro paquete. Pero como en nuestros pequeños programas aún no usamos paquetes, lo dejaremos para otro dia. Para terminar con esto, una cosa muy importante, debo decir que los modificadores se especifican justo antes de poner el tipo del primitivo de salida. Completando el esquema de un método estandar que había empezado antes, nos queda esto &lt;br /&gt;&lt;code&gt;[modificadores] [tipoPrimitivoSalida] [nombreMétodo] ([tipoPrimitivoEntrada] [nombrePrimitivoEntrada]) {&lt;br /&gt;&amp;nbsp //Codigo del método&lt;br /&gt;&amp;nbsp return primitivoSalida;&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Ahora que ya sabemos lo que son los primitivos y los métodos, podemos crear una clase. Como he dicho al principio, una clase es un conjunto de primitivos y métodos, así que también podemos hacer un esquemilla de como sería una clase estandar &lt;br /&gt;&lt;code&gt;class NombreClase {&lt;br /&gt;&amp;nbsp //Primitivos&lt;br /&gt;&lt;br /&gt;&amp;nbsp //Métodos&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;Así como los nombres de los primitivos empiezan con una minúscula por convención, los nombres de clases empiezan con una mayúscula por el mismo motivo.&lt;br /&gt;Para dejarlo claro, hagamos un ejemplo. Queremos crear una clase que nos permita "simular" un disco de música. Los parametros que definen un disco son su título, el nombre del grupo que lo edita, el estilo de música de sus canciones, el número de canciones, el nombre de la productora, y demás. Estos serían los primitivos de la clase. ¿Y que pasa con los métodos? Pues en nuestra clase DiscoMusica podrían ser métodos que especificaran estos valores (los primitivos) para cada cd de nuestra coleccion. Un método llamado definirEstilo, al que le pasasemos un string con el nombre del estilo de música, y un método para definir cada primitivo. Para ponernos lo sencillo y no complicarnos con el uso de strings o arrays, solo trabajaremos con enteros, y simplificaremos mucho la clase. También pondré un método que nos devuelva el número de componentes del grupo, mediante un &lt;i&gt;return&lt;/i&gt;El codigo sería asi&lt;br /&gt;&lt;code&gt;class DiscoMusica {&lt;br /&gt;&amp;nbsp int numeroCanciones;&lt;br /&gt;&amp;nbsp int numeroComponentesGrupo;&lt;br /&gt;&amp;nbsp int añoPublicacion;&lt;br /&gt;&lt;br /&gt;&amp;nbsp void definirNumeroCanciones(int numero) {&lt;br /&gt;&amp;nbsp&amp;nbsp numeroCanciones = numero;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp void definirNumeroComponentes(int num) {&lt;br /&gt;&amp;nbsp&amp;nbsp numeroComponentesGrupo = num;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp void definirAño(int año) {&lt;br /&gt;&amp;nbsp&amp;nbsp añoPublicacion = año;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;&lt;br /&gt;&amp;nbsp int devolverNumeroComponentes() {&lt;br /&gt;&amp;nbsp&amp;nbsp return numeroComponentesGrupo;&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt; &lt;br /&gt;¡Hecho, una clase que &lt;i&gt;pseudo&lt;/i&gt; define un disco! Tenemos primero los tres primitivos, y luego sus métodos que los definen. Muy bien, pero esto define un disco genérico. Imaginemos que queremos hacer una clasificacion de 3 discos, ¿tengo que hacer una clase diferente para cada uno de ellos? ¡Pues claro que no, porque aqui entran en juego los famosos &lt;i&gt;objetos&lt;/i&gt;! Un objeto no es más que una personalificación de una clase, el conjunto de primitivos y métodos definidos en la clase, que ahora definen un objeto determinado (por ejemplo, disco1, disco2, disco3 ...). Para definir un objeto, debemos especificar en que clase se basará, con la siguiente sintaxis&lt;br /&gt;&lt;code&gt;[nombreClase] [nombreObjeto] = new [nombreClase]();&lt;/code&gt;&lt;br /&gt;Por ejemplo, para crear un objeto llamado disco1 basado en la clase que creamos anteriormente, hacemos &lt;br /&gt;&lt;code&gt;DiscoMusica disco1 = new DiscoMusica();&lt;/code&gt;&lt;br /&gt;Ahora que ya tenemos el objeto disco1, podemos asignar un valor a sus primitivos. Podemos usar los métodos del objeto disco1 que hemos creado usando la clase DiscoMusica (como veis, en esta frase se resumen los 3 conceptos que quiero dejar claros) usando el nombre del objeto junto con el nombre del método a usar, separados por un punto entre ellos&lt;br /&gt;&lt;code&gt;[nombreObjeto].[nombreMétodo]([primitivosEntrada]);&lt;/code&gt;&lt;br /&gt;En nuestro caso, vamos a especificar el número  de componentes, canciones y el año publicación del disco1 &lt;br /&gt;&lt;code&gt;disco1.definirNumeroCanciones(14);&lt;br /&gt;disco1.definirNumeroComponentes(3);&lt;br /&gt;disco1.definirAño(2005);&lt;/code&gt;&lt;br /&gt;También podemos usar el método que nos devuelve el numero de componentes del objeto disco1&lt;br /&gt;&lt;code&gt;System.out.println("Hay " + disco1.devolverNumeroComponentes() + " músicos.");&lt;/code&gt;&lt;br /&gt;Con esto imprimimos por pantalla la cadena "Hay ", concatenada (el operador + suma numeros, pero también sirve para unir dos o más cadenas) con el resultado de &lt;i&gt;disco1.devolverNumeroComponentes()&lt;/i&gt;, y también lo concatena con la cadena " músicos.". El resultado es &lt;i&gt;Hay 3 músicos.&lt;/i&gt;, que es imprimido por pantalla.&lt;br /&gt;&lt;br /&gt;Si has llegado aqui, espero que te haya quedado claro todo lo explicado aqui. Ahora mismo publico el codigo fuente de la explicación, totalmente funcional, en otra entrada. ¡Saludos!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111652302767234713?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111652302767234713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111652302767234713' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111652302767234713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111652302767234713'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/clases-mtodos-y-objetos.html' title='Clases, métodos y objetos'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111641002443961461</id><published>2005-05-18T02:44:00.000-07:00</published><updated>2005-05-18T02:53:44.443-07:00</updated><title type='text'>Variables (Codigo de respaldo)</title><content type='html'>&lt;code&gt;class Ejemplo {&lt;br /&gt;&amp;nbsp  public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp  boolean verdaderoFalso;              //Declaramos una variable de cada tipo&lt;br /&gt;&amp;nbsp&amp;nbsp  byte enteroBits8;&lt;br /&gt;&amp;nbsp&amp;nbsp  short enteroBits16;&lt;br /&gt;&amp;nbsp&amp;nbsp  int enteroBits32;&lt;br /&gt;&amp;nbsp&amp;nbsp  long enteroBits64;&lt;br /&gt;&amp;nbsp&amp;nbsp  float comaFlotanteSimple;&lt;br /&gt;&amp;nbsp&amp;nbsp  double comaFlotanteDoble;&lt;br /&gt;&lt;br /&gt;&amp;nbsp&amp;nbsp verdaderoFalso = true;               //Asignamos valores a las variables&lt;br /&gt;&amp;nbsp&amp;nbsp enteroBits8 = 15;&lt;br /&gt;&amp;nbsp&amp;nbsp enteroBits16 = -30500;&lt;br /&gt;&amp;nbsp&amp;nbsp enteroBits32 = 9878677;&lt;br /&gt;&amp;nbsp&amp;nbsp enteroBits64 = 99999999999L;         //Recordad que se pone una L al final&lt;br /&gt;&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp&amp;nbsp  // del numero para especificar que se trata de un long&lt;br /&gt;&amp;nbsp&amp;nbsp comaFlotanteSimple = 222.22F;        //Para indicar que es un float, una F&lt;br /&gt;&amp;nbsp&amp;nbsp comaFlotanteDoble = 6545.123243D;    //Para double ponemos una D al final&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111641002443961461?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111641002443961461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111641002443961461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111641002443961461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111641002443961461'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/variables-codigo-de-respaldo.html' title='Variables (Codigo de respaldo)'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111640830282266823</id><published>2005-05-18T01:26:00.000-07:00</published><updated>2005-05-18T02:26:55.970-07:00</updated><title type='text'>Variables</title><content type='html'>Uno de los pilares principales de la programación es el uso de variables. En Java encontramos muchos tipos de variables, capaces de almacenar todos los tipos de datos que necesitemos. Pero al estar hablando de programación Orientada a Objetos tenemos que diferenciar variables de objetos. Las variables, en Java, son llamados primitivos. Simplemente almacenan un valor. En canvio, un objeto es un conjunto de variables y métodos. Como aún no hemos tratado los conceptos de clase y objeto, tan importantes en Java, la explicación anterior puede parecer difusa. No os preocupeis, que cuando tenga realmente claros los mecanismos de declaración y uso de clases escribiré un pequeño apunte aclaratorio sobre ellas. Hasta el momento, los que ya sabeis algo de programación podeis tratar a los &lt;i&gt;primitivos&lt;/i&gt; como variables de toda la vida.&lt;br /&gt;Tenemos distintos tipos de primitivos :&lt;br /&gt;&lt;br /&gt;· &lt;b&gt;boolean&lt;/b&gt;. Este tipo de variable solo puede tomar dos valores, o &lt;i&gt;true&lt;/i&gt; o &lt;i&gt;false&lt;/i&gt;. Por defecto, si no se le asigna ningún valor, le corresponde el valor &lt;i&gt;false&lt;/i&gt;.&lt;br /&gt;· &lt;b&gt;char&lt;/b&gt;. Las variables de caracteres pueden contener cualquier caracter, tanto numeros, como letras, como signos. El valor por defecto es NULL.&lt;br /&gt;· &lt;b&gt;byte&lt;/b&gt;. Esta variable puede comprender valores numéricos enteros entre -128 y +127. Se caracteriza por su ligereza, ya que solo ocupa 8 bits (un byte), pero su utilidad es reducida.&lt;br /&gt;· &lt;b&gt;short&lt;/b&gt;. Igual que byte, pero ocupando el doble de memoria (dos bytes) y permitiendo asignar valores mucho más grande (exactamente desde -32768 hasta 32767). También debe ser un valor entero.&lt;br /&gt;· &lt;b&gt;int&lt;/b&gt;. Ocupa 32 bits (4 bytes), pero permite asignar valores en un rango especialmente grande; desde -2147483648 hasta 2147483647. Como en los tipos byte y short, el valor por defecto es 0.&lt;br /&gt;· &lt;b&gt;long&lt;/b&gt;. Las variables tipo long ocupan 64 bits (8 bytes), ya que sus valores pueden jugar dentro de un rango amplisimo (de -9223372036854775808 a 9223372036854775807 :D). Al igual que sus hermanos pequeños (byte, short e int), su valor por defecto es 0. Una cosa muy importante es que a la hora de asignar un valor a este tipo de variables, teneis que indicar que se trata de un long añadiendo una L (mayuscula) al final del numero. Luego publicaré un ejemplo práctico.&lt;br /&gt;· &lt;b&gt;float&lt;/b&gt;. Hasta ahora hemos hablado de variables para almacenar enteros, pero muchas veces necesitaremos representar numeros reales con decimales y demás. Para esto sirve float (y su hermana mayor, double). Ocupa 32 bits. Su precision es muy pobre, y se pueden obtener resultados extraños trabajando con numeros grandes. Trataremos este tema en más profundidad en próximos comentarios, apoyado de codigo fuente.&lt;br /&gt;· &lt;b&gt;double&lt;/b&gt;. Igual que float, pero mayor, ocupando 64 bits. Intenta arreglar los problemas de la coma flotante simple (float).&lt;br /&gt;&lt;br /&gt;Ahora que ya sabemos los tipos de primitivos con los que contamos, y que la declaración de variables es simplemente &lt;b&gt;tipoPrimitivo nombreVariable;&lt;/b&gt;, debemos saber que hay algunas convenciones a la hora de dar nombre a las variables, para hacer codigo más entendible. Los variables deben hablar de los datos que contienen, cosa que permite una mejor identificación. No podemos dar el nombre &lt;i&gt;haceCalor&lt;/i&gt; a un primitivo tipo string que contiene el nombre del usuario de la aplicación, solo provocario lios a la hora de mejorar/ampliar/estudiar el codigo. Un nombre adecuado para la variable sería &lt;i&gt;nombreUsuario&lt;/i&gt;. Como habreis notado, la primera letra del nombre de variable siempre debe estar en minúscula, y si usamos más de una palabra la primera letra de la segunda palabra la ponemos en mayuscula. Así, si queremos dar nombre a una variable que contenga el numero de dias del més de febrero, podríamos poner &lt;i&gt;numeroDiasFebrero&lt;/i&gt;. Otra cosa importante es que no se pueden usar palabras reservadas de Java, como &lt;i&gt;class&lt;/i&gt; o &lt;i&gt;main&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;Cuando tenemos una variable declarada (para seguir el lenguaje estricto de Java deberíamos decir "&lt;i&gt;un primitivo referenciado&lt;/i&gt;"), toca asignarle un valor. Esto se hace mediante el operador &lt;i&gt;=&lt;/i&gt;. Ahy van algunos ejemplos :&lt;br /&gt;&lt;br /&gt;&lt;code&gt;byte contador;&lt;br /&gt;contador = 100;&lt;br /&gt;short dieciseisBits;&lt;br /&gt;DieciseisBits = 30500;&lt;br /&gt;boolean verdaderoFalso;&lt;br /&gt;verdaderoFalso = true;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Continuará ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111640830282266823?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111640830282266823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111640830282266823' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111640830282266823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111640830282266823'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/variables.html' title='Variables'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111634272556657003</id><published>2005-05-17T07:52:00.000-07:00</published><updated>2005-05-18T02:54:49.543-07:00</updated><title type='text'>Hello, world!</title><content type='html'>Me parecía una verguenza tener un blog sobre mis inicios en Java y no publicar un &lt;b&gt;Hola mundo&lt;/b&gt;, asi que ahi va ;)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;public class Holas {&lt;br /&gt;&amp;nbsp public static void main(String[] args) {&lt;br /&gt;&amp;nbsp&amp;nbsp System.out.println("Buenas, soy un aprendiz de Java!");&lt;br /&gt;&amp;nbsp }&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Como veis, creamos una clase llamada Holas, dentro de la cual definimos el método principal (&lt;span style="font-style: italic;"&gt;main&lt;/span&gt;), que siempre se ejecuta. La función &lt;span style="font-style: italic;"&gt;System.out.println&lt;/span&gt; imprime en pantalla la string que le pases como parámetro, en este caso &lt;span style="font-style: italic;"&gt;Buenas, soy un aprendiz de Java!&lt;/span&gt; (viva la originalidad xD).&lt;br /&gt;&lt;br /&gt;Debeis saber que en java, el fichero que contenga el codigo fuente debe llevar como nombre el de una de las clases que en el se usen (normalmente la principal) seguido de la extensión "&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;.java&lt;/span&gt;". Como en este caso solo usamos una clase, llamada Holas, al fichero del &lt;span style="font-style: italic;"&gt;source code&lt;/span&gt; (codigo fuente) lo llamamos "&lt;i&gt;Holas.java&lt;/i&gt;". Con el JavaCompiler, creamos el bytecode a partir del codigo fuente que acabamos de escribir con el siguiente comando&lt;br /&gt;&lt;br /&gt;&lt;center&gt;$ javac Holas.java&lt;/center&gt;&lt;br /&gt;Si no el compilador no encuentra ningún error, ya tendremos nuestro ByteCode con el nombre del archivo de codigo fuente, pero sin la terminación &lt;i&gt;.java&lt;/i&gt;. Asi que en el fichero &lt;i&gt;Holas&lt;/i&gt; tendremos un ByteCode preparado para pasar por nuestra JVM de la siguiente manera&lt;br /&gt;&lt;br /&gt;&lt;center&gt;$ java Holas&lt;/center&gt;&lt;br /&gt;Y en la consola se nos imprimira el resultado. ¡¡Ya hemos creado nuestro primer programa en Java!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111634272556657003?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111634272556657003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111634272556657003' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111634272556657003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111634272556657003'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/hello-world.html' title='Hello, world!'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111634107056610149</id><published>2005-05-17T06:43:00.000-07:00</published><updated>2005-05-17T07:44:30.576-07:00</updated><title type='text'>Historia de Java</title><content type='html'>El título de este post es lo que he &lt;a href="http://www.google.es/search?hl=es&amp;q=historia+java&amp;amp;btnG=B%C3%BAsqueda+en+Google&amp;meta="&gt;buscado en Google&lt;/a&gt;, y después de leerme un par de textos sobre su historia, he escrito este pequeño resumen.&lt;br /&gt;&lt;br /&gt;El diseño de Java se inició a finales de la década de los 80, cuando Sun Microsystem montó un equipo, formado por James Gosling y otros, con el objetivo de crear un lenguaje de programación multiplataforma. El requisito de que fuera multiplataforma era crucial, ya que las aplicaciones inmediatas de este iban a ser su uso en dispositivos eléctronicos, que funcionavan con &lt;span style="font-style: italic;"&gt;chips&lt;/span&gt; de todos los tipos, y no era viable canviar el codigo para cada plataforma (como hubiera sido necesario usando lenguajes como C o C++).&lt;br /&gt;En 1991 James Gosling escribió el primer compilador para un lenguaje bastante primitivo, al que bautizaron como &lt;span style="font-style: italic;"&gt;Oak&lt;/span&gt;, que significa &lt;span style="font-style: italic;"&gt;Roble&lt;/span&gt; en inglés. Sobre este nombre circulan varias "leyendas urbanas" que intentan explicarlo, pero la que más se lee por la red es que cerca del lugar donde se reunía el grupo encargado del desarrollo de el nuevo lenguaje había un gran roble.&lt;br /&gt;El primer proyecto importante basado en Java (aún conocido como Oak) fué el conocido &lt;span style="font-style: italic;"&gt;Proyecto Green&lt;/span&gt;, un sistema de control completo de los aparatos electrónicos de una casa. Otro fué el desarrollo de una televisión interactiva. Pero ninguno de los dos tuvo el reconocimiento suficiente como para ser un producto de masas, y podríamos decir que Java se relegó a un segundo plano.&lt;br /&gt;Aprovechando el boom de internet, Sun, de manera muy astuta, decidió apostar por una unión entre Java y la nueva red de redes. Si se incorpora una Java Virtual Machine en un navegador, cualquier ordenador conectado a la red sería capaz de ejecutar el Java Aplet, con independencia de su arquitectura y el sistema operativo que ejecutase. Asi que en 1995 lanzaron HotJava, el primer navegador con una JVM. El canvio de nombre se produjo aqui, ya que el nombre comercial Oak ya estava registrado por otra empresa. Una de las &lt;span style="font-style: italic;"&gt;leyendas&lt;/span&gt; que rodean a Java explica que se llama así porque el grupo de trabajo de Sun que trabajava en él se reunía en una cafetería para hablar sobre el desarrollo del lenguaje, y Java es el nombre con el que se designa de manera coloquial el café en Estados Unidos.&lt;br /&gt;No pasaría mucho tiempo hasta que subieran al carro de navegadores con soporte para aplets de java, como Netscape con su Netscape Navigator 2.0, todo sumado a las licencias que se otorgaron a empresas como IBM, Microsoft,  y Novell para que escribieran sus propios JVM para otros sistemas operativos.&lt;br /&gt;Java ha seguido creciendo hasta el dia de hoy, y está consolidado como un lenguaje sério y adecuado, llegnado a ser uno de los más utilizados.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111634107056610149?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111634107056610149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111634107056610149' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111634107056610149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111634107056610149'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/historia-de-java.html' title='Historia de Java'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111627173329094830</id><published>2005-05-16T12:21:00.000-07:00</published><updated>2005-05-16T12:28:53.296-07:00</updated><title type='text'>Un par de links</title><content type='html'>Para empezar, voy siguiendo dos cursos bastante diferentes.&lt;br /&gt;El primero está escrito por Sun (imagino que es el manual oficial de los developers :P) y está traducido al español por gente de programacion.com. Empieza de zero y es muy completo y detallado. Lo podeis encontrar en &lt;a href="http://www.programacion.com/java/tutorial/java_basico/"&gt;este enlace&lt;/a&gt;.&lt;br /&gt;El otro está un poco mal estructurado, pero los ejemplos de codigo que añade vienen muy bien para aprender un poco &lt;span style="font-style: italic;"&gt;leyendo&lt;/span&gt;. Es &lt;a href=""&gt;este&lt;/a&gt;.&lt;br /&gt;Ala, ya sabeis, ¡a estudiar Java! :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111627173329094830?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111627173329094830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111627173329094830' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111627173329094830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111627173329094830'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/un-par-de-links.html' title='Un par de links'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12945868.post-111627123630415418</id><published>2005-05-16T12:14:00.000-07:00</published><updated>2005-05-16T12:20:36.310-07:00</updated><title type='text'>Declaracion de intenciones</title><content type='html'>¡Bienvenidos, navegantes! Me voy a presentar, soy un aprendiz de programador, y acabo de empezar a filtrear con Java. Mi intención es hacer de este blog un lugar enfocado a Java y a la programación orientada a objectos en general, aunque estoy empezando. Se algo de C, algo de PHP, algo de perl ... pero nunca he trabajado con POO. Conceptos como la herencia, las clases, el &lt;span style="font-style: italic;"&gt;Garbage Colector&lt;/span&gt; y demás me son totalmente desconocidos, pero poco a poco espero ir aprendiendo, a la par que intentaré hacer crecer esta pequeña ventana dónde hacerme oir, con mis aventuras en el mundo del codigo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12945868-111627123630415418?l=aprendiendojava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://aprendiendojava.blogspot.com/feeds/111627123630415418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12945868&amp;postID=111627123630415418' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111627123630415418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12945868/posts/default/111627123630415418'/><link rel='alternate' type='text/html' href='http://aprendiendojava.blogspot.com/2005/05/declaracion-de-intenciones.html' title='Declaracion de intenciones'/><author><name>servo</name><uri>http://www.blogger.com/profile/00428215419593266403</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://4.bp.blogspot.com/-gHlRXmMeyVM/Tsu7MSKlVpI/AAAAAAAAATM/E8Gw4JtO9n4/s220/banksy_bang300_300x400.jpg'/></author><thr:total>1</thr:total></entry></feed>
