Entendendo a Orientação a Objetos com Smalltalk

Entendendo a Orientação a Objetos com Smalltalk
Photo by Markus Spiske / Unsplash

Introdução

A orientação a objetos é um paradigma de programação que representa conceitos do mundo real como "objetos" com "atributos" e "comportamentos". Smalltalk é uma das linguagens de programação mais puras em termos de orientação a objetos e foi fundamental no desenvolvimento deste paradigma. Neste post, vamos explorar os conceitos de orientação a objetos através do Smalltalk e fornecer exemplos práticos.

Conceitos Básicos

Em Smalltalk, tudo é um objeto, desde os números e strings até as estruturas de controle e as próprias classes. Cada objeto é uma instância de uma classe, que define os atributos (variáveis de instância) e comportamentos (métodos) do objeto.

Classes e Objetos

Uma classe em Smalltalk é um modelo para criar objetos. Por exemplo, você pode ter uma classe Carro que tem atributos como cor e modelo, e comportamentos como acelerar e frear.

Exemplo:

Carro class
    instanceVariableNames: 'cor modelo velocidade'

Carro methods
    acelerar
        velocidade := velocidade + 10.

    frear
        velocidade := velocidade - 10.

  • Definição da Classe Carro:Carro class: Isso indica que estamos definindo uma nova classe chamada Carro.instanceVariableNames: 'cor modelo velocidade': Aqui, estamos declarando que cada instância da classe Carro terá três variáveis de instância chamadas cor, modelo e velocidade. Variáveis de instância são atributos que pertencem a cada objeto individual criado a partir da classe.
  • Definição dos Métodos da Classe Carro:Carro methods: Esta linha indica que estamos começando a definir métodos que pertencem à classe Carro.
  • Método acelerar:acelerar: Este é o nome do método que, quando invocado em um objeto da classe Carro, irá executar o código dentro do método.velocidade := velocidade + 10: O operador := é usado para atribuição em Smalltalk. Este comando aumenta o valor da variável de instância velocidade em 10 unidades. É o equivalente a dizer "aumente a velocidade do carro em 10".
  • Método frear:frear: Este é outro método definido para a classe Carro.velocidade := velocidade - 10: Semelhante ao método acelerar, este comando diminui o valor da variável de instância velocidade em 10 unidades, ou seja, reduz a velocidade do carro em 10.

Herança

A herança permite que uma classe herde atributos e comportamentos de outra. Por exemplo, uma classe Caminhao pode herdar da classe Carro e adicionar seus próprios comportamentos específicos.

Exemplo:

Caminhao subclass: Carro
    instanceVariableNames: 'capacidadeDeCarga'

Caminhao methods
    carregar: umaQuantidade
        capacidadeDeCarga := capacidadeDeCarga + umaQuantidade.
  1. Definição da Subclasse Caminhao:
    • Caminhao subclass: Carro: Isso cria uma nova classe chamada Caminhao que herda características da classe Carro. Isso significa que Caminhao terá todas as variáveis de instância e métodos de Carro, além de suas próprias definições específicas.
    • instanceVariableNames: 'capacidadeDeCarga': Aqui, estamos declarando que a classe Caminhao terá uma variável de instância adicional chamada capacidadeDeCarga, que é específica para objetos Caminhao e não está presente na classe Carro.
  2. Definição dos Métodos da Classe Caminhao:
    • Caminhao methods: Esta linha indica que estamos começando a definir métodos que pertencem à classe Caminhao.
  3. Método carregar:
    • carregar: umaQuantidade: Este é o nome do método que aceita um argumento chamado umaQuantidade. Quando invocado, este método irá executar o código dentro do bloco do método.
    • capacidadeDeCarga := capacidadeDeCarga + umaQuantidade: O operador := é usado para atribuição em Smalltalk. Este comando aumenta o valor da variável de instância capacidadeDeCarga pela quantidade especificada no argumento umaQuantidade. Isso representa o ato de carregar o caminhão com uma certa quantidade de carga.

Mensagens


Em Smalltalk, a interação entre objetos ocorre através do envio de mensagens. Quando você quer que um objeto execute um de seus métodos, você envia uma mensagem para ele.

Exemplo:

meuCarro := Carro new.
meuCarro cor: 'Vermelho'.
meuCarro modelo: 'Fusca'.
meuCarro acelerar.

Polimorfismo:
O polimorfismo é a capacidade de tratar objetos de diferentes classes através da mesma interface. Em Smalltalk, isso é natural, pois a linguagem depende do envio de mensagens para a comunicação entre objetos.

Exemplo:

veiculos := List with: meuCarro with: meuCaminhao.
veiculos do: [:veiculo | veiculo acelerar].
  1. Criação da Lista de Veículos:
    • veiculos := List with: meuCarro with: meuCaminhao.: Esta linha cria uma nova lista chamada veiculos e inicializa-a com dois objetos: meuCarro e meuCaminhao. O método with:with: é uma maneira de criar uma lista contendo os itens fornecidos como argumentos.
  2. Iteração Sobre a Lista de Veículos:
    • veiculos do: [:veiculo | veiculo acelerar].: Esta linha é onde a iteração acontece. O método do: é usado para iterar sobre cada elemento da lista veiculos. Para cada elemento (referido aqui como veiculo), o bloco de código entre colchetes é executado.
    • [:veiculo | veiculo acelerar]: Este é um bloco (uma função anônima ou lambda em outros idiomas) que recebe um argumento chamado veiculo. Para cada veiculo na lista veiculos, o método acelerar é chamado.
    • veiculo acelerar: Este é o comando dentro do bloco que é executado para cada veículo. Ele envia a mensagem acelerar para o objeto veiculo, o que significa que o método acelerar definido na classe do objeto veiculo será invocado. Se veiculo for um Carro, ele aumentará sua velocidade em 10. Se for um Caminhao, assumindo que Caminhao não sobrescreveu o método acelerar, ele também aumentará sua velocidade em 10.

Encapsulamento

O encapsulamento é o conceito de esconder os detalhes internos de um objeto e expor apenas o que é necessário para o uso externo. Em Smalltalk, isso é feito definindo métodos de acesso para as variáveis de instância.

Exemplo:

Carro methods
    cor: umaCor
        cor := umaCor.

    cor
        ^cor

Smalltalk é uma excelente linguagem para aprender os conceitos de orientação a objetos devido à sua simplicidade e consistência. Tudo em Smalltalk é um objeto, e a interação entre objetos é feita de maneira uniforme através do envio de mensagens. Isso torna Smalltalk uma ferramenta poderosa para entender profundamente a orientação a objetos e para modelar problemas complexos de maneira intuitiva.


Se você está interessado em aprofundar seus conhecimentos em orientação a objetos, considere explorar Smalltalk. A simplicidade e pureza da linguagem podem oferecer insights valiosos e melhorar sua habilidade de pensar em termos de objetos e suas interações.

Referências

Learn Smalltalk in Y Minutes

Read more