Newsgroup: it.comp.programmare.win32
Titolo: A metà fra MDI e SDI

Vorrei aprire un thread a riguardo dell'MDI e l'SDI (sperando non ci sia
già). Premetto che lo scopo di questo post è capire come poter progettare un
programma che rispetti i canoni e non infranga le abitudini che gli utenti
hanno.
L'interfaccia di Win95 e simili è incentrata sui documenti. Ogni documento
aperto ha il suo pulsantino vicino al pulsante Start. Quando uno fa "doppio
click" sull'icona di un documento l'utente vede che viene aperto il
"documento", non il "programma" contenente il documento. L'interfaccia di
Win95 è progettata per fare click sui documenti, e non avviare il programma
dal menù di avvio e poi scegliere "apri". Il comando "nuovo", per esempio, è
presente nella shell, ed è nato per sostituire il comando "nuovo"
all'interno dei programmi.
Finita quest'introduzione, aggiungo subito che secondo me l'MDI è in
contrasto con questa filosofia, e tutti i nuovi programmi lo dimostrano.
Internet Explorer e Netscape, dalla notte dei tempi, sono applicazioni SDI.
Pensate che confusione avere una sola icona di IE e navigare
contemporaneamente su 5 siti! Word97 era MDI, Word2000 ora è SDI. Ogni
documento aperto ha il suo pulsante nella barra delle applicazioni. L'unico
vero programma MDI che dovebbe esistere, ed esiste, è Win95 stesso :-)
Immagino che il problema si sia posto a causa del fatto che l'MDI, ereditato
da Win 3.11, non aveva un chiaro sistema per passare da un documento
all'altro all'interno dell'applicazione. E con Win95 e simili il problema è
rimasto. Da un lato la comoda barra delle applicazioni, dall'altro quello
schifo di iconcine e finestrine 64x16 che vengono create all'interno della
finestra principale MDI quando si riduce a incona una finestra figlia.
mIrc e Eudora Pro, entrambi MDI, hanno risolto questo problema creando
all'interno di loro stessi una piccola barra delle applicazioni, con
elencati tutti i documenti aperti, come Win95 elenca le applicazioni in
esecuzione. Ma è uno stupido ripetere qualcosa che già esiste, e che
l'utente sa già usare. Inoltre l'MDI è scomodo anche a vedersi e a usare,
nel caso di semplici applicazioni tipo Word, Excel e IE. Se qualcuno sta
lavorando su 3 documenti, perchè le finestre di questi 3 documenti devono
essere "forzatamente" contenute all'interno di una grande "cosa" grigia?
Ma questo non è un'attacco all'MDI: vorrei discutere un pò del compromesso
MDI/SDI, in quanto anche l'MDI ha i suoi vantaggi. Finchè si tratta di Word
ed Excel, la cosa più giusta e corretta, secondo me, è senzadubbio l'SDI.
Quando invece si vuole progettare una vera e propria "suite", come
Frontpage, il Developer Studio, Visual Basic o qualche altro superprogramma
del genere, nato per lavorare contemporaneamente con più files che hanno
legami fra loro (un sito web, un progetto in C++), l'architettura SDI
diventerebbe una complicazione! Se si vuole lavorare su un web, appare nella
barra delle applicazioni l'icona della propria suite per lo sviluppo di
pagine html, che al suo interno permette di lavorare sui vari files che
compongono il web oltre a presentare informazioni comuni riguardo al sito e
non riguardo ai files.
In questo modo l'utente può passare tranquillamente da documenti Word a
finestre di Netscape al laboratorio per il Web; che poi questo, al suo
interno, lavori su più files poco importa.
Ritorna però il tema dell'SDI quando, continuando con l'esempio della suite
per creazione di siti internet, l'utente voglia lavorare contemporaneamente
su 2 web. Come le applicazioni SDI, dovrebbe esserci una finestra e un'icona
nella barra delle applicazioni per il primo sito web e una finestra e
un'icona per il secondo. Poco importa se all'interno di ogni finestra il
programma lavori contemporaneamente su più files!
Fine della tesi :-)
Vi va di farci una chiaccherata a riguardo? Interventi brevi e coincisi
però! :-)
--
Stefano Pettini
Risposte solo sul newsgroup, please.

 perň! :-)
