O que é um objeto imutável?
Na programação orientada a objetos, um objeto imutável é um objeto cujas propriedades não podem ser alteradas após a criação. A maioria dos objetos, ao contrário, são objetos mutáveis, o que significa que algumas ou todas as suas propriedades podem ser alteradas livremente após a criação. Uma variedade de linguagens de computador tem a capacidade de criar objetos imutáveis, incluindo Java, C ++, erlang, Tcl e scala.
Um objeto imutável pode ser criado de duas maneiras: criando uma classe imutável por definição ou declarando explicitamente que um objeto mutável é imutável. A metodologia para criar uma classe imutável varia dependendo da linguagem de computador usada. Independentemente do idioma, uma classe imutável não deve ter métodos que possam alterar seus dados internos e nenhuma maneira de os métodos serem alterados - ou seja, substituídos ou sobrecarregados - de maneira a alterar seus dados internos. Essa é a mais complicada das duas abordagens. Para criar um objeto imutável a partir de um objeto mutável, por outro lado, pode-se aplicar uma palavra-chave para designar o objeto como imutável.
Como exemplo, a criação imutável de objetos em Java depende muito da palavra-chave "final". Uma maneira rápida de tornar uma classe imutável em Java é declarar final a classe, bem como todos os seus métodos e membros de dados. Uma estratégia semelhante também pode ser usada em C ++ com a palavra-chave "const". Entretanto, essas abordagens, dependendo do conteúdo da classe, podem não ser as melhores. Em geral, os objetos geralmente podem ser imutáveis pela manutenção cuidadosa de seus dados internos.
Tornar um objeto imutável usando uma palavra-chave, como no exemplo acima, geralmente é muito mais fácil do que escrever uma classe inteira para ser imutável. Usar essa abordagem, no entanto, tem seus perigos. Ao designar explicitamente um objeto imutável dessa maneira, é importante que o programador tenha certeza de que todas as propriedades e dados apropriados foram incorporados ao objeto primeiro. Confiar em um objeto incompleto pode ser perigoso, principalmente se estiver faltando uma informação essencial.
Se um objeto é mutável, mas exige que dados imutáveis sejam criados corretamente, os dados imutáveis devem ser inicializados antes que o objeto mutável possa ser criado. Objetos imutáveis são sempre imutáveis, sejam valores de dados ou objetos grandes, e sempre devem ser tratados como tal. Em geral, um objeto imutável não pode se tornar mutável após ter sido criado, embora às vezes possa ser copiado como objeto mutável. Geralmente, pode-se supor que um objeto imutável e qualquer uma de suas cópias também sejam imutáveis, o que pode impedir problemas de dados ou memória.