Nutile

mercoledì, aprile 15, 2009

HealthCare and IT

Un interessante articolo del NYT:
"IT takes more than technical skills and an understanding of health care to succeed as a health informatician.
Diplomacy skills are crucial in connecting two potentially contentious groups: doctors and programmers"

http://www.nytimes.com/2009/04/12/jobs/12starts.html

lunedì, maggio 29, 2006

Web Services Addressing 1.0

Web Services Addressing 1.0 - W3C Recommendation

domenica, febbraio 26, 2006

Chi comprerà Delphi?

Pare che Borland abbia deciso di cambiare rotta: mette in vendita tutte le sue soluzioni IDE (da JBuilder a Delphi), concentrandosi solo su soluzioni per la gestione del ciclo di vita della applicazioni (ALM - Application Lifecycle Management).
Fa un certo effetto: ricordo nei primi anni 90 quando Borland era sinonimo di programmazione rubusta ed efficiente, epoca in cui MS Quick Basic rincorreva il migliore Turbo Basic, il Turbo Pascal creava un rivoluzione....e un giovane, innamorato della programmazione, comprava il suo primo "ambiente di sviluppo" OOP: Turbo C++ 1.0 . . . come cambia il mondo!

Sun rende disponibile Studio Creator 2

Sun ha annunciato la disponibilità gratuita dell'attesissimo tool di sviluppo applicativo Sun Java™ Studio Creator 2, un pacchetto che fornisce ai progettisti software un ambiente completo e intuitivo per la realizzazione e il deployment visuale di applicazioni WEB.

Comunicato stampa

Java Studio Creator - Downloads

Inolte è possibile "fare un giro" sulle nuove versioni enterprise di Java e della piattaforma di sviluppo NetBeans: J2EE 5 e NetBeans Enterprise Pack 5.5.

martedì, febbraio 07, 2006

VB.NET e "Try Catch When"

Ho scoperto una caratteristica di VB.NET, nella gestione delle eccezioni, assai singolare: la possibilità di aggiungere una condizione alla clausola Catch!
In pratica l'eccezione viene catturata solo se si verifica la condizione espressa con l'istruzione When.
Esempio:

Try
...
Catch Ex as Exception When myCondition
...
End Try


Penso che se usata male tale condizione servirebbe solo a confondere le acque.
Ci sarà un motivo per cui non è stata implementata in C# o in JAVA? :)

lunedì, febbraio 06, 2006

Un'introduzione alla gestione delle eccezioni

Nella progettazione di moduli riusabili riveste grande importanza la gestione delle eccezioni.

Ma cos'è un eccezione e come si distingue da un errore?

  • un eccezione è una rottura delle assunzioni predefinite dell’applicazione
    esempio: l’assunzione che la connessione al database sia disponibile;

  • un errore è un'assunzione non definita in modo corretto
    esempio: inserimento di un valore null in un campo del database che non prevede l’inserimento di valori null.


Gli errori devono essere tutti gestiti, cioè evitati, scrivendo del buon codice. Le eccezioni, che con una buona progettazione possono essere tutte previste, devono essere gestite in modo opportuno.

Non mi soffermerò sull’uso del costrutto try,catch, finaly, ma piuttosto su come gestire un eccezione e come tentare di progettare un’applicazione rubusta e scalabile in riferimento alle eccezioni.

Al verificarsi di un eccezione si possono scegliere tre opzioni:

  1. Ignorare l’eccezione ed eseguire l’istruzione seguente, come se non ci fosse stata nessuna anomalia.

  2. Catturare l’eccezione ed eseguire del codice che gestisce l’anomalia.

  3. Catturare l’eccezione ed incapsularla in un’altra eccezione che è rilevante per la nostra applicazione, o per il modulo/layer chiamante che a sua volta si troverà davanti alla 3 opzioni descritte.


Quest’ultimo caso ovviamente, fa la differenza e necessità di un set di eccezioni personalizzate.

Sia .Net che Java permettono l' estensione della classe exception, creando eccezioni che possono essere usate per fornire informazioni più dettagliate, e/o per incapsulare una determinata eccezione, e/o per agevolare la sua gestione.

Per una efficiente gestione è opportuno quindi creare un set di eccezioni per ogni "componente" o "layer". Così gli altri componenti che usano tale oggetto, una volta catturato l'errore potranno decidere se e come gestirlo oppure propagarlo a sua volta all'eventuale altro modulo chiamante (magari incapsulando il messaggio in un'eccezione di sua competenza).

Di fondamentale importanza è il giusto ordine delle eccezioni nel blocco Catch: vanno indicate dal più specifico al più generico.



Riassumendo, è necessario:

  • evitare richieste all’utente su come gestire un eccezione;

  • evitare di nascondere eccezioni al chiamante, diminuisce la visibilità e la chiarezza sugli algoritmi applicati. Meglio generare un eccezione, sarà il modulo chiamante a gestire l’anomalia;

  • evitare errori generici, ma creare o usare eccezioni specifiche che migliorano la conoscenza dell’anomalia generata e quindi la sua gestione da parte di moduli chiamanti;

  • usare il costrutto finally;

  • creare una gestione dell’eccezione in grado di ripristinare uno stato consistente in caso di anomalia.

giovedì, gennaio 26, 2006

Dependency Inversion Principle

Un antipattern molto fastidioso è l'uso improprio del linguaggio di programmazione, e quando questo è un linguaggio OO si traduce spesso in un cattivo impiego dei principi e dei pattern che stanno alla base di tale metodologia.
Analizziamo come esempio un applicazione multilayer: teoricamente ogni livello deve dipendere solo da quelli sottostanti, ma tale dipendenza crea instabilità e limita il riuso. Sicuramente per eliminare tali dipendenze può essere utile usare teniche di "Inversion", invertendo cioè la dipendenza dal basso verso l'alto attraverso l'uso di Interfacce.
Il Dependency Inversion Principle ha come scopo la creazione di dipendenze astratte creando stratificazioni verso l'alto, agevolando la riusabilità e l'estendibilità, rispettando questo principio:

le classi (e i package) devono dipendere da astrazioni (es. interfacce), le astrazioni devono essere indipendenti dai dettagli, e questi devono essere dipendenti dalle astrazioni.

Questo ci permette di invertire la dipendenza: dal basso verso l'alto, verso, cioè, le astrazioni che il livello superiore fornisce. Ovviamente una classe che dipende da una astrazione è maggiormente estensibile e riusabile. Inoltre tale tecnica permette di creare dei framework, e di integrarli tra loro un un'alta modularità.
Una piccola nota: usando tali tecniche, sicuramente è necessario implementare pattern come Abstract Factory o Factory Method che ci permettono di lavorare in modo agevole con le interfacce, l'ereditarità e l'istanziazione degli oggetti.

mercoledì, gennaio 25, 2006

ASP.NET e Value Objects

Un articolo interessante su un approccio che amo molto.
CustEntCls.htm
L'uso dei value objects per la modellazione degli oggetti: niente di nuovo per chi viene dai Java Bean ma è comunque un iniezione di OOP che permette di "svoltare" ;)

Ready