Loading
Note di Apprendimento
Study Reminders
Support
Text Version

Analisi delle informazioni - Analisi Paralisi

Set your study reminders

We will email you at these times to remind you to study.
  • Monday

    -

    7am

    +

    Tuesday

    -

    7am

    +

    Wednesday

    -

    7am

    +

    Thursday

    -

    7am

    +

    Friday

    -

    7am

    +

    Saturday

    -

    7am

    +

    Sunday

    -

    7am

    +

Ciao a tutti, benvenuti nella seconda sessione della seconda settimana dell'introduzione al moderno corso di sviluppo delle applicazioni. La scorsa settimana abbiamo visto lo sviluppo di base di una linea di comandoversione della nostra applicazione di fair share. Abbiamo visto il codice java del nostro programma e abbiamo visto come funziona. Non funzionava perfettamente in alcuni casi, e si è schiantato, ma comunque ha eseguitoil lavoro. Abbiamo lasciato la seduta dicendo che cos' è che dobbiamo fare per ricordare le informazioni.Così, il piano per questa sessione è pensare di ricordare informazioni e affrontare un certofenomeno chiamato paralisi dell'analisi.
(Riferimento Slide Time: 01.06)
Cominciamo con un compito e una domanda. Nel nostro programma Java abbiamo visto vari tipi di variabili:• Variabili globali: ad esempio, il denaro speso array era una variabile globale per il programma. InJava lo implementiamo utilizzando le variabili Locali di classe•: ad esempio, l'indice utilizzato per accedere ad un determinato coinquilino all'interno di tale arraypuò essere una variabile locale. In effetti, spesso è stata una variabile locale per il loop.Il compito per voi è quello di dare almeno 3 diversi esempi di informazioni che memorizzereste invariabili che sono di portata locale, globali in ambito e sistematiche di portata. Dovresti fare questoper l'applicazione di condivisione equa a portata di mano, ma potresti anche usare altri programmi a cui puoi pensaredi.
Avendo fatto questo compito la nostra prossima domanda è che è possibile che le informazioni che si decideda memorizzare in, diciamo, le variabili locali per un determinato programma possano essere memorizzate in variabili globali peraltro programma? In altre parole, a seconda del programma particolare, lo scenario, o il problemaa portata di mano è possibile che un determinato pezzo di informazioni possa essere conservato in variabile locale ouna variabile globale o magari anche una variabile sistemica? Il contesto contribuisce adeterminare la strategia di storage? Dovresti ponderare su questa domanda e sono incoraggiati adiscutere sul forum. Praticamente ci dà un seme per certe idee che esploreremo inquesta sessione.
(Riferimento Slide Time: 03.17)
Ecco il diagramma di blocco familiare della nostra applicazione di riga di comando, come indicato, in questa sessioneci si concentrerà principalmente sulla casella sulla vostra sinistra inferiore che si occupa di archiviazione dati sumemoria secondaria. Prima di lasciare questo richiamo che per noi l'input standard è il dispositivotastiera e l'output standard è il nostro monitor. Questo input standard e l'output standard sonotipicamente definiti dal sistema operativo che si utilizza.La maggior parte dei sistemi operativi vi permetterà di modificare questi a seconda delle vostre esigenze. Per esempio,è possibile scegliere l'input standard da un file invece di una tastiera. Analogamente, è possibileindirizzare l'output standard in un file invece di un monitor. Ti suggeriamo di imparare il tuo sistema operativoe di come il tuo sistema operativo ti permette di modificare l'output standard o l'input standarda seconda delle tue esigenze.Di solito c'è anche un dispositivo più standard chiamato come output di errore standard che è distintodall'output standard utilizzato per flash messaggi di errore. Per impostazione predefinita, il tuo monitor è anche il dispositivo di errore standard.
(Riferimento Slide Time: 04.49)
Ricordare le informazioniLet us continuiamo con la nostra applicazione di condivisione equa. Proviamo a capire prima perché avremmobisogno di ricordare le informazioni nei nostri programmi. L'informatica elabora le informazioni di un passo in un momento. Quindi, l'intera elaborazione delle informazioni è diffusa in vari instanti temporali, etichettiamoqueste istanze di tempo in base alla nostra convenienza. Ad esempio, potremmo seguireseguendo la convenzione:• Let � " denota l'istante in cui è disponibile l'informazione del tempo.• Analogamente lasciare che sia il codice di volta in volta che l'informazione è aggiornata.• Let $rappresentare l'istante in cui le informazioni vengono elaborate.Tipicamente, l'istante in cui le informazioni sono disponibili è prima dell'istante in cui le informazionivengono aggiornate e poi quale stessa è prima dell'istante in cui viene utilizzato. In questo casoabbiamo ovviamente ipotisito che ci sia una fase di aggiornamento, ma che potrebbe non essere così. Youpotrebbe semplicemente utilizzare le informazioni senza aggiornarla, in quel caso il tempo istantaneo �#will non esiste,ma ciò nonostante la disuguaglianza �% <% $rimarrà ancora vero.Nota anche il modo in cui tiriamo tipicamente un tempo; avremo la differenza tra l'orainstant of processing e l'istante istante di disponibilità come numero positivo. Semplicemente metti, c'èuna certa durata dal momento in cui le informazioni diventano disponibili e le informazioni vengono utilizzate,tra questa intera informazione di durata deve essere ricordata; ecco quale memoria nel nostro programmaci ha aiutato a fare.
(Riferimento Slide Time: 06.54)
Nel nostro caso di fair share, qui possiamo avere le seguenti convenzioni:• Ci denunceremo per% l'istante in cui le informazioni relative alle spese sono disponibili.• Facciamo denotare per buono # il punto di tempo in cui le informazioni relative alle spese saranno aggiornate• Ti basta indicare il momento istante in cui vengono riportate le informazioni sulle spese.Si prega di notare che quando si segnala le informazioni utilizzate tali informazioni; questo significa che le informazionidevono essere ricordate – le informazioni sulle spese devono essere ricordate dal momentoaggiornato al momento in cui viene utilizzata per la segnalazione. Per questa intera durata le informazioni devono essere ricordate. Tuttavia, nel caso dell'applicazione di condivisione equache abbiamo visto nella sessione precedente c'è un problema. Il programma che viene eseguitoper aggiornare le informazioni sulle spese è diverso dal programma che viene eseguito quando si segnala cheinformazioni, lo stesso programma viene eseguito in due momenti diversi ed è per questo che l'informazionenon può essere memorizzata all'interno del programma, deve essere al di fuori del programma perché richiediamo le stesse informazioniper essere persistenti attraverso diverse esecuzioni del programma.
(Riferimento Slide Time: 08.37)
Come descriviamo le informazioni e la sua elaborazione?• Il tempo necessario per individuare le informazioni sarà denotato da � *.• C'è un certo tempo per trasferire le informazioni da un punto all'altro lo denunceremoby � +.• C'è una certa quantità di tempo per accedere alle informazioni, che saranno � � �,Uno potrebbe semplicisticamente immaginare che il tempo necessario per accedere alle informazioni sia la somma del temponecessario per localizzarlo e il tempo necessario per trasportarlo.C'è anche un po' di tempo che denunceremo per modificare le informazioni. Introdurremo un altrodiverso tipo di tempo: il tempo per la perdita di pertinenza delle informazioni. L'idea qui è se le informazionisono disponibili a un certo punto del tempo poi c'è un certo tempo, diciamo � -, dopo di chele informazioni che sono state disponibili non sono affatto utili. Vorremmo identificare un tale momentoistantaneo anche.C'è anche il volume di informazioni di cui si potrebbe voler parlare. Infine, di solito il parametroimportante per descrivere le informazioni è la velocità di trasferimento che è il volume di informazioniil tasso a cui viene trasferito.
(Riferimento Slide Time: 10.16)
Nel caso del programma di share fair ci sono alcuni parametri di descrizione delle informazioni che sonotrascurabili. Ad esempio, localizzare il tempo o l'accesso e modificare i tempi. Questi tempi sono trascurabili inil senso che sono molto piccoli rispetto agli altri tempi del programma. I parametrisignificativi potrebbero essere il tempo di trasferimento e ovviamente la velocità di trasferimento e il volume.Ci potrebbero essere parametri non rilevanti per questo caso particolare. Ad esempio, il tempo perperdita di pertinenza delle informazioni non è davvero rilevante per questo caso, forse per una versione successivadi questa equa applicazione condividi in modo particolare un'applicazione web questa potrebbe essere una considerazionemolto importante; se lo è, ci occuperemo di esso in una sessione futura.
(Riferimento Slide Time: 11.08)
Avendo guardata le idee che sono necessarie per ricordare le informazioni ci lasciamo un po' di piùconcreto. Analizziamo il meccanismo che sarebbe utile per ricordare le informazioni. Suil lato hardware che hai i registri della CPU come un meccanismo per ricordare le informazioni, la memoria principalecosì come la memoria secondaria sono altri meccanismi per ricordare le informazioni. Dal software o da un lato linguistico di programmazione, di nuovo, avremmo delle variabiliche il nostro compilatore avrebbe cercato di inserire nei registri della CPU.Ci sono variabili locali, globali o di sistema. Abbiamo file e file system come un altro meccanismoper ricordare le informazioni, e ancora questa idea continua in modo da poter avere anche l'area di memoriareti o centri dati e così via.
(Riferimento Slide Time: 12.29)
distinguiamo tra le idee necessarie per ricordare le informazioni, perché dobbiamoricordare le informazioni, come facciamo, quali sono i parametri reali di cui dovremmo davvero essereinteressati e i meccanismi necessari per ricordare le informazioni. Dati i meccanismi,i meccanismi sono descritti da vari tipi di parametri se il meccanismo è persistenteo volatile. Ad esempio, i dispositivi RAM tipici che abbiamo sulle nostre macchine sono dispositivi volatili: il momento in cui la potenza viene disattivata tutto il contenuto della memoria sono cancellati, incontrasto ai dispositivi di memoria secondaria tipici che sono persistenti: nel senso che anche sela potenza viene rimossa è ancora conservata.Un altro parametro è il quantum quantum: in qualsiasi momento qual è il payload di informazioniche viene trasferito. Potrebbe essere uno alla volta in cui si chiama come trasferimento seriale,o potrebbe trattarsi di un mucchio di dati viene trasferito che viene chiamato come trasferimento parallelo.Un altro parametro sarebbe l'interfacciamento tra due dispositivi. Se abbiamo due diversi meccanismi, ad esempio una memoria secondaria e una memoria primaria, e dobbiamo trasferireinformazioni di scambio tra i due. Poi bisogna affrontare le sfide di interfacciarsii due dispositivi. Ci sono due tipi di sfida principali: una è la differenza di velocità tipicamente.Ad esempio, la nostra memoria principale è di solito più veloce della memoria secondaria. In quel casoogni qualvolta ci scambiassimo i dati, avremmo bisogno di scambiare dati pezzo per pezzo e per ogni pezzodi dati di scambio avremmo bisogno di verificare se i dati sono stati trasferiti correttamente o meno.
Quindi, dato che ci sono differenze di velocità avremmo normalmente bisogno di controlli di stato e buffering aeffettua scambi di dati.Seconda sfida per l'interfacciamento sarebbe in termini di differenze di formato. Alcuni tipi di meccanismiorganizzerebbero informazioni in un unico formato, un altro meccanismo le stesse informazioniin un formato diverso. Ricordiamo che abbiamo parlato di file come meccanismo di ricordare le informazioni.Consideriamo un esempio dove le informazioni che devono essere ricordate sono un'immagine in un file. Oraun formato di ricordare che le stesse informazioni è formato JPEG e un altro formato diricordando le stesse informazioni è un formato PNG.Avranno bisogno di conversioni tra i due. Ci sono altri parametri di descrizione delle informazionianche, ad esempio è l'accesso controllato o meno, è possibile cercare tutte queste informazionidalle proprie esperienze precedenti o sul web.(Fare Slide Time: 15.26)
Per la nostra versione di riga di comando del nostro fair share case, sceglieremo di ricordare le informazioni utilizzandosemplici file di testo. Questa è una decisione di design che facciamo in questo momento, alla fine poi noipotremmo dover cambiare e andare avanti per un meccanismo diverso per ricordare le informazioni.
(Riferimento Slide Time: 15.52)
Vediamo ora il programma della riga di comando da un punto di vista della funzionalità. Nell'ultima sessioneavevamo visto che questo nostro programma inizia con main. Il metodo principale si avvia semplicemente con il modello grafico die elabora la linea di comando. La riga di comando che abbiamo visto era un semplice dispatcher diil metodo appropriato da eseguire in risposta al comando utente. I comandi dell'utente sono statiregistro, spese e report.Di conseguenza, abbiamo 3 diversi metodi di studio di studio e di redazione di un altro titolo di studio di torio, di torio, e di un certo numero di modelli di studio. Nell'l'ultima sessione avevamo ignorato il titolo di studio di modelli di modelli di studio e di modelli di modelli di studio e di modelli di studio e di modelli di modelli di studio.In questa sessione ora ci concentreremo su questi. Prima di procedere a questo ci rendiamo conto di alcuni aspettisul nostro programma. Il metodo di registrazione deve essere il primo comando utente da eseguire, cheè come un gruppo di coinquilini iniziano a registrare i propri scambi.Il metodo delle spese dovuto deve essere eseguito per ogni evento che i coinquilini condividono,e infine il report do deve essere eseguito per ogni coinquilino. Quindi, il metodo di registrazione è un metodoche richiama l'intera interazione avviata, le spese registreranno ogni evento e la segnalazioneverrà effettuata per ogni coinquilino.
(Riferimento Slide Time: 17.46)
Che cosa sarebbe stato il progetto di Scheda di Scheda e di Scheda � - � - � - significati nell'ambito della "scheda". Il metodo “ Crea database ”dimenticherà tutte le informazioni precedenti, se ne ha. Ciò avviene semplicemente eliminando il file esistente. Si avvierà poi l'afresh creando e aprendo un file vuoto. Il file manterrà sula registrazione delle interazioni in futuro. Il file è esterno al programma. Di recente, che abbiamorealizzato che dobbiamo ricordare informazioni al di fuori del programma. Un file esattamente lo fa.Che cosa creerebbe una nuova informazione fresca di informazione? Nel nostro caso abbiamoscelto di creare una riga di intestazione con le seguenti etichette (come mostrato nelle slide):• avremo un numero di evento• una data / ora• per ogni coinquilino il suo nome• seguito dall'ultima colonna “ invariante ”Una volta che questa riga di intestazione è costruita all'interno della funzione di creazione del database viene quindi scritta sul filee il file è chiuso.
Queste operazioni di creazione di un file che apre un file, la scrittura su un file e la chiusura del file devono essereeseguite utilizzando i metodi Java I/O. Dal titolo "Scheda Tecnica" Scheda tecnica "Scheda tecnica" Scheda tecnica � � �, l'intento di questa funzione è quello diricordare le informazioni precedenti. Quindi, se il file di database esiste allora questa funzione lo aprirà. Saràsaltare la prima riga perché quella è una riga di intestazione e per ogni riga successiva leggerà l'evento
su quella riga, qualsiasi data / ora su quella linea, e le informazioni sulle spese di ogni coinquilino – leggerannoche le informazioni disattivano e lo memorizzano per l'utilizzo nel runtime del programma.Questo verrà fatto per ogni riga successiva e ogni riga rappresenta un singolo evento. Ecco comeil nostro programma richiamerà le informazioni precedenti. Tutto ciò che fa è che si legge nel file che ha leinformazioni degli eventi precedenti, memorizzare informazioni all'interno delle proprie strutture dati. Peresempio, leggerà le informazioni nell'array di denaro speso.Questo è un punto in cui si potrebbe voler mettere in pausa e rivedere il materiale che abbiamo coperto finora.(Fare Slide Time: 20.44)
Ora pensiamo a quello che è stato fatto nella linea di comando. Facciamolo confrontandocon la soluzione di foglio di calcolo. Il foglio di calcolo è un'applicazione, un software o un programma che èscritto da qualcun altro e lo usiamo semplicemente. Quel programma che è stato scritto da qualcunoha le sue capacità di input e output. In altre parole, ha i suoi modi di scegliere l'inpute la visualizzazione dell'output. L'utilizzo del foglio di calcolo ci alleva di affrontare l'input / output perché quelloè stato curato dal programma, invece possiamo concentrarci completamente sulla lavorazione.Lo usiamo per far conoscere le nostre idee sulla lavorazione corretta, infatti passiamo un po' di tempo pensando ala correttezza della nostra soluzione. La riga di comando è un passo dopo il foglio di calcolo, ma quel passoha parecchi punti da considerare.
(Riferimento Slide Time: 22.08)
In primo luogo, ricordati che il nostro programma era completamente all'interno di un singolo file.(Fare Slide Time: 22.21)
Vediamo di avere uno sguardo a quello; qui si vede l'intero programma in un unico file di classe, il modello di classe "DS" di classe. Ha un insieme di variabili globali, una serie di metodi che ci aiutano a fare le varie operazioniche abbiamo bisogno di fare in programma. E infine, alla fine del file il codice classefiniture. In realtà si tratta di uno stile di programmazione molto procedurale, sebbene sia stato fatto in
Java. Java supporta la programmazione orientata agli oggetti ma stiamo solo illustrando la programmazione proceduralein Java. In breve, osserveremo anche una versione orientata agli oggetti dello stesso programma.Abbiamo anche usato il programma della riga di comando per prendersi cura dell'input e dell'output. In particolare,abbiamo visto che durante l'input c'è una rappresentazione esterna delle informazioni che deve essereconvertita in una rappresentazione interna per l'utilizzo, e analogamente durante l'output qualunque sia la rappresentazione internadei dati dobbiamo convertirla in un modulo esterno per la visualizzazione sui dispositivi di output.La nostra versione di riga di comando è stata la nostra prima esposizione a questo tipo di conversione traesterne e rappresentazioni interne per input o output a seconda dei casi. Abbiamo anche visto che la versione di riga di comandoci ha richiesto di ricordare le informazioni sui dati. E in particolare queste informazioni dovevano essere ricordate fuori dal programma, cioè perché avevamo bisogno di quell' informazione attraverso diverseesecuzioni del programma.Abbiamo visto anche l'elaborazione di base che è lì che è ovviamente la parte più fondamentale dil'intera storia, che fortunatamente abbiamo già fatto nel foglio di calcolo e usiamo semplicemente le stesse ideenei nostri programmi e quindi sappiamo che la nostra elaborazione è corretta. Quindi, ci occupiamo diinput e output, ma in un foglio di calcolo avevamo usato un programma scritto da qualcun altro e orastiamo usando il nostro programma.
(Riferimento Slide Time: 25:26)
Ci sono alcune più caratteristiche a questo programma, uno di questi è che si tratta di un singolo programmache ha un solo processo. È su un unico computer che chiamiamo la macchina ospitante. Unoe un solo utente in qualsiasi punto di tempo effettivamente utilizza questo programma.Alcuni di voi potrebbero chiedersi che i nostri sistemi operativi siano multi - utente, da qui tutto quello che ci chiediamo è che undiverso utente si collega. Ma notare che la stessa macchina è usata da persone diverse ma a diversevolte: è in quel senso che il nostro programma viene utilizzato da un singolo utente in qualsiasi punto del tempo.
Si trova anche sul singolo host, il che significa che se i coinquilini devono usare questo programma,devono avvicinarsi alla macchina su cui il programma esiste e usarlo. Così, come utenti di questiprogrammi, al fine di accedere al servizio fornito da questo programma, gli utenti devono arrivare versoil servizio. Possiamo immaginare che il servizio sia fermo sulla macchina e gli utenti devono arrivare ait al fine di accedere al servizio.
(Riferimento Slide Time: 27:10)
Naturalmente ci sono alcune generalizzazioni evidenti, ne avevamo parlato all'iniziodi questo corso. Infatti questo approccio incrementale è una caratteristica di questo corso, tra pocovedremo perché è un approccio così prezioso e utile. Ma per ora potremmo prendere un singolo host, un sistema di singolo programmae un sistema di processo singolo e cercare di sviluppare un sistema di processo multiplo.Supporre ci sono molteplici processi di questo programma che sono in esecuzione contemporaneamente, invece diun singolo host vorremmo avere più host. Cosa ci permettono più host? Se ci sonopiù macchine su cui questo programma è disponibile allora significa che i coinquilini possono accedere aquel servizio da diversi punti e non un unico punto. In ogni punto del tempo il nostro programmanella sua forma attuale è un unico sistema utente la nostra generalizzazione potrebbe renderla un programma utente multi.Invece di un host posizionato un unico luogo, se potessimo avere più host che fossero distribuitiin tutto il globo ovunque allora potremmo avere una versione distribuita di questo programma. Ci sonomolte generalizzazioni possibili, tuttavia si prega di notare che queste sono soluzioni di calcolorelative generalizzazioni. Ci sono ovviamente delle generalizzazioni legate anche al problema, ma per il momentonon ci preoccuperemo di quella seconda dimensione di generalizzazione.
(Riferimento Slide Time: 29:02)
La domanda che vogliamo chiedere ora è perché non abbiamo generalizzato subito dal foglio di calcolouna volta che ci rendiamo conto di qual è la natura della nostra soluzione? Prima di procedere, suggeriamodi mettere in pausa il video e pensare a se stessi sul perché questo potrebbe essere – Perché non è utilegeneralizzare ora?(Fare Slide Time: 29:37)
Il fenomeno chiave che sta dietro il motivo per cui non abbiamo generalizzato subito si chiama come paralisi dell'analisi. Praticamente significa che quando ci generalizziamo troppo presto, pensiamo molto.
Qual è un problema con il pensare? In realtà decelerare lo sviluppo così come l'apprendimento, infatto, decelerare è un modo molto morbido, in realtà paralizza.
Ecco un esempio che si era verificato in precedenza quando in realtà abbiamo pensato al nostro programma, noiabbiamo immaginato una matrice bidimensionale “ spese ”. Si trattava di una schiera unica che aveva a disposizione entrambi i pezzi diinformazioni, le spese così come la quota di testa. Avevamo creato questa schiera data la nostra soluzione basata su foglio di calcolo. Ma come abbiamo sviluppato la versione di linea di comando del nostro programma, noiabbiamo diviso questo in due array di denaro speso e per capo condividi.Forse sarebbe consigliabile tornare indietro e visitare quella lezione dove abbiamo discusso perché abbiamo fattoche si è diviso. Ma ora immaginate, supponiamo di non aver smesso di creare prima un programma di riga di comando,quando abbiamo creato l'array delle spese mentre riflettevamo sul programma della nostra applicazione di fair share, se non ci siamo fermati a fare un programma di riga di comando allora avremmo semplicemente tenutoa generalizzare in qualunque modo sia possibile.Doing the command line version effettivamente ci ha permesso di fermarci, concentrarci e capire cosa è realmenterichiesto, implementarlo e rendersi conto che durante l'implementazione le cose che possono / dovrebbero esseresono cambiate. Impariamo alcuni aspetti durante lo sviluppo effettivo e questo ci aiuta ad incrementare in modo incrementalela nostra soluzione.
(Riferimento Slide Time: 32:13)
Infatti, alcuni dei modi suggeriti per superare la paralisi dell'analisi è quello di fissare dei limiti, avere chiari obiettivi, fare piccoli passi iterativi, prendere la decisione migliore ora e andare avanti. Se voinotate, in realtà abbiamo seguito esattamente questi suggerimenti non solo nello sviluppare realmente il programmama nella progettazione di questo intero corso. L'articolo di Wikipedia sulla paralisi di analisi è piuttostointeressante e ti suggeriamo di guardarlo.