terminologia - O que significa "ad-hoc" no contexto da computação? - Stack Overflow em Português
Eventualmente vejo alguns termos precedidos por "ad-hoc", mas ainda não consegui entender direito o que significa.
Quando utiliza-se "ad-hoc" em um termo relacionado à computação, existe um significado comum? O que significa "ad-hoc"?
Por exemplo, ad-hoc polymorphism seria um nome no qual "ad-hoc" não tem significado especial? Ou há um significado comum em "ad-hoc" que também pode ser utilizado em outras situações?
perguntada 15/04 às 22:36
Creio que um bom começo é entender a locução. dicionario.priberam.org/ad%20hoc - ad-hoc é "fim específico", "finalidade específica".
15/04 às 22:45
O termo significa que algo existe para um fim específico, que tem uma característica só para o objeto de que se trata ali.
Eu acredito, mas não tenho certeza que ad hoc polymorphism indique que é a forma mais específica de polimorfismo, que se contrapõe à forma mais genérica, que de fato chama-se generics. Eu explico sobre polimorfismo, incluindo o ad hoc em Polimorfismo em linguagem procedural (também e ainda, siga os links), mas acho que a pergunta não é sobre isto.
Os termos sempre podem ser usados em contextos próprios e podem inclusive surgir novos.
Encontrei 3 definições específicas na Wikipedia, podem existir mais:
Uma delas é corroborada pela versão em inglês que é um pouco mais confiável.
A ideia de fazer algo que funcione, que resolve, ou quebra gralho, uma gambi, ou um código throw away é defendida no SOen. Mas lá há quem chame de código escrito on the fly de ad hoc.
Há quem disse inclusive que o termo é usado para se opor ao software de prateleira (COTS), o que aqui chamados de específico mesmo.
editada 16/04 às 13:21
respondida 15/04 às 22:46
Aproveitando o link que o @Bacco comentou: https://dicionario.priberam.org/ad%20hoc
(locução latina que significa "para isso") Que se destina a um fim específico.
Ouvi esse termo muitas vezes relacionado a queires de banco de dados, o que da pra entender bem a sua aplicação também na informática:
Um sistema qualquer permite consultar um produto por nome, logo temos uma query "genérica" que é aplicada para toda as consultas de produto por nome, que inclusive por ser assim, pode até ser encapsulada numa stored procedure:
SELECT * FROM PRODUTO WHERE NOME='BATATAS'
Onde apenas informamos o valor de "BATATAS". Agora se tem uma situação que precisa consultar um produto por nome, mas também um produto que esteja ativo, que tenha sido cadastrado numa data específica, etc, isso seria uma consulta Ad hoc, ou seja, vai ser usada para um fim específico, diferente da query "genérica" que tem um propósito "geral".
Sobre Ad hoc polymorphism, o conceito seria o mesmo, um "polimorfismo específico" ou "para um determinado fim". E como seria isso?
Bem, o polimorfismo (ou muitas formas) é um dos conceitos da orientação a objeto onde um método pode se comportar de forma diferentes, tendo o mesmo contrato, em classes diferentes.
Podemos aplicar o polimorfismo com interfaces ou apenas classes:
public int Calcular(int num1, int num2)
public class CalculoAlternativo : Calculo
Aqui vemos o polimorfismo do método Calcular, ele tem a mesma assintura (nome e parâmetros), mas se comporta de forma diferente na classe Calculo e CalculoAlternativo.
O polimorfismo ad hoc é aquele que é criado para um fim específico, ou seja, os parâmetros são diferentes e ele deve ter um comportamento diferente para atender um fim específico. Isso pode ser implementado através da sobrecarga, ou overloading:
public int Calcular(int num1, int num2, bool soPositivo)
if (soPositivo && resultado < 0)
Neste caso, o método tem o mesmo nome, mas se comporta de forma diferente, e recebe parâmetros diferentes.