Dia 11 [missão Python — parte 5]: Usando o turtle e classe!

Mi
Just Trying to develop
3 min readJul 23, 2017

Eae gente?!

Fiquei afastada nesses últimos dias, sem estudar e sem fazer nada útil (shame on me :$ lol). Mas ontem tomei vergonha na minha cara e resolvi voltar para os meus estudos (que diga-se de passagem estão suuuuuuuper atrasados :o ).

Voltando ao curso da Udacity (Programming foundations with Python), o próximo exercício é usar o módulo turtle para desenhar.

A primeira observação que me deixou um tanto quanto descontente é que não consegui usar o “for” para desenhar um quadrado, então usei o “while” mesmo. O teste foi assim:

import turtlei = 0while i <= 4:
turtle.forward(50)
turtle.right(90)
i = i + 1

E o resultado foi esse:

[caption id=”attachment_687" align=”alignnone” width=”323"]

PRINT_quadrado-turtle

esse foi o basiquinho[/caption]

Meu quadrado customizado ficou assim:

[caption id=”attachment_692" align=”alignnone” width=”997"]

PRINT_turtle-customize

esse com pequenas customizações, porém não está usando a classe Turtle[/caption]

No código exemplo do Udacity, ele usa a classe Turtle, então mudei para usar no meu código:

import turtledef draw_square():i = 1window = turtle.Screen()
window.bgcolor("black")
brad = turtle.Turtle()
while i <= 4:
brad.pencolor("violet")
brad.pensize(2)
brad.shape("triangle")
brad.speed(2)
brad.forward(100)
brad.right(90)
i = i + 1
window.exitonclick()draw_square()

O turtle é um módulo muito comumente usado para ensinar programação para crianças (o que faz sentido, afinal é um módulo gráfico, bem mais divertido para ensinar programação para elas :D ). Ele é primitivo mas é orientado a objetos e/ou procedures. Até o momento, os exercícios trabalhavam usando os módulos e as funções inseridas neles. o turtle é um módulo que possue a classe Turtle. Mas o que é uma classe? O instrutor exemplifica uma classe como sendo:

“uma caixa embalada com perfeição que reúne muito bem seu conteúdo. Ela nos permite escrever códigos como turtle.Turtle()”

Ele faz ainda alguns comentários sobre o que acontece por trás do uso dela no exercício de desenhar o quadrado:

Visualmente, parece que estamos chamando somente uma função, mas na verdade, quando executamos esse código, estamos chamando uma função chamada init, que foi definida dentro da classe Turtle e faz uma inicialização criando um espaço na memória para uma nova instância ou um novo objeto da classe. No exemplo, essa instância é chamada brad. Quando é criada essa instância, ela pode acessar todos os métodos da classe Turtle.

Eu vou ser muito sincera… há muitos anos eu tento entender orientação a objetos sem sucesso. Essa explicação não foi muito diferente. Fiquei com mais dúvidas do que com esclarecimentos. Por exemplo:

Quando eu digo que criando uma instância e podemos acessar os métodos dentro da classe Turtle, é a “mesma coisa” que dizer que eu posso usar funções da classe Turtle?

Enfim, então pra variar parei a aula e fui atrás de tentar entender o que é uma classe, objeto, método, instância, essas paradas ai de O.O.:

No wikilivros e na wikipedia li:

  • uma classe representa objetos com característica semelhantes. Ela define os comportamentos dos seus objetos através dos métodos e de quais estados ele é capaz de manter em seus atributos.
  • um objeto é uma instância (ou seja, um exemplar) de uma classe. Sendo assim, no meu exemplo, quando eu declarei: brad = turtle.Turtle(), o significado é: pegue a classe Turtle dentro do módulo turtle e instancie (“batize”) ela de brad. E fazendo isso, todos os métodos, que são comportamentos dos objetos de uma classe (e que se eu entendi bem, seriam equivalentes às funções se estivéssemos falando de programação procedural) disponíveis para a classe Turtle ficam disponíveis para serem usadas pela instância brad. [OBS:. isso significa que, a grosso modo, a resposta para a minha pergunta anterior é SIIIIIIM!]

Ainda tem aquelas questões de herança e encapsulamento mas achei que para hoje, entender finalmente esses conceitos já tava ótimo! (claro que vou encaminhar esse post para meus amigos nerds, para ver se eu entendi direito hihihi :D )

A Missão do dia não foi concluída mas eu estou contente de ter entendido essa joça depois de tantos anos! hihi

No mais, até o próximo post.

Arrivederci!

Mi

--

--

Mi
Just Trying to develop

Big data enthusiastic, studying new technologies by myself. Passionate about Italy, languages, concerts, games, sitcoms, movies, coffee, cartoons, karaoke, etc.