Baixe o app para aproveitar ainda mais
Prévia do material em texto
Paradigmas de Linguagens de Programação Aula 2 – Conceitos Iniciais - Continuação Prof. Paulo Henrique paulo.epifanio@estacio.br Critérios de Avaliação – Capacidade de Escrita • Medida de quão facilmente uma linguagem pode ser usada. • O que afeta a legibilidade, afeta a capacidade de escrita. • Comparar a capacidade de escrita no domínio da aplicação para a qual a linguagem foi projetada. • Exemplo: Não comparar a capacidade de escrita de Java num problema que pode ser resolvido por programação estruturada. • O que influencia a capacidade de escrita: • Simplicidade e Ortogonalidade • Expressividade Confiabilidade • Um programa é confiável se ele se comportar conforme o especificado em qualquer situação. • VERIFICAÇÃO DE TIPOS • Testar se há erro de tipo em tempo de compilação, ou em tempo de execução. • Verificar em tempo de compilação é mais desejável. • Quando mais cedo detectar, menos custoso será corrigir. • C não verifica se os tipos em chamada de funções coincidem com os declarados no corpo de funções. Confiabilidade • TRATAMENTO DE EXCEÇÕES • Capacidade de interceptar erros em tempo de execução, pôr em prática medidas corretivas, e seguir na execução do programa. • APELIDOS (ALIASES) • Dois ou mais métodos, ou nomes, distintos que referenciam a mesma posição de memória. Ponteiros em C. • LEGIBILIDADE (READABILITY) E CAPACIDADE DE ESCRITA (WRITABILITY) • Uma linguagem que não suporta maneiras naturais de expressar os algoritmos usará, necessariamente, abordagens não-naturais. Assim, a legibilidade será reduzida. • A legibilidade afeta a confiabilidade tanto na escrita quanto na manutenção. Custo • Treinamento dos programadores para usar a linguagem • Escrita de programas na linguagem • Compilação programas na linguagem • Execução dos programas • Sistema de implementação da linguagem: • Existência de compiladores free • Confiabilidade • Confiabilidade baixa leva a altos custos • Manutenção dos programas Desenvolvimento' do Programa Sabendo que esses são funções da capacidade de escrita e da legibilidade. Custo Outros critérios de avaliação Portabilidade • Quão facilmente um programa pode ser movido de uma implementação para outra Generalidade • Seu uso em uma gama de aplicações Boa definição (Well-definedness) • A precisão e a completeza da definição oficial da linguagem Influências sobre o projeto da linguagem • Arquitetura do Computador • Linguagens são desenvolvidas com base na arquitetura mais usada, conhecida como arquitetura von Neumann • Metodologias de programação • Novas metodologias de desenvolvimento de software (exemplo, desenvolvimento orientado a objetos) levam a novos paradigmas de programação, e novas linguagens de programação • As Linguagens Imperativas são as dominantes, motivadas por computadores von Neumann • Dados e programas armazenados na memória • Memória separada da CPU • Instruções e dados trafegam da memória para a CPU • Variáveis, instruções de atribuição (piping) e forma iterativa de repetição são os recursos centrais dessas linguagens. Influência da arquitetura de computador A arquitetura von Neumann Influências sobre as metodologias de programação • Década de 1950 e início da década de 1960 • aplicações simples; preocupações com a eficiência da máquina • Final da década de 1960 • a eficiência das pessoas se tornou um ponto importante; • legibilidade, melhores estruturas de controle • Programação estruturada • Projeto top-down e refinamento passo-a-passo • Final da década de 1970 • orientado para processo • orientada a dados • Abstração de dados • Meados da década de 1980 • programação orientada a objetos • Abstração de dados + herança + polimorfismo Categorias de Linguagens Imperativa • Características centrais: variáveis, estruturas de atribuição e iteração • Exemplos: C, Pascal Funcional • Principal maneira de computar é através da aplicação de funções para os parâmetros fornecidos • Exemplos: LISP, Scheme Lógica • Baseado em regras (regras são especificadas sem ordem pré- determinada) • Exemplo: Prolog Categorias de Linguagens • Orientada a objetos • Abstração de dados, herança • Exemplos: Java, C++ • Marcação (Markup) • Não especificam computação, são usadas para definir o layout de informação em documentos Web • Exemplos: XHTML, XML Trade-offs no projeto da linguagem • Confiabilidade versus Custo de Execução • Critérios conflitantes • Exemplo: Java requer que todas as referências a vetores sejam checadas para garantir que os índices estejam dentro dos limites, mas isso aumenta o custo de execução • Readability versus writability • Critérios conflitantes • Exemplo: APL provê muitos operadores poderosos (e uma grande quantidade de novos símbolos), permitindo que computações complexas sejam escritas em programas compactos, porém isso dificulta a leitura • Writability (flexibility) versus reliability • - Critérios conflitantes • - Exemplo: ponteiros em C++ são poderosos e muito flexíveis Interface de computadores disposta em camadas Métodos de Implementação • Compilação • Programas são traduzidos para linguagem de máquina • Interpretação pura • Programas são interpretados por outro programa conhecido como interpretador • Sistemas de Implementação Híbridos • Um meio-termo entre compiladores e interpretadores puros Compilação Traduz programas em alto-nível (linguagem fonte) em código de máquina (linguagem de máquina). Tradução lenta, execução rápida. Fases: • Análise léxica • Converte caracteres de um programa fonte em unidades léxicas • Análise sintática • Transforma unidades léxicas em parse trees, as quais representam a estrutura sintática do programa • Análise semântica • Gera código intermediário • Geração de código • Código de máquina é gerado Gargalo de Von Neumann • Velocidade de conexão entre a memória do computador e seu processador determina a velocidade de um computador • As instruções geralmente são executadas mais rapidamente do que podem ser transferidas • Conhecido como o gargalo de von Neumann; esse é o fator limitante primário da velocidade dos computadores Interpretação Pura • Sem tradução • ■ Fácil implementação de programas (erros de execução podem ser facilmente e rapidamente mostrados) • ■ Execução lenta (de 10 a 100 vezes mais lenta do que programas compilados) • ■ Geralmente requer mais espaço • ■ Cada vez mais raro em linguagens de alto-nível • ■ Embora não seja uma linguagem simples, JavaScript é puramente interpretado Interpretação Pura Sistemas Híbridos • ■ Um meio-termo entre compilador e interpretador puro • ■ Um programa em uma linguagem de alto-nível é traduzido para uma linguagem intermediária que permite fácil interpretação • ■ Mais rápido do que interpretação pura • ■ Exemplos • - Programas em Perl são parcialmente compilados para detectar erros antes da interpretação • - Implementações iniciais de Java eram híbridas • • A forma intermediária, byte code, provinha portabilidade para qualquer máquina que tivesse o interpretador de byte code e um sistema de run-time (juntos, esses são chamados de Java Virtual Machine) Implementação Híbrida Pré-Processadores • Macros instruções são normalmente usadas para especificar que um código de outro arquivo deve ser incluído • ■ Um pré-processador processa um programa imediatamente antes do programa ser compilado, expandindo as macros • ■ Um exemplo: pré-processador C • - expande #include, #define, entre outras • Uma coleção de ferramentas usadas no desenvolvimento de software • UNIX - Um sistema operacional e um conjunto de ferramentas • Atualmente, normalmente usada através de uma GUI (exemplos: CDE, KDE ou GNOME) que rodam em cima do UNIX • Borland Jbuilder • Um ambiente integrado de desenvolvimento para Java • Microsoft Visual Studio.NET • Um grande e complexo ambiente • Usado para programar C#, Visual BASIC.NET, Jscript, J# ou C++ Ambientes de ProgramaçãoResumo • O estudo de linguagens de programação é válido por uma série de motivos: • - Aumenta nossa capacidade de usar diferentes construções para escrever programas • - Nos habilita a escolher linguagens de forma mais inteligente • - Nos ajuda a aprender novas linguagens mais facilmente • Os critérios mais importantes para a avaliação de linguagens: • - Readability, writability, reliability e cost • As principais influências no projeto de uma linguagem têm sido a arquitetura da máquina e as metodologias de projeto de software • Os principais métodos para implementar linguagens são: • - compilação, interpretação pura e implementação híbrida
Compartilhar