Classe (programação)

Em programação de computadores e, particularmente, na programação orientada a objetos, uma classe é uma construção de uma linguagem de programação utilizada para definir um tipo de dados e descrever os membros associados às suas instâncias, como atributos, métodos e construtores. Em linguagens baseadas em classes, os objetos criados a partir de uma classe são chamados de instâncias dessa classe. A definição descreve características e operações comuns, enquanto cada instância pode manter os seus próprios valores e estado.

Uma classe pode representar uma entidade concreta, como uma pessoa ou um veículo, um conceito abstrato, como uma conta bancária, ou um componente interno de um programa. As classes são utilizadas para organizar dados e operações, estabelecer interfaces entre componentes e definir relações entre tipos de objetos.

Estrutura e membros da classe

Uma classe pode conter diferentes tipos de membros. Os termos utilizados e as regras de declaração variam conforme a linguagem de programação.

Por exemplo, a classe `Conta`, em Java, pode definir um campo para representar o saldo e métodos para o consultar ou alterar:

public class Conta {
    private double saldo;

    public Conta(double saldoInicial) {
        saldo = saldoInicial;
    }

    public void depositar(double valor) {
        saldo += valor;
    }

    public double consultarSaldo() {
        return saldo;
    }
}

Nesse exemplo, `saldo` é um campo da instância, enquanto `depositar` e `consultarSaldo` são métodos. A chamada `new Conta(100.0)` cria uma instância e invoca o construtor com o valor inicial indicado. A classe define, assim, a estrutura comum das contas, mas cada instância pode manter um saldo diferente.

Construtores e destruição de objetos

Os construtores são utilizados para estabelecer as condições iniciais de uma instância. Uma linguagem pode fornecer um construtor padrão quando não é declarado um construtor pelo programador, mas as regras para esse comportamento não são universais.

Algumas linguagens também dispõem de mecanismos associados ao fim do ciclo de vida de um objeto. Em C++, o destrutor é uma função-membro especial chamada quando termina o tempo de vida do objeto e pode ser utilizada para libertar recursos que este tenha adquirido. Esse mecanismo não deve ser confundido com a coleta de lixo utilizada por linguagens como Java, que gere a recuperação da memória dos objetos. O momento e o modo de libertação de recursos dependem da linguagem e dos mecanismos específicos que ela disponibiliza.

Encapsulamento e acesso aos membros

O encapsulamento é um princípio da programação orientada a objetos que reúne dados e operações e permite controlar a forma como os componentes de um programa interagem com eles. Uma classe pode ocultar detalhes da sua implementação e disponibilizar uma interface por meio de métodos, propriedades ou outros membros acessíveis. A finalidade é reduzir a dependência de outros componentes em relação à organização interna da classe.

Muitas linguagens oferecem modificadores de acesso para controlar a visibilidade de classes e dos seus membros. Entre os mais comuns estão:

Outros níveis podem estar disponíveis. Em Java, por exemplo, um membro sem modificador explícito pode ser acessível dentro do mesmo pacote, enquanto C# dispõe de modificadores como `internal`, relacionados à acessibilidade dentro de um assembly.

O encapsulamento não exige que todas as linguagens imponham exatamente o mesmo modelo de acesso, nem significa que todo dado tenha de ser consultado exclusivamente por métodos. A definição da interface pública e dos detalhes internos depende das características da linguagem e das decisões de projeto.

Herança

Representação de uma relação de herança entre classes em UML.

A herança é um mecanismo pelo qual uma classe pode derivar de outra e reutilizar ou especializar parte dos seus membros. A classe de origem é chamada de classe-base ou superclasse, e a classe derivada é chamada de subclasse. Uma subclasse pode acrescentar novos membros e, quando a linguagem permite, redefinir determinados comportamentos herdados.

A herança pode favorecer a reutilização de código e a organização de tipos relacionados, mas as suas regras dependem da linguagem. Python e C++, por exemplo, permitem que uma classe herde de mais de uma classe-base. Java e C# permitem herança de uma única classe-base direta, embora também ofereçam mecanismos de interface para que uma classe implemente múltiplos contratos de tipo.