Non riuscirei a fare altrimenti. :)
Anche io sono d'accordo che, se prendiamo per buono che la filosofia
document-focused sia l'approccio del futuro, le applicazioni SDI siano quelle
che meglio rappresentano questa metafora. Estremizzando molto non le si
dovrebbe nemmeno considerare delle applicazioni, andrebbero viste semplicemente
come "i documenti".
I motivi per cui in passato MDI ha riscosso piu` successo penso che siano
dovuti sia all'evoluzione della "metafora della scrivania" che all'aumento
delle risorse HW disponibili e delle tecniche per gestirle. Penso che senza
tutte le tecniche di IPC dei sistemi operativi moderni, in Win3.x la
comunicazione fra applicazioni distinte sarebbe stata molto piu` inefficace e
scomoda; tanto e` vero che DDE, la tecnica principale di intercomunicazione fra
applicazioni Win16, e` praticamente scomparsa.
--
Bye! Lorenzo Lutti (
http://www.geocities.com/SiliconValley/Peaks/6258/
)

Mi chiedo una cosa: se apro quattro documenti in Word 2000 (SDI), si aprono
4 processi distinti ciascuno con il suo Word 2000 all'interno???
A questo punto ho molta memoria sprecata per avere piu' copie della stessa
applicazione in esecuzione contemporaneamente... Sig!
Se poi pensiamo alla metafora della scrivania, io potrei avere 4 fogli uno
sopra l'altro e questo e' un po il concetto dell'MDI...
Se tutto diventa SDI, cosa ne facciamo dell'architettura Document/View?
Anche a me l'MDI sta poco simpatico ma credo che il must sarebbe lasciare
l'utente libero di decidere come aprire i suoi documenti, ovvero in una
nuova finestra o in una nuova istanza dell'applicazione...
Se poi devo trascinare del testo da un documento ad un altro, allora
personalmente preferisco l'MDI.
ho messo un po di carne sul fuoco? Vediamo cosa ne salta fuori...
P.S. pero' non stiamo parlando di API Win32 e siamo al varco dell'OT ;-)
Ciao Davide
/ - / - | - \ - \
Davide Piras
New (
pir...@engineer.com
)
Old (
pir...@iname.com
)
\ - \ - | - / - /

applicazione in esecuzione contemporaneamente... Sig!
In teoria lo spreco dovrebbe essere minimo, visto che il codice e`
condiviso. Ovviamente cio` non vale per i dati...
Paolo
-----------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------

ed Excel, la cosa più giusta e corretta, secondo me, è senzadubbio l'SDI.
Non saprei, word (quello che ho io, il '97) e` MDI...
Io penso che se un problema richieda di poter lavorare 
contemporaneamente su piu` documenti correlati, MDI e` la
soluzione piu` corretta.


 come "i documenti".
Secondo te qual'è il limite per cui un'applicazione deve essere progettata MDI
e non SDI, stando al principio che tutto dovrebbe essere SDI se non...
Sono indeciso. Preferirei avere un pò di opinioni prima di dire quale sia il
mio progetto.


 soluzione piu` corretta.
Io penso che sia invece più corretto avere una finestra, con un'icona sulla
barra delle applicazioni, sempre che non ci siano dati "comuni" fra i
documenti da dover presentare.
Condividete questo mio modo di tracciare la soglia fra l'SDI e l'MDI?


 P.S. pero' non stiamo parlando di API Win32 e siamo al varco dell'OT ;-)
Secondo me invece non siamo affatto off topic. È un buon discorso in un
newsgroup sulla programmazione di windows.


 condiviso. Ovviamente cio` non vale per i dati...
Un'altra cosa che non capisco, a riguardo più che altro delle MFC: non riesco
ad avviare più istanze di una applicazione. Non posso dichiarare più di un
oggetto di classe CWinApp, e avendo implementato una specie di "contatore
delle istanza" nel costruttore di questo oggetto, per vedere quante istanze ci
sono di un programma, ogni volta che lancio l'exe me ne carica un'altra e il
contatore non aumenta.
Sembra come che per avviare 2 istanze di dovrebbe creare una nuova CMainFrame,
o come di chiama si chiama, e non una nuova CWinApp.


> Non posso dichiarare più di un oggetto di classe CWinApp...
forse dico una fesseria...
Le MFC incapsulano la funzione WinMain, dunque la classe CWinApp (che la
richiama) puo' essere istanziata una sola volta...
non sono molto esperto di MFC ma il ragionamento mi sembra fondato...
smentite?
ciao Davide


Condividete questo mio modo di tracciare la soglia fra l'SDI e l'MDI?
Sostanzialmente si.
Concludo dicendo solo che probabilmente l'architettura MDI sara`
in futuro utilizzata assai meno e in situazioni specifiche.


