Title: Desenvolvimento de Software / Arquitetura de Software
Tags: Desenvolvimento_de_Software Resumo
On every note of this deck, unless a note says otherwise:
tldr: - Arquitetura (física e de software) é a integração de componentes para formar um todo coeso, atendendo propósito, requisitos e contexto; em software, descreve componentes, suas propriedades externamente visíveis e relações (não é o sistema em execução).
- A arquitetura de software serve para analisar requisitos, comparar alternativas cedo (quando mudar é mais fácil) e reduzir riscos, além de facilitar comunicação entre stakeholders, decisões e validação antes da implementação e reúso de abstrações.
- Arquitetura em camadas organiza sistemas complexos em níveis onde camadas superiores dependem das inferiores, promovendo abstração, separação de responsabilidades, reúso e extensibilidade; porém pode aumentar complexidade/esforço e penalizar desempenho (transformações e “passagem” por camadas), embora encapsulamento às vezes traga ganhos (ex.: camada transacional otimizada).
- Qualidade estrutural depende de alta coesão (responsabilidades claras/“responsabilidade única”) e baixo acoplamento (menor dependência e impacto de mudanças). O texto lista tipos de acoplamento (conteúdo, comum, controle, dados, chamadas, uso de tipos, importação, externo) e alerta que mais comunicação entre classes aumenta complexidade, testes e manutenção.
- Evolução de arquiteturas em camadas:
- 1 camada (monolítica): UI + lógica + dados juntos; não escala para muitos usuários.
- 2 camadas (cliente-servidor): separa UI de dados; variações cliente-magro (processamento no servidor) vs cliente-gordo (lógica no cliente), com prós e contras de administração, desempenho, rede e atualização.
- 3 camadas: apresentação, negócio, dados; melhora manutenção, escalabilidade e reduz tráfego vs cliente-magro; uso de middleware/SQL e possibilidade de N camadas (ex.: servidor de integração).
- 4 camadas: centraliza apresentação em servidor web, cliente via navegador (sem instalação local).
- Padrões de UI:
- MVC: separa Model (dados/regras/estado), View (exibição) e Controller (orquestra ações); interação é triangular (View pode obter dados do Model dependendo da implementação), diferente da linearidade rígida de 3 camadas.
- MVP: evolução do MVC; View é passiva e não fala com Model — tudo passa pelo Presenter, facilitando desacoplamento e testabilidade.
- MVVM: ViewModel expõe dados/comandos e sincroniza com a View via data binding (muitas vezes bidirecional), melhorando organização, reutilização e testes, comum em WPF/Xamarin/Angular.
- Arquitetura distribuída surgiu com microprocessadores potentes e redes rápidas: múltiplos computadores independentes se apresentam como um sistema único, trazendo responsividade, escalabilidade, redundância e compartilhamento, mas aumentando desafios de segurança, falhas, concorrência, heterogeneidade e gestão.
- Middleware (RPC, RMI, CORBA, DCOM) abstrai diferenças de plataforma e rede; em objetos distribuídos, destaca-se RMI e o papel de proxy (cliente), binder, skeleton/dispatcher (servidor) para localizar e invocar métodos remotos.
link: https://documentacao.online/estudos/z95b.html

front: (MPOG/ATI – 2015) Embora normalmente os sistemas desenvolvidos se baseiem em padrões de arquitetura, cada um deles tem arquitetura totalmente específica, em consequência dos seus requisitos.
response: Errado
comment: de fato, eu posso usar padrões de arquitetura, tais como uma arquitetura em camadas, uma arquitetura distribuída, uma arquitetura mainframe ou uma arquitetura orientada a serviços. Embora cada sistema tenha uma arquitetura baseada em seus requisitos, elas não são totalmente específicas (Errado)
title: Arquitetura de Software
Other fields (not shown on cards):
back: Errado - de fato, eu posso usar padrões de arquitetura, tais como uma arquitetura em camadas, uma arquitetura distribuída, uma arquitetura mainframe ou uma arquitetura orientada a serviços. Embora cada sistema tenha uma arquitetura baseada em seus requisitos, elas não são totalmente específicas (Errado)

front: (CESPE / CAU-BR – 2024) Ao se migrar para uma arquitetura cliente/servidor multinível, a mesma aplicação pode assumir simultaneamente as funções de cliente e de servidor.
response: Correto
comment: Em uma arquitetura cliente/servidor multinível (ou multicamada), uma aplicação pode assumir simultaneamente as funções de cliente e de servidor. Por exemplo, em uma arquitetura de três camadas, uma aplicação intermediária (middleware) pode atuar como cliente ao solicitar dados de um banco de dados (servidor de dados) e como servidor ao fornecer esses dados para uma aplicação cliente (interface de usuário). Isso permite maior modularidade e escalabilidade no design do sistema.
title: Arquitetura de Software
Other fields (not shown on cards):
back: Correto - Em uma arquitetura cliente/servidor multinível (ou multicamada), uma aplicação pode assumir simultaneamente as funções de cliente e de servidor. Por exemplo, em uma arquitetura de três camadas, uma aplicação intermediária (middleware) pode atuar como cliente ao solicitar dados de um banco de dados (servidor de dados) e como servidor ao fornecer esses dados para uma aplicação cliente (interface de usuário). Isso permite maior modularidade e escalabilidade no design do sistema.

front: (CESPE / FINEP – 2024) O principal objetivo de se reduzir o acoplamento entre módulos em um sistema de software é:
a) minimizar a necessidade de documentação.
b) melhorar a eficiência de comunicação entre módulos.
c) diminuir o tamanho dos módulos.
d) aumentar a coesão entre módulos.
e) facilitar a integração de novos módulos.
response: Letra E
comment: (a) Errado. Minimizar a necessidade de documentação não é o principal objetivo da redução do acoplamento entre módulos. Embora um sistema menos acoplado possa ser mais intuitivo e, em certos aspectos, exigir menos documentação explicativa, essa não é a razão principal para sua implementação; (b) Errado. Melhorar a eficiência de comunicação entre módulos não é o principal objetivo da redução do acoplamento. Na verdade, a redução do acoplamento geralmente significa reduzir a quantidade ou complexidade das interações entre módulos, o que pode resultar em uma comunicação menos direta mas mais modular e gerenciável; (c) Errado. Diminuir o tamanho dos módulos não é diretamente relacionado com a redução do acoplamento. O acoplamento refere-se mais à dependência funcional entre módulos do que ao seu tamanho; (d) Errado. Aumentar a coesão entre módulos é um objetivo desejável em design de software, mas não é o principal objetivo da redução do acoplamento. Coesão refere-se à extensão em que as responsabilidades dentro de um único módulo estão relacionadas e focadas; (e) Correto. Facilitar a integração de novos módulos é um dos principais objetivos de reduzir o acoplamento entre módulos em um sistema de software. Quando módulos são pouco acoplados, eles dependem menos uns dos outros, o que torna mais fácil modificar, substituir ou adicionar novos módulos sem afetar significativamente o restante do sistema.
title: Arquitetura de Software
Other fields (not shown on cards):
back: Letra E - (a) Errado. Minimizar a necessidade de documentação não é o principal objetivo da redução do acoplamento entre módulos. Embora um sistema menos acoplado possa ser mais intuitivo e, em certos aspectos, exigir menos documentação explicativa, essa não é a razão principal para sua implementação; (b) Errado. Melhorar a eficiência de comunicação entre módulos não é o principal objetivo da redução do acoplamento. Na verdade, a redução do acoplamento geralmente significa reduzir a quantidade ou complexidade das interações entre módulos, o que pode resultar em uma comunicação menos direta mas mais modular e gerenciável; (c) Errado. Diminuir o tamanho dos módulos não é diretamente relacionado com a redução do acoplamento. O acoplamento refere-se mais à dependência funcional entre módulos do que ao seu tamanho; (d) Errado. Aumentar a coesão entre módulos é um objetivo desejável em design de software, mas não é o principal objetivo da redução do acoplamento. Coesão refere-se à extensão em que as responsabilidades dentro de um único módulo estão relacionadas e focadas; (e) Correto. Facilitar a integração de novos módulos é um dos principais objetivos de reduzir o acoplamento entre módulos em um sistema de software. Quando módulos são pouco acoplados, eles dependem menos uns dos outros, o que torna mais fácil modificar, substituir ou adicionar novos módulos sem afetar significativamente o restante do sistema.

