O que é programação orientada a objetos (OOP) e como ela difere da programação procedural?
Há uma frase que você inevitavelmente encontra ao estudar programação.
“Este código deve ser escrito de forma orientada a objetos.”
Ao ouvir isso pela primeira vez, é fácil ficar perdido. O que é programação procedural e o que torna a programação orientada a objetos tão diferente? Não é simples entender de imediato.
Vamos direto à conclusão. A programação procedural se concentra em “o que fazer e em que ordem”, enquanto a programação orientada a objetos enfatiza “quem é responsável por fazer”. A diferença está em manter os dados e as funções que os manipulam juntos ou separados.
Neste artigo, vamos explicar a diferença usando um pedido de café e mostrar como as duas abordagens mudam no código real.
Programação procedural é como uma receita de cozinha
Como o nome indica, a programação procedural se concentra nos procedimentos — ou seja, na sequência.
Existem dados e funções separadas para processá-los. O fluxo segue de cima para baixo, em ordem.
Uma receita de cozinha é uma analogia perfeita: lave os ingredientes, corte, refogue e sirva. Traduzir essa sequência diretamente para o código é programação procedural.
Vamos ver um exemplo simples de conta.
var balance = 10000 // Dados
func deposit(amount: Int) { // Funcionalidades separadas
balance += amount
}
deposit(amount: 5000)
print(balance)
// Saída: 15000
O dado balance fica exposto, e a função deposit o altera diretamente.
Em um programa pequeno, isso é até mais simples e rápido. O problema aparece quando o programa cresce.
Quando há 100 contas e as funções que alteram o saldo estão espalhadas, fica muito difícil rastrear onde um valor foi modificado.
O que é programação orientada a objetos (OOP)?
A programação orientada a objetos agrupa dados e funcionalidades. Esse agrupamento é chamado de “objeto”.
Em uma conta, isso significa reunir em uma unidade o dado “saldo” e a funcionalidade “fazer um depósito”.
Vamos transformar a conta anterior em um objeto.
class Account {
private var balance = 10000 // Ocultar os dados internamente
func deposit(_ amount: Int) { // Incluir também a funcionalidade
balance += amount
}
func show() { print(balance) }
}
let myAccount = Account()
myAccount.deposit(5000)
myAccount.show()
// Saída: 15000
balance agora está oculto como private. O código externo não pode mais alterar o saldo livremente; o acesso ocorre apenas por caminhos definidos, como deposit.
Esse é o núcleo da programação orientada a objetos: proteger os dados e deixar claro “quem é responsável por cada tarefa”.
Pense em pedir café. Na programação procedural, eu moo os grãos, fervo a água e faço tudo sozinho. Na programação orientada a objetos, eu delego: “Barista, um americano, por favor”. O objeto barista sabe como prepará-lo e assume essa responsabilidade.
As 4 características fundamentais da OOP
A programação orientada a objetos tem quatro pilares. Os termos podem parecer difíceis, mas os conceitos são simples.
- Encapsulamento: ocultar os dados e permitir acesso apenas por caminhos definidos (como private acima)
- Herança: reutilizar funcionalidades herdando-as de uma classe existente
- Polimorfismo: o mesmo comando se comporta de forma diferente em cada objeto
- Abstração: ocultar a complexidade interna e expor apenas o necessário
O polimorfismo é especialmente poderoso. Se você manda “chore”, o cachorro faz au-au e o gato faz miau. O comando é o mesmo, mas cada objeto responde de forma diferente.
Quando usar OOP e quando a programação procedural é melhor
A programação orientada a objetos nem sempre é a resposta certa. A escolha depende da situação.
| Situação | Abordagem adequada |
|---|---|
| Scripts curtos, cálculos pontuais | Programação procedural |
| Fluxo de dados simples e sequencial | Programação procedural |
| Projetos grandes que continuam crescendo | Programação orientada a objetos |
| Código desenvolvido por várias pessoas | Programação orientada a objetos |
| Conceitos semelhantes aparecem repetidamente | Programação orientada a objetos |
Para algo pequeno e simples, o estilo procedural costuma ser mais limpo. Para código grande, complexo e mantido por muito tempo, a programação orientada a objetos mostra sua força.
A programação procedural projeta a sequência; a programação orientada a objetos projeta as responsabilidades.
É assim que isso aparece em entrevistas
P. Qual é a maior diferença entre programação procedural e programação orientada a objetos? R. A relação entre dados e funcionalidades. A programação procedural separa dados e funções e flui com base na sequência, enquanto a programação orientada a objetos os agrupa em objetos e os gerencia por responsabilidade. Por isso, ela favorece a manutenção e a colaboração à medida que o sistema cresce.
P. Por que o encapsulamento é importante? R. Ele impede que o código externo altere os dados diretamente, reduzindo mudanças inesperadas. Como o acesso ocorre apenas por métodos definidos, fica mais fácil rastrear bugs, e alterar a implementação interna afeta menos o código externo.
Mesmo que a terminologia pareça grandiosa, a questão central é simples: “Como devemos lidar com os dados?”
Pratique agrupar pequenos trechos de código em objetos, e logo você entenderá. Tente refatorar uma parte do seu próprio código usando o que aprendeu hoje.

