diff --git a/oo/__init__.py b/oo/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/oo/carro.py b/oo/carro.py new file mode 100644 index 000000000..0b90160cf --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,94 @@ + +""" + classe de teste + python -m doctest nome_arquvo + Exemplo: + + >>> # teste + >>> motor = Motor() + >>> motor.velocidade + 0 + >>> motor.acelerar() + >>> motor.velocidade + 1 + >>> motor.acelerar() + >>> motor.velocidade + 2 + >>> motor.frear() + >>> motor.velocidade + 0 + >>> motor.frear() + >>> motor.velocidade + 0 + >>> direcao = Direcao() + >>> direcao.direcao_atual + 'Norte' + >>> direcao.girar_a_direita() + >>> direcao.direcao_atual + 'Leste' + >>> direcao.girar_a_esquerda() + >>> direcao.direcao_atual + 'Norte' + >>> carro = Carro(direcao,motor) + >>> carro.calcular_velocidade() + 0 + >>> carro.ver_direcao_atual() + 'Norte' + >>> carro.acelerar() + >>> carro.calcular_velocidade() + 1 + >>> carro.frear() + >>> carro.calcular_velocidade() + 0 + >>> carro.girar_a_direita() + >>> carro.ver_direcao_atual() + 'Leste' + + +""" + +from oo.direcao import Direcao +from oo.motor import Motor + + +class Carro: + + def __init__(self,direcao,motor): + self.direcao = direcao #Direcao() + self.motor = motor #Motor() + #self.direcao_atual = 'Norte' + + def acelerar(self): + self.motor.acelerar() + + def frear(self): + self.motor.frear() + + def calcular_velocidade(self): + return self.motor.velocidade + + def girar_a_direita(self): + self.direcao.girar_a_direita() + + def girar_a_esquerda(self): + self.direcao.girar_a_esquerda() + + def ver_direcao_atual(self): + return self.direcao.direcao_atual + + +if __name__ == "__main__": + + # instancia de direcao e motor direta na classe carro + motor = Motor() + direcao = Direcao() + carro = Carro(direcao, motor) + + print(carro.calcular_velocidade()) + print(carro.ver_direcao_atual()) + + carro.acelerar() + print(carro.calcular_velocidade()) + + carro.girar_a_direita() + print(carro.ver_direcao_atual()) diff --git a/oo/direcao.py b/oo/direcao.py new file mode 100644 index 000000000..e5d3eb88f --- /dev/null +++ b/oo/direcao.py @@ -0,0 +1,35 @@ +class Direcao: + + def __init__(self): + self.direcao_atual = "Norte" + + def girar_a_direita(self): + if self.direcao_atual == "Norte": + self.direcao_atual = "Leste" + elif self.direcao_atual == "Leste": + self.direcao_atual = "Sul" + elif self.direcao_atual == "Sul": + self.direcao_atual = "Oeste" + elif self.direcao_atual == "Oeste": + self.direcao_atual = "Norte" + + def girar_a_esquerda(self): + if self.direcao_atual == "Norte": + self.direcao_atual = "Oeste" + elif self.direcao_atual == "Oeste": + self.direcao_atual = "Sul" + elif self.direcao_atual == "Sul": + self.direcao_atual = "Leste" + elif self.direcao_atual == "Leste": + self.direcao_atual = "Norte" + + +if __name__ == "__main__": + direcao = Direcao() + print(direcao.direcao_atual) + + direcao.girar_a_direita() + print(direcao.direcao_atual) + + direcao.girar_a_direita() + print(direcao.direcao_atual) \ No newline at end of file diff --git a/oo/motor.py b/oo/motor.py new file mode 100644 index 000000000..bca2b7275 --- /dev/null +++ b/oo/motor.py @@ -0,0 +1,29 @@ +class Motor: + + def __init__(self): + self.velocidade = 0 + + def acelerar(self): + self.velocidade += 1 + + def frear(self): + if self.velocidade >= 2: + self.velocidade -= 2 + else: + self.velocidade = 0 + + def calcular_velocidade(self): + return self.velocidade + +if __name__ == "__main__": + motor = Motor() + print(motor.calcular_velocidade()) + + motor.acelerar() + print(motor.calcular_velocidade()) + + motor.frear() + print(motor.calcular_velocidade()) + + motor.frear() + print(motor.calcular_velocidade()) diff --git a/oo/pessoa.py b/oo/pessoa.py new file mode 100644 index 000000000..034f95f03 --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,54 @@ +class Pessoa: + + olhos = 2 + + def __init__(self,*filhos,nome=None,idade=31): + self.nome = nome + self.idade = idade + self.filhos = list(filhos) + + def cumprimentar(self): + return f'Olá {id(self)}' + + # decorator + @staticmethod + def metodo_estatico(): + return 42 + + @classmethod + def nome_e_atributos_de_classe(cls): + return f'{cls} - olhos {cls.olhos}' + +if __name__ == '__main__': + lorenzo = Pessoa(nome="Lorenzo") + jack = Pessoa(lorenzo,nome="Jackson") + print(jack.cumprimentar()) + print(jack.nome) + print(jack.idade) + print(jack.filhos) + + for filho in jack.filhos: + print(filho.nome) + + #atributo dinamico + jack.sobrenome = "Deus" + print(jack.sobrenome) + + #exclui um atributo dinamicamente + del jack.filhos + + print(jack.__dict__) + print(lorenzo.__dict__) + + print(Pessoa.olhos) + print(jack.olhos) + print(lorenzo.olhos) + print(id(Pessoa.olhos), id(jack.olhos), id(lorenzo.olhos) ) + + # alteracao de valor do atributo olhos so de lorenzo + lorenzo.olhos = 1 + print(id(Pessoa.olhos), id(jack.olhos), id(lorenzo.olhos)) + + + print(Pessoa.metodo_estatico(), jack.metodo_estatico()) + print(Pessoa.nome_e_atributos_de_classe(), jack.nome_e_atributos_de_classe()) \ No newline at end of file