Loading
Nota de Estudos
Study Reminders
Support
Text Version

Lembrando a Paralisação de Análise de Informações

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

    +

Olá a todos, bem-vindos à segunda sessão da segunda semana da introdução ao moderno curso de desenvolvimento de aplicações. Na semana passada vimos o desenvolvimento básico de uma versão de linha de comandodo nosso aplicativo de compartilhamento justo. Nós vimos o código java do nosso programa e vimos como elefunciona. Não estava funcionando perfeitamente em alguns casos, e sim travou, mas, mesmo assim, executouo trabalho. Saímos da sessão dizendo o que é que é preciso fazer para lembrar informações.Então, o plano para esta sessão é pensar em lembrar informações e lidar com um determinado fenômenochamado como paralisia de análise.
(Consulte O Tempo De Deslizamento: 01:06)
Vamos começar com uma tarefa e uma pergunta. Em nosso programa Java vimos vários tipos de variáveis:• Variáveis globais: por exemplo, a matriz gasta em dinheiro era uma variável global para o programa. EmJava implementamos isso usando Variáveis de Classe• Variáveis locais: por exemplo, o índice que é usado para acessar um determinado colega de quarto dentro dessa matrizpode ser uma variável local. Na verdade, muitas vezes tem sido uma variável local para o loop.A tarefa para você é dar pelo menos 3 exemplos diferentes de informações que você armazenaria emvariáveis que são locais em escopo, global em escopo e system-wide no escopo. Você deve fazer issopara o aplicativo de compartilhamento justo à mão, mas você também poderia usar outros programas que você pode pensarde.
Tendo feito essa tarefa nossa próxima pergunta é que é possível que as informações que você decidirarmazenem em, digamos, variáveis locais para um determinado programa podem ser armazenados em variáveis globais paraoutro programa? Em outras palavras, dependendo do programa particular, do cenário, ou do problemaà mão é possível que uma determinada peça de informação possa ter que ser armazenada em variável local ouuma variável global ou talvez até mesmo uma variável de todo o sistema? O contexto contribui paradeterminar a estratégia de armazenamento? Você deve ponderar sobre esta questão e ser encorajado adiscutir sobre o fórum. Ele basicamente nos dá uma semente para certas ideias que vamos explorar emesta sessão.
(Consulte O Tempo De Deslizamento: 03:17)
Aqui está o diagrama de bloco familiar de nosso aplicativo de linha de comandos, conforme indicado, nesta sessãovamos principalmente focar na caixa na sua esquerda inferior que lida com armazenamento de dados na memória secundária. Antes de sairmos deste recall que para nós a entrada padrão é o dispositivo do tecladoe a saída padrão é o nosso monitor. Esta entrada padrão e saída padrão sãotipicamente definidas pelo sistema operacional que você usa.A maioria dos sistemas operacionais permitirá que você mude estes dependendo de suas necessidades. Por exemplo, eleé possível escolher entrada padrão a partir de um arquivo em vez de um teclado. Similarmente, é possíveldirecionar a saída padrão para um arquivo em vez de um monitor. Sugerimos que você aprenda seu sistema operacionale como seu sistema operacional permite alterar a saída padrão ou entrada padrãodependendo de suas necessidades.Geralmente há também mais um dispositivo padrão chamado como a saída de erro padrão que é distintada saída padrão que é usada para mensagens de erro flash. Por padrão, seu monitor também é o dispositivo de erro padrão.
(Consulte O Tempo De Deslizamento: 04:49)
Lembrando informaçõesVamos continuar com o nosso aplicativo de compartilhamento justo. Vamos tentar primeiro entender por que nósprecisaríamos lembrar de informações em nossos programas. Informações do processo de computação uma etapa em um momento. Assim, todo o processamento de informações se espalhou por vários instantes de tempo, vamos rotularessas instâncias de instantes de tempo de acordo com a nossa conveniência. Por exemplo, poderíamos seguirseguindo convenção:• Deixe " denotar o instante instante em que a informação do tempo estiver disponível.• similarmente deixe �# denotar o instante instante em que as informações são atualizadas.• Let �$ representar o instante instante em que as informações são processadas.Geralmente, o instante em que as informações estão disponíveis é anterior ao instante em que as informaçõessão atualizadas e, em seguida, que ele mesmo é anterior ao instante em que é usado. Nestecaso temos naturalmente assumido que há uma fase de atualização, mas que pode não ser o caso. Vocêpode apenas usar as informações sem atualizá-lo, nesse caso o tempo instantâneo �#will não existir,mas, no entanto, a desigualdade �% < �$ ainda permanecerá true.Também nota a maneira como tipicamente medimos um tempo; teremos a diferença entre o tempoinstante de processamento e o instante de tempo de disponibilidade como número positivo. Basta colocar, háuma certa duração a partir do momento em que as informações se tornam disponíveis e as informações são usadas,no entre esta informação de duração toda deve ser lembrado; é isso que a memória em nosso programanos ajudou a fazer.
(Consulte O Tempo De Deslizamento: 06:54)
Em nosso caso de compartilhamento justo, aqui podemos ter as seguintes convenções:• Vamos denotar por meio o instante em que as informações de despesas estiverem disponíveis.• Vamos denotar por �# o ponto do tempo em que as informações de despesas serão atualizadas• Deixe �$ denotar o instante em que as informações de despesas são relatadas. Isso significa que as informações dodevem ser lembradas – as informações do gasto devem ser lembradas a partir do momento em que é atualizado até o momento em que ele é usado para relatórios. Durante toda esta duração as informações devem ser lembradas. No entanto, no caso do justoaplicativo de compartilhamento que vimos na sessão anterior há um problema. O programa executadopara atualizar as informações de despesas é diferente do programa executado quando você informa que informações, o mesmo programa está sendo executado em dois horários diferentes e é por isso que informaçõesnão podem ser armazenadas dentro do programa, ele tem que estar fora do programa porque nós exigimos que as mesmas informaçõessejam persistentes em execuções distintas do programa.
(Consulte O Tempo De Deslizamento: 08:37)
Como descrever informações e seu processamento?• O tempo que leva para localizar informações será denotado por � *.• Há um certo tempo para transferir informações de um ponto para outro vamos denotá-lo• Há certa quantidade de tempo para acessar as informações, o que será o �,Um pode imaginar simplisticamente que o tempo necessário para acessar informações é a soma do temponecessário para localizá-lo e o tempo necessário para transportá-lo.Há também algum tempo que denotamos para modificar informações. Introduziremos mais umtipo diferente de um tempo: tempo para perda de relevância da informação. A ideia aqui é se as informaçõesestão disponíveis em um determinado momento então há um certo tempo, digamos �-, após o qualas informações que foram disponíveis não são úteis em nada. Gostaríamos de identificar tal momentoinstantâneo também.Há também volume de informações que você pode querer falar. Por fim, geralmente o parâmetro importantepara descrever informações é a taxa de transferência que é o volume de informaçõesa taxa na qual ele está sendo transferido.
(Consulte O Tempo De Deslizamento: 10:16)
No caso do programa de compartilhamento justo, há alguns parâmetros de descrição de informações que sãoinsignificantes. Por exemplo, localizar o tempo ou o acesso e modificar horários. Esses tempos são insignificantes emo sentido de que eles são muito pequenos comparados com os outros tempos do programa. Os parâmetros significativospodem ser o tempo de transferência e é claro a taxa de transferência e volume.Poderia haver parâmetros que não são relevantes para este caso específico. Por exemplo, o tempo paraperda de relevância das informações não é realmente relevante para este caso, talvez para uma versão posteriordeste aplicativo de compartilhamento justo particularmente um aplicativo web este poderia ser uma consideração demuito importante; se for, lidaremos com ele em uma sessão futura.
(Consulte O Tempo De Deslizamento: 11:08)
Tendo olhado para as ideias que são necessárias para lembrar informações deixe-nos obter um pouco mais de concreto. Olhemos para o mecanismo que seria útil para lembrar as informações. Noo lado do hardware você tem a CPU registra como um mecanismo para lembrar informações, a memória primáriaassim como a memória secundária são outros mecanismos para lembrar informações. A partir do software ou de um lado da linguagem de programação, novamente, teríamos variáveisque o nosso compilador tentaria colocar nos cadastros da CPU.Há variáveis locais, globais ou de sistema. Temos arquivos e sistemas de arquivos como outro mecanismopara lembrar informações, e novamente essa ideia continua para que também possamos ter área de armazenamentoredes ou centros de dados e assim por diante.
(Consulte O Tempo De Deslizamento: 12:29)
Nós distinguimos entre as ideias necessárias para lembrar informações, por que precisamos delembrar de informações, como fazer isso, quais são os parâmetros reais que devemos realmente serpreocupados, e os mecanismos necessários para lembrar informações. Considerando-se os mecanismos,os mecanismos são descritos por vários tipos de parâmetros se o mecanismo é persistenteou volátil. Por exemplo, os dispositivos típicos de RAM que temos em nossas máquinas são dispositivos voláteis: no momento em que a energia é desligada todo o conteúdo da memória são apagados, emcontraste com os dispositivos típicos da memória secundária que são persistentes: no sentido de que mesmo sea energia é removida o conteúdo ainda é preservado.Outro parâmetro é o quantum de transferência: em qualquer momento qual é a carga útil de informaçõesque está sendo transferida. Poderia ser um de cada vez em que o caso é chamado como transferência serial,ou pode ser um monte de dados está sendo transferido o que é chamado como transferência paralela.Outro parâmetro seria o interditado entre dois dispositivos. Se temos dois mecanismos diferentes, por exemplo uma memória secundária e uma memória primária, e precisamos transferirinformações de troca entre os dois. Em seguida, precisamos lidar com os desafios de interenfrentaros dois dispositivos. Existem dois tipos principais de desafio: uma são as diferenças de velocidade tipicamente.Por exemplo, nossa memória primária geralmente é mais rápida que a memória secundária. Nesse casosempre que trocarmos dados, precisaríamos trocar peça de dados por peça e para cada peçade dados de câmbio precisaríamos verificar se os dados foram transferidos corretamente ou não.
Então, dado que há diferenças de velocidade nós tipicamente precisaríamos de verificações de status e buffering aexecutar trocas de dados.Segundo desafio para o interditado seria em termos de diferenças de formato. Alguns tipos de mecanismosorganizariam informações em um mesmo formato, outro mecanismo as mesmas informaçõesem um formato diferente. Lembre-se de que falamos de arquivo como um mecanismo de lembrar informações.Considerar um exemplo em que a informação que deve ser lembrada é uma imagem em um arquivo. Agoraum formato de lembrando que mesmo informações é formato JPEG e outro formato delembrando as mesmas informações é um formato PNG.Você precisará de conversões entre os dois. Existem outros parâmetros de descrição de informaçõestambém, por exemplo é o acesso controlado ou não, você pode consultar todas essas informaçõesde suas experiências anteriores ou na web.(Consulte o Tempo do slide: 15:26)
Para nossa versão de linha de comando de caso de compartilhamento justo, escolheremos lembrar informações usandoarquivos de texto simples. Esta é uma decisão de design que fazemos neste ponto do tempo, eventualmente mais tarde nóspoderemos ter que mudar e entrar para um mecanismo diferente para lembrar informações.
(Consulte O Tempo De Deslizamento: 15:52)
Deixe-nos agora olhar para o programa de linha de comandos do ponto de vista de funcionalidade. Na última sessãojá tínhamos visto este nosso programa começar com main. O método main simplesmente começa com o������������������������ A linha de comando que vimos foi um simples despachante deo método apropriado para executar em resposta ao comando do usuário. Os comandos do utilizador foramregisto, despesa e relatório.Em conformidade, temos 3 métodos diferentes ���������������������������������������������������������������������������������������������������������������������������������������������������������� Antes de seguirmos para isso vamos perceber alguns aspectossobre o nosso programa. O método de registro deve ser o primeiro comando do usuário a ser executado, queé como um grupo de colegas de quarto começa a gravar suas trocas.O devido método de despesa deve ser executado para cada evento que os colegas de quarto compartilham juntos,e finalmente o relatório do fazer deve ser executado para cada colega de quarto. Assim, o método de registro é um métodoque fica com a interação inteira iniciada, as despesas gravarão cada evento e o relatórioserá feito para cada colega de quarto.
(Consulte O Tempo De Deslizamento: 17:46)
O que iria �������������������������������������������������� O método “ create database ”esquecerá todas as informações anteriores, se tiver algum. Isso é feito por simplesmente excluir o arquivo existente. Em seguida, iniciará-se novamente criando e abrindo um arquivo vazio. O arquivo manterá emregistrando as interações no futuro. O arquivo é externo ao programa. Recall, que temospercebemos que devemos lembrar de informações fora do programa. Um arquivo exatamente faz isso.O que criaria uma nova peça de informação nova de informação significa? No nosso caso temosescolhido para criar uma linha de cabeçalho com seguintes etiquetas (conforme mostrado em slides):• teremos um número de evento• um timestamp• para cada roommate seu ou seu nome• seguido da última coluna “ invariant ”Uma vez que esta linha de cabeçalho é construída dentro da função de criação de banco de dados ela é então escrita no arquivo, e o arquivo está fechado.
Essas operações de criação de um arquivo abrindo um arquivo, gravando em um arquivo e fechando o arquivo devem serfeitas usando os métodos de E/S Java. ����������������������������������������������������� Assim, se o arquivo de banco de dados existir então esta função abrirá-lo-á. Ele irápular a primeira linha porque essa é uma linha de cabeçalho, e para cada linha subsequente ela irá ler o evento
nessa linha, qualquer timestamp sobre essa linha, e informações de despesas de cada roommate – ele irá lerque informações off e armazená-lo para uso no tempo de execução do programa.Isto será feito para cada linha subsequente e cada linha representa um único evento. É assim quenosso programa irá relembrar as informações anteriores. Tudo o que faz é lê-se no arquivo que tem as informaçõesdos eventos anteriores, armazene informações dentro de suas próprias estruturas de dados. Para oexemplo, ele irá ler as informações no dinheiro gasto matriz.Este é um ponto em que você pode querer pausar e revisar o material que cobrimos até agora.(Consulte o Tempo do slide: 20:44)
Deixe-nos pensar agora sobre o que foi feito na linha de comando. Vamos fazer isso comparandocom a solução de planilha. A planilha é um aplicativo, um software ou um programa que éescrito por outra pessoa e nós simplesmente utilizamos. Aquele programa que foi escrito por alguémmais tem as suas próprias capacidades de entrada e saída. Em outras palavras, ele tem suas próprias formas de escolher entradae exibir saída. Usar a planilha nos alivia de lidar com a entrada / saída porque issofoi cuidado com o programa, em vez disso podemos nos concentrar completamente no processamento.Nós usamos isso para obter nossas ideias sobre processamento correto, na verdade, passamos algum tempo pensando ema correção da nossa solução. A linha de comando é uma etapa após a planilha, mas essa etapatem um número bastante de pontos a considerar.
(Consulte O Tempo De Deslizamento: 22:08)
Em primeiro lugar, lembre-se de que nosso programa foi completamente dentro de um único arquivo.(Consulte o Tempo de Slide: 22:21)
Deixe-nos ter uma olhada nisso; aqui você vê o programa inteiro em um único arquivo de classe, a classe����������������������������������������������������������������������� E finalmente, no final do arquivo o código de classefinaliza. Na verdade, esse é um estilo muito processual de programação, embora tenha sido feito em
Java. Java suporta programação orientada a objetos mas estamos apenas ilustrando a programaçãoprocessual em Java. Em um curto tempo também olharemos uma versão orientada a objetos do mesmo programa.Também utilizamos o programa linha de comandos para cuidar da entrada e saída. Em particular,vimos que durante a entrada há uma representação externa das informações que tem que serconvertidas em uma representação interna para uso, e similarmente durante a saída seja qual for a representação internados dados temos que convertê-lo em um formulário externo para exibição nos dispositivos de saída.Nossa versão de linha de comando foi nossa primeira exposição a esse tipo de uma conversão entre externase representações internas para entrada ou saída conforme o caso. Vimos também que a versão de linha de comandosexigia que lembrássemos informações de dados. E em especial essas informações tiveram queser lembradas fora do programa, isso porque precisávamos dessas informações através de diferentesexecuções do programa.Também vimos o processamento básico que está aí que é claro a parte mais fundamental detoda a história, que felizmente já fizemos na planilha e apenas usamos as mesmas ideiasem nossos programas e, daí, sabemos que nosso processamento está correto. Então, estamos lidando comentrada e saída, mas em uma planilha, tínhamos usado um programa escrito por outra pessoa e agoraestamos usando o nosso próprio programa.
(Consulte O Tempo De Deslizamento: 25:26)
Há mais algumas características para este programa, uma delas é que é um único programaque tem um único processo. Ele está em um único computador que chamamos como máquina host. Ume apenas um usuário em qualquer determinado ponto do tempo realmente usa esse programa.Alguns de vocês podem se perguntar que nossos sistemas operacionais são multi-usuários, daí tudo o que exigimos é que umusuário diferente registre login. Mas observe que a mesma máquina é usada por pessoas diferentes mas em diferentesvezes: é nesse sentido que nosso programa está sendo usado por um único usuário em qualquer ponto do tempo.
Também está localizado no host único, o que significa que se os colegas de quarto tiverem que usar esse programa,eles têm que vir perto da máquina em que o programa existe e usá-lo. Assim, como usuários desses programas, a fim de acessar o serviço prestado por este programa, os usuários devem vir em direção ao serviço. Podemos imaginar que o serviço é estacionário na máquina e os usuários devem vir paraele a fim de acessar o serviço.
(Consulte O Tempo De Deslizamento: 27:10)
Muito naturalmente há algumas generalizações óbvias, tínhamos conversado sobre isso no iníciodeste curso. Na verdade, essa abordagem incremental é uma característica deste curso, nós vamos em brevever por que é uma abordagem tão valiosa e útil. Mas, por enquanto, poderíamos levar um único host, um sistema de programa únicoe sistema de processo único e tentar desenvolver um sistema de processo múltiplo.Suponha que existam vários processos deste programa que estão em execução simultaneamente, em vez deum único host gostaríamos de ter vários hosts. O que vários hospedeiros nos permitem? Se houvervárias máquinas em que este programa está disponível então significa que os colegas de quarto podem acessaraquele serviço a partir de diferentes, pontos diferentes e não um ponto único. Em qualquer momento o nosso programaem sua forma atual é um único sistema de usuário nossa generalização poderia estar fazendo dele um programa de usuário multi.Em vez de um host localizado um único lugar, se pudéssemos ter vários hosts que foram distribuídosem todo o globo em qualquer lugar então poderíamos ter uma versão distribuída deste programa. Hámuitas generalizações possíveis, no entanto por favor note que estas são soluções de computaçãorelacionadas a generalizações. Existem naturalmente generalizações relacionadas ao problema também, mas para o momentonão nos preocuparemos com essa segunda dimensão de generalizar.
(Consulte O Tempo De Deslizamento: 29:02)
A pergunta que queremos fazer agora é por que não generalizamos logo a partir da planilhauma vez que percebemos o que é a natureza da nossa solução? Antes de prosseguir, sugerimosvocê pausar o vídeo e pensar por você mesmo sobre por que isso pode ser – Por que não é útil parageneralizar agora?(Consulte o Tempo do slide: 29:37)
O fenômeno chave que está por trás da razão pela qual não generalizamos logo de imediato é chamado comoparalisia de análise. Basicamente é significa que quando generalizamos muito cedo, a gente over pensa muito.
O que é um problema com o pensamento sobre o pensamento? Na verdade desacelera o desenvolvimento assim como o aprendizado, emfato, desacelerar é um caminho muito suave, ele realmente paralisa.
Aqui está um exemplo que havia ocorrido anteriormente quando realmente pensávamos sobre nosso programa, nósimaginamos uma matriz bidimensional “ Despesas ”. Era uma única matriz que tinha ambas as peças de informações, as despesas assim como o compartilhamento de cabeça por cabeça. Nós tínhamos criado essa matriz dada a nossa solução baseada em planilha. Mas como desenvolvemos a versão de linha de comando do nosso programa, nósdividimos isso em duas matrizes dinheiro gasto e por cota de cabeça.Talvez fosse boa ideia voltar e visitar aquela palestra onde discutimos por que fizemosque se dividiram. Mas agora imagine, suponhamos que não paramos para primeiro criar um programa de linha de comando,quando criamos a matriz de despesas enquanto pensávamos sobre o programa do nosso aplicativo de fair share, se não parássemos para fazer um programa de linha de comandos então teríamos simplesmente mantidoem generalizar para qualquer maneira é possível.Fazer a versão da linha de comando realmente nos permitiu parar, focar e entender o que é realmentenecessário, implementá-lo e perceber que durante a implementação as coisas que podem / devem seralteradas. Aprendemos alguns aspectos durante o desenvolvimento real, e isso nos ajuda a incrementalmentedesenvolver bem nossa solução.
(Consulte O Tempo De Deslizamento: 32:13)
De fato, algumas das formas sugeridas de superar a paralisia de análise é estabelecer limites, ter objetivos claros, dar pequenos passos iterativos, tomar a melhor decisão agora mesmo e ir em frente. Se vocênotar, nós realmente seguimos exatamente essas sugestões não apenas na verdade desenvolvendo o programamas na concepção de todo esse curso. O artigo da Wikipédia sobre paralisia de análise é bastanteum interessante e sugerimos que você tenha um olhar para ele.