Prévia do material em texto
Slide: 02 PARADIGMAS DE PROGRAMAÇÃO Perspectivas Históricas LP e o Processo de desenvolvimento de Software FORTRAN Nos primórdios da computação, o computador era utilizado apenas para aplicações científicas. (FORTRAN) Uma aplicação era programada para apenas uma pessoa O problema a ser solucionado era bem entendido Não era necessário análise, especificação de projeto e manutenção O desejo de aplicar o computador em mais e mais aplicações tornou-se necessário o desenvolvimento e a sofisticação de novos ambientes 1- Perspectivas Históricas 1- Perspectivas Históricas FORTRAN A eficiência é um outro fator que se tornou importante por dois motivos: a) Os usuários não são tolerantes a falhas de sistemas. b) Os sistemas passaram a fazer parte de setores críticos como: Reatores Nucleares, Pressurização e controle de temperatura em Hidrelétricas, Termoelétricas, Usinas Siderúrgicas, etc. 1.1- Primeiras LPs de alto nível 1950 – O hardware era muito caro, os produtos mais significativos desta data foram: FORTRAN ALGOL60 COBOL. FINALIDADES: O FORTRAN e o ALGOL60 foram utilizados como ferramentas para solucionar problemas numéricos e científicos. O COBOL foi utilizado para solucionar problemas comerciais. 1.1- Primeiras LPs de alto nível INOVAÇÕES O Fortran (1950 até 1957) introduziu o conceito de modularidade através da separação do desenvolvimento em subprogramas. O ALGOL60 (1957 até 1960) introduziu a noção da estrutura de blocos e procedimentos recursivos. O COBOL (1959) introduziu arquivos e descrição de dados, além da uma notação preliminar de programação em linguagem semi-natural. 1.2- Década de 60 O início dos anos 60 caracterizou-se: pela necessidade de desenvolver uma linguagem de programação cujo modelo computacional se baseasse nos princípios matemáticos em detrimento da eficiência de implementação. 1.2- Década de 60 INOVAÇÕES O LISP (1958) foi a primeira linguagem baseada em funções recursivas e no modelo computacional lambda calculus. Nasceu então uma nova classe de linguagens, denominada de Linguagem Funcional. LISP suporta apenas um tipo de estrutura, a Lista. SNOBOL4 (1962) é um outro exemplo de linguagens não convencionais, fornecendo facilidades na manipulação de Strings e Casamento de Padrão. Uma contribuição importante do LISP e SNOBOL4 foi a ênfase na computação simbólica. 1.3 - Consolidação Foi desenvolvida uma linguagem de programação universal chamada de PL/I. Esta linguagem tinha o objetivo de integrar a maioria das características frutíferas das linguagens anteriores. PL/I nasceu antes de seu tempo, eram necessárias maiores pesquisas para que se pudesse integrar de forma eficiente. PL/I introduziu o conceito de controle de Exceção. 1.4 – Passos seguintes O projeto das linguagens da década de 60 influenciou o desenvolvimento de novos projetos de Linguagem: 1.4 – Passos seguintes INOVAÇÕES ALGOL68 (1968) foi o primeiro exemplo completo de especificação formal de uma linguagem de programação. SIMULA67 (1967) foi projetada para solucionar problemas de simulação discreta, introduzindo o conceito de classes e influenciando o aparecimento de novas linguagens como C++, CLU, SMALLTALK, JAVA e EIFFEL. Pascal (1970) foi a linguagem de maior sucesso nesse período. 1.5 – Experimentalismo da década de 70 Muitas Linguagens experimentais nasceram nesse período e vários conceitos importantes foram introduzidos: Tipos de dados abstratos, módulos genéricos, controles de exceção, concorrência e sincronismo. Nasceram as seguintes LPs nesta época: 1.5 – Experimentalismo da década de 70 C (1972) obteve sucesso em sistemas UNIX MODULA2 (1978) foi o sucessor de PASCAL. O PROLOG (1972) foi das linguagens convencionais que mais contribuiu, iniciando uma nova família (paradigma) de linguagens, a programação lógica. 1.6 – Novas LPs Funcionais Desenvolvedores de programação funcional continuaram produzindo, dessa forma surgiram as linguagens: ML (1973) MIRANDA (1985) 1.6 – Novas LPs Funcionais INOVAÇÕES A contribuição de ML foi prover um enorme poder de computação. 1.7 – A década de 80 e a Orientação a Objetos O departamento de Defesa Norte Americano desenvolveu o ADA na tentativa de se criar uma linguagem unificada e uma maior manutenibilidade e eficiência. O projeto ADA foi, com certeza, o maior esforço para se criar uma linguagem de programação. A origem da Orientação a Objetos iniciou-se com SIMULA. A aproximação, entretanto, ocorreu com SMALLTALK, depois de 70 veio o C++. SMALLTALK (1980) começou a ser desenvolvida em 1969, mas tornou-se pública em 1980. Foi a primeira linguagem de programação Orientada a Objetos, por isso é parte importante de qualquer discussão sobre a evolução das linguagens de programação. 1.7 – A década de 80 e a Orientação a Objetos INOVAÇÕES SMALLTALK teve um grande papel na promoção de dois aspectos das computação: Interfaces Gráficas com o usuário e programação orientada a objetos. 1.7 – A década de 80 e a Orientação a Objetos C++ (1979) é uma evolução da linguagem de programação C e combina recursos de linguagens imperativas com linguagens orientadas a objetos. INOVAÇÕES Por algum tempo foi a única linguagem disponível para grandes projetos comerciais de software PONTOS NEGATIVOS C++ é uma linguagem muito grande e complexa e herdou muitas das inseguranças da linguagem C. 1.8 – A década de 90 até os dias atuais Surgimento de inúmeras Linguagens de Programação: Linguagens de Scripting Ambientes visuais e integrados de Programação para aumento de produtividade 1.8.1 – Linguagens de Scripting são linguagens de programação executadas do interior de programas e/ou de outras linguagens de programação, não se restringindo a esses ambientes. As linguagens de script servem para estender a funcionalidade de um programa e/ou controlá-lo, acessando sua API e, são frequentemente usadas como ferramentas de configuração e instalação em sistemas operacionais (Shell script), como por exemplo, em alguns sistemas operacionais da família Linux, que usam a linguagem bash. São também frequentemente usadas em jogos, como por exemplo, os jogos Impossible Creatures e Tibia, que usa a linguagem Lua para controlar as ações dos personagens e o ambiente de batalha. Todas as linguagens de script são linguagens interpretadas, porém, nem todas as linguagens interpretadas são linguagens de script. ActionScript BASIC Euphoria JavaScript Lua Pawn EXEMPLOS: PHP Python Ruby Tcl VBScript JScript Game Maker Language 1.8.1 – Linguagens de Scripting 1.8.1 – Linguagens de Scripting JAVASCRIPT JavaScript é a linguagem de programação mais popular entre os desenvolvedores da web de hoje. Sua origem, porém, não foi nos estúdios de criação de web sites. Inicialmente com o nome de Cmm (C menos menos), pretendia ser semelhante ao C/C++ para facilitar a aprendizagem dos programadores da época. Sua criadora, Nombas, mais tarde conhecida como OpenWave, criou um ambiente de desenvolvimento chamado CEnvi, provavelmente a abreviação de C Environment (Ambiente C) para apresentar a linguagem a programadores comuns. 1.8.1 – Linguagens de Scripting 1.8.1 – Linguagens de Scripting HISTÓRIA DO JAVASCRIPT Depois de alguns anos, já com o nome mudado para ScriptEase, passou a atrair o interesse da Netscape, para criar programas para o seu navegador de mesmo nome, que pudessem rodar no computador do usuário antes de enviar informações para o servidor, o que foi um marco da tecnologia por ser a primeira linguagem a funcionar no modo cliente (na máquina local, em vez do servidor web). Seria solucionado então um grave problema de tráfego na internet: a validação de formulários sem a necessidade do envio dos dados para o servidor web. 1.8.2 – Ambientes visuais de Programação IDE, do inglês Integrated Development Environment ou Ambiente de Desenvolvimento Integrado, é um programa de computador quereúne características e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo. Geralmente os IDEs facilitam a técnica de RAD (de Rapid Application Development, ou "Desenvolvimento Rápido de Aplicativos"), que visa a maior produtividade dos desenvolvedores. 1.8.2 – Ambientes visuais de Programação As características e ferramentas mais comuns encontradas nos IDEs são: Editor - edita o código-fonte do programa escrito na(s) linguagem(ns) suportada(s) pela IDE; Compilador (compiler) - compila o código-fonte do programa, editado em uma linguagem específica e a transforma em linguagem de máquina; Linker - liga (linka) os vários "pedaços" de código-fonte, compilados em linguagem de máquina, em um programa executável que pode ser executado em um computador ou outro dispositivo computacional; Depurador (debugger) - auxilia no processo de encontrar e corrigir defeitos no código-fonte do programa, na tentativa de aprimorar a qualidade do software; 1.8.2 – Ambientes visuais de Programação As características e ferramentas mais comuns encontradas nos IDEs são: Modelagem (modeling) - criação do modelo de classes, objetos, interfaces e interações dos artefatos envolvidos no software com o objetivo de solucionar as necessidades-alvo do software final; Geração de Código - característica mais explorada em Ferramentas Case, a geração de código também é encontrada em IDEs, contudo com um escopo mais direcionado a templates de código comumente utilizados para solucionar problemas rotineiros. Todavia, em conjunto com ferramentas de modelagem, a geração pode gerar praticamente todo o código-fonte do programa com base no modelo proposto, tornando muito mais rápido o processo de desenvolvimento e distribuição do software; Distribuição (deploy) - auxilia no processo de criação do instalador do software, ou outra forma de distribuição, seja discos ou via internet; 1.8.2 – Ambientes visuais de Programação As características e ferramentas mais comuns encontradas nos IDEs são: Testes Automatizados (automated tests) - realiza testes no software de forma automatizada, com base em scripts ou programas de testes previamente especificados, gerando um relatório, assim auxiliando na análise do impacto das alterações no código-fonte. Ferramentas deste tipo mais comuns no mercado são chamadas robôs de testes; Refatoração (refactoring) - consiste na melhoria constante do código-fonte do software, seja na construção de código mais otimizado, mais limpo e/ou com melhor entendimento pelos envolvidos no desenvolvimento do software. A refatoração, em conjunto com os testes automatizados, é uma poderosa ferramenta no processo de erradicação de "bugs", tendo em vista que os testes "garantem" o mesmo comportamento externo do software ou da característica sendo reconstruída. 1.8.2 – Ambientes visuais de Programação Exemplos: Delphi 1.8.2 – Ambientes visuais de Programação Exemplos: DEV C++ 1.8.2 – Ambientes visuais de Programação Exemplos: Eclipse 2 – LP e o processo de desenvolvimento de Software Um processo de desenvolvimento de software é um conjunto de atividades, parcialmente ordenadas, com a finalidade de obter um produto de software. É estudado dentro da área de Engenharia de Software, sendo considerado um dos principais mecanismos para se obter software de qualidade e cumprir corretamente os contratos de desenvolvimento, sendo uma das respostas técnicas adequadas para resolver a Crise do Software. A crise do software foi um termo utilizado nos anos 1970, quando a engenharia de software era praticamente inexistente. O termo expressava as dificuldades do desenvolvimento de software frente ao rápido crescimento da demanda por software, da complexidade dos problemas a serem resolvidos e da inexistência de técnicas estabelecidas para o desenvolvimento de sistemas que funcionassem adequadamente ou pudessem ser validados. 2 – LP e o processo de desenvolvimento de Software Anos 70 Programação Estruturada até 1986 Anos 90 Programação Orientada a Objetos Scrum, desde 1995 Processo Unificado da Rational - Rational Unified Process (RUP) XP - Extreme programming, desde 1999 Anos 2000 Processo Ágil Unificado - Agile Unified Process (AUP) EXERCÍCIOS 1 – Classifique as seguintes linguagens de programação quanto ao paradigma que ela pertence: Fortran, Cobol, Lisp, PL/I, Pascal, Haskell, ML, Java, PHP, Javascript, Miranda, Prolog, ADA, PHP, Simula67, SmallTalk, Perl, Algol 60, Basic. 2 – Quais foram as inovações da Linguagem de Programação Prolog? 3 – Quais foram as inovações da Linguagem de Programação SmallTalk? 4 – Quais foram as inovações da Linguagem de Programação Fortran? 5 – Qual relação entre processo de desenvolvimento de software e Linguagens de Programação. 6 – Qual a vantagem de se ter um ambiente visual e integrado de programação?