Skip to content

Commit

Permalink
Merge pull request #9 from vbuxbaum/cap-introducao
Browse files Browse the repository at this point in the history
Cap introducao - implementações 14 a 21
  • Loading branch information
vbuxbaum authored Apr 3, 2021
2 parents 78f406c + 226012f commit 8d486f8
Show file tree
Hide file tree
Showing 8 changed files with 123 additions and 0 deletions.
23 changes: 23 additions & 0 deletions 1_introducao/14_max_generico.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
"""
Nesta implementação em Java, o tipo genérico 'Item' implementa o método
compara() que é assegurado pela interface 'Item'.
Como o Python permite que seja feita a implementação do comparador '>' através
do magic method '__gt__', foi decidido pela sua utilização.
"""


class Max:
def max(itens):
item_max = itens[0]
for item in itens[1:]:
if item > item_max:
item_max = item
return item_max


if __name__ == "__main__":
itens_teste_inteiro = [1, 2, 3, 4, 5]
assert Max.max(itens_teste_inteiro) == 5

itens_teste_string = ["zhiuh", "poas", "asd", "basd", "choi"]
assert Max.max(itens_teste_string) == "zhiuh"
18 changes: 18 additions & 0 deletions 1_introducao/15_interface_item.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
"""
Python não oferece a implementação explícita de interfaces, como Java, mas o
mesmo comportamento pode ser replicado de duas formas principais.
"""


from abc import ABC, abstractmethod


class Item1(object):
def __gt__(self, outro_item):
raise NotImplementedError()


class Item2(ABC):
@abstractmethod
def create_purchase_invoice(self, purchase):
pass
23 changes: 23 additions & 0 deletions 1_introducao/16_meu_item.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
class Item1(object):
def __gt__(self, outro_item):
raise NotImplementedError()


class MeuItem(Item1):
def __init__(self, chave):
self.chave = chave

def __gt__(self, outro_item):
return self.chave > outro_item.chave


if __name__ == "__main__":
item_teste_1 = MeuItem(321)
item_teste_2 = MeuItem(123)

assert item_teste_1 > item_teste_2

item_teste_3 = MeuItem('321')
item_teste_4 = MeuItem('123')

assert item_teste_3 > item_teste_4
5 changes: 5 additions & 0 deletions 1_introducao/17_encontra_max.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
"""
Nesta implementação em Java, o livro apenas testa a implementação 14. Como já
foram implementados testes na implementação 16, a implementação 17 se torna
redundante.
"""
12 changes: 12 additions & 0 deletions 1_introducao/18_classe_interna.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class Lista:
class Celula:
pass


if __name__ == "__main__":
lista_teste = Lista()
celula_teste = Lista().Celula()

assert isinstance(lista_teste, Lista), type(lista_teste)
assert not isinstance(celula_teste, Lista), type(celula_teste)
assert isinstance(celula_teste, Lista.Celula), type(celula_teste)
16 changes: 16 additions & 0 deletions 1_introducao/19_this_self.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
"""
Nesta implementação em Java, o objetivo é ilustrar o uso do objeto 'this'. Em
Python, o objeto equivalente é 'self'.
"""


class Conta:
def __init__(self, saldo):
self.saldo = saldo


if __name__ == "__main__":

conta_teste = Conta(123.45)

assert conta_teste.saldo == 123.45
23 changes: 23 additions & 0 deletions 1_introducao/20_excecoes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
class Divisor:
def divisao_except(a, b):
try:
if not b:
raise Exception("Divisão por 0")
return a / b
except Exception as erro:
return str(erro)

def divisao_raise(a, b):
if not b:
raise Exception("Divisão por 0, raise externo")
return a / b


if __name__ == "__main__":
assert Divisor.divisao_except(3, 2) == 1.5
assert Divisor.divisao_except(3, 0) == "Divisão por 0"

try:
Divisor.divisao_raise(3, 0)
except Exception as erro:
assert str(erro) == "Divisão por 0, raise externo", erro
3 changes: 3 additions & 0 deletions 1_introducao/21_excecoes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
"""
Implementado no arquivo 20_excecoes.py
"""

0 comments on commit 8d486f8

Please sign in to comment.