A Programação Orientada a Objetos (POO) é um paradigma de programação que utiliza "objetos" – estruturas que contêm dados e comportamentos. Este capítulo introduzirá os conceitos básicos da POO em Python, proporcionando uma compreensão inicial sobre como os objetos funcionam e como podem ser aplicados para resolver problemas de maneira eficiente e modular.
Conceitos Fundamentais
Objetos e Classes
Em POO, "classe" é um modelo ou blueprint que define as propriedades e comportamentos comuns de um conjunto de objetos. Uma "classe" pode ser vista como uma receita para criar objetos. Cada objeto criado a partir de uma classe é uma instância dessa classe.
Exemplo prático: Imaginemos uma aplicação para um parque de estacionamento:
class Carro:
def __init__(self, marca, modelo, ano):
self.marca = marca
self.modelo = modelo
self.ano = ano
def mostrar_info(self):
print(f"{self.ano} {self.marca} {self.modelo}")
# Criar objectos (instâncias da classe Carro)
carro1 = Carro("Toyota", "Corolla", 2021)
carro2 = Carro("Honda", "Civic", 2020)
# Usar método da instância
carro1.mostrar_info()
carro2.mostrar_info()
Encapsulamento
O encapsulamento é uma maneira de restringir o acesso direto a alguns componentes de um objeto, ou seja, certas propriedades e métodos só podem ser acessados por meio de métodos definidos na classe.
Exemplo prático: Implementar encapsulamento no nosso exemplo de Carro:
class Carro:
def __init__(self, marca, modelo, ano):
self.__marca = marca # Atributo privado
self.__modelo = modelo # Atributo privado
self.__ano = ano # Atributo privado
def mostrar_info(self):
print(f"{self.__ano} {self.__marca} {self.__modelo}")
# Método para aceder a um atributo privado
def obter_marca(self):
return self.__marca
carro1 = Carro("Toyota", "Corolla", 2021)
carro1.mostrar_info()
# Tentar aceder diretamente ao atributo privado (isso gerará um erro)
# print(carro1.__marca)
# Usar método para aceder ao atributo privado
print(carro1.obter_marca())
Prática com Exemplo Real
Vamos criar um exemplo prático para consolidar o que aprendemos até agora. Imaginemos que estamos a desenvolver um sistema de gestão de biblioteca.
class Livro:
def __init__(self, titulo, autor, ano_publicacao):
self.__titulo = titulo
self.__autor = autor
self.__ano_publicacao = ano_publicacao
def mostrar_info(self):
print(f"{self.__titulo}, por {self.__autor} ({self.__ano_publicacao})")
def obter_titulo(self):
return self.__titulo
def obter_autor(self):
return self.__autor
def obter_ano_publicacao(self):
return self.__ano_publicacao
# Criar objectos (instâncias da classe Livro)
livro1 = Livro("1984", "George Orwell", 1949)
livro2 = Livro("Dom Quixote", "Miguel de Cervantes", 1605)
# Mostrar informações dos livros
livro1.mostrar_info()
livro2.mostrar_info()
Resumo do Capítulo
Neste capítulo, abordámos os princípios básicos da Programação Orientada a Objetos (POO), focando-nos em objetos, classes e encapsulamento. Utilizámos exemplos práticos para ilustrar como podemos criar classes e objetos em Python e como aplicar o conceito de encapsulamento para proteger os dados dentro dos nossos objetos.
Quiz
-
O que é uma classe em POO?
- a) Um objecto criado a partir de outra classe.
- b) Um modelo que define propriedades e comportamentos comuns a um conjunto de objetos.
- c) Um método que é utilizado para encapsular dados.
-
Qual é a finalidade do método
__init__
numa classe Python?- a) Destruir uma instância da classe.
- b) Inicializar os atributos de uma instância da classe.
- c) Encapsular os dados de uma classe.
-
Como podem ser acedidos os atributos privados de um objecto numa classe?
- a) Diretamente, utilizando o nome do atributo.
- b) Através de métodos públicos definidos na classe.
- c) Não é possível aceder aos atributos privados.