SóProvas


ID
906820
Banca
FCC
Órgão
TRT - 9ª REGIÃO (PR)
Ano
2013
Provas
Disciplina
Engenharia de Software
Assuntos

Nos diagramas de classe da UML, o termo visibilidade refere-se à capacidade de um método de referenciar uma característica de outra classe. Sobre os valores possíveis para definir a visibilidade das características de uma classe,

Alternativas
Comentários
  • + public: os elementos são acessíveis por todas as classes;
     
    # protected: os elementos são acessíveis por subclasses, ou pela própria classe;
     
    – private: os elementos são acessíveis somente pela própria classe;
  • private : acessíveis somente na própria classe;
    protect: acessíveis na própria classe, classe do mesmo pacote e subclasses independente do pacote;
    <default>: acessíveis na própria classe e pacote; A diferença do protect com o default é que, no default, as subclasses não conseguem acessar os métodos da classe;
    public :  acessíveis por todos; (menos restrito)
    Atenção quanto à diferença entre o <default> e protect.
    O default só tem no Java. Na UML, ele corresponde ao Package.
  • Antes de mais nada é preciso saber que a visibilidade na UML é diferente para cada linguagem de programação, pois, embora as linguagens usem termos como public, private e protected, eles têm significados distintos nas diferentes linguagens. O que isso quer dizer? bom, se você estiver utilizando UML em um contexto Java, os significados de visibilidade serão diferentes do que se estivesse usando em um contexto C++;

    Porém, existe uma definição "padrão" sem dependencia de linguagem para UML, como segue abaixo (entre parenteses, quem pode acessar):
    public (classe, subclasse, pacote, todos);
    protected (classe, subclasse);
    private (classe)
    ~package (classe, pacote)

    vc pode estar se perguntando: esta errado, pois protected também engloba pacote correto? ERRADO!!! é como eu disse no enunciado, cada linguagem tem suas caracteristicas e se estivessemos falando em Java, ai sim, o termo protected também incluiria pacotes mas estamos nos referindo a UML independente de linguagem ÓKa?!!!
    Uma outra observação: em Java, se omitido a visibilidade, temos que a visibilidade default para esta linguagem é package. Já na UML (sem contexto de linguagem) se for omitido a visibilidade, NÃO significa que ela é package. Mas o que significa então? Significa que o autor/programador do diagrama não esta dando importancia para a visibilidade naquele momento. ÓKa?!!!

    Parece bobeira, mas muita gente faz essa confusão e pode ter muita pegadinha em cima disso nas questões para concurso. 
    Espero ter ajudado! Bons estudos!!!
  • Métodos e atributos possuem modificadores de acesso que definem a visibilidade destes elementos por parte de outras classes do sistema. Tais modificadores são representados no diagrama pelos símbolos ~+– , e #, que devem ser colocados antes dos nomes dos métodos/atributos. Estes quatro símbolos representam os seguintes modificadores na linguagem Java:
    ·         Default ou package-private (privativo ao pacote): representado pelo símbolo ~ (til) e conhecido como package em UML. Não há palavra-chave associada em Java e é utilizado quando o modificador não é especificado. Ex.: o atributo CPF da classe Usuario;
    ·         private (privado): representado pelo símbolo  (menos). Ex.: o atributo nome;
    ·         protected (protegido): representado pelo símbolo # (cerquilha). Ex.: o atributo idade;
    ·         public (público): representado pelo símbolo + (mais). Ex.: o atributo RG.
     
    Existem algumas características dos modificadores de acesso que devem estar em mente ao se criar um modelo. Os membros (atributos ou métodos) marcados como privado só podem ser acessados por métodos da mesma classe. Dessa forma, para outra classe acessar um membro privado é necessário invocar um método não privado declarado na mesma classe que chame esse membro internamente. Utiliza-se o modificador private para restringir o acesso desse membro por outras classes.
    Neste ponto já é possível ver alguns dos benefícios do paradigma OO citados na primeira parte desta série de artigos: se uma classe A só pode manipular os atributos de uma classe B através dos métodos de B, então dizemos que os atributos de B estão encapsulados. E se a classe A só possui conhecimento dos métodos da classe B e não conhece os detalhes de sua implementação, então dizemos que A e B são fracamente acopladas.
    Os modificadores de acesso protected e default possuem características semelhantes, mas com uma diferença fundamental. Um membro marcado como default só pode ser acessado por uma classe que pertença ao mesmo pacote, enquanto que um membro protegido, além de possuir essa característica, pode ser acessado (através da herança, que será abordada mais à frente) por uma subclasse, mesmo que essa subclasse pertença a um pacote diferente.
    O modificador public não restringe acesso a nenhuma classe e é mais comumente empregado para métodos. O uso de modificadores public em atributos faz com que qualquer classe possa acessar tais atributos diretamente, o que contraria o princípio de encapsulamento trazida pelo paradigma orientado a objetos. Os modificadores de acesso, assim como outros tipos de modificadores, são amplamente explicados por Kathy Sierra e Bert Bates [2].
  • Atenção:
    O QC corrigiu a questão corretamente, mas indicou que a alternativa a) está correta, quando não está. A justificativa está certa, porém foi marcada como CORRETA, quando na verdade ela está ERRADA. A respota correta, conforme jusitificativa do QC, é a letra E).

    Abs!
  • De acordo com a especificação da UML, um elemento com visibilidade pública é visível por todos os elementos, um elemento com visibilidade privada só é visível para a própria classe, um elemento com visibilidade protegida é visível por classes que tenham relação de relacionamento com o dono do elemento, e elementos com visibilidade package é visível por elementos que estão no mesmo pacote do dono do elemento.
    A notação para a visibilidade é :
    “+” publico
    “-“ privado
    “#” protegido
    “~” package
    Vejamos o que afirma as alternativas :
    a) apenas métodos da classe que contém o modificador private e de classes contidas no mesmo pacote podem acessar características privadas. O caractere “-” precede as características privadas.
    Alternativa incorreta. Se a visibilidade privada foi aplicada o elemento não será visualizado por classes do mesmo pacote, apenas pela mesma classe.
    b) os métodos das classes definidas no mesmo pacote da classe em questão podem acessar as características dessa classe definidas como pacote. O caractere “§” precede as características de pacote.
    Alternativa errada, a notação utilizada para representar a visibilidade package é “~” e não “§
    c) qualquer método pode acessar livremente as características públicas, exceto métodos de classes envolvidas em relações de herança ou implementação de interface. O caractere “+” precede características públicas.
    Alternativa errada, se a visibilidade pública foi aplicada , não há de se falar em exceções, todos poderão enxergar o método.
    d) apenas métodos presentes no mesmo pacote ou em classes que possuem relação de herança ou implementação de interface podem acessar características default. O caractere “*” precede características default.
    Alternativa errada. Segundo a especificação da UML não há visibilidade default, muito menos há notação “*” especificando qualquer visibilidade. Lembrando que a questão trata sobre UML, e não sobre especificidades de linguagens ou ferramentas proprietárias.
    e) somente os métodos da classe que contém o modificador protected e seus descendentes via herança podem acessar características protegidas (em Java características protegidas também possuem acessibilidade de pacote). O caractere “#” precede as características protegidas.
    Alternativa correta, um elemento com visibilidade protegida é visível por classes que tenham relação de relacionamento com o dono do elemento, e sua notação é “#” . Segundo a documentação da Oracle, o modificador de acesso protected no java também engloba a acessibilidade pacote, isso é uma característica do Java, e não da UML
    Portanto, alternativa correta é a letra E
    Fonte :
    - UML Infrastructure Specification, http://www.omg.org/spec/UML/2.4.1/Infrastructure
    - http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html
    • Existem três tipos de modificadores que são usados ​​para decidir a visibilidade de atributos e operações.
    • + é usado para visibilidade pública (para todos);
    • # é usado para visibilidade protegida (para classes do mesmo pacote e derivado);
    • - é usado para visibilidade privada (apenas para mim).