Created
January 23, 2019 20:07
-
-
Save edcrypt/b93eb5df2811296519b562844ca84c16 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Até agora nós só criamos funções. Elas são ótimas para processar dados e retornar resultados, mas não tanto para fazer simulações. Para isso, vamos usar *orientação a objetos*.\n", | |
"\n", | |
"Objetos tem algo que conhecem e algo que sabem fazer. Para fazer algo, eles precisam conversar com outros objetos." | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Uma *classe* é um objeto para criar objetos -- uma especie de \"molde\".\n", | |
"\n", | |
"Nesse exemplo, `Person` representa a *ideia* de uma pessoa, com tudo que ela pode saber ou fazer, mas não uma pessoa concreta." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"from datetime import date\n", | |
"\n", | |
"class Person:\n", | |
" \"\"\" I'm a human person.\n", | |
" I know my name and birthday, and how to calculate my own age in years.\n", | |
" \"\"\"\n", | |
" \n", | |
" def __init__(self, name, birthday):\n", | |
" self.name = name\n", | |
" self.birthday = birthday\n", | |
" \n", | |
" def first_name(self):\n", | |
" return self.name.split()[0]\n", | |
"\n", | |
" def age(self):\n", | |
" return NotImplemented\n" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Para usar nosso novo tipo, vamos criar uma *instancia* -- uma espécia de \"materialização\" da nossa pessoa conceitual." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"me = Person('Eduardo Padoan', date(1984, 10, 2))\n", | |
"\n", | |
"assert me.first_name() == 'Eduardo'\n", | |
"assert me.age == 35" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Um exemplo mais útil seria um cadastro de funcionários. \n", | |
"Mas um funcionário compartilha conceitos com `Person`, certo?\n", | |
"Para evitar repetições, podemos usar o conceito de *especialização* -- para isso temos a funcionalidade de **herança**:" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class Employee(Person):\n", | |
" \"\"\"I'm an employee of a company.\n", | |
" I know a person details and their function and salary.\n", | |
" \"\"\"\n", | |
" \n", | |
" def __init__(self, name, birthday, email, phone):\n", | |
" super().__init__(name, birthday)\n", | |
" self.email = email\n", | |
" self.phone = phone" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"class Account:\n", | |
" \"\"\" I represent a banking account.\n", | |
" I know the balance and who I belong to.\n", | |
" \"\"\"\n", | |
" def __init__(self, balance, owner):\n", | |
" self.balance = balance\n", | |
" self.owner = owner\n", | |
" \n", | |
" def deposit(self, amount):\n", | |
" return NotImplemented\n", | |
" \n", | |
" def withdraw(self, amount):\n", | |
" return NotImplemented" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.7" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Alguns erros foram deixados de propósito para que corrigíssemos durante a aula.