Classe
Do dicionário Aurélio, uma das definições de classe é: "Numa série ou num conjunto, grupo ou divisão que apresenta características semelhantes; categoria."
Algumas definições de classe no contexto de
orientação a objetos:
1. Uma classe é um modelo ou protótipo
que define as variáveis e métodos comuns para todos os objetos
de um determinado tipo. [1]
2. Uma classe é a especificação da estrutura
(atributos de instância), comportamento (métodos) (...) para
objetos. (...) Esta definição enfatiza uma classe como um
descritor/construtor para objetos. [2]
3. Uma classe pode ser vista como uma
fábrica de objetos. Uma classe é uma entidade cujas principais
finalidades são definir um tipo abstrato de dados em particular
e prover mecanismos para a criação de objetos desse tipo. [6]
No mundo real, frequentemente temos objetos do mesmo tipo. Por exemplo, sua bicicleta é somente uma das diversas bicicletas no mundo. Utilizando a terminologia de orientação a objetos, poderíamos dizer que sua bicicleta é uma instância da classe de objetos conhecida como bicicletas. Bicicletas possuem um estado (marcha atual, velocidade) e comportamento (troca de marcha, freios) em comum. No entanto, o estado de cada bicicleta é independente e pode ser diferente do estado de outras bicicletas.
Ao construir bicicletas, fabricantes tiram vantagem do fato de que bicicletas compartilham características construindo diversas bicicletas do mesmo modelo - seria extemamente ineficiente produzir um novo modelo para cada bicicleta construída.
Em software orientado a objeto, também é possível ter diversos objetos do mesmo tipo que compartilham características: retângulos, registros de empregados, videoclips, etc. Como os fabricantes de bicicleta, você pode tirar vantagem do fato que objetos do mesmo tipo são similares e você pode criar um modelo para eles. "Modelos" em OO são chamados classes.
O valor de atributos de instância são dados por cada instância da classe. Portanto, após ter criado a classe, deve-se instanciá-la antes de poder usá-la. Quando se cria uma instância da classe, cria-se um objeto daquele tipo e o sistema aloca memória para as variáveis de instância declaradas pela classe. Então pode-se invocar os métodos do objeto. Todos os objetos de uma classe possuem os mesmos métodos. Desta forma, a implementação desses métodos fica armazenada na própria classe (por economia de memória). Portanto todos os objetos de uma determinada classe compartilham a mesma área de código. Mas cada objeto possui uma área de dados (atributos) independente.
Atributos de classe são atributos compartilhados por todas as instâncias (objetos) de uma determinada classe.Os atributos de classes são guardados pela classe, e não pelos objetos da classe. Se um objeto altera o valor de um atributo de classe, esse valor muda para todos os objetos do mesmo tipo (instâncias da mesma classe).
Em oposição a métodos de instância, que servem para alterar ou consultar o estado de um objeto, métodos de classe servem para alterar ou consultar o estado de uma classe, ou seja, alterar ou consultar seus atributos de classe. Métodos de classe só podem atuar em atributos de classe, nunca em atributos de instância. [1]
Aula produzida por Leonardo Mendes Simão, Rafael de O. Valle dos Santos e Rafael Sabbagh Armony