Neste artigo
Classe é o molde que descreve um tipo de coisa: quais características ela tem (os atributos) e o que ela sabe fazer (os métodos). Objeto é cada coisa criada a partir desse molde.
No artigo sobre escopo, você viu que cada função tem o seu próprio quadrado. A classe é um quadrado maior, um “super escopo”: dentro dela ficam juntas as variáveis e as funções que representam uma mesma coisa.
Você já parou para pensar por que sabe que uma zebra é uma zebra? Alguém mostrou uma e você pensou: parece um cavalo, mas tem listras pretas e brancas. Então a zebra é um cavalo de pijama? Não! Você observou as características que separam uma zebra de um cavalo. Essas características são os atributos. Depois você reparou no que ela faz: anda, come, corre. Essas ações são os métodos. Sem perceber, você montou uma classe na cabeça.
O que é uma classe?
É uma descrição. Ela diz como os objetos daquele tipo são por dentro: quais atributos guardam e quais métodos oferecem. Criar uma classe é criar um tipo novo, do mesmo jeito que já existem os tipos inteiro e texto.
Vamos trocar a zebra por uma pessoa. Uma classe Pessoa pode ter:
- Atributos (o que ela tem): nome, idade e altura.
- Métodos (o que ela faz): andar, falar e fazer aniversário.

O que é um objeto?
É uma instância da classe: uma pessoa de verdade, com valores nos atributos. Pense comigo: dá para dizer se uma pessoa é alta sem saber a altura dela? Não dá. A classe só diz que toda pessoa tem uma altura. Quem tem 180 centímetros é o objeto. Criar um objeto a partir da classe se chama instanciar.
Ver a animação da criação de um objeto

