![Page 1: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/1.jpg)
Linguagens de Programação: Implementação e Técnicas de
Implementação
![Page 2: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/2.jpg)
Histórico da Programação
![Page 3: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/3.jpg)
Recuperando o contexto histórico da evolução das linguagens de programação, pode-se dizer que elas representam graus variados de abstração da arquitetura subjacente, chamada Von Neumann ( processador, memória e entradas e saídas).
Arquitetura de Von Neumann
![Page 4: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/4.jpg)
Os computadores disponíveis no final da década de 40 e início da década de 50, além dos problemas decorrentes da tecnologia da época, eram difíceis de serem programados pela ausência de software.
![Page 5: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/5.jpg)
Na falta de linguagens de programação de alto nível, ou mesmo linguagens de montagem, a programação era feita em código de máquina (por exemplo, uma instrução para "somar", deveria ser especificada por um código em vez do seu uso textual).
Essa maneira de programar tornava os programas ilegíveis, além de ser bastante complicado o seu processo de depuração. Do ponto de vista do programador, essa foi uma motivação importante para a criação das linguagens de montagem e seus montadores.
.
![Page 6: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/6.jpg)
Além disso, as aplicações numéricas da época requeriam o uso de certas facilidades que não estavam incluidas no hardware das máquinas de hoje, tais como, (números reais, acesso a elementos de um conjunto por seu índice, por exemplo) surgindo assim a necessidade da criação de linguagens de mais alto nível que incluíssem tais recursos.Sendo assim, foram desenvolvidas, ao longo da história da computação, diversas “linguagens de programação”, cada qual, a seu tempo, introduzindo facilidades e recursos que foram tornando a tarefa de programar mais fácil e menos susceptível a erros
![Page 7: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/7.jpg)
O que é uma Linguagem de Programação
![Page 8: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/8.jpg)
Uma Linguagem de Programação é uma ferramenta utilizada pelo profissional de computação para escrever programas, isto é, conjuntos de instruções a serem seguidas pelo computador para realizar determinador processo.
Linguagens de programação são instrumentos para facilitar a comunicação entre humanos e computadores a fim de solucionar problemas.
![Page 9: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/9.jpg)
Assim, linguagens de programação têm o objetivo de representar alguma informação por meio de uma seqüência de símbolos
![Page 10: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/10.jpg)
Qual necessidade fez surgi-la
![Page 11: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/11.jpg)
Na época do surgimento dos primeiros computadores, eles só podiam ser programados por meio de linguagens de programação muito simples.
Caracterizavam-se por um pequeno conjunto de instruções capazes de realizar ações muito elementares e de uso exclusivo de um computador especifico .
![Page 12: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/12.jpg)
À medida que a computação avança e as aplicações iam se tornando cada vez mais complexas, constata-se que o uso de linguagens tão simples e especificas reduzia significativamente a produtividade dos programadores e impedia a ampla disseminação do computador.
Para contornar este problema, surgiram as linguagens de programação de alto nível. Caracterizavam-se por não serem especificas a apenas a um computador e por terem um conjunto mais amplo e expressivo de tipos de instrução.
![Page 13: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/13.jpg)
Classificação das Linguagens
![Page 14: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/14.jpg)
Conforme uma maior ou menor proximidade com a linguagem de máquina, classificam-se as linguagens em:
• LINGUAGENS DE BAIXO NÍVEL
• LINGUAGENS DE ALTO NÍVEL
![Page 15: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/15.jpg)
Linguagens de Baixo Nível
![Page 16: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/16.jpg)
As linguagens de baixo nível
- Restritas a linguagem de máquina
- Forte relação entre as operações implementadas pela linguagem e as operações implementadas pelo hardware.
-Indicada para funções que precisam implementar instruções de máquina específicas que não são suportadas por linguagens de alto nível
- A grande eficiência e o reduzido tamanho dos programas
![Page 17: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/17.jpg)
Linguagens de Alto Nível
![Page 18: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/18.jpg)
• Problemas podem ser solucionados muito mais rapidamente e com muito mais facilidade.
• O programa em linguagem de alto nível é normalmente fácil de seguir e entender cada passo da execução.
As linguagens de alto nível
• Aproximam-se das linguagens utilizadas por humanos para expressar problemas e algoritmos
• Cada declaração numa linguagem de alto nível equivale a várias declarações numa linguagem de baixo nível.
![Page 19: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/19.jpg)
Especificação de Linguagens de Programação
![Page 20: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/20.jpg)
Ao se criar uma LP é necessário definir a forma de escrever programas validos nessa linguagem e como os programas válidos devem se comportar.
Essa definição deve ser feita por meio de documentos descritos que estabeleçam de maneira precisa como essas duas atividades devem ser realizadas .
Tais documentos formam a especificação da LP.
![Page 21: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/21.jpg)
A especificação de um LP requer a descrição de :
- Um Léxico
- Uma Sintaxe
- Uma Semântica
![Page 22: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/22.jpg)
Um Léxico
![Page 23: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/23.jpg)
O Léxico da LP corresponde ao vocabulário que pode ser utilizado para formar sentenças na linguagem ou seja símbolos ( tokens).
Por exemplo:
O seguinte comando da Linguagem Pascal
A := B;O Léxico da LP estabelece que os símbolos A, := , B e ; fazem parte do vocabulário da LP.
![Page 24: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/24.jpg)
Uma Sintaxe
![Page 25: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/25.jpg)
A Sintaxe da LP corresponde ao conjunto de regras que determinam quais sentenças podem ser formadas a partir da combinação dos itens léxicos.
O léxico e a sintaxe estão relacionados com a forma dos programas, isto é, como expressões, comandos, declarações e outros elementos da LP podem ser combinados para forma programas válidos.
soma:= x + sqrt(b+3.2);readln (x);x :integer
![Page 26: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/26.jpg)
Por exemplo :
O seguinte comando da Linguagem Pascal
A := B + 2;
A Sintaxe da LP indica que a sentença formada pelo identificador A, o símbolo := , o identificador B, o símbolo +, o numero 2 e o símbolo ; designa um comando válido de soma.
![Page 27: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/27.jpg)
Uma Semântica
![Page 28: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/28.jpg)
A Semântica da LP descreve como as construções sintaticamente corretas são interpretadas ou executadas.
A semântica esta relacionada com o significado dos programas, isto é, como eles se comportam quando são executados por computadores.
![Page 29: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/29.jpg)
Por exemplo :
O seguinte comando da Linguagem C
A = B;
A Semântica da LP indica que esse comando deve ser executado de modo a substituir o valor de A pelo valor atual de B e retornar o valor de A.
![Page 30: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/30.jpg)
Métodos de Implementação de Linguagens de Programação
![Page 31: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/31.jpg)
Todo e qualquer Programa escrito em uma LP necessita ser traduzido para a linguagem de maquina a fim de ser executado.
Para fazer isso, é necessário aplicar um programa que recebe como entrada o código-fonte do programa a ser traduzido e gere o código traduzido na linguagem de maquina.
Esse programa tradutor é quem determina como os programas na LP serão implementados, isto é, como o código–fonte traduzido se comportará efetivamente quando executado no computador.
![Page 32: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/32.jpg)
São descritos três métodos gerais de implementação de linguagens de programação , são eles:
• Compilação
• Interpretação Pura
• Hibrido
![Page 33: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/33.jpg)
Compilação
![Page 34: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/34.jpg)
Um Compilador traduz o programa fonte inteiro, produzindo um outro programa equivalente, em linguagem executável.
A vantagem é que o compilador precisa traduzir um comando apenas uma única vez, não importando quantas vezes ele será executado.
Na prática o compilador é usado para gerar o código definitivo (eficiente) de um programa.
Exemplos de linguagens compiladas : Pascal, C, C++,Java e outras
![Page 35: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/35.jpg)
![Page 36: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/36.jpg)
Interpretação Pura
![Page 37: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/37.jpg)
Um interpretador traduz o programa fonte um comando por vez e chama uma rotina para executar esse comando.
A vantagem é que o interpretador não traduz comandos que podem não ser executados e pode relatar erros na linguagem original em cada ponto de execução. Na prática as linguagens interpretadas servem para a realização de uma prototipagem rápida.
Exemplos de linguagens interpretadas: Prolog, linguagens de script
![Page 38: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/38.jpg)
![Page 39: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/39.jpg)
Hibrido
![Page 40: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/40.jpg)
Processo que combina tanto a execução eficiente quanto a portabilidade de programas pela aplicação combinada dos dois métodos anteriores.
A base para o método hibrido é a existência de um código intermediário, mais fácil de ser interpretado e, ao mesmo tempo, não especifico de uma de uma plataforma computacional.
O método hibrido é dividido , portanto, em duas etapas: compilação para um código intermediário e interpretação desse código.
![Page 41: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/41.jpg)
Exemplos de linguagens hibridas : JAVA e PERL
![Page 42: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/42.jpg)
![Page 43: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/43.jpg)
Gráfico Data x Linguagens
![Page 44: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/44.jpg)
O gráfico mostra o surgimento e a evolução das principais linguagens de programação. FORTRAN (1957): aplicações numéricas
LISP (1959): programação funcional
ALGOL (1960): programação estruturada
COBOL (1960): aplicações comerciais
BASIC (1964): ensino para leigos
PASCAL (1971): programação estruturada; simplicidade
C (1972): implementação de UNIX
PROLOG (1972): programação lógica
SMALLTALK (1972): programação orientada a objetos
ADA (1983): programação concorrente
C++ (1985): disseminação de programação O. objetos
JAVA (1995): mais simples e confiável que C++; Internet
Ler enquanto mostra figura da próxima pagina
![Page 45: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/45.jpg)
![Page 46: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/46.jpg)
Paradigmas
![Page 47: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/47.jpg)
Paradigmas:Modelo, padrão ou estilo de programação suportado por linguagens que agrupam certas características comuns.
Cada linguagem apresenta uma maneira particular de modelar o que é um programa.
Cada paradigma agrupa linguagens que representam programas de forma semelhante.
A escolha de um determinado paradigma influencia a forma com que uma aplicação real é modelada do ponto de vista computacional
![Page 48: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/48.jpg)
Existem diversas classificações de Paradigmas de LPs , sendo a mais comum a que divide os paradigmas de LPs nos paradigmas : Imperativo e Declarativo
Visual Estruturado Orientado a Objetos Orientado a aspectos Concorrente
Funcional Lógico
ImperativoLinguagens
DeclarativoLinguagens
Mostrar figura próximo slide enquanto le
![Page 49: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/49.jpg)
![Page 50: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/50.jpg)
Paradigma Imperativo
![Page 51: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/51.jpg)
O Paradigma Imperativo engloba os paradigmas fundamentados na idéia de computação como um processo que realiza mudanças de estados. Nesse sentido, um estado representa uma configuração qualquer da memória do computador. Os conceitos fundamentais são de variável, valor e atribuição,.
![Page 52: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/52.jpg)
Paradigma Visual
![Page 53: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/53.jpg)
As linguagens de programação visual partem do princípio de que gráficos são mais fáceis de serem entendidos do que textos. Sendo assim, a especificação de um programa por meio de diagramas e outros recursos gráficos tende a tornar a própria programação mais fácil, permitindo mesmo que usuários sem muitas habilidades em programação gerem programas.As LPV são divididas em dois grupos:
- Linguagens Visuais Puras
- Linguagens Visuais Hibridas
![Page 54: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/54.jpg)
As linguagens de programação visual puras são aquelas em que o programa é determinado exclusivamente por meio dos gráficos e diagramas que o especificam.
Dentre elas podemos citar:
Khoros - computação gráfica.
Simulink - simulação de sistemas dinâmicos.
![Page 55: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/55.jpg)
Linguagens Visuais Hibridas
As linguagens que incluem-se nesta categoria são normalmente linguagens de programação convencional, acrescidas das ferramentas visuais que lhes dão o “status” de visuais.
Exemplos incluem o :
Delphi, Visual Basic, Visual C++.
![Page 56: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/56.jpg)
• Boas para definir – interconexão entre componente – configuração de linhas de produtos – mas não para restrições associadas
• Razoáveis para definir – estados de um sistema– mas não para fluxo de controle em geral
VANTAGENS DO MODELO VISUAL
![Page 57: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/57.jpg)
Este tipo de representação normalmente limita bastante a flexibilidade dos programas que podem ser desenvolvidos.
DESVANTAGEN DO MODELO VISUAL
![Page 58: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/58.jpg)
Paradigma Estruturado
![Page 59: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/59.jpg)
A Programação Estruturada pode ser entendida como uma forma de programar que visa facilitar a escrita, entendimento, validação e manutenção de programas.
Para Dijkstra, “a arte de programar consiste na arte de organizar e dominar a complexidade”.
A Programação Estruturada procurar reduzir o nível de complexidade através de três níveis:
•desenvolvimento do programa em diferentes fases por refinamento sucessivo (desenvolvimento top-down);
•decomposição do programa total em módulos funcionais, organizados de preferência num sistema hierárquico;
•uso de um número limitado de estruturas básicas de fluxo de controle dentro de cada módulo.
![Page 60: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/60.jpg)
Modelo Computacional do Paradigma Estruturado
Entrada Programa Saída
Estado
![Page 61: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/61.jpg)
• Eficiência (embute modelo de Von Neumann)
• Modelagem “natural” de aplicações do mundo real
• Paradigma dominante e bem estabelecido
VANTAGENS DO MODELO ESTRUTURADO
![Page 62: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/62.jpg)
DESVANTAGENS DO MODELO ESTRUTURADO
- Relacionamento indireto entre E/S resulta em:
– difícil legibilidade
– erros introduzidos durante manutenção
– descrições demasiadamente operacionais focalizam o como e não o que
![Page 63: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/63.jpg)
Algumas linguagens de programação do paradigma estruturado :
Fortran – 1957
Algol – 1960
Cobol – 1960
Basic – 1964
Pascal – 1971
C – 1971
C++ – 1985
![Page 64: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/64.jpg)
Paradigma Orientado a Objetos
![Page 65: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/65.jpg)
• Não é um paradigma no sentido estrito: é uma subclassificação do imperativo
• A diferença é mais de metodologia quanto à concepção e modelagem do sistema
• A grosso modo, uma aplicação é estruturada em módulos (classes) que agrupam um estado e operações (métodos) sobre este
• Classes podem ser estendidas e/ou usadas como tipos (cujos elementos são objetos)
Paradigma Orientado a Objetos
![Page 66: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/66.jpg)
No "meio" orientado a objetos, as unidades de programa são objetos.
Por exemplo, desde uma constante numérica até um sistema para manipular arquivos, são todos objetos.
Mensagens possibilitam a comunicação entre os objetos e é através delas que uma operação de um objeto é requisitada.
![Page 67: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/67.jpg)
Vantagens do Paradigma Orientado a objetos
Todas as do estilo imperativo
Classes estimulam projeto centrado em dados: modularidade, reusabilidade e extensibilidade
Aceitação comercial crescente
![Page 68: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/68.jpg)
Problemas do Paradigma OO
Semelhantes aos do paradigma imperativo, mas amenizadas pelas facilidades de estruturação
![Page 69: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/69.jpg)
Modelo Computacional do Paradigma Orientado a Objetos
Entrada Programa Saída
Estado
......
......
Estado
Entrada Programa
Saída
Estado
Entrada Programa
Saída
Estado
Entrada Programa
Saída
Estado
Entrada Programa
Saída
![Page 70: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/70.jpg)
Algumas linguagens de programação do paradigma OO:
Smaltalk – 1957
C++ – 1985
Java – 1995
![Page 71: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/71.jpg)
Paradigma Orientado a Aspectos
![Page 72: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/72.jpg)
A Programação Orientada a Aspectos (POA) baseia-se na idéia de que sistemas computacionais podem ser mais bem desenvolvidos pela separação de funçõesespecíficas, afetando diferentes partes do sistema, denominadas preocupações ortogonais (crosscuting concerns).
Exemplos de crosscuting concerns são persistência, distribuição, controle de concorrência e tratamento de exceções.
![Page 73: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/73.jpg)
Com essa separação e o aumento da modularidade proposta pela POA, o sistemaimplementado fica mais legível, o que contribui para o seu projeto e a sua manutenção.
![Page 74: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/74.jpg)
Modelo Computacional do Paradigma Orientado a Aspectos
Entrada Programa
Saída
Estado
......
......
Estado
Entrada Programa
Saída
Estado
Entrada Programa
Saída
Estado
Entrada Programa
Saída
Estado
Entrada Programa
Saída
AspectoAspecto
AspectoAspecto
![Page 75: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/75.jpg)
Vantagens do Paradigma Orientado a Aspectos
Todas as do paradigma OO Útil para modularizar conceitos que a Orientação a Objetos não consegue tratar, preocupações ortogonais (crosscutting concerns) . Em especial, aqueles ligados a requisitos não funcionais Aumenta a extensibilidade e o reuso
![Page 76: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/76.jpg)
Problemas do Paradigma Orientado a Aspectos
Semelhantes aos do OO Ainda é preciso diminuir a relação entre
classes e aspectos Problemas de conflito entre aspectos que
afetam a mesma classe “Weaving” estático
![Page 77: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/77.jpg)
Linguagem de programação do paradigma OA:
A linguagem AspectJ é um superconjunto da linguagem Java para ser usado na Programação OA.
Em uma aplicação orientada a aspectos em AspectJ, os componentes são implementados usando a sintaxe padrão de Java, e os aspectos são implementados usando uma sintaxe específica de AspectJ.
![Page 78: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/78.jpg)
Paradigma Concorrente
![Page 79: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/79.jpg)
A programação concorrente ocorre quando vários processos executam simultaneamente e concorrem por recursos. Eles podem utilizar uma única unidade de processamento ou várias unidades em paralelo. Neste último caso as unidades de processamento podem estar localizadas em um mesmo computador ou distribuídas entre vários. Sistemas concorrentes também podem compartilhar dados ou dispositivos periféricos.
![Page 80: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/80.jpg)
• Principais focos da programação concorrente:
- interação e a comunicação correta entre as diferentes tarefas
- coordenação do acesso concorrente aos recurso computacionais
Vantagens do Paradigma Concorrente
![Page 81: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/81.jpg)
Desvantagens do Paradigma Concorrente
– Não-determinismo
– Dependência de velocidade de execução
– Deadlock
– Starvation (escalonamento desonesto )
![Page 82: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/82.jpg)
Algumas linguagens de programação do paradigma Concorrente:
ADA - 1983
Java - 1995
![Page 83: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/83.jpg)
Paradigma Declarativo
![Page 84: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/84.jpg)
Paradigma Declarativo, em contraste com o paradigma Imperativo, no qual os programas são especificações de como o computador deve realizar uma tarefa, no paradigma declarativo os programas são especificações sobre o que é essa tarefa.
No paradigma declarativo, o programador não precisa se preocupar sobre como o computador é implementado, nem sobre a maneira pela qual ele é melhor utilizado para realizar uma tarefa.
![Page 85: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/85.jpg)
A preocupação do programador é descrever de forma abstrata a tarefa a ser resolvida.
Tipicamente, programas em linguagens declarativas são especificações de relações e funções.
Neste paradigma temos as seguintes linguagens :
- Lógico
- Funcional
![Page 86: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/86.jpg)
Paradigma Lógico
![Page 87: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/87.jpg)
Um programa em lógica é a resolução de um determinado problema através da utilização de sentenças da lógica. Em Pascal ou em C, por exemplo, temos uma seqüência de instruções executadas uma após a outra, que ao final converge em um resultado. Um programa lógico é equivalente à descrição do problema expressar de maneira formal, similar à maneira que o ser humano raciocinaria sobre ele. Linguagens Lógicas: PROLOG
![Page 88: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/88.jpg)
Visão Crítica do Paradigma Lógico
Vantagens Em princípio, todas do paradigma funcional Permite concepção da aplicação em um alto
nível de abstração (através de associações entre E/S)
Problemas Em princípio, todos do paradigma funcional Linguagens usualmente não possuem tipos,
nem são de alta ordem
![Page 89: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/89.jpg)
Paradigma Funcional
![Page 90: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/90.jpg)
Linguagens funcionais operam apenas sobre funções, as quais recebem listas de valores e retornam um valor. O objetivo da programação funcional é definir uma função que retorne um valor como resposta do problema.Um programa funcional é uma chamada de uma função que normalmente chama outras funções para gerar um valor de retorno.
![Page 91: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/91.jpg)
Visão Crítica do Paradigma Funcional
Vantagens Manipulação de programas mais simples: - Prova de propriedades - Transformação (exemplo: otimização) - Concorrência explorada de forma natural Problemas “O mundo não é funcional!” Implementações ineficientes Mecanismos primitivos de E/S e formatação
![Page 92: Conceitos Importantes sobre Linguagens de Progemação](https://reader035.vdocuments.pub/reader035/viewer/2022062312/5571f9a04979599169900846/html5/thumbnails/92.jpg)
As linguagens funcionais mais conhecidas são :
LISP, Prolog, Scheme , ASpecT, Erlang, Gofer, Haskell, Hope, Hugs, J, Miranda, ML, OPAL e outras...