Polimorfismo

O polimorfismo permite que uma operação ou interface comum seja utilizada com objetos de tipos diferentes, cujos comportamentos podem variar de acordo com a implementação concreta. Em linguagens que suportam a redefinição de métodos, uma subclasse pode fornecer uma implementação específica de um método herdado. Quando uma operação polimórfica é invocada, o comportamento executado depende das regras de resolução e despacho da linguagem.

A herança e o polimorfismo estão relacionados em muitas linguagens orientadas a objetos, mas não são conceitos idênticos: a herança define uma relação entre tipos, enquanto o polimorfismo descreve a possibilidade de utilizar uma interface ou operação com implementações ou tipos distintos.

Classes abstratas e concretas

Uma classe abstrata é uma classe que não pode ser instanciada diretamente, sendo destinada, em geral, a definir uma base comum para outras classes. Pode conter membros com implementação e, nas linguagens que suportam esse recurso, métodos abstratos que declaram uma operação sem fornecer a sua implementação completa. As subclasses concretas podem implementar esses métodos e fornecer comportamentos específicos.

Uma classe concreta é uma classe que pode ser instanciada segundo as regras da linguagem. Em linguagens que exigem a implementação de métodos abstratos herdados, uma classe derivada que não forneça todas as implementações necessárias também deve permanecer abstrata. As regras exatas, incluindo a possibilidade de declarar uma classe abstrata sem métodos abstratos, variam entre as linguagens.

Classes e diagramas de classes

Uma classe também é um elemento central dos diagramas de classes da Linguagem de Modelagem Unificada (UML), utilizados para representar a estrutura de um sistema. Esses diagramas podem mostrar classes, membros, relações entre classes e multiplicidades associadas às relações.

Entre os relacionamentos representáveis estão:

Na UML, a agregação e a composição são formas de modelar relações entre elementos; a sua interpretação concreta depende do modelo e do sistema representado. Em particular, a composição não deve ser interpretada como uma regra universal de que uma parte nunca pode existir fora do todo em qualquer implementação.

Ver também

Outros projetos Wikimedia também contêm material sobre este tema:
Wikilivros Livros e manuais no Wikilivros

Referências

  1. 1 2 «Classes». CC 210 Textbook, Kansas State University. Consultado em 18 de outubro de 2026
  2. 1 2 «Classes C#». Microsoft Learn. Consultado em 18 de outubro de 2026
  3. ↑ «Lesson: Classes and Objects». The Java Tutorials, Oracle. Consultado em 18 de outubro de 2026
  4. 1 2 «Classes — C# language specification». Microsoft Learn. Consultado em 18 de outubro de 2026
  5. 1 2 «Providing Constructors for Your Classes». The Java Tutorials, Oracle. Consultado em 18 de outubro de 2026
  6. ↑ «Destructors». cppreference.com. Consultado em 18 de outubro de 2026
  7. ↑ «Object-Oriented Programming». CC 210 Textbook, Kansas State University. Consultado em 18 de outubro de 2026
  8. ↑ «Controlling Access to Members of a Class». The Java Tutorials, Oracle. Consultado em 18 de outubro de 2026
  9. 1 2 «Inheritance». The Java Tutorials, Oracle. Consultado em 18 de outubro de 2026
  10. 1 2 «Classes». Python documentation. Consultado em 18 de outubro de 2026
  11. ↑ «Object-oriented programming — inheritance». Microsoft Learn. Consultado em 18 de outubro de 2026
  12. ↑ «Polymorphism». The Java Tutorials, Oracle. Consultado em 18 de outubro de 2026
  13. 1 2 «Abstract Methods and Classes». The Java Tutorials, Oracle. Consultado em 18 de outubro de 2026
  14. 1 2 «OMG Unified Modeling Language (OMG UML), versão 2.5.1». Object Management Group. Dezembro de 2017. Consultado em 18 de outubro de 2026