Analise das opções:
a) O método Operation2 é privado. Errado - Sinal # visibilidade protected é acessível à classe e a suas subclasses
b) O método Operation1 é público. Correto - Sinal (+) public: Quem tem acesso à classe tem acesso também a qualquer membro
c) Os atributos attr1 e attr2 são ambos privados. Errado Sinal (+) significa pública
d) Os métodos Operation1 e Operation2 são ambos públicos. Errado - Operation1 (public) e Operation2 (protected)
e) O símbolo subtração (-) deveria ser utilizado em troca do símbolo adição (+) antes do atributo attr2, caso se quisesse indicar que se trata de um atributo protegido. Errado troca dos simbolos mudaria o atributo de protegido para publico.
Modificadores de Visibilidade na UML
:: Público + (public em Java)
O elemento é visível por qualquer classe
:: Protegido # (protected)
O elemento é visível na própria classe e pelas subclasses da classe
CUIDADO:
x Em UML: é um pouco mais restritivo que em Java. Se uma classe do pacote que tem a classe com o elemento protegido tentar enxergar esse elemento protegido ela não vai conseguir a não ser que ela seja uma subclasse desta classe. # = herança
x Em Java: O modificador protected torna o membro acessível às classes do mesmo pacote ou através de herança, seus membros herdados não são acessíveis a outras classes fora do pacote em que foram declarados. (é visto pela classe, pelas classes do mesmo pacote e pelas subclasses mesmo se não estiverem no mesmo pacote). Protected = pacote + herança
:: Pacote ~ (default em Java. Este modificador não tem símbolo em Java)
O elemento é visível apenas pela própria classe ou dentro do pacote onde a classe está localizada
:: Privado – (private em Java)
O elemento é visível apenas pela própria classe.