Mudanças entre as edições de "Oficina: Objetos Pythônicos"
(21 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 |
||
Linha 10: | Linha 50: | ||
|style="text-align:right; font-weight: bold;"|10||Encapsulamento e ''data hiding'' do jeito Pythônico |
|style="text-align:right; font-weight: bold;"|10||Encapsulamento e ''data hiding'' do jeito Pythônico |
||
|- |
|- |
||
− | |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;"|15||'''Exercício 1''': implementação de um tipo Set sobre vetores de bits |
|- |
|- |
||
|style="text-align:right; font-weight: bold;"|10||Herança com sabedoria: algumas heurísticas |
|style="text-align:right; font-weight: bold;"|10||Herança com sabedoria: algumas heurísticas |
||
Linha 16: | Linha 56: | ||
|style="text-align:right; font-weight: bold;"|12||Tipagem ganso: ABCs e subclasses virtuais |
|style="text-align:right; font-weight: bold;"|12||Tipagem ganso: ABCs e subclasses virtuais |
||
|- |
|- |
||
− | |style="text-align:right; font-weight: bold;"| |
+ | |style="text-align:right; font-weight: bold;"|15||INTERVALO |
|- |
|- |
||
|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;"|5||Pegadinhas ao herdar de tipos embutidos: métodos não virtuais |
||
|- |
|- |
||
− | |style="text-align:right; font-weight: bold;"|15||Exercício 2: consertando um dicionário quebrado |
+ | |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'': classes para dados |
|style="text-align:right; font-weight: bold;"|7||''Data classes'': classes para dados |
||
Linha 28: | Linha 68: | ||
|style="text-align:right; font-weight: bold;"|3||Métodos vinculados ou desvinculados (''bound'' vs. ''unbound'') |
|style="text-align:right; font-weight: bold;"|3||Métodos vinculados ou desvinculados (''bound'' vs. ''unbound'') |
||
|- |
|- |
||
− | |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;"|15||'''Exercício 3''': refatorando uma classe legada para aproveitar recursos modernos de Python |
|- |
|- |
||
|style="text-align:right; font-weight: bold;"|7||Projetos excelentes (quase) sem classes |
|style="text-align:right; font-weight: bold;"|7||Projetos excelentes (quase) sem classes |
||
Linha 34: | Linha 74: | ||
|style="text-align:right; font-weight: bold;"|5||Conclusão |
|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
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 |