Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Portada » Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 10 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Dom Jun 04, 2006 7:00 am
Mensajes: 122
Ubicación: Puebla, México

Nota Publicado: Mié Feb 14, 2007 4:17 am 
Arriba  
Hola después de tanto tiempo sin hacer nada ya estoy aqui.
Mi duda es que es una clase genérica en java, he leido pero aun no capto bien que es, ya medio que comprendí que es una clase que contiene (por asi decirlo) características similares de otros objetos; por ejemplo si quisiéramos calcular el área de diferentes figuras geométricas, realizariamos una clase que se llamaría figGeometrica por que todas las figuras geometricas contienen un lado, pero tendría como hijos a diferentes figuras como por ejemplo polígonos, círculos; puesto que cada figura se dibuja de diferente forma.
¿Estoy bien o no he comprendido? por lo que sea me gustaría que me alguien me aclarara bien que es una clases genérica o un método.
Por su ayuda muchas gracias.
=)

_________________
Lo esencial es invisible ante los ojos

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Ago 09, 2006 7:00 am
Mensajes: 4531
Ubicación: Táchira - Venezuela

Nota Publicado: Vie Feb 16, 2007 6:31 am 
Arriba  
pues una clase generica quiere decir ejercicios sencillos como por ejemplo un ejercicio que arroje un mensaje como este:

