SóProvas


ID
183718
Banca
FCC
Órgão
TRE-RS
Ano
2010
Provas
Disciplina
Engenharia de Software
Assuntos

Considere:

I. Acoplamento entre módulos em uma estrutura de software.

II. Coesão entre tarefas que se relacionam em um módulo.

Considerando os espectros mais aceitos na programação estruturada (por ex. Pressman), a mais adequada escolha é

Alternativas
Comentários
  • Todo sistema é composto por subsistemas.

    O acoplamento é a medida de inter-dependencia entre subsistemas, digamos, a medida de inter-dependência entre as classes, se for orientado a objeto.

    Já a coesão seria a medida de força de intra-subsistemas, ela mede o quanto um subsistema está focado em uma responsabilidade.

    Quando menor o acoplamento, melhor.

    Quanto maior a coesão, melhor.

    Acomplamento, do menos pior até o pior,:

    por Mensagem
    por Dados
    por Controle
    por Dados Globais
    por Dados Internos


    Coesão, da melhor para a mais fraca:

    Funcional
    Sequêncial
    Comunicacional
    Procedural
    Temporal
    Lógica
    Conincidental



  • Tipos indesejáveis de coesão:
    Coesão coincidental: ocorre quando um módulo realiza um conjunto de tarefas frouxamente relacionadas.
    Coesão lógica: ocorre quando um módulo realiza um conjunto de tarefas que estão relacionadas logicamente.
    Coesão temporal: ocorre quando um módulo realiza um conjunto de tarefas que devem ser executadas dentro do mesmo decurso de tempo.

    Tipos intermediários de coesão:
    Coesão procedural: ocorre quando os elementos de processamento do módulo são relacionados e devem ocorrer em uma ordem específica.
    Coesão de comunicação: ocorre quando todos os elementos de processamento do módulo se concentram em uma única área de uma estrutura de dados.

    Coesão desejável
    Coesão funcional: quando um módulo realiza uma única tarefa procedural distinta.
     
    Tipos indesejáveis de Acoplamento:
    Acoplamento comum: quando um conjunto de módulos acessa uma área global de dados
    Acoplamento por conteúdo: ocorre quando um módulo faz uso de estruturas de dados ou de controle mantidas no escopo de outro módulo

    Tipo intermediário de Acoplamento:
    Acoplamento por controle: quando módulo passa decisões de controle a outro módulo
     
    Tipo desejável de acoplamento:
    Acomplamento de dados: ocorre quando apenas uma lista de dados simples é passada como parâmetro de um módulo para o outro, com uma correspondência um-para-um de itens.
    Logicamente, o ideal é que não hava acoplamento direto. Porém, caso não seja possível, o melhor é ter o acoplamento de dados.

    Fonte:http://waltercunha.com/blog/index.php/2009/07/05/padroes-de-projeto-parte-2-de-3/
     
  • Segundo Meilir Page Jones:

     

    Acoplamento

    Bom ou Solto

    . Acoplamento de Dados: comunicação por parâmetros.

    . Acoplamento de Imagem: referenciam a mesma estrutura de dados.

    . Acoplamento de Controle: um controla a lógica do outro.

    . Acoplamento Comum: referenciam a mesma área de dados.

    . Acoplamento de Conteúdo: um referencia o interior do outro.

    Ruim ou Rígido

     

    Coesão

    Melhor Manutenibilidade

    . Funcional: função com responsabilidade bem definida.

    . Seqüencial: seqüência de funções onde a saída de uma será entrada de outra.

    . Comunicacional: funções que usam a mesma entrada ou possuem a mesma saída.

    . Procedural: módulos compostos por funções pouco relacionadas entre si.

    . Temporal: atividades que estão relacionadas no tempo.

    . Lógica: módulos que possuem a mesma característica geral.

    . Coincidental:módulos cujos elementos contribuem para atividades sem relacionamento.

    Pior Manutenibilidade 

  • Cada autor fala uma coisa, não tem um consenso?

    Coesão Pressman 6ª Edição, PT, p. 247
     
    utilidade (coincidental), temporal, procedimental, sequencial, comunicacional,  em camada, funcional

    Acoplamento  Pressman 6ª Edição, PT, p. 249
     
    conteúdo (Interno), comum (Global), dados (Data), carimbado (Stamp), tipo, chamada de rotina (Mensagem), importação, externo. Aqui no acoplamento ele não cita qual é bom ou ruim.

    O que faz mas sentido para mim,  Meilir Page Jones http://c2.com/cgi/wiki?CouplingAndCohesion
     

    Cohesion (interdependency within module) strength/level names : (from worse to better, high cohesion is good)

    - Coincidental Cohesion : (Worst) Module elements are unrelated
    - Logical Cohesion : Elements perform similar activities as selected from outside module, i.e. by a flag that selects operation to perform (see also CommandObject).
    i.e. body of function is one huge if-else/switch on operation flag
    - Temporal Cohesion : operations related only by general time performed (i.e. initialization() or FatalErrorShutdown?())
    - Procedural Cohesion : Elements involved in different but sequential activities, each on different data (usually could be trivially split into multiple modules along linear sequence boundaries)
    - Communicational Cohesion : unrelated operations except need same data or input
    - Sequential Cohesion : operations on same data in significant order; output from one function is input to next (pipeline)
    - Informational Cohesion: a module performs a number of actions, each with its own entry point, with independent code for each action, all performed on the same data structure. Essentially an implementation of an abstract data type.
    i.e. define structure of sales_region_table and its operators: init_table(), update_table(), print_table()
    - Functional Cohesion : all elements contribute to a single, well-defined task, i.e. a function that performs exactly one operation
    get_engine_temperature(), add_sales_tax()
     
     Coupling (interdependence between modules) level names: (from worse to better, high coupling is bad)

    - Content/Pathological Coupling : (worst) When a module uses/alters data in another
    - Control Coupling : 2 modules communicating with a control flag (first tells second what to do via flag)
    - Common/Global-data Coupling : 2 modules communicating via global data
    - Stamp/Data-structure Coupling : Communicating via a data structure passed as a parameter. The data structure holds more information than the recipient needs.
    - Data Coupling : (best) Communicating via parameter passing. The parameters passed are only those that the recipient needs.
    - No data coupling : independent modules.
  • O principal nesta questão é você saber que é possível escrever uma classe sem nenhum grau de acoplamento, ou seja, sem qualquer ligação com outra classe ou com o mundo externo, mas não é possível escrever uma classe sem nenhum grau de coesão, pois o grau mínimo de coesão é coesão funcional.