📘 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);
🔹 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;}
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
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
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