← Volver a todos los proyectos

📘 Objetos en C

Basado en el libro Object-oriented Programming with Ansi-C de Axel-Tobias Schreiner.

🔹 Encapsulamiento

Se define un struct base llamado Class. A partir de este se pueden crear más objetos que hereden los mismos atributos y métodos. El diseño permite reutilizar y gestionar atributos de manera eficiente.

typedef struct {
size_t size;
void * (* ctor) (void * self, va_list * app);
void * (* dtor) (void * self);
void * (* clone) (const void * self);
size_t (* sizeOf) (const void * self);
int (* differ) (const void * self, const void * other);
char * (* toString) (const void * self);
} Class;
/* Métodos sobrecargados: */
void * new(const void * _class, ...);
void delete(void * self);
void * clone(const void * self);
int differ(const void * self, const void * other);
size_t sizeOf(const void * self);
char * toString(const void * self);
c

🔹 Uso del repositorio

El manejo de objetos permite simplificar la gestión de memoria en C. Considera el ejemplo de inicializar una cadena usando la clase String:

#include "String.h"
#include <stdlib.h>
int main() {
void * text = new(String, "Hola mundo");
printf("%s", toString(text));
return 0;
}
c

Este enfoque oculta el manejo de memoria en segundo plano, haciendo el código más limpio y legible.

🔹 Funciones principales

  • Constructor: Inicializa cualquier objeto de forma estandarizada con new(). Por ejemplo:
    void * text = new(String, "Hello, world");
    c
  • Clonador: Crea una copia independiente del objeto:
    void * textCopy = clone(text);
    c
  • Destructor: Libera la memoria del objeto usando:
    delete(text);
    c
  • toString: Retorna el contenido del objeto como una cadena imprimible:
    printf("text = %s\n", toString(text));
    c

📋 Ejemplos de uso

Para compilar los ejemplos y ver los resultados en consola, utiliza los comandos:

make examples && make run_examples
sh

El código de los ejemplos está en la carpeta examples.

🧪 Tests

Para verificar la integridad de las funciones implementadas, puedes ejecutar los tests con:

make tests
bash

Los tests utilizan la librería acutest.h . Esto permite agregar más funcionalidades y probarlas.

🧹 Limpieza

Para eliminar todos los archivos compilados, utiliza el comando:

make clean
bash