contatore non aumenta.
Le istanze diverse sono a livello del s.o. e non del programma, quindi 
un simile comportamento mi pare corretto.
Oltretutto in win32 istanze diverse hanno spazzi di indirizzamento 
separati e in teoria non ci dovrebbe essere alcun motivo per cui una
debba avere conoscenze sull'altra.


però! :-)
Piu' circoncisi di cosi' :-)))))).
Bye.

 P.S. pero' non stiamo parlando di API Win32 e siamo al varco dell'OT ;-)
Il bello di Usenet e` che non e` moderato e che uno puo` divagare quanto vuole.
;-)
Comunque mi sembra che l'argomento non sia cosi` OT: l'interfaccia utente, e
quindi anche la "filosofia di astrazione della realta`", e` un componente
fondamentale di un sistema operativo (in senso lato; ovviamente non riguarda il
kernel, ma cio` vale anche per tante altre cose di cui discutiamo).


 e non SDI, stando al principio che tutto dovrebbe essere SDI se non...
Direi che i casi in cui MDI da` effettivamente dei vantaggi siano pochi. Gli
unici probabilmente sono quelli in cui un gruppo di documenti ha bisogno di un
"supervisore" in comune, o comunque di un agente esterno che li coordini o li
faccia interagire. Nei normali documenti (Word, ecc..) le interazioni
necessarie sono poche ed elementari (copia, incolla, ecc..) e possono essere
assolte senza problemi dalle "interfacce generiche" del SO; ma se le
interazioni vanno oltre tali capacita` generiche, forse un'applicazione MDI
puo` essere comoda per definire interfacce piu` comode.
Ad esempio sto pensando a un programma come Access. In questo caso l'approccio
MDI e` molto utile, perche` i vari "documenti" che compongono il progetto oltre
ad essere eterogenei (tabelle, query, ecc) hanno anche bisogno di funzioni di
coordinazione/interfacciamento piuttosto complesse e articolate. Anzi, sarebbe
meglio se Access fosse "ancora piu` MDI", permettendo di aprire piu` database
in un'unica applicazione (invece in quest'ottica e` ancora SDI): se qualcuno
volesse interfacciare due database distinti, magari creando relazioni fra le
tabelle dei due, anziche` passare per strane maschere ODBC o addirittura
scrivere del codice potrebbe farlo in modo "visuale" facendo interagire i due
documenti.


 debba avere conoscenze sull'altra.
Bene, e allora per fare un contatore devo riferirmi alle varie funzioni di
sincronizzazione fornite dalle api win32? Lavorando le MFC ad oggetti, pensavo
che ogni istanza di CWinApp lavorava su una istanza del programma, e che i
membri static fossero condivisi. Invece non si puň istanziare piů di una
CWinApp come limite interno delle MFC e i membri static non sono condivisi :-)
PS.
Come posso sapere se il codice viene effettivamente riusato?


 cosa si rivela un tantino scomoda.
E le toolbar è giusto che siano replicate in ogni finestra SDI. Se devi
incollare del testo in un documento fai click sull'apposito pulsante della
toolbar del documento che vuoi usare. In MDI non lo puoi fare, se il documento
non è attivo lo devi prima attivare. Ma "attivare un documento" non esiste
nella metafora della scrivania, delle cartelle e dei documenti. E solo questa
metafora sa usare la maggior parte degli utenti.


 di modularita` di una applicazione.
Onestamente non so cosa tu intendi con modularità :-)
Comunque, è possibile progettare una applicazione come ho scoperto che è
Word2000, all'apparenza SDI ma in realtà la copia dell'exe che gira è sempre
una. Con il doc/view si progettano più template di documenti, che poi vengono
visualizzati non in child frame ma in finestre SDI.
Volevo avere conferme sul mio modo di tracciare il confine tra il dove è
giusto che regni l'SDI e dove invece è giusto che prenda il sopravvento l'MDI.


Come posso sapere se il codice viene effettivamente riusato?
Potresti scoprirlo solo lavorando al livello del s.o. in quanto e` una
cosa trasparente alle applicazioni. Comunque sta tranquillo un s.o.
degno di tale nome fa cosi`.


giusto che regni l'SDI e dove invece è giusto che prenda il sopravvento l'MDI.
Molto spesso non e` facile trovare regole precise, il buon senso e` 
allora una cosa che vale la pena ascoltare.
