Atividade Prática: Criação de uma Classe Simples

Nesta atividade, vamos criar uma classe simples em Python que vai ajudar a solidificar os conceitos de atributos de instância, atributos de classe, getters e setters. Vamos começar com exemplos simples e progredir para algo mais complexo.

Exemplo 1: Classe Livro

Vamos começar por definir uma classe Livro. Esta classe terá atributos de instância para o título e o autor do livro, e um atributo de classe para contar quantos livros foram criados.

Definição da Classe Livro

class Livro:
    # Atributo de classe
    contador_livros = 0
    
    def __init__(self, titulo, autor):
        # Atributos de instância
        self.titulo = titulo
        self.autor = autor
        # Incrementar o contador de livros sempre que um novo livro é criado
        Livro.contador_livros += 1
        
    # Getters
    def obter_titulo(self):
        return self.titulo
    
    def obter_autor(self):
        return self.autor
    
    # Setters
    def definir_titulo(self, titulo):
        self.titulo = titulo
    
    def definir_autor(self, autor):
        self.autor = autor

Utilização da Classe Livro

# Criar instâncias da classe Livro
livro1 = Livro("1984", "George Orwell")
livro2 = Livro("O Processo", "Franz Kafka")

# Obter informações dos livros
print(livro1.obter_titulo())  # Output: 1984
print(livro2.obter_autor())   # Output: Franz Kafka

# Alterar informações dos livros
livro1.definir_titulo("Mil Novecentos e Oitenta e Quatro")
print(livro1.obter_titulo())  # Output: Mil Novecentos e Oitenta e Quatro

# Acesso ao atributo de classe
print(Livro.contador_livros)  # Output: 2

Exemplo 2: Classe Aluno

Vamos criar a classe Aluno que terá atributos de instância para o nome, idade e curso, e um atributo de classe para contar o número total de alunos. Vamos também incluir métodos getters e setters.

Definição da Classe Aluno

class Aluno:
    # Atributo de classe
    contador_alunos = 0
    
    def __init__(self, nome, idade, curso):
        # Atributos de instância
        self.nome = nome
        self.idade = idade
        self.curso = curso
        # Incrementar o contador de alunos sempre que um novo aluno é criado
        Aluno.contador_alunos += 1
    
    # Getters
    def obter_nome(self):
        return self.nome
    
    def obter_idade(self):
        return self.idade
    
    def obter_curso(self):
        return self.curso
    
    # Setters
    def definir_nome(self, nome):
        self.nome = nome
    
    def definir_idade(self, idade):
        self.idade = idade
    
    def definir_curso(self, curso):
        self.curso = curso

Utilização da Classe Aluno

# Criar instâncias da classe Aluno
aluno1 = Aluno("Maria", 20, "Engenharia Informática")
aluno2 = Aluno("João", 22, "Medicina")

# Obter informações dos alunos
print(aluno1.obter_nome())  # Output: Maria
print(aluno2.obter_curso()) # Output: Medicina

# Alterar informações dos alunos
aluno1.definir_idade(21)
print(aluno1.obter_idade())  # Output: 21

# Acesso ao atributo de classe
print(Aluno.contador_alunos)  # Output: 2

Exemplo 3: Classe Produto

Neste exemplo, vamos criar uma classe Produto com atributos de instância para o nome, preço e quantidade. Também adicionaremos um atributo de classe para manter um registo do número total de produtos e implementaremos getters e setters para manipulação.

Definição da Classe Produto

class Produto:
    # Atributo de classe
    contador_produtos = 0
    
    def __init__(self, nome, preco, quantidade):
        # Atributos de instância
        self.nome = nome
        self.preco = preco
        self.quantidade = quantidade
        # Incrementar o contador de produtos sempre que um novo produto é criado
        Produto.contador_produtos += 1
    
    # Getters
    def obter_nome(self):
        return self.nome
    
    def obter_preco(self):
        return self.preco
    
    def obter_quantidade(self):
        return self.quantidade
    
    # Setters
    def definir_nome(self, nome):
        self.nome = nome
    
    def definir_preco(self, preco):
        self.preco = preco
    
    def definir_quantidade(self, quantidade):
        self.quantidade = quantidade

Utilização da Classe Produto

# Criar instâncias da classe Produto
produto1 = Produto("Laptop", 1200.50, 10)
produto2 = Produto("Teclado", 25.90, 50)

# Obter informações dos produtos
print(produto1.obter_nome())      # Output: Laptop
print(produto2.obter_preco())     # Output: 25.90

# Alterar informações dos produtos
produto1.definir_preco(1150.00)
print(produto1.obter_preco())     # Output: 1150.00

# Acesso ao atributo de classe
print(Produto.contador_produtos)  # Output: 2

Resumo

Nesta atividade, aprendemos a criar classes simples com Python utilizando atributos de instância, atributos de classe, getters e setters. Criámos três classes diferentes: Livro, Aluno e Produto, para ilustrar como podemos aplicar estes conceitos em diferentes contextos.

Quiz

  1. O que é um atributo de classe?

    a) Um atributo associado a cada instância de uma classe.

    b) Um atributo compartilhado por todas as instâncias de uma classe.

    c) Um método que pertence apenas a algumas instâncias.

    d) Um valor constante dentro da classe.

  2. Como podes definir um método getter em Python?

    a) Utilizando a função set.

    b) Através de uma função interna.

    c) Definindo um método com def para retornar o valor do atributo.

    d) Criando uma variável pública.

  3. Qual dos seguintes é um exemplo de um atributo de instância?

    a) Definição de contador_produtos em Produto

    b) Definição de titulo em Livro

    c) Definição de obter_nome em Aluno

    d) Definição de contador_alunos em Aluno

  4. O que acontece quando crias uma nova instância de uma classe que possui um atributo de classe contador?

    a) Nada é alterado.

    b) O valor do atributo de classe contador é incrementado.

    c) Um novo atributo é criado para cada instância.

    d) O valor do atributo de classe é redefinido.

  5. O que representa a linha Livro.contador_livros += 1 no contexto de um atributo de classe?

    a) Decrementa o valor do atributo de classe.

    b) Flask o valor por 1.

    c) Incrementa o valor do atributo de classe por 1.

    d) Zera o valor do atributo de classe.

Respostas:

  1. b)
  2. c)
  3. b)
  4. b)
  5. c)

Espero que esta atividade tenha sido útil para reforçar os conceitos de atributos de instância, atributos de classe, getters e setters. Boa sorte com a sua jornada em Programação Orientada a Objetos!

<< Modificadores de Acesso (... Índice Métodos em Python >>