Como criar classes e objetos em Python, PHP e C?
O Python e o PHP têm a palavra class. O C não tem: tentei compilar uma linha começando com class, e o GCC respondeu “unknown type name ‘class'”. No programa em C, o molde é uma struct, que guarda os atributos, e as ações são funções que recebem a pessoa. O resultado na tela é o mesmo.
Python:
# Classes e objetos: o molde e os objetos criados a partir dele
class Pessoa:
def __init__(self, nome, idade, altura):
self.nome = nome # atributos: as características
self.idade = idade
self.altura = altura
def andar(self): # métodos: as ações
print("%s está andando" % self.nome)
def falar(self, frase):
print("%s diz: %s" % (self.nome, frase))
def fazer_aniversario(self):
self.idade = self.idade + 1
walmir = Pessoa("Walmir", 20, 180)
ana = Pessoa("Ana", 30, 165)
walmir.andar()
ana.falar("Confiança sempre!")
print("%s tem %d anos e %d cm" % (walmir.nome, walmir.idade, walmir.altura))
print("%s tem %d anos e %d cm" % (ana.nome, ana.idade, ana.altura))
walmir.fazer_aniversario()
print("Depois do aniversário: %s tem %d anos e %s tem %d anos" % (walmir.nome, walmir.idade, ana.nome, ana.idade))
# duas variáveis podem apontar para o mesmo objeto
apelido = walmir
apelido.fazer_aniversario()
print("Pelo apelido, mais um aniversário: %s tem %d anos" % (walmir.nome, walmir.idade))
PHP:
<?php
// Classes e objetos: o molde e os objetos criados a partir dele
class Pessoa
{
public string $nome; // atributos: as características
public int $idade;
public int $altura;
public function __construct(string $nome, int $idade, int $altura)
{
$this->nome = $nome;
$this->idade = $idade;
$this->altura = $altura;
}
public function andar(): void // métodos: as ações
{
printf("%s está andando\n", $this->nome);
}
public function falar(string $frase): void
{
printf("%s diz: %s\n", $this->nome, $frase);
}
public function fazerAniversario(): void
{
$this->idade = $this->idade + 1;
}
}
$walmir = new Pessoa("Walmir", 20, 180);
$ana = new Pessoa("Ana", 30, 165);
$walmir->andar();
$ana->falar("Confiança sempre!");
printf("%s tem %d anos e %d cm\n", $walmir->nome, $walmir->idade, $walmir->altura);
printf("%s tem %d anos e %d cm\n", $ana->nome, $ana->idade, $ana->altura);
$walmir->fazerAniversario();
printf("Depois do aniversário: %s tem %d anos e %s tem %d anos\n", $walmir->nome, $walmir->idade, $ana->nome, $ana->idade);
// duas variáveis podem apontar para o mesmo objeto
$apelido = $walmir;
$apelido->fazerAniversario();
printf("Pelo apelido, mais um aniversário: %s tem %d anos\n", $walmir->nome, $walmir->idade);
C:
/* Classes e objetos: em C não há class; o molde é uma struct e as ações são funções */
#include <stdio.h>
struct Pessoa {
const char *nome; /* atributos: as características */
int idade;
int altura;
};
void andar(const struct Pessoa *pessoa) { /* as ações recebem a pessoa */
printf("%s está andando\n", pessoa->nome);
}
void falar(const struct Pessoa *pessoa, const char *frase) {
printf("%s diz: %s\n", pessoa->nome, frase);
}
void fazer_aniversario(struct Pessoa *pessoa) {
pessoa->idade = pessoa->idade + 1;
}
int main(void) {
struct Pessoa walmir = {"Walmir", 20, 180};
struct Pessoa ana = {"Ana", 30, 165};
andar(&walmir);
falar(&ana, "Confiança sempre!");
printf("%s tem %d anos e %d cm\n", walmir.nome, walmir.idade, walmir.altura);
printf("%s tem %d anos e %d cm\n", ana.nome, ana.idade, ana.altura);
fazer_aniversario(&walmir);
printf("Depois do aniversário: %s tem %d anos e %s tem %d anos\n", walmir.nome, walmir.idade, ana.nome, ana.idade);
/* duas variáveis podem apontar para a mesma pessoa */
struct Pessoa *apelido = &walmir;
fazer_aniversario(apelido);
printf("Pelo apelido, mais um aniversário: %s tem %d anos\n", walmir.nome, walmir.idade);
return 0;
}
Saída:
Walmir está andando Ana diz: Confiança sempre! Walmir tem 20 anos e 180 cm Ana tem 30 anos e 165 cm Depois do aniversário: Walmir tem 21 anos e Ana tem 30 anos Pelo apelido, mais um aniversário: Walmir tem 22 anos
Foque no conceito, e não na linguagem! Repare no que muda só na escrita:
- O construtor: é o método que roda quando o objeto é criado e preenche os atributos. No Python, ele se chama __init__. No PHP, __construct.
- A palavra para “este objeto”: dentro dos métodos, o Python usa self e o PHP usa $this. É por ela que o método alcança os atributos do próprio objeto.
- A criação: o PHP usa a palavra new. O Python chama a classe como se fosse uma função.
- O acesso: o Python usa o ponto (walmir.nome). O PHP usa a seta (->).
O que acontece quando duas variáveis recebem o mesmo objeto?
Olhe a última linha da saída. A linha apelido = walmir não criou outra pessoa: as duas variáveis passaram a apontar para o mesmo objeto. Quando o aniversário foi feito pelo apelido, a idade do walmir foi de 21 para 22.

