Sei sulla pagina 1di 6

DEV DEVeloping Software Solutions n.

118 maggio 2004

Quale linguaggio per quale compito


di Alessio Saltarin
Una panoramica sui principali linguaggi di programmazione per computer suddivisi per campo di applicazione

Alessio Saltarin ` E laureato in Ingegneria Gestionale. Si occupa di progettazione e sviluppo di applicazioni enterprise in Vodafone Italia.

pubblicato su WWW.INFOMEDIA.IT stampa digitale da Lulu Enterprises Inc. stores.lulu.com/infomedia


Infomedia
` Infomedia e limpresa editoriale che da quasi venti anni ha raccolto la voce dei programmatori, dei sistemisti, dei professionisti, degli studenti, dei ricercatori e dei professori dinformatica italiani. Sono pi` di 800 gli autori che hanno realizzato per le teu state Computer Programming, Dev, Login, Visual Basic Journal e Java Journal, molte migliaia di articoli tecnici, presentazioni di prodotti, tecnologie, protocolli, strumenti di lavoro, tecniche di sviluppo e semplici trucchi e stratagemmi. Oltre 6 milioni di copie distribuite, trentamila pagine stampate, fanno di questa impresa la pi` grande ed u inuente realt` delleditoria specializzata nel campo della a programmazione e della sistemistica. In tutti questi anni le riviste Infomedia hanno vissuto della passione di quanti vedono nella programmazione non solo la propria professione ma unattivit` vitale e un vero a divertimento. ` Nel 2009, Infomedia e cambiata radicalmente adottando ` un nuovo modello aziendale ed editoriale e si e organizzata attorno ad una idea di Impresa Sociale di Comunit` , a partecipata da programmatori e sistemisti, separando le attivit` di gestione dellinformazione gestite da un board a comunitario professionale e quelle di produzione gesti` te da una impresa strumentale. Questo assetto e in linea con le migliori esperienze internazionali e rende Infomedia ancora di pi` parte della Comunit` nazionale degli u a sviluppatori di software. ` Infomedia e media-partner di manifestazioni ed eventi in ambito informatico, collabora con molti dei pi` imporu tanti editori informatici italiani come partner editoriale e fornitore di servizi di localizzazione in italiano di testi in lingua inglese.

Limpaginazione automatica di questa rivista e realizzata al ` 100% con strumenti Open Source usando OpenOffice, Emacs, BHL, LaTeX, Gimp, Inkscape e i linguaggi Lisp, Python e BASH

For copyright information about the contents of DEV, please see the section Copyright at the end of each article if exists, otherwise ask authors. Infomedia contents is 2004 Infomedia and released as Creative Commons 2.5 BY-NC-ND. Turing Club content is 2004 Turing Club released as Creative Commons 2.5 BY-ND. Le informazioni di copyright sul contenuto di DEV sono riportate nella sezione Copyright alla ne di ciascun articolo o vanno richieste direttamente agli autori. Il contenuto Infomedia e 2004 Infomedia e rilasciato ` con Licenza Creative Commons 2.5 BY-NC-ND. Il contenuto Turing Club e 2004 Turing Club e rilasciato ` con Licenza Creative Commons 2.5 BY-ND. Si applicano tutte le norme di tutela dei marchi e dei segni distintivi. ` E in ogni caso ammessa la riproduzione parziale o totale dei testi e delle immagini per scopo didattico purch e vengano integralmente citati gli autori e la completa identicazione della testata. Manoscritti e foto originali, anche se non pubblicati, non si restituiscono. Contenuto pubblicitario inferiore al 45%. La biograa dellautore riportata nellarticolo e sul sito www.infomedia.it e di norma quella disponibi` le nella stampa dellarticolo o aggiornata a cura dellautore stesso. Per aggiornarla scrivere a info@infomedia.it o farlo in autonomia allindirizzo http://mags.programmers.net/moduli/biograa

speciale Quale linguaggio per programmare


di

Alessio Saltarin > asaltarin@infomedia.it

Quale linguaggio per quale compito


Una panoramica sui principali linguaggi di programmazione per computer suddivisi per campo di applicazione
tendenzialmente molto lungo. Il prezzo da pagare erano le performance: il calcolatore doveva eseguire sempre linterprete e il programma in contemporanea. Un primo interprete fu il Lisp, ma il pi famoso fu certo il Basic, apparso dieci anni dopo il FORTRAN. Di Basic ne sono state prodotte moltissime versioni, ad esempio il TinyBasic, che girava su PC che nel 1975 avevano 4kb di memoria: due erano occupati da TinyBasic, e due rimanevano per sviluppare i propri programmi.

cegliere un linguaggio di programmazione un fatto non banale. Di linguaggi ce ne sono migliaia, di cui attualmente supportati almeno centosessantacinque tanti, perlomeno, ne mostra lOpen Director y Project alla voce Computers / Programming / Languages [1]. Per chi voglia imparare a programmare, o magari aggiornarsi, la scelta avr conseguenze importanti sul tipo di applicazioni da sviluppare e di progetti da seguire. Naturalmente non esiste il linguaggio migliore in assoluto; esiste invece quello che ha le caratteristiche per rispondere al meglio ad un particolare compito. Ben sapendo poi che la scelta si deve basare anche su considerazioni e inclinazioni personali, sulla disponibilit di strumenti e di conoscenza adeguati, vorrei con questo articolo almeno tentare una prima classificazione, basata sulle esperienze storiche e sugli standard oggi in atto nel mondo delle imprese. Una nota: intendo qui per linguaggio una tecnologia in grado di produrre unapplicazione per computer generica (all purpose) - escludo dunque tutti quelli che servono per esigenze specifiche come SQL, XML, HTML e via dicendo.

Non esiste il linguaggio migliore in assoluto, esiste quello migliore per un certo compito
Oggi, nonostante le cose siano in un certo senso molto evolute, la principale distinzione ancora tra linguaggi compilati (che generano cio codice direttamente eseguibile) e linguaggi interpretati (che devono cio girare allinterno di un programma interprete per funzionare). Con vari ricicli, ci sono state epoche in cui si preferivano i primi, ed epoche in cui si preferivano i secondi. Oggi, come dir, sembra che il modello vincente sia qualcosa che sta un po a met strada.

Quale compito
Quali sono oggi i principali campi per i quali il software viene scritto? Direi che ne esistono almeno cinque. Forse la categoria pi importante, quella che certamente in Italia impiega pi risorse, lo sviluppo di software cosiddetto web-based. Si tratta di tutte le applicazioni che possono essere fruite attraverso un browser. Queste possono essere suddivise in applicazioni Internet, caratterizzate dallavere uno scambio di dati ridotto al minimo, oppure applicazioni Intranet, tipicamente su reti aziendali dotate di larga banda, anche dette enterprise. Queste hanno avuto successo soprattutto per un fattore: cio che dopo gli anni di anarchia del modello clientserver, per cui ogni singolo client aveva la propria particolare configurazione e necessitava di manutenzione specifica, si tornati al modello centrale, per cui un unico server in grado di servire lapplicazione ai suoi terminali, senza un intervento diretto su questi ultimi. Se nelle applicazioni Internet la gran parte del codice funzionale a ci che appare a video, nelle applicazioni enterprise la parte di front end solo la punta delliceberg: la gran parte delle logiche risiede a livello di back end, ovvero di interazione con le basi di dati, con le code di messaggi, con i sistemi di integrazione (EDI, EAI, Biztalk). Ma il modello client-server non sparito, e a questo tipo di software aggiungerei tutto il cosiddetto legacy (eredit del passato). Si tratta di applicazioni vecchie, sviluppate in larga parte prima dellavvento di Internet con tecnologie obsolete. In genere utilizzano un collegamento continuo con una o pi basi di dati e necessitano di una serie di procedure per linstallazione sui client. Paradossalmente, anche questa categoria di software tra le maggiori: i sistemi legacy continua21 <<

Giusto due righe di storia


