quinta-feira, 8 de novembro de 2018

AVANÇOS NA PROGRAMAÇÃO ESTRUTURADA

OS AVANÇOS NA PROGRAMAÇÃO ESTRUTURADA

POR: BRUNO FERREIRA, MARCELO HENRIQUE E RAFAEL VALLE








       Programação Estruturada:

A programação estruturada é um paradigma de programação, independente de linguagem de programação, que tem como objetivo construir programas claros, legíveis, eficientes e de fácil manutenção.

A programação estruturada impõe uma disciplina de programação que faz uso de três estruturas de controle para a construção da lógica de um programa. Os três tipos de estrutura de controle são a sequência, a seleção e a repetição. Com apenas estes três tipos de estrutura de controle, é possível construir programas sem o uso de desvios incondicionais.

Alguns exemplos de linguagens de programação estruturada são C, Python (multiparadigma), Ruby (multiparadigma) e Pascal.








História

Os problemas encontrados nas etapas do processo de desenvolvimento de software começaram a ser observados no final da década de 60 e continuam atormentando a vida dos projetistas até hoje. A crise se manifesta de várias formas, citando: a baixa produtividade dos programadores (projetos ultrapassando os prazos e orçamentos), a falta de uma "metodologia formal" para o desenvolvimento de software e os códigos de baixa qualidade (programas literalmente sem a possibilidade de serem mantidos). As soluções para a crise de software passam principalmente pelo uso de melhores técnicas, métodos e ferramentas.


O histórico com o surgimento das linguagens de programação está intensamente ligado a evolução das tecnologias de hardware e de software. Foi com o aumento da tecnologia e da capacidade dos computadores que problemas mais complexos puderam ser resolvidos pela máquina.










Em 1968, Edsger W. Dijkstra, através do artigo "A Case against the GO TO Statement" critica o uso excessivo do comando de desvio incondicional GOTO nos programas desenvolvidos na época. Já em 1972 , novamente Dijkstra, escreve sobre os conceitos da Programação Estruturada no "Capítulo I- Notes on Structured Programming" do livro "Structured Programming" publicado juntamente com outros dois autores: Charles Antony Richard Hoare e Ole-Johan Dahl.






Conceito



Na programação estruturada o "método dos refinamentos sucessivos" é uma "sistemática" de abordagem útil no projeto detalhado e na implementação de softwares. Partindo-se de um dado problema, para qual se deseja encontrar um programa de solução, deve-se procurar subdividi-lo em problemas menores e consequentemente de solução mais simples (dividir para conquistar). Alguns destes problemas menores (subproblemas) terão solução imediata (na forma de um subprograma) e outros não. Os subproblemas para os quais não for possível encontrar uma solução direta devem ser novamente subdivididos. Assim, o processo é repetido até que se consiga encontrar um subprograma para solucionar cada um dos subproblemas definidos. Então, o programa de solução do problema original será composto pela justaposição dos subprogramas usados para solucionar cada um dos subproblemas em que o problema original foi decomposto.





