Estou programando em Java em um estilo muito orientado a objetos (OO). OOP é muito intuitivo para mim, mas tenho muito pouco conhecimento sobre outros tipos de programação.
O que exatamente é a programação processual ? Como exatamente é diferente de OOP? É a mesma coisa que programação funcional ?
Eu costumava pensar que toda a programação que não é OO é procedural. Mas estou começando a pensar que isso não é verdade.
object-oriented
procedural
Aviv Cohn
fonte
fonte
Respostas:
A Wikipedia tem boas explicações para esses termos. Independentemente disso, aqui está o resumo:
A programação declarativa é o oposto da programação imperativa - especifica o que calcular e não como (por exemplo, SQL, expressões regulares).
A programação funcional modela a computação como expressões que (podem) produzem valores. Funções são valores e podem ser passadas ou retornadas de outras funções. A mutação é desencorajada; todas as variáveis são imutáveis por padrão. Como resultado, é mais declarativo do que imperativo, pois enfatiza o que está sendo calculado, em vez da sequência de mudanças de estado necessárias para alcançá-lo.
Seus relacionamentos são um pouco complicados porque POO é um termo bastante carregado. Você pode usar objetos nas linguagens funcionais e nas procedurais, mas os idiomas que se anunciam como OO são procedurais. Para confundir ainda mais o problema:
Isso faz com que as pessoas pensem que OOP é a única maneira de obter abstração, e que a programação funcional e o OOP são de alguma forma opostos ou mutuamente exclusivos. Muitas pessoas também pensam que todas as linguagens funcionais são puras e não permitem mutações.
Além disso, as pessoas geralmente discutem o imperativo / o procedimento de maneira intercambiável, às vezes contrastando com OOP (implicando código sem abstração, geralmente C) e às vezes contrastando com programação funcional. O termo programação estruturada caiu em desuso, até onde posso perceber (provavelmente porque, neste momento, a maioria das pessoas tem como certo que goto e globals são considerados prejudiciais).
fonte
A programação processual é uma abordagem da programação que é um dos elementos básicos dos blocos de construção de muitos outros designs de linguagem (funcional não sendo um).
A maioria dos idiomas se enquadra no conjunto de "Programação Procedimental" e é provavelmente a abordagem de design mais natural para a maioria das pessoas (se você pensa em termos de OO, diria que é uma minoria).
BASIC é processual.
Como outros já disseram, é um mecanismo para estruturar programas de maneira seqüencial.
Requer um mecanismo para definir "procedimentos" - blocos de código nomeado semelhantes aos métodos OO, que podem aceitar zero a muitos parâmetros e, opcionalmente, retornar um valor (que geralmente seria chamado de função - provavelmente levando à sua confusão com linguagens funcionais). )
O paradigma não determina quais serão as coisas que você fará ou a maneira como as coisas estão sendo repassadas.
Simplesmente descreve que o programa será estruturado como uma série de procedimentos (ou funções) que operam de maneira seqüencial. Os dados são então definidos independentemente dos procedimentos.
Isso difere da programação orientada a objetos, que estrutura o programa em torno de coleções de dados e métodos (não funções) que atuam nesses dados.
Uma maneira de pensar sobre isso é em termos de escopo de dados.
Em uma linguagem processual, o escopo é bastante simples. Uma variável pode estar no escopo de um determinado procedimento (declarado localmente), até o nível da principal coisa que chama coisas (declaradas globalmente), com escopos aninhados entre.
Em uma linguagem orientada a objetos, você adiciona um novo contexto de escopo, sendo o objeto atualmente em uso, ortogonal ao acima.
Outra maneira de pensar em procedimentos, em comparação com orientada a objetos, é considerar uma linguagem orientada a objetos em que todos os métodos devem ser declarados como estáticos. O resultado é uma linguagem processual em que as classes podem ser usadas para agrupar procedimentos.
fonte
Programação procedural definitivamente não é programação funcional.
A programação processual é quando você tem um modelo do computador como uma máquina em sua cabeça e pensa em como está modificando os dados na memória. Então, primeiro defina
A
o valor 3, adicione 1 e armazene-o no local da memóriaA
novamente (substituindo o valor anterior).A programação funcional seria dizer que
A
é 3 eB
éA + 1
e, em seguida, deixar o computador descobrir como calcularB
. Depois de definidoA
, deve ser imutável (sem alterações). O Functional também permite que você faça coisas como passar uma função como um valor de primeira classe (uma função pode assumir uma função como argumento).A programação orientada a objetos geralmente combina os dois e é meio ortogonal a ambos. Você pode usar a programação funcional e retornar um objeto imutável, e esse objeto pode ter um método que retorna algum valor calculado e até mesmo o faz preguiçosamente - isso é programação orientada a objetos funcional. Você também pode ter um objeto que represente um "repositório" (versão abstrata de um banco de dados) e pode "salvar" itens no repositório e "obter" itens de volta e deixar que o objeto lide com todos os detalhes de como isso é feito. . Isso é basicamente programação procedural orientada a objetos.
fonte
OOP nada mais é do que uma forma um pouco refinada de programação procedural, que novamente pertence à família maior de programação imperativa. A prova dessa afirmação é que muitos programadores de C # / Java tendem a "fazer alguma coisa" e preferem métodos como:
Portanto, um programa que consiste em vários métodos void (anteriormente conhecidos como procedimentos (sic!)) E códigos como:
é uma programação processual perfeita.
fonte