24
Paradigmas de Linguagens de Paradigmas de Linguagens de Programação Programação Claudio Cesar de Sá [email protected] Universidade Estadual de Santa Catarina Departamento de Ciência da Computação

Paradigmas de Linguagens de Programação Claudio Cesar de Sá [email protected] Universidade Estadual de Santa Catarina Departamento de Ciência

Embed Size (px)

Citation preview

Page 1: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Paradigmas de Linguagens de Paradigmas de Linguagens de ProgramaçãoProgramação

Claudio Cesar de Sá

[email protected]

Universidade Estadual de Santa CatarinaDepartamento de Ciência da Computação

Page 2: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Identificar necessidades de projetosFerramentas apropriadasVisualizar alternativasAmpliar uma visão de possibilidades...

Porquê estudar linguagens de programação?

Page 3: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Devido a sua existência temporal, uma época. Geração na história evolutiva.Devido um paradigma (conjunto de conceitos que referenciam um sistema), tanto abstrato/lógico como em hardware Devido ao seu propósito, destino de usoDevido o escopo de variáveis e funções, etcetc.....

Como definir linguagens de programação?

Page 4: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Categoria de Linguagens

IMPERATIVAS: C, Basic, Assembler, Fortran, Cobol,FUNCIONAIS: Lisp, Miranda, Scheme, Comoom Lisp, Haskell, ML,...LÓGICAS: Prolog e derivadosORIENTADAS A OBETOS: Smalltalk, ...HÍBRIDAS: C++ Builder, Java, Delphi, Kylix, ...ESPECÍFICAS: GPSS, Simula, Auto-Lisp, ...BASEADAS EM REGRAS de PRODUÇÃO: CLIPS, Jess, ... Shell de SE’s...

SEBESTA ,Robert W. Concepts of Programming Languages. 4 ed. Addison Wesley, 1999.

Page 5: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Geração das Linguagens

1a geração0s e 1s

2a geraçãoASSEMBLY: ADD x,y ...

3a geraçãoIMPERATIVAS((não)estruturadas,modulares)

4a geração4GL (SQL, CSP)OO’s. híbridas, etc.

5a geraçãoLÓGICAS e FUNCIONAIS

6 a geração

Page 6: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

As primeiras linguagens de programação (LPs de 1a geração) eram aquelas feitas em codificação binária, diretamente no hardware:

Utilização de linguagem de máquina (0’s e 1’s).Execução direta pela máquina, sem tradução. Linguagem escrita do acordo com as características especiais de um determinado processador.Linguagem totalmente dependente do hardware.

Page 7: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

As linguagens de programação de segunda geração (LPs de 2a geração) foram chamadas de LP´s de baixo nível:

Ainda dependentes do hardware.

Utilização de abreviações simples para instruções de programa, assim como números na familiar base-10 (decimal).

As abreviações são chamadas mnemônicos.Por exemplo, o mnemônico COMPARE A, B diz para o processador comparar os dados armazenados nas posições A e B da memória.

Código-fonte traduzido em linguagem de máquina por um montador.

Exemplo: Linguagens de montagem (ASSEMBLY).

Page 8: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

As linguagens da terceira geração (LPs de 3a geração) são chamadas de LP´s modernas ou LP´s de alto nível:

1as LP´s de 3a geraçãoNão-estruturadas

2as LP´s de 3a geraçãoEstruturadas ou procedimentais

3as LPs de 3a geraçãoModulares

Em paralelo...Funcionais e lógicas

Page 9: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

1as LP´s de 3a geração (não-estruturadas)Código-fonte traduzido (compilado ou interpretado).

programador pode escrever uma instrução utilizando linguagem pseudo-natural: palavras em inglês, como PRINT ou DISPLAY.

Código-fonte traduzido para um número muito maior de linhas em código assembly ou código de máquina.

Todo código escrito em um único programa.

Década de 50.

Exemplo: Linguagens não-estruturadas (FORTRAN, COBOL, BASIC).

Page 10: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Programa

Programa Principal

Dados

Paradigmas de ProgramaçãoParadigmas de Programação

Programação Não-Estruturada

Page 11: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

1as LP´s de 3a geração (não-estruturadas)

“SPAGHETTI CODE” e a grande CRISE DO SOFTWARE

instruções GOTOEm um programa longo, o resultado do uso de muitas instruções GOTO era o spaghetti code, isto é, programas que eram difíceis de ler e, por conseqüência, tinham maior chance de apresentar erros.

A tentativa de criar programas mais complexos e maiores conduziu a crise do software, na década de 1960.

Page 12: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

1as LP´s de 3a geração (não-estruturadas)

CRISE DO SOFTWARE

Os programas:não ficavam prontos na hora;excediam seus orçamentos;continham erros demais e;não satisfaziam aos clientes.

Um estudo de meados da década de 60 revelou que as programadores COBOL eram capazes de produzir, em média, somente 10 linhas de código livres de erro dia de trabalho.

Page 13: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

1as LP´s de 3a geração (não-estruturadas)

CRISE DO SOFTWARE

1a SOLUÇÃO

PROGRAMAÇÃO ESTRUTURADA

estruturas de controleprocedimentos

Page 14: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

2as LP´s de 3a geração (estruturadas ou procedimentais)trouxeram um novo tipo de abstração: os procedimentos (procedures).

foram inventados vários mecanismos de passagem de parâmetros.

foi estabelecido as fundamentações da programação estruturada.

Utilização de elementos lógicos denominados estruturas de controle:IF-THEN-ELSE, FOR, WHILE, REPEAT, etc.

surgiram os métodos de projeto estruturado.

Final da década de 50.

Exemplo: Linguagens estruturadas (ALGOL, ADA, SIMULA, PASCAL, C).

Page 15: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Programa

Programa Principal

Dados

Proc 1 Proc 2 Proc 3

Paradigmas de ProgramaçãoParadigmas de Programação

Programação Estruturada ou Procedimental

Page 16: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

3as LP´s de 3a geração (modulares)

Surgiu a compilação em módulos em separado.uma forma de manter dados e subprogramas juntos.

linguagens com poucas regras que requeriam consistência semântica entre as interfaces dos módulos.

Princípios da programação modular:ocultamento de informações (encapsulamento).reaproveitamento de código (reusabilidade).

Década de 70.

Exemplo: Linguagens modulares (MODULA-2).

Page 17: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Programação Modular

Programa

Programa Principal

Dados

módulo 1

Dados + Dados1

Proc 1

módulo 2

Dados + Dados2

Proc 2 Proc 3

Paradigmas de ProgramaçãoParadigmas de Programação

Programação Modular

Page 18: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

3as LP´s de 3a geração (modulares)

PROBLEMASlinguagens não possuíam suporte adequado para abstrações de dados e tipagem forte e com isso os erros eram detectados somente durante a fase de execução do programa.

SOLUÇÃO

PROGRAMAÇÃO ORIENTADA A OBJETOS

Page 19: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

Outras LP´s de 3a geração (funcionais)

Pesquisas em IA (Inteligência Artificial) necessitava de LPs:processasse dados em listas (ao invés de arrays).Computação simbólica (ao invés de numérica)

Características:sintaxe baseada no lambda-calculus.controle via recursão e expressões condicionais.

Década de 60.

Exemplo: Linguagens funcionais (LISP-LISt Processing Language, ML-Meta

Language, Miranda, Haskell).

Page 20: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

Outras LP´s de 3a geração (lógicas)

programação em lógica.conversacional (interpretada).Programa consiste em:

declaração: fatos sobre os objetos;definição: regras e relacionamentos;pergunta: objeto e relacionamento.

Popularidade: IA, Computação Simbólica e BD Relacional.

Década de 70.

Exemplo: Linguagens lógicas (PROLOG e assemelhados).

Page 21: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

Vários tipos de linguagens são encontradas na literatura como sendo de quarta geração (LPs de 4a geração - 4GLs):

geradores de relatório (linguagens para imprimir relatórios de banco de dados) e;

linguagens de consulta (linguagens para obter as informações de bancos de dados).

Não são LP´s de propósito geral.

Exemplo:Linguagens de 4GLs (CSP, SQL).

Page 22: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Evolução das Linguagens

Linguagens Orientadas a Objetos ou Baseadas em Objetosdiminuição do gap entre mundo real e solução computacional.programa = dados + procedimentos sobre os dadosPrincipais características:

classes&objetos, TADs, encapsulamento, herança e polimorfismo.programação se dá pela comunicação entre objetos.Pouco ou nenhum dado global.

Exemplo:Linguagens OO (SMALTALK, SIMULA-67, EIFFEL, Modula-3,).Linguagens BO (C++, Object Pascal, JAVA).

Page 23: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Objeto 1

Dados

Objeto 4

Dados

Objeto 3

Dados

Objeto 2

Dados

Paradigmas de ProgramaçãoParadigmas de Programação

Programação Orientada por Objetos

Page 24: Paradigmas de Linguagens de Programação Claudio Cesar de Sá claudio@udesc.joinville.udesc.br Universidade Estadual de Santa Catarina Departamento de Ciência

Paradigmas de Programação

NÃO-ESTRUTURADO

ESTRUTURADO

MODULAR

ORIENTADO A OBJETOS

FUNCIONAL

LÓGICO