Os anos 1990's: A Era da Internet



  • 1990 - Haskell

    • 1991 - Python
    • 1991 - Java
    • 1993 - Ruby
    • 1993 - Lua
    • 1994 - ANSI Common Lisp
    • 1995 - JavaScript
    • 1995 - PHP
    • 2000 - C#
    • 2008 - JavaFX Script










    A evolução das linguagens de programação continua, tanto na indústria quanto na pesquisa. Algumas das tendências atuais incluem
    • Mecanismos para a adição de segurança e verificação da confiabilidade para a linguagem: verificação estática prolongada, controle de fluxo de informação, estático segurança em threads;
    • Mecanismos alternativos de modularidade: mixin s, Delegação de programação, programação orientada a aspectos;
    • Desenvolvimento de software orientado a componentes;
    • Metaprogramação, Reflexão ou acesso a árvores de sintaxe abstratas...
    • Maior ênfase na distribuição e mobilidade;
    • Integração com bases de dados, incluindo XML e bancos de dados relacionais;
    • Suporte para Unicode de forma que o código-fonte não esteja restrito aos caracteres contidos no código ASCII; permitindo, por exemplo, o uso de scripts não latinos ou pontuação estendida;
    • XML para a interfaces gráficas (XUL, XAML);
    • Arquitetura Orientada a Serviços (SOA).






    Boa noite pessoal!

    segunda-feira, 5 de novembro de 2018

    Pesquisa Operacional e Programação DInâmica


    Como um desenvolvedor pode aplicar técnicas de pesquisa operacional e programação dinâmica em tomadas de decisão?


    Por: Bruno Ferreira












    A melhor expressão para referenciar a Pesquisa operacional é a “tomada de decisão”, porque esta ferramenta é justamente sobre isso.
    E no mundo em que vivemos as decisões fazem parte do nosso dia-a-dia, e principalmente no mundo empresarial, onde as decisões são um fator-chave para o sucesso.




    Por isso, todo o bom gestor deve recorrer ao uso desta ferramenta na hora de tomar as suas decisões, porque se esta ferramenta consegue lhe proporcionar o sucesso que é vital para a sua empresa, a necessidade de conhecê-la para poder aplicá-la é importantíssima.


    A pesquisa Operacional é uma forma cientifica que auxilia na tomada de decisões recorrendo ao uso de modelos matemáticos, estatísticos e algoritmos para poder obter alternativas e ações na tomada de decisões.





    História

    O período que se transcorreu no início dos anos 30 envolvendo diversos países e que veio a ficar conhecido como a Segunda Guerra Mundial, também teve sua parcela positiva tocante à evolução da Administração da produção.




    Em virtude dos diversos problemas e situações decorridas na época, tornou-se quase que obrigatório que os envolvidos na mesma criassem uma visão mais acurada para resolução dos problemas enfrentados na guerra.

    Em qualquer parte da atividade humana decisões tomadas à base de achismos, como o homem faz muitas as vezes, podem conduzir a sérios riscos.
    Principalmente quando se tratar de negócios, onde uma única decisão não acertada pode conduzir toda a empresa a falência.



    E infelizmente muitos executivos ainda continuam a tomar decisões com base na intuição.

    A pesquisa contribui para tornar as decisões dos executivos, sejam de que área forem, mais seguras, fornecendo a informação objetiva, precisa e que atenda às suas necessidades.




    Benefícios da pesquisa operacional

    • Obtenção de informação para a tomada de decisões
    • Diferencial competitivo;
    • Modelos obrigam os tomadores de decisão a tornarem explícitos seus objetivos;
    • Modelos foçam a identificação e armazenamento de diversas decisões que influenciam no atingimento dos objetivos;
    • Modelos forçam a identificação e armazenamento das relações entre diferentes decisões;
    • Modelos forçam a identificação de limitações;
    • Modelos forçam a determinação de variáveis a serem consideradas e sua quantificação;
    • Modelos permitem a comunicação e o trabalho em grupo.



    • PROGRAMAÇÃO DINÂMICA

    • Programação dinâmica Quando se pretende analisar problemas operacionais, é conveniente considerar a ideia de um sistema, que tem um número de estados possíveis, e que evolui por estes estados. Por exemplo, num problema de manutenção e substituição de equipamentos, a máquina pode ser o sistema, e um estado pode ser definido por sua idade ou conservação. 

    • Problemas operacionais deste tipo podem ser resolvidos através da programação dinâmica. No entanto, percebe-se a existência de dois tipos de problema solucionados pela mesma. No primeiro, as variáveis de estados são discretas e o período de otimização finito, ou seja, problemas reais da engenharia e das ciências sociais que o sistema apresenta um estado inicial conhecido, sujeito a leis de controle também conhecidas. Esse tipo de problema é chamado de determinístico. Em outros, as leis de controle são sujeitas à atuação da natureza. Esses são os chamados problemas probabilísticos. 





      • Verifica-se, portanto, que a programação dinâmica mostra-se como uma técnica destinada a otimizar processos de decisão de multiestágios
      • Muitos destes processos de decisão de multiestágios apresentam retornos. Percebe-se, portanto, que o objetivo da análise de tais processos é a determinação de uma política ótima – a que resulte no melhor retorno total. 

    • Obrigado a todos, e Boa Noite!