Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Duvida OO

Referente ao curso Python 3: Avançando na orientação a objetos, estou com dificuldade em entender quando e como aplico a OO. Fiz o código abaixo para praticar e aparentemente esta funcionando corretamente. Mas ainda acho que não entendi a finalidade da OO para continuar o curso e aprender as outras funções da OO como henraça e demais. Gostaria de saber se estou indo no caminho certo ou se estou viajando na forma como escrevi. Se for isso, como seria o certo. Se neste caso não for necessário aplicar OO, teria como me mostrar um código em que a OO foi aplicado corretamente? É meu primeiro contato com programação e acho que estou perdido. O que me deixa mais na duvida é que meus códigos trazem o resultado esperado, mas não sei se estou fazendo da forma correta.

import statistics

class Estatistica:
    def __init__(self, n_elementos):
        self.__n_elementos = int(n_elementos)
        self.numeros = []
        self.media = 0
        self.variancia = 0
        self.desvio_padrao = 0

    @property
    def n_elementos(self):
        return self.__n_elementos

    @n_elementos.setter
    def n_elementos(self,novo_n_elementos):
        self.__n_elementos = int(novo_n_elementos)

    def incluir_valores(self):

        self.numeros = []

        for x in range(0,self.n_elementos):
            numero = int(input(f"Digite o {x + 1}º valor: "))
            self.numeros.append(numero)

        return self.numeros.sort()

    def visualizar_valores(self):
        return self.numeros

    def calcular_media(self):

        self.media = statistics.mean(self.numeros)

    def calcular_variancia(self):

        self.variancia = statistics.variance(self.numeros,self.media)

    def calcular_desvio_padrao(self):

        self.desvio_padrao = statistics.stdev(self.numeros,self.media)

continuar = False

while not continuar:
    dados = Estatistica(int(input("Digite a quantidade de alunos: ")))
    dados.incluir_valores()
    dados.calcular_media()
    dados.calcular_variancia()
    dados.calcular_desvio_padrao()
    print(f"Valores recebidos {dados.numeros}\nMédia: {dados.media}\nVariancia: {dados.variancia}\nDesvio Padrão: {dados.desvio_padrao}\n")

    resposta = input("Responda SIM para continuar ou qualquer tecla para encerrar ")
    resposta = resposta.upper().strip()
    continuar = resposta != "SIM"
1 resposta
solução!

Oi Diego :)

Entendo completamente sua dúvida e eu também tive dificuldade de entender POO. Comigo foi algo mais gradual, eu fui lendo mais sobre, praticando mais, até ir "acostumando" com a ideia. Talvez seja assim com você também, e se esse for o caso, sinta-se à vontade para tirar seu próprio tempo para entender e só continuar quando se sentir confortável.

Vou tentar te explicar a forma que eu entendo. Espero que faça sentido para você.

Orientação a Objetos é uma forma das linguagens da programação de representar coisas da vida real. Objetos possuem dependências, e características, e se faltar uma dessas características ou algo não satisfazer essas dependências, o objeto não funciona. Isso já não é o caso quando tentamos fazer um objeto com funções. Com funções, é muito mais complicado de fazer com que elas se relacionem, então é sempre mais provável de haver um defeito no programa, ou algo do tipo, pois cada função vai trabalhar em algo diferente, mesmo que sua intenção seja fazer elas uma coisa só. Isso é o tal do paradigma procedural. Espero que esteja fazendo sentido.

Já com OO, construir um objeto fica mais fácil, pois segundo você, desenvolvedor, se estiver faltando algum atributo, ou se os atributos não satisfazerem algumas características, esse objeto não vai funcionar!

Mas às vezes fazemos classes sem ser com a meta de representar um objeto físico da vida real. OO também é perfeito para simplificação de código e para evitar a duplicação de código. Graças a sua forma simples de escrever e de fazer com que cada coisa dependa da outra, às vezes é bem mais fácil escrever uma classe do que várias funções.

Provavelmente ainda não está totalmente claro quando usar para você. Mas se não estiver, tá tudo bem, porque para mim também não está 100%. O segredo é estudar e praticar, como você já está fazendo. E sim, você está indo no caminho certo com a classe que você construiu. Faz muito mais sentido construir uma classe para representar uma estatística do que várias funções!

Espero ter ajudado :)