Grupo Katie apresenta:
nicurso de Python - PO
Mi O
Katie’s Month
File Edit View Label 10:00 AM
KATIE
Saindo do buraco negro e impulsionando meninas para a computação
O Instituto de Computação (IC) sempre teve poucas
mulheres em seu corpo discente, sendo isso um reflexo
de como é o mercado de trabalho na área de computação.
Assim, se fez necessário a fundação de um projeto que
acolhesse e incentivasse mulheres na área.
O nome Katie é uma homenagem à cientista Katie Bouman,
que liderou a equipe de cientistas responsável pelo
algoritmo que possibilitou a primeira visualização de
um buraco negro em nossa galáxia.
Chat Trash
File Edit View Label 10:00 AM
Quem somos nós?
Rebeca Brandão Evyllyn dos Santos Mateus Patriota Ullyanne Patriota Hiago Cavalcante
Instrutores Monitores
Chat Trash
File Edit View Label 10:00 AM
Tô com dúvida, e agora?
Não se preocupe! Criamos um
grupo no Whatsapp pra você se
sentir à vontade, tirar suas
dúvidas e compartilharmos
conhecimento!
Chat Trash
File Edit View Label 10:00 AM
Tô com dúvida, e agora?
Não se preocupe! Criamos um grupo Usaremos o Classroom para postar
do Whatsapp pra você se sentir à links úteis e avisos. Você pode
vontade, tirar suas dúvidas e postar sua dúvida lá, mas o grupo
compartilharmos conhecimento! do Whatsapp existe justamente para
isso.
Não se sintam incapacitadas(os) Criamos um material complementar
por não entender alguma coisa. bem legal para você utilizar em
Ninguém achará isso de você. seus estudos, ele será postado no
Estamos aqui para te ajudar :) Classroom.
Chat Trash
File Edit View Label 10:00 AM
O que você verá durante o curso
Dia 1 (25/07) Dia 2 (27/07) Dia 3 (01/08)
1 Classes, métodos,
atributos e objetos 3 Herança
5 Composição
2 Construtor:
inicializando o
objeto 4 Polimorfismo 6 Encapsulamento
Chat Trash
File Edit View Label 10:00 AM
Google Colab
Ferramenta
Chat Trash
File Edit View Label 10:00 AM
Projeto
Após este minicurso, você estará totalmente apto para desenvolver...
Chat Trash
File Edit View Label 10:00 AM
O que é programação orientada a objetos?
Diferentemente de C ou Fortran, que têm como paradigma a
programação procedural, Python toma para si um paradigma de
programação criado em 1960: programação orientada a objetos.
POO gira completamente em torno da criação e manipulação de
objetos!
Chat Trash
File Edit View Label 10:00 AM
O que é programação orientada a objetos?
E por que objeto?
Imagine que você, cansado de tanto programar, decidiu estudar
a natureza! Percebeu que os humanos e as frutas têm muitas
características diferentes e a maior delas é que toda fruta é
um vegetal e todo humano é um animal. Como bom pesquisador
que és, começou a ver padrões nas coisas e notou que todo
humano respira e que toda fruta amadurece.
Chat Trash
File Edit View Label 10:00 AM
O que é programação orientada a objetos?
E por que objeto?
Pensando nessas diferenças e na facilidade de categorizar os
seres da natureza, a orientação a objetos foi criada.
Assim, os programadores viram que a programação procedural
não conseguia adaptar-se à vida real, pois o código só
poderia ser alterado por meio de funções. A partir disso, o
foco passou a ser o objeto.
Chat Trash
File Edit View Label 10:00 AM
Classes, métodos, atributos e objetos
Conceito
Classe Cachorro: Método: sentar
Objeto: Ralph Objeto: Paçoca Atributo: Pelagem mista
Atributo raça: Pug Atributo raça: Salsicha (múltiplas cores)
Chat Trash
File Edit View Label 10:00 AM
Classes, métodos, atributos e objetos
Conceito
Dessa forma, podemos dizer que as classes
têm como objetivo definir um determinado
grupo de dados de um único tipo ao
especificar os elementos de dados que um
objeto contém (atributos) e o comportamento
pertencente ao objeto (métodos)
Chat Trash
File Edit View Label 10:00 AM
Construtor
Inicializando um objeto
class: definir uma classe
def __init__ : definir construtor
Chat Trash
File Edit View Label 10:00 AM
Definindo uma classe
O parâmetro self e a criação de atributos
self: representação
da instância.
possibilidade de ter
atributos distintos
e/ou únicos em cada
instância.
Chat Trash
File Edit View Label 10:00 AM
Definindo uma classe
Métodos
def: criação do método late()
Chat Trash
File Edit View Label 10:00 AM
Objeto
Instanciando nosso primeiro
doguinho, digo, objeto: Totó
Chat Trash
File Edit View Label 10:00 AM
Interação com o objeto
Chat Trash
File Edit View Label 10:00 AM
Atributos de classe
Quantidade = atributo de classe* para
armazenar quantidade de objetos
*Atributo de classe é utilizado para armazenar
informações relevantes à classe como, por exemplo, a
quantidade de objetos de Cachorro que instanciamos.
Chat Trash
File Edit View Label 10:00 AM
Mais sobre métodos
mudaIdade: método capaz de alterar
atributo "idade".
Chat Trash
File Edit View Label 10:00 AM
Classes default
O que vimos até agora foi a criação str (string) = "Hello World"
de classes personalizadas, onde int (integer) = 1
definimos as características que uma float = 1.54
instância de uma classe deve ter e
list = [1, 2, 3]
seus métodos.
Mas você sabia que existem classes
definidas pelo próprio Python? São
elas str, int, float, list etc.
Chat Trash
File Edit View Label 11:00 AM
Até 27/07!
Nos vemos na próxima aula!
✧ ・゚Dúvidas?・゜
Chat Trash
File Edit View Label 10:00 AM
O que já vimos até agora?
Dia 1 (25/07)
1 Classes, métodos,
atributos e objetos
2 Construtor:
inicializando o
objeto
Chat Trash
File Edit View Label 10:00 AM
O que veremos hoje?
Dia 2 (27/07)
3 Herança
4 Polimorfismo
Chat Trash
File Edit View Label 10:00 AM
Herança
Todo filho tem algumas características dos pais e chamamos
isso de herança genética! Inspirando-se neste conceito de
herança, foi criado o conceito de herança na programação e
então implementado em Python.
Chat Trash
File Edit View Label 10:00 AM
Herança
Sabemos que tanto o gato quanto o humano são seres vivos e
portanto nascem e amadurecem. Observe a classe SerVivo:
Chat Trash
File Edit View Label 10:00 AM
Herança
Então as classes Humano e Gato podem herdar as propriedades
de SerVivo!
Chat Trash
File Edit View Label 10:00 AM
Herança
Podemos mandar o objeto Humano nascer? Claro!
humano.nascer(‘Wilson’)
OBS: o método nascer() está em SerVivo!
Chat Trash
File Edit View Label 10:00 AM
Herança
E se pedirmos ao objeto Gato para sorrir ou ao objeto Humano
para miar?
erro de atribuição!
Chat Trash
File Edit View Label 10:00 AM
Herança
Vamos agora criar uma nova classe filha de SerVivo (ou apenas
subclasse): Cachorro.
Você consegue identificar o que está faltando?
Chat Trash
File Edit View Label 10:00 AM
Herança
Perceba que diferentemente das outras classes, não chamamos
super().__init__() em seu construtor. Por conta disso, o
interpretador não inicia a nova classe com o construtor da
classe mãe. Dessa maneira, nosso objeto Cachorro não herdará
nunca o atributo idade, somente os métodos.
Chat Trash
File Edit View Label 10:00 AM
Herança
Se quisermos, além de usar os atributos da classe mãe,
adicionar novos atributos, é somente preciso adicionar ao
__init__ da classe filha.
Crianca vai herdar atributos e
métodos tanto de Humano quanto de
SerVivo.
Chat Trash
File Edit View Label 10:00 AM
Herança
E se quisermos um __init__ na classe filha que receba pelo
menos um input do usuário diferente da classe mãe?
Ela recebe brinquedoFavorito diferentemente da sua classe mãe
Chat Trash
File Edit View Label 10:00 AM
Herança
Em adição, a herança nos possibilita o uso de métodos
sobrescritos: se um filho tem um método com o mesmo nome de
um método do pai, o interpretador executa o do filho.
Chat Trash
File Edit View Label 10:00 AM
Polimorfismo
Polimorfismo é a capacidade de um objeto poder ser
referenciado de várias formas.
Cuidado! Polimorfismo não quer dizer que o objeto fica se
transformando. Muito pelo contrário, um objeto nasce de um
tipo e morre daquele tipo, o que pode mudar é a maneira como
nos referimos a ele.
Chat Trash
File Edit View Label 10:00 AM
Polimorfismo
Exemplo na vida real
Ao ir em alguns estabelecimentos, há sempre uma repartição
restrita a funcionários, permitindo a entrada apenas daqueles
que apresentarem seu crachá.
Chat Trash
File Edit View Label 10:00 AM
Polimorfismo
Exemplo na vida real
Convertendo isso para código, teríamos uma classe mãe
Funcionário e classes filhas Gerente e Atendente, visto que
esses últimos, apesar de serem funcionários, possuem funções e
responsabilidades diferentes em um banco.
Chat Trash
File Edit View Label 10:00 AM
Polimorfismo
Exemplo na vida real
E como permitir que apenas funcionários façam uma determinada
ação, mas ao mesmo tempo torná-las individuais, ou seja, que
cada tipo de funcionário trabalhe, mas trabalhe de determinada
maneira, conforme sua função?
Chat Trash
File Edit View Label 10:00 AM
OPÇÃO 1 - vários ifs
ALERTA DE CODE SMELL!
Chat Trash
File Edit View Label 10:00 AM
OPÇÃO 2 - Polimorfismo!
Ainda bem que temos o polimorfismo para salvar o dia!
Não importa como nos referenciamos a um objeto, o método que
será invocado é sempre o que pertence a ele mesmo.
Chat Trash
File Edit View Label 10:00 AM
Funcionários
Assim, chegamos ao nosso objetivo
com uma classe mãe Funcionário e
classes filhas Gerente e
Atendente.
Chat Trash
File Edit View Label 10:00 AM
Resultado Final - Polimorfismo
Legal, né?
Dessa forma, o código está enxuto. A única
coisa que precisamos entender, com esse
trecho de código, é que queremos que os
funcionários trabalhem.
Chat Trash
File Edit View Label 11:00 AM
Até 08/10!
Nos vemos na próxima - e última - aula!
✧ ・゚dúvidas?・゜
Chat Trash
File Edit View Label 10:00 AM
O que já vimos até agora?
Dia 1 (04/10) Dia 2 (06/10)
1 Classes, métodos,
atributos e objetos 3 Herança
2 Construtor:
inicializando o
objeto 4 Polimorfismo
Chat Trash
File Edit View Label 10:00 AM
O que veremos hoje?
Dia 3 (08/10)
5 Composição
6 Encapsulamento
Chat Trash
File Edit View Label 10:00 AM
Composição
A composição torna possível que uma
classe tenha como atributos um ou
mais objetos de outras classes e
permite uma associação entre objetos.
Atenção! Este é um
dos conceitos
fundamentais de POO!
Composição Herança
Chat Trash
File Edit View Label 10:00 AM
Composição
Classe Conta criada
para um sistema de
internet banking.
Chat Trash
File Edit View Label 10:00 AM
Composição
Como toda conta possui
histórico de transações,
foi criada também a Classe
Histórico.
Chat Trash
File Edit View Label 10:00 AM
Composição
Será que conseguimos
aproveitar algum
método/atributo da classe
Conta na classe Histórico?
Chat Trash
File Edit View Label 10:00 AM
Composição
A resposta é não!
Um objeto instanciado de Conta é
completamente diferente de um objeto de
Histórico. Eles possuem os próprios
métodos e atributos, não conseguimos
estabelecer uma relação de herança.
Chat Trash
File Edit View Label 10:00 AM
Composição
E é nesse momento que
usaremos a composição!
Ela fará com que cada
objeto de Conta possua
um histórico. Assim,
criamos um atributo em
Conta que recebe um
objeto de Histórico.
Chat Trash
File Edit View Label 10:00 AM
Encapsulamento
Separar em partes
Objetivo: esconder de Importância: permite que
todos os usuários de uma a implementação das
classe algumas funcionalidades de uma
informações que não são classe sejam alteradas
necessárias ao uso da sem que o código que a
classe. usa precise mudar.
Chat Trash
File Edit View Label 10:00 AM
Encapsulamento
Problema: Como nossa
classe é projetada com
atributos públicos,
podemos quebrar a
interface e simplesmente
acessar e alterar os
atributos que deveriam ser
protegidos.
Chat Trash
File Edit View Label 10:00 AM
Encapsulamento
Solução: Manter os
atributos protegidos e
decorar os métodos com
um decorador que se
chama property.
Chat Trash
File Edit View Label 10:00 AM
Encapsulamento
Mais sobre o property:
Possui métodos extras, como
um getter e um setter.
Quando aplicado em um
objeto, nos retorna uma
cópia dele com as suas
funcionalidades. Logo, somos
capazes de chamar nossos
métodos sem os parênteses e
como se fossem atributos
públicos.
Chat Trash
File Edit View Label 10:00 AM
Encapsulamento
IMPORTANTE: Só devemos usar
encapsulamento quando ele for
realmente necessário, pois
geralmente não são todos os
atributos de uma classe que
precisam desse recurso.
Chat Trash
File Edit View Label 10:00 AM
Antes de finalizar...
Sugestão para o projeto
O que acontece se
printarmos um
objeto?
Chat Trash
File Edit View Label 10:00 AM
Sugestão para o projeto
O que acontece se
printarmos um
objeto?
Chat Trash
File Edit View Label 10:00 AM
Sugestão para o projeto
método __str__:
útil para printar as
informações do seu
objeto
Chat Trash
File Edit View Label 10:00 AM
Projeto
Após a data de entrega do
projeto, iremos disponibilizar o
código de uma das maneiras de
implementá-lo
lembrando que o critério de emissão do
certificado é a entrega do projeto
Chat Trash
File Edit View Label 10:00 AM
That's all, folks!
Finalizamos o nosso conteúdo por aqui! Esperamos que
você tenha aprendido bastante e que tenha sido uma
experiência bem legal :))
Chegou a hora de fazer o projeto! A
atividade está no Classroom e pode
ser feita até o dia 18/10. Fique à
vontade para consultar os monitores!
Chat Trash
File Edit View Label 10:00 AM
Onde nos encontrar?
Quer ficar sempre por dentro das novidades? Nos
acompanhe em nossas redes sociais!
@katie.ufal KATIE - Projeto de bit.ly/LinkedinKatie bit.ly/SiteKatie
Extensão IC/UFAL
Chat Trash
File Edit View Label 10:00 AM
Chat Trash