Estructura o Clase

04/02/2005 - 21:29 por Alberto | Informe spam
Hola :)

Cuando debo usar una estructura y cuando una clase? Cuales son sus
principales diferencias :)
Gracias

Preguntas similare

Leer las respuestas

#1 Octavio Hernandez
04/02/2005 - 21:57 | Informe spam
Alberto,

Las estructuras son tipos-valor, y las variables de tipo estructura se
almacenan directamente en el stack (caso de variables locales) o inline
dentro de los objetos u otras estructuras, cuando forman parte de ellas. Las
clases, por el contrario, son tipos-referencia. Sus instancias se crean
siempre en el heap (memoria dinámica) y las variables de tipos de clase
contienen únicamente una referencia (especie de puntero) a la variable.

Las estructuras se deben utilizar fundamentalmente para definir tipos
formados por unos pocos campos que sean todos de tipos-valor. Esto garantiza
que ofrezcan un mejor rendimiento. Ejemplos típicos son:

struct Punto { int x; int y; }
struct Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

Como ves, a las estructuras se puede asociar constructores, métodos, niveles
de visibilidad y prácticamente casi todo lo que pueden tener las clases.

Slds - Octavio


"Alberto" escribió en el mensaje
news:
Hola :)

Cuando debo usar una estructura y cuando una clase? Cuales son sus
principales diferencias :)
Gracias



Respuesta Responder a este mensaje
#2 Angel
05/02/2005 - 20:03 | Informe spam
Pero...la estructuras también podrian almacenarse en memoria dinámica,
declarando un puntero a estructura y reservandole memoria dinámica (con
malloc por ejemplo).

Quizás, según mi forma de pensar, la diferencia mas importante es que una
estructura es un ente tipo registro (como almacen de datos relacionados
entre si) y una clase se compone de métodos,los cuales permiten comunicacion
con el objeto mediante la cual se lleva acabo alguna acción codificada por
dicho método.

Un saludo.
"Octavio Hernandez" escribió en el mensaje
news:
Alberto,

Las estructuras son tipos-valor, y las variables de tipo estructura se
almacenan directamente en el stack (caso de variables locales) o inline
dentro de los objetos u otras estructuras, cuando forman parte de ellas.
Las clases, por el contrario, son tipos-referencia. Sus instancias se
crean siempre en el heap (memoria dinámica) y las variables de tipos de
clase contienen únicamente una referencia (especie de puntero) a la
variable.

Las estructuras se deben utilizar fundamentalmente para definir tipos
formados por unos pocos campos que sean todos de tipos-valor. Esto
garantiza que ofrezcan un mejor rendimiento. Ejemplos típicos son:

struct Punto { int x; int y; }
struct Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

Como ves, a las estructuras se puede asociar constructores, métodos,
niveles de visibilidad y prácticamente casi todo lo que pueden tener las
clases.

Slds - Octavio


"Alberto" escribió en el mensaje
news:
Hola :)

Cuando debo usar una estructura y cuando una clase? Cuales son sus
principales diferencias :)
Gracias







Respuesta Responder a este mensaje
#3 Vyacheslav Popov
05/02/2005 - 20:33 | Informe spam
Hola Octavio.

Entonces, ¿cual es diferencia? entre:

struct Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

y

class Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

Se me escapa la idea de estructuras o registros... pues, ¿porque no lo
quitan directamente?... y menos dolores de cabeza..

Saludos.
Popov

"Octavio Hernandez" escribió en el mensaje
news:
Alberto,

Las estructuras son tipos-valor, y las variables de tipo estructura se
almacenan directamente en el stack (caso de variables locales) o inline
dentro de los objetos u otras estructuras, cuando forman parte de ellas.
Las clases, por el contrario, son tipos-referencia. Sus instancias se
crean siempre en el heap (memoria dinámica) y las variables de tipos de
clase contienen únicamente una referencia (especie de puntero) a la
variable.

Las estructuras se deben utilizar fundamentalmente para definir tipos
formados por unos pocos campos que sean todos de tipos-valor. Esto
garantiza que ofrezcan un mejor rendimiento. Ejemplos típicos son:

struct Punto { int x; int y; }
struct Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

