Classe e Objeto em Programação Orientada a Objetos em Python

Antes de entramos em detalhes e definições técnicas sobre Classes e Objetos, vamos te explicar dando exemplos da vida real o que seria uma Classe e o que seria um Objeto.



Classe e Objeto em Python - O que é ?


Classe é o principal componente ou dispositivo, da orientação a objetos.

Imagine uma classe como uma planta (como a planta de uma casa).
A planta é a classe que serve para criar as casas, que são os objetos.

É como se a classe fosse um molde, um modelo, um rascunho de algo.

Por exemplo, o Carro é um exemplo de classe.
Ele representa um objeto que tem pneu, motor, portas, volante, câmbio etc.

Porém, ninguém chega na concessionária e diz:
- Olá, quero um carro
- Ok, aqui está um carro, custa 50 mil.
- Obrigado, agora tenho um carro

Na verdade, você compra coisas específicas:
- Um celta, um Gol, um Corolla ou uma BMW (se você for Programador Python Profissional).

Ou  seja, a classe Carro é uma abstração, um modelo.
A coisa real, são os objetos, (Palio, Uno, Hilux etc).

Todo Gol tem características da classe Carro. Assim como todo Palio, Uno, Civic etc.



Exemplo de Classe e Objeto

Um ser humano é uma Classe.
Vamos tentar definir características gerais de uma pessoa?


Ela tem:
Cabeça
Coração
Cérebro
Rosto
etc

Mas você não lida no dia-a-dia com a Pessoa.
Você lida com o João, a Maria, ou seja, você lida com pessoas concretas e específicas, são objetos.

Objeto é algo concreto, que existe. A Classe é apenas uma 'planta', uma definição generalista.
O João é um objeto, ou instância, da classe Pessoa.

O Honda Fit é um objeto, ou instância, da classe Carro.

Orientação a Objetos

As classes funcionam como verdadeiras fábricas de objetos (instâncias).
Sua principal característica é ter dados específicos e internos, bem como métodos que irão trabalhar nos objetos e atributos próprios.

Todo objeto vai herdar os atributos e métodos da sua classe.
Ou seja, todo objeto do tipo Carro, vai ter atributos (informações) sobre potência do motor, número de portas, velocidade máxima atingida etc.


Esses objetos também terão métodos pré-definidos na Classe, como o método que faz o carro ligar, o método que faz o motor girar, o método pra trocar de marcha etc etc etc.

Na verdade, durante todo nosso curso de Python, usamos vários objetos, de tipos internos, nativos da linguagem, como objetos do tipo Regex, do tipo Lista, string etc.

Agora, vamos poder criar nossos próprios 'tipos' de dados. Como o tipo Carro ou o tipo Pessoa ou qualquer outro objeto que queiramos, bastando pra isso definir bem nossas classes.

Vantagens da Orientação a Objetos

Não importa qual paradigma você use, existe sempre uma porção de vantagens e desvantagens.
E tenha em mente uma coisa: não há melhor nem pior paradigma, assim como não existe linguagem melhor nem pior. O que existe é um paradigma, ou linguagem, mais apropriado para cada objetivo.

Vamos definir aqui algumas vantagens do uso da orientação a objetos.

Infinitos objetos

Uma vez que você criou a classe Carro, você pode criar um objeto do tipo carro, como um Celta. Depois um Gol, depois...outro Gol ou outro Celta...ou 1 milhão de Palios.

Ou seja, bastou criar a classe Carro, depois você gera quantos objetos quiser. E todos terão as mesmas características gerais, todos serão carros (embora tenham alguns detalhes diferentes, como potência ou número de portas, mas todos tem alguma potência e um determinado número de portas).

Herança

Dizemos que os objetos herdam características da Classe que os criou.
Vamos supor que antigamente todos usavam gasolina.

Um país criou 10 milhões de objetos, ou seja, 10 milhões de carros diferentes (objetos).
Depois, passou a existir combustível do tipo álcool.

Logo, apareceu uma característica diferente: que combustível os carros usam.
O que fazer?

Simples, é só ir la na Classe e criar mais um atributo: o tipo de combustível.
Automaticamente todos os objetos desse tipo terão esse atributo, não vai precisar ir em um por um criando essa característica.

Tem esse atributo na Classe? Vai ter em todos os objetos, pois todo objeto é uma instância de alguma classe.

Composição

Existem vários e vários tipos de objetos e classes, no mundo.

Tem a classe Moto, com suas características.
Tem a classe Pedestre, com seus atributos específicos.
Tem a classe Estrada, por exemplo: pode ser avenida, rua, ser asfaltada, de barro etc.

Esses objetos lidam entre si, existem em conjuntos. Quando um vai passar, o outro tem que parar (ou vai acontecer um acidente).

Se um passa num sentido da via, o outro tem que passar no outro sentido.
Uma moto vai ultrapassar o carro? Ok, mas existem regras pra isso acontecer.

Resumindo: o mundo é formado por diversos componentes, diversos objetos coexistindo e se relacionando por meios específicos (métodos). Alguns objetos possuem outros e por ai vai.

Cada objeto compõe um cenário maior, para o mundo girar e seguir girando e funcionando.

Encapsulamento

Uma das características mais fantásticas da POO, é o encapsulamento.

Cada classe encapsula atributos e métodos.
Atributos são informações, características.

Por exemplo, na classe Carro, alguns atributos: cor do carro, tamanho dos pneus, potência do motor, ano de fabricação etc.

Já os métodos são as funcionalidades: mecanismo que faz o motor dar a partida, mecanismo que refrigera o sistema, mecanismo que gera eletricidade.

Ou seja, dentro de uma classe (logo, dentro de todo objeto), existem informações e funções específicas, que existem só ali e somente para aquele tipo de objeto, que são encapsulados e guardados do mundo exterior.

Assim, você só acessa alguma informação de um objeto se criar um método que vai permitir isso, senão fica invisível pra todos os outros componentes do seu programa.

Mas esse papo já está ficando muito teórico, muito 'viagem'...nos próximos tutoriais vamos botar a mão na massa, criar e fazer as coisas acontecerem de verdade, com nossas próprias mãos...digo, com nossos próprios códigos Python.

Próximo tutorial: Como criar classes e objetos

Nenhum comentário:

Postar um comentário