Newsgroup: it.comp.lang.c
Titolo: UML e C

Salve a tutti,
qualcuno di voi ha avuto qualche esperienza concreta nell'usare UML come 
linguaggio di
modellazione e C come linguaggio ? mi piacerebbe parlarne.
grazie.
_ _
softwareEngineer


Sì, certo. Come prima cosa c'è da dire che l'unico diagramma UML che
potrebbe creare perplessità è quello delle classi. Un activity/
usercase/deployment/etc. diagram che sia è ovviamente indipendente
dall'implementazione. Detto questo c'è da fare una distinzione netta
tra chi usa il class diagram UML come "descrizione" del progetto o chi
lo usa come "inizio di una implementazione". Posso dire dalla mia
esperienza che nel secondo caso l'UML fallisce con qualsiasi
linguaggio (anche con il Java, che sembra essere quello ad-hoc per
questo scopo). In C, come quasi in ogni linguaggio del resto, è
possibile riportare i concetti descritti in UML, e mantenere nel
codice gli stessi requisiti di scalabilità e riutilizzo che il
software-engineer si aspettava scrivendo il progetto (che è uno degli
scopi primari di un linguaggio di modellazione, in fondo).
Spero di non essere stato troppo fumoso nei commenti ;)
Ciao!


Per quanto riguarda l'uso che se ne fa del class diagram (e di tutto
UML, secondo
me !) penso che si dovrebbe "usare" UML per comprendere e comunicare
come dice
Larman (e non per documentare o altri scopi).
Ci sono concetti di UML che si possono applicare, in modo più o meno
agile, al C;
Per esempio il concesso di ereditarietà (anche se non nella forma
canonica ) al C,
ma altri concetti no.
In rete ho letto qualche articolo in cui si faceva uso delle "classi"
simulate con le
classiche struct e una serie di puntatori a funzioni ecc. ecc. ecco tu
fai
uso di questi meccanismi oppure rimani più sul "classico" ?
Ciao.


Ci sono delle occasioni in cui in C è utile avere una struttura dati
del genere, altri casi in cui invece è solo un impiccio. Una cosa del
genere si usa spessisimo ad esempio per implementare pattern come un
facade, uno strategy o un command. Esempio classico è la struttura del
gestore di filesystem del kernel linux, che per permettere l'utilizzo
contemporaneo di più filesystems utilizza un'interfaccia comune a
tutti e un oggetto (modulo) per ognuno, il tutto implementato proprio
come dicevi te sopra.
Certi pattern sono implementabili in C a livello di modulo (inteso
prorpio come file .c/.h) e non come oggetto a run-time: pensa ad
esempio alla visibilità di metodi e variabili, ottenibile
semplicemente con uno static. Certi pattern in C non hanno proprio
senso, come un singleton.
Non credo sia possibile fare una generalizzazione, ogni situazione
richiede più buon senso che regole.


Grazie mille delle risposte,
hai degli esempi concreti (utilizzo dei pattern in C) ? o dei link che
so ...
many thanks.

 many thanks.
Ora come ora non mi sovvengono dei link "pratici". Ci sono tantissimi
progetti open source realizzati interamente in C con una filosofia ad
oggetti da cui è possibile prendere spunto, due dei più famosi che
ricordo solo sqlite e le librerie gtk.
Se non ricordo male solo qualche mese fa su comp.lang.c c'è stato un
thread con una domanda simile dove sono stati elencati molti altri
esempi, solo che cercando adesso non sono riuscito a ritrovarlo -
sorry!
Ciao!