Introdução à POO

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

  1. 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.
  2. 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.
  3. 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.
<< # Fundamentos de Programa... Índice Classes e Objetos >>