¿Las estructuras en lenguaje C son similares a los objetos en Java?

C struct es un tipo de datos estático que ofrece una forma práctica de manipular tipos de datos que tienen una estructura compuesta, similar a un registro.

Los objetos en Java tienen campos, que de alguna manera son similares a los campos en un registro, pero ofrecen métodos que dan vida a los objetos.

De todos modos, es posible crear algo que se parezca a los objetos utilizando punteros de función como campos en struct y alguna forma de “azúcar sintáctico” con macros, pero el resultado, incluso en el mejor de los casos con C, es un pálido parecido de objetos en Java.


De todos modos, debe considerarse que C ++, al menos en la primera versión, era un preprocesador o un “transpilador”, como se definiría hoy en día, ese código traducido en C ++, que tiene objetos de primera clase, en C y los objetos se implementaron con estructuras y métodos con punteros de función, por lo que C ofrece las herramientas básicas para crear un lenguaje OOP, pero hacerlo a mano es bastante torpe.

No. Pensar de esa manera pierde el punto de OOP.

Las estructuras C recopilan elementos de datos relacionados juntos. Los campos privados de los objetos Java también recopilan elementos de datos relacionados juntos.

Pero aquí está la diferencia.

La parte definitoria de un objeto son sus métodos públicos “tell don’t ask”.

Un objeto de correo electrónico tendrá un método:

email.sendTo (buzón de correos);

Donde postbox es otro objeto.

¿Viste cómo ninguno de los datos privados apareció en ese método? ¿Cosas como ‘destinatario’, ‘asunto’, ‘mensajeCuerpo’?

La ventaja de esto es que es libre de cambiar cómo funciona, qué datos necesita, sin cambiar el código de llamada.

Con una estructura C, cada vez que cambian los datos, cambia todo el código de llamada. No puede cambiar cómo funciona el comportamiento interno del objeto, porque una estructura C no tiene ese concepto.

Esta idea de encapsulación es fundamental para OOP. Se trata de qué comportamiento tiene un objeto, no de los datos que oculta.

Bueno, para un programador novato, puede tratarse de la misma manera porque no han trabajado con ambos.

Pero técnicamente, los Objetos en Java son mucho más ventajosos que las Estructuras en C. Los objetos en Java tienen más características que las Estructuras. Los objetos son mucho más seguros que las estructuras, ya que no hay especificadores de acceso (públicos, privados, protegidos, etc.) disponibles en lenguaje C. Además, el puntero a una variable de estructura puede arriesgar la información contenida en variables de estructura. No hay otra forma de acceder a los miembros de la clase que no sean sus propios objetos o sus propios métodos de miembro.

Por lo tanto, podemos decir que los objetos en Java son más seguros y seguros que las estructuras en C.

De alguna manera es similar, pero tenga en cuenta que c es un lenguaje orientado a la acción, no un objeto orientado. La estructura es en realidad un tipo de datos definido por el usuario que proporciona una forma de almacenar muchos valores diferentes en variables de tipos potencialmente diferentes bajo el mismo nombre.

Bueno, yo diría que los punteros a las estructuras en C son teóricamente similares a los objetos en Java, lo que excluye el hecho de que las estructuras no pueden incluir métodos. Las estructuras son una forma de crear tipos de datos complejos en C, similares a las clases en Java, pero las clases pueden incluir métodos que operan en los datos, mientras que las estructuras no pueden.

En términos generales, C no es un lenguaje orientado a objetos, mientras que Java es un lenguaje orientado a objetos, y los objetos en Java son una consecuencia de que esté orientado a objetos.

Las estructuras en C envuelven solo los atributos de los objetos solamente, ignorando los métodos o el comportamiento. Tampoco hay un concepto de modificador de acceso en él. Entonces es el POD (Plain Old Data) y se usa para objetos livianos o simplemente estructuras.

En Java, los objetos tienen atributos y comportamiento envueltos en él.

Es un objeto puro y dado que C no es OO, solo ofrece estructura como tipo compuesto.

1. El acceso a los miembros de datos y las funciones de los miembros se puede restringir en Java utilizando especificadores de acceso.

2. Las clases Java son tipos de referencia, mientras que las estructuras C son tipos de valor.

3. Las clases Java pueden tener métodos para operar en datos.

4. Las clases Java soportan polimorfismo.

5. Las clases de Java admiten herencia.

6. Se puede asignar una variable de referencia de clase base a la dirección de un objeto de clase derivado.