Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


programação - de - computadores, Notas de estudo de Informática

Conceitos basicos de programacao,

Tipologia: Notas de estudo

2015

Compartilhado em 06/04/2015

nelson-flores-2
nelson-flores-2 🇧🇷

1 documento

1 / 113

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
PDF gerado usando o pacote de ferramentas em código livre mwlib. Veja http://code.pediapress.com/ para mais informação.
PDF generated at: Sun, 16 May 2010 14:10:50 UTC
Programação de
Computadores
Conceitos básicos de programação
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe programação - de - computadores e outras Notas de estudo em PDF para Informática, somente na Docsity!

PDF gerado usando o pacote de ferramentas em código livre mwlib. Veja http://code.pediapress.com/ para mais informação. PDF generated at: Sun, 16 May 2010 14:10:50 UTC

Programação de

Computadores

Conceitos básicos de programação

Conteúdo

  • Programação de computadores Páginas
  • Linguagem de programação
  • Linguagem funcional
  • Linguagem natural
  • Programação lógica
  • Programação imperativa
  • Programação estruturada
  • Orientação a objeto
  • Linguagem de programação de baixo nível
  • Linguagem de programação de alto nível
  • Linguagem de programação de primeira geração
  • Linguagem de programação de segunda geração
  • Linguagem de programação de terceira geração
  • Linguagem de programação de quarta geração
  • Paradigma de programação
  • Programação declarativa
  • Programação procedural
  • Programação funcional
  • Programação restritiva
  • Programação orientada a aspecto
  • Programação genérica
  • Programação multiparadigma
  • Orientação a objetos
  • Python
  • Java (linguagem de programação)
  • Compilador
  • Software
  • Programador
  • Ciência da computação
  • PHP
  • Engenharia de software
  • Código de máquina
  • Linguagem de montagem

Programação de computadores (^1)

Programação de computadores

Pequeno programa em linguagem de programação C que imprime na tela se o número passado a ele como argumento é primo ou não. O código fonte está sendo visualizado em um IDE com suporte a colorização e indentação de código.

Programação é o processo de escrita, teste e manutenção de um programa de computador. O programa é escrito em uma 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. Diferentes linguagens de programação funcionam de diferentes modos. Por esse motivo, os programadores podem criar programas muito diferentes para diferentes linguagens; muito embora, teoricamente, a maioria das linguagens possa ser usada para criar qualquer programa. Para mais informações sobre estes métodos, veja Linguagem de programação. Software é um nome colectivo para programas de computadores e dados. Há várias décadas se debate se a programação é mais semelhante a uma arte (Donald Knuth), a uma ciência, à matemática (Edsger Dijkstra), à engenharia (David Parnas), ou se é um campo completamente novo.

Programas ou algoritmos?

Um algoritmo é uma sequência de passos para realizar uma tarefa ou resolver um problema. Em nosso dia a dia utilizamos algoritmos para realizar nossas atividades, definindo a sequência de atividades que devemos fazer para atingir um objetivo. Um algoritmo é, num certo sentido, um programa abstrato — dizendo de outra forma, um programa é um algoritmo concretizado. No entanto, os programas são, à excepção dos menores, visualizados mais facilmente como uma colecção de algoritmos menores combinados de um modo único — da mesma forma que uma casa é construída a partir de componentes. Dessa forma, um algoritmo é uma descrição de como um computador pode ser levado a executar uma operação simples e específica, como, por exemplo, uma ordenação. Um programa, por outro lado, é uma entidade que na verdade implementa uma ou mais operações de forma que seja útil para as pessoas.

Programação de computadores (^2)

Engenharia de software

A criação de um programa de computador consiste de cinco passos principais:

  1. Reconhecer a necessidade de um programa para resolver um problema.
  2. Planificar o programa e seleccionar as ferramentas necessárias para resolver o problema.
  3. Escrever o programa na linguagem de programação escolhida.
  4. Compilação: tradução do código fonte legível pelo homem em código executável pela máquina, o que é feito através de compiladores e outras ferramentas.
  5. Testar o programa para ter a certeza de que funciona; se não, regressar ao passo 3. Estes cinco passos são colectivamente conhecidos como engenharia de software. A programação põe ênfase nos passos 2, 3 e 4. A codificação põe ênfase no passo 3. O termo coder , por vezes usado como sinônimo para programador, pode tornar-se aviltante porque ignora as capacidades necessárias para lidar com os outros quatro passos.

História

Heron de Alexandria no século primeiro inventou teatros automatizados que usavam programação análoga para controlar os fantoches, portas, luzes e efeitos de som. A mais antiga programadora de computadores que se conhece é Ada Lovelace, filha de Anabella e de Lord Byron (o poeta). Anabella transmitiu a Ada o seu amor à matemática, a qual, depois de conhecer Charles Babbage, traduziu e expandiu uma descrição da sua máquina analítica. Muito embora Babbage nunca tenha completado a construção de nenhuma das suas máquinas, o trabalho que ele e Ada desenvolveram sobre elas, garantiu a Ada o título de primeira programadora de computadores do mundo (veja as notas de Ada Byron sobre a máquina analítica. A linguagem de programação Ada recebeu o seu nome. Um dos primeiros programadores que se tem notícia de ter completado todos os passos para a computação sem auxílio, incluindo a compilação e o teste, é Wallace J. Eckert. O trabalho deste homem antecede a ascensão das linguagens de computador, porque ele usou a linguagem da matemática para solucionar problemas astronômicos. No entanto, todos os ingredientes estavam lá: ele trabalhou um laboratório de computação para a Universidade de Columbia com equipamentos fornecidos pela IBM, completos com uma divisão de serviço de atendimento ao cliente, e consultores de engenharia para propósitos especiais, na cidade de Nova York, na década de 1930, usando cartões perfurados para armazenar os resultados intermediários de seus cálculos, e então formatando os cartões perfurados para controlar a impressão das respostas, igual ao trabalho para os censos décadas antes. Tinha técnicas de debug tais como códigos de cores, bases cruzadas, verificação e duplicação. Uma diferença entre Eckert e os programadores dos dias de hoje é que o exemplo do seu trabalho influenciou o projeto Manhattan. Seu trabalho foi reconhecido por astrônomos do Observatório da Universidade de Yale, Observatório da Universidade de Princeton, Observatório da Marinha dos EUA, Observatório da Faculdade Harvard, Observatório dos estudantes da Universidade da Califórnia, Observatório Ladd da Universidade de Brown e Observatório Sproul da Faculdade de Swarthmore. Alan Turing é frequentemente encarado como o pai da ciência de computadores e, por afinidade, da programação. Ele foi responsável por ajudar na elaboração e programação de um computador destinado a quebrar o código alemão ENIGMA durante a Segunda Guerra Mundial — ver Máquina Enigma.

Linguagem de programação (^4)

Linguagem de 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. 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 Fortran, uma das primeiras linguagens de programação, era esta independência da máquina onde seria executada.

História

O primeiro projeto de linguagem de programação surgiu para um computador que não existia, sendo idealizada por Ada Lovelace, esposa de William King-Noel. O projeto do primeiro computador foi idealizado por Charles Babbage que, após gastar fortunas e um longo tempo, não conseguiu concretizar o projeto. A linguagem de programação ADA foi batizada em homenagem a esta primeira programadora. Uma das primeiras linguagens de programação para computadores foi provavelmente Plankalkül, criada por Konrad Zuse na Alemanha Nazi, mas que teve pouco ou nenhum impacto no futuro das linguagens de programação. A primeira linguagem de programação de alto nível amplamente usada foi Fortran, criada em 1954. Em 1957 foi criada B-0, que daria origem a Flow-Matic (1958), antecessor imediato de COBOL, de 1959. Lisp e ALGOL foram criadas em 1958. Veja um mapa[1]^ da história das linguagens de programação.

Interpretação e compilação

Uma linguagem de programação pode ser convertida, ou traduzida, em código de máquina por compilação ou interpretação, que juntas podem ser chamadas de tradução. Se o método utilizado traduz todo o texto do programa (também chamado de código), para só depois executar (ou rodar, como se diz no jargão da computação) o programa, então diz-se que o programa foi compilado e que o mecanismo utilizado para a tradução é um compilador (que por sua vez nada mais é do que um programa). A versão compilada do programa tipicamente é armazenada, de forma que o programa pode ser executado um número indefinido de vezes sem que seja necessária nova compilação, o que compensa o tempo gasto na compilação. Isso acontece com linguagens como Pascal e C. Se o texto do programa é traduzido à medida que vai sendo executado, como em Javascript, Python ou Perl, num processo de tradução de trechos seguidos de sua execução imediata, então diz-se que o programa foi interpretado e que o mecanismo utilizado para a tradução é um interpretador. Programas interpretados são geralmente mais lentos do que os compilados, mas são também geralmente mais flexíveis, já que podem interagir com o ambiente mais

Linguagem de programação (^5)

facilmente. Embora haja essa distinção entre linguagens interpretadas e compiladas, as coisas nem sempre são tão simples. Há linguagens compiladas para um código de máquina de uma máquina virtual (sendo esta máquina virtual apenas mais um software, que emula a máquina virtual sendo executado em uma máquina real), como o Java e o Parrot. E também há outras formas de interpretar em que os códigos-fontes, ao invés de serem interpretados linha-a-linha, têm blocos "compilados" para a memória, de acordo com as necessidades, o que aumenta a performance dos programas quando os mesmos módulos são chamados várias vezes, técnica esta conhecida como JIT. Como exemplo, podemos citar a linguagem Java. Nela, um compilador traduz o código java para o código intermediário (e portável) da JVM. As JVMs originais interpretavam esse código, de acordo com o código de máquina do computador hospedeiro, porém atualmente elas compilam, segundo a técnica JIT o código JVM para código hospedeiro. A tradução é tipicamente feita em várias fases, sendo as mais comuns a Análise léxica, a Análise sintática ou Parsing, a Geração de código e a Otimização. Em compiladores também é comum a Geração de código intermediário. Veja também Compilador.

Classificação

As linguagens de programação podem ser classificadas e sub-classificadas de várias formas.

Conceitos

  1. Técnica de Programação Linear Em matemática, problemas de Programação Linear são problemas de otimização nos quais a função objetivo e as restrições são todas lineares. Programação Linear é uma importante área da otimização por várias razões. Muitos problemas práticos em pesquisa operacional podem ser expressos como problemas de programação linear. Certos casos especiais de programação linear, tais como problemas de network flow e problemas de multicommodity flow são considerados importantes o suficiente para que se tenha gerado muita pesquisa em algoritmos especializados para suas soluções. Vários algoritmos para outros tipos de problemas de otimização funcionam resolvendo problemas de PL como sub-problemas. Historicamente, idéias da programação linear inspiraram muitos dos conceitos centrais de teoria da otimização, tais como dualidade, decomposição, e a importância da convexidade e suas generalizações.
  2. Técnica de Programação Modular Programação modular é um paradigma de programação no qual o desenvolvimento das rotinas de programação é feito através de módulos, que são interligados entre si através de uma interface comum. Foi apresentado originalmente pela Information & Systems Institute, Inc. no National Symposium on Modular Programming em 1968, com a liderança de Larry Constantine.
  3. Técnica de Programação Estruturada 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 sub-rotinas e as funções. Foi a forma dominante na criação de software entre a programação linear e a programação orientada por objetos. Apesar de ter sido sucedida pela programação orientada por objetos, pode-se dizer que a programação estruturada ainda é marcantemente influente, uma vez que grande parte das pessoas ainda aprendem programação através dela. Porém, a orientação a objetos superou o uso das linguagens estruturadas no mercado[2]^.
  4. Técnica de Programação Orientada a Objeto Orientação a objetos, também conhecida como Programação Orientada a Objetos (POO) ou ainda em inglês Object-Oriented Programming (OOP) é um paradigma de análise, projeto e programação de sistemas de software

Linguagem de programação (^7)

Quanto a estrutura de tipos

  • Fracamente tipada, como Smalltalk, onde o tipo da variável muda dinamicamente conforme a situação.
  • Fortemente tipada, como Java, Ruby, onde o tipo da variável, uma vez atribuído, se mantém o mesmo até ser descartada da memória.
  • Dinamicamente tipada, como Perl, Python ou Ruby, onde o tipo da variável é definido em tempo de execução.
  • Estaticamente tipada, como Java e C, onde o tipo da variável é definido em tempo de compilação.

Quanto ao grau de abstração

  • Linguagem de programação de baixo nível, cujos simbolos são uma representação direta do código de máquina que será gerado, onde cada comando da linguagem equivale a um "opcode" do processador, como Assembly.
  • Linguagem de programação de médio nível, que possui símbolos que podem ser convertidos diretamente para código de máquina (goto, expressões matemáticas, atribuição de variáveis), mas também símbolos complexos que são convertidos por um compilador. Exemplo: C, C++.
  • Linguagem de programação de alto nível, composta de símbolos mais complexos, inteligível pelo ser humano e não-executável diretamente pela máquina, no nível da especificação de algoritmos, como Pascal, Fortran, ALGOL e SQL.

Quanto à geração

  • Primeira geração, as linguagens de baixo nível (Assembly)
  • Segunda geração, as primeiras linguagens (Fortran, ALGOL,...)
  • Terceira geração, as procedurais e estruturadas (Pascal, C).
  • Quarta geração, linguagens que geram programas em outras linguagens (Java, C++), linguagens de consulta (SQL).
  • Quinta geração, linguagens lógicas (Prolog).

Ver também

  • Linguagem compilada
  • Linguagem de script
  • Linguagem interpretada
  • Lista de linguagens de programação
  • Sintaxe de linguagens de programação
  • Paradigmas de programação [1] (em inglês) Mapa da história das linguagens de programação (http:/ / www. levenez. com/ lang/ history. html). [2] TIOBE Software (http:/ / www. tiobe. com/ index. php/ content/ paperinfo/ tpci/ index. html) [3] Sistema de classificação da ACM (http:/ / www. acm. uiuc. edu/ signet/ JHSI/ cr. D. 3. 2. html)

Linguagem de programação (^8)

Ligações externas

  • Todas as Linguagens de Programação catalogadas pelo Google (http://directory.google.com/Top/Computers/ Programming/Languages/).
  • Enciclopédia de linguagens de programação (http://www.scriptol.org/encyclopedia.html) (em inglês)

Bibliografia

  • ORGANICK, E. I.;FORSYTHE, A. I.;PLUMMER, R. P.. Programming Language Structures. New York: Academic Press, 1978. pp.659. ISBN 0-12-528260-
  • WEXELBLAT, Richard L.. History of Programming Languages. New York: Academic Press, 1981. pp.758. ISBN 0-12-745040-

Linguagem funcional

Em ciência da computação, programação funcional é um paradigma de programação que trata a computação como uma avaliação de funções matemáticas e que evita estados ou dados mutáveis. Ela enfatiza a aplicação de funções, em contraste da programação imperativa, que enfatiza mudanças no estado do programa[1]^. Uma função, neste sentido, pode ter ou não ter parâmetros e um simples valor de retorno. Os parâmetros são os valores de entrada da função, e o valor de retorno é o resultado da função. A definição de uma função descreve como a função será avaliada em termos de outras funções. Por exemplo, a função é definida em termos de funções de exponenciação e adição. Do mesmo modo, a linguagem deve oferecer funções básicas que não requerem definições adicionais. Linguagens de programação funcionais, especialmente as puramente funcionais, tem sido mais usadas academicamente que no desenvolvimento comercial de software. Entretanto, algumas linguagens notáveis usadas na indústria e no comércio incluem Erlang (aplicações concorrentes)[2]^ , R (estatística), Mathematica (matemática simbólica)[3]^ J e K (análise financeira) e XSLT.[4]^ [5]^ Importantes influências na programação funcional foram o cálculo lambda, as linguagens de programação APL e Lisp, e mais recentemente ML, Haskell, OCaml e F#.

Desenvolvimento

As funções podem ser manipuladas em uma grande variedade de formas em uma linguagem de programação funcional. As funções são tratadas como valores de primeira importância, o que é o mesmo que dizer que funções podem ser parâmetros ou valores de entrada para outras funções e podem ser os valores de retorno ou saída de uma função. Então podemos entender paradigma funcional como um mapeamento dos valores de entrada nos valores de retorno, através de funções. Isso permite que funções como mapcar em LISP e map em Haskell que tomam ambos uma função e uma lista como entrada e aplicam a função de entrada a cada elemento da lista. Funções podem ser nomeadas, como em outras linguagens, ou definidas anonimamente (algumas vezes durante a execução do programa) usando uma abstração lambda e usadas como valores em outras funções. Linguagens funcionais também permitem que funções sejam do tipo curry. Currying é uma técnica para reescrita de funções com múltiplos parâmetros como a composição de funções de um parâmetro. A função do tipo curry pode ser aplicada apenas a um subconjunto de seus parâmetros. O resultado é uma função onde os parâmetros neste subconjunto são agora fixados como constantes, e os valores do resto dos parâmetros ainda não são especificados. Esta nova função pode ser aplicada aos parâmetros restantes para obter o valor da função final. Por exemplo, uma função adiciona(x,y) = x + y pode ser do tipo curry de forma que o valor de retorno adiciona(2) — note que que não há um parâmetro y — será uma função anônima, o que é equivalente à função adiciona2(y) = 2 + y. Esta nova função tem apenas um parâmetro e corresponde a adicionar 2 a um número. Novamente, isso é apenas possível porque as funções são tratadas como

Linguagem funcional (^10)

  • Salus, Peter H. Functional and Logic Programming Languages. Vol. 4 of Handbook of Programming Languages. Indianapolis, Indiana: Macmillan Technical Publishing, 1998.
  • Thompson, Simon. Haskell: The Craft of Functional Programming. Harlow, England: Addison-Wesley Longman Limited, 1996.

Ver também

  • Cálculo lambda

Linguagem natural

O termo língua natural é usado para distinguir as línguas faladas por seres humanos e usadas como instrumento de comunicação daquelas que são linguagens formais construídas. Entre estas últimas contam-se as linguagens de programação de computadores e as linguagens usadas pela lógica formal ou lógica matemática. Na filosofia da linguagem de tradição anglo-saxónica, o termo língua ordinária é por vezes usado como sinónimo da língua natural. As línguas naturais são estudadas pela linguística e pela inteligência artificial, entre outras disciplinas. As línguas de sinais ou línguas gestuais são também línguas naturais, visto possuírem as mesmas propriedades características: gramática e sintaxe com dependências não locais, infinidade discreta e generatividade/criatividade. Línguas de sinais ou gestuais como a norte-americana [1], a francesa [2], a brasileira ou a portuguesa estão devidamente documentadas na literatura científica.

Ver também

Línguas de sinais

  • LIBRAS
  • Língua Gestual Portuguesa (LGP)
  • Língua de Sinais Inteligência Artificial
  • PLN
  • Text Mining Linguagens de programação
  • LISP
  • Prolog Rede social para aprender línguas
  • Livemocha

Linguagem natural (^11)

Ligações externas

  • Qual a diferença entre língua, idioma e dialeto? [3]^ (em português)

Referências

[1] http:/ / en. wikipedia. org/ wiki/ American_Sign_Languageamericana [2] http:/ / fr. wikipedia. org/ wiki/ Langue_des_signes_fran%C3%A7aisefrancesa [3] http:/ / revistaescola. abril. uol. com. br/ lingua-portuguesa/ fundamentos/ qual-diferenca-lingua-idioma-dialeto-427786. shtml

Programação lógica

Programação lógica é um paradigma de programação que faz uso da lógica matemática. John McCarthy [1958] foi o primeiro a publicar uma proposta de uso da lógica matemática para programação. A primeira linguagem de programação lógica foi a Planner, a qual permitia a invocação orientada a padrões de planos procedimentais de asserções e de objetivos. Com a necessidade de adaptação aos sistemas de memória muito limitada, que eram disponíveis quando ela foi desenvolvida. A linguagem Planner usava estruturas de controle de backtracking , de tal forma que apenas um único caminho computacional tinha que ser armazenado por vez. Em seguida, o Prolog foi desenvolvido como uma simplificação do Planner que permitia a invocação orientada a padrões apenas a partir de objetivos (também baseado em backtracking ). A partir do Planner, foram desenvolvidas as linguagens de programação QA-4, Popler, Conniver, e QLISP. As linguagens de programação Mercury, Visual Prolog, Oz e Frill, foram desenvolvidas a partir do Prolog. Atualmente existem linguagens de programação lógica concorrente (não baseadas em backtracking ) derivadas do Planner (por exemplo, a Ether) e derivadas do Prolog (ver Shapiro 1989 para um apanhado geral).

História

A programação lógica é uma idéia que tem sido investigada no contexto da inteligência artificial pelo menos desde o momento em que John McCarthy [1958] propôs: "programas para manipular com sentenças instrumentais comuns apropriadas à linguagem formal (muito provavelmente uma parte do cálculo de predicado)". O programa básico formará conclusões imediatas a partir de uma lista de premissas. Essas conclusões serão tanto sentenças declarativas quanto imperativas. Quando uma sentença imperativa é deduzida, o programa toma uma ação correspondente.

Base na lógica matemática

O sentido da programação lógica é trazer o estilo da lógica matemática à programação de computadores. Matemáticos e filósofos encontram na lógica uma ferramenta eficaz para desenvolvimento de teorias. Vários problemas são naturalmente expressos como teorias. Dizer que um problema precisa de solução frequentemente equivale a perguntar se uma nova hipótese é consistente com uma teoria existente ou se é conseqüência dela. A lógica proporciona uma maneira de demonstrar se uma questão é verdadeira ou falsa. O processo de construir uma demonstração é bem conhecido, portanto a lógica é um meio confiável de responder perguntas. Sistemas de programação lógica automatizam este processo. A inteligência artificial teve uma influência importante no desenvolvimento da programação lógica.

Programação lógica (^13)

H :- Corpok

Como uma única fórmula equivalente H sse (Corpo 1 ou … ou Corpok)

Escrever o completamento também requer o uso explícito de predicado de igualdade e a inclusão de um conjunto de axiomas apropriados por igualdade. A noção de conclusão é estreitamente relacionada à técnica de circunscrição de McCarty para desenvolver um raciocínio não monotônico, e a suposição de um mundo fechado. Como uma alternativa para semânticas de completamento, negação por falha também pode ser interpretada epistemologicamente, assim como na semântica de modelo estável do conjunto de respostas. Nesta interpretação, not(Bi) significa literalmente que Bi não é conhecido ou não é acreditado. A interpretação epistêmica tem a vantagem que pode ser combinada muito simplesmente com a negação clássica, assim como na "lógica de programação estendida", para formalizar frases como "o contrário não pode ser mostrado", onde "contrario" está a negação clássica e "que não pode ser mostrado" é a interpretação epistêmica da negação por falha.

Implementações

A primeira implementação do Prolog foi a Marseille Prolog, desenvolvida em 1972. O uso do Prolog como uma linguagem de programação prática teve seu ápice com o desenvolvimento de um compilador por David Warren em Edinburgo, em 1977. Alguns experimentos demonstraram que o Edinburgh Prolog podia competir com a velocidade de processamento de outras linguagens de programação simbólica tais como Lisp. O Edinburgh Prolog tornou-se o padrão de facto e influenciou a definição de Prolog padrão ISO.

Limitações do uso da lógica matemática para a programação

John MacCarthy propôs que a lógica matemática fosse usada como o fundamento para a epistemologia de sistemas de computadores. Sob a liderança de Marvin Minsky e Seymour Papert, uma abordagem diferente baseada em procedimentos processuais foi desenvolvida no MIT. Quando o Planner foi desenvolvido, levantou-se o a questão sobre o relacionamento entre as duas abordagens. Robert Kowalski desenvolveu a tese que "computação pode concebida dedução" teve boa aceitação ao citar o slogan "a computação é uma dedução controlada," que ele atribuiu a Pat Hayes em seu artigo de 1988 no início da história do Prolog. Ao contrário de Kowalski e Hayes, Carl Hewitt desenvolveu a tese de que a dedução lógica era incapaz de executar computação concorrente em sistemas abertos. A resposta à questão sobre a relação entre as abordagens lógica e procedimental é que a abordagem procedimental tem uma semântica matemática diferente (ver semântica denotacional) da semântica da lógica matemática (ver teoria dos modelos).

Programação lógica concorrente

Keith Clark, Hervé Gallaire, Steve Gregory, Vijay Saraswat, Udi Shapiro, Kazunori Ueda, etc. desenvolveram uma família de sistemas concorrentes de passagem de mensagens do tipo Prolog, usando unificação de variáveis compartilhadas e fluxo de estrutura de dados para mensagens. Esforços foram feitos para basear esses sistemas em lógica matemática, e elas foram usadas como a base para o Projeto Japonês da Quinta Geração de Computadores. Como o modelo de atores, os sistemas com o Prolog concorrente são baseados em passagem de mensagens e conseqüentemente estavam sujeitos à mesma indeterminação. Esta foi a base de um argumento de Carl Hewitt e Gul Agha [1998] sugerindo que os sistemas com Prolog concorrente nem eram dedutivos nem lógicos.

Programação lógica (^14)

Programação de lógica de ordem superior

Diversos pesquisadores estenderam a programação lógica com as características da programação de ordem superior derivadas da lógica de ordem superior, tais como variáveis de predicado. Tais linguagens incluem as extensões do Prolog HiLog e λProlog.

Programação lógica linear

Basear a programação lógica na lógica linear resultou no projeto de linguagens de programação lógica que são consideravelmente mais custosas do que aquelas baseadas na lógica clássica. Programas com cláusulas de Horn (Prolog) podem apenas representar uma mudança de estado pela mudança em argumentos para predicados. Na programação lógica linear, pode-se usar a lógica linear como ambiente para dar suporte à mudança de estado. Alguns projetos iniciais das linguagens de programação lógica baseadas na lógica linear, incluem LO [Andreoli & Pareschi, 1991], Lolli [Hodas & Miller, 1994], ACL [Kobayashi & Yonezawa, 1994], e Forum [Miller, 1996].O Fórum proporciona a interpretação direcionada a objetivos de toda a lógica linear.

Domínios das aplicações

  • Sistema especialista, em que o programa gera uma recomendação ou resposta para um modelo grande do domínio de aplicação.
  • Demonstração automatizada de teorema, em que o programa gera teoremas, estendendo os existentes no corpo da teoria.

Ver também

  • Teoria da computação
  • Teoria dos conjuntos
  • Lógica
  • Linguagem de programação
  • Métodos formais
  • Paradigma de programação
  • Programação funcional

Ligações externas

  • Logic Programming Virtual Library entry [1]
  • Bibliographies on Logic Programming [2]
  • Association for Logic Programming (ALP) [3]
  • Theory and Practice of Logic Programming [4]^ journal

Referências

[1] http:/ / vl. fmnet. info/ logic-prog/ [2] http:/ / liinwww. ira. uka. de/ bibliography/ LogicProgramming/ [3] http:/ / www. cs. kuleuven. be/ ~dtai/ projects/ ALP/ [4] http:/ / www. cs. kuleuven. be/ ~dtai/ projects/ ALP/ TPLP/

Programação estruturada (^16)

Programação estruturada

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, desenvolvida por Michael A. Jackson no seu livro "Principles of Program Design" de 1975. 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 anterior à programação orientada por objetos. Apesar de ter sido sucedida pela programação orientada por objetos, pode-se dizer que a programação estruturada ainda é muito influente, uma vez que grande parte das pessoas ainda aprendem programação através dela. Além disso, por exigir formas de pensar relativamente complexas, a programação orientada a objetos até hoje ainda não é bem compreendida ou usada pela maioria.

Orientação a objeto

Orientação a objetos Objeto Classe

  • Instância Abstração Métodos Atributo Encapsulamento Herança
  • Herança múltipla Polimorfismo Outras referências Padrões de projeto UML Engenharia OO

A orientação a objetos , também conhecida como Programação Orientada a Objetos (POO) , ou ainda em inglês Object-Oriented Programming (OOP) é 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 de objetos. Em alguns contextos, prefere-se usar modelagem orientada ao objeto, em vez de programação. De fato, o paradigma "orientação a objeto", tem bases conceituais e origem no campo de estudo da cognição, que influenciou a área de inteligencia artificial e da linguística, no campo da abstração de conceitos do mundo real. Na qualidade de método de modelagem, é tida como a melhor estratégia para se eliminar o "gap semântico", dificuldade recorrente no processo de modelar o mundo real do domínio do problema em um conjunto de componentes de software que seja o mais fiel na sua representação deste domínio. Facilitaria a comunicação do profissional modelador e do usuário da área alvo, na medida que a correlação da simbologia e conceitos abstratos do mundo real e da ferramenta de modelagem (conceitos, terminologia, símbolos, grafismo e estratégias) fosse a mais óbvia, natural e exata possível.

Orientação a objeto (^17)

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. 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 (definido nos métodos) e estados possíveis (atributos) de seus objetos, assim como o relacionamento com outros objetos. C++, C#, Java, Object Pascal, Objective-C, Python, SuperCollider, Ruby e Smalltalk são exemplos de linguagens de programação orientadas a objetos. ActionScript, ColdFusion, Javascript, PHP (a partir da versão 4.0), Perl (a partir da versão 5) e VB.NET são exemplos de linguagens de programação com suporte a orientação a objetos.

Conceitos essenciais

  • Classe representa um conjunto de objetos com características afins. Uma classe define o comportamento dos objetos através de seus métodos, e quais estados ele é capaz de manter através de seus atributos. Exemplo de classe: Os seres humanos.
  • Subclasse é uma nova classe originada de sua classe pai.
  • Objeto é uma instância de uma classe. Um objeto é capaz de armazenar estados através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Exemplo de objetos da classe Humanos: João, José, Maria.
  • Atributos são características de um objeto. Basicamente a estrutura de dados que vai representar a classe. Exemplos: Funcionário: nome, endereço,telefone, CPF,....; Carro: nome, marca, ano, cor, …; Livro: autor, editora, ano. Por sua vez, os atributos possuem valores. Por exemplo, o atributo cor pode conter o valor azul. O conjunto de valores dos atributos de um determinado objeto é chamado de estado.
  • Métodos definem as habilidades dos objetos. Bidu é uma instância da classe Cachorro, portanto tem habilidade para latir, implementada através do método deUmLatido. Um método em uma classe é apenas uma definição. A ação só ocorre quando o método é invocado através do objeto, no caso Bidu. Dentro do programa, a utilização de um método deve afetar apenas um objeto em particular; Todos os cachorros podem latir, mas você quer que apenas Bidu dê o latido. Normalmente, uma classe possui diversos métodos, que no caso da classe Cachorro poderiam ser sente, coma e morda.
  • Mensagem é uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por sua classe. Também pode ser direcionada diretamente a uma classe (através de uma invocação a um método estático).
  • Herança (ou generalização) é o mecanismo pelo qual uma classe (sub-classe) pode estender outra classe (super-classe), aproveitando seus comportamentos (métodos) e variáveis possíveis (atributos). Um exemplo de herança: Mamífero é super-classe de Humano. Ou seja, um Humano é um mamífero. Há Herança múltipla quando uma sub-classe possui mais de uma super-classe. Essa relação é normalmente chamada de relação "é um".
  • Associação é o mecanismo pelo qual um objeto utiliza os recursos de outro. Pode tratar-se de uma associação simples "usa um" ou de um acoplamento "parte de". Por exemplo: Um humano usa um telefone. A tecla "1" é parte de um telefone.
  • Encapsulamento consiste na separação de aspectos internos e externos de um objeto. Este mecanismo é utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados. Exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo. A carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom).