Bienvenido(a), Visitante. Favor de ingresar o registrarse.

Ingresar con nombre de usuario, contraseña y duración de la sesión

Foros del Club

Páginas: [1]   Ir Abajo
  Enviar tema  |  Imprimir  
Autor Tema: Un café por favor... Mi aprendizaje de Java  (Leído 1889 veces)
0 Usuarios y 1 Visitante están viendo este tema.
CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« en: 06/10/2006, 07:29:36 »

Éste tema del foro va a tener caracter de artículo de blog.
Voy a contar y explicar en lo posible, hasta el más mínimo detalle de java que vaya leyendo, programando, aprendiendo.
La razón, un parcial de la facultad. Java no es uno de mis lenguajes preferidos.
Ahora estoy en Linux, asi que me voy a basar en él en la lineas de comandos hacia el interprete y el compilador. No voy a explicar como se instala java, eso ya está en otros temas del mismo foro. Voy a explicar el lenguaje y las mejores prácticas. Espero que ésto sirva como guia acelerada de aprendizaje a cualquiera que lo necesite.
Asi que, empecemos. Pero antes me voy a preparar un café -ahora entiendo el porqué del logo de java-, creo que empezamos bien.


Java.

Bueno, la sintaxis me resulta cómoda, es muy parecida a C/C++. Java trabaja basado en clases y objetos. Asi que empecemos a mostrar un poco de código fuente. El anticuado HelloWorld sigue siendo útil para iniciarse en un lenguaje y poder reconocer partes del mismo que son muy comunes, muchos conceptos que luego comienzan a expandirse, y algo importante... como presentar información en pantalla.
Pero antes un poco de orden:

Código
gaston@OPTIMUS:~/development$ mkdir practicaJava
gaston@OPTIMUS:~/development$ mkdir practicaJava/helloWorld && cd practicaJava/helloWorld
gaston@OPTIMUS:~/development/practicaJava/helloWorld$

Ya tenemos nuestro directorio, ahora a crear un archivo... su nombre: helloWorld.java
Lo abrimos con el editor que queramos y escribiremos lo siguiente:
Código
public class helloWorld
{
public static void main(String[] args){
if(args.length > 0)
System.out.println("Hola " + args[0] + ", que bueno saludarte!");
else
System.out.println("Hola... (?), que bueno saludarte!");
}
}

Y obtendremos lo siguiente, al compilarlo y luego pedir su interpretación:

Código
gaston@OPTIMUS:~/development/practicaJava/helloWorld$ javac helloWorld.java
gaston@OPTIMUS:~/development/practicaJava/helloWorld$ java helloWorld
Hola... (?), que bueno saludarte!
gaston@OPTIMUS:~/development/practicaJava/helloWorld$ java helloWorld Gaston
Hola Gaston, que bueno saludarte!

Ahora analicemos ésto.
Primer hecho importante: el nombre de la clase debe coincidir -exactamente- con el nombre del archivo que la contiene, en este caso helloWorld. Luego vemos que la clase es pública, lo cual implica que puede utilizarse fuera del archivo.
Dentro de ella, vemos el método main, el cual es public y estatico, eso significa que puede usarse sin tener instanciada la clase, además al llamarse main indica que es la función que el interprete llamará primero. Este método toma un solo parámetro, una lista o array de cadenas de caracteres, representadas por objetos del tipo String, el cual implementa el método length() que nos indica la cantidad de caracteres que tiene una cadena, pero cuidado... en el código no estoy usando el método length() de la clase String, estoy usando el método length() de la lista para saber cuantos elementos contiene -luego haré una lista de los métodos más importantes de cada clase, aunque sean muchisimos-. Bien, y después? Después evaluamos si al menos se ingresó un parámetro -usando el length() explicado anteriormente-, en ese caso se imprime una cadena de saludo con lo ingresado, en caso contrario se imprime una cadena fija.
Para imprimir un texto tenemos que utilizar el método print o println -mejor el último al usar consola- el cual se debe acceder desde System.out
System.out es una clase? si -en java todo es un objeto (aunque después dire cosas al respecto de esto, por ahora está bien pensarlo asi)-, e implementa muchas cosas útiles para imprimir texto.
También se utiliza el operador + (concatenación de cadenas) para unir los distintos textos.
El archivo se compila usando javac (compilador de java) el cual necesita el nombre del archivo a compilar. Si todo marcha bien, se genera un archivo con el mismo nombre del anterior pero extensión .class -en nuestro caso helloWorld.class- que es el archivo que pasaremos como parámetro al java (interprete java), quien lo evaluará y lo ejecutará.