front: (CESPE / BNB – 2022) No padrão MVC, o componente de modelo gerencia as requisições dos usuários.
response: Errado
comment: O Modelo é responsável por fornecer os dados para a view e para o controlador. Ele não gerencia as requisições dos usuários. O controlador é responsável por gerenciar as requisições dos usuários e, com base nas informações do modelo, ele processa as requisições e decide a ação a ser tomada.
title: Arquitetura de Software
Other fields (not shown on cards):
back: Errado - O Modelo é responsável por fornecer os dados para a view e para o controlador. Ele não gerencia as requisições dos usuários. O controlador é responsável por gerenciar as requisições dos usuários e, com base nas informações do modelo, ele processa as requisições e decide a ação a ser tomada.

front: (CESPE / BNB – 2022) Na arquitetura em camadas, os componentes da camada mais interna opera o sistema operacional, ao passo que os da camada mais externa interagem com o usuário.
response: Correto
comment: A arquitetura em camadas é uma abordagem de projeto de sistemas que divide o sistema em diferentes camadas, cada uma responsável por uma função específica. A camada mais interna opera diretamente o hardware e gerencia os recursos de sistema, como processamento, memória, armazenamento e rede. Esta camada trabalha diretamente com o sistema operacional, fornecendo o suporte necessário para o funcionamento do sistema. A camada mais externa contém os componentes responsáveis por interagir com o usuário e é responsável por criar a interface de usuário e executar a lógica de aplicativos e processos.
title: Arquitetura de Software
Other fields (not shown on cards):
back: Correto - A arquitetura em camadas é uma abordagem de projeto de sistemas que divide o sistema em diferentes camadas, cada uma responsável por uma função específica. A camada mais interna opera diretamente o hardware e gerencia os recursos de sistema, como processamento, memória, armazenamento e rede. Esta camada trabalha diretamente com o sistema operacional, fornecendo o suporte necessário para o funcionamento do sistema. A camada mais externa contém os componentes responsáveis por interagir com o usuário e é responsável por criar a interface de usuário e executar a lógica de aplicativos e processos.

front: (CESPE / Petrobrás - 2022) Enquanto a arquitetura é responsável pela infraestrutura de alto nível do software, o design é responsável pelo software a nível de código, como, por exemplo, o que cada módulo está fazendo, o escopo das classes e os objetivos das funções.
response: Correto
comment: A arquitetura de um software descreve a estrutura de nível mais alto de uma aplicação e identifica seus principais componentes. No projeto detalhado (design) detalha-se o projeto do software para cada componente identificado na arquitetura.
title: Arquitetura de Software
Other fields (not shown on cards):
back: Correto - A arquitetura de um software descreve a estrutura de nível mais alto de uma aplicação e identifica seus principais componentes. No projeto detalhado (design) detalha-se o projeto do software para cada componente identificado na arquitetura.

front: (CESPE / TJ-RJ - 2021) Na arquitetura MVC (Model-View-Controller), as funcionalidades de cada segmento são mais bem descritas como:
a) o modelo encapsula as funcionalidades; o view gerencia as requisições dos usuários; o controlador prepara dados do modelo.
b) o modelo encapsula objetos de conteúdo; a visão solicita atualizações do modelo; o controlador seleciona o comportamento do modelo.
c) o modelo incorpora todos os estados; o view gerencia as requisições dos usuários; o controlador encapsula objetos de conteúdo.
d) o modelo encapsula objetos de conteúdo; o view seleciona o comportamento do modelo; o controlador solicita atualizações do modelo.
e) o modelo seleciona a resposta da visão; a visão apresenta a visão selecionada pelo controlador; o controlador encapsula objetos de conteúdo.
response: Letra B
comment: O MVC promove a estrita separação de responsabilidades entre componentes de uma interface gráfica. O Modelo é responsável pela representação dos dados, provendo meios de acesso (escrita/leitura), além disso ela encapsula as principais funcionalidades de dados do sistema. A camada de Visão é responsável pela interação com o usuário, além disso, é possível que a camada de Visão solicite diretamente o estado (atualizações) do Modelo. Por fim, a camada de Controle é responsável por receber todas as requisições do usuário, além disso, um controlador define o comportamento da aplicação e interpreta as ações do usuário.
title: Arquitetura de Software
Other fields (not shown on cards):
back: Letra B - O MVC promove a estrita separação de responsabilidades entre componentes de uma interface gráfica. O Modelo é responsável pela representação dos dados, provendo meios de acesso (escrita/leitura), além disso ela encapsula as principais funcionalidades de dados do sistema. A camada de Visão é responsável pela interação com o usuário, além disso, é possível que a camada de Visão solicite diretamente o estado (atualizações) do Modelo. Por fim, a camada de Controle é responsável por receber todas as requisições do usuário, além disso, um controlador define o comportamento da aplicação e interpreta as ações do usuário.