ATENÇÃO: no C, a struct se comporta de outro jeito. Testei uma atribuição direta de uma struct a outra variável, e ela copiou tudo: aumentei a idade da cópia para 21 e a original continuou com 20. Por isso o apelido do programa em C é um ponteiro para a pessoa. No PHP, quando você quer mesmo uma cópia separada, existe a palavra clone: no teste, mudei o nome da cópia e o original continuou “Walmir”.
Aí você pergunta: qual é a diferença entre classe e objeto?
A classe é uma só, e os objetos são quantos você quiser. No programa, a classe Pessoa aparece uma vez e dá origem a dois objetos, o walmir e a ana. Cada um guarda os seus valores: o aniversário do walmir levou a idade dele para 21, e a ana continuou com 30. Classe é o conceito. Objeto é o caso concreto.
Quais são os erros mais comuns com classes e objetos?
- Chamar um método direto na classe, sem criar o objeto. No Python, Pessoa.andar() parou com “TypeError: Pessoa.andar() missing 1 required positional argument: ‘self'”. No PHP, Pessoa::andar() parou com “Error: Non-static method Pessoa::andar() cannot be called statically”.
- Esquecer o self na definição do método, no Python. A chamada parou com “TypeError: Q.andar() takes 0 positional arguments but 1 was given”.
- Usar um atributo que não existe. Pedi o peso de uma pessoa que só tinha nome. O Python parou com “AttributeError: ‘Pessoa’ object has no attribute ‘peso'”. O PHP mostrou “Warning: Undefined property: Pessoa::$peso”.
- Achar que atribuir o objeto a outra variável cria uma cópia. As duas variáveis apontam para o mesmo objeto.
- Achar que mudar um objeto muda os outros da mesma classe. Cada objeto tem os seus valores.
Agora é com você!
No papel:
- Escolha uma coisa do seu dia a dia, como um carro ou uma conta de banco, e liste três atributos e três métodos.
- No programa do artigo, quantas classes existem? E quantos objetos?
- Depois de ana.fazer_aniversario() duas vezes, quanto valem a idade da ana e a idade do walmir?
No computador:
- Crie a classe Produto, com nome e preço, e um método que aplica um desconto no preço.
- Crie dois produtos e aplique o desconto em um só. Confira que o outro não mudou.
- Acrescente à classe Pessoa um método que diz se a pessoa é maior de idade.
Tente sozinho, sem pedir a resposta pronta para ninguém, nem para a IA!
Classes e objetos são a porta de entrada da Programação Orientada a Objetos. É o assunto do próximo artigo. Até lá!
Confiança Sempre!!!
Fontes:
- PHP, manual oficial, classes e objetos, o básico, com a definição de classe com propriedades e métodos, a pseudovariável $this, a criação de instâncias com new e a atribuição de um objeto a outra variável, que não cria uma cópia.
- Python, documentação oficial, tutorial, Classes, com a classe como forma de juntar dados e funcionalidade e de criar um novo tipo de objeto, o método __init__ e o primeiro argumento self (em inglês).
- Universidade Federal de Pernambuco, Centro de Informática, IF669, Conceitos Básicos de Orientação a Objetos, com a classe como a definição de como os objetos são estruturados, o objeto como instância desse conceito e o método como uma operação que o objeto pode fazer (PDF, slides de aula).
- USP, ICMC, SCC 124, Classes e Objetos, com a ideia de que criar uma classe significa criar um novo tipo e de que o objeto é uma instância de uma classe (PDF, slides de aula).
- USP, ICMC, Análise e Projeto Orientados a Objetos, aula 1, com a classe como agrupamento de objetos similares e o objeto como instância de uma classe, com valores nos atributos (PDF, slides de aula).
- Unesp, IGCE, Conceitos de Linguagens de Programação, notas de aula sobre objetos, com a classe funcionando como uma espécie de molde para os objetos do seu tipo, chamados de instâncias da classe.
- Unioeste, notas de aula, Orientação a Objetos, com o objeto como a concretização de uma classe, o termo instância como sinônimo de objeto e o C++ como extensão da linguagem C para suportar classes (PDF, slides de aula).
- IFRN, Programação Estruturada e Orientada a Objetos, aula 09, com a classe que descreve um tipo de objeto e define atributos e métodos (PDF, slides de aula).
- UDESC, Algoritmos e Programação em Python, Introdução à Programação Orientada a Objetos, com o método construtor __init__, o papel do self e o ponto para chamar um método do objeto (PDF, slides de aula).
- Universidade Federal de Pernambuco, Centro de Informática, aula 9, Orientação a Objetos e C++, com o C++ criado sob o nome de “C com classes” e a comparação entre a classe e a struct (PDF, slides de aula).
- Os exemplos foram executados em Python 3.13, PHP 8.3 e GCC 13.

Continue a conversa