Pergunta

Eu tenho trabalhado como desenvolvedor para os últimos 4 anos, com os 4 anos anteriores para que o desenvolvimento de software estudar na faculdade. Nos meus 4 anos na indústria Eu tenho feito alguns trabalhos em VB6 (que era uma piada), mas a maior parte está em C # / ASP.NET. Durante este tempo, eu mudei de um paradigma processual "objeto-aware" para um paradigma orientado a objetos.

Ultimamente tenho estado curioso sobre outros paradigmas de programação lá fora, então eu pensei que eu ia perguntar outros desenvolvedores as suas opiniões sobre as semelhanças e diferenças entre esses paradigmas, especificamente para OOP? Em OOP, eu acho que há um forte foco nas relações e interações lógicas entre conceitos. Quais são os quadros mentais que você tem que estar em outros paradigmas?

Foi útil?

Solução

De longe as melhores explicações de paradigmas de programação são encontrados nas obras de Peter van Roy. Especialmente no livro Conceitos, técnicas e modelos de programação de computador por Peter Van Roy e Seif Haridi . ( Aqui está o wiki companheiro .) CTM usa o multi-paradigma distribuído Oz linguagem de programação para introduzir todos os principais paradigmas de programação.

Peter van Roy também fez este cartaz surpreendente que mostra os 34 principais paradigmas e suas relações e em posições diferentes eixo . O cartaz é basicamente uma versão incrivelmente compactada do CTM. Uma explicação mais detalhada desse cartaz é contida no artigo Programação Paradigmas para Dummies: O que cada programador deve Saber que apareceu como um capítulo no livro New Computacional Paradigmas para Computer Music , editado por G. Assayag e A. Gerzso.

Outra grande livro que demonstra vários paradigmas principais de programação é Estrutura e Interpretação de Programas de computador por Harold Abelson e Gerald Jay Sussman . Este livro foi a base do CS101 do MIT durante várias décadas. Um curso ministrado por Abelson e Sussman si foi gravado em um treinamento corporativo para Hewlett Hewlett-Packard em 1986 .

A principal diferença entre CTM e SICP é que CTM demonstra a maioria dos principais paradigmas usando uma linguagem que apoia-los (principalmente distribuídas Oz, mas também alguns outros). SICP OTOH demonstra-los por implementação -los em uma linguagem que faz não apoiá-los de forma nativa (um subconjunto do Esquema). Vendo orientação a objetos implementados em uma dúzia de linhas de código é maldito incrível.

Você pode encontrar gravações de vídeo e materiais do curso do curso da Primavera de 2005 no MIT OpenCourseWare website . Outra gravação do curso de curta duração do projeto Universidade ArsDigita do MIT. SICP também foi ensinado em outras universidades, de fato ele está sendo ensinado em Berkley agora .

Em uma nota pessoal, a minha experiência tem sido que realmente compreender um paradigma de programação só é possível

  • um paradigma de cada vez e
  • em idiomas que força você no paradigma

O ideal seria usar uma linguagem que leva o paradigma ao extremo. Em linguagens multi-paradigma, é muito muito fácil "enganar" e cair para trás em um paradigma que você está mais confortável com. E usando um paradigma como uma biblioteca só é realmente possível em línguas como o esquema que são projetados especificamente para este tipo de programação. Aprender programação funcional preguiçoso em Java, por exemplo, não é uma boa idéia, embora haja bibliotecas para isso.

Eis alguns dos meus favoritos:

  • orientação a objetos em geral : Auto
    • com base em protótipo orientação a objetos : Auto
    • baseada em classes orientação a objetos : Novilíngua
      • baseada em classes orientação a objeto estático : Eiffel
    • múltipla expedição OO baseada : Dylan
    • funcional + objeto-orientação : Scala
  • programação funcional : Haskell
    • programação funcional pura : Haskell
      • programação funcional pura preguiça : Haskell
    • programação funcional estática : Haskell
    • programação funcional dinâmica : Clojure
  • programação imperativa : Lua
  • programação concorrente : Clojure
    • programação concorrente de passagem de mensagens : Erlang
  • metaprogramming : Esquema
  • programação orientada a linguagem : intencional Domínio Workbench

Outras dicas

Aqui é a minha opinião:

  • meios de programação funcional escrever funções que levam em dados e operar nele. Você construir aplicações de grande porte, reunindo funções.
  • programação encapsulado de dados orientado a objetos e seus operadores juntos em um único componente que mapeia modelos mentais também. Você construir grandes aplicações fora de objetos de colaboração.
  • A programação declarativa (por exemplo, SQL) separa o que é feito a partir de como ele é feito. Você diz a um banco de dados relacional que você gostaria que ele faça e deixar a condução para o mecanismo de consulta.

este link tenta explicar algo que eu usei ao longo das últimas duas décadas. Menciono isso porque é comprovadamente útil e acho que isso conta como um paradigma, porque usá-lo, você precisa pensar em uma maneira particular.

A maneira diferente, você tem que pensar é que ao analisar um problema, em vez de perguntar o que os objetos existem e quais ações tomar lugar, você começa com os requisitos gerais e pedir O que precisa ser dito?

A partir disso, você escolher ou projetar a-específico do idioma de domínio (DSL), e indicar o seu problema nesse idioma.

Esse link explica uma determinada língua para descrever dinamicamente mudando interfaces de usuário de diálogo. Sua implementação depende de uma estrutura de controle particular, Execução Diferencial. O que ele realiza é uma ordem de redução de magnitude no código fonte, com menos chances de erros de codificação. Essas economias podem então ser gasto em fazer a interface do usuário mais sofisticada.

Para outros tipos de problemas, outras estruturas de controle são apropriados, mas o conceito de trabalho através de uma conexão DSL bem escolhido, fazendo código fonte muito menor, mais facilmente modificado, e menos propenso a erros, é a abordagem comum.

Eu acho que os paradigmas de programação funcional e OOP são melhor avaliados através da identificação dos tipos de problemas para os quais eles são a melhor expressão. Muitas vezes, estes paradigmas simplesmente tornar-se bandwagons e são apregoados como a cura para todos os males, ao invés de classificá-los pelos espaços problema que resolver.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top