Considere que uma equipe do Ipea desenvolveu um módulo Python que oferece serviços muito úteis aos demais sistemas desse instituto. As funções que compõem esse módulo são exibidas a seguir, sendo o código relativo a cada uma dessas funções irrelevante para a resolução dessa questão.
# Módulo m01.py – V1
def func01(parm1, parm2):
# código irrelevante para a questão
return
def func02(parm1, parm2):
# código irrelevante para a questão
return
def func03():
# código irrelevante para a questão
return
def func04(parm1, parm2):
# código irrelevante para a questão
return
def func05(parm1, parm2, parm3):
# código irrelevante para a questão
return
# fim do módulo m01.py
A API desse módulo é composta por todas as suas funções. Essa API foi projetada de modo que os demais módulos que usem os serviços por ela definidos tenham de implementar parte da lógica desses serviços. Isso é exemplificado pelo módulo main, exibido a seguir.
# Módulo main.py
from m01 import *
v1=5
x=func01(v1-3, v1-2)
match x:
case 1:
func02(v1, v1+1)
func03()
func04(0, 1)
case 2:
func02(v1+1, v1)
func04(1, 0)
case 3:
func03()
func04(0, 1)
case 4:
func02(v1, v1+1)
func03()
case _:
func05(v1, v1+1, v1+2)
# fim do Módulo main.py
Considere que, posteriormente, devido a mudanças em alguns dos requisitos relativos aos serviços disponibilizados pelo módulo m01, ele teve de ser alterado para dar suporte às novas funcionalidades. Para tal, foram feitas alterações no código das funções previamente existentes, além da adição da função func06. A nova versão do módulo m01 passou a ser a seguinte:
# Módulo m01.py – V2
def func01(parm1, parm2):
# código irrelevante para a questão
return
def func02(parm1, parm2):
# código irrelevante para a questão
return
def func03(parm1):
# código irrelevante para a questão
return
def func04(parm1, parm2):
# código irrelevante para a questão
return
def func05(parm1, parm2, parm3):
# código irrelevante para a questão
return
def func06():
# código irrelevante para a questão
return
# fim do módulo m01.py
As alterações feitas no módulo m01 desencadearam alterações no código dos módulos que usam os serviços por ele disponibilizados. Isso pode ser visto no exemplo a seguir:
# Módulo main.py
from m01 import *
v1=5
x=func01(v1-3, v1-2)
match x:
case 0:
func02(v1, 0)
case 1:
func03(v1+1)
func04(0, 1)
case 2:
func04(1, 0)
case 3:
func03(v1)
case 4:
func02(0, v1+1)
func03(v1+1)
case _:
func05(v1, v1+1, v1+2)
func06()
# fim do Módulo main.py
Observe que as alterações realizadas no módulo m01 fizeram com que o módulo main tivesse de ser alterado para que a nova implementação de m01 funcionasse a contento.
Considere as informações apresentadas e redija um texto dissertativo contínuo de 35 a 45 linhas (eventuais trechos de código inseridos nesse texto não serão considerados) em que, de forma fundamentada:
• indique as duas falhas no design do módulo m01, à luz dos conceitos de encapsulamento (ocultação de informação) e acoplamento;
• aponte e explique o efeito que essas falhas no design do módulo m01 terão na evolução e na reutilização futura desse módulo;
• apresente, também em texto dissertativo, a descrição de uma solução, não baseada em classes e métodos, para resolver os problemas de acoplamento do módulo m01, devendo essa descrição conter:
– o objetivo do padrão de design Façade;
– a descrição da solução, baseada nesse padrão de design, a qual deve:
→ conter todas as funções existentes na versão 2 (V2) do módulo m01, sem modificação no código dessas funções;
→ utilizar obrigatoriamente a variável __all__ para reforçar o encapsulamento;
• apresente dois aspectos positivos dessa solução, à luz dos conceitos de encapsulamento (ocultação de informação) e acoplamento.
CONTEÚDO EXCLUSIVO
Confira nossos planos especiais de assinatura e desbloqueie agora!
Ops! Esta questão ainda não tem resolução em texto.
Ops! Esta questão ainda não tem resolução em vídeo.
Questões Relacionadas
b) Cite duas propriedades de uma árvore AVL.
Java é uma linguagem de programação de alto nível e orientada a objetos que foi desenvolvida pela Sun Microsystems (agora propriedade da Oracle Corporation) na década de 1990 e foi projetada para ser portátil, eficiente e segura, permitindo que o código desenvolvido seja executado em diferentes plataformas sem a necessidade de recompilação. A seguir, é apresentado o código-fonte da classe TAD escrito em JAVA:
class Node {
int data;
Node next;
Node(int data) {
this.data = data;
this.next = null;
}
}
public class TAD {
private Node top;
private int size;
public TAD() {
this.top = null;
this.size = 0;
}
public void inserir(int data) {
Node newNode = new Node(data);
newNode.…
Os produtos de software feitos por uma equipe de desenvolvimento demonstraram baixa qualidade no ambiente de produção. Devido a reclamações, foi feita uma auditoria que levantou os seguintes fatos:
- • a especificação das funcionalidades era muito informal;
- • durante os testes de integração, os componentes integrados não funcionavam como especificado, causando retrabalho pelos desenvolvedores de componentes;
- • todos os testes eram feitos à mão e, como isso demorava, nem sempre eram feitos todos os testes necessários;
- • não havia uma homologação das funcionalidades com o usuário antes do produto entrar em operação;
- • não havia uma reflexão da equipe de modo a entender como melhorar o seu proce…



