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..09ff9c26e --- /dev/null +++ b/oo/carro.py @@ -0,0 +1,151 @@ +""" +Você deve criar uma classe carro que vai possuir +dois atributos compostos por outras duas classes: + +Motor +Direção +O Motor terá a responsabilidade de controlar a velocidade. +Ele oferece os seguintes atributos: + +Atributo de dado velocidade +Método acelerar, que deverá incremetar a velocidade de uma unidade +Método frear que deverá decrementar a velocidade em duas unidades +A Direção terá a responsabilidade de controlar a direção. Ela oferece +os seguintes atributos: + +Valor de diração com valores possíveis: Norte, Sul, Leste, Oeste. +Método girar_a_direita +Método girar_a_esquerda + + N + O L + S + +Exemplo: + >>> # Testando motor + >>> motor = Motor() + >>> motor.velocidade + 0 + >>> motor.acelerar() + >>> motor.velocidade + 1 + >>> motor.acelerar() + >>> motor.velocidade + 2 + >>> motor.acelerar() + >>> motor.velocidade + 3 + >>> motor.frear() + >>> motor.velocidade + 1 + >>> motor.frear() + >>> motor.velocidade + 0 + >>> # Testando Direcao + >>> direcao = Direcao() + >>> direcao.valor + 'Norte' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Leste' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Sul' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Oeste' + >>> direcao.girar_a_direita() + >>> direcao.valor + 'Norte' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Oeste' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Sul' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Leste' + >>> direcao.girar_a_esquerda() + >>> direcao.valor + 'Norte' + >>> carro = Carro(direcao, motor) + >>> carro.calcular_velocidade() + 0 + >>> carro.acelerar() + >>> carro.calcular_velocidade() + 1 + >>> carro.acelerar() + >>> carro.calcular_velocidade() + 2 + >>> carro.frear() + >>> carro.calcular_velocidade() + 0 + >>> carro.calcular_direcao() + 'Norte' + >>> carro.girar_a_direita() + >>> carro.calcular_direcao() + 'Leste' + >>> carro.girar_a_esquerda() + >>> carro.calcular_direcao() + 'Norte' + >>> carro.girar_a_esquerda() + >>> carro.calcular_direcao() + 'Oeste' +""" + + +class Carro: + def __init__(self, direcao, motor): + self.direcao = direcao + self.motor = motor + + 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 calcular_direcao(self): + return self.direcao.valor + + +class Motor: + def __init__(self, velocidade=0): + self.velocidade = velocidade + + def acelerar(self): + self.velocidade += 1 + + def frear(self): + self.velocidade -= 2 + + if self.velocidade < 0: + self.velocidade = 0 + + +class Direcao: + def __init__(self, valor='Norte'): + self.valor = valor + self.direcao = ('Norte', 'Leste', 'Sul', 'Oeste') + + def girar_a_direita(self): + if self.direcao.index(self.valor) == len(self.direcao) - 1: + self.valor = self.direcao[0] + else: + self.valor = self.direcao[self.direcao.index(self.valor) + 1] + + def girar_a_esquerda(self): + if self.direcao.index(self.valor) == 0: + self.valor = self.direcao[len(self.direcao) - 1] + else: + self.valor = self.direcao[self.direcao.index(self.valor) - 1] diff --git a/oo/pessoa.py b/oo/pessoa.py new file mode 100644 index 000000000..b033df817 --- /dev/null +++ b/oo/pessoa.py @@ -0,0 +1,46 @@ +class Pessoa: + olhos = 2 + + def __init__(self, *filhos, nome=None, idade=35): + self.nome = nome + self.idade = idade + self.filhos = list(filhos) + + def cumprimentar(self): + return f'Olá {id(self)}' + + @staticmethod + def metodo_estatico(): + return 42 + + @classmethod + def nome_e_atributos_de_classe(cls): + return f'{cls} - olhos {cls.olhos}' + + +if __name__ == '__main__': + renzo = Pessoa(nome='Renzo') + luciano = Pessoa(renzo, nome='Luciano') + + print(Pessoa.cumprimentar(luciano)) + print(id(luciano)) + print(luciano.cumprimentar()) + print(luciano.nome) + print(luciano.idade) + + for filho in luciano.filhos: + print(filho.nome) + + luciano.sobrenome = 'Ramalho' + del luciano.filhos + luciano.olhos = 1 + del luciano.olhos + print(renzo.__dict__) + print(luciano.__dict__) + Pessoa.olhos = 3 + print(Pessoa.olhos) + print(luciano.olhos) + print(renzo.olhos) + print(id(Pessoa.olhos), id(luciano.olhos), id(renzo.olhos)) + print(Pessoa.metodo_estatico(), luciano.metodo_estatico()) + print(Pessoa.nome_e_atributos_de_classe(), luciano.nome_e_atributos_de_classe())