GNUstep
# GNUstep

GNUstep è un'implementazione delle librerie (chiamate "framework") OpenStep in Objective C di NeXT (attualmente Apple), inoltre offre strumenti di sviluppo non solo per sistemi operativi di tipo Unix ma anche per Microsoft Windows. GNUstep è parte del progetto GNU.

GNUstep offre un ambiente di sviluppo multi-piattaforma orientato agli oggetti compatibile con le specifiche OpenStep sviluppate da NeXT (ora comprata da Apple). Al pari di Cocoa GNUstep ha anche un'interfaccia per Java come anche per Ruby e Scheme. Gli sviluppatori di GNUstep hanno ultimamente aggiunto alcune funzioni che Apple ha introdotto in Cocoa così da garantirne la compatibilità. Le origini delle API GNUstep sono le stesse radici di Cocoa: NeXT e OpenStep. GNUstep anticipa Cocoa.

## Storia

La storia di GNUstep inizia quando Paul Kunz e altri allo SLAC vollero eseguire il porting di HippoDraw da NEXTSTEP verso una nuova piattaforma. Invece di riscrivere HippoDraw da zero riusando soltanto l'architettura dell'applicazione, decisero di riscrivere lo strato di oggetti NeXTSTEP su cui l'applicazione dipendeva. Questa fu la prima versione di libobjcX. Permise di portare HippoDraw verso sistemi Unix che usavano il sistema grafico X Window senza cambiare una singola riga di codice dei sorgenti della loro applicazione. Dopo che le specifiche OpenStep furono distribuite al pubblico nel 1994 essi decisero di scrivere un nuovo objcX che aderisse alle nuove API. Questo software divenne poi noto come GNUstep.

## Paradigmi

GNUstep ricalca fedelmente OpenStep e per questo eredita alcuni dei principi di esso ed è coadiuvato dall'uso del linguaggio Objective C.

* paradigma Model-View-Controller
* Bersaglio-Azione (Target-Action)
* Drag and Drop
* Delegazione
* inoltro dei messaggi (mediante NSInvocation)

## Potenzialità delle Classi

### Foundation Kit

* stringhe
* collezioni (vettori, insiemi, dizionari) ed enumeratori
* gestione degli archivi (file)
* archiviazione degli oggetti
* manipolazione avanzata delle date
* oggetti distribuiti e comunicazione fra processi
* gestione degli URL
* notifiche (notifications) e notifiche distribuite
* facile multi-threading
* orologi (timers)
* blocchi (locks)
* gestione delle eccezioni

### Application Kit

* elementi dell'interfaccia (viste a tabella, browser, matrici, viste a scorrimento)
* grafica (WYSIWYG, grafica in stile PostScript, curve di Bézier, gestione delle immagini con diverse rappresentazioni, contesti grafici)
* gestione del colore (colori calibrati e di dispositivo, CMYK, RGB, HSB, a scala di grigi e rappresentazioni nominative, trasparenza con canale alfa)
* sistema di gestione del testo: Rich Text Format (RTF), allegati di testo, gestore di layout, compositore, righelli, stile dei paragrafi, gestione dei caratteri, controllo ortografico
* gestione dei documenti
* gestione della stampa: operazioni di stampa, pannello di stampa e layout di pagina
* gestore dell'aiuto
* servizi di copia e incolla (o clip board, appunti)
* controllo ortografico
* collegamenti per le applicazioni all'ambiente di lavoro
* operazioni di drag-and-drop
* condivisione di servizi fra applicazioni (services)
