Principi fondamentali della finestra: Impostazione del contesto
Questa sezione fornisce una panoramica dell'anatomia di un'interfaccia utente basata su finestre. Questa panoramica è
necessaria per comprendere il resto della guida.
Un'interfaccia utente basata su finestre è suddivisa in pannelli. Le finestre possono essere spostate sullo schermo,
sovrapposte una sull'altra e rese a icona. In genere un sistema dispone di una finestra primaria e di un determinato
numero di finestre secondarie. La finestra primaria gestisce l'interazione maggiore con l'utente e spesso contiene un
numero arbitrario di oggetti. Le finestre secondarie vengono utilizzate per supportare le interazioni con le finestre
primarie, fornendo i dettagli relativi agli oggetti e alle operazioni correlate a quegli oggetti.
Finestre primarie
La finestra principale spesso contiene un numero arbitrario di oggetti con i quali interagisce l'utente. L'utente di
solito interagisce con il sistema selezionando prima uno o diversi oggetti, ad esempio facendo clic su di essi, e
quindi scegliendo un'operazione (ad esempio, tramite un menu) che viene eseguita su tutti gli oggetti selezionati.
Operazioni comuni sono Taglia, Copia, Incolla, Elimina e Visualizza proprietà.
La finestra principale normalmente contiene una barra menu, dalla quale gli utenti possono scegliere le operazioni. Gli
utenti possono anche scegliere le operazioni tramite i menu a comparsa (facendo clic con il tasto destro del mouse
sull'oggetto) e tramite manipolazione diretta (selezionando e trascinando l'oggetto). Poiché all'interno della finestra
principale potrebbero non essere visualizzati completamente tutti gli oggetti, gli utenti possono spesso scorrerli con
la barra di scorrimento o possono modificare le dimensioni della finestra. Inoltre, la finestra principale spesso può
essere suddivisa in pannelli (definendo delle aree secondarie nella finestra); l'utente può modificare la dimensione
anche dei pannelli.
Composti
Un oggetto composto in un'interfaccia utente è un oggetto visivamente composto da altri oggetti. Ad esempio, un
paragrafo è composto da caratteri oppure un oggetto di disegno complesso è formato da più
oggetti primitivi di disegno.
Finestre secondarie
Le finestre secondarie supportano le finestre primarie fornendo i dettagli (ad esempio le proprietà) relativi ai propri
oggetti e le operazioni effettuate su quegli oggetti. Di solito nella finestra principale vengono visualizzate solo
alcune delle proprietà degli oggetti. Le proprietà di un oggetto possono essere visualizzate aprendo una finestra di
proprietà (si tratta di una finestra secondaria) che mostra tutti gli attributi di un oggetto. L'utente può spesso
modificare gli attributi tramite i controlli, ad esempio i pulsanti di opzione e di attivazione/disattivazione, le
scale, le caselle combinate ed i campi di testo.
Esiste una linea sottile, e a volte abbastanza fittizia, fra le finestre primarie e quelle secondarie; possono
visualizzare gli stessi livelli di complessità. Tuttavia esistono due importanti differenze fra le finestre principale
e secondaria:
-
Le finestre primarie sono spesso considerate più importanti per l'applicazione, in quanto devono fornire un'ampia
utilizzabilità. Quindi l'impegno lavorativo dello sviluppo tende ad essere più incentrato sulle finestre primarie.
-
Le finestre secondarie vengono spesso visualizzate tramite l'esplorazione nelle finestre primarie e non viceversa.
Oltre alle finestre di proprietà, esistono altri tipi di finestre secondarie, ad esempio le finestre di dialogo, le
finestre di messaggi, le tavolozze e le finestre a comparsa.
Molte applicazioni si basano sui file. Gli utenti possono avviare queste applicazioni con l'operazione Apri su
un oggetto file (ad esempio, facendo doppio clic sull'icona di un file in una cartella). La relativa finestra
principale mostra gli oggetti memorizzati in quel file. Le operazioni comuni sui file sono Salva, Salva con
nome, Apri e Nuovo, in genere selezionabili tramite il menu File nella finestra principale. La
finestra principale di solito è anche in grado di visualizzare più file (denominata anche MDI, Multiple Document
Interface), consentendo quindi all'utente di passare da un file all'altro.
Dimensioni visive
La chiave per ottenere delle finestre primarie utilizzabili è di usare le dimensioni visive quando si visualizzano gli
oggetti ed i relativi attributi. I vantaggi nel presentare più attributi di quanti non ne siano necessari per
l'identificazione sono:
-
L'utente evita un eccesso di esplorazione di finestre, poiché si diminuisce il numero di finestre da visualizzare
(quando l'utente deve visionare un attributo presentato nella finestra principale).
-
L'utente può vedere i diversi aspetti (di oggetti differenti) contemporaneamente, spesso utile per i confronti e
per iniziare a riconoscere i pattern (modelli). Un buon utilizzo delle dimensioni visive può incoraggiare gli
utenti a sviluppare un approccio interamente nuovo per il proprio lavoro.
Le dimensioni visive sono:
Queste dimensioni vengono presentate di seguito. Tuttavia, durante la progettazione della visualizzazione di oggetti
tenere presente l'area disponibile dello schermo. Quando si utilizza l'area dello schermo, è necessario tentare di
mantenere al minimo l'eccesso e valutare se l'utilizzo di diverse dimensioni visive valga l'ulteriore espansione
dell'area dello schermo. Forse all'utente è sufficiente un semplice elenco di nomi, poiché quello di cui ha realmente
bisogno è di visualizzare quanti più oggetti possibile.
E' importante utilizzare le dimensioni visive, o estenderle, se si desidera identificare gli oggetti in maniera
univoca. Di seguito viene trattato ancora l'argomento (consultare la sezione "Identificazione" riportata più avanti).
Le dimensioni visive, inoltre, possono essere utilizzate in correlazione con la dimensione temporale, ad esempio
spostando gli oggetti (la loro posizione viene modificata nel tempo), o modificando la forma o il colore degli oggetti
(il loro stato viene modificato nel tempo); quest'ultimo caso è trattato nella sezione "Forma"
riportata più avanti.
Posizione
L'aspetto più intuitivo che la posizione possa presentare è la posizione nella realtà. Esempi:
-
I GIS (Geographical Information System) che visualizzano una mappa su cui vengono presentati gli oggetti alla
stessa longitudine e latitudine in cui si trovano realmente.
-
I programmi CAD (Computer Aided Design) che presentano gli oggetti ed il relativo ambiente esattamente secondo le
reali coordinate.
-
Gli editor WYSIWYG (What You See Is What You Get) che visualizzano gli oggetti (caratteri) nella finestra nello
stesso posto in cui apparirebbero su una stampa.
Alle volte è importante mostrare la dimensione reale (gli esempi del programma CAD e dell'editor WYSIWYG) e altre volte
no (ad esempio, quando la dimensione degli oggetti è molto più piccola della distanza fra gli oggetti).
Per esempio, si supponga di disporre di un sistema di prenotazione voli in cui è necessario immettere le destinazioni.
Una possibile presentazione potrebbe essere la visualizzazione di una mappa che contiene i diversi aeroporti (dove un
aeroporto è un oggetto). Naturalmente, poiché le dimensioni reali degli aeroporti sono irrilevanti (oltre che troppo
piccole per essere visualizzate), tutti gli aeroporti vengono mostrati come icone della stessa misura.
Questo esempio mostra inoltre che le posizioni reali possono essere utilizzate anche se non sono rilevanti, purché
utili all'utente per identificare gli oggetti. Nell'esempio l'utente non ha bisogno di conoscere la posizione di un
aeroporto. Ma se ha nozioni di geografia, può essere più facile trovare le destinazioni su una mappa, piuttosto che in
un elenco.
È anche possibile utilizzare la posizione per rappresentare posizioni reali "virtuali". Ad esempio, si immagini un
sistema di acquisti in cui gli utenti possono comprare gli articoli da negozi diversi. Una possibile presentazione
potrebbe essere la visualizzazione di un'immagine schematica di un centro commerciale (virtuale) in cui sono collocati
i diversi negozi (dove ogni negozio è un oggetto). L'immagine schematica non ha nulla a che vedere con le vere sedi dei
negozi, sfrutta semplicemente la memoria spaziale dell'utente: è più facile ricordare una posizione x-y piuttosto che
una voce in un elenco o in una gerarchia.
Un ulteriore utilizzo della posizione è di mostrare le associazioni fra gli oggetti: tutti gli oggetti che hanno la
stessa posizione verticale sono associati in un modo e tutti gli oggetti con la stessa posizione orizzontale sono
associati in un altro modo. I fogli elettronici ne sono un esempio.
Un'alternativa simile è di consentire che un asse rappresenti la scala di valori di un attributo. Ad esempio, in un
sistema di prenotazione viaggi, i voli prenotati (dove ogni volo è un oggetto) potrebbero essere presentati lungo un
asse temporale orizzontale, mostrando la loro relazione nel tempo, quanto durano ed il periodo di tempo che l'utente
trascorre in ciascuna destinazione. Queste sono tutte cose che l'utente non ha bisogno di sapere ma che sono piacevoli
da vedere, se possono essere presentate con discrezione.
Se non si desidera utilizzare una così ampia area dello schermo presentando l'intera scala dei valori, è possibile
comprimere le distanze fra gli oggetti. Nell'esempio delle prenotazioni di viaggi, ciò vorrebbe dire che tutti i voli
prenotati vengono distribuiti orizzontalmente senza spazi in mezzo, con il primo volo a sinistra, il secondo
immediatamente dopo, a destra del primo volo, e così via. Gli utenti non vedrebbero il periodo di tempo in cui possono
stare in ciascuna destinazione ma potrebbero vedere la durata dei voli.
Dimensione
In molti casi la "dimensione" deve rappresentare la stessa cosa della posizione. In un sistema CAD, per esempio, la
dimensione deve rappresentare l'ampiezza reale. A volte, tuttavia, si è liberi di scegliere cosa deve rappresentare la
dimensione, ad esempio gli aeroporti sulla mappa che supportava la scelta della destinazione.
In questi casi la dimensione deve rappresentare quello che viene percepito più intuitivamente come dimensione reale
dell'oggetto. Per un file, la dimensione dell'oggetto dovrebbe rappresentare la quantità di spazio su disco occupata.
Per un conto in banca, la dimensione dell'oggetto verrebbe rappresentata dal saldo. Per la maggior parte delle
dimensioni, una scala logaritmica è meglio di quella proporzionale, poiché una scala proporzionale in genere utilizza
troppo spazio sullo schermo.
La dimensione in realtà è così intuitiva che si può considerare di visualizzarla anche se non è rilevante. Dopo tutto,
nella realtà, cose diverse (oggetti) occupano proporzioni differenti del nostro campo visuale, a causa della loro
dimensione diversa. E non è inopportuna; facilita semplicemente la differenziazione delle cose. In modo simile,
l'utilizzo di dimensioni diverse nell'interfaccia utente spesso facilita la distinzione fra oggetti differenti.
La dimensione normalmente deve essere utilizzata per presentare un solo attributo, anche se sarebbe possibile
consentire all'estensione orizzontale la presentazione di un attributo e a quella verticale la presentazione di un
altro (che potrebbe risultare non intuitivo e potrebbe confondere l'utente).
L'estensione orizzontale o verticale deve essere proporzionale (logaritmicamente) all'attributo che la dimensione deve
presentare; l'altra estensione deve essere fissa (o deve dipendere dalla lunghezza del nome, ad esempio). Se
l'estensione orizzontale e quella verticale sono entrambe proporzionali allo stesso attributo, raramente è un valore
aggiunto: è ridondante ed utilizza semplicemente maggiore spazio sullo schermo.
Forma
Le forme in genere vengono rappresentate da icone in un'interfaccia utente grafica; la forma viene utilizzata al meglio
per rappresentare il tipo, poiché è più intuitivo delineare una differenza nell'aspetto che delinearla nel tipo. Nel
mondo reale, oggetti diversi dello stesso tipo in genere si assomigliano, mentre oggetti di tipo diversi hanno un
aspetto differente. Ad esempio, i diversi oggetti di una sedia sembrano simili (hanno tutte quattro gambe, una seduta e
uno schienale), mentre un'automobile è molto diversa da una sedia.
Quindi, quali sono i criteri da considerare quando oggetti diversi sono di tipo diverso? Classi differenti devono
certamente essere considerate come tipi diversi. Inoltre, alcuni attributi sono del genere "tipo". Tali attributi
devono avere una serie limitata di possibili valori ed il loro valore normalmente determina cosa può essere eseguito
con l'oggetto (in termini di operazioni e possibili valori di altri attributi). E' come nel mondo reale: la differenza
più importante fra la sedia e l'automobile è come vengono utilizzate: una sedia viene usata per riposare ed
un'automobile per il trasporto.
Tuttavia, quando si analizza cosa deve essere considerato come tipo diverso, è necessario ricordare che la cosa più
importante è quale attributo l'utente percepirà più probabilmente come tipo.
Se non si dispone di più classi o di nessun attributo del genere "tipo", è possibile utilizzare le icone per
rappresentare i diversi valori per altri attributi dal valore limitato, ma solo se quell'attributo è di interesse
focale per l'utente.
Le icone vengono spesso utilizzate anche per mostrare i diversi stati dell'oggetto (oltre a visualizzarne il tipo).
Quando un oggetto viene selezionato, in genere viene visualizzato in uno dei due seguenti modi: il colore diventa il
nero o viene visualizzato un rettangolo intorno all'oggetto. Un altro possibile stato è quando si apre una finestra di
proprietà dell'oggetto. In genere esistono altri stati specifici dell'applicazione che possono essere visualizzati, ad
esempio se una e-mail è stata letta o meno. Accertarsi però che la presentazione dello stato non renda più difficile
per l'utente la percezione del tipo e viceversa.
Colore
Il colore può essere diviso in tre componenti, in base alla percezione visiva. Sono: la tonalità (cioè rosso, blu,
marrone, ecc.), la saturazione e l'oscurità. Non utilizzare dei componenti diversi per rappresentare degli attributi
differenti, perché sarebbe troppo difficile da percepire per l'utente.
La tonalità può essere utilizzata per rappresentare il tipo o gli attributi con una serie limitata di possibili valori.
Tuttavia, è meglio utilizzare un'icona, perché può essere progettata in modo tale che l'utente possa comprendere il
valore che rappresenta, mentre non esiste un delineamento intuitivo fra contenuto del colore e (la maggior parte dei)
valori. La tonalità quindi può essere utilizzata al posto delle icone, se non sono disponibili delle icone intuitive.
Se si dispone di molte icone per il tipo, un'alternativa è l'utilizzo della tonalità per classificare in categorie le
icone (così le icone con significato simile possono essere rosse, quelle con un altro significato blu, ecc.).
La saturazione potrebbe essere usata per rappresentare un attributo con una scala di valori, ma questo porta ad
un'interfaccia utente piuttosto spiacevole e ridondante; l'utilizzo di una saturazione diversa è destabilizzante per
l'occhio e un'alta saturazione è piuttosto appariscente.
L'oscurità è il componente più utilizzabile del colore. Può essere utilizzato per rappresentare un attributo con una
scala di valori ed è talmente discreto che può essere usato anche per gli attributi di importanza secondaria. Perché
l'oscurità sia discreta non si deve passare da nessuna oscurità (bianco) a completa oscurità (nero) ma solo da bassa
oscurità (grigio chiaro) ad alta oscurità (grigio scuro). Per molti sistemi in cui gli utenti creano la maggior parte
degli oggetti, è molto utile presentare gli oggetti in base al tempo; ad esempio, il periodo di tempo trascorso
dall'ultima modifica. Questo facilita agli utenti l'identificazione dell'oggetto che desiderano utilizzare (spesso si
tratta dell'oggetto con il più breve "periodo di tempo dall'ultima modifica"). Perciò, se non si dispone di un
attributo del genere scala di valori la cui presentazione all'utente è davvero necessaria, considerare di presentare
invece l'età dell'oggetto.
Spesso il colore viene utilizzato per rendere le icone esteticamente più piacevoli e anche questo è utile per utente
per effettuare rapidamente una distinzione fra le icone. Se si forniscono delle icone a più colori, probabilmente è
meglio non utilizzare il colore per altri scopi.
Poiché alcune persone non vedono i colori e poiché non tutti gli schermi supportano il colore, non utilizzare il colore
come unico mezzo per visualizzare delle informazioni fondamentali. D'altra parte, un utilizzo ben pianificato e non
appariscente del colore rende l'interfaccia utente più piacevole, da un punto di vista estetico.
Identificazione
L'utente deve essere in grado di identificare in modo univoco ciascun oggetto. A volte le altre dimensioni visive sono
sufficienti per l'identificazione ma spesso non lo sono. La visualizzazione di un nome in un'icona o accanto ad essa è
la tecnica più comune per consentire l'identificazione. Il vantaggio dei nomi è che un'area molto piccola dello schermo
può visualizzare un grande numero di nomi distintamente differenti.
E' meglio quando un nome può essere generato da un valore di attributo (in genere testuale). L'alternativa è di
consentire agli utenti di specificare i nomi quando creano gli oggetti, ma questo richiede del tempo e quindi ne riduce
l'utilizzabilità.
A volte è possibile modellare l'icona in modo da potervi includere il nome. Questo risparmia spazio dello schermo e
fornisce una indicazione più forte della relazione fra l'icona ed il nome. Tuttavia possono verificarsi i seguenti
problemi:
-
L'icona deve essere vuota nel mezzo (dove viene visualizzato il nome).
-
I nomi hanno delle lunghezze variabili, il che significa che l'estensione orizzontale dell'icona deve dipendere
dalla lunghezza del nome oppure che alcun nomi devono essere troncati.
-
L'icona deve essere molto più larga che alta, poiché tutto il testo di lunghezza ragionevole è più lungo di quanto
non sia ampio.
Come risultato spesso si deve visualizzare il nome sotto l'icona o alla sua destra, che ha come vantaggio un minor
utilizzo di spazio sullo schermo e come svantaggio l'oggetto (icona + nome) diventa ancora più largo di quanto non sia
alto. Se non si dispone di spazio a sufficienza per visualizzare il nome (cosa possibile, poiché di solito un'icona la
si identifica senza denominarla), è possibile farlo tramite le finestre a comparsa che vengono visualizzate quando il
cursore è posizionato sull'icona.
Il tipo di carattere del nome può essere utilizzato per visualizzare un attributo a scelta limitata, se si riesce ad
individuare una corrispondenza intuitiva fra il tipo di carattere ed i valori dell'attributo; ad esempio, si potrebbe
utilizzare il grassetto o il corsivo per distinguere l'oggetto o enfatizzarne l'importanza. Nella maggior parte dei
casi, tuttavia, non è appropriato utilizzare il tipo di carattere perché è piuttosto appariscente e raramente
intuitivo.
Se si mostra il nome (oppure, per quel caso, qualsiasi altro testo modificabile dall'utente), è necessario consentire
la modifica del nome direttamente nella finestra primaria. In alternativa l'utente deve richiedere un'operazione di
ridenominazione ed immette il nuovo nome, oppure aprire la finestra delle proprietà e modificare lì il nome. Non solo è
più rapido modificare il nome direttamente nella finestra principale, ma supporta il principio "dove lo si visualizza
lo si modifica."
Implementazione di Trova e Seleziona
Se il gruppo di oggetti da modificare o da utilizzare è composto in modo tale che l'utente può esprimere dei criteri di
selezione che li identifica, il tool di ricerca della finestra principale può risolvere il problema selezionando sempre
tutte le corrispondenze ai criteri.
Esistono due possibili metodi per gestire la ricerca:
-
Nella finestra principale vengono selezionati tutti gli oggetti che soddisfano i criteri di ricerca. Se non si può
garantire che tutti gli oggetti trovati verranno visualizzati contemporaneamente nella finestra principale
(potrebbero essere troppo distanti), è anche possibile visualizzare un elenco di risultati nella finestra della
ricerca. Dopo una ricerca, l'utente può specificare degli ulteriori criteri o eseguire un'operazione sugli oggetti
selezionati. Il vantaggio di questo tipo di approccio è che consente all'utente di ordinare un'operazione su tutti
gli oggetti che soddisfano i criteri di ricerca.
-
Nella finestra di ricerca si fornisce un pulsante Cerca che seleziona il successivo oggetto che soddisfa i
criteri di ricerca e scorre il contenuto della finestra principale in modo da visualizzare l'oggetto. Dopo una
ricerca, l'utente può eseguire un'operazione sull'oggetto selezionato e continuare ad effettuare la ricerca in modo
sequenziale negli oggetti che soddisfano i criteri di ricerca. Il vantaggio di questo approccio è che l'utente può
visualizzare nel suo ambiente ogni oggetto trovato (nella finestra principale piuttosto che in un elenco di
risultati).
In molti casi, si può voler combinare i due metodi, ad esempio includendo un pulsante Seleziona tutto nella
finestra di ricerca sequenziale o il pulsante Visualizza successivo nella finestra di ricerca parallela.
Ordinamento
Un esempio di ordinamento può essere quando il sistema dispone tutti gli oggetti verticalmente, in ordine alfabetico
per nome o secondo il valore di un attributo. L'utente quindi esamina gli oggetti scorrendoli. Questo è il tipo di
supporto all'esplorazione più semplice possibile, nel rispetto sia dell'implementazione che dell'operazione
dell'utente. L'ordinamento è più efficace quando l'utente conosce il nome (o l'attributo in base al quale è stato
effettuato l'ordinamento) dell'oggetto desiderato. Un esempio di sistema che dovrebbe essere implementato con questo
metodo è un elenco telefonico. La finestra principale deve spesso disporre di un'operazione per il cambio del tipo di
ordinamento e/o dei criteri.
Ereditarietà controllata dall'utente
Un esempio di ereditarietà controllata dall'utente sono gli editor WYSIWYG, in cui l'utente definisce a quale "stile"
appartiene ciascun paragrafo e come questo stile (cioè, ogni carattere che appartiene allo stile) deve essere
distribuito.
In confronto al tool di ricerca uno svantaggio è che l'ereditarietà controllata dall'utente supporta solo la modifica
degli attributi (e possibili associazioni) per più oggetti, ma non l'esecuzione delle operazioni. L'ereditarietà
controllata dall'utente aggiunge anche un compito in più, cioè che l'utente deve esplicitamente definire e gestire i
gruppi (vale a dire gli stili disponibili). Si tratta, inoltre, di un concetto più complicato.
Tuttavia, se non è possibile specificare i criteri di ricerca per gli oggetti o se l'utente deve apportare delle
modifiche relative ai valori degli attributi (ad esempio aumentare di due), in quel caso fornire l'ereditarietà
controllata dall'utente potrebbe essere una soluzione.
Perché l'ereditarietà controllata dall'utente sia utile, la natura della classe deve essere tale da poter classificare
gli oggetti in gruppi di categorie (con un significato logico per l'utente) in cui la maggior parte dei valori degli
attributi sono uguali.
Un vantaggio rispetto al tool di ricerca è che l'ereditarietà controllata dall'utente supporta la sostituzione; ad
esempio, modifica il valore dell'attributo ma solo se non è stato definito esplicitamente nell'oggetto. Inoltre
l'ereditarietà controllata dall'utente può abilitare l'utente ad effettuare le definizioni più generiche (e quindi
potenti) dei valori degli attributi; ad esempio, ereditare il tipo di carattere dallo stile ma ingrandirlo di due
pixel. L'ereditarietà controllata dall'utente è particolarmente utile quando i gruppi non dispongono di criteri di
ricerca facili da specificare.
La classe per la quale supportare l'ereditarietà controllata dall'utente può ereditare sé stessa oppure si può creare
una nuova classe da cui ereditare lo scopo. Far sì che la classe erediti sé stessa è un po' più efficace, poiché lo
stesso oggetto può essere utilizzato sia per ereditare che per eseguire le cose che originariamente erano state
previste per l'oggetto, come essere una fattura, un conto e così via. Questo comporta meno classi da gestire per
l'utente (ed il sistema). D'altro canto, la creazione di una nuova classe da cui ereditare ha il vantaggio di essere di
più facile comprensione, poiché l'ereditarietà è chiaramente separata dalla normale operazione della classe. La
creazione di una nuova classe è la soluzione migliore nella maggior parte dei casi, specialmente se gli utenti non
dispongono di una grande esperienza in informatica e nei modelli orientati sugli oggetti. La nuova classe creata di
preferenza deve ereditare sé stessa, per supportare più livelli di ereditarietà.
Per la maggior parte dei sistemi l'utente spesso deve modificare il gruppo di ereditarietà di particolari oggetti,
poiché l'utente non sa in anticipo esattamente come devono essere strutturati i gruppi di ereditarietà. Fornire
un'operazione per questa attività.
Se si decide di supportare nel sistema l'ereditarietà controllata dall'utente, analizzare cosa deve essere ereditato
(attributi, associazioni, classe) e consentire l'ereditarietà solo per quelle caratteristiche. Questo porta ad un
metodo meno generico ma più semplice (sia per gli utenti che per gli sviluppatori) di gestire la funzionalità.
Modellare le caratteristiche che devono essere ereditate nella nuova nuova classe. Molti attributi verranno quindi
modellati sia nella classe che eredita che in quella ereditata. Tenere presente che l'ereditarietà controllata
dall'utente è intesa a risparmiare del tempo all'utente, non al programmatore. Se la classe eredita sé stessa, ciò
implica che tutto è ereditabile.
Decidere se l'utente ha davvero bisogno di creare dei nuovi oggetti della classe ereditata o se il sistema può fornire
un numero sufficiente di oggetti dall'inizio. Impedire all'utente la creazione di nuovi oggetti da una parte diminuisce
notevolmente la flessibilità dell'ereditarietà ma dall'altra renderà più facili le operazioni.
Decidere inoltre se le modifiche agli attributi numerici negli oggetti che si ereditano devono essere interpretate come
relative al valore ereditato o fisse. Ad esempio, si supponga che un oggetto erediti un carattere con dimensione 12 e
l'utente la cambi in 14. Per interpretazione relativa il sistema ricorderà la dimensione del carattere dell'oggetto
come valore ereditato +2; vale a dire, se la dimensione del carattere dell'oggetto ereditato modifica la dimensione del
carattere, anche l'oggetto ereditato modificherà la dimensione del carattere. Se si supporta l'interpretazione
relativa, deve essere annotato sull'attributo dell'oggetto ereditato (perché è lì che si guarda quando si desidera
esaminare l'ereditarietà). E' importante che l'interpretazione relativa venga presentata all'utente (ad es.,
"dimensione carattere: 12+2=14," piuttosto che semplicemente "dimensione carattere: 14"). Esaminare gli scenari per
individuare delle situazioni favorevoli all'interpretazione relativa o fissa. Potrebbe essere necessario dover
supportare entrambe.
Poiché l'ereditarietà controllata dall'utente è adatta solo ad utenti abbastanza esperti o molto esperti, è necessario
progettarla in modo tale che non interferisca con il normale utilizzo (ad esempio, quando l'utente non usa
l'ereditarietà); altrimenti gli utenti inesperti verranno intimoriti.
Tenere presente che l'ereditarietà controllata dall'utente è diretta a facilitare le attività dell'utente; non deve
essere generica o pura, ma utilizzabile.
Una gerarchia di esplorazione consente all'utente (o anche al sistema) di classificare in categorie gli oggetti
contenuti nelle finestre primarie o composte, che sono organizzate gerarchicamente. Le gerarchie di esplorazione fanno
sì che l'utente debba effettuare la ricerca in soltanto una categoria (o poche categorie). Ciò riduce il numero di
oggetti da visualizzare in un dato memento. Lo svantaggio è che l'utente (di solito) deve gestire la classificazione in
categorie. Un esempio di questa tecnica sono i browser di file: il motivo dell'esistenza delle directory o delle
cartelle è di aiutare l'utente a trovare i file.
Gestione della finestra
La dimensione e la posizione della finestra in genere sono controllate totalmente dall'utente. È possibile, tuttavia,
considerare di ridurre un eccesso di finestre consentendo al sistema di gestire la dimensione e la posizione delle
finestre.
Tanto più grande è la finestra primaria, tanti più oggetti possono essere visualizzati, ma viene anche utilizzata più
area dello schermo. Una finestra primaria in genere deve mostrare il più ampio numero di oggetti possibile ma senza
incorrere in un'inutile utilizzo di area dello schermo.
-
Creare ciascuna finestra primaria in modo che sia abbastanza ampia da visualizzare tutti gli oggetti, ma non più
grande dello schermo. Far sì che ogni finestra primaria sia sufficientemente grande da visualizzare gli oggetti
interi ma evitare le aree che non mostrano nulla di utile, come i margini di un desktop publisher. Anche se si
dispone dello spazio per visualizzare queste aree vuote, potrebbero oscurare altre applicazioni.
-
Ricordare che un utente effettua la modifica delle dimensioni fra una sessione e l'altra. Se il numero di oggetti
aumenta, aumentare le dimensioni della finestra in modo che siano visibili tutti gli oggetti, a meno che non sia
già grande quanto lo schermo o se l'utente ha scelto una misura inferiore a quella predefinita. Se il numero di
oggetti diminuisce, diminuire le dimensioni, a meno che l'utente non abbia scelto una dimensione superiore a quella
predefinita. Questa regola garantisce che venga seguita l'intenzione delle operazioni di modifica delle dimensioni
da parte dell'utente.
Un'ulteriore possibile limitazione sulle dimensioni di una finestra primaria si verifica se si deve utilizzare spesso
l'applicazione in parallelo con altre applicazioni. In quel caso si potrebbe rendere metà schermo come dimensione
massima predefinita per la finestra (invece di uno schermo intero).
Assegnare la posizione predefinita di una finestra primaria in modo tale che oscuri il meno possibile altre
applicazioni. Nel caso sia necessario oscurare alcune finestre, scegliere quelle che non sono state utilizzate da più
tempo e tentare di lasciare visibile almeno una piccola parte delle finestre, in modo che l'utente possa facilmente
attivarle.
Uno svantaggio nell'applicare le regole appena menzionate è che una parte di controllo viene portata via all'utente (il
sistema modificherà le dimensioni di una finestra senza una richiesta specifica e non ricorderà il riposizionamento
dell'utente fra le sessioni). Quindi, se si applicano queste regole si deve consentire all'utente di disattivarle
(tramite un controllo).
Per le finestre secondarie, la loro dimensione e posizione devono essere tali da non oscurare la finestra da cui sono
state richiamate e possibilmente nemmeno le altre finestre secondarie. Se devono oscurare la finestra da cui sono state
richiamate, tentare di far sì che non oscurino gli oggetti selezionati. L'oscuramento di cose vitali, come gli oggetti
selezionati, è un punto debole comune dell'utilizzabilità delle finestre secondarie.
Per le finestre primarie che non sono la finestra primaria principale, è necessario applicare anche la regola di
modifica dimensioni dell'ultimo paragrafo.
Le caselle di dialogo, invece, devono essere collocate in modo tale da oscurare la finestra attiva. Poiché in genere si
tratta di finestre temporanee e piccole, l'utente di solito non ha bisogno di vedere la finestra attiva quando la
finestra di dialogo è aperta. Il posizionamento delle caselle di dialogo sulla finestra attiva assicura l'attenzione
dell'utente e diminuisce il necessario spostamento del mouse, poiché il cursore normalmente è già sulla finestra
attiva.
Per le finestre di proprietà, il numero di attributi ne determina le dimensioni. Se le dimensioni sono troppo grandi
(approssimativamente 1/4 dello schermo), è necessario utilizzare più schede.
Informazioni sulla sessione
Tutte le configurazioni dell'applicazione devono essere salvate fra le sessioni (senza che l'utente debba
specificarlo). Devono essere salvate anche la dimensione e la posizione delle finestre, quale vista è selezionata e le
posizioni delle barre di scorrimento. Quando gli utenti riavviano un'applicazione, deve essere esattamente uguale a
quando è stata chiusa l'ultima volta. Il motivo di ciò è che di solito la prima cosa che gli utenti fanno quando
avviano una sessione è di tornare al punto in cui si trovavano quando sono usciti dall'ultima sessione.
Guida in
linea
La guida in linea è una parte molto importante del sistema. Un sistema della Guida ben progettato deve essere in grado
persino di sostituire i manuali utente per la maggior parte dei sistemi. La maggior parte dei progetti impiega
considerevoli risorse nella creazione e nella produzione di manuali, quando è un dato certo che molti utenti non li
utilizzano mai. Questi sforzi potrebbero essere investiti invece in un buon sistema della guida.
Esistono diversi possibili tool per le guide:
-
La Guida per argomento (Help-on-subject) è il tool di guida più importante. Consente all'utente di immettere
un argomento o esplorare un argomento esistente e fornisce la guida relativa a quegli argomenti. La chiave è
fornire un ampio indice della guida con molti sinonimi. Ricordare: l'utente potrebbe non conoscere il termine
corretto, quando ha bisogno della relativa guida.
-
La Guida per oggetto (Help-on-object) è una guida sensibile al contesto. Visualizza un testo che spiega una
parte specifica (oggetto) dell'interfaccia utente. L'utente richiede la guida sensibile al contesto e seleziona la
parte di interfaccia utente per la quale è necessario un aiuto. Questo tipo di guida deve essere supportata per
ogni parte dell'interfaccia utente, se è utilizzabile. Un'altra alternativa è di fornire una guida implicita in
finestre a comparsa (una forma condensata di guida sensibile al contesto che il sistema presenta accanto al cursore
quando l'utente indugia per qualche secondo). L'utilizzo di una guida implicita in finestre a comparsa ha il
vantaggio che non interferisce con la normale operazione dell'interfaccia utente.
-
L'Area messaggi è un'area (di solito nella finestra principale) in cui il sistema visualizza dei "commenti"
non richiesti sulle azioni dell'utente. Se viene fornito, deve essere facoltativo.
-
Le Procedure guidate sono una tecnica piuttosto comune, da fornire quando l'utente richiede aiuto su come
effettuare un'operazione. Una procedura guidata conduce l'utente attraverso un'attività (non rilevante) utilizzando
la tecnica del "condurre per mano". Visualizza del testo descrittivo insieme alle operazioni (pulsanti) che
consentono all'utente di portare avanti le parti di attività spiegate nel testo. In alternativa, una procedura
guidata porrà delle domande e, in base alle risposte dell'utente, continuerà automaticamente l'attività. Le
procedure guidate sono eccellenti per attività non superficiali e utilizzate raramente.
La necessità di una guida sensibile al contesto e delle procedure guidate viene individuata con tutta probabilità
durante la verifica dell'utilizzo. Se durante la verifica di utilizzo, gli utenti non capiscono quali sono le diverse
porzioni dell'interfaccia utente, è un'indicazione che la guida sensibile al contesto è necessaria. Se hanno difficoltà
nell'esecuzione di determinate attività, è un'indicazione che sono necessarie le procedure guidate.
Il problema di molti sistemi di guide è che vengono scritti o per i principianti (impiegando un'enorme quantità di
testo per spiegare cose ovvie) o per gli esperti (manuali di riferimento che anticipano che l'utente conosce la materia
quasi quanto il programmatore che ha creato l'applicazione). Per la maggior parte dei sistemi, molti utenti sono
"mediamente esperti in fase di miglioramento". Scrivere la guida in base a questo tipo di utenti.
Annulla
'Annulla' è una funzione molto utile, anche se difficile da ottenere (implementare) in generale. Consente agli utenti
di imparare più velocemente, poiché non temono di danneggiare qualcosa. Riduce anche il rischio di perdere
informazioni. Una soluzione alternativa per evitare di perdere informazioni è di richiedere che l'utente confermi tutte
le operazioni che come risultato potrebbero avere una perdita di informazioni. Di solito si tratta di una pessima
soluzione, perché aggiunge un considerevole eccesso di interazione e gli utenti imparano presto a confermare
inconsciamente, rendendo quindi inadeguata questa soluzione.
Un'opzione ambiziosa è di fornire la funzione 'ripeti (redo)' e possibilmente più livelli di 'annulla (undo)' e 'ripeti
(redo)'. Tuttavia il primo livello di 'annulla' da solo ottiene già la gran parte dell'utilizzabilità aumentata.
Agente di
macro
Se vengono fornite delle macro, potrebbe essere molto utile impiegare un agente che controlla continuamente le azioni
degli utenti, cercando le sequenze di interazione ripetute. Quando viene rilevata una sequenza d'interazione ripetuta,
l'agente ne crea una macro (dopo averne chiesto l'autorizzazione all'utente). Si supponga che l'utente abbia ordinato
la "sottolineatura" per due paragrafi di testo ed entrambe le volte abbia anche cambiato il colore del testo in blu
subito dopo aver ordinato la "sottolineatura." L'agente chiede all'utente se desidera una macro che esegua sia la
sottolineatura che l'impostazione del colore su blu per il paragrafo di testo selezionato. In caso affermativo l'agente
crea la macro ed un pulsante (o una voce di menu) che la esegue.
Se l'utente seleziona un oggetto durante la registrazione, verrebbe interpretato come una specifica "delta", vale a
dire che l'ggetto è stato selezionato in relazione alla selezione precedente (come "seleziona successivo", "seleziona
primo child" e così via).
Non è così ovvio se interpretare come specifica delta la modifica degli attributi di un oggetto (ad esempio,
interpretare la modifica di un valore di attributo da 12 a 14 come un aumento di 2, piuttosto che un'impostazione su
14). Interpretarlo come una specifica delta in genere è più efficace, poiché la modifica di un attributo in un valore
fisso per più oggetti può essere spesso ottenuta selezionando più oggetti ed aprendo una relativa finestra di
attributi, nella quale impostare l'attributo (su 14) una volta sola per tutti.
Evidenziazione dinamica
Spesso le associazioni fra le classi sono bidirezionali, cioè nella vera interfaccia utente l'associazione viene
mostrata su entrambi gli oggetti. Se un utente, evidenziando l'oggetto A, è in grado di vedere che A è
associato all'oggetto B, allora in genere è interessato anche all'inverso (cioè, quando evidenzia l'oggetto
B, l'utente può vedere che B è associato ad A). L'associazione di solito viene visualizzata nelle
finestre delle proprietà degli oggetti, identificando l'oggetto associato per nome.
In genere la visualizzazione delle associazioni fra gli oggetti in una finestra primaria è complicata. La
visualizzazione delle associazioni sotto forma di frecce o linee spesso porta ad una "fossa dei serpenti" piuttosto
appariscente e poco piacevole. Un modo corretto di visualizzare le associazioni è di evidenziare tutti gli oggetti
associati quando il cursore è posizionato su un oggetto che presenta delle associazioni. Un esempio è quando le note a
piè di pagina sono associate a dei caratteri in un editor di documenti e vengono evidenziate quando il cursore si
posiziona sul carattere associato.
|