Propriedades desejveis das LPs Legibilidade Redigibilidade Confiabilidade Eficincia Ortogonalidade Reusabilidade Modificabilidade Portabilidade
Domnios de aplicao
Aplicaes comerciais Aplicaes cientficas
Computadores foram projetados inicialmente para aplicaes cientficas (1940) Caractersticas da aplicao:
Estruturas de dados simples Exigem grande nmero de clculos com ponto flutuante
Estruturas de dados mais comuns: vetores e matrizes Estruturas de controle mais comuns: iterao e seleo Caracterstica desejvel: eficincia Exemplos: FORTRAN, ALGOL60, PASCAL
Linguagens e computadores especiais foram desenvolvidos com esse propsito Caractersticas: recursos para produzir relatrios elaborados, maneiras precisas de descrever e armazenar nmeros decimais e caracteres e habilidade para especificar operaes aritmticas decimais Com o surgimento dos micros, aplicaes de negcios passaram a ser feitas com sistemas de planilhas e de banco de dados Exemplo: COBOL (1960) (no so estudadas no curso)
9 10
11
12
14
Metodologias de Programao movimento de programao estruturada: final dos anos 60, incio dos 70
Motivo: custo maior da computao mudou de hardware para software.
Iterao rpida, porque as instrues esto em seqncia. Desencoraja o uso de recurso, apesar da recurso ser muitas vezes mais natural. Em LISP e PROLOG a essncia da programao diferente, no necessita o uso de variveis e atribuies. So menos eficientes.
15
Mudana de enfoque:
Programao dirigida por processos Programao dirigida por dados
A evoluo da programao dirigida por dados originou no incio dos anos 80 a metodologia orientada a objetos, que inclui:
Abstrao de dados (encapsulamento) Herana Vinculao dinmica de tipos Exemplos: Smalltalk, Ada, Java, C++, CLOS, Prolog ++
18
O sistema operacional e as implementaes de linguagens so dispostos em camadas sobre a interface de linguagem de mquina de um computador.
Ncleo da mquina
Compilador ADA
19
20
Compilao
Programas so traduzidos para linguagem de mquina e so executados diretamente no computador Envolve dois processos distintos:
Traduo (compilao) Execuo
A execuo iniciada depois que a traduo concluda A execuo no tem acesso ao programa fonte Vantagem: execuo rpida
Programa fonte
21
traduo
Programa objeto
22
Interpretao
O interpretador executa diretamente as instrues do programa fonte, sem traduzir Programa fonte para linguagem de mquina Simula, por software, uma mquina virtual Dados de entrada onde o ciclo de execuo entende os comandos da linguagem de alto nvel Desvantagem: execuo de 10 a 100 vezes Interpretador mais lenta, devido ao passo de decodificao da instruo de alto nvel, que mais complexa Tem acesso ao programa fonte, para Resultados depurao ou mesmo para alterar o cdigo sendo executado
23
Implementao Hbrida
Mescla compilao com interpretao Programas fonte so traduzidos para uma linguagem intermediria que interpretada Tem maior portabilidade que uma linguagem compilada So mais rpidas que uma linguagem interpretada - instrues intermedirias so projetadas para serem interpretadas facilmente
24
Linguagens imperativas Fundamentadas na idia de computao como um processo que realiza mudanas de estados Foco da programao: especificar COMO um processamento deve ser feito no computador Forte influncia da arquitetura de mquina Variveis so vistas como clulas de memria Conceitos fundamentais: varivel, valor e atribuio
Resultados
25
26
27
28
Propriedades desejveis das LPs Legibilidade Redigibilidade Confiabilidade Eficincia Ortogonalidade Reusabilidade Modificabilidade Portabilidade
Paradigmas de Linguagens de Programao (descrio geral) Lgico Funcional Imperativo Orientado a Objetos Concorrente Linguagens de Marcao
29
30
Paradigma Lgico
Processamento Simblico (usa smbolos e conceitos ao invs de nmeros e expresses) Declarativo Usa clusulas da lgica de Primeira Ordem Estrutura principal: listas So baseadas em regras A ordem de especificao das regras no fundamental A ordem de execuo determinada na prpria execuo Originalmente interpretado rea de aplicao: IA
Paradigma Funcional
Baseada em funes matemticas Combina funes elementares para formar funes mais complexas Estrutura principal: listas Voltada para programao simblica Originalmente interpretado rea de aplicao: IA
31
32
Paradigma Imperativo
Tambm chamado de Estruturado ou procedural Grande influncia da arquitetura de mquina Componentes principais:
Variveis como posies de memria Comandos de atribuio Repetio por iterao e seleo
Altamente modular e reusvel Programao dirigida por dados rea de aplicao: geral
33 34
Paradigma Concorrente
Facilita a construo de programas para execuo concorrente (simultnea) de vrias tarefas computacionais interativas As tarefas podem ser implementadas como programas separados ou como um conjunto de processos criados por um nico programa. Essas tarefas tambm podem ser executadas por um nico processador, vrios processadores em um nico equipamento ou processadores distribudos por uma rede. Principais focos da programao concorrente:
interao e a comunicao correta entre as diferentes tarefas coordenao do acesso concorrente aos recurso computacionais
35
Linguagens de marcao
Normalmente no so consideradas um paradigma de programao um conjunto de cdigos aplicados a um texto ou a dados, com o fim de adicionar informaes particulares sobre esse texto ou dado, ou sobre trechos especficos. HTML: linguagem de marcao amplamente usada para texto XHTML evoluo da HTML, mais eficiente para separao entre a estrutura e o contedo de uma pgina de forma mais organizada e eficiente. XML: linguagem de marcao de dados. Envolve a codificao simples de seqncias de dados em um arquivo de computador no formato texto-puro, ou seja, capaz de ser lido tanto por pessoas quanto por mquinas.
36
Efeito Colateral Efeito causado por uma expresso, comando ou procedimento que permanece aps a execuo do mesmo e no o objetivo principal dessa expresso, comando ou procedimento Alguns exemplos:
Alterao de variveis globais no corpo de uma funo Expresso x++ do C++ Predicado corte (!) do prolog
38
REDIGIBILIDADE Facilidade de escrever o programa, permitindo ao programador se concentrar nos algoritmos centrais do programa sem se preocupar com aspectos no relevantes; Principal diferena entre linguagens de mquina e linguagens de alto nvel; Caractersticas que favorecem a redigibilidade:
Simplicidade suporte para abstrao
Abstrao de processo (ex: subprograma) Abstrao de dados (ex: dados estruturados, classes)
Expressividade
Uma grande quantidade de computao pode ser realizada em um programa muito pequeno; Construes mais compactas;
39
40
Permitir aes perigosas: no verificar intervalos de ndices de arrays, aritmtica de ponteiros, no verificar compatibilidade de tipos; Aliasing dois ou mais mtodos ou nomes que fazem referncia mesma varivel Recursos pobres para escrita do programa
Tratamento de excees
Capacidade do programa interceptar erros durante a execuo tomar medidas corretivas e prosseguir
41
42
ORTOGONALIDADE
EFICINCIA Est relacionada com o tempo de execuo de um programa Algumas aplicaes exigem que a execuo seja rpida Em geral, fatores que melhoram a confiabilidade, abstrao e legibilidade dos programas, diminuem a eficincia
43
Capacidade da LP permitir ao programador combinar seus conceitos bsicos sem que se produzam efeitos anmalos nessa combinao Quanto menor o nmero de excees, maior a ortogonalidade Um recurso ortogonal independente do contexto em que aparece no programa Caractersticas que favorecem a ortogonalidade:
Nmero pequeno de construes primitivas que podem ser combinadas de forma regular
44
MODIFICABILIDADE Facilidade de alterar o programa sem implicaes em outras partes do programa Caractersticas que favorecem a modificabilidade:
REUSABILIDADE Propriedade de usar o mesmo cdigo para vrias aplicaes Ligada a recursos de abstrao da linguagem: subprogramas com parmetros, bibliotecas de subprogramas, classes. Constantes simblicas Separao entre interface e implementao na construo de subprogramas Tipos abstratos de dados Estrutura homognea das unidades bsicas da linguagem:
Regras do Prolog Funes do LISP
45 46
PORTABILIDADE Propriedade dos programas escritos em uma LP se comportarem da mesma maneira independente do compilador, sistema operacional ou hardware utilizado Caractersticas que favorecem a portabilidade:
Implementao hbrida Padronizao da especificao da linguagem desde o seu projeto (pode prejudicar a eficincia)
47
ALGOL 60
Tentativa de definir uma linguagem universal introduziu o conceito de estrutura em bloco, passagem de parmetro por valor e por nome, procedimentos recursivos, arrays stack dinmicos. Foi a primeira linguagem descrita formalmente, usando a BNF, que tinha sido proposta recentemente. linguagem muito sofisticada e poderosa, mas no conseguiu um uso generalizado
49
50
BASIC
Prioriza rapidez de programao em vez de eficincia de execuo Muito utilizada mas pouco aceita nos meios cientficos, por apresentar estutruras ruins nos programas fcil de ser aprendida por principiantes e pode ser instalada em computadores com pouca memria Verses contemporneas muito utilizadas: Quick Basic e Visual Basic
APL e SNOBOL
No so baseadas em outras linguagens So linguagens dinmicas: tipificao dinmica e alocao de armazenagem dinmica APL permite que arrays sejam manipulados como variveis escalares SNOBOL visa o processamento de texto
PL/I
Representa a primeira tentativa em grande escala de projetar uma linguagem que poderia ser usada para um amplo espectro de reas de aplicao linguagem muito complexa que inclui recursos de vrias outras apesar de ter sido a primeira a incluir diversas facilidades entre essas os ponteiros, manipulao de excees e a concorrncia hoje essas construes so consideradas mal projetadas
51
SIMULA 67
Marcou a origem da abstrao de dados Derivada do ALGOL 60, projetada para aplicaes de simulao Oferece suporte a corrotinas e estrutura de classes
52
ALGOL 68
incluso dos tipos de dados definidos pelo usurio tinha uma linguagem elegante e concisa para descrever a sintaxe, mas desconhecida. Influenciou todas as linguagens imperativas desenvolvidas depois
Pascal
projetada especificamente para ensinar programao caracteriza-se por combinar simplicidade e expressividade
C
originalmente projetada para programao de sistemas mas adequada a uma ampla variedade de aplicaes projetada e implementada em 1972 tem muitas instrues de controle e facilidades de estruturao de dados tem um rico conjunto de operadores que permitem uma expressividade alta no possui verificao de tipo portanto uma linguagem muito flexvel e ao mesmo tempo insegura
54
Modula-2
Baseada no Pascal e os principais recursos eram os mdulos, que fornecem suporte para tipos abstratos de dados
Modula-3
Adiciona ao Modula 2 classes e objetos para suporte programao orientada a objetos, para manipulao de excees, para coleta de lixo e para suporte concorrncia
53
Oberon
Adicionou o recurso de extenso de tipos a Modula 2 para permitir programao orientada a objetos. Retirou muitos recursos da Modula 2 tornado-se uma linguagem simples e pequena.
Prolog
linguagem de programao predicados de 1a. ordem Linguagem declarativa A programao no baseada em procedimentos, mas sim em declaraes lgicas que estabelecem relaes entre objeto Criada para aplicaes em Inteligncia Artificial baseada na lgica de
Delphi
derivado do Pascal. hbrido, semelhante ao C++, a medida que foi criado pela adio de suporte orientado a objeto a uma linguagem imperativa existente
55
56
ADA
resultado do mais extensivo e dispendioso esforo de projeto de uma linguagem j realizado oferece recursos para encapsular objetos de dados, facilidades para manipulao de excees, unidades de programa genricas e execuo concorrente de unidades, entre outros
SmallTalk
As unidades do programa so objetos, estruturas que encapsulam dados locais e um conjunto de operaes chamados de mtodos tudo so objetos, desde constantes inteiras a grandes sistemas de software complexos tambm um ambiente desenvolvimento de software completo de
ADA 95
Derivou de uma reviso da ADA, baseada nos requisitos: capacidades de interface, suporte para programao orientada a objetos, bibliotecas mais flexveis e melhores mecanismos de controle para dados compartilhados
57
58
C++
constri facilidades de linguagem sobre o C para suportar grande parte daquilo em que o Smalltalk foi pioneiro possui o mecanismo classe/objeto, permite herana simples e herana mltipla, sobrecarga de operadores e funes e vinculao dinmica Linguagem muito popular, herdou as inseguranas do C
Eiffel
Hbrida, com recursos imperativos e orientados a objeto
JAVA
Baseou-se no C++ mas foi especificamente projetado para ser menor, mais simples e mais confivel. No tem ponteiros, mas sim tipo de referncia no possvel escrever subprogramas independentes, possui somente herana simples e interfaces , e coleta de lixo implcita Muito utilizada para programao para web Oferece o mesmo poder que o C++, e mais confivel.
59
60