• Non ci sono risultati.

Obiettivo Introduzione

N/A
N/A
Protected

Academic year: 2021

Condividi "Obiettivo Introduzione"

Copied!
7
0
0

Testo completo

(1)

Introduzione

Obiettivo

Di fronte al crescere dell’importanza dello standard UML (Unified Modeling Language) come linguaggio per la progettazione di sistemi Object-Oriented si è riscontrata l’estrema diffusione dell’uso di strumenti CASE1 basati su tale formalismo tra i gruppi di sviluppo di software che abbiano una complessità apprezzabile. Tali strumenti hanno quindi un’interfaccia che presenta al progettista una notazione già familiare perché completamente esplicitata nella documentazione ufficiale dello UML, ed hanno una rappresentazione interna del modello fatto dall’utente che si basa su una serie di classi la cui definizione è analizzata completamente nella specifica del linguaggio UML. Quindi un modello UML può essere espresso da uno strumento software solo se quest’ultimo si basa su una libreria che sia implementata a partire dalla specifica della semantica del linguaggio UML stesso.

Dopo un’analisi di ciò che offre la comunità Open Source si è appurata la mancanza di una tale libreria in C++ (il linguaggio di programmazione più efficiente del panorama Object-Oriented) che sia rigorosamente sviluppata a partire dalle specifiche dell’ultima versione approvata dello standard UML. Questo è il motivo per cui si è fissato come obiettivo primario la stesura di una

1

(2)

libreria in C++ standard di alta qualità multipiattaforma per la realizzazione di modelli UML secondo la specifica di OMG (Object Management Group) ver. 1.4. Come obiettivo secondario si è stabilito di realizzare un tool per la modellazione di sistemi software nella notazione UML che utilizzi tale libreria.

Perché C++

Quale linguaggio è il più indicato per il prodotto richiesto dalle specifiche e perché? Questa domanda è opportuna ogni qual volta si ha l’intenzione di implementare un software.

Principalmente nell’industria del software tale scelta è subordinata alla legge del mercato con tutti i benefici e i danni conseguenti. Se invece ci si pone tale domanda in un ambito Open-Source ed accademico si cerca di scegliere il linguaggio più efficiente e più sicuro nel controllo degli errori. Per valorizzare e dimostrare l’opportunità della scelta del linguaggio C++ si possono quindi elencare gli elementi fondamentali della programmazione in tale linguaggio in ordine decrescente di importanza2.

1. C++ è un linguaggio MULTI - PARADIGMA: supporta, cioè, molteplici approcci ortogonali fra loro all'impostazione di un programma. Questo lo rende molto potente, con la contropartita di essere complicato. Il "filo rosso" che unisce fra loro tutti i molteplici paradigmi può essere considerato quello

(3)

del “controllo statico dei tipi”, ovvero tutte le inizializzazioni e gli assegnamenti dei valori sono controllati durante la compilazione per assicurarsi che i tipi dei valori siano corretti; se non lo sono ed esiste una regola per poterli rendere compatibili il compilatore applica quella regola: ovvero viene fatta una conversione di tipo. Se invece non vi è nessuna regola applicabile il comando viene segnalato come errore. Il linguaggio permette al programmatore di violare esplicitamente tale controllo, ma fa del suo meglio per consentire anche di rispettarlo, con i due benefici di "controlli a tempo di compilazione" ed "efficienza massimale a tempo di esecuzione".

2. Paradigma "uso di libreria standard": il C++ mette a disposizione dei programmi una libreria standard, molto potente e ottimizzata, per un certo insieme di funzionalità. Questa libreria standard non è "vasta", ma, per le aree che copre, offre una profondità (completezza, riusabilità, estensibilità) veramente inusitata. L'uso assai vasto di parametrizzazioni (template) nella libreria standard consente di ottenere queste ricche funzionalità nel pieno rispetto della correttezza dei tipi.

3. Paradigma “uso di codice di terze parti”: il C++ permette di interfacciare con grande facilità librerie non standard, ma comunque distribuite e certificate da importanti sviluppatori di software, per l'accesso a tutte quelle funzioni che 2) non copre come i database relazionali, le reti, la grafica, la matematica avanzata, le interazioni col sistema, ecc..

(4)

4. Paradigma "ad oggetti": il C++ permette di fare pieno uso del paradigma ad oggetti (polimorfismo). La programmazione ad oggetti in C++ è ottenuta nel pieno rispetto della correttezza dei tipi.

5. Paradigma "programmazione generica e parametrizzata": il C++ permette di fare uso del paradigma "generic programming" (programmazione parametrizzata). La libreria standard, ad esempio, si basa su questo paradigma ancora più di quanto non si basi su 4). L'approccio C++ alla genericità è legato alla correttezza dei tipi e va nella stessa direzione (fare tutto il possibile a tempo di compilazione, non a tempo di esecuzione, per garantire un buon livello di controllo degli errori "anticipato" e l'efficienza ottimale a tempo di esecuzione).

6. Paradigma "tipi di dati astratti": molti ignorano la potenza intrinseca di questo paradigma, e lo confonderebbero con 4). C++ contiene vari elementi che con 4) c'entrano sino ad un certo punto (Java, ad esempio, per cui la programmazione ad oggetti è veramente centrale, ne manca), come la definibilità di assegnazioni e copie che sono nel linguaggio proprio per supportare questo paradigma in modo più ricco e completo (tutto nell'ottica della correttezza dei tipi).

7. Paradigma "dinamico": C++ ha un supporto "minimale" per gli approcci dinamici, noto normalmente come "identificazione dei tipi a tempo di esecuzione" (RTTI: run-time type identification), che consente di

(5)

implementare strutture dinamiche più ricche minimizzando le (inevitabili) violazioni della correttezza dei tipi implicite in questo dinamismo.

8. Varie ed eventuali: il C++ è pieno zeppo di piccoli dettagli da non trascurare, la maggior parte dei quali può essere riportata ai vari tipi di funzionalità previsti dai precedenti punti (alcuni, in realtà, hanno ragioni d'esistere puramente "storiche", ma anche essi contribuiscono fortemente, grazie alla compatibilità col passato che garantiscono, a supportare, in particolare, 3)).

Unified Modeling Language

UML è un linguaggio di modellazione visuale per analizzare, specificare, visualizzare e documentare lo sviluppo di documenti di un sistema software Object-Oriented. Il suo obiettivo è ambizioso: diventare il “linguaggio per la creazione di modelli software ad oggetti”, ossia un linguaggio universale per la progettazione di sistemi Object-Oriented.

La specifica del linguaggio UML è composta da due documenti principali:

semantica: definisce un metamodello, il cui scopo è fornire la specifica semi-formale della sintassi astratta e della semantica di UML;

notazione: la descrizione informale della notazione (sintassi concreta) e delle sue connessioni con la sintassi astratta.

(6)

1) Fornire un linguaggio di modellazione che risulti di facile comprensione, che si possa imparare ed applicare velocemente nello sviluppo di modelli ad oggetti.

2) Fornire meccanismi di estensibilità e specializzazione per estendere i concetti di base del linguaggio. Infatti UML definisce un insieme ristretto di concetti di base, che possono essere estesi per adattare il linguaggio a specifici domini applicativi. Per l'analisi e la progettazione delle applicazioni più comuni è sufficiente utilizzare i concetti di base, tuttavia è possibile aggiungerne di nuovi e introdurre anche nuove notazioni.

3) Produrre specifiche di modelli indipendenti da ogni particolare linguaggio di programmazione e da qualsiasi processo di sviluppo.

4) Fornire una base semi-formale per ottenere specifiche più rigorose. La maggior parte dei metodi Object-Oriented sono poco rigorosi: le relative notazioni vengono presentate intuitivamente senza l'utilizzo di alcun formalismo. Tuttavia, molti di questi metodi sono stati utilizzati con successo perché ritenuti utili e facilmente comprensibili. Per non perdere queste qualità, ma per aumentare il rigore del formalismo, UML ha adottato una specifica semi-formale. Essa consiste nel descrivere il metamodello del linguaggio, ossia un diagramma delle classi che definisce la notazione. Il metamodello UML è descritto nel capitolo I.

5) Incentivare lo sviluppo di strumenti per la progettazione orientata agli oggetti. La disponibilità di un linguaggio universale per la progettazione

(7)

Object-oggetti, perché fornisce un linguaggio comune e favorisce l'interoperabilità tra applicazioni differenti.

6) Integrare le “Best Practices” nel campo della progettazione orientata agli oggetti. Prima della nascita di UML i metodi per l'analisi e la progettazione ad oggetti superavano la cinquantina. UML si propone di essere un linguaggio standardizzato e flessibile che permette di unificare i metodi migliori, in particolare quelli precedentemente proposti dagli autori di UML: OMT, OOSE, Booch.

Si noti che UML è definito come un linguaggio di modellazione, non come un metodo (cfr. 4). Solitamente un metodo è composto da un linguaggio di modellazione e da un processo. Il primo rappresenta la notazione utilizzata dal metodo, il secondo descrive le fasi che occorre completare per portare a termine un progetto. UML non definisce un processo di sviluppo, quindi non può essere considerato un metodo ed è utilizzato da persone e gruppi che seguono approcci diversi (è “indipendente dai metodi”).

Riassumendo, lo UML è un’evoluzione dei modelli e dei diagrammi preesistenti, non è una rivoluzione, infatti ha affinità con Entità-Relationship, Flow Chart, diagrammi di stato e le varie notazioni Object-Oriented.

Riferimenti

Documenti correlati