Mudanças entre as edições de "Oficina: Objetos Pythônicos"

De Garoa Hacker Clube
Ir para navegação Ir para pesquisar
(Criou página com '{| !style="text-align:right;"|Tempo<br>(minutos)!!Atividade |- |style="text-align:right; font-weight: bold;"|7||Learning through introspection: Everything is an object. Almost...')
 
 
(23 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
  +
[[Arquivo:Pyob-mindmap.png|360px|thumb|right|Mapa mental: Programação Orientada a Objetos em Python]]
  +
  +
Objetos e classes fazem parte do Python desde a versão 1 — não um remendo tardio. Mas todas as linguagens implementam e suportam OOP de maneiras diferentes. Padrões "clássicos" que fazem sentido em outros lugares podem não ser tão úteis em Python, e Python oferece soluções próprias para alguns problemas comuns.
  +
  +
Este tutorial é sobre OOP moderno e idiomático em Python 3.7. A maior parte da discussão será relevante para as versões anteriores até o Python 2.7, mas algus recursos mais recentes serão destacados.
  +
  +
== Como participar ==
  +
  +
Atvididade gratuita. Não é necessário se inscrever. Basta comparecer ao [[Sede#Como_chegar|Garoa Hacker Clube]] 2ª-feira, 15/abr/2019, '''antes''' de 19:25.
  +
  +
O Garoa estará aberto a partir de 19:00. A oficina vai começar às 19:30, sem atraso porque precisamos controlar o tempo.
  +
  +
É esperado que cada pessoa participante respeite o [[Código de Conduta Completo|Código de Conduta]] do Garoa.
  +
  +
== Pré-requisitos ==
  +
  +
* É necessário saber o básico de programação em Python.
  +
  +
* Traga o seu computador. Faremos exercícios, e as pessoas participantes serão estimuladas a trabalhar em duplas.
  +
  +
* Instale Python 3.7 e pytest antes de ir ao Garoa.
  +
  +
== Público alvo ==
  +
  +
Este tutorial é para quem já programa em Python. Espera-se que os participantes conheçam o Python no nível do Tutorial oficial de Python, tenham alguma experiência prática com a linguagem e conheçam conceitos básicos de Programação Orientada a Objetos — mesmo que a maior parte de sua experiência com OOP tenha sido com outras linguagens como Java, C #, C++, PHP ou Ruby.
  +
  +
== Material ==
  +
  +
Em desenvolvimento: [https://github.com/ramalho/pyob/blob/master/01-objects.ipynb Jupyter Notebook com exemplos e figuras]
  +
  +
== Atividades ==
  +
  +
Tempo total: 2h45', incluindo intervalo.
  +
  +
Início: '''pontualmente''' às 19:30. Término: 22:15.
  +
  +
  +
  +
=== Possível roteiro ===
  +
 
{|
 
{|
 
!style="text-align:right;"|Tempo<br>(minutos)!!Atividade
 
!style="text-align:right;"|Tempo<br>(minutos)!!Atividade
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|7||Learning through introspection: Everything is an object. Almost.
+
|style="text-align:right; font-weight: bold;"|7||Aprendendo com introspecção: ''quase'' tudo é um objeto.
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|7||Duck-typing a.k.a. extreme polymorphism.
+
|style="text-align:right; font-weight: bold;"|7||Duck-typing ou tipagem pato: polimorfismo extremo.
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|15||Profitable polymorphism with the Python Data Model.
+
|style="text-align:right; font-weight: bold;"|15||Polimorfismo produtivo com o ''Python Data Model''
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|10||Encapsulation and data hiding the Python way.
+
|style="text-align:right; font-weight: bold;"|10||Encapsulamento e ''data hiding'' do jeito Pythônico
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|15||Exercise 1: implementing a set type from bit arrays.
+
|style="text-align:right; font-weight: bold;"|15||'''Exercício 1''': implementação de um tipo Set sobre vetores de bits
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|10||Inheritance within reason: a few heuristics.
+
|style="text-align:right; font-weight: bold;"|10||Herança com sabedoria: algumas heurísticas
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|12||Goose typing: Abstract Base Classes and virtual subclasses.
+
|style="text-align:right; font-weight: bold;"|12||Tipagem ganso: ABCs e subclasses virtuais
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|30||BREAK
+
|style="text-align:right; font-weight: bold;"|15||INTERVALO
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|5||Caveats when subclassing built-ins: "non-virtual" methods.
+
|style="text-align:right; font-weight: bold;"|5||Pegadinhas ao herdar de tipos embutidos: métodos não virtuais
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|15||Exercise 2: fixing a broken dict subclass.
+
|style="text-align:right; font-weight: bold;"|15||'''Exercício 2''': consertando um dicionário quebrado
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|7||Data classes.
+
|style="text-align:right; font-weight: bold;"|7||''Data classes'': classes para dados
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|17||Class attributes: from simple values to properties and descriptors.
+
|style="text-align:right; font-weight: bold;"|17||Atributos de classes: de valores simples a propriedades e descritores.
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|3||Unbound vs. bound methods: descriptors explain it all.
+
|style="text-align:right; font-weight: bold;"|3||Métodos vinculados ou desvinculados (''bound'' vs. ''unbound'')
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|15||Exercise 3: refactoring a legacy class to leverage modern Python features.
+
|style="text-align:right; font-weight: bold;"|15||'''Exercício 3''': refatorando uma classe legada para aproveitar recursos modernos de Python
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|7||Outstanding design (almost) without classes.
+
|style="text-align:right; font-weight: bold;"|7||Projetos excelentes (quase) sem classes
 
|-
 
|-
|style="text-align:right; font-weight: bold;"|5||Wrapping up.
+
|style="text-align:right; font-weight: bold;"|5||Conclusão
 
|}
 
|}
  +
  +
== Referências ==
  +
  +
  +
* https://github.com/ramalho/pyob
  +
  +
* https://github.com/ramalho/modernoopy

Edição atual tal como às 13h54min de 15 de abril de 2019

Mapa mental: Programação Orientada a Objetos em Python

Objetos e classes fazem parte do Python desde a versão 1 — não um remendo tardio. Mas todas as linguagens implementam e suportam OOP de maneiras diferentes. Padrões "clássicos" que fazem sentido em outros lugares podem não ser tão úteis em Python, e Python oferece soluções próprias para alguns problemas comuns.

Este tutorial é sobre OOP moderno e idiomático em Python 3.7. A maior parte da discussão será relevante para as versões anteriores até o Python 2.7, mas algus recursos mais recentes serão destacados.

Como participar

Atvididade gratuita. Não é necessário se inscrever. Basta comparecer ao Garoa Hacker Clube 2ª-feira, 15/abr/2019, antes de 19:25.

O Garoa estará aberto a partir de 19:00. A oficina vai começar às 19:30, sem atraso porque precisamos controlar o tempo.

É esperado que cada pessoa participante respeite o Código de Conduta do Garoa.

Pré-requisitos

  • É necessário saber o básico de programação em Python.
  • Traga o seu computador. Faremos exercícios, e as pessoas participantes serão estimuladas a trabalhar em duplas.
  • Instale Python 3.7 e pytest antes de ir ao Garoa.

Público alvo

Este tutorial é para quem já programa em Python. Espera-se que os participantes conheçam o Python no nível do Tutorial oficial de Python, tenham alguma experiência prática com a linguagem e conheçam conceitos básicos de Programação Orientada a Objetos — mesmo que a maior parte de sua experiência com OOP tenha sido com outras linguagens como Java, C #, C++, PHP ou Ruby.

Material

Em desenvolvimento: Jupyter Notebook com exemplos e figuras

Atividades

Tempo total: 2h45', incluindo intervalo.

Início: pontualmente às 19:30. Término: 22:15.


Possível roteiro

Tempo
(minutos)
Atividade
7 Aprendendo com introspecção: quase tudo é um objeto.
7 Duck-typing ou tipagem pato: polimorfismo extremo.
15 Polimorfismo produtivo com o Python Data Model
10 Encapsulamento e data hiding do jeito Pythônico
15 Exercício 1: implementação de um tipo Set sobre vetores de bits
10 Herança com sabedoria: algumas heurísticas
12 Tipagem ganso: ABCs e subclasses virtuais
15 INTERVALO
5 Pegadinhas ao herdar de tipos embutidos: métodos não virtuais
15 Exercício 2: consertando um dicionário quebrado
7 Data classes: classes para dados
17 Atributos de classes: de valores simples a propriedades e descritores.
3 Métodos vinculados ou desvinculados (bound vs. unbound)
15 Exercício 3: refatorando uma classe legada para aproveitar recursos modernos de Python
7 Projetos excelentes (quase) sem classes
5 Conclusão

Referências