# Objetos

Objetos são instâncias de classes. É através deles que (praticamente) todo o processamento ocorre em sistemas implementados com linguagens de programação orientadas a objetos. O uso racional de objetos, obedecendo aos princípios associados à sua deﬁnição conforme estabelecido no paradigma de desenvolvimento orientado a objetos, é chave para o desenvolvimento de sistemas complexos e eﬁcientes.
Um objeto é um elemento que representa, no domínio da solução, alguma entidade (abstrata ou concreta) do domínio de interesse do problema sob análise. Objetos similares são construídos a partir de uma mesma classe.
No paradigma de orientação a objetos, tudo pode ser potencialmente representado como um objeto. Sob o ponto de vista da programação orientada a objetos, um objeto não é muito diferente de uma variável normal. Por exemplo, quando deﬁne-se uma variável do tipo int em uma linguagem de programação como C ou Java, essa variável tem:
* um espaço em memória para registrar o seu estado (valor); e
* um conjunto de operações que podem ser aplicadas a ela, através dos operadores deﬁnidos na linguagem que podem ser aplicados a valores inteiros.
Da mesma forma, quando se cria um objeto, esse objeto adquire um espaço em memória para armazenar seu estado (os valores de seu conjunto de atributos, deﬁnidos pela classe) e um conjunto de operações que podem ser aplicadas ao objeto (o conjunto de métodos deﬁnidos pela classe).
Um programa orientado a objetos é composto por um conjunto de objetos que interagem através de trocas de mensagens. Na prática, essa troca de mensagem traduz-se na aplicação de métodos a objetos.
As técnicas de programação orientada a objetos recomendam que a estrutura de um objeto e a implementação de seus métodos devem ser tão privativos quão seja possível. Normalmente, os atributos de um objeto não devem ser visíveis externamente. Da mesma forma, de um método deve ser suﬁciente conhecer apenas sua especiﬁcação, sem necessidade de saber detalhes de como a funcionalidade que ele executa é implementada.
Encapsulação é o princípio de projeto pelo qual cada componente de um programa deve agregar toda a informação relevante para sua manipulação como uma unidade (uma cápsula). Aliado ao conceito de ocultamento de informação, é um poderoso mecanismo da programação orientada a objetos.
Ocultamento da informação é o princípio pelo qual cada componente deve manter oculta sob sua guarda uma decisão de projeto única. Para a utilização desse componente, apenas o mínimo necessário para sua operação deve ser revelado (tornado público).
Na orientação a objetos, o uso da encapsulação e ocultamento da informação recomenda que a representação do estado de um objeto deve ser mantida oculta. Cada objeto deve ser manipulado exclusivamente através dos métodos públicos do objeto, dos quais apenas a assinatura deve ser revelada. O conjunto de assinaturas dos métodos públicos da classe constitui sua interface operacional. Dessa forma, detalhes internos sobre a operação do objeto não são conhecidos, permitindo que o usuário do objeto trabalhe em um nível alto de abstração, sem preocupação com os detalhes internos da classe. Essa facilidade permite simpliﬁcar a construção de programas com funcionalidades complexas, tais como interfaces gráﬁcas ou aplicações distribuídas.