Introdução à Programação Orientada a Objetos (POO)
POO é um paradigma de programação que organiza o código em "objetos", que são instâncias de classes. Esses objetos representam entidades do mundo real, facilitando a modelagem de problemas complexos.
Conceitos Básicos: Classe, Objeto, Atributos e Métodos
Classe: Define a estrutura e o comportamento dos objetos, como um "molde". A classe especifica os atributos (dados) e métodos (funções) que os objetos terão.
Objeto: É uma instância de uma classe, ou seja, um elemento criado a partir do molde definido pela classe.
Atributos: São as características de uma classe, representando dados.
Métodos: São as funções associadas a uma classe, que definem o comportamento dos objetos.


Herança e Polimorfismo
Herança: Herança permite que uma classe (chamada de classe derivada ou filha) herde atributos e métodos de outra classe (chamada de classe base ou pai). Isso promove a reutilização de código.
Exemplo: Sistema de cadastro de veículos, onde Carro e Moto herdam de uma classe Veiculo.


Polimorfismo
Polimorfismo permite que um método em uma classe derivada tenha o mesmo nome que na classe base, mas com comportamento diferente.
Encapsulamento e Abstração
Encapsulamento
Encapsulamento restringe o acesso direto a determinados atributos e métodos de uma classe. Em Python, isso é feito por meio de atributos privados (usando _ no início do nome).
Abstração
A abstração permite ocultar detalhes internos e expor apenas o necessário para o uso de um objeto.


Exemplo: Sistema de cadastro de alunos com proteção de dados sensíveis.
Neste exemplo:
Encapsulamento: O atributo _idade é privado e só pode ser acessado através dos métodos get_idade e set_idade.
Abstração: A classe Aluno expõe apenas métodos para acessar ou modificar a idade de forma controlada, sem expor diretamente o atributo.
