Classes e Objetos

Neste capítulo, vamos mergulhar nos conceitos fundamentais de Programação Orientada a Objetos (POO): classes e objetos. Estes conceitos são essenciais para estruturar o código de uma forma modular e reutilizável. Vamos explorar como definir classes em Python e criar objetos a partir dessas classes.

O que é uma Classe?

Uma classe é como um molde ou um template que define as características e comportamentos que os objetos podem ter. Se pensarmos num programa que simula uma escola, podemos ter uma classe chamada "Aluno". Esta classe pode ter atributos, como nome e idade, e métodos, como estudar e fazer exame.

Definindo uma Classe em Python

Vamos começar por definir uma classe em Python. Usaremos o exemplo de uma "Aluno" para ilustrar este conceito.

class Aluno:
    def __init__(self, nome, idade):
        self.nome = nome
        self.idade = idade

    def estudar(self):
        print(f'{self.nome} está a estudar.')

    def fazer_exame(self):
        print(f'{self.nome} está a fazer exame.')

Atributos da Classe

Na classe "Aluno", nome e idade são atributos. Eles representam características de cada aluno. O método __init__ é o construtor da classe, responsável por inicializar os atributos quando um novo objeto é criado.

Criando Objetos

Agora que temos a definição da nossa classe, podemos criar objetos dessa classe.

aluno1 = Aluno('Maria', 16)
aluno2 = Aluno('João', 17)

print(aluno1.nome)  # Output: Maria
print(aluno2.idade) # Output: 17

aluno1.estudar()    # Output: Maria está a estudar.
aluno2.fazer_exame()# Output: João está a fazer exame.

Métodos da Classe

Os métodos estudar e fazer_exame são comportamentos que podemos definir numa classe. Quando chamamos aluno1.estudar(), estamos a utilizar o método estudar do objeto aluno1.

Exemplo Prático: Biblioteca

Vamos desenvolver um exemplo mais completo. Suponha que queremos criar um sistema para gerir uma biblioteca. Precisamos de uma classe para representar os livros e outra para representar os utilizadores.

Classe Livro

class Livro:
    def __init__(self, titulo, autor):
        self.titulo = titulo
        self.autor = autor
        self.disponivel = True

    def emprestar(self):
        if self.disponivel:
            self.disponivel = False
            return True
        else:
            return False

    def devolver(self):
        self.disponivel = True

Classe Utilizador

class Utilizador:
    def __init__(self, nome):
        self.nome = nome
        self.livros_emprestados = []

    def emprestar_livro(self, livro):
        if livro.emprestar():
            self.livros_emprestados.append(livro)
            print(f'{self.nome} emprestou {livro.titulo}.')
        else:
            print(f'{livro.titulo} não está disponível.')

    def devolver_livro(self, livro):
        self.livros_emprestados.remove(livro)
        livro.devolver()
        print(f'{self.nome} devolveu {livro.titulo}.')

Utilizando as Classes

livro1 = Livro('1984', 'George Orwell')
livro2 = Livro('O Principezinho', 'Antoine de Saint-Exupéry')

utilizador1 = Utilizador('Ana')

utilizador1.emprestar_livro(livro1)  # Output: Ana emprestou 1984.
utilizador1.devolver_livro(livro1)   # Output: Ana devolveu 1984.

utilizador1.emprestar_livro(livro2)  # Output: Ana emprestou O Principezinho.

Resumo

Neste capítulo, explorámos os conceitos de classes e objetos em Python, criámos classes para representar "Aluno" e "Livro" e utilizadores. Vimos como criar objetos dessas classes e como utilizar métodos para definir comportamentos dos nossos objetos.

Quiz

Testa a tua compreensão dos conceitos abordados neste capítulo com este quiz rápido.

  1. O que é uma classe em Python?

    • a) Um objeto
    • b) Um molde ou template
    • c) Um método
  2. O que faz o método __init__ numa classe?

    • a) Define um atributo
    • b) Inicializa os atributos de um objeto
    • c) Deleta um objeto
  3. Como crias um objeto da classe Aluno com o nome 'Pedro' e idade 15?

    • a) Aluno('Pedro', 15)
    • b) aluno = Aluno()
    • c) aluno = Aluno('Pedro', 15)
  4. Qual é a saída do seguinte código?

    livro = Livro('O Hobbit', 'J.R.R. Tolkien')
    livro.emprestar()
    print(livro.disponivel)
    
    • a) False
    • b) True
    • c) None
  5. O que faz o método devolver da classe Livro?

    • a) Empresta o livro
    • b) Torna o livro disponível novamente
    • c) Deleta o livro
<< Introdução à POO Índice Atributos e Métodos >>