Bom dia! Terça-Feira, 06 de Janeiro de 2009. Estilo 1 Estilo 2 Estilo 3 Estilo 4 Estilo 5

- Definições

- Linguagens

- Desenvolvimento das Linguagens

- Algorítimos

- Programação

- Compilador / Interpretador

Algumas Definições

(Topo)

Definições I :

Programa -> É uma seqüência lógica de ordens detalhadas com o objetivo de executar uma determinada tarefa escrita em linguagem de computador.

Algorítmo -> É uma seqüência lógica de ordens detalhadas com o objetivo de executar uma determinada tarefa.

Comando -> È uma instrução reconhecida pelo sistema que produz algum resultado.

Sintaxe -> São as regras que devem ser seguidas para a correta utilização de um comando.

Parâmetros -> São informações adicionais que permitem uma variação no resultado da execução de um comando.

Bibliografia: Forsythe, Alexandra I. Tradução de Octávio Almerindo Ferreira Ciência de Computadores Vol. 1 LTC Livros Técnicos e Científicos Editora S.A. Rio de Janeiro - 1978

Definições II:

Programa -> É um algoritmo escrito em uma linguagem computacional.

Algoritmo -> É uma lista de instruções para a execução, passo a passo, de algum processo. Um algorítimo deve ser escrito de forma IMPERATIVA.

Algoritmo -> É adescrição de um conjunto de ações que obedecidas, resultam uma sucessão finita de passos, atingindo um objetivo.

Comando -> São valores passados para o comando quando da execução do mesmo.

Sintaxe -> É a forma correta de escrever uma comando.

Parâmetros -> São valores passados para o comando quando da ativação do mesmo.

Definições III:

Definições na internet:

A programação é a arte da criação de um programa de computador, um conjunto concreto de instruções para um computador desempenhar. Computador, neste contexto, significa qualquer coisa que tenha capacidade de processamento. O programa é escrito numa linguagem de programação, embora seja possível, com alguma dificuldade, escrevê-lo directamente em linguagem de máquina. Diferentes partes de um programa podem ser escritas em diferentes linguagens.
(pt.wikipedia.org/wiki/Programação)

Uma linguagem de programação é um método padronizado para expressar instruções para um Computador. É um conjunto de regras sintáticas e semânticas usadas para definir um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias. ...
(pt.wikipedia.org/wiki/Linguagem_de_programação)

Programação estruturada é uma forma de programação de computadores que orienta os programadores para a criação de estruturas semi-autónomas e reutilizáveis nos seus programas, as subrotinas e as funções. Foi a forma dominante na criação de software entre a programação linear e a programação orientada por objectos.
(pt.wikipedia.org/wiki/Programação_estruturada)

Embora a maior parte das pessoas consiga identificar alguns dos casos de "design gráfico" que surgem na vida quotidiana, ainda se discute o que é exactamente essa disciplina, havendo definições contraditórias, além de opiniões divergentes sobre se o design gráfico é ou não arte.
(pt.wikipedia.org/wiki/Programação_Visual)

A Programação Linear (PL) é uma técnica de planejamento que vem se constituindo como das mais poderosas em quase todo ramo da atividade humana. Seus benefícios são exatamente aqueles procurados por qualquer empresa: diminuição dos custos e aumento dos lucros. Em algumas empresas ela está, inclusive, embutida em suas rotinas informatizadas de planejamento diário dos processos de operação.
(paginas.terra.com.br/negocios/processos2002/glossario.htm)

A engenharia da programação é a área do conhecimento que implementa de forma mecânica os algoritmos descritos pelas varias matemáticas e cuja implementação não se revê noutras áreas.
(pt.wikipedia.org/wiki/Engenharia_da_programação) (Topo)

Linguagens

(Topo)

A história das linguagens de programação.(Figura)

Origem: Wikipédia, a enciclopédia livre.

Uma linguagem de programação é um método padronizado para expressar instruções para um computador . É um conjunto de regras sintáticas e semânticas usadas para definir um programa de computador. Uma linguagem permite que um programador especifique precisamente sobre quais dados um computador vai atuar, como estes dados serão armazenados ou transmitidos e quais ações devem ser tomadas sob várias circunstâncias.

O conjunto de palavras ( tokens ), compostos de acordo com essas regras, constituem o código fonte de um software . Esse código fonte é depois traduzido para código de máquina , que é executado pelo processador .

Uma das principais metas das linguagens de programação é permitir que programadores tenham uma maior produtividade, permitindo expressar suas intenções mais facilmente do que quando comparado com a linguagem que um computador entende nativamente (código de máquina). Assim, linguagens de programação são projetadas para adotar uma sintaxe de nível mais alto, que pode ser mais facilmente entendida por programadores humanos. Linguagens de programação são ferramentas importantes para que programadores e engenheiros de software possam escrever programas mais organizados e com maior rapidez.

Linguagens de programação também tornam os programas menos dependentes de computadores ou ambientes computacionais específicos (propriedade chamada de portabilidade). Isto acontece porque programas escritos em linguagens de programação são traduzidos para o código de máquina do computador no qual será executado em vez de ser diretamente executado. Uma meta ambiciosa do Forran , uma das primeiras linguagens de programação, era esta independência da máquina onde seria executada.

Esta é uma lista de Linguagens de programação :

(Topo)

Algorítimos

(Topo)

- Um algorítimo deve ser escrito de forma IMPERATIVA.
- Uum algoritimo deverá ser escrito de tal forma que qualquer pessoa que leia o execute e seja alcançando o objetivo final, ou seja, um algoritimo não pode conter instruções que possam gerar dúvidas durante sua execução.

O aprendizado de algoritmos não se consegue a não ser através de muitos exercícios.

Algoritmos não se aprende:
- Copiando Algoritmos
- Estudando Algoritmos

Algoritmos só se aprendem:
- Construindo Algoritmos
- Testando Algoritmos

Quando temos um problema e vamos utilizar um computador para resolve-lo inevitavelmente temos que passar pelas seguintes etapas:

a) Definir o problema.
b) Realizar um estudo da situação atual e verificar quais a(s) forma(s) de resolver o problema.
c) Terminada a fase de estudo, utilizar uma linguagem de programação para escrever o programa que deverá a princípio, resolver o problema.
d) Analisar junto aos usuários se o problema foi resolvido. Se a solução não foi encontrada, deverá ser retornado para a fase de estudo para descobrir onde está a falha.
Estas são de forma bem geral, as etapas que um analista passa, desde a apresentação do problema até a sua efetiva solução. Iremos, neste curso, nos ater as etapas de estudo, também chamada de análise, e a etapa de programação. Mas antes vamos definir o seguinte conceito: Programar um computador consiste em elaborar um conjunto finito de instruções, reconhecidas pela máquina, de forma que o computador execute estas instruções. Estas instruções possuem regras e uma Sintaxe própria, como uma linguagem tipo português ou inglês, sendo isto chamadas de linguagem de computador.

No mundo computacional existe uma grande variedade de linguagens Pascal, C, C++, Cobol, Fortran, Clipper , Delphi, Java, Visual Basic, etc….
Antes de utilizarmos uma linguagem de computador, é necessário organizar as ações a serem tomadas pela máquina de forma organizada e lógica, sem nos atermos as regras rígidas da Sintaxe de uma linguagem. Para isto utilizaremos uma forma de escrever tais ações, conhecida como algoritmo, ou pseudo-código.

Em nossos estudos os algoritmos terão a seguinte estrutura:

ALGORITMO <Nome do algoritmo>
<definições>
INÍCIO
<Comandos>
FIM

1º) Exemplo de um algoritimo:

Na disciplina de matemática tivemos três provas e as notas foram as seguintes:

N1 = 5.5
N2 = 7.0
N3 = 4.5

Gostaríamos saber qual foi a média das três notas. Qual seria a seqüência de operações que o computador precisa para fazer este simples cálculo?.

Solução:

Para calcular a média, em primeiro lugar precisamos informar ao computador quais são os valores das notas. Depois, pedimos para ele somar as notas e dividir por 3. O resultado deve ser guardado em algum lugar, para depois mostrar na tela do computador. Esta seqüência podemos escrever em um algoritmo da seguinte forma:

1. Pedir os valores das tres notas; N1 = 5.5 N2 = 7.0 N3 = 4.5
2. Calcular a soma e guardar um algum lugar; S = N1 + N2 + N3
3. Calcular a média dividindo o valor guardado pela quantidade de notas informadas; M = S/3
4. Mostrar o resultado; M

