3
respostas

Opinião sobre cronograma do curso "formação em python"

boa tarde. não sou da área de computação e linguagem de programação e este é meu primeiro curso nesse sentido. na proposta da curso, os dois primeiros módulos de introdução eu consegui acompanhar. contudo, desde a apresentação do conceito de "orientação por objetos" o montante de dúvidas só foi crescendo. em alguns momentos cheguei a ler todas as dúvidas dos módulos, pois eu sequer consigo formular uma dúvida, em vista da profundidade das relações entre os atributos.

estou tendo muita dificuldade para entender esses conceitos, e mesmo nos exercícios, seria interessante apresentar uma representação gráfica para ilustrar as relações entre classes, atributos, métodos e outros elementos da programação apresentada.

penso que poderiam ser formuladas outras metodologias para apresentação dos conceitos e de detalhamento das relações entre as classes.

Obrigado pelo espaço.

3 respostas

Olá,

meus 2c,

Orientação a Objetos não é pra ser algo muito complicado de entender. Basicamente, são conceitos do mundo real, aplicados a modelagem.

Por exemplo, uma classe Carro, terá mais ou menos o seguinte formato:

class Carro:
    def __init__(self, modelo, ano, cor):
        ...

Ou seja, seria como se estivessemos contruindo um objeto com todas suas propriedades e até comportamentos:

...
def acelerar(self):
    self.velocidade += 1

Duas coisas que me ajudam a estudar.

  • Não existe somente uma forma de ensinar/aprender:
    • Ou seja, talvez o método que está aprendendo não seja o melhor para vc; Talvez devesse praticar mais..
    • ou a forma que está recebendo o conteúdo nao seja a melhor para vc; Talvez devesse procurar outras referências para complementar
  • Qdo diz: o montante de dúvidas só foi crescendo, isso quer dizer q talvez esteja passando por conceitos sem aprender o anterior:
    • Entendo que em alguns tópicos até seja possível avançar sem entender por completo, pois no próximo os conceitos se encaixam. Porém, alguns assuntos não permitem avançar sem entendermos por completo. Nesses casos, acho válido, consultar outras referências para termos pontos de vistas diferentes, o que pode nos ajudar com o conceitos.

Obviamente que OO é muito mais do que os exemplos acima e que apesar de não ser muito complicado, talvez no começo pareça díficil.

Por fim, entenda seu ritmo. Talvez se desacelerar um pouco, ajude a absorver mais. (Baby steps)

Vá postando aí sua dúvidas pontuais, que na medida do possível ajudaremos e com certeza irá superar esse desafio.

[]'s

Opa, tudo certo? Pense nesses nomes dificeis como convensões que foram dadas pra nomear certas coisas dentro do código, não se preocupe muito se você sabe exatamente o nome dessas coisas, foque em conseguir escrever o código em si e saiba que vai sempre ter gente pra te ajudar no que precisar.

A respeito dos nomes vou te explicar alguns aqui (tive que separar em 2 pq tava muito grande o post):

*vou colocar entre parênteses o nome em inglês pra você :)

modulo (module)

Assim como respondido aqui modulos são nada mais do que o nome do arquivo. Dentro de um arquivo você pode ter funções, classes e variaveis globais.

Se você tem um arquivo exemplo.py então você tem o modulo exemplo que é o nome do seu arquivo!

pacote (package)

Ainda nessa mesma resposta que eu citei anteriormente, temos o significado de um pacote. Que nada mais é do que a pasta onde um arquivo se encontra.

Se o módulo (arquivo) que eu citei anteriormente está na pasta meus_exemplos então quando você for importar esse seu arquivo pra dentro de outro arquivo você faria import meus_exemplos.exemplo.

caminho (path)

Esse caminho que você faz dentro das pastas pra chegar em algum lugar é chamado de path. Você tem o path do python que é o caminho que leva até o arquivo python3.exe que é o que vai fazer você conseguir executar seu código python na versão que você tiver instalada. Você tem também o path da raiz do seu projeto que é o caminho até a pasta onde seu projeto está armazenado e onde, a partir dali o python vai começar a contar pros imports de modules e packages.

Então se você está na raiz do seu projeto e for importar outro module que está na raiz do seu projeto você vai apenas dar import nome_do_arquivo. E se você tem o nosso módulo exemplo dentro da pasta meus_exemplos e outro modulo segundo_exemplo dentro dessa mesma pasta, pra importar o exemplo pra dentro do segundo_exemplo você vai precisar digitar import meus_exemplos.exemplo mesmo ambos estando no mesmo pacote (na mesma pasta), porque o importante pro python é o caminho a partir da raiz do projeto até o modulo e não o caminho a partir de um modulo até outro modulo.

classe (class)

De acordo com a documentação:

Classes proporcionam uma forma de organizar dados e funcionalidades juntos. Criar uma nova classe cria um novo “tipo” de objeto, permitindo que novas “instâncias” desse tipo sejam produzidas. Cada instância da classe pode ter atributos anexados a ela, para manter seu estado. Instâncias da classe também podem ter métodos (definidos pela classe) para modificar seu estado.

class Veiculo:
    def __init__(self, marca, modelo, tipo):
        self.marca = marca
        self.modelo = modelo
        self.tipo = tipo
        self.tamanho_tanque_de_gasolina = 14
        self.quantidade_de_gasolina = 0

    def enche_o_tanque(self):
        self.quantidade_de_gasolina = self.tamanho_tanque_de_gasolina
        print('O tanque de gasolina agora está cheio.')

    def dirige(self):
        print(f'O {self.modelo} está sendo dirigido.')

Como visto no exemplo acima, uma classe é feita pra representar alguma coisa, no nosso caso um veiculo.

instancia (instance)

Como você pode ver na wikipedia instancia é um objeto cujo comportamento e estado são definidos pela classe.

O que isso significa?

Significa que quando chamamos uma classe nós temos uma instancia dela.

Quando temos uma instancia de uma classe nós chamamos essa instancia de um objeto.

No caso do nosso exemplo, pra chamar a classe Veiculo, basta fazer:

meu_veiculo = Veiculo('Honda', 'Ridgeline', 'Truck')

metodo (method)

Como classes representam objetos do mundo real, esses objetos tem comportamentos, seus comportamentos são contidos em funções, e essas funções são chamadas de metodos.

Ou seja, métodos nada mais são que funções que estão dentro de uma classe, por exemplo:

    def dirige(self):
        print(f'O {self.modelo} está sendo dirigido.')

atributo (attribute)

Os atributos assim como o próprio nome ja deixa a entender são as coisas que definem um objeto. Um veiculo tem uma marca, um modelo, um tipo, etc.

Então se eu quero que meu veiculo tenha tudo isso eu tenho que definir com os atributos.

Um exemplo é a quantidade de gasolina do nosso veiculo, que fizemos começar como 0.

        self.quantidade_de_gasolina = 0

__init__ nosso inicializador (initializer)

Muitas vezes nós temos que ter o objeto já com alguns atributos definidos, mas nós não queremos um valor padrão e sim que a pessoa que vá usar a classe defina esses atributos, pra isso nós temos o metodo __init__ onde cada parametro dele é obrigatório de ser passado ao criar o objeto.

class Veiculo:
    # isso obriga a pessoa que criar o veiculo a dizer qual a marca, o modelo e o tipo
    def __init__(self, marca, modelo, tipo): 
        # aqui atribuimos o que escrevemos na instancia a um atributo do nosso veiculo
        self.marca = marca
        self.modelo = modelo
        self.tipo = tipo

o parâmetro self

O parâmetro self é uma referência à instância atual da classe e é usado para acessar variáveis (atributos) ​​que pertencem à classe.

Por isso temos sempre que passar o self como primeiro parâmetro de um metodo. O python não lê esse primeiro parâmetro como se fosse um parâmetro que atribuimos/queremos atribuir algo a ele, então não precisa ter medo da marca (no nosso exemplo) que você passar ao instanciar a classe ser atribuida ao self ou coisa do tipo.

importando só uma parte do código

Se você quiser importar por exemplo apenas a classe Veiculo de dentro do exemplo basta fazer from meus_exemplos.exemplo import Veiculo

outras dicas e exemplos:

programação orientada a objeto

Recomendo que leia esse pequeno livro gratuito e open source pra entender melhor como funciona.

exemplos usados em algumas explicações:

Classes

Metodos e Atributos

Espero que tenha dado pra entender tudo, qualquer resquício de dúvida sinta-se livre pra perguntar :)