-- Introduzione
-- Obiettivi
Implementazione pratica
-- Dichiarazione di classe
Ereditarietà

Progetto Yed
Tecniche di programmazione ad oggetti con il linguaggio C.

Esempio di utilizzo di oggetti Yed

Un oggetto Yed, come abbiamo visto, inizia a vivere attraverso una chiamata del tipo:

OBJ *p= New(OBJ);

dove OBJ è il tipo dell'oggetto Yed in uso. Ad esempio, per utilizzare l'oggetto Cprova appena definito in una nostra applicazione, dovremmo inserire in essa un codice di questo tipo:

#include "yedstd.h"
#include "yedprova.h"
...
Cprova *p = New(Cprova);

Naturalmente, occorre includere i files header standard di Yed e dell'oggetto Cprova, altrimenti la risoluzione dei simboli utilizzati sarà impossibile.
Dopo l'invocazione del costruttore, il puntatore p è il puntatore 'this' all'oggetto creato, e deve essere passato come primo parametro di ogni metodo dell'oggetto, in questo modo:

OBJ *p= New(OBJ);

p->metodo_di_OBJ(p,...);

In relazione al nostro esempio con Cprova, il tutto diventa:

#include "yedstd.h"
#include "yedprova.h"
...
Cprova *p = New(Cprova);
...
p->metodo(p);

Questa operazione permette di creare oggetti Yed dello stesso tipo nel medesimo 'scope' applicativo, o in thread differenti, perchè ogni istanza dell'oggetto creato possiederà il proprio puntatore 'this'.
Naturalmente, un metodo può avere più parametri, oltre il puntatore 'this'; essi verranno sempre dopo il puntatore 'this', primo parametro per definizione.

Quando l'istanza dell'oggetto Yed creata non è più necessaria, occorre invocare il suo distruttore, nella forma

Delete(OBJ,p);

Il nostro esempio con Cprova diventa

#include "yedstd.h"
#include "yedprova.h"
...
Cprova *p = New(Cprova);
...
p->metodo(p);
...
Delete(Cprova,p);

Ogni istanza di oggetti Yed viene creata nella memoria heap: se il distruttore relativo non viene invocato, ne deriva una area di memoria non liberata, dunque non disponibile. Ricordare sempre, dunque, di cancellare le istanze di oggetti Yed non più necessarie, al termine del loro utilizzo.

 


Copyright (C) - Giulio A. - ynoxia(at)gmail(dot)com