I primi linguaggi per computer furono uno strumento che aiutava i programmatori a generare linguaggio macchina (LM). Banalizzando un po, il linguaggio macchina costituito da una serie di numeri che, dati in pasto a un microprocessore, realizzano una certa funzione. Come si pu intuire, piuttosto scomodo programmare direttamente in LM. Agli inizi degli anni cinquanta si fece strada lidea di implementare una sorta di traduttore che, a fronte di un input in un linguaggio comprensibile da un essere umano, producesse il LM per una specifica CPU. Probabilmente il primo vero linguaggio in questo senso fu il FORTRAN, inventato nel 1954. Il FORTRAN permetteva di utilizzare appunto un linguaggio composto da parole chiave in inglese e formule matematiche (da cui il nome: FORmula TRANslator) per generare attraverso un compilatore del linguaggio macchina. Al FORTRAN seguirono altri linguaggi simili, come il Cobol e lAlgol. Ben presto, oltre ai compilatori, fecero la loro apparizione gli interpreti. Questi erano programmi che, a differenza dei compilatori che generavano dei file in LM pronti per lesecuzione, prendevano in input il codice sorgente del programma (scritto in un opportuno linguaggio) e lo interpretavano al volo, cio lo traducevano in LM, passo dopo passo, una singola istruzione alla volta. In questo modo il sorgente stesso diveniva eseguibile. Il vantaggio di questo tipo di linguaggi era dovuto al fatto che lo sviluppo diventava molto pi rapido, poich aumentava il grado di interazione col codice. Tenendo conto della velocit dei computer di allora, il processo di sviluppo, compilazione, esecuzione, correzione (debugging) era
DEV > n. 118 maggio 2004

speciale Quale linguaggio per programmare


Quale linguaggio per quale compito

RIQUADRO 1

Dai linguaggi alle piattaforme

Negli ultimi anni si notata una tendenza molto forte nel campo dello sviluppo software, e cio il passaggio dai linguaggi (compilati o interpretati) alle piattaforme (framework) [2]. Il megatrend stato lanciato da Sun, con Java, nel 1995. Lidea era quella di fondere le qualit dei linguaggi compilati (ottimizzazione, velocit di esecuzione) con quelle dei linguaggi interpretati (tra cui soprattutto il controllo sulle operazioni che il programma sta eseguendo). Il codice viene prima compilato in uno pseudo codice binario (bytecode o linguaggio intermedio), poi eseguito da un interprete o controllato da ambiente di run-time. Non era unidea del tutto nuova: un modello analogo era gi stato introdotto da Microsoft con il Visual Basic e il suo p-code nel 1991. Il run-time esegue tutta una serie di operazioni primitive come lallocazione della memoria, la compilazione justin-time, il controllo delle eccezioni, il multitasking e di fatto svincola il programmatore dallimplementazione di tutti questi aspetti. Un framework comprende dunque uno o pi linguaggi, un interprete, un compilatore, e in genere anche delle librerie o API standard, che permettono al programmatore di ridurre i tempi di sviluppo (una volta imparate, le stesse API possono servire ogni progetto, mentre di contro, per esempio in C, la mancanza di librerie standard obbliga lo sviluppatore a crearsele in proprio o a doverne imparare sempre di nuove). Lintroduzione della piattaforma Java venne inizialmente pubblicizzata con la sua capacit di eseguire lo stesso codice (il bytecode) su differenti sistemi operativi, cambiando solamente linterprete (write once, run anywhere). Ma, specie allora, la cross-portabilit interessava a pochi (oggi, con il maggior peso di Linux e MacOS il discorso comincia a cambiare). Quello che emerso, invece, che il successo di Java si deve alla sua straordinaria robustezza perch il runtime prende su di s le maggiori responsabilit quanto alla sicurezza e alla correttezza di implementazione delle operazioni low-level (accesso al disco, alla memoria, alla rete, gestione dei thread). Con lentrata in scena del .NET Framework, Microsoft ha sposato integralmente questa visione. Si consideri, ad esempio, che con Visual Studio .NET la compilazione in linguaggio macchina praticamente del tutto sparita. C#, J# .NET, VisualBasic .NET e Managed C++ producono tutti codice intermedio (MSIL). Il compilatore in linguaggio macchina nativo lasciato come opzione per il solo Visual C++ .NET. Una nota finale. A differenza del mondo Microsoft, dove la piattaforma ha un nome (.NET) e i linguaggi ad essa associati altri nomi, nel mondo Sun la piattaforma (Java) ha lo stesso nome del linguaggio. Non me ne voglia il lettore se questo pu causare confusione. Spesso, se si sta parlando del linguaggio Java o della piattaforma Java si pu capire solo dal contesto. no ad essere utilizzati per questioni economiche e necessitano continuamente di manutenzione, piccoli cambiamenti e integrazione con il nuovo software. Esistono poi tutte le applicazioni desktop, ovvero il mercato generico del software commerciale o shareware, per esempio office automation, antivirus, strumenti di sviluppo, foto e video editing, utility varie. Forse la classe di applicazioni pi affascinante per quella
>> 22