Para fazer os cálculos, o computador precisa guardar os dados em algum lugar de sua memória. Para entender melhor como isso funciona, vamos imaginar que esses lugares sejam caixas vazias. Portanto N1, N2 e N3 são caixas onde vamos guardar o valor das notas. Por exemplo, quando fazemos N1 = 5.5 no algoritmo, estamos informando ao computador que deve guardar o valor 5.5 na caixa N1 . De forma similiar quando escrevemos:
S = N1 + N2 + N3 , o computador deve fazer a soma dos valores que estão nas caixa N1 , N2 e N3 e o resultado deve guardado na caixa S . A caixa M vamos utilizar para guardar o valor de S dividido por 3. Finalmente quando quesirmos ver o resultado do cálculo, pedimos ao computador mostrar o conteúdo da caixa M

Em qualquer momento podemos alterar o conteúdo das caixas utilizando o simbolo = , nesse caso o valor anterior da caixa será apagado e sempre guardará apenas o último valor. Agora imaginemos que temos poucas caixas vazias e para economizar vamos pedir ao computador que guarde o resultado da média no mesmo lugar onde estava a soma, já que a soma não será mais usada. Para isso o comando seria o seguinte:
S = S/3 Neste caso, o computador vai dividir o conteúdo da caixa S por 3 e o resultado vai guardar na mesma caixa S , apagando o resultado anterior. Este tipo de procedimento podemos fazer quando não precisamos guardar os valores anteriores.

Para colocar o nome das caixas nos algoritmos podemos utilizar qualquer letra ou palavra, mas sempre é recomedável usar palavras ou letras associadas ao conteúdo. Por exemplo, para guardar a média nós colocamos a letra M , poderiamos usar também: Media, med, MEDIA , etc.

2º) Exemplo de um algoritimo:

A troca de uma lâmpada queimada.

Solução:

1. Acionar o interruptor;
2. Se a lâmpada não acender, então
3. Pegar uma escada;
4. Posicionar a escada embaixo da lâmpada;
5. Buscar uma lâmpada nova;
6. Subir na escada;
7. Retirar a lâmpada queimada;
8. Colocar a lâmpada nova;
9. Descer da escada;
10. Acionar o interruptor;
11. Enquanto a lâmpada não acender, faça
12. Retirar a lâmpada queimada;
13. Colocar uma lâmpada nova;
14. Acionar o interruptor;

3º) Exemplos de algoritmos em várias linguagens
Origem: Wikipédia, a enciclopédia livre.

Este artigo ilustra alguns exemplos em várias linguagens de programação para ilustrar a sintaxe de cada uma. O algoritmo é a soma entre dois valores.

 

Exemplo de Linguagens

  • 1 C/C++/Java/C#/D
  • 2 Visual Basic
  • 3 Pascal
  • 4 Delphi
  • 5 Python
  • 6 Ruby
  • 7 Scheme
  • 8 Haskell
  • 9 Logo
  • 10 Action Script
  • 11 PHP

C / C++ / Java / C# / D

int SomaDeDoisValores (int A, int B)
{ return ( A + B ); }

Visual Basic

function SomaDeDoisValoresInteiros(a as integer, b as integer)
as integer SomaDeDoisValores=a+b
end function

Pascal

function SomaDeDoisValoresInteiros( A, B: Integer ): Integer;
var Resultado : Integer;
begin
Resultado := A + B;
SomaDeDoisValoresInteiros := Resultado;
end;

Delphi

function SomaDeDoisValores( A, B: Integer ): Integer;
begin Result := A + B;
end;

Python

def SomaDeDoisValores (a, b):
return a + b

Ruby

def soma_de_dois_valores(a, b)
a + b end

Scheme

(define Soma (lambda (x y) (+ x y)) )

Haskell

soma :: Integer -> Integer -> Integer -- (assinatura) soma a b = a + b

A assinatura da função pode ser dispensada, mas normalmente é colocada no código por motivo de clareza.

Logo

defina "SomaDeDoisValores [[a b]]
[escreva soma :a :b]]

Action Script

function somaDeDoisValores (a, b){ trace(a + b); };

PHP

function SomaDeDoisValores($VlrA, $VlrB)
{ return ($VlrA + $VlrB); }

Seguindo padrões de programação, usa-se a primeira letra maiúscula apenas em classes; em funções usa-se a primeira letra minúscula. (Topo)

Programação

(Topo)

Programação estruturada é uma forma de programação de computadores que preconiza que todos os programas possíveis podem ser reduzidos a apenas três estruturas: sequência , decisão e iteração .

Tendo, na prática, sido transformada na Programação modular , a Programação estruturada orienta os programadores para a criação de estruturas simples em seus programas, usando as subrotinas e as funções . Foi a forma dominante na criação de software entre a programação linear e a programação orientada por objectos .

Apesar de ter sido sucedida pela programação orientada por objectos , pode-se dizer que a programação estruturada ainda é marcantemente influente, uma vez que grande parte das pessoas ainda aprendem programação se fazem através dela. Além disso, por exigir formas de pensar relativamente complexas, a programação orientada ao objeto até hoje ainda não é bem compreendida ou usada.

Orientação a Objeto é um paradigma de análise , projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas objetos.

(Em alguns contextos, prefere-se usar modelagem orientada ao objeto, em vez de projeto .)

A análise e projeto orientados a objetos têm como meta identificar o melhor conjunto de objetos para descrever um sistema de software . O funcionamento deste sistema se dá através do relacionamento e troca de mensagens entre estes objetos.

Hoje existem duas vertentes no projeto de sistemas orientados a objetos. O projeto formal, normalmente utilizando técnicas como a notação UML e processos de desenvolvimento como o RUP ; e a programação extrema , que utiliza pouca documentação, programação em pares e testes unitários.

Na programação orientada a objetos, implementa-se um conjunto de classes que definem os objetos presentes no sistema de software . Cada classe determina o comportamento (definidos nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos.

Smalltalk , Perl , Python , Ruby , Php , C++ , Java e C# são as linguagens de programação mais importantes com suporte a orientação a objetos.

Conceitos

Paradigma de programação fornece (e determina) a visão que o programador possui sobre a execução do programa. Por exemplo, em programação orientada a objetos, programadores podem abstrair um programa como uma coleção de objetos que interagem entre si, enquanto em programação funcional programadores abstraem o programa como uma sequência de funções executadas de modo empilhado.

Assim como diferentes grupos em Engenharia de software propõem diferentes metodologias , diferentes linguagens de programação propõem diferentes paradigmas de programação . Algumas linguagens foram desenvolvidas para suportar um paradigma específico ( Smalltalk e Java suportam o paradigma de orientação a objetos enquanto Haskell e Scheme suportam o paradigma funcional), enquanto outras linguagens suportam múltiplos paradigmas (como o LISP , Python e o C++ ).

Muitos paradigmas de programação são conhecidos pelas técnicas que proíbem ou permitem. Por exemplo, programação estruturada não permite o uso de goto . Esse é um dos motivos pelos quais novos paradigmas são considerados mais rígidos do que estilos tradicionais. Apesar disso, evitar certos tipos de técnicas pode facilitar a prova de conceito de um sistema; pode até mesmo facilitar o desenvolvimento.

O relacionamento entre paradigmas de programação e linguagens de programação pode ser complexo pois linguagens de programação podem suportar mais de um paradigma. (Topo)

Compilador / Interpretador

(Topo)

Origem: Wikipédia, a enciclopédia livre.

Um compilador é um programa que transforma um código escrito em uma linguagem, o código fonte (do inglês source code ), em um programa equivalente em outra linguagem, código objeto (do inglês object code ).

Normalmente, o código fonte é escrito em uma linguagem de programação de alto nível, com grande capacidade de abstração, e o código objeto é escrito em uma linguagem de baixo nível, como uma sequência de instruções a ser executada por um sistema computacional .

O processo de compilação é composto de análise e síntese. A análise tem como objetivo entender o código fonte e representá-lo em uma estrutura intermediária. A síntese constrói o código objeto a partir desta respresentação intermediária.

A análise pode ser subdividida ainda em análise léxica , análise sintática e análise semântica . A síntese é mais variada, podendo ser composta pelas etapas de Geração de código intermediário, otimização de código e geração de código final (ou código de máquina), e somente esta última etapa é obrigatória.

Em linguagens de programação híbridas, o compilador tem o papel de converter o código fonte em um código chamado de byte code , que é uma linguagem de baixo nível. Um exemplo deste comportamento é o do compilador da linguagem Java que, em vez de gerar código da máquina hospedeira (onde se está executando o compilador), gera código chamado Java Bytecode .


Temos o pré-processador , antes era um software á parte mas que já faz parte de muitos compiladores. ele basicamente faz algumas substituições e uns "copy paste" ao código fonte.

depois é que ele vai para o compilador que faz a tradução para a linguagem binária .

existe também o linker que a função dele é pegar nos vários objectos e ligá-los.

Interpretadores são programas que lêem um código fonte de uma linguagem de programação e os convertem em código executável. Seu funcionamento pode variar de acordo com a implementação. Em muitos casos o interpretador lê linha-a-linha e converte em código objeto a medida que vai executando o programa . Linguagens interpretadas são mais dinâmicas por não precisarem escrever-compilar-testar-corrigir-compilar-testar-distribuir, e sim escrever-testar-corrigir-escrever-testar-distribuir. Mas existem também linguagens que funcionam como interpretadores e compiladores como: C , Python (somente quando requerido), BASIC , etc.

Na verdade, a principio, para qualquer linguagem de programação pode-se implementar compiladores e interpretadores para ela. Mas para determinadas linguagens é mais fácil "fabricar" interpretadores, e para outras é mais prático um compilador.

Análie Léxica

Análise léxica é o processo de analisar a entrada de linhas de caracteres (tal como o código-fonte de um programa de computador ) e produzir uma seqüência de símbolos chamado "símbolos léxicos" (lexical tokens), ou somente "símbolos" ( tokens ), que podem ser manipulados mais facilmente por um parser (leitor de saída). Ou o significado mais popularmente, a Análise Léxica é a forma de verificar determinado alfabeto . Quando analisamos uma palavra, podemos definir através da análise léxica se existe ou não algum caracter que não faz parte do nosso alfabeto, ou um alfabeto inventado por nós, criamos o alfabeto desejado e através da análise léxica podemos testar se aqueles caracteres definidos fazem parte do nosso alfabeto ou não. O analisador léxico é a primeira etapa de um compilador que depois virá a análise sintática .

O analisador léxico funciona de duas maneiras:

Primeiro estado da análise

A primeira etapa lê a entrada de um caracter, um de cada vez, mudando o estado em que os caracteres se encontram. Quando o analisador encontra um caracter que ele não identifica como correto, ele o chama de "estado morto" então, ele volta a última análise que foi aceita e assim tem o tipo e comprimento do léxico válido.

Um léxico, entretanto, é uma única lista de caracteres conhecidas de ser um tipo correto. Para construir um símbolo, o analisador léxico necessita de um segundo estado.

Segundo estado da análise

Nesta etapa são repassados os caracteres do léxico para produzir um valor. O tipo do léxico combinado com seu valor é o que adequadamente constitui um símbolo, que pode ser dado a um parser. (Alguns símbolos tal como parênteses não têm valores, e então a função da análise não podem retornar nada).

A análise léxica escreve um parser muito mais fácil. Em vez de ter que acumular, renomeia seus caráteres individualmente, o parser não mais se preocuparia com símbolos e passava a preocupa-se só com questões de sintática. Isto leva a eficiência de programação, e não eficiência de execução. Entretanto, desde que o analisador léxico é o subsistema que deve examinar cada caráter único de entrada, podem ser passos intensivos e o desempenhos se torna crítico, pode estar usando um compilador .

Análise léxica do Python

Como a linguagem de programação Python passa por um interpretador , existe a necessidade implícita de analisar o código-fonte colocado dentro do interpretador (entrada: tokens ), para que o código funcione corretamente (saída: parser ).

Python é dividido em linhas lógicas que são separadas pelo token newline . Como Python não há a definição de início e fim de blocos de códigos, e sim por identação , os delimitadores são o Ident e o Dedent . São vários os tipos de tokens que são reconhecidos pela linguagem, como: indentificadores, palavras-chaves, classes reservadas, strings, números inteiros, operadores, delimitadores, sequências, listas, dicionários, funções, classes, etc.

Análie Sintática

Análise sintática é análise das fórmulas bem formadas de uma linguagem de programação. A sintaxe de uma linguagem de programação pode ser descrita por uma gramática independente do contexto e representada gráficamente através da notação BNF.

Esta gramática descreve recursivamente a combinatória de tokens possíveis de uma linguagem.

Em termos práticos, pode também se usada para decompor um texto em unidades estruturais para serem organizadas dentro de um bloco, por exemplo).

O analisador sintático recebe do analisador léxico um grupo de tokens e usa um conjunto de regras para construir uma árvore sintática da estrutura.

A vasta maioria dos analisadores sintáticos implementados em compiladores aceitam alguma linguagem livres de contexto para fazer a análise. Estes analisadores podem ser de vários tipos, como o LL , o LR e o SLR .

Análie Semântica

Análise semântica é a terceira fase da compilação onde se verifica os erros semânticos, (por exemplo, uma multiplicação entre tipos de dados diferentes) no código-fonte e coleta as informações necessárias para a próxima fase da compilação que é a geração de código-fonte . (Topo)