Na programação orientada a objetos (POO), o envio de mensagens (ou passagem de mensagens) é o mecanismo fundamental pelo qual objetos interagem. Diferente da programação procedural onde funções chamam outras funções diretamente, objetos POO se comunicam enviando mensagens — solicitações para outro objeto realizar uma operação. Este conceito, central no Smalltalk e influente em Java, C++, Python, Ruby, e Objective-C/Swift, fundamenta encapsulamento, polimorfismo, e baixo acoplamento.
Pense em objetos como atores independentes. Objeto A não alcança internamente o Objeto B para manipular dados. Em vez disso, A envia uma mensagem para B: "Por favor, faça X." B decide como atender essa requisição — qual método invocar, qual estado interno mudar, quais outros objetos mensagear em seguida. Esta separação de o quê (mensagem) de como (implementação do método) é a essência do encapsulamento.
Uma mensagem tipicamente compreende três elementos:
| Componente | Descrição | Exemplo |
|---|---|---|
| Receptor | O objeto alvo | contaUsuario |
| Seletor / Nome do Método | A operação solicitada | transferirFundos |
| Argumentos | Dados necessários para a operação | (valor: 500, para: contaPoupanca) |
Em muitas linguagens (Java, C++, C#), envio de mensagem parece uma chamada de método: contaUsuario.transferirFundos(500, contaPoupanca). Mas conceitualmente:
Esta distinção habilita polimorfismo: a mesma mensagem (desenhar()) enviada a objetos diferentes (Circulo, Quadrado, Texto) invoca implementações diferentes. O remetente não sabe nem liga para qual classe lida com isso.
| Aspecto | Síncrona (Bloqueante) | Assíncrona (Não-bloqueante) |
|---|---|---|
| Comportamento do remetente | Espera resposta | Continua imediatamente |
| Valor de retorno | Disponível diretamente | Via callback, future, promise, evento |
| Caso de uso | Consultas simples, cálculos | Operações longas, responsividade UI, sistemas distribuídos |
| Exemplos | Maioria chamadas método POO | Modelo Actor (Akka, Erlang), event loops, filas mensagens |
[receptor seletor: arg] / receptor.seletor(arg). Dispatch dinâmico verdadeiro.receptor.metodo(arg) — na verdade envio de mensagem; method_missing intercepta mensagens desconhecidas.receptor.metodo(arg) — chama __getattribute__ depois __call__; dinâmico.usuario.ativar() não usuario.definirAtivoVerdadeiro()O conceito de mensagem escala além de um único processo:
Seja dentro de uma única aplicação ou através de microsserviços, envio de mensagens permanece a abstração unificadora para comunicação de componentes. Dominá-lo — entender quando usar síncrono vs. assíncrono, como desenhar contratos de mensagem claros, e como alavancar polimorfismo — separa desenvolvedores POO novatos de arquitetos que constroem sistemas flexíveis e mantíveis.
Tecnologia Eletrônica © [www.351231.com]