public class mensaje
{
static void imprimir (String mensaje)
{
System.out.println ("***"+mensaje+"***");
}
public static void main (String [] mensaje)
{
imprimir ("hola");
imprimir ("saludos");

claro tambien hay ejercicios "genericos" mas complejos que este! como el de calcular el promedio de 3 notas etc y cosas asi por el estilo
saludos!

_________________
Linux User #432922 ~ Linux Machine #390497
Gentoo 13.0 | ~amd64 | i3 improved | Github | dotfiles | Identi.ca | Twitter
irc.freenode.net | /join #gnu/linuxOS

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Dom Jun 04, 2006 7:00 am
Mensajes: 122
Ubicación: Puebla, México

Nota Publicado: Vie Feb 16, 2007 7:46 am 
Arriba  
ohh
muchas gracias por la respuesta, creo que como por ahí se dice que lo básico es siempre mejor.

_________________
Lo esencial es invisible ante los ojos

 Perfil  

Desconectado
Forista Ancestral
Forista Ancestral
Avatar de Usuario

Registrado: Mié Ago 09, 2006 7:00 am
Mensajes: 4531
Ubicación: Táchira - Venezuela

Nota Publicado: Vie Feb 16, 2007 4:50 pm 
Arriba  
:mrgreen:

_________________
Linux User #432922 ~ Linux Machine #390497
Gentoo 13.0 | ~amd64 | i3 improved | Github | dotfiles | Identi.ca | Twitter
irc.freenode.net | /join #gnu/linuxOS

 Perfil  

Desconectado
Forista Mayor
Forista Mayor

Registrado: Vie Dic 16, 2005 8:00 am
Mensajes: 540

Nota Publicado: Vie Feb 16, 2007 9:32 pm 
Arriba  
Gnro escribió:
Mi duda es que es una clase genérica en java, he leido pero aun no capto bien que es, ya medio que comprendí que es una clase que contiene (por asi decirlo) características similares de otros objetos; por ejemplo si quisiéramos calcular el área de diferentes figuras geométricas, realizariamos una clase que se llamaría figGeometrica por que todas las figuras geometricas contienen un lado, pero tendría como hijos a diferentes figuras como por ejemplo polígonos, círculos; puesto que cada figura se dibuja de diferente forma.


Hola, creo que a lo que te refieres con ese ejemplo de las figuras geométricas es a clases abstractas. Esto es, una clase que no va a ser instanciada, pero que define los métodos que sus subclases puedan utilizar. Así entonces, todos las figuras geométricas tienen área y perímetro pero para cada una, se define diferente. Entonces puedes crear una clase abstracta que se llame FiguraGeometrica que tenga el método hallarArea() y hallarPerimetro(). Luego las clases como Circulo, Cuadrado, Triángulo, etc heredan de FiguraGeometrica y lo que hacen simplemente es reescribir los métodos de acuerdo a cómo se hallan para cada una.

Saludos.

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Dom Jun 04, 2006 7:00 am
Mensajes: 122
Ubicación: Puebla, México

Nota Publicado: Lun Feb 19, 2007 6:23 pm 
Arriba  
8O 8O
Entonces como seria una clase genérica? pero un poco mas avanzada

_________________
Lo esencial es invisible ante los ojos

 Perfil  

Desconectado
Forista Mayor
Forista Mayor

Registrado: Vie Dic 16, 2005 8:00 am
Mensajes: 540

Nota Publicado: Mar Feb 20, 2007 10:38 pm 
Arriba  
A qué te refieres exactamente? Puedes leer a cerca de herencia y poliformismo, seguro que con esos conceptos claros vas a entender bien ;).

Saludos

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Dom Jun 04, 2006 7:00 am
Mensajes: 122
Ubicación: Puebla, México

Nota Publicado: Mié Feb 21, 2007 2:33 am 
Arriba  
no ya en otro foro me dieron una idea como que mas general
Código:
Clases genéricas
Una idea aproximada de las clases y métodos genéricos es pensar que reciben, además de los parámetros normales, "parámetros de tipo".

Por poner el típico ejemplo:

Imagina que quieres una lista que guarde sólo objetos de tipo Usuario, para garantizar que no se mezclan con otros objetos. Podrías hacer algo como:

class ListaDeUsuarios {
••••public void anadir(Usuario usuario) {
••••••••//... guardar un Usuario
••••}
••••public Usuario leer(int i) {
••••••••//...devolver el usuario i
••••}
}

Imagina ahora que quieres otra lista que sólo pueda guardar objetos de tipo Cuenta. Harías...

class ListaDeCuentas {
••••public void anadir(Cuenta cuenta) {
••••••••//... guardar una Cuenta
••••}
••••public Cuenta leer(int i) {
••••••••//...devolver el usuario i
••••}
}

Y ahora otra que pueda guardar sólo... etc, etc. Al cabo del rato resulta que tienes un montón de listas muy parecidas, que en lo único que se diferencian es en el tipo de objetos que manejan. Es decir, un montón de código casi repetido.

Pero tú no quieres una única lista en la que pueda haber cualquier cosa. Tú quieres que en una lista determinada sólo pueda haber objetos de un tipo. Si pudieras pasarle al constructor de la clase ese tipo como parámetro... que le pudieras decir "new ListaDe(Usuario)" y "new ListaDe(Cuenta)"... eso estaría bien, no?

Pues exactamente eso es lo que ofrecen los generics. Puedes hacer algo como:

class ListaDe<Tipo> {
••••public void anadir(<Tipo> elemento) {
••••••••//... guardar un elemento
••••}
••••public <Tipo> leer(int i) {
••••••••//...devolver el usuario i
••••}
}

Ahora podrías decir "new ListaDe<Usuario>()" y en esa lista sólo puedes hacer anadir(usuario), o "new ListaDe<Cuenta>()" y en esa sólo puedes añadir objetos de tipo Cuenta.

Esto es sólo el principio y de forma muy breve. Los generics permiten hacer cosas más elaboradas.

es por eso que pedí si es que no existe otro ejemplo un poco mas elaborado

_________________
Lo esencial es invisible ante los ojos

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Lun Oct 30, 2006 8:00 am
Mensajes: 211
Ubicación: México/Edo.Mex/Tecámac

Nota Publicado: Jue Abr 16, 2009 7:50 am 
Arriba  
No mira, no te confundas, como ya comentan con una clase abstracta, donde sus métodos sirven para especificar que las subclases tienen que implementar (sobree scribiendo el método)

Te doy un ejemplo dummy de como sería un uso de la clase abstracta:

Código:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.clitec.pruebas.second;

/**
 *
 * @author lyonn
 */
public abstract class CAbstracta {

    public abstract void mensajeHolaAbstracto(String msj);
    public void mensajeHola(String msj)
    {
        System.out.println(msj);
    }

Código:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.clitec.pruebas.second;

/**
 *
 * @author lyonn
 */
public class CCosa extends CAbstracta {

    @Override
    public void mensajeHolaAbstracto(String msj) {
        System.out.println("Aquí hacemos el comportamiento específico de esta clase: "+msj);
    }

}

Código:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.clitec.pruebas.second;

/**
 *
 * @author lyonn
 */
public class CImplementadora {
    public static void main(String[] args) {
        CCosa cosa = new CCosa();
        cosa.mensajeHola("Mensaje de método no abstracto");
        cosa.mensajeHolaAbstracto("Este método se redefinio!!");
    }

}


Ahora bien, si te refieres a una clase genérica, es como las plantillas en C++., pero no tan iguales.

Ejemplos son la clase ArrayList<Integer>..., ArrayList<String>, etc...

Si tu quieres definir tu propia clase genérica sería algo así como:
Código:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.clitec.pruebas.second;

/**
 *
 * @author lyonn
 */
public class CClasesGenericasTest<R1, R2> {

    public <R1, R2> void cosa(String str1, R1 r1, R2 r2)
    {
        System.err.println("Valor de la cadena"+ str1);
        System.err.println("R1: "+ r1);
        System.err.println("R2: "+ r2);
        R2 tmp = (R2) r1;
     

    }

}


Y la podemos usar de las siguientes maneras:
Código:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.clitec.pruebas.second;

/**
 *
 * @author lyonn
 */
public class CMain {

    public static void main(String[] args) {

       CClasesGenericasTest<String, Integer> gen = new CClasesGenericasTest<String, Integer>();
        gen.cosa(" ROD", 12.0, 1);
       
    }
}



o se me ocurre esta otra:
Código:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.clitec.pruebas.second;

/**
 *
 * @author lyonn
 */
public class CMain {

    public static void main(String[] args) {

       CClasesGenericasTest<String, Integer> gen = new CClasesGenericasTest<String, Integer>();
        gen.cosa(" ROD", 12.0, "Un string");
       
    }
}


Al final la JVM no crea el código según los parámetros utilizados, utiliza la clase raíz de todas, es decir, Object, es por eso que las operaciones matemáticas no las pudes hacer comúnmente.

Bueno, espero que te haya servido dicha información

Saludos

_________________
El miedo es el camino al lado oscuro. El miedo lleva al odio, el odio lleva a la ira, la ira lleva al sufrimiento

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 8:00 am
Mensajes: 1425
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Jue Abr 16, 2009 2:35 pm 
Arriba  
Las clases genéricas son las que pusiste en tu último post.
El caso más claro son los arrays, listas y demás. Por ejemplo, la clase array<tipo> (tipo, V, X o lo que quieras) es genérica, porque la creas una clase array que va a contener "algo" que a ti te va a dar igual lo que sea. Puede ser enteros, objetos, otros arrays...

Ten en cuenta que es altamente probable (no lo he probado, pero creo que es así) que no puedas manipular los objetos de esas clases "tipo" (me refiero a que no vas a poder utilizar la clase I dentro de la clase Array<I>, ya que no sabes que clase es I)

Lo usual es que estas clases se usen como "contenedores".

Para utilizar estas clases, las declaras en el programa con un "tipo de datos" específico (no es eso exactamente, pero vale para hacerte una idea), y utilizas los métodos que hayas puesto a esa clase.

 Perfil  
Mostrar mensajes previos:  Ordenar por  
 [ 10 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


 Temas relacionados   Autor   Respuestas   Vistas   Último mensaje 
Matrices y clases en Java

en Programación

larq005

7

2892

Mié Ago 05, 2009 6:00 pm

akodo Ver último mensaje

Como usar las clases MathContext y BigDecimal en Java [SOLUCIONADO]

en Programación

Juanp_1982

4

1364

Dom Feb 12, 2012 1:41 am

Juanp_1982 Ver último mensaje

Clases en linux

en Programación

chemon

0

2401

Mar Sep 28, 2004 4:25 pm

chemon Ver último mensaje

clases de programadores

en Programación

plukazz

6

1788

Lun Feb 12, 2007 10:54 pm

ColdZero Ver último mensaje

Clases de redes: A, B. C........

en Redes y Servidores

maximi89

3

4055

Mié Sep 21, 2005 4:04 pm

obiwan Ver último mensaje



¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC + 1 hora [ DST ]
Traducción al español por Huan Manwë
phpBB SEO