Exercícios comentados
1️⃣ Exercício: Gerenciamento de Mudanças em Requisitos
Enunciado
Uma clínica médica está implementando um sistema de prontuário eletrônico. Durante o desenvolvimento, um novo requisito surge: permitir que os pacientes consultem seus exames online.
Tarefas:
- Elaborar um plano de gerenciamento de mudanças.
- Criar um fluxo UML para análise/aprovação da mudança.
- Explicar como métodos ágeis poderiam ajudar.
Resolução
Plano de Gerenciamento de Mudanças:
- Identificação da Mudança: Inclusão do módulo de consulta de exames online.
- Justificativa: Aumentar a autonomia dos pacientes e reduzir demanda no atendimento.
- Avaliação de Impacto:
- Custo: Necessidade de servidor seguro e integração com o laboratório.
- Prazo: Estimativa de +3 sprints no Scrum.
- Segurança: Implementação de autenticação multifator.
- Usabilidade: Interface simplificada para acesso via celular.
- Prioridade: Alta (impacto direto no valor para o cliente).
- Controle de Versão: Atualização do documento de requisitos (IEEE 830).
Fluxo UML (atividade simplificada):
[Solicitação de Mudança] → [Análise de Impacto] → [Aprovação do Comitê] →
[Planejamento no Backlog] → [Implementação e Testes] → [Deploy e Feedback]
Métodos Ágeis:
- Scrum permite ajustes rápidos via backlog.
- Cada sprint incorpora incrementos pequenos (entrega contínua).
- Feedback dos usuários nas revisões ajuda a validar rapidamente.
2️⃣ Exercício: Herança e Encapsulamento
Enunciado
Crie uma classe Pessoa
com atributos comuns (nome, idade e CPF), e duas subclasses: Aluno
e Professor
, que herdam atributos e adicionam informações específicas.
Resolução em Python
class Pessoa:
def __init__(self, nome, idade, cpf):
self._nome = nome
self._idade = idade
self._cpf = cpf
def get_nome(self):
return self._nome
def set_nome(self, nome):
self._nome = nome
def get_idade(self):
return self._idade
def set_idade(self, idade):
self._idade = idade
def get_cpf(self):
return self._cpf
def set_cpf(self, cpf):
self._cpf = cpf
class Aluno(Pessoa):
def __init__(self, nome, idade, cpf, serie):
super().__init__(nome, idade, cpf)
self.serie = serie
def exibir_informacoes(self):
return f"Aluno: {self.get_nome()}, Idade: {self.get_idade()}, Série: {self.serie}"
class Professor(Pessoa):
def __init__(self, nome, idade, cpf, disciplina):
super().__init__(nome, idade, cpf)
self.disciplina = disciplina
def exibir_informacoes(self):
return f"Professor: {self.get_nome()}, Idade: {self.get_idade()}, Disciplina: {self.disciplina}"
# Teste
aluno1 = Aluno("Carlos", 15, "123.456.789-00", "9º Ano")
prof1 = Professor("Ana", 35, "987.654.321-00", "Matemática")
print(aluno1.exibir_informacoes())
print(prof1.exibir_informacoes())
Saída esperada:
yamlCopiarEditarAluno: Carlos, Idade: 15, Série: 9º Ano
Professor: Ana, Idade: 35, Disciplina: Matemática
3️⃣ Exercício: Polimorfismo em um Sistema de Entregas
Enunciado
Implemente classes de transporte (Moto
, Caminhao
, Drone
) que calculam o tempo de entrega de forma distinta, utilizando polimorfismo.
Resolução em Python
from abc import ABC, abstractmethod
class Transporte(ABC):
@abstractmethod
def calcular_tempo(self, distancia):
pass
class Moto(Transporte):
def calcular_tempo(self, distancia):
velocidade = 60 # km/h
return distancia / velocidade
class Caminhao(Transporte):
def calcular_tempo(self, distancia):
velocidade = 40 # km/h
return distancia / velocidade
class Drone(Transporte):
def calcular_tempo(self, distancia):
velocidade = 80 # km/h
return distancia / velocidade
# Teste com polimorfismo
transportes = [Moto(), Caminhao(), Drone()]
distancia = 120 # km
for t in transportes:
print(f"{t.__class__.__name__}: Tempo estimado = {t.calcular_tempo(distancia):.2f} horas")
Saída esperada:
Moto: Tempo estimado = 2.00 horas
Caminhao: Tempo estimado = 3.00 horas
Drone: Tempo estimado = 1.50 horas