Sem resumo de edição
Sem resumo de edição
Linha 1: Linha 1:
Resumo Design Multi-Camadas
= Resumo Design Multi-Camadas =


* Projeto:
* Projeto:
Linha 46: Linha 46:


* Introduziremos abaixo, a Máquina Multi-Nível para tornar mais fácil o entendimento...
* Introduziremos abaixo, a Máquina Multi-Nível para tornar mais fácil o entendimento...
<br>
= Máquina Multi-Nível =
<br>
* Layer ou Level:
** Camada ou nível podem ser utilizados como sinônimos
** Estes são normalmente mostrados num esquema vertical.
<br>
* Tier:
** Um 'nível (layer)' refere-se a uma divisão funcional do software, mas uma '''camada (tier)''' refere-se a uma divisão funcional do software que é executada em infraestrutura separada das outras divisões.
** Cliente-Servidor:
*** Frontend é implementado no cliente (requisita) e a parte lógica no Servidor (responde) e independentes uma da outra
*** Cliente-Servidor é considerado como 2-Tiers.
*** Perfis de profissionais podem ser específicos em cada tier. Ex: UX/UI para frontend, backend para desempenho, escalabidilidade, tolerância a falhas, etc e DBA para camada de persistência.
** As interações devem ser claramente definidas para que os Tiers possam ser definidos.
<br>
* Máquina de Turing
** Alan Turing,  provou – ao final dos anos 30… ser possível usar  uma…”máquina simples” – para executar uma extensa variedade de ‘tarefas complexas’. Nesse período ocorreu uma mudança geral na percepção do computador; que passou de “instrumento matemático” à uma “máquina universal de processamento de informação”.
** Constatou que programação ao nível de 1s e 0s era complexa
** Usava cordão de bits (Bitstring)
<br>
* Máquian de dois níveis:
** Turing imaginou um computador com duas camadas, sendo uma caixa, a camada inferior ou a primeira, constituída de circuitos básicos, e uma camada superior, que ele denominou de Máquina Hipotética, que seria capaz de receber instruções de mais alto nível e converter numa sequência de bits que programaria a camada inferior.
<br>
* Interface entre níveis da máquina:
** Máquina Hipotética: ler instruções de uma linguagem L1 e traduzir as instruções da linguagem L1, mais simples, para instruções, da linguagem L0
** Uma instrução de L1 poderia corresponder a mais de uma instrução de L0, o que tornaria a vida dos programadores mais fácil
** Aparece a necessidade de compiladores considerando que a tradução pode ser complexa
** Interpretação: faz a conversão por meio de máquinas virtuais, como o Java
** Compilação: tradução como no C, C++ e outras
<br>
* Organização Multi-Camadas:
** Organização: Consiste em especificar o conjunto de camadas que comporão o produto final, isto é, o sistema sendo projetado
*** Em computadores, descreve a estrutura de camadas
** Arquitetura: especifica a estrutura de camadas, descrevendo:
*** Interface: modo como se relaciona com outras camadas
*** Entidades: muito comumente referenciadas como componentes, objetos, classes ou método
*** Relacionamentos internos à camada.
* Todo projeto deve começar analisando a quantidade de tiers aplicáveis. Feito isso, passa para a definição da organização de cada tier.
<br>
= Projetos Multi-Camadas =
<br>
* MVC - Model View Controller
** O grande objetivo do padrão MVC é isolar ao máximo a camada de apresentação.

Edição das 22h32min de 31 de março de 2024

Resumo Design Multi-Camadas

  • Projeto:
    • Em portugues:
      • 1. Especificação da modelagem e arquitetura do sistema a ser construído => Design
      • 2. Gestão do escopo, do custo, do tempo e das atividades na construção de algo => Project
  • Em Engenharia de Software é comum adotar os Padrões de Projeto para problemas comuns no design de software
    • Padrões de projeto:
      • Não são códigos e sim, especificações de como lidar com problemas e projetar soluções
      • Essas soluções estão no nível de design para problemas recorrentes que engenheiros de software encontram com frequência
    • Categorias:
      • Padrão de projeto criacional
        • Lidam com mecanismos de instanciação de objetos de maneira adequada à situação
      • Padrão de projeto estrutural
        • Se preocupam em melhor organizar a estrutura das classes e relacionamentos entre classes e objetos
        • O objetivo principal destes padrões é aumentar a funcionalidades das classes envolvidas sem alterar muito sua composição
      • Padrão de projeto comportamental
        • Identificam padrões de comunicação comuns entre objetos, aumentando a flexibilididade da comunicação entre os objetos relacionados levando em conta a forma como uma classe se comunica com a outra.


  • Exemplos de padrões de projeto:
    • Camadas
    • Cliente-Servidor
    • MVC (Model-View-Controller)
    • Micro-serviços
    • PF (Pipes & Filters)
    • P2P (Peer-To-Peer)
    • SOA (Service Oriented Architecture)
    • P/S (Publish-Subscribe)


  • Foco: Layer ou Level (Camadas)
    • Quebra o problema em problemas menores
    • Cada um desses problemas menores é uma camada onde se pode construir
      • concetos, ferramentas, tecnologias, infraestruturas, linguagens independentes de outras camadas do projeto.


  • Reflexões para modelagem:
    • Problemas podem ser catregorizados pela natureza do problema que se quer resolver:
      • Matemático: foco na capacidade do sistema computacional, em que aspectos como IHC (Interface Humano-Computador) ou Armazenamento embora importantes não são a essência do que se quer resolver
      • Engenharia: onde o foco está no suporte que o sistema oferece a áreas de aplicação como é o caso de CAD (Computer Aided Design), CAE (Computer Aided Engineering), CAM (Computer Aided Maintenance), por exemplo
      • Negócios: onde o foco está em processos como BPM (Business Processing Modelling) e CRM (Customer Relationship Management) e na cadeia de suprimentos
      • Indústria: o interesse está em células de manufatura, automação, indústria 4.0 e outras.
      • Considera-se também Verticais de Negócio como Energia, Governo, Transporte, Saúde, Finanças, Segurança, etc.


  • Introduziremos abaixo, a Máquina Multi-Nível para tornar mais fácil o entendimento...


Máquina Multi-Nível


  • Layer ou Level:
    • Camada ou nível podem ser utilizados como sinônimos
    • Estes são normalmente mostrados num esquema vertical.


  • Tier:
    • Um 'nível (layer)' refere-se a uma divisão funcional do software, mas uma camada (tier) refere-se a uma divisão funcional do software que é executada em infraestrutura separada das outras divisões.
    • Cliente-Servidor:
      • Frontend é implementado no cliente (requisita) e a parte lógica no Servidor (responde) e independentes uma da outra
      • Cliente-Servidor é considerado como 2-Tiers.
      • Perfis de profissionais podem ser específicos em cada tier. Ex: UX/UI para frontend, backend para desempenho, escalabidilidade, tolerância a falhas, etc e DBA para camada de persistência.
    • As interações devem ser claramente definidas para que os Tiers possam ser definidos.


  • Máquina de Turing
    • Alan Turing, provou – ao final dos anos 30… ser possível usar uma…”máquina simples” – para executar uma extensa variedade de ‘tarefas complexas’. Nesse período ocorreu uma mudança geral na percepção do computador; que passou de “instrumento matemático” à uma “máquina universal de processamento de informação”.
    • Constatou que programação ao nível de 1s e 0s era complexa
    • Usava cordão de bits (Bitstring)


  • Máquian de dois níveis:
    • Turing imaginou um computador com duas camadas, sendo uma caixa, a camada inferior ou a primeira, constituída de circuitos básicos, e uma camada superior, que ele denominou de Máquina Hipotética, que seria capaz de receber instruções de mais alto nível e converter numa sequência de bits que programaria a camada inferior.


  • Interface entre níveis da máquina:
    • Máquina Hipotética: ler instruções de uma linguagem L1 e traduzir as instruções da linguagem L1, mais simples, para instruções, da linguagem L0
    • Uma instrução de L1 poderia corresponder a mais de uma instrução de L0, o que tornaria a vida dos programadores mais fácil
    • Aparece a necessidade de compiladores considerando que a tradução pode ser complexa
    • Interpretação: faz a conversão por meio de máquinas virtuais, como o Java
    • Compilação: tradução como no C, C++ e outras


  • Organização Multi-Camadas:
    • Organização: Consiste em especificar o conjunto de camadas que comporão o produto final, isto é, o sistema sendo projetado
      • Em computadores, descreve a estrutura de camadas
    • Arquitetura: especifica a estrutura de camadas, descrevendo:
      • Interface: modo como se relaciona com outras camadas
      • Entidades: muito comumente referenciadas como componentes, objetos, classes ou método
      • Relacionamentos internos à camada.
  • Todo projeto deve começar analisando a quantidade de tiers aplicáveis. Feito isso, passa para a definição da organização de cada tier.


Projetos Multi-Camadas


  • MVC - Model View Controller
    • O grande objetivo do padrão MVC é isolar ao máximo a camada de apresentação.