Como ves, a las estructuras se puede asociar constructores, métodos,
niveles de visibilidad y prácticamente casi todo lo que pueden tener las
clases.

Slds - Octavio


"Alberto" escribió en el mensaje
news:
Hola :)

Cuando debo usar una estructura y cuando una clase? Cuales son sus
principales diferencias :)
Gracias







Respuesta Responder a este mensaje
#4 Octavio Hernandez
05/02/2005 - 22:02 | Informe spam
Vyacheslav,

VELOCIDAD (RENDIMIENTO) es la diferencia.

Imagínate que tienes un método en el que hay una variable local 'c' de tipo
'Complejo';

void f()
{
int c = new Complejo(3,5);
// más cosas ...
}

De toda la vida, para las variables locales se utiliza la pila (stack), que
es un mecanismo muy cómodo porque las llamadas a funcoines en un programa
siguen la disciplina de una pila (la última función llamada es la primera
que termina).

Cuando el control entre en la función f() y se construya el objeto c:
a) si Complejo es una estructura, la memoria para sus dos campos se
reservará EN LA PROPIA PILA Cualquier acceso a la variable utilizará
direcciones relativas en la propia pila.
b) si Complejo es una clase, se construirá un objeto Complejo EN EL
HEAP(MEMORIA DINAMICA) (objeto que después será basura hasta que el
recolector lo recoja). En la pila se almacenará sólo una REFERENCIA
(puntero) al objeto dinámico. Para acceder a un campo de la variable, hará
falta acceder al objeto en memoria a través de la referencia.

Por lo general (y siempre en caso de que la clase sea pequeña y sólo
contenga tipos valor), a) es mucho más eficiente que b).
Por esa razón es que ciertas clases de .NET, como por ejemplo Point, son
estructuras y no clases. Si Point fuera una clase, ciertos algoritmos
gráficos podrían ser mucho más lentos y consumirían mucho más memoria...

¿OK?

Privet,

Octavio

"Vyacheslav Popov" escribió en el mensaje
news:%
Hola Octavio.

Entonces, ¿cual es diferencia? entre:

struct Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

y

class Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

Se me escapa la idea de estructuras o registros... pues, ¿porque no lo
quitan directamente?... y menos dolores de cabeza..

Saludos.
Popov

"Octavio Hernandez" escribió en el mensaje
news:
Alberto,

Las estructuras son tipos-valor, y las variables de tipo estructura se
almacenan directamente en el stack (caso de variables locales) o inline
dentro de los objetos u otras estructuras, cuando forman parte de ellas.
Las clases, por el contrario, son tipos-referencia. Sus instancias se
crean siempre en el heap (memoria dinámica) y las variables de tipos de
clase contienen únicamente una referencia (especie de puntero) a la
variable.

Las estructuras se deben utilizar fundamentalmente para definir tipos
formados por unos pocos campos que sean todos de tipos-valor. Esto
garantiza que ofrezcan un mejor rendimiento. Ejemplos típicos son:

struct Punto { int x; int y; }
struct Complejo
{
private double re, im;
public Complejo(double re, double im) {this.re = re; this.im = im; }
public double Modulo() { return Math.sqrt(re*re + im*im); }
}

Como ves, a las estructuras se puede asociar constructores, métodos,
niveles de visibilidad y prácticamente casi todo lo que pueden tener las
clases.

Slds - Octavio


"Alberto" escribió en el mensaje
news:
Hola :)

Cuando debo usar una estructura y cuando una clase? Cuales son sus
principales diferencias :)
Gracias











Respuesta Responder a este mensaje
#5 Octavio Hernandez
05/02/2005 - 22:07 | Informe spam
Angel,

Quizás, según mi forma de pensar, la diferencia mas importante es que una
estructura es un ente tipo registro (como almacen de datos relacionados
entre si) y una clase se compone de métodos,los cuales permiten
comunicacion con el objeto mediante la cual se lleva acabo alguna acción
codificada por dicho método.



Entiendo tu punto de vista, que es el correcto por ejemplo en C++. Pero en
C# las estructuras también pueden tener métodos, como muestra mi ejemplo
Complejo.

Slds - Octavio
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida