Questões de Concurso
Sobre orientação a objetos em engenharia de software
Foram encontradas 1.170 questões
Julgue o item que se segue, a respeito de desenvolvimento de projetos digitais.
A letra O do acrônimo SOLID corresponde ao princípio da responsabilidade única.
A engenharia de software foi criada para substituir a “arte de programação”, dando, assim, maior segurança de sucesso e terminalidade ao desenvolvimento de sistemas. Com base nessa informação, julgue o item a seguir.
A análise orientada a objetos (OOA) tem como objetivo identificar e definir os objetos principais do sistema, suas responsabilidades e suas interações, utilizando conceitos como encapsulamento, herança e polimorfismo para modelar o sistema de forma modular e reutilizável.
I. Existe uma associação entre Aluno e Disciplina, pois um aluno pode estar matriculado em várias disciplinas.
II. Não há um relacionamento de composição nesse cenário, pois a destruição de uma classe (por exemplo, a exclusão de um aluno) não implica necessariamente a destruição de outra classe (por exemplo, a disciplina).
III. O relacionamento de agregação poderia ser aplicado ao cenário entre Disciplina e Professor, indicando que um Professor é parte de uma disciplina, mas a existência independente de ambos é permitida.
IV. Neste cenário, as classes Aluno, Professor e Disciplina são entidades independentes e não estão relacionadas por uma relação de herança.
Com base nos dados apresentados, assinale a opção que reflete a aplicação correta dos princípios da modelagem OO no contexto do sistema de gerenciamento da biblioteca, considerando a relação entre as abordagens didático-pedagógicas e os conhecimentos teórico-práticos da área.
Com base na notação UML para as ligações apresentadas no diagrama, assinale a opção que apresenta corretamente o significado das relações entre as classes.
Na notação do diagrama de classes da UML representada abaixo, pode-se afirmar que:

I – O padrão de projeto Chain of Responsiblity tem a intenção de evitar o acoplamento do remetente de uma solicitação ao seu receptor, ao dar a mais de um objeto a oportunidade de tratar a solicitação, e encadear os objetos receptores, passando a solicitação ao longo da cadeia até que um objeto a trate.
II – O padrão de projeto Strategy tem a intenção de, sem violar o encapsulamento, capturar e externalizar um estado interno de um objeto, de maneira que o objeto possa ser restaurado para esse estado mais tarde.
III – O padrão de projeto Interpreter tem a intenção de fornecer um meio de acessar sequencialmente os elementos de um objeto agregado, sem expor a sua representação subjacente.
GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J. Padrões de Projetos – Soluções Reutilizáveis, Editora Bookman, 2000.
Assinale a alternativa correta, conforme Gamma et al. (2000):
I – O padrão de projeto Abstract Factory tem a intenção de definir uma interface para criar um objeto, mas deixar as subclasses decidirem que classe instanciar. Este padrão permite adiar a instanciação para subclasses.
II – O padrão de projeto Singleton tem como intenção garantir que uma classe tenha somente uma instância e fornecer um ponto global de acesso para a mesma.
III – O padrão de projeto Factory Method tem a intenção de fornecer uma interface para criação de famílias de objetos relacionados ou dependentes sem especificar suas classes concretas.
GAMMA, E.; HELM, R.; JOHNSON, R.; VLISSIDES, J. Padrões de Projetos – Soluções Reutilizáveis, Editora Bookman, 2000.
Assinale a alternativa CORRETA, conforme Gamma et al. (2000):
O seguinte diagrama de classes UML representa um trecho da modelagem de um sistema de agenda de contatos.

De acordo com esse modelo, uma possível representação de um recurso do tipo Pessoa no formato JSON, utilizado em uma API RESTful, é:
Considere o diagrama de classe UML a seguir:

Nesse diagrama, a classe X não pode ser instanciada, mas pode ser uma classe Pai de outras (tais como as classes Filhos Y e Z). Isso faz com que as classes X, Y e Z sejam consideradas, respectivamente, classes do tipo:
Observe a seguinte representação de um Diagrama de Classes UML:

Nesse diagrama, as classes CINF1, CINF2 e CINF3 são Filhos da classe Pai CSUP. Considerando esse quadro, o método ConstroiC(), existente em todas as classes, pode ser considerado, dentro da ideia de Orientação a Objeto, como um tipo de aplicação de:
Diante dessa incumbência, qual padrão de projeto estrutural você deve usar para agir como um substituto ou representante dos objetos reais, garantindo o controle de acesso?
Analise as sentenças abaixo, baseadas na obra de Sommerville a respeito de herança:
(SOMMERVILLE, Ian. Engenharia de Software. 9 ed. São Paulo: Pearson Prentice Hall, 2011, p. 148, 250 a 251)
I - O problema com a herança na programação orientada a objetos é que o código associado com um objeto não está concentrado em um só lugar, dificultando a compreensão do comportamento do objeto e possibilitando que se ignorem erros de programação.
II - A herança, quando combinada com ligações dinâmicas, pode causar problemas de timing em tempo de execução. Diferentes instâncias de um método podem ser vinculadas a uma chamada, dependendo dos tipos de parâmetros e, por consequência, diferentes quantidades de tempo serão despendidas na busca pela instância do método correto.
III - Herança faz testes de classes de objeto mais complicados, já que a operação que é herdada pode fazer suposições sobre outras operações e atributos. Essas operações podem não ser válidas em algumas subclasses que herdam a operação. Portanto, é necessário testar a operação herdada em todos os contextos de uso.
Estão CORRETAS a(s) afirmação(ões):
O _______ permite atribuir responsabilidades adicionais a um objeto dinamicamente, facilitando o tratamento de objetos de diferentes classes de forma uniforme. Já o ______ fornece um objeto representante ou um marcador de outro objeto para controlar o acesso ao mesmo.
class Legislacao { public void aplicar() { System.out.println("Legislação aplicada"); } } class LeiComplementar extends Legislacao { @Override public void aplicar() { System.out.println("Lei Complementar aplicada"); } } class LeiOrdinaria extends Legislacao { @Override public void aplicar() { System.out.println("Lei Ordinária aplicada"); } } public class Teste { public static void main(String[] args) { Legislacao minhaLei = new LeiComplementar(); Legislacao outraLei = new LeiOrdinaria(); minhaLei = outraLei; minhaLei.aplicar(); } }
Assinale a alternativa que mostra a saída da execução desse código: