Computer Science › Algoritmos e Software
Um paradigma é uma postura fundamental sobre o que um "passo" computacional significa, uma lente através da qual se olha um problema, não uma propriedade fixada pela linguagem; comparar como o mesmo pequeno problema é resolvido em estilos genuinamente diferentes é o que torna a diferença concreta.
Duas suposições fundacionais opostas sobre o que tarefas concorrentes têm permissão para tocar, memória compartilhada versus mensagens explícitas, e por que essa única escolha determina se condições de corrida sequer podem existir.
Um programa lógico é um banco de dados de fatos e regras onde uma consulta é resolvida por unificação automática, a realização mais antiga e literal da ideia de "o quê, não como" que reaparece depois como programação declarativa.
SQL leva a divisão entre descrever um resultado e escrever o procedimento que o produz ao seu extremo, deixando toda decisão de execução para um motor de propósito geral, o mesmo movimento estrutural já visto em programação lógica.
Programação imperativa é o paradigma no qual todo programa anterior neste currículo foi escrito, sem que o fato fosse nomeado até agora; seu traço definidor é estado mutável mudado por instruções ordenadas, explícitas, capturado no padrão acumulador.
Uma classe empacota dados e as operações sobre eles em um único molde; encapsulamento é o que dá ao invariante da divisão interface/implementação de um TAD uma fronteira real, aplicada pela linguagem, roteando toda mudança através de métodos que podem recusá-la.
Uma subclasse estende uma superclasse, ganhando automaticamente seus atributos e métodos sem duplicar código, e seletivamente sobrescreve só o que precisa diferir; esse reúso não é grátis, o problema da classe base frágil é uma consequência estrutural direta do acoplamento que cria.
Polimorfismo é código chamador invocando o mesmo nome de método em objetos de tipos diferentes, confiando no despacho dinâmico para resolver a sobrescrita correta em tempo de chamada; é o ganho direto para o qual herança se preparava, eliminando ramificação por tipo.
Uma função pura depende só de seus argumentos e não produz efeitos colaterais observáveis; a armadilha clássica do argumento padrão mutável mostra como pureza é quebrada acidentalmente, e imutabilidade é o que a torna estruturalmente aplicável em vez de uma disciplina manual.
Map, filter, e reduce transformam "funções são valores" no idioma central de um paradigma inteiro, cada uma parametrizada por uma pequena função descrevendo o quê fazer, abstraindo o loop explícito e a variável acumuladora que a versão imperativa escreve manualmente.
Uma closure é o mecanismo que permite a uma função retornada carregar consigo um pedaço de estado configurado em seu escopo de criação, mantendo aquele estado vivo muito depois de a chamada externa que o criou já ter retornado.
O `match` do Python transforma checar-a-forma-e-extrair-as-partes em uma única construção direta, aproximando (sem a garantia de exaustividade verificada pelo compilador) o estilo de tipos de dados algébricos de linguagens da família ML/Haskell.
Sem mutação permitida, um contador de laço ou acumulador não tem onde viver, então linguagens funcionais tornam a recursão, não uma alternativa ocasional, o mecanismo padrão para expressar qualquer repetição.
Uma tabela de síntese conectando a forma de um problema real a qual dos seis paradigmas se encaixa melhor, e a percepção de encerramento de que quase nenhum sistema real se compromete com exatamente um.
Part of the Computer Science curriculum.
Um paradigma é uma postura fundamental sobre o que um "passo" computacional significa, uma lente através da qual se olha um problema, não uma propriedade fixada pela linguagem; comparar como o mesmo pequeno problema é resolvido em estilos genuinamente diferentes é o que torna a diferença concreta.
Duas suposições fundacionais opostas sobre o que tarefas concorrentes têm permissão para tocar, memória compartilhada versus mensagens explícitas, e por que essa única escolha determina se condições de corrida sequer podem existir.
Um programa lógico é um banco de dados de fatos e regras onde uma consulta é resolvida por unificação automática, a realização mais antiga e literal da ideia de "o quê, não como" que reaparece depois como programação declarativa.
SQL leva a divisão entre descrever um resultado e escrever o procedimento que o produz ao seu extremo, deixando toda decisão de execução para um motor de propósito geral, o mesmo movimento estrutural já visto em programação lógica.
Programação imperativa é o paradigma no qual todo programa anterior neste currículo foi escrito, sem que o fato fosse nomeado até agora; seu traço definidor é estado mutável mudado por instruções ordenadas, explícitas, capturado no padrão acumulador.
Uma classe empacota dados e as operações sobre eles em um único molde; encapsulamento é o que dá ao invariante da divisão interface/implementação de um TAD uma fronteira real, aplicada pela linguagem, roteando toda mudança através de métodos que podem recusá-la.
Uma subclasse estende uma superclasse, ganhando automaticamente seus atributos e métodos sem duplicar código, e seletivamente sobrescreve só o que precisa diferir; esse reúso não é grátis, o problema da classe base frágil é uma consequência estrutural direta do acoplamento que cria.
Polimorfismo é código chamador invocando o mesmo nome de método em objetos de tipos diferentes, confiando no despacho dinâmico para resolver a sobrescrita correta em tempo de chamada; é o ganho direto para o qual herança se preparava, eliminando ramificação por tipo.
Uma função pura depende só de seus argumentos e não produz efeitos colaterais observáveis; a armadilha clássica do argumento padrão mutável mostra como pureza é quebrada acidentalmente, e imutabilidade é o que a torna estruturalmente aplicável em vez de uma disciplina manual.
Map, filter, e reduce transformam "funções são valores" no idioma central de um paradigma inteiro, cada uma parametrizada por uma pequena função descrevendo o quê fazer, abstraindo o loop explícito e a variável acumuladora que a versão imperativa escreve manualmente.
Uma closure é o mecanismo que permite a uma função retornada carregar consigo um pedaço de estado configurado em seu escopo de criação, mantendo aquele estado vivo muito depois de a chamada externa que o criou já ter retornado.
O `match` do Python transforma checar-a-forma-e-extrair-as-partes em uma única construção direta, aproximando (sem a garantia de exaustividade verificada pelo compilador) o estilo de tipos de dados algébricos de linguagens da família ML/Haskell.
Sem mutação permitida, um contador de laço ou acumulador não tem onde viver, então linguagens funcionais tornam a recursão, não uma alternativa ocasional, o mecanismo padrão para expressar qualquer repetição.
Uma tabela de síntese conectando a forma de um problema real a qual dos seis paradigmas se encaixa melhor, e a percepção de encerramento de que quase nenhum sistema real se compromete com exatamente um.