Você está na página 1de 84

Histrico de Programao Paradigmas Caractersticas das linguagens Demonstrao Simplificada de uma implementao OA

Histrico da Programao

Recuperando o contexto histrico da evoluo das linguagens de programao, pode-se dizer que elas representam graus variados de abstrao da arquitetura subjacente, chamada Von Neumann ( processador, memria e entradas e sadas). Mostrar figura prximo slide Os computadores disponveis no final da dcada de 40 e incio da dcada de 50, alm dos problemas decorrentes da tecnologia da poca, eram difceis de serem programados pela ausncia de software.

Arquitetura de Von Neumann

Na falta de linguagens de programao de alto nvel, ou mesmo linguagens de montagem, a programao era feita em cdigo de mquina (por exemplo, uma instruo para "somar", deveria ser especificada por um cdigo em vez do seu uso textual). Essa maneira de programar tornava os programas ilegveis, alm de ser bastante complicado o seu processo de depurao. Do ponto de vista do programador, essa foi uma motivao importante para a criao das linguagens de montagem e seus montadores.
.

Alm disso, as aplicaes numricas da poca requeriam o uso de certas facilidades que no estavam incluidas no hardware das mquinas, tais como, (nmeros reais, acesso a elementos de um conjunto por seu ndice, por exemplo) surgindo assim a necessidade da criao de linguagens de mais alto nvel que inclussem tais recursos. Sendo assim, foram desenvolvidas, ao longo da histria da computao, diversas linguagens de programao, cada qual, a seu tempo, introduzindo facilidades e recursos que foram tornando a tarefa de programar mais fcil e menos susceptvel a erros

O que uma Linguagem de Programao

Uma Linguagem de Programao uma ferramenta utilizada pelo profissional de computao para escrever programas, isto , conjuntos de instrues a serem seguidas pelo computador para realizar determinador processo. Linguagens de programao so instrumentos para facilitar a comunicao entre humanos e computadores a fim de solucionar problemas.

Assim, linguagens de programao tm o objetivo de representar alguma informao por meio de uma seqncia de smbolos

Qual necessidade fez surgi-la

Na poca do surgimento dos primeiros computadores, eles s podiam ser programados por meio de linguagens de programao muito simples. Caracterizavam-se por um pequeno conjunto de instrues capazes de realizar aes muito elementares e de uso exclusivo de um computador especifico .

medida que a computao avana e as aplicaes iam se tornando cada vez mais complexas, constata-se que o uso de linguagens to simples e especificas reduzia significativamente a produtividade dos programadores e impedia a ampla disseminao do computador. Para contornar este problema, surgiram as linguagens de programao de alto nvel. Caracterizavam-se por no serem especificas a apenas a um computador e por terem um conjunto mais amplo e expressivo de tipos de instruo.

Conforme uma maior ou menor proximidade com a linguagem de mquina, classificam-se as linguagens em: LINGUAGENS DE BAIXO NVEL LINGUAGENS DE ALTO NVEL

As linguagens de baixo nvel - Restritas a linguagem de mquina - Forte relao entre as operaes implementadas pela linguagem e as operaes implementadas pelo hardware. -Indicada para funes que precisam implementar instrues de mquina especficas que no so suportadas por linguagens de alto nvel - A grande eficincia e o reduzido tamanho dos programas

As linguagens de alto nvel Aproximam-se das linguagens utilizadas por humanos para expressar problemas e algoritmos Cada declarao numa linguagem de alto nvel equivale a vrias declaraes numa linguagem de baixo nvel. Problemas podem ser solucionados muito mais rapidamente e com muito mais facilidade. O programa em linguagem de alto nvel normalmente fcil de seguir e entender cada passo da execuo.

A especificao de um LP requer a descrio de : - Um Lxico - Uma Sintaxe - Uma Semntica

O Lxico da LP corresponde ao vocabulrio que pode ser utilizado para formar sentenas na linguagem. Por exemplo: O seguinte comando da Linguagem Pascal

A := B;
O Lxico da LP estabelece que os smbolos A, := , B e ; fazem parte do vocabulrio da LP.

A Sintaxe da LP corresponde ao conjunto de regras que determinam quais sentenas podem ser formadas a partir da combinao dos itens lxicos. O lxico e a sintaxe esto relacionados com a forma dos programas, isto , como expresses, comandos, declaraes e outros elementos da LP podem ser combinados para forma programas vlidos.

Por exemplo : O seguinte comando da Linguagem Pascal

A := B + 2;
A Sintaxe da LP indica que a sentena formada pelo identificador A, o smbolo := , o identificador B, o smbolo +, o numero 2 e o smbolo ; designa um comando vlido de soma.

A Semntica da LP descreve como as construes sintaticamente corretas so interpretadas ou executadas. A semntica esta relacionada com o significado dos programas, isto , como eles se comportam quando so executados por computadores.

Por exemplo : O seguinte comando da Linguagem C

A = B;
A Semntica 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.

Mtodos de Implementao de Linguagens de Programao

Todo e qualquer Programa escrito em uma LP necessita ser traduzido para a linguagem de maquina a fim de ser executado. Para fazer isso, necessrio aplicar um programa que recebe como entrada o cdigofonte do programa a ser traduzido e gere o cdigo traduzido na linguagem de maquina. Esse programa tradutor quem determina como os programas na LP sero implementados, isto , como o cdigofonte traduzido se comportar efetivamente quando executado no computador.

So descritos trs mtodos gerais de implementao de linguagens de programao , so eles: Compilao Interpretao Pura Hibrido

Compilao

Um Compilador traduz o programa fonte inteiro, produzindo um outro programa equivalente, em linguagem executvel. A vantagem que o compilador precisa traduzir um comando apenas uma nica vez, no importando quantas vezes ele ser executado. Na prtica o compilador usado para gerar o cdigo definitivo (eficiente) de um programa. Exemplos de linguagens compiladas : Pascal, C, C++,Java e outras

Interpretao Pura

Um interpretador traduz o programa fonte um comando por vez e chama uma rotina para executar esse comando. A vantagem que o interpretador no traduz comandos que podem no ser executados e pode relatar erros na linguagem original em cada ponto de execuo. Na prtica as linguagens interpretadas servem para a realizao de uma prototipagem rpida. Exemplos de linguagens interpretadas: Prolog, linguagens de script

Hibrido

Processo que combina tanto a execuo eficiente quanto a portabilidade de programas pela aplicao combinada dos dois mtodos anteriores. A base para o mtodo hibrido a existncia de um cdigo intermedirio, mais fcil de ser interpretado e, ao mesmo tempo, no especifico de uma de uma plataforma computacional. O mtodo hibrido dividido , portanto, em duas etapas: compilao para um cdigo intermedirio e interpretao desse cdigo.

Exemplos de linguagens hibridas : JAVA e PERL

Grfico Data x Linguagens

Ler enquanto mostra figura da prxima pagina

O grfico mostra o surgimento e a evoluo das principais linguagens de programao.


FORTRAN (1957): aplicaes numricas LISP (1959): programao funcional ALGOL (1960): programao estruturada COBOL (1960): aplicaes comerciais BASIC (1964): ensino para leigos PASCAL (1971): programao estruturada; simplicidade C (1972): implementao de UNIX PROLOG (1972): programao lgica SMALLTALK (1972): programao orientada a objetos ADA (1983): programao concorrente C++ (1985): disseminao de programao O. objetos JAVA (1995): mais simples e confivel que C++; Internet

Paradigmas

Paradigmas:Modelo, padro ou estilo de programao suportado por linguagens que agrupam certas caractersticas 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 aplicao real modelada do ponto de vista computacional

Mostrar figura prximo slide enquanto le

Existem diversas classificaes de Paradigmas de LPs , sendo a mais comum a que divide os paradigmas de LPs nos paradigmas : Imperativo e Declarativo Imperativo Linguagens
Visual Estruturado Orientado a Objetos Orientado a aspectos Concorrente

Declarativo Linguagens
Funcional Lgico

Paradigma Imperativo

O Paradigma Imperativo engloba os paradigmas fundamentados na idia de computao como um processo que realiza mudanas de estados. Nesse sentido, um estado representa uma configurao qualquer da memria do computador. Os conceitos fundamentais so de varivel, valor e atribuio,.

Paradigma Visual

As linguagens de programao visual partem do princpio de que grficos so mais fceis de serem entendidos do que textos. Sendo assim, a especificao de um programa por meio de diagramas e outros recursos grficos tende a tornar a prpria programao mais fcil, permitindo mesmo que usurios sem muitas habilidades em programao gerem programas. As LPV so divididas em dois grupos: - Linguagens Visuais Puras - Linguagens Visuais Hibridas

As linguagens de programao visual puras so aquelas em que o programa determinado exclusivamente por meio dos grficos e diagramas que o especificam. Dentre elas podemos citar: Khoros - computao grfica.

Simulink - simulao de sistemas dinmicos.

Linguagens Visuais Hibridas As linguagens que incluem-se nesta categoria so normalmente linguagens de programao convencional, acrescidas das ferramentas visuais que lhes do o status de visuais. Exemplos incluem o : Delphi, Visual Basic, Visual C++.

VANTAGENS DO MODELO VISUAL


Boas para definir
interconexo entre componente configurao de linhas de produtos mas no para restries associadas

Razoveis para definir


estados de um sistema mas no para fluxo de controle em geral

DESVANTAGEN DO MODELO VISUAL

Este tipo de representao normalmente limita bastante a flexibilidade dos programas que podem ser desenvolvidos.

Paradigma Estruturado

Paradigma Estruturado: Esse tipo de programao se baseia na idia desenvolvimento de programas por refinamentos sucessivos (top-down). A programao estruturada consegue organizar o fluxo de controle de execuo dos programas desestimulando o uso de comandos de desvio incondicional (goto) e incentivando a diviso dos programas em subprogramas e em blocos aninhados de comandos.

Modelo Computacional do Paradigma Estruturado

Entrada

Programa

Sada

Estado

VANTAGENS DO MODELO ESTRUTURADO Eficincia (embute modelo de Von Neumann) Modelagem natural de aplicaes do mundo real Paradigma dominante e bem estabelecido

DESVANTAGENS DO MODELO ESTRUTURADO - Relacionamento indireto entre E/S resulta em: difcil legibilidade erros introduzidos durante manuteno descries demasiadamente operacionais focalizam o como e no o que

Algumas linguagens de programao do paradigma estruturado :


Fortran 1957 Algol Cobol Basic C C++ 1960 1960 1964 1971 1985

Pascal 1971

Paradigma Orientado a Objetos

Paradigma Orientado a Objetos No um paradigma no sentido estrito: uma subclassificao do imperativo A diferena mais de metodologia quanto concepo e modelagem do sistema A grosso modo, uma aplicao estruturada em mdulos (classes) que agrupam um estado e operaes (mtodos) sobre este Classes podem ser estendidas e/ou usadas como tipos (cujos elementos so objetos)

No "meio" orientado a objetos, as unidades de programa so objetos. Por exemplo, desde uma constante numrica at um sistema para manipular arquivos, so todos objetos. Mensagens possibilitam a comunicao entre os objetos e atravs delas que uma operao de um objeto requisitada.

Vantagens do Paradigma Orientado a objetos Todas as do estilo imperativo Classes estimulam projeto centrado em dados: modularidade, reusabilidade e extensibilidade Aceitao comercial crescente

Problemas do Paradigma OO Semelhantes aos do paradigma imperativo, mas amenizadas pelas facilidades de estruturao

Modelo Computacional do Paradigma Orientado a Objetos


Entrada
Entrada Program a Estado Sada

Programa

Sada

Estado

Entrada Entrada Program a Estado Sada

Program a Estado

Sada

. . .

. . .

...

Entrada

Program a Estado

Sada

. . .

Algumas linguagens de programao do paradigma OO:

Smaltalk 1957 C++ Java 1985 1995

Paradigma Orientado a Aspectos

A Programao Orientada a Aspectos (POA) baseia-se na idia de que sistemas computacionais podem ser mais bem desenvolvidos pela separao de funes especficas, afetando diferentes partes do sistema, denominadas preocupaes ortogonais (crosscuting concerns). Exemplos de crosscuting concerns so persistncia, distribuio, controle de concorrncia e tratamento de excees.

Com essa separao e o aumento da modularidade proposta pela POA, o sistema implementado fica mais legvel, o que contribui para o seu projeto e a sua manuteno.

Modelo Computacional do Paradigma Orientado a Aspectos


Aspecto Entrada
Entrada Program a Estado Sada

Aspecto

Program a Estado

Sada

Entrada Entrada Program a Estado Sada

Program a Estado

Sada

. . .

. . .

...

Entrada

Program a Estado

Sada

. . .

Vantagens do Paradigma Orientado a Aspectos


Todas as do paradigma OO til para modularizar conceitos que a Orientao a Objetos no consegue tratar, preocupaes ortogonais (crosscutting concerns)
. Em especial, aqueles ligados a requisitos no funcionais

Aumenta a extensibilidade e o reuso

Problemas do Paradigma Orientado a Aspectos


Semelhantes aos do OO Ainda preciso diminuir a relao entre classes e aspectos Problemas de conflito entre aspectos que afetam a mesma classe Weaving esttico

Linguagem de programao do paradigma OA: A linguagem AspectJ um superconjunto da linguagem Java para ser usado na Programao OA. Em uma aplicao orientada a aspectos em AspectJ, os componentes so implementados usando a sintaxe padro de Java, e os aspectos so implementados usando uma sintaxe especfica de AspectJ.

Paradigma Concorrente

A programao concorrente ocorre quando vrios processos executam simultaneamente e concorrem por recursos. Eles podem utilizar uma nica unidade de processamento ou vrias unidades em paralelo. Neste ltimo caso as unidades de processamento podem estar localizadas em um mesmo computador ou distribudas entre vrios. Sistemas concorrentes tambm podem compartilhar dados ou dispositivos perifricos.

Vantagens do Paradigma Concorrente Principais focos da programao concorrente: - interao e a comunicao correta entre as diferentes tarefas - coordenao do acesso concorrente aos recurso computacionais

Desvantagens do Paradigma Concorrente

No-determinismo Dependncia de velocidade de execuo Deadlock Starvation (escalonamento desonesto )

Algumas linguagens de programao do paradigma Concorrente:

ADA - 1983 Java - 1995

Paradigma Declarativo

Paradigma Declarativo, em contraste com o paradigma Imperativo, no qual os programas so especificaes de como o computador deve realizar uma tarefa, no paradigma declarativo os programas so especificaes sobre o que essa tarefa. No paradigma declarativo, o programador no precisa se preocupar sobre como o computador implementado, nem sobre a maneira pela qual ele melhor utilizado para realizar uma tarefa.

A preocupao do programador descrever de forma abstrata a tarefa a ser resolvida. Tipicamente, programas em linguagens declarativas so especificaes de relaes e funes. Neste paradigma temos as seguintes linguagens : - Lgico - Funcional

Paradigma Lgico

Um programa em lgica a resoluo de um determinado problema atravs da utilizao de sentenas da lgica. Em Pascal ou em C, por exemplo, temos uma seqncia de instrues executadas uma aps a outra, que ao final converge em um resultado. Um programa lgico equivalente descrio do problema expressar de maneira formal, similar maneira que o ser humano raciocinaria sobre ele. Linguagens Lgicas: PROLOG

Viso Crtica do Paradigma Lgico


Vantagens Em princpio, todas do paradigma funcional Permite concepo da aplicao em um alto nvel de abstrao (atravs de associaes entre E/S) Problemas Em princpio, todos do paradigma funcional Linguagens usualmente no possuem tipos, nem so de alta ordem

Paradigma Funcional

Linguagens funcionais operam apenas sobre funes, as quais recebem listas de valores e retornam um valor. O objetivo da programao funcional definir uma funo que retorne um valor como resposta do problema. Um programa funcional uma chamada de uma funo que normalmente chama outras funes para gerar um valor de retorno.

Viso Crtica do Paradigma Funcional


Vantagens Manipulao de programas mais simples: - Prova de propriedades - Transformao (exemplo: otimizao) - Concorrncia explorada de forma natural Problemas O mundo no funcional! Implementaes ineficientes Mecanismos primitivos de E/S e formatao

As linguagens conhecidas so :

funcionais

mais

LISP, Prolog, Scheme , ASpecT, Erlang, Gofer, Haskell, Hope, Hugs, J, Miranda, ML, OPAL e outras...