del software che definirei estremo, dove le risorse a disposizione CPU, scheda video, RAM, hard disk - devono essere sfruttate al 100%. Vi ricadono certamente le applicazioni di calcolo (centrale o distribuito), di CAD e CAM, scientifiche (soprattutto, ultimamente la ricerca medico-biologica) e, perch no, certi videogiochi. Infine, una categoria di crescente interesse riguarda le applicazioni mobili, cio tutto il software scritto per telefoni cellulari e computer palmari.

Per quali linguaggi


Esistono degli attributi chiave, delle propriet che caratterizzano il singolo linguaggio? In altre parole, esiste, per ogni linguaggio, un campo in cui questo eccelle? Se non il singolo linguaggio, certamente possibile evidenziare una tipologia di linguaggi che ben rispondono a specifiche esigenze. Esigenze che, in ordine sparso, possono essere: Robustezza. Oltre allhardware, anche il software deve essere in grado di garantire continuit e disponibilit. Sistemi che includono anche un solo programma di bassa qualit o scritto male possono diventare instabili nel loro complesso. La strada seguita per raggiungere lobiettivo stata quella di togliere progressivamente al programmatore la responsabilit sui compiti di basso livello (allocazione della memoria, gestione degli accessi concorrenti e via dicendo) e centralizzarla nelle mani di un programma controllore. I linguaggi che appartengono a questa categoria sono perci un mix tra compilati e interpretati: compilano infatti in un linguaggio intermedio (p-code, bytecode o IL) che verr poi eseguito dal programma controllore. Si parla quindi non pi di linguaggi, ma di piattaforme (framework) (nel Riquadro 1). Oggi i framework sono sostanzialmente due: Java (soprattutto con larchitettura Java 2 Enterprise Edition, J2EE) oppure Microsoft .NET. Essi privilegiano la sicurezza a svantaggio dellottimizzazione (bench i risultati oggi ottenuti siano cos incoraggianti da poter immaginare paragoni con i linguaggi compilati [3]). Riutilizzabilit. Cio la capacit di un linguaggio di produrre codice riusabile, cambiamento introdotto dai linguaggi objectoriented (OO, cio principalmente Java e C++). Con i linguaggi ad oggetti si assistito ad un incremento di produttivit dei team di sviluppo mai vista prima. Lo sviluppatore OO in grado velocemente di importare e adattare ai suoi scopi il software scritto da altri, o da egli stesso in precedenza. Esistono linguaggi OO che producono LM (C++ e Delphi), interpretati (Python), ed intermedi, cio per un framework (Java, C#, Visual Basic .NET). Oltre allindiscussa capacit di riusare il codice sorgente, si parla da tempo della possibilit di fare altrettanto con il codice binario (attraverso componenti COM o Corba), ci che per esula dagli scopi di questo articolo (essendo un attributo abbastanza indipendente dal linguaggio). Produttivit. intesa come la velocit di produzione e manutenzione del software. Questo il reame dei cosiddetti linguaggi di scripting, cio lultima frontiera dei linguaggi interpretati. Oggi ne esistono di potentissimi, in grado di fare in poche righe operazioni molto complesse. Sono in genere interpretati dal browser (Javascript), dal Web Server (il caso di ASP sempre con Javascript, o PHP), o dal sistema operativo (Windows Scripting Host o le shell Unix). Un esempio di linguaggio di scripting Python (elegante, a oggetti per quanto lo possa essere un linguaggio non tipizzato, supportato da una vivace comunit di appassionati). Javascript da non confondere con Java, con cui condivide praticamente solo il nome - il pi utilizzato al mondo, grazie allintegrazione con i principali browser. Sono da segnalare anche VBScript, Ruby, Tcl/Tk e lonnipresente Perl.
DEV > n. 118 maggio 2004

speciale Quale linguaggio per programmare


Quale linguaggio per quale compito

RIQUADRO 2

Matrice Compito/Linguaggio

Applicazione

Web based Enterprise

Web based Internet

Legacy

Desktop

Extreme (videogames, CAD, bio, 3D)

Attributo del linguaggio Robustezza Riutilizzabilit Produttivit Ottimizzazione Compatibilit

++ + + +

+ + ++

+ ++

+ ++ +

+ ++

Legenda ++ Necessario + Utile Indifferente Inutile

Ottimizzazione. La capacit di sfruttare fino in fondo i processori e di utilizzare librerie specifiche per lo sfruttamento di hardware specializzato. Sono linguaggi che producono LM fortemente ottimizzato. Questo il campo in cui C/C++ ancor oggi eccelle, e non si vedono concorrenti allorizzonte. Per specifiche esigenze esistono per anche Delphi (che un Pascal a oggetti specializzato nella produzione di applicazioni desktop) e il buon vecchio ADA (nella nuova incarnazione, Ada95 la scelta principale in ambienti militari e scientifici). Infine, lAssembly (che mappa il LM su alcune keyword, ed dunque lo strumento per programmare in LM) utile nei casi di ottimizzazione pi spinta. Compatibilit. Rimane un grosso problema. La compatibilit allindietro con il software prodotto anni o decadi prima quasi un sogno irrealizzabile. Oggi le richieste di compatibilit si riducono quasi tutte alla produzione di strati software collante in grado di parlare non gi con le applicazioni, ma con gli input e gli output delle stesse (quindi via database, via XML, eccetera). Il linguaggio delezione della compatibilit lANSI C++ (che vanta una vera compatibilit allindietro con il C, una forte standardizzazione, e una presenza pressoch universale, poich non esiste sistema operativo che non offra un compilatore C++). Forse, lunico nel suo genere.

Quale tipo di linguaggio per quale compito?


Si nota, in generale e con tutte le dovute eccezioni, che classi di applicazioni analoghe vengono sviluppate con le stesse tipologie di linguaggi e strumenti. cio possibile individuare le propriet che interessano e sono critiche per un certo genere di software. Ovviamente esisteranno sovrapposizioni e particolarit, ma direi che in linea di massima si pu affermare quanto segue, e che ho tentato di raffigurare nel Riquadro 2. Per le applicazioni enterprise, la propriet chiave la robustezza: cio il sistema deve essere disponibile e funzionante proprio nel momento in cui serve. Il linguaggio deve garantire sicurezza e stabilit al contrario, quindi, deve risultare difficile, se non impossibile, scrivere codice di bassa qualit (difficile da mantenere, con bug difficili da scovare, ecc.) Il mercato enterprise si divide oggi quasi a met tra Unix (Solaris, HP e Linux) e Windows. Per il primo si adotter quindi Java/J2EE con interfacce Corba, per il secondo i linguaggi .NET, che stanno soppiantando il Visual Basic che per anni qui ha regnato attraverso il modello DNA (componenti COM sotto MTS o COM+). Per le applicazioni Internet, la propriet chiave deve essere la facilit di intervento nel codice. Il software deve essere scritto e modificato molto velocemente. I tempi del web sono cortissimi (spesso il software doveva essere pronto per ieri) Si preferiscono quindi i linguaggi di scripting (spesso Javascript
DEV > n. 118 maggio 2004

o PHP) interpretati dal Web Server o direttamente dal browser. Va notato che il noto problema dello spaghetti code (logica e codice HTML mischiati insieme) sta suggerendo anche per questo tipo di applicazioni una migrazione verso i framework (con servlet Java e pagine JSP, oppure ASP .NET) e lo spostamento dellesecuzione dellapplicazione dal Web Server ad uno specifico Application Server. Per le applicazioni legacy, la propriet chiave sembra essere la disponibilit di linguaggi in grado di produrre codice compatibile con lesistente. Su tutti, emerge il C++, avendo cura di seguire le specifiche standard ANSI (altro invece il discorso dellintegrazione tra sistemi nuovi e sistemi legacy, categoria che ricade nel software enterprise). Non sottovaluterei oggi la possibilit di approfondire i linguaggi storici, come Cobol e Algol, data la sentita necessit di intervenire dove sia rimasto il codice sorgente originale. Per le applicazioni desktop, la propriet chiave la manutenibilit del codice. Nellindustria del software commerciale il maggior problema quello del turn over, sia delle risorse umane, sia delle tecnologie. Questo tipo di software quindi deve essere facilmente convertibile tecnologicamente, molto ben documentato e scritto con paradigmi che favoriscano la riutilizzabilit. Si parla quindi di linguaggi a oggetti, o a componenti, ma anche delluso di metodologie di design standard come UML. In questo settore importante ladozione del look and feel del sistema operativo target, cosa che al momento sfavorisce leggermente Java, mentre nella pratica il Visual C++ (prima di .NET) rimane il linguaggio di riferimento, seguito da Delphi e Visual Basic. La sempre maggiore adozione del .NET Framework, comunque, spinger gli sviluppatori di applicazioni desktop verso C# e Visual Basic .NET. Se esister in futuro un rilevante mercato Unix/Linux anche per il desktop, potrebbero assumere importanza gli ambienti tipo Kylix (C++ e Delphi) o Java Swing, dove significativi sono i miglioramenti fatti nelle ultime versioni verso la standardizzazione del look and feel (specie per MacOS e Windows XP). Per le applicazioni extreme, com ovvio, la propriet chiave lottimizzazione. Il linguaggio deve essere compilabile in linguaggio macchina, utilizzando ogni caratteristica hardware disponibile. Come si visto, ANSI C++ su tutti, e porzioni di Assembly dove serve. Rimane il mobile, dove la situazione non ancora chiara. Se fino a oggi si trattava di produrre codice macchina per lo specifico sistema operativo del telefonino, lapparizione dei framework Java e .NET per le tecnologie mobili lo rendono una categoria assimilabile allo sviluppo enterprise (se il client mobile in qualche modo connesso a dei server centrali), o allo sviluppo desktop.
23 <<

speciale Quale linguaggio per programmare


Quale linguaggio per quale compito

Il futuro
Parlare di cosa ci aspetta nel futuro sempre un po un esercizio sterile. Molti hanno fallito nel tentare di individuare un percorso evolutivo nei linguaggi di programmazione. Per esempio oggi non ha pi molto senso parlare di linguaggi di prima, seconda, terza dodicesima generazione, perch quel tipo di classificazione si basava sul presupposto di un passaggio dal codice scritto verso altri paradigmi di sviluppo, basati su strumenti RAD, su sistemi esperti e su tool CASE. Se vero che questi esistono, non hanno tuttavia soppiantato i linguaggi classici, che sono tuttora pi vivi che mai. Forse per possibile inquadrare almeno due importanti linee guida. La prima certamente il megatrend verso i framework, cio verso un progressivo allontanamento dalle performance e dalle ottimizzazioni (dalle logiche della macchina), per avvicinarci alla stabilit, portabilit e manutenibilit (alle logiche dellapplicazione). Questo vale in quasi tutti i campi applicativi visti in precedenza. La seconda che il paradigma della programmazione OO ha avuto un successo cos importante, che praticamente non esiste linguaggio o piattaforma che non si sia evoluto per supportarlo. Al momento pare abbastanza certo che avr ancora lunga vita e sembra quindi saggio, potendo fare una scelta senza vincoli, puntare su un linguaggio a oggetti puro, come C# o Java. Tra gli altri paradigmi si distingue la programmazione funzionale, tra cui soprattutto i linguaggi ML, Haskell o il misterioso F#. presto per per capire se e come questi linguaggi avranno un ruolo.

Conclusioni
In questo articolo ho tentato una classificazione dei linguaggi in base ai compiti che sono chiamati a svolgere. evidente per che limplementazione di un particolare progetto software, specie se di grandi dimensioni, pu beneficiare delle migliori caratteristiche di ciascuno. Lintelaiatura di un progetto pu essere scritta in Java, per ottimizzare i processi critici si pu fare ricorso a codice compilato in C++ attraverso JNI, mentre per impartire comandi allapplicazione dallesterno si pu usare Python (Jython). Se preferite .NET, sostituite Java con C#, Jini con C++ unmanaged e Python con JScript. Le possibilit, fortunatamente, sono infinite.

Bibliografia
[1] Computer/Programming/Languages - http://dmoz.org/ Computers/Programming/Languages/ [2] Marc Clifton What is a framework? -http://www.codeproject.com/gen/design/WhatIsAFramework.asp [3] Alessio Saltarin Prove di performance in Managed C++ - Computer Programming nr.120 [4] Gregg Wonderly Whats in a programming language http://www.artima.com/weblogs/viewpost.jsp?thread= 28518

Alessio Saltarin
laureato in Ingegneria Gestionale. Si occupa di progettazione e sviluppo di applicazioni enterprise in Vodafone Italia.

Doktor Morb

TRASPORTO ALLASTROPORTO
Progettazione ottimizzata delle strutture
Il Centro di progettazione di Deneb IV brulicava di personale indaffarato. Enorme e sontuosa, la sala di controllo al quarto piano mostrava un continuo andirivieni di tecnici e analisti, mentre poco distante dalledificio, su di uno spiazzo che si stendeva a perdita docchio, sorgeva un sinistro scheletro di acciaio che avrebbe rappresentato il magazzino del futuro nuovo astroporto: nel cielo punteggiato di stelle infatti salivano dal terreno enormi travi, struttura di sostegno della costruzione cubica in allestimento.

a cura di Luigi Morelli > morelli@infomedia.it

ovviamente variabile, sebbene sempre cubica e rapportata ai pallets. Ci di cui avremmo bisogno un sistema univoco che ci consenta di progettare le fasi di scarico di astronavi da carico provenienti da settori diversi della galassia senza spreco di risorse, adottando tempistiche e collegamenti efficienti scaglionando opportunamente gli arrivi. Il nostro scopo quello di creare un precedente nella storia dellarchitettura, in cui la struttura nasce gi adattata alle richieste ed alle necessit alle quali dovr sopperire.

apri la sua cartellina ed inizi freneticamente a sfogliare gli appunti e le note, infine sillumin dicendo: Direi pari alla radice cubica della quantit di merce trasportata, con trasporto a pieno carico. Allora semplice sorrise Morb, e tir una boccata di simil-tabacco dalla inseparabile pipa.

Soluzione
Ogni cargo cubico contiene n3 contenitori. Quindi ogni equipaggio avr diritto, a pieno carico, a tenere per s n contenitori come indennizzo del viaggio. Rimarranno pertanto da trasbordare n3 n contenitori, pari a n(n2 1), o ancora a n(n+1)(n-1) pallets cubici. Le vostre navette trasportano sei pallets ciascuna, e mi avete chiesto come ottimizzare i trasporti: avr sicuramente notato che c=n(n+1)(n-1) multiplo di tre numeri consecutivi: n-1, n ed n+1. Allinterno di una terna di numeri consecutivi, mi perdoni il gioco di parole, c sempre almeno un numero pari, ed uno divisibile per tre. Il loro prodotto sar quindi multiplo di 6. Con navette che portano 6 cubi ciascuna, non avrete mai una navetta con carico minore di sei. Concluse tranquillo, e torn a contemplare le stelle. DEV > n. 118 maggio 2004

Ottimizzazione delle risorse


Come ben sa, Morb, le nostre navette di collegamento ed i cargo che trasportano materiale tra i pianeti sono state progettate in modo da consentire un semplice trasbordo del materiale; i contenitori pallettizzati hanno forma rigorosamente cubica, e la stiva di ciascuna navetta pu contenerne sei. I cargo interstellari hanno una stiva cubica, ma non avendo problemi di spostamento nellatmosfera possono contenere molti pi cubi di trasporto. Ovviamente tentiamo di rendere determinato il numero di collegamenti delle navette per lo scarico del materiale dal cargo, ma la stazza di cargo differenti

Disposizioni del trasporto


Mi rendo conto del vostro problema, Jest. E capisco anche che una volta determinate scrupolosamente le regole di turnazione e di avvicendamento del personale, lintero spazioporto sar assimilabile ad un preciso sistema ad orologeria. Morb rifletteva mentre i suoi occhi andavano dallinterlocutore alle travi di sostegno, dalle navette al cielo riccamente stellato. Poi chiese: Qual la percentuale del carico destinata allequipaggio del cargo? Jest guard Morb accigliato, impreparato a rispondere a tale strana domanda. Poi

>> 24