Menu
Coddy logo textTech

Structs como objetos

Parte de la sección Programación Orientada a Objetos del Journey de C de Coddy. Lección 6 de 61.

En los lenguajes orientados a objetos, un objeto es una entidad que combina datos (estado) con funciones que operan sobre esos datos (métodos). C no tiene objetos integrados, pero podemos lograr el mismo concepto usando estructuras y funciones.

Piensa en una estructura como la parte de «datos» de un objeto. Contiene el estado: los valores que definen qué es actualmente el objeto:

typedef struct {
    int value;
} Counter;

Esta estructura Counter representa una entidad con un único elemento de estado: su valor actual. Para dotarla de comportamiento, escribimos funciones que aceptan la estructura como parámetro:

void counter_increment(Counter *c) {
    c->value++;
}

int counter_get(Counter *c) {
    return c->value;
}

Estas funciones actúan como métodos. Operan específicamente sobre datos de Counter. Al pasar la estructura struct a las funciones, simulamos lo que otros lenguajes hacen automáticamente cuando llamas a counter.increment().

int main() {
    Counter my_counter = {0};
    counter_increment(&my_counter);
    printf("%d\n", counter_get(&my_counter)); // Imprime: 1
    return 0;
}

La convención de nomenclatura typename_action (como counter_increment) ayuda a organizar tu código y deja claro a qué estructura pertenece una función. Este patrón es la base de la programación orientada a objetos en C.

challenge icon

Desafío

Fácil

Construyamos un módulo Counter sencillo que trate una estructura como un objeto con comportamiento. Organizarás tu código en tres archivos para practicar el patrón de agrupar datos con las funciones que operan sobre ellos.

Crearás tres archivos:

  • counter.h: Tu archivo de encabezado que declara la estructura Counter con un único miembro int value. Declara también dos funciones que actúan como «métodos» del contador: counter_increment (recibe un puntero a Counter y aumenta su valor en 1) y counter_get (recibe un puntero a Counter y devuelve su valor actual). Usa protectores de inclusión con el símbolo COUNTER_H.
  • counter.c: Tu archivo fuente que implementa ambas funciones. Recuerda incluir tu archivo de encabezado.
  • main.c: Tu archivo principal que crea un Counter, realiza operaciones sobre él y muestra los resultados.

Recibirás dos entradas enteras: el valor inicial de tu contador y el número de veces que se incrementará.

En tu archivo principal, inicializa un Counter con el valor inicial y, después, llama a counter_increment el número de veces especificado. Finalmente, usa counter_get para obtener e imprimir el valor final.

Imprime el resultado con este formato:

Final value: {result}

Por ejemplo, con un valor inicial de 5 y 3 incrementos, la salida sería:

Final value: 8

Pruébalo tú mismo

#include <stdio.h>
#include "counter.h"

int main() {
    // Leer la entrada
    int starting_value;
    int num_increments;
    scanf("%d", &starting_value);
    scanf("%d", &num_increments);
    
    // TODO: Crea un Counter e inicialízalo con starting_value
    
    // TODO: Llama a counter_increment el número de veces especificado
    
    // TODO: Usa counter_get para obtener el valor final e imprímelo
    // Formato de impresión: "Final value: {result}"
    
    return 0;
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos

Practica por tu cuenta: Compilador de C online