Coletânea Python do ZERO às Redes Neurais Artificiais
Programação Orientada a Objetos
PROGRAMAÇÃO ORIENTADA A
OBJETOS
*Fundamentos
Classes
Antes de mais nada é importante salientar aqui que, em outras linguagens de programação quando começamos a nos aprofundar nos estudos de classes normalmente há uma separação desde tipo de conteúdo dos demais por estar entrando na área comumente chamada de orientação a objetos
Em Python não há necessidade de fazer tal distinção uma vez que toda a linguagem em sua forma já é nativa orientada a objetos, logo, progressivamente fomos avançando em seus conceitos e avançaremos muito mais sem a necessidade dessa divisão.
Apenas entenda que classes estão diretamente ligadas a programação orientada a objeto, que nada mais é uma abstração de como lidaremos com certos tipos de problemas em nosso código, criando e usando objetos de uma forma mais complexa, a partir de estruturas “moldes”.
Uma classe dentro das linguagens de programação nada mais é do que um objeto que ficará reservado ao sistema tanto para indexação quanto para uso de sua estrutura, é como se criássemos uma espécie de molde de onde podemos criar uma série de objetos a partir desse molde.
Assim como podemos inserir diversos outros objetos dentro deles de forma que fiquem instanciáveis (de forma que permita manipular seu conteúdo), modularizados, oferecendo uma complexa, mas muito eficiente maneira de se trabalhar com objetos.
Parece confuso, mas na prática é relativamente simples, tenha em mente que para Python toda variável é um objeto, a forma como lhe instanciamos e/ou irá fazer com que o interpretador o trate com mais ou menos privilégios dentro do código.
O mesmo acontece quando trabalharmos com classes. Porém o fato de haver este tipo de dado específico “classe” o define como uma estrutura lógica modelável e reutilizável para nosso código.
Uma classe fará com que uma variável se torne de uma categoria reservada ao sistema para que possamos atribuir dados, valores ou parâmetros de maior complexidade, é como se transformássemos uma simples variável em uma super variável, de maior possibilidade de recursos e de uso.
Muito cuidado para não confundir as coisas, o que é comum de acontecer no seu primeiro contato com programação orientada a objetos, raciocine de forma direta que uma classe será uma estrutura molde que poderá comportar dados dentro de si assim como servir de molde para criação de novas variáveis externas.
Pela sintaxe convencionalmente usamos o comando class (palavra reservada ao sistema) para especificar que a partir deste ponto estamos trabalhando com este tipo de dado, na sequência definimos um nome para essa classe, onde por convenção, é dado um nome qualquer desde que o mesmo se inicie com letra maiúscula.
Por exemplo:
O Retorno será: Gol modelo 2016 completo
Inicialmente foi criada a classe Carro (class é uma palavra reservada ao sistema e o nome da classe deve ser case sensitive, ou seja, iniciar com letra maiúscula), dentro dessa classe foram inseridos 4 carros com suas respectivas características.
Por fim, o comando print( ) mandou exibir em tela a instância carro1 que pertence a Carro. Seguindo a lógica do conceito explicado anteriormente, Carro é uma super variável que tem carro1 (uma simples variável) contida nele.
O prefixo class faz com que o interpretador reconheça essa hierarquia de variáveis e trabalhe da maneira correta com elas.
Abstraindo esse exemplo para simplificar seu entendimento, Carro é uma classe/categoria/tipo de objeto, dentro dessa categoria existem diversos tipos de carros, cada um com seu nome e uma descrição relacionada ao seu modelo.
Representação visual:
Para entendermos de forma prática o conceito de uma “super variável”, podemos raciocinar vendo o que ela tem de diferente de uma simples variável contendo dados de qualquer tipo.
Raciocine que pelo básico de criação de variáveis, quando precisávamos criar, por exemplo, uma variável pessoa que dentro de si, como atributos, guardasse dados como nome, idade, sexo, etc...
isto era feito transformando esses dados em uma lista ou dicionário, ou até mesmo criando várias variáveis uma para cada tipo de dado, o que na prática, em programas de maior complexidade, não é nada eficiente.
Criando uma classe Pessoa, poderíamos da mesma forma ter nossa variável pessoa, mas agora instanciando cada atributo como objeto da classe Pessoa, teríamos acesso direto a esses dados posteriormente, ao invés de buscar dados de índice de um dicionário por exemplo.
Dessa forma, instanciar, referenciar, manipular esses dados a partir de uma classe também se torna mais direto e eficiente a partir do momento que você domina essa técnica.
Ex:
Apenas iniciando o entendimento desse exemplo, inicialmente definimos a classe Pessoa que por sua vez está vazia de argumentos. Em seguida criamos a variável pessoa1 que recebe como atribuição a classe Pessoa( ).
A partir desse ponto, podemos começar a inserir dados (atributos) que ficarão guardados na estrutura dessa classe. Simplesmente aplicando sobre a variável o comando pessoa1.nome = ‘Fernando’ estamos criando dentro dessa variável pessoa1 a variável nome que tem como atributo a string ‘Fernando’.
Da mesma forma, dentro da variável pessoa1 é criada a variável idade = 32. Note que pessoa1 é uma super variável por conter dentro de si outras variáveis com diferentes dados/valores/atributos... Por fim, passando como parâmetro para nossa função print( ) pessoa1.nome e pessoa1.idade.
O retorno será: Fernando
32
Representação visual:
No exemplo anterior, bastante básico, a classe em si estava vazia, o que
não é o convencional, mas ali era somente para exemplificar a lógica de guardar variáveis e seus respectivos atributos dentro de uma classe.
Normalmente a lógica de se usar classes é justamente que elas guardem dados e se necessário executem funções a partir dos mesmos. Apenas para entender o básico sobre esse processo, analise o bloco de código seguinte:
Criada a classe Pessoa, dentro dela é definida a função acao1(self) que por sua vez exibe em tela uma mensagem. Na sequência é criada a variável pessoa1 que tem como atribuição tudo o que estiver dentro da classe Pessoa.
Assim como no exemplo anterior adicionamos variáveis com atributos dentro dessa classe a partir da variável inicial, podemos também chamar uma função interna da classe sobre essa variável diretamente aplicando sobre si o nome da função, nesse caso pessoa1.acao1( ) executará a função interna na respectiva variável.
O retorno será: Ação 1 está sendo executada...
Por fim, note que para tal feito simplesmente referenciamos a variável pessoa1 e chamamos diretamente a função .acao1( ) sobre ela.
Representação visual: