Utilizando a linguagem de programação orientada a objetos de sua preferência, crie uma classe para representar datas usando três atributos: o dia, o mês, e o ano. Sua classe deve ter um construtor que inicializa os três atributos e verifica a validade dos valores fornecidos. Inclua também a possibilidade de construir o objeto sem parâmetros que inicializa a data com a data atual fornecida pelo sistema operacional. Forneça uma operação para avançar uma data para o dia seguinte.
Passo 1
Beleza, vamos lá! A gente precisa criar uma classe para representar datas usando programação orientada a objetos (OOP). Isso inclui três atributos: dia, mês e ano. Vamos usar uma linguagem de programação como Python para isso. O que vamos precisar é:
- Entender como criar uma classe com atributos.
- Fazer um construtor que inicializa esses atributos e verifica se os valores são válidos.
- Permitir que a classe seja criada sem parâmetros, usando a data atual do sistema.
- Adicionar um método para avançar a data para o dia seguinte.
Passo 2
Primeiro, vamos criar a estrutura básica da classe chamada
Data
. Em OOP, uma classe é como um molde para criar objetos. Cada objeto terá dia, mês e ano como características.class Data:
def __init__(self, dia, mes, ano):
self.dia = dia
self.mes = mes
self.ano = ano
Passo 3
Agora, precisamos adicionar a verificação para garantir que os valores de dia, mês e ano são válidos. Por exemplo, o mês deve estar entre 1 e 12, e o dia deve ser apropriado para o mês (como não ter 30 de fevereiro).
Vamos criar um método dentro da classe para validar a data:
def valida_data(self):
# Verifica se o mês está entre 1 e 12
if self.mes < 1 or self.mes > 12:
return False
# Número de dias em cada mês
dias_no_mes = [31, 29 if self.ano % 4 == 0 else 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31]
if self.dia < 1 or self.dia > dias_no_mes[self.mes - 1]:
return False
return True
Passo 4
Vamos atualizar o construtor para usar esse método de validação. Se a data for inválida, vamos levantar um erro.
def __init__(self, dia=None, mes=None, ano=None):
if dia is None and mes is None and ano is None:
# Inicializa com a data atual
from datetime import date
hoje = date.today()
self.dia = hoje.day
self.mes = hoje.month
self.ano = hoje.year
else:
self.dia = dia
self.mes = mes
self.ano = ano
if not self.valida_data():
raise ValueError("Data inválida")
Passo 5
Agora, vamos adicionar o método para avançar a data para o dia seguinte. Precisamos considerar se é o último dia do mês ou do ano.
def avancar_um_dia(self):
dias_no_mes = [31, 29 if self.ano % 4 == 0 else 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31]
if self.dia < dias_no_mes[self.mes - 1]:
self.dia += 1
else:
self.dia = 1
if self.mes < 12:
self.mes += 1
else:
self.mes = 1
self.ano += 1
Resposta
class Data:
def __init__(self, dia=None, mes=None, ano=None):
if dia is None and mes is None and ano is None:
from datetime import date
hoje = date.today()
self.dia = hoje.day
self.mes = hoje.month
self.ano = hoje.year
else:
self.dia = dia
self.mes = mes
self.ano = ano
if not self.valida_data():
raise ValueError("Data inválida")
def valida_data(self):
if self.mes < 1 or self.mes > 12:
return False
dias_no_mes = [31, 29 if self.ano % 4 == 0 else 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31]
if self.dia < 1 or self.dia > dias_no_mes[self.mes - 1]:
return False
return True
def avancar_um_dia(self):
dias_no_mes = [31, 29 if self.ano % 4 == 0 else 28, 31, 30, 31, 30,
31, 31, 30, 31, 30, 31]
if self.dia < dias_no_mes[self.mes - 1]:
self.dia += 1
else:
self.dia = 1
if self.mes < 12:
self.mes += 1
else:
self.mes = 1
self.ano += 1
# Exemplo de uso:
# data = Data(28, 2, 2023)
# data.avancar_um_dia()
# print(data.dia, data.mes, data.ano) # Saída: 1 3 2023