front: (CESPE / TJ-RJ - 2021) Em um ambiente cliente/servidor, a arquitetura que permite a mesma aplicação assumir tanto o papel de cliente quanto o de servidor é conhecida como arquitetura C/S:
a) simples.
b) de dois níveis.
c) multinível.
d) de três camadas.
e) par-par.
response: Letra C
comment: Se uma mesma aplicação assumi tanto o papel de cliente quanto o papel de servidor, poderíamos pensar que se trata da arquitetura par-par. No entanto, note que a questão fala “em um ambiente cliente/servidor”. A arquitetura par-a-par (peer-to-peer, ou P2P) não é considerada um tipo de arquitetura cliente/servidor. A arquitetura par-a-par é uma abordagem mais descentralizada e distribuída em comparação com a arquitetura cliente/servidor, que é mais centralizada e hierárquica. Dito isso, em um ambiente cliente/servidor, a arquitetura que permite a mesma aplicação assumir tanto o papel de cliente quanto o de servidor é conhecida como Arquitetura Cliente/Servidor do tipo Multinível.
title: Arquitetura de Software
Other fields (not shown on cards):
back: Letra C - Se uma mesma aplicação assumi tanto o papel de cliente quanto o papel de servidor, poderíamos pensar que se trata da arquitetura par-par. No entanto, note que a questão fala “em um ambiente cliente/servidor”. A arquitetura par-a-par (peer-to-peer, ou P2P) não é considerada um tipo de arquitetura cliente/servidor. A arquitetura par-a-par é uma abordagem mais descentralizada e distribuída em comparação com a arquitetura cliente/servidor, que é mais centralizada e hierárquica. Dito isso, em um ambiente cliente/servidor, a arquitetura que permite a mesma aplicação assumir tanto o papel de cliente quanto o de servidor é conhecida como Arquitetura Cliente/Servidor do tipo Multinível.

front: (CESPE / TELEBRÁS - 2021) Na arquitetura de software, a arquitetura cliente/servidor tem como vantagem uma maior facilidade de manutenção e segurança dos dados, e como desvantagens possíveis bloqueios no tráfego da rede, além de problemas de atualização da interface de aplicação.
response: Correto
comment: Uma arquitetura cliente/servidor é formada por servidores, que oferecem serviços para outros subsistemas; pelos clientes, que solicitam os serviços oferecidos pelos servidores. Uma das vantagens desse modelo é a manutenção e a segurança dos dados, visto que os servidores podem ter um melhor controle sobre quem acessam os recursos. Já uma das desvantagens desse modelo é que os servidores podem ficar sobrecarregados com o excesso de solicitações pelos clientes, ocasionando bloqueios no tráfego da rede. Outro ponto é sobre a atualização da interface de aplicação, isso pode também paralisar a rede.
title: Arquitetura de Software
Other fields (not shown on cards):
back: Correto - Uma arquitetura cliente/servidor é formada por servidores, que oferecem serviços para outros subsistemas; pelos clientes, que solicitam os serviços oferecidos pelos servidores. Uma das vantagens desse modelo é a manutenção e a segurança dos dados, visto que os servidores podem ter um melhor controle sobre quem acessam os recursos. Já uma das desvantagens desse modelo é que os servidores podem ficar sobrecarregados com o excesso de solicitações pelos clientes, ocasionando bloqueios no tráfego da rede. Outro ponto é sobre a atualização da interface de aplicação, isso pode também paralisar a rede.

front: (CESPE / TELEBRÁS - 2021) Por se tratar de uma arquitetura distribuída, o modelo cliente- servidor pressupõe facilidades para atualizar os servidores de forma transparente, sem que isso afete outras partes do sistema.
response: Correto
comment: Perfeito! Como os servidores são centralizados, e em quantidade menor que os clientes, há mais facilidade em se administrar as atualizações deles. Em suma, em um modelo cliente-servidor, uma de suas vantagens é a facilidade de manutenção dos servidores.
title: Arquitetura de Software
Other fields (not shown on cards):
back: Correto - Perfeito! Como os servidores são centralizados, e em quantidade menor que os clientes, há mais facilidade em se administrar as atualizações deles. Em suma, em um modelo cliente-servidor, uma de suas vantagens é a facilidade de manutenção dos servidores.