Bueno, y ya estoy listo para aprobar el examén?... me parece que no, mejor me hago otro café.
En línea

CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #1 en: 06/10/2006, 08:34:37 »

Ahora comenzaré con las cuestiones básicas del lenguaje, de una forma un poco más seria y quizá con menos explicación detallada, ya que muchas cosas son comunes con otros lenguajes de programación. Me concentraré en las diferencias, aunque voy a nombrar todo lo necesario para hacer de ésto un suerte de "curso ayuda-memoria".

Antes de comenzar voy a ampliar la información del artículo anterior con una cita:

Citar
Entre las librerías que ofrece Java, existe una que se incluye por defecto en todos los programas, es java.lang. Entre las clases disponibles en la misma está la clase estática System, uno de cuyos miembros es out, uno de cuyos métodos es println. Navegando entre la ayuda de Java podemos comprobar todo esto. Este método recibe como parámetro una cadena que se encargará de escribir en pantalla.

Comenzamos?

Comentarios.

Igualitos al C++, los tenemos de 1 linea (//comentario) o de varias (/*comentario*/).
Pero se agrega algo especial. A efectos de autodocumentar los módulos, los comentarios cobran especial importancia verdad?, y que tal si se pudieran parsear esos comentarios para generar documentación clara y con muy buena presentación para el jefe y los colegas?... para eso existe otra notación de comentario especial. Voy a colocar algunos comentarios de éste tipo a una nueva aplicacion -en una nueva carpeta llamada por ejemplo javadoc- de nombre helloWorldDoc.java

Código
/** El típico hello world
* Esta clase simplemente nos introduce en lo más básico de java
* @author Gastón  aka CID
* @version 1.0
*/

public class helloWorld
{
/** Punto de entrada a la clase y la aplicación
* @param args vector de cadenas que contiene los argumentos
* @return No devuelve ningún valor
* @exception Ninguna No lanza excepciones
*/

public static void main(String[] args){
if(args.length > 0)
System.out.println("Hola " + args[0] + ", que bueno saludarte!");
else
System.out.println("Hola... (?), que bueno saludarte!");
}
}
 

Ahora vamos a pedirle a java que nos documente dicho módulo:

Código
gaston@OPTIMUS:~/development/practicaJava/javadoc$ javadoc helloWorld.java

Para más información, van a ver la utilidad de éste programa:

Código
gaston@OPTIMUS:~/development/practicaJava/javadoc$ javadoc --help

Tipos básicos y literales.

Antes de tener variables, tenemos constantes literales. Como en cualquier lenguaje suelen haber de 3 tipos: numéricas, caracteres y booleanas.
Las numéricas son de dos tipos -enteras y reales-, se pueden escribir en distintas notaciones y bases.
Los caracteres se escriben encerrados entre comillas simples, y las cadenas de caracteres con comillas dobles. Se respetan los caracteres especiales de C/C++ tales como \0, \n, \t, etc.
Los booleanos, al igual que C++ son true y false, en minúsculas.
Y se agrega un cuarto, los que conocemos C/C++ y algunos otros, agradecemos la inclusión del tipo void.

Recuerdan que dije que en Java todo es clases y objetos? y recuerdan que también dije que despues hablaria al respecto? bueno, la cosa viene asi...
Todo en Java está basado en objetos... excepto los tipos básicos (boolean, char, byte, short, int, long, float, double, void). Nótese que se escriben en minúsculas. Ellos no tiene métodos tales como length(), no pueden heredarse, instanciase -si declararse, que es diferente-, en fin... no son objetos!!

Identificadores, operadores y separadores.

La única diferencia con respecto a C++ entre dichas entidades se encuentra en los nombres de los identificadores. Java amplía esto al permitir que un nombre de identificador pueda comenzar con el signo de dolar -$, si!! como PHP-, igual no creo que use ésta posibilidad.
En cuanto a lo demás, todo es igual a C++. Los identificadores deben comenzar con letras o el subrayado, luego pueden contener solo caracteres alfanuméricos y el subrayado.
Los operadores son los mismos, y sirven para lo mismo. Los separadores también. Mejor referirse a la documentación si no te acordas cuales son.

Una cosa para comentar, no parece existir el operador "->", claro, en Java los punteros no "existen"...
Bueno, menos para estudiar.

Control de flujo.

Exactamente iguales a los de C++ -if else switch while do-while for-, existe el return y también construcciones de salto como break, continue, etc. Para más información referirse a la documentación de C++... digo Java.

Bueno, basta de café... ahora un juguito!
En línea

CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #2 en: 06/10/2006, 09:38:54 »

Hasta ahora pareceria que estoy preparandome para un parcial de C++. Las diferencias no son muy grandes, es facil comenzar con Java si se domina C, C++ y JavaScript (si, pero solo por la sintaxis en éste último).
Algo importante que olvide decir o dije muy sutilmente, ahora lo voy a dejar como algo importante: Java es un lenguaje case-sensitive, mucho cuidado con eso programadores de Pascal!!

Es hora de comenzar con funciones, y otras cuestiones de la programacion procedural... pero dado que Java es orientado a objetos, prefiero explicar métodos y propiedades, constructores y destructores, visibilidad, accesibilidad, etc etc etc... a fin de cuentas las funciones no existen!! existen métodos de clases y objectos, asi que adios programación funcional/procedural... hola programación orientada a objetos.


Clases

Antes que nada veamos como declarar una clase, que "cosas" necesita nuestro archivo java.
Como pueden ver, estoy programando "a mano", he visto que muchos IDE's, sobre todo aquellos que agilizan la programación gui, agregan muchas cosas que voy obviar. Por ahora se explicará el lenguaje en si, no sus librerias especializadas.
Entonces, si quiero crear la clase serHumano, que debo escribir? Primero crear un archivo con ese nombre y extensión .java, luego los import -cosa rara esto la verdad... cada lenguaje los llama como se les antoja, include, uses, import, required, using... es tremendo-, luego la declaración y definición de la clase.
Primero veamos el template:

Código
[public] [final | abstract] class Clase [extends ClaseMadre] [implements Interfase1 [, Interfase2 ]]
{
[atributos]
[funcionalidades]
}
 
atributos = [private |protected|public] [static] [final] [transient] [volatile] Tipo NombreVariable [= Valor];
funcionalidades = [private |protected|public] [static] [abstract] [final] [native ] [synchronized] TipoDevuelto NombreMetodo ( [tipo1 nombre1[, tipo2 nombre2 ]...] ) [throws excepcion1 [,excepcion2]... ]
{
cuerpo;
}
 

Parece complejo, no?... mejor veamos un ejemplo práctico para identificar cada una de estas con algo realmente sencillo:

Código
public class serHumano
{
//atributos
private String nombre;
private int edad;
private float altura;
private boolean sexo; //hombre = true
//funcionalidades
//constructor
public serHumano(){
nombre = new String("CID");
edad = 25;
altura = 1.81f;
sexo = true;
}
//metodo
public String getHumano(){
String r = new String();
r = "El sujeto se llama " + nombre + '\n' + "Su edad es de " + edad + " años" + '\n';
r+= "Es " + (sexo?"hombre":"mujer") + " y mide " + altura + " metros";
return r;
}
//punto de entrada
public static void main(String[] args){
serHumano chabon = new serHumano();
System.out.println(chabon.getHumano());
}
}

La salida es esta:

Código
gaston@OPTIMUS:~/development/practicaJava/serHumano$ javac serHumano.java
gaston@OPTIMUS:~/development/practicaJava/serHumano$ java serHumano
El sujeto se llama CID
Su edad es de 25 años
Es hombre y mide 1.81metros

Realmente un ejemplo muy facil, pero es util para identificar y comentar algunas cosas que no tenia el ejemplo anterior.

Tenemos atributos, tantos de tipos básicos como objetos -String nombre-, ellos han sido definidos como privados, por lo que solo pueden accederse desde dentro de la clase.
Luego vemos al constructor -tiene el mismo nombre de la clase y no toma parámetros-, es el encargado de inicializar los atributos internos del objeto por valores por defecto. Con las variables de tipo básico vemos que solo es cuestion de asignar y que al objeto lo debemos crear, a ésto lo voy a explicar luego. Se preguntarán, porque puse una "f" detras del numero flotante, se debe a que el compilador considera que el literal es del tipo double y me reta Sonrisa, para solucionar eso hay que decirle que tipo de literal es, y por eso la f está ahi colocada.

Luego vemos un método publico que retorna un String, es el encargado de crear un texto de descripción del objeto. Aqui también puede verse como se crea un instancia de un objeto -String r = new String()-, y no los destruyo... porque? porque java se encarga de eso con su recolector de basura. Si java no quiere que use punteros, entonces que se encargue el de todo!!
Verán el uso de varios tipos, enteros, reales, caracteres, cadenas de caracteres, y de operadores asignación, concatenación, condicional.
Bien, la clase solo tiene eso. Ni más ni menos.
Por comodidad cree un método main para probarla dentro de si misma.

Código
	public static void main(String[] args){
serHumano chabon = new serHumano();
System.out.println(chabon.getHumano());
}

Veamos que hacemos aca. Lo primero es una instanciación -creación- de un objeto de tipo serHumano. A esa instancia la identificamos con el nombre de chabon.
Al llamar al constructor se ejecuta el método serHumano(), el cual inicializa. Luego se llama al método getHumano() para recuperar la descripción y presentarla en pantalla con println.

Como les dije, no es nada de otro mundo -quiza debi elegir otro ejemplo más completo- pero de todas maneras se pueden ver cositas que al ser pocas, son claras y permiten comenzar a perderle el miedo y prejuicios al lenguaje.
Es complejo éste tema y lo voy a desarrollar en un mínimo de 3 articulos más, tocando herencia y explicando un poco las interfaces. Si puedo tambien detallaré polimorfismo.
En línea

JoRgE-1987
Programador
Legend
**********

Prestigio: 7
Desconectado Desconectado

Sexo: Masculino
Título universitario: No.
Profesión: Programador
Mensajes: 633

Geek


WWW
Lenguajes:
Object Pascal
Pascal
HTML
Aprendiendo C++
« Respuesta #3 en: 06/10/2006, 22:46:28 »

Gracias por tan exelente contribucion apra nosotros, al verlo todo asi, tan coloquial por decirlo de alguna manera, me anima un poco mas, a intentar hacer algo con este lenguaje.

Bueno, esta muy bueno, por ahora, solo lo lei, pero despues cuando inicie Ubuntu, prubo un par de cosas.

Muy bueno.

Saludos Cheesy:D
En línea


CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #4 en: 07/10/2006, 11:00:30 »

Gracias. Seguramente haga lo mismo con C# más adelante.
Como sabemos la programación orientada a objetos debe cumplir con encapsulación, herencia y polimorfismo. Java tiene un gran soporte en cuanto a ésto. Comenzaré por la encapsulación e iré comentando diferentes entidades de las clases y objetos.


Programación orientada a objetos en Java.

Comencemos con los modificadores de acceso de java. Hablaremos de los más comunes: Public, Private, Protected, Static y Final.

Public: Permite acceso total fuera y dentro de la clase. Si se le aplica a un atributo éste puede ser leido y modificado fuera de la clase, si se le aplica a un método éste puede ser invocado fuera de la clase. Cuando digo fuera de la clase, me refiero a clases hijas, clases que utilizan instancias de dicha clase, etc.
Si se aplica a clases entonces se consigue acceso fuera del archivo que la contiene.

Private: Dispone que la entidad (atributo, funcionalidad o clase) que sea marcada como privada solo pueda accederse desde la misma clase.

Protected: Se comporta como Private para cualquier clase no hija y se comporta como Public para clases hijas de ella. Es decir, las clases hijas son las únicas en tener acceso a las entidades de su padre.

Ningún modificador: Java hacer que la clase permita el acceso a todas las demás clases del mismo paquete o librería.

Static: Los métodos a los que se les aplique el modficador static hace que dicho método sea un método de clase -una sola instancia del método para todos los objetos- y si se aplica a un atributo sucede algo similar; la modificación del mismo actua sobre todas las instancias de la clase.

Final: Si se aplica a un método éste no puede sobrecargarse, si se aplica a una variable ésta se convierte en constante, si se aplica a una clase ésta se vuelve abstracta (imposible heredar de ella).

Constructores.

Los constructores como en casi todo los lenguajes son los que hacen mucha magia al crear una instancia. Para ser preciso deberia dedicarle mucho tiempo a ésto y existen muchos materiales que explican el orden de ejecución de los constructores, para clases bases y heredadas, para multiples constructores, etc.
Lo importante a saber aca es que se trata del primer método que se ejecuta en los objetos -en todos, recordar que todas nuestras clases descienden implicitamente de la clase object (al igual que la VCL de Borland)- es por eso que debemos saber como llamar al constructor base de una clase derivada cuando éste necesita algunos parámetros de inicialización. Esto se hace con la construccion del lenguaje conocida como super([<lista de parametros>]), el cual debe estar en la primer linea de nuestros constructores. De todas maneras Java lo ejecuta implicita y automáticamente sin parámetros, si se quiere llamar a un constructor de la clase base que si necesite parámetros lo haremos en forma explícita.
La declaración del constructor es similar a cualquier función, con algunas restricciones como corresponder su identificador con el nombre de la clase, no retornar valor alguno -siquiera void- y debe ser publico (de otra manera no tendriamos acceso al instanciar).

Nota: Java no tiene destructores ya que el recolector de basura garantiza la correcta devolución de recursos al sistema. De todas maneras es posible hacer que el recolector de basura invoque a una función en el momento de liberar la instancia. Su forma es la siguiente:

Código
protected void finalize() {
...
}

Herencia.

Ya conocemos las ventajas de la herencia, Java permite herencia simple -no soporta múltiple como lo hace C++- y és lo que trataré de explicar ahora.
Tenemos una clase base con atributos y métodos comunes para otra clase que debemos realizar, derivaremos de ella para crearla. Ésto se explica mejor con un ejemplo:

Archivo c.java

Código
public class c
{
private int noMeTocas = 123;
protected String nombreLenguaje;
protected double gradoDificultad;
public boolean esOrientadoAObjetos;
 
public c(){
this(false);
}
public c(boolean b){
nombreLenguaje = "C";
gradoDificultad = 7.5;
esOrientadoAObjetos = b;
}
 
public String getNombre(){
return nombreLenguaje;
}
public double getgradoDificultad(){
return gradoDificultad;
}
public String getString(){
String s = nombreLenguaje;
if(!esOrientadoAObjetos) s+= " no";
s += " es un lenguaje orientado a objetos y tiene un grado de dificultad de "+
gradoDificultad;
return s;
}
}

Archivo cpp.java

Código
public class cpp extends c{
public cpp(){
super(true);
nombreLenguaje = "C++"; // BIEN, es publico de c
gradoDificultad = 9.0;
//noMeTocas = 0; MAL... no se puede acceder, es privado de c
}
 
public static void main(String[] args){
c a = new c();
System.out.println(a.getString());
cpp b = new cpp();
System.out.println(b.getString());
}
}

Analicemos...
No coloqué includes, imports, uses; debido a que los dos archivos están en el mismo directorio.
La clase c define atributos privados, protegidos y publicos que no merecen mucha explicación, salvo decir que es posible inicializar variables al declararlas. Luego se crean dos constructores, el primero sin parámetros llama al segundo -nótese como se hace- el cual inicializa algunas variables. Para finalizar algunos métodos publicos para ser usados desde fuera de la clase.
La clase cpp se deriva de c -cpp hereda de c-, obteniendo acceso a todas sus entidades publicas y protegidas, pero no asi a las privadas como puede verse en el comentario. El constructor de la clase derivada invoca al constructor de la clase base -super(true)- y no hace nada más.
Tan solo cree un método main para probarlas.
La salida es la siguiente:

Código
gaston@OPTIMUS:~/development/practicaJava/herencia$ java cpp
C no es un lenguaje orientado a objetos y tiene un grado de dificultad de 7.5
C++ es un lenguaje orientado a objetos y tiene un grado de dificultad de 9.0
En línea

EmpireFX
Technocrat
*********

Prestigio: 8
Desconectado Desconectado

Sexo: Masculino
Título universitario: Algun dia
Profesión: Estudiante
Mensajes: 183


roots


WWW
Lenguajes:
c/c++
Html
Php
Css
Bases de datos:
Mysql
« Respuesta #5 en: 08/10/2006, 19:26:17 »

Muy bueno Gaston, te pasaste con esta explicacion, ademas ya queria probar algunas cosas en Java, esto es como una patada para empezar Lengua, ahora me pongo a probar algunas cosas con el Eclipse

Saludos
En línea

CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #6 en: 15/10/2006, 19:31:09 »

Espero que la patada no haya dolido mucho.
Tan solo falta hablar un poco de polimorfismo, y se habrá comentado gran parte de lo que es Java. Claro que Java es mucho más que un lenguaje, y lo dificil es precisamente aprender todo lo demás. Pero creo que conociendo el lenguaje se facilita bastante su aprendizaje.


Polimorfismo.

El polimorfismo es la capacidad de un objeto de comportarse de diferente manera. Java permite ésto, y aquí el ejemplo final:

Código
public class java extends cpp {
public java(){
super();
nombreLenguaje = "Java";
gradoDificultad = 8.5;
}
public static void main(String args[]){
c instancia;
instancia = new c();
System.out.println(instancia.getString());
instancia = new cpp();
System.out.println(instancia.getString());
instancia = new java();
System.out.println(instancia.getString());
}
}

Y su salida:

Código
C no es un lenguaje orientado a objetos y tiene un grado de dificultad de 7.5
C++ es un lenguaje orientado a objetos y tiene un grado de dificultad de 9.0
Java es un lenguaje orientado a objetos y tiene un grado de dificultad de 8.5

Si bién Java es mucho más que éstos pocos articulos que he escrito, espero que le sirva a alguien para tener un acercamiento hacia éste lenguaje.

Saludos!
En línea

CID
Administrador
Legend
*****

Prestigio: 22
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Arte de la informática
Título universitario: Programador
Profesión: Desarrollador
Mensajes: 1136



WWW
Lenguajes:
Varios
Bases de datos:
Varios
« Respuesta #7 en: 15/10/2006, 20:09:02 »

Para todos aquellos que quieran descargar los fuentes (y los byte-codes) aqui están debajo.
Si no los puedes ver, es que no has ingresado. Registrate!

Saludos.
En línea

HadesDark
Guru
***

Prestigio: 0
Desconectado Desconectado

Estudiante de: Tec. Informatica
Mensajes: 3


« Respuesta #8 en: 10/10/2007, 01:34:17 »

Muy bueno, me parecio interesante la forma de explicarlo sin tanto complique, muchas gracias.
En línea
ScarFace
Sage
*****

Prestigio: 0
Desconectado Desconectado

Sexo: Masculino
Estudiante de: Ingeniería en Sistemas de Información
Profesión: Programador
Mensajes: 11


Say Hello To My Little Friend!


WWW
Lenguajes:
PHP, Visual Basic, C, C++, C#, Java
Bases de datos:
MySQL, PostgreSQL
« Respuesta #9 en: 22/10/2008, 02:01:16 »

Muy bueno, seguí asi.... espero que llegues a usar Bases de Datos!  rey
En línea
Foros del Club
   

 En línea
Páginas: [1]   Ir Arriba
  Enviar tema  |  Imprimir  
 
Ir a: