forked from digitalinnovationone/trilha-python-dio
-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request digitalinnovationone#8 from digitalinnovationone/0…
…2_programacao_orientada_objetos Merge dos Exercícios da Branch "02 programacao orientada objetos"
- Loading branch information
Showing
13 changed files
with
833 additions
and
0 deletions.
There are no files selected for viewing
30 changes: 30 additions & 0 deletions
30
02 - Programação Orientada a Objetos/02 - Classes e Objetos/01_desafio_bicicletaria.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
class Bicicleta: | ||
def __init__(self, cor, modelo, ano, valor): | ||
self.cor = cor | ||
self.modelo = modelo | ||
self.ano = ano | ||
self.valor = valor | ||
|
||
def buzinar(self): | ||
print("Plim plim...") | ||
|
||
def parar(self): | ||
print("Parando bicicleta...") | ||
print("Bicicleta parada!") | ||
|
||
def correr(self): | ||
print("Vrummmmm...") | ||
|
||
def __str__(self): | ||
return f"{self.__class__.__name__}: {', '.join([f'{chave}={valor}' for chave, valor in self.__dict__.items()])}" | ||
|
||
|
||
b1 = Bicicleta("vermelha", "caloi", 2022, 600) | ||
b1.buzinar() | ||
b1.correr() | ||
b1.parar() | ||
print(b1.cor, b1.modelo, b1.ano, b1.valor) | ||
|
||
b2 = Bicicleta("verde", "monark", 2000, 189) | ||
print(b2) | ||
b2.correr() |
31 changes: 31 additions & 0 deletions
31
...amação Orientada a Objetos/03 - Construtores e destrutores/01_construtores_destrutores.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
class Cachorro: | ||
def __init__(self, nome, cor, acordado=True): | ||
print("Inicializando a classe...") | ||
self.nome = nome | ||
self.cor = cor | ||
self.acordado = acordado | ||
|
||
def __del__(self): | ||
print("Removendo a instância da classe.") | ||
|
||
def falar(self): | ||
print("auau") | ||
|
||
|
||
def criar_cachorro(): | ||
c = Cachorro("Zeus", "Branco e preto", False) | ||
print(c.nome) | ||
|
||
|
||
c = Cachorro("Chappie", "amarelo") | ||
c.falar() | ||
|
||
print("Ola mundo") | ||
|
||
del c | ||
|
||
print("Ola mundo") | ||
print("Ola mundo") | ||
print("Ola mundo") | ||
|
||
# criar_cachorro() |
37 changes: 37 additions & 0 deletions
37
02 - Programação Orientada a Objetos/04 - Herança/01_heranca_simples.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
class Veiculo: | ||
def __init__(self, cor, placa, numero_rodas): | ||
self.cor = cor | ||
self.placa = placa | ||
self.numero_rodas = numero_rodas | ||
|
||
def ligar_motor(self): | ||
print("Ligando o motor") | ||
|
||
def __str__(self): | ||
return f"{self.__class__.__name__}: {', '.join([f'{chave}={valor}' for chave, valor in self.__dict__.items()])}" | ||
|
||
|
||
class Motocicleta(Veiculo): | ||
pass | ||
|
||
|
||
class Carro(Veiculo): | ||
pass | ||
|
||
|
||
class Caminhao(Veiculo): | ||
def __init__(self, cor, placa, numero_rodas, carregado): | ||
super().__init__(cor, placa, numero_rodas) | ||
self.carregado = carregado | ||
|
||
def esta_carregado(self): | ||
print(f"{'Sim' if self.carregado else 'Não'} estou carregado") | ||
|
||
|
||
moto = Motocicleta("preta", "abc-1234", 2) | ||
carro = Carro("branco", "xde-0098", 4) | ||
caminhao = Caminhao("roxo", "gfd-8712", 8, True) | ||
|
||
print(moto) | ||
print(carro) | ||
print(caminhao) |
34 changes: 34 additions & 0 deletions
34
02 - Programação Orientada a Objetos/04 - Herança/02_heranca_multipla.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
class Animal: | ||
def __init__(self, nro_patas): | ||
self.nro_patas = nro_patas | ||
|
||
def __str__(self): | ||
return f"{self.__class__.__name__}: {', '.join([f'{chave}={valor}' for chave, valor in self.__dict__.items()])}" | ||
|
||
|
||
class Mamifero(Animal): | ||
def __init__(self, cor_pelo, **kw): | ||
self.cor_pelo = cor_pelo | ||
super().__init__(**kw) | ||
|
||
|
||
class Ave(Animal): | ||
def __init__(self, cor_bico, **kw): | ||
self.cor_bico = cor_bico | ||
super().__init__(**kw) | ||
|
||
|
||
class Gato(Mamifero): | ||
pass | ||
|
||
|
||
class Ornitorrinco(Mamifero, Ave): | ||
def __init__(self, cor_bico, cor_pelo, nro_patas): | ||
super().__init__(cor_pelo=cor_pelo, cor_bico=cor_bico, nro_patas=nro_patas) | ||
|
||
|
||
gato = Gato(nro_patas=4, cor_pelo="Preto") | ||
print(gato) | ||
|
||
ornitorrinco = Ornitorrinco(nro_patas=2, cor_pelo="vermelho", cor_bico="laranja") | ||
print(ornitorrinco) |
22 changes: 22 additions & 0 deletions
22
02 - Programação Orientada a Objetos/05 - Encapsulamento/01_encapsulamento.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
class Conta: | ||
def __init__(self, nro_agencia, saldo=0): | ||
self._saldo = saldo | ||
self.nro_agencia = nro_agencia | ||
|
||
def depositar(self, valor): | ||
# ... | ||
self._saldo += valor | ||
|
||
def sacar(self, valor): | ||
# ... | ||
self._saldo -= valor | ||
|
||
def mostrar_saldo(self): | ||
# ... | ||
return self._saldo | ||
|
||
|
||
conta = Conta("0001", 100) | ||
conta.depositar(100) | ||
print(conta.nro_agencia) | ||
print(conta.mostrar_saldo()) |
23 changes: 23 additions & 0 deletions
23
02 - Programação Orientada a Objetos/05 - Encapsulamento/02_propriedades_exemplo_foo.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
class Foo: | ||
def __init__(self, x=None): | ||
self._x = x | ||
|
||
@property | ||
def x(self): | ||
return self._x or 0 | ||
|
||
@x.setter | ||
def x(self, value): | ||
self._x += value | ||
|
||
@x.deleter | ||
def x(self): | ||
self._x = 0 | ||
|
||
|
||
foo = Foo(10) | ||
print(foo.x) | ||
del foo.x | ||
print(foo.x) | ||
foo.x = 10 | ||
print(foo.x) |
13 changes: 13 additions & 0 deletions
13
02 - Programação Orientada a Objetos/05 - Encapsulamento/03_propriedades_exemplo_pessoa.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
class Pessoa: | ||
def __init__(self, nome, ano_nascimento): | ||
self.nome = nome | ||
self._ano_nascimento = ano_nascimento | ||
|
||
@property | ||
def idade(self): | ||
_ano_atual = 2022 | ||
return _ano_atual - self._ano_nascimento | ||
|
||
|
||
pessoa = Pessoa("Guilherme", 1994) | ||
print(f"Nome: {pessoa.nome} \tIdade: {pessoa.idade}") |
28 changes: 28 additions & 0 deletions
28
02 - Programação Orientada a Objetos/06 - Polimorfismo/01_polimorfismo.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
class Passaro: | ||
def voar(self): | ||
print("Voando...") | ||
|
||
|
||
class Pardal(Passaro): | ||
def voar(self): | ||
print("Pardal pode voar") | ||
|
||
|
||
class Avestruz(Passaro): | ||
def voar(self): | ||
print("Avestruz não pode voar") | ||
|
||
|
||
# NOTE: exemplo ruim do uso de herança para "ganhar" o método voar | ||
class Aviao(Passaro): | ||
def voar(self): | ||
print("Avião está decolando...") | ||
|
||
|
||
def plano_voo(obj): | ||
obj.voar() | ||
|
||
|
||
plano_voo(Pardal()) | ||
plano_voo(Avestruz()) | ||
plano_voo(Aviao()) |
23 changes: 23 additions & 0 deletions
23
...rientada a Objetos/07 - Atributos de classe ou instância/01_atributos_classe_instancia.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
class Estudante: | ||
escola = "DIO" | ||
|
||
def __init__(self, nome, matricula): | ||
self.nome = nome | ||
self.matricula = matricula | ||
|
||
def __str__(self) -> str: | ||
return f"{self.nome} - {self.matricula} - {self.escola}" | ||
|
||
|
||
def mostrar_valores(*objs): | ||
for obj in objs: | ||
print(obj) | ||
|
||
|
||
aluno_1 = Estudante("Guilherme", 1) | ||
aluno_2 = Estudante("Giovanna", 2) | ||
mostrar_valores(aluno_1, aluno_2) | ||
|
||
Estudante.escola = "Python" | ||
aluno_3 = Estudante("Chappie", 3) | ||
mostrar_valores(aluno_1, aluno_2, aluno_3) |
20 changes: 20 additions & 0 deletions
20
...entada a Objetos/08 - Métodos de classe e métodos estáticos/01_metodos_classe_estatico.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
class Pessoa: | ||
def __init__(self, nome, idade): | ||
self.nome = nome | ||
self.idade = idade | ||
|
||
@classmethod | ||
def criar_de_data_nascimento(cls, ano, mes, dia, nome): | ||
idade = 2022 - ano | ||
return cls(nome, idade) | ||
|
||
@staticmethod | ||
def e_maior_idade(idade): | ||
return idade >= 18 | ||
|
||
|
||
p = Pessoa.criar_de_data_nascimento(1994, 3, 21, "Guilherme") | ||
print(p.nome, p.idade) | ||
|
||
print(Pessoa.e_maior_idade(18)) | ||
print(Pessoa.e_maior_idade(8)) |
56 changes: 56 additions & 0 deletions
56
02 - Programação Orientada a Objetos/09 - Classes abstratas/01_classe_abstrata.py
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
from abc import ABC, abstractmethod, abstractproperty | ||
|
||
|
||
class ControleRemoto(ABC): | ||
@abstractmethod | ||
def ligar(self): | ||
pass | ||
|
||
@abstractmethod | ||
def desligar(self): | ||
pass | ||
|
||
@property | ||
@abstractproperty | ||
def marca(self): | ||
pass | ||
|
||
|
||
class ControleTV(ControleRemoto): | ||
def ligar(self): | ||
print("Ligando a TV...") | ||
print("Ligada!") | ||
|
||
def desligar(self): | ||
print("Desligando a TV...") | ||
print("Desligada!") | ||
|
||
@property | ||
def marca(self): | ||
return "Philco" | ||
|
||
|
||
class ControleArCondicionado(ControleRemoto): | ||
def ligar(self): | ||
print("Ligando o Ar Condicionado...") | ||
print("Ligado!") | ||
|
||
def desligar(self): | ||
print("Desligando o Ar Condicionado...") | ||
print("Desligado!") | ||
|
||
@property | ||
def marca(self): | ||
return "LG" | ||
|
||
|
||
controle = ControleTV() | ||
controle.ligar() | ||
controle.desligar() | ||
print(controle.marca) | ||
|
||
|
||
controle = ControleArCondicionado() | ||
controle.ligar() | ||
controle.desligar() | ||
print(controle.marca) |
Oops, something went wrong.