Domanda

Potrebbe UML essere utilizzato per programmare un sistema di computer da solo, senza un linguaggio di implementazione di supporto, per esempio diagrammi dritto al codice macchina (forse tramite C o C ++, ecc), senza l'intervento di codifica umana.

È stato utile?

Soluzione

Ho intenzione di andare contro la tendenza generale e condividere un'esperienza che mostra ciò che UML può fare oggi, e quello che potrebbe essere qualche futura versione di UML (o un altro approccio di modellazione).

Prima un po 'di storia.

Una volta, quando, la gente computer in assemblea programmati (non andare tutta la strada fino qui). Poi è arrivato linguaggi di livello superiore come il C e Basic. I programmatori che erano molto buoni in assemblea hanno sostenuto che non si può esprimere pienamente tutto ciò che il processore è in grado di fare (in modo ottimizzato) in un linguaggio di alto livello. In realtà, avevano ragione. Alcune cose erano molto meno ottimale dal punto di vista della memoria e le prestazioni in linguaggi di livello superiore perché non si poteva controllare completamente le istruzioni impartite al processore.

La cosa è, linguaggi di livello superiore fornito una forma molto più astratta di espressione. Così, hanno preso piede e dopo un po ', la gente non ha veramente cura che non si poteva controllare completamente ogni aspetto del processore, perché gli sviluppatori sono stati in modo molto più produttivo ( legge di Moore aiutato anche).

turni simile è accaduto con linguaggi orientati agli oggetti, e ancora una volta con le lingue gestite. Ogni volta, un più alto livello di astrazione è diventato disponibile e alla fine ha vinto fuori perché era più efficiente di usare come sviluppatore. Infatti, le inefficienze generalmente gli alti livelli di espressione scomparire compilatori diventano migliori e tecniche di ottimizzazione migliorano.

Model Driven di sviluppo è un più alto livello di espressione. Non si può rappresentare appieno qualsiasi codice che si potrebbe scrivere, per esempio, C # o Java. Soprattutto non fuori dalla scatola. Tuttavia, è possibile generare una porzione molto consistente di un'applicazione direttamente da un modello UML.

ho guidato lo sforzo generazione di codice UML-based per diversi piuttosto grandi progetti. In molti casi, si potrebbe generare 30% al 60% di tutto il codice sorgente delle applicazioni (la vita reale, di classe enterprise). E questo è solo con piccoli generatori di scrittura squadra per un determinato dominio. Alla fine, un intero settore sarà dietro strumenti per generare più di applicazione nella vita reale dai modelli.

Questo è il prossimo passo nella naturale evoluzione che abbiamo visto nel nostro tempo e il tempo l'industria di nuovo, fin dai primi codici di assemblaggio codici operativi astratte (c'era probabilmente qualcosa prima, ma che era prima del mio tempo).

Altri suggerimenti

Risposta breve: no. Alcuni strumenti di modellazione UML in grado di generare Java, C ++, e il codice in altri linguaggi di programmazione. Tuttavia, ciò che genera di solito sono le interfacce e rapporti di classe. Questi strumenti generano mozzi per le quali occorre ancora l'attuazione da fornire, così intervento umano è necessario.

Ci sono alcuni strumenti per convertire i diagrammi UML modellazione per in codice - in particolare, UML diagrammi di stato. Per esempio, ho utilizzato uno strumento chiamato "Rhapsody" (da I-Logix) nel 2000 che avrebbe convertire un diagramma UML a C ++. Era fresco perché lo strumento potrebbe eseguire direttamente la macchina a stati, e potrebbe anche eseguire codice su un computer remoto (in questo caso, una pedana vxworks).

Ma in generale, UML è meglio utilizzato come uno strumento di modellazione. Usalo per modellare il vostro sistema e di fornire gli schemi per i documenti di progettazione, o qualsiasi altra cosa. Quindi utilizzare questa conoscenza per sviluppare il sistema in maniera organizzata.

In teoria? Sì - è possibile utilizzare un gajillion e specificano tutto nei minimi dettagli, quindi collegare il statali diagrammi macchina ai metodi nel diagramma delle classi ed eseguire qualche strumento terribilmente complicato per generare tutto questo.

Ma questo non è qualcosa che ci si vuole fare. Non sarà sempre più libertà nel modo in cui ti esprimi, perché si deve usare il giusto tipo di sintassi in modo che lo strumento capirà tutto ciò che si scrive. Non solo, ma si sarebbe in grado di scrivere il codice vero e proprio se stessi in molto meno tempo di quanto ci vorrebbe per fare tutti quei diagrammi - e l'unica cosa che ti dà è che il codice è una copia carbone della specifica (perché le specifiche genera il codice). Che può essere una buona cosa, ma dal momento che non si ha il codice vero e proprio, che significa anche che il debug significa debugging gli schemi -. E che è quasi sicuramente sarà quasi impossibile

UML può modellare una macchina a stati. Quindi, può rappresentare una macchina di Turing. Un compilatore con abbastanza sofisticata in grado di leggere questa rappresentazione e creare una rappresentazione binaria (eseguibile) del Turing macchina.

Quindi, la mia risposta è sì.

Modifica

Dal momento che la mia risposta sembra essere sgradevole per alcuni ... vorrei chiarire che questo "compilatore con abbastanza sofisticazione" è completamente immaginario e probabilmente lontano nel futuro ... ma sembra dalle altre risposte, ci sono alcuni programmi in grado di generare un po 'di codice standard o addirittura generare e gestire un intero programma.

Credo che dimostra che UML (o un sottoinsieme di esso) si qualifica come un linguaggio di programmazione, ma probabilmente non è un buon compromesso.

Sì, è possibile, basta controllare approcci come ExecutableUML (e un nuovo standard sulla stessa linea è in arrivo) che si basano sull'uso di un linguaggio azione per esprimere i dettagli del comportamento del sistema (una specie di psedocode con iteratori , le condizioni, e di creare, leggere, aggiornare e distruggono le azioni).

Una discussione del tutto diverso è questo vale la pena. Modellazione il sistema con sufficiente precisione e di dettaglio per essere in grado di generare il 100% del codice non paga sempre. Preferisco restare al mio principio di Pareto (o 80-20 regola) per lo sviluppo model-driven: il 20% dello sforzo di modellazione sufficiente a generare l'80% del codice di applicazione

spiegazione più dettagliata qui: http: // modellazione-lingue. com / blog / content / Pareto-principio-applicata-MDD

V'è ora una completamente OMG standardizzati, Turing-complete, la semantica di esecuzione per un sottoinsieme di UML 2.3, noto come "Foundational UML" (fUML). Guardate qui per un'implementazione di riferimento e il puntatore alla specifica OMG. Ci sono anche lavori in corso su un linguaggio azione UML standard di OMG.

Nel bene o nel male, quando questo lavoro è fatto, fUML sarà essere un linguaggio di programmazione.

- Ed

diagramma delle classi può essere ingegnerizzato in avanti in linguaggio di programmazione dipende dal tool UML che si sta utilizzando. Penso che è ancora necessario per codificare la propria logica di business, ecc.

Non è. Niente affatto.

Non può prendere decisioni (se di) o loop correre. Si tratta di meno di un linguaggio di programmazione di una macchina a stati finiti. Almeno un FSM può prendere decisioni. UML doesnt nemmeno stato.

Risposta breve:. Come è in questo momento, non è possibile generare il 100% del codice

Si potrebbe forse generare la struttura di classe dei vostri sistemi tramite Diagramma di classe, e, probabilmente, parte del corpo dei metodi attraverso l'interazione Diagrammi e / o diagrammi di stato, ma credo che su di esso.

semantica azione UML ha il supporto per l'assegnazione oggetto / smaltimento, la lettura / scrittura di attributi e le variabili locali, invocando un intervento chirurgico, lancio e la cattura delle eccezioni, la navigazione di un rapporto, blocchi, loop e il comportamento condizionale, e molto altro ancora.

See:

http: // abstratt. com / blog / 2008/11/02 / what-can-UML-do-per-te /

http: // abstratt.com/blog/2008/11/07/executable-models-with-textuml-toolkit-12-m1/

Per chi dire "no": la questione è di circa UML , non il "strumenti UML si usano", gente. UML è un linguaggio enorme, e gli strumenti di attuazione di un sottoinsieme di esso, che spesso può essere molto piccola.

UML2 è solo i dati per il vostro generatore di codice.

Il generatore di codice generalizza codice utilizzando i dati dal modello (Come il C ++ - modelli di generalizzare codice utilizzando C ++ - strutture come modello).

Lavorare in quel modo, si è in grado di produrre un completo in, Replace, Update, Delete (CRUD) e applicazione di ricerca per ogni modello.

Questo codice implementa ganci, callback, ereditarietà o tecniche simili, che consentono di estendere le funzionalità da manoscritta-code, senza toccare il codice generato (che deve essere visto come codice intermedio).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top