Então até imperativo e funcional podem ser usados juntos, ainda que aí existe um paradigma que seja forte e o outro só auxiliar. C# é um exemplo de linguagem imperativa que está cada dia mais funcional, mas nunca deixará de ser predominantemente imperativa, e manterá sua orientação a objeto (mas que tem papel cada vez menos importante, desde o 2.0 isso vem caindo). Complementando de acordo com os comentários abaixo, os conceitos são ortogonais, e se não ficou claro, em linguagens do “mundo real” ou elas são funcionais ou são imperativas com características orientadas a objeto. A programação funcional baseia-se no conceito matemático de função, em que para cada elemento do seu conjunto domínio (entrada) há apenas um elemento no seu conjunto contra-domínio (saída). Além disso, as funções são normalmente expressas por meio de outras funções – de modo que obter o valor da função para um determinado conjunto de parâmetros envolve não só aplicar as regras daquela função, mas também fazer uso de outras funções.
O objetivo desse bloco de código é calcular o desconto do cliente especial (linha 29), considerando esse valor no cálculo do valor total do pedido (linha 31). Na forma puramente orientada a objetos, as funcionalidades são designadas aos conceitos aos quais elas pertencem. Como existe informação suficiente relativa ao conceito de produto, Como se preparar para o futuro do desenvolvimento web é originada a classe Produto, declarada na Listagem 10, sendo mais uma das classes que representam os conceitos pertencentes à aplicação. Continuando a declaração da classe Programa1, na Listagem 3, é apresentado o método main(), responsável por realizar a venda, deduzindo os itens vendidos do estoque, e exibir um relatório na tela.
Nessa analogia, uma pessoa pode não estar satisfeita com a aceleração do carro e modifica a forma como ela ocorre, criando efeitos colaterais que podem fazer o carro nem andar, por exemplo. Seu carro é um objeto seu mas na loja onde você o comprou existiam vários outros, muito similares, com quatro rodas, volante, câmbio, retrovisores, faróis, dentre outras partes. Observe que, apesar do seu carro ser único (por exemplo, possui um registro único no Departamento de Trânsito), podem existir outros com exatamente os mesmos atributos, ou parecidos, ou mesmo totalmente diferentes, mas que ainda são considerados carros. Podemos dizer então que seu objeto pode ser classificado (isto é, seu objeto pertence à uma classe) como um carro, e que seu carro nada mais é que uma instância dessa classe chamada “carro”. A diferença principal é que na programação estruturada, um programa é tipicamente escrito em uma única rotina (ou função) podendo, é claro, ser quebrado em subrotinas.
Existem linguagens que implementam diversos paradigmas de programação, como POO e programação funcional, ao mesmo tempo. Oferecendo ambas formas de programar em uma mesma linguagem, podendo até mesmo intercalar os dois tipos, ou até outros, em um mesmo código. Mas em linguagens de programação funcionais, esse código é perfeitamente adequado, e correto seguindo os padrões da linguagem.
Sendo os dois principais as linguagens orientadas a objeto, e as linguagens funcionais. Muito se fala sobre programação orientada a objetos, hoje em dia já é algo tão familiar aos programadores que se acaba esquecendo que há algum tempo a programação estruturada dominava amplamente. Nas universidades a iniciação as https://novomomento.com.br/como-se-preparar-para-o-futuro-do-desenvolvimento-web/ linguagens de programação, são em sua grande maioria linguagens estruturadas, por ser uma fase de adaptação a lógica que escrever códigos impõe. Dessa forma, aplicamos diretamente o conceito de polimorfismo, pois podemos ter objetos da classe Cliente que são clientes normais e outros que são clientes especiais.