Na programação orientada a objetos e funcional, um objeto imutável é um objeto cujo estado não pode ser alterado após ser criado. A API pública de um objeto imutável garante que ele se comportará da mesma maneira durante seu tempo de vida. Em alguns casos, um objeto é considerado imutável mesmo se os atributos usados internamente mudam, mas o estado do objeto parece inalterado de um ponto de vista externo. Abaixo está um exemplo de uma classe básica imutável:
class User {
final privado longo Eu iria;
String final privada nome;
Usuário (longo id Tanga nome) {
esta.id = Eu iria;
esta.nome = nome;
}}
Todos os campos são finais, o que significa que o compilador é informado de que seus valores não devem ser alterados depois de inicializados. Todos os valores de campo são então passados para o construtor.
Benefícios de objetos imutáveis
Como o objeto é imutável, os usuários sabem exatamente o que esperar dele. O código não pode ser alterado, o que significa que não há oportunidade de introduzir inconsistências que podem levar a erros de tempo de execução. Objetos imutáveis são thread-safe, portanto, problemas de sincronização são evitados. Eles são mais fáceis de projetar, implementar e usar do que classes mutáveis.
Depois que um objeto imutável é criado e verificado, nenhum outro thread ou processo de segundo plano será capaz de alterar o objeto sem o conhecimento direto do usuário. Isso é útil para programas que precisam de alta segurança. Quando surge um problema, a depuração é mais fácil com objetos imutáveis porque a origem de um bug pode ser facilmente rastreada.
Objetos imutáveis vs. mutáveis
Enquanto objetos imutáveis não podem mudar seu estado, objetos mutáveis podem. Objetos mutáveis fornecem métodos para alterar o conteúdo de um objeto e não são seguros para thread como objetos imutáveis.
Em Java, exemplos de objetos mutáveis incluem StringBuilder e java.util.Date. Exemplos de objetos imutáveis incluem todas as classes legadas, classes de wrapper e classes de string.
Em Python, exemplos de tipos mutáveis incluem list, dict e set. Os tipos imutáveis em Python incluem int, float, bool, string, unicode e tupla.