Buscar

Handbook de TI - Programação - Questões Comentadas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 52 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 52 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 52 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Questões comentadas
Programação
para concursos
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
Bons estudos,
Grupo Handbook de TI Programação é o processo de criação de programas de computador.
Para fazê-lo bem, o programador necessita dominar conceitos como modularização, coesão, aco-
plamento, funções, passagens de parâmetros, entre outros. Além disso, um bom programador
precisa conhecer os principais paradigmas de programação, como programação estruturada, pro-
gramação procedural, programação funcional e, principalmente, a programação orientada a ob-
jetos.
Como as técnicas e os paradigmas de programação são assuntos obrigatórios em grande parte
dos concursos na área de tecnologia da informação, o Grupo Handbook de TI preparou este
volume, que traz uma série de questões comentadas sobre programação para você se preparar
ainda melhor para os certames de seu interesse.
Bons estudos,
Grupo Handbook de TI
Página 1 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
Direitos Autorais
Este material é registrado no Escritório de Direitos Autorais (EDA) da Fundação Biblioteca
Nacional. Todos os direitos autorais referentes a esta obra são reservados exclusivamente aos
seus autores.
Os autores deste material não proíbem seu compartilhamento entre amigos e colegas próxi-
mos de estudo. Contudo, a reprodução, parcial ou integral, e a disseminação deste material de
forma indiscriminada através de qualquer meio, inclusive na Internet, extrapolam os limites da
colaboração. Essa prática desincentiva o lançamento de novos produtos e enfraquece a comuni-
dade concurseira Handbook de TI.
A série Handbook de Questões de TI Comentadas para Concursos � Além do Gabarito é uma
produção independente e contamos com você para mantê-la sempre viva.
Grupo Handbook de TI
Página 2 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
Canais de Comunicação
O Grupo Handbook de TI disponibiliza diversos canais de comunicação para os concurseiros
de TI.
Loja Handbook de TI
Acesse a nossa loja virtual em http://www.handbookdeti.com.br
Serviço de Atendimento
Comunique-se diretamente conosco através do e-mail faleconosco@handbookdeti.com.br
Twitter do Handbook de TI
Acompanhe de perto promoções e lançamentos de produtos pelo nosso Twitter http://twitter.
com/handbookdeti
Página 3 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
1. Assuntos relacionados: Técnicas de Programação, Modularização de Algoritmos,
Banca: CESGRANRIO
Instituição: BNDES
Cargo: Analista de Suporte
Ano: 2008
Questão: 35
Considere o projeto da rotina escrita em pseudo-código, apresentada a seguir.
1. função processar() {
2. // recuperar lista do banco de dados
3. // ordenar lista
4. // atualizar lista
5. // enviar lista via e-mail
6. // gravar lista no banco de dados
7. fim da função }
Sabendo-se que o desenvolvedor implementou o algoritmo responsável pelas linhas 2, 3, 4, 5
e 6 completamente no corpo da função apresentada acima, quais são as características deste
trecho de código?
(a). Alta coesão e baixa modularização.
(b). Alta coesão e alto acoplamento.
(c). Baixo acoplamento e baixa modularização.
(d). Baixa coesão e baixa modularização.
(e). Baixa coesão e alta modularização.
Solução:
A forma natural de solucionarmos problemas complexos é dividi-los em problemas mais
simples, aos quais chamamos de módulos. Essa divisão em programação é chamada de mo-
dularização.
Um módulo é um grupo de comandos, constituindo de um trecho de algoritmo, com uma
função bem definida e o mais independente possível em relação ao resto do algoritmo. Deve-
mos utilizar módulos de tamanho limitado, pois módulos muito extensos acabam perdendo
sua funcionalidade. Cada módulo pode definir as próprias estruturas de dados necessárias
para sua execução. A comunicação entre módulos deverá ser feita através de variáveis glo-
bais ou por transferência de parâmetros.
O objetivo da modularização é aumentar a confiabilidade, legibilidade, manutenibilidade
e flexibilidade de um software. Em linguagens procedurais, podemos utilizar dois tipos de
ferramentas para fazer a modularização: procedimentos ou funções.
A declaração de um procedimento ou função é composta por um cabeçalho e um corpo.
O cabeçalho, que contém um nome e uma lista de parâmetros, identifica o procedimento.
O corpo contém declarações locais e os comandos do procedimento. Para ativarmos um
módulo, fazemos referência a seu nome e indicamos parâmetros atuais.
Página 4 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
Quando projetamos um algoritmo, devemos construir módulos com os seguintes propósi-
tos: alta coesão e baixo nível de acoplamento. Ou seja, o ideal é projetar software de forma
que cada módulo encaminhe uma sub-função específica de requisitos e tenha uma interface
simples quando visto de outras partes da estrutura do programa. A independência funcional
é fundamental para um bom projeto.
A coesão mede o quão relacionadas ou focadas estão as responsabilidades da classe ou
módulo. Uma classe com baixa coesão faz muitas coisas não relacionadas, ou seja, assume
responsabilidades que pertencem a outras classes e leva aos seguintes problemas: difícil de
entender; difícil de reusar; difícil de manter; e �delicada� (constantemente sendo afetada por
outras mudanças).
O acoplamento ou conexão é a interdependência relativa entre módulos, ou seja, o que
um módulo conhece sobre o outro. Mudanças em módulos com baixo acoplamento não são
refletidas em outros módulos. Podemos classificar um software, em relação ao acoplamento,
da seguinte maneira:
• baixo acoplamento: quando a interface entre módulos se faz através da passagem de
dados;
• acoplamento moderado: quando a interface entre os módulos é feita por controle,
p.ex., quando o módulo 1 passa o controle para o módulo 2;
• acoplamento elevado: quando o módulo está ligado a um ambiente externo ao soft-
ware, p.ex., a E/S acopla um módulo a dispositivos, formatos e protocolos de comuni-
cação. Ou ainda, módulos que utilizam variáveis globais.
De acordo com o algoritmo apresentado, o desenvolvedor não se preocupou com a modula-
rização, coesão e acoplamento. Isto é, concentrou todas as funcionalidades em uma única
função. Assim, caracterizando o código com baixa modularidade, baixa coesão e alto aco-
plamento.
Página 5 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
2. Assuntos relacionados: Estruturas de Dados, Árvores Binárias, Árvores AVL,
Banca: FCC
Instituição: TRT 18a Região
Cargo: Analista Judiciário - Tecnologia da Informação
Ano: 2008
Questão: 26
No projeto de módulos adequadamente estruturados deve-se
(a). evitar o baixo acoplamento.
(b). evitar escopo de efeito de um módulo fora de seu escopo de controle.
(c). evitar a coesão funcional.
(d). adotar o acoplamento por conteúdo.
(e). adotar a coesão lógica.
Solução:
Módulo é a parte do sistema responsável por uma tarefa bem definida e que pode ser aco-
plado a um sistema para permitir ao mesmo executar a tarefa disponibilizada pelo mesmo.
O conceito de módulo é similar ao de uma caixa preta. A função é bem clara. É conhecida
a entrada, a saída e a função.
Um projeto de módulos visa atingir os seguintes objetivos:
• Precisão: um módulo deve fazer exatamente o que se espera dele;
• Solidez: capacidade de um módulo manipular corretamente situações inesperadas. Um
módulo sólido não propaga erros;
• Extensibilidade:módulos devem ser construídos de tal forma que uma nova funciona-
lidade possa ser adicionada sem a necessidade de se refazer o serviço;
• Facilidade de adaptação: os módulos devem ser de tal forma que possam ser facilmente
adaptados a novas utilizações;
• Reutilização: os módulos devem ser projetados de tal forma que possam ser utilizados
em mais de uma aplicação.
Para atingirmos os objetivos acima em um projeto de módulos, os seguintes princípios devem
ser seguidos:
• Ocultar informações: o funcionamento interno de um módulo deve estar oculto aos
outros módulos. Assim, módulos podem utilizar-se de outros módulos e depender
destes para realizar as tarefas esperadas sem se preocupar como devem ser realizadas
tais tarefas;
• Poucas interfaces: um módulo deve interagir com outros o mínimo possível, pois quanto
mais interfaces tiverem uns com os outros, mais difícil será a manutenção dos mesmos;
• Pequenas interfaces: a interface de um módulo deve precisar somente das informações
necessárias para que o mesmo complete a tarefa. Este princípio limita as ligações
que um módulo tem com uma aplicação em particular, tornando-o mais fácil de ser
reutilizado;
• Interfaces explícitas: as interfaces devem ser feitas de forma que todas as informações
pertinentes sejam claramente especificadas no código fonte;
Página 6 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
• Clareza um módulo deve ser dedicado a uma finalidade bem definida, e a função de-
sempenhada pelo módulo não deve gerar nenhum �efeito colateral� inesperado. Uma
vantagem da obediência deste princípio é a facilidade de depuração.
Dentre os critérios de qualidade de um projeto de módulos se destacam o acoplamento e a
coesão.
O acoplamento mede o grau de interdependência entre os módulos do diagrama. O que
se deseja são módulos de baixo acoplamento para diminuir o máximo possível o efeito em
cadeia quando um módulo for alterado. Os tipos de acoplamento são:
• Acoplamento de dados: corresponde a comunicação de dados necessária entre módulos.
Uma vez que os módulos têm que se comunicar, a ligação de dados é inevitável, e não é
crítica desde que mantidas as taxas mínimas. Deve-se tomar cuidado com o chamado
dado migrante (um grupo de informações que vagueia pelo sistema), indesejável e sem
sentido para a maioria dos módulos pelos quais passa;
• Acoplamento de imagem: dois módulos apresentam acoplamento por imagem se eles
fazem referência a uma mesma estrutura de dados. Este tipo de acoplamento tende a
fornecer mais dados do que o necessário a um módulo;
• Acoplamento de controle: dois módulos são acoplados por controle se um passa um
grupo de dados (controle) para o outro para controlar sua lógica interna;
• Acoplamento comum: dois módulos possuem Acoplamento Comum quando fazem re-
ferência a uma área global de dados. Um bom exemplo é a Working Storage Section
da linguagem Cobol. Este tipo de acoplamento não é desejável, pois um erro em uma
área global pode se propagar por diversos módulos. Além disso, programas com muitos
dados globais são de difícil entendimento e fica difícil descobrir que módulos devem ser
alterados quando um dado é modificado;
• Acoplamento de conteúdo: dois módulos apresentam acoplamento de conteúdo (ou
patológico) se um faz referência ou desvia a sequência de instruções para o interior
de um outro módulo (GOTO). Tal acoplamento torna o conceito de caixas-pretas sem
sentido.
Já a coesão mede a intensidade da associação funcional dos elementos de um módulo.
Deseja-se módulos altamente coesos, cujos elementos são relacionados uns com os outros.
Por outro lado, os elementos de um módulo não devem ser fortemente relacionados com os
elementos de outros módulos, pois isto levaria a um forte acoplamento entre eles. Ter certeza
de que todos os módulos têm boa coesão é a melhor forma de minimizar o acoplamento. Os
tipos de coesão são:
• Coesão funcional: um módulo apresenta coesão funcional quando suas funções internas
contribuem para a execução de uma e apenas uma tarefa relacionada ao problema;
• Coesão sequencial: um módulo apresenta coesão sequencial quando suas funções in-
ternas estão envolvidas em atividades de tal forma, que os dados de saída de uma
atividade sirvam como dados de entrada para a próxima. Este fluxo estabelece uma
sequência de execução das funções, no entanto, não se pode caracterizar o conjunto
delas como uma única tarefa. Um módulo com coesão sequencial caracteriza-se por
ser de fácil manutenção, porém de baixa reutilização, pois contém atividades que são
utilizadas juntas;
• Coesão comunicacional: um módulo possui coesão comunicacional quando suas funções
internas estão relacionadas por utilizarem as mesmas informações, ou seja, utilizam a
Página 7 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
mesma entrada ou mesma saída. Nesta situação o módulo fornece mais informações
que o necessário. Módulos com coesão comunicacional e sequencial são semelhantes,
pois ambos contém atividades organizadas em torno dos dados do problema original.
A principal diferença entre eles é que um módulo sequencialmente coeso opera como
uma linha de montagem onde suas atividades são executadas em uma ordem específica.
Já em um módulo com coesão comunicacional a ordem de execução não é importante;
• Coesão procedural: um módulo possui coesão procedural quando suas funções internas
executam atividades diferentes e não correlacionadas, exceto por serem executadas em
uma mesma ordem, nas quais o controle flui (e não os dados) de uma atividade para
outra. É comum em um módulo com coesão procedural que os dados de entrada e
saída tenham pouca relação. É típico também que tais módulos devolvam resultados
parciais, tais como: flags, chaves, etc.;
• Coesão temporal: um módulo possui coesão temporal quando suas funções internas
executam atividades que estão relacionadas apenas com o tempo (as atividades não
estão relacionadas entre si). A ordem de execução de atividades é mais importante em
módulos procedurais do que em módulos temporais;
• Coesão lógica: um módulo possui coesão lógica quando suas funções internas contri-
buem para atividades da mesma categoria geral, onde a atividade é selecionada fora
do módulo. Desta forma, módulos logicamente coesos apresentam uma interface des-
caracterizada;
• Coesão coincidental: um módulo possui coesão coincidental quando suas funções não
possuem nenhuma correlação entre si, não há uma ordem específica de execução, nem
sempre todas as funções são ativadas e a ativação das funções é decidida fora do módulo.
As formas de coesão apresentadas acima estão em ordem decrescente de importância para
um bom projeto. Ou seja, o ideal é que a coesão funcional seja adotada e funcionando como
uma verdadeira �caixa-preta�. A medida que �descemos� a lista acima, vamos adentrando
em um enfraquecimento da coesão e, portanto, a uma piora do projeto de módulos.
Além do acoplamento e coesão devemos considerar outras diretrizes dentro do projeto tais
como Factoring, Divisão de Decisão, Fan-In, Fan-Out, etc.
O factoring corresponde a separação de uma função contida em um módulo, passando-
a para um novo módulo. Este separação pode ter com objetivo:
• reduzir o tamanho do módulo;
• obter as vantagens modulares de um projeto top-down, tornando o sistema mais com-
preensível e permitindo modificações mais localizadas;
• evitar a codificação de uma mesma função em mais de um módulo;
• prover módulos de utilização mais genérica;
• simplificar a implementação.
A fatoração de um módulo grande deve ser efetuada se não diminuir a coesão e não aumentar
o acoplamento do módulo original.
Uma decisão é constituída de duas partes: o reconhecimento da açãoa ser tomada e a
execução desta ação. Deve-se evitar ao máximo a divisão de decisão. A parte referente a
execução da decisão deve ser mantida o mais próximo possível da parte referente ao reconhe-
cimento, a fim de que a informação reconhecida não tenha que percorrer um longo caminho
Página 8 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
para ser processada(dado migrante).
O escopo de controle é um conjunto formado por um módulo e todos os seus subor-
dinados. Já o escopo de efeito de uma decisão é conjunto de todos os módulos cujo seu
procedimento depende da decisão. É importante que o escopo de efeito de uma decisão
de um módulo seja um subconjunto do escopo de controle deste módulo. Sempre que esta
regra for violada, deve-se elaborar uma nova organização dos módulos com o objetivo de
aproximar o reconhecimento da execução.
O FAN-OUT corresponde ao número de subordinados imediatos de um módulo. Deve-
se limitar o FAN-OUT de um módulo em torno de sete. Para corrigir um alto FAN-OUT
pode-se utilizar o factoring de módulos. Já a definição de FAN-IN corresponde ao número
de módulos superiores de um módulo. Um alto FAN-IN acarreta reutilização de módulos.
Dada as melhores diretrizes para um projeto de módulos, vamos analisar as alternativas
da questão.
(A) Está errada. Como já foi exposto, o baixo acoplamento é desejável em um bom projeto
de módulos.
(B) Correta. É importante que um escopo de efeito de uma decisão de um módulo es-
teja dentro do seu escopo de controle.
(C) Errada. A coesão funcional é a forma de coesão mais importante para um bom projeto,
pois consiste em atribuir somente uma tarefa para um determinado módulo para resolução
de um problema.
(D) Errada também. Ao adotarmos o acoplamento por conteúdo, estaremos ignorando
as principais vantagens da modularização como a reutilização e a facilidade de adaptação.
(E) Na coesão lógica, um módulo faz um conjunto de funções relacionadas, uma das quais
é escolhida através de um parâmetro ao chamar o módulo. Um exemplo abaixo.
public void faça(int flag) {
switch(flag) {
case ON:
// passos para tratar de ON
break;
case OFF:
// passos para tratar de OFF
break;
case FECHAR:
// passos para tratar de FECHAR
break;
case COR:
// passos para tratar de COR
break;
}
}
Tal tipo de coesão não é desejável para um bom projeto na maioria do casos. A alternativa
Página 9 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
E está errada. A solução para obtermos uma melhor coesão é quebrarmos o módulo em
módulos diferentes cada qual com a sua função específica.
Página 10 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
3. Assuntos relacionados: Projeto de Software, Coesão,
Banca: FCC
Instituição: TRT 16a Região
Cargo: Analista Judiciário - Tecnologia da Informação
Ano: 2009
Questão: 42
Dentro do espectro de coesão entre tarefas de um módulo é menos indicado usar a
(a). procedimental do que a temporal.
(b). funcional do que a temporal.
(c). lógica do que a coincidental.
(d). comunicacional do que a procedimental.
(e). sequencial do que a funcional.
Solução:
A forma natural de solucionarmos problemas complexos é dividi-los em problemas mais sim-
ples, aos quais chamamos de módulos.
A modularização é uma ferramenta da programação estruturada, que tem como objetivo
aumentar a confiabilidade, legibilidade, manutenibilidade e flexibilidade dos algoritmos. Um
módulo é, então, um grupo de comandos, constituindo um trecho de algoritmo, com uma
função bem definida e o mais independente possível em relação ao resto do algoritmo.
Quando projetamos um algoritmo devemos construir módulos com apenas um propósito
(alta coesão), e diminuir ao máximo a interação entre eles (baixo nível de acoplamento).
Ou seja, o ideal é projetar software de forma que cada módulo encaminhe uma sub-função
específica de requisitos e tenha uma interface simples quando visto de outras partes da es-
trutura do programa.
A coesão mede a intensidade da associação funcional dos elementos de um módulo. Uma
classe com baixa coesão possui funcionalidades não relacionadas, ou seja, uma classe com
baixa coesão possui responsabilidades que pertencem a outras classes, e leva a problemas
de dificuldade de entendimento, de reutilização e de manutenção. Os tipos de coesão (do
melhor tipo para o pior tipo) são:
• Funcional: um módulo com coesão funcional contém elementos que contribuem para a
execução de uma e apenas uma tarefa relacionada ao problema;
• Seqüencial: um módulo seqüencialmente coeso é aquele cujos elementos estão envolvi-
dos em atividades tais que os dados de saída de uma atividade servem como dados de
entrada para a próxima;
• Comunicacional: um módulo com coesão comunicacional é aquele cujos elementos con-
tribuem para atividades que usem a mesma entrada ou a mesma saída;
• Procedural: módulo cujos elementos estão envolvidos em atividades diferentes e pos-
sivelmente não relacionadas, mas nas quais o controle flui de uma atividade para a
outra;
• Temporal: módulo cujos elementos estão envolvidos em atividades que estão relaciona-
das no tempo;
Página 11 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
• Lógica: módulo cujos elementos contribuem para atividades da mesma categoria geral,
onde a atividade ou as atividades a serem executadas são selecionadas fora do módulo;
• Coincidental: um módulo coincidentemente coeso é aquele cujos elementos contribuem
para atividades sem relação significativa entre si.
O acoplamento mede o grau de interdependência entre os módulos do diagrama. Um alto
acoplamento dificulta manutenções no sistema.
A seguir, analisamos as alternativas desta questão:
(A) ERRADA
A coesão procedimental ou procedural é mais indicada para ser utilizada do que a coe-
são temporal.
(B) ERRADA
A coesão funcional é mais indicada para ser utilizada do que a coesão temporal.
(C) ERRADA
A coesão lógica é mais indicada para ser utilizada do que a coesão coincidental.
(D) ERRADA
A coesão comunicacional é mais indicada para ser utilizada do que a coesão procedimental.
(E) CORRETA
A coesão seqüencial é menos indicada para ser utilizada do que a coesão funcional.
Página 12 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
4. Assuntos relacionados: Técnicas de Programação, Passagem de Parâmetros,
Banca: CESGRANRIO
Instituição: BNDES
Cargo: Analista de Suporte
Ano: 2008
Questão: 36
Observe a rotina abaixo escrita em pseudocódigo.
1. inicio
2. p : inteiro = 20
3. misturar(p,p)
4. imprimir p
5. fim
6. procedimento misturar(a:inteiro, b:inteiro)
7. a = a + (b / 2) � (b / 5) + 14;
8. b = (a / b) - 1;
9. fim da função
Considerando-se a linha 1 como o ponto de entrada, e que os parâmetros `a' e `b' da sub-
rotina são passados por referência, qual será o valor impresso na linha 4?
(a). 0
(b). 1
(c). 19
(d). 20
(e). 40
Solução:
Existem vários tipos de passagem de parâmetros e a escolha depende do nosso objetivo.
Em uma passagem de parâmetro por valor, as alterações realizadas nos parâmetros dentro
da função invocada (parâmetros formais) não refletem nos parâmetros da função invocadora
(parâmetros efetivos) correspondente. Nesse caso, os parâmetros são de entrada.
Em uma passagem por referência, as alterações realizadas nos parâmetros formais refle-
tem nos parâmetros efetivos da função correspondente. Nesse caso, os parâmetros são de
entrada e saída. As alterações dos parâmetros são refletidas,pois se altera o valor na me-
mória endereçada pelo parâmetro.
Na linha 2 do código, a variável p, que é do tipo inteiro, recebe o valor 20. Na linha 3,
a função misturar é invocada. Como os parâmetros dessa função são passados por referên-
cia, devemos lembrar que qualquer alteração dentro do corpo da função misturar reflete no
valor de p. Para essa função, os parâmetros a e b são iguais a p, isto é, a = 20 e b = 20.
Vale destacar que qualquer alteração em a é refletida em b, e em b refletida em a e conse-
quentemente em p, pois as três variáveis apontam para o mesmo endereço de memória.
Página 13 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
No corpo da função misturar, linha 7, o parâmetro a é alterado. O resultado dessa ope-
ração é a = 40, e consequente b = 40, pois apontam para mesmo endereço de memória. Na
linha 8, o parâmetro b é alterado. O resultado dessa operação é b = 0. Ou seja, o valor de
p foi atualizado para 0.
Na linha 4, o valor atual de p é 0. Então, o valor impresso de p é igual 0.
Vale lembrar que cada linguagem de programação tem suas regras específicas para reali-
zar a passagem de parâmetros.
Página 14 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
5. Assuntos relacionados: Programação, Estruturas de Dados,
Banca: ESAF
Instituição: Receita Federal (RF)
Cargo: Técnico da Receita Federal - Tecnologia da Informação
Ano: 2006
Questão: 21
Analise as seguintes afirmações relacionadas a Noções de Programação:
I. Quando uma função é chamada e os parâmetros formais da função copiam os valores
dos parâmetros que são passados para ela, sem que ocorra alteração dos valores que os
parâmetros têm fora da função, este tipo de chamada de função é denominado chamada
com passagem de parâmetros por valor. Isso ocorre porque são passados para a função
apenas os valores dos parâmetros e não os próprios parâmetros.
II. Uma função que pode chamar a si própria é chamada função recursiva. Um critério
de parada vai determinar quando a função deverá parar de chamar a si mesma. Isso
impede que a função entre em loop.
III. Uma fila é uma lista de informações com operações especiais de acesso. O acesso aos
elementos da fila é feito pela extremidade oposta à da inserção, ou seja, o elemento
disponível estará sempre na extremidade oposta à da inserção. Esta regra é também
conhecida como LIFO (Last In First Out).
IV. No desenvolvimento estruturado, uma boa prática de modularização é proporcionar
um alto acoplamento entre os módulos, mantendo a dependência lógica e liberdade de
comunicação entre eles.
Indique a opção que contenha todas as afirmações verdadeiras.
(a). II e III
(b). I e II
(c). III e IV
(d). I e III
(e). II e IV
Solução:
Vamos analisar as afirmativas separadamente, pois termos diferentes são utilizados em cada
uma.
I. CORRETA. Na passagem de parâmetros por valor, a função recebe uma cópia dos
argumentos quando é invocada. Ou seja, as alterações de valor nas variáveis que repre-
sentam os argumentos não é propagado fora do escopo da função. Já na passagem de
parâmetros por referência, são enviadas internamente para a função, as referências dos
argumentos que foram passados, e não uma simples cópia. Os valores alterados, neste
caso, irão ser efetivados fora do escopo da função.
II. CORRETA. Uma função recursiva é uma função que pode invocar a si própria. Em
toda função recursiva existem dois passos importantes: o passo básico e o passo re-
cursivo. O passo básico é o passo em que o resultado é imediatamente conhecido, já
o passo recursivo é o passo em que se tenta resolver um sub-problema do problema
inicial. O passo básico é, em si, o critério de parada, pois uma vez que o conjunto de
entrada �bate� com o caso básico, a função recursiva não é mais chamada.
Página 15 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
III. ERRADA. As filas são estruturas baseadas no princípio FIFO (first in, first out), ou
seja, os elementos que foram inseridos no início são os primeiros a serem removidos. É
verdadeiro dizer que, neste caso, o acesso ao elemento da fila é feito pela extremidade
oposta ao da inserção. O erro está em dizer que a regra utilizada é a LIFO (Last In
First Out). A regra LIFO, a qual se refere a afirmativa, é a regra básica da estrutura
de dados conhecida como pilha. Na pilha, os dados que foram inseridos por último,
serão os primeiros a serem removidos, ou seja, a extremidade de inserção e de deleção
é a mesma.
IV. ERRADA. Dizemos que o acoplamento é baixo quando uma mudança em um módulo
não requererá a mudança em outro módulo. Acoplamento baixo é sinal de um sistema
bem estruturado e isso se consegue através de uma modularização bem pensada. O
acoplamento baixo pode reduzir o desempenho em relação a um sistema com alto
acoplamento. Entretanto, o acoplamento baixo é requerido na maioria dos casos, pois
oferece uma manutenabilitadade mais simplificada. Além disso, o acoplamento baixo
facilita a coesão elevada. Módulos com alta coesão possuem responsabilidades bem
definidas e é bem difícil dividi-las em duas ou mais classes.
Dado o exposto, as afirmativas corretas são somente a (I) e (II), logo, a alternativa correta
é a letra (B).
Página 16 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
6. Assuntos relacionados: Orientação a Objeto, Java,
Banca: FCC
Instituição: TRT 2a Região
Cargo: Analista Judiciário - Tecnologia da Informação
Ano: 2008
Questão: 31
Em uma hierarquia de classes é possível especificar operações com a mesma assinatura em
pontos diferentes da hierarquia. Portanto, essas operações presentes nas classes-filha
(a). anulam o comportamento das operações existentes nas classes-mãe.
(b). herdam os atributos existentes nas classes-mãe.
(c). são composições de alguns atributos existentes nas classes-mãe.
(d). complementam o comportamento das operações existentes nas classes-mãe.
(e). agregam as operações existentes nas classes-mãe.
Solução:
Herança de métodos permite a você definir e usar métodos repetidamente em subclasses
(classes filhas) sem ter que replicar código. Porém, existem momentos em que mesmo que
o método da superclasse (classe pai) seja apropriado para a subclasse, esta freqüentemente
necessita customizá-lo, isto é, você deseja que estes métodos tenham um comportamento
diferente quando for chamado. Em tais situações, a subclasse pode redefinir o método da
superclasse com uma implementação apropriada.
Para redefinir um método, tudo que você precisa fazer é criar um método em sua sub-
classe com a mesma assinatura (nome, tipo de retorno e lista de parâmetros) que o método
da superclasse. E, uma vez que Java executa a primeira definição do método que ele en-
contra com a mesma assinatura, isto �esconde� eficazmente o método original existente na
superclasse. Por este motivo que a alternativa A é a CORRETA.
Devemos citar ainda que, em Java, quando um método da subclasse redefine o da superclasse,
o método desta última ainda pode ser acessado a partir da subclasse, bastando simplesmente
inserir antes do nome do método a palavra-chave super e um ponto separador (.). Isto evita
a duplicação de procedimento em ambos os métodos (o da superclasse e o da subclasse),
permitindo que você chame o método original no corpo do método substituído e adicione
apenas o que precisa.
Página 17 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
7. Assuntos relacionados: Orientação a Objeto, Java, C++,
Banca: FCC
Instituição: TRT 2a RegiãoCargo: Analista Judiciário - Tecnologia da Informação
Ano: 2008
Questão: 34
As instâncias de uma classe são
(a). seus atributos.
(b). suas superclasses.
(c). suas operações.
(d). seus objetos.
(e). seus relacionamentos.
Solução:
Analisemos alternativa por alternativa.
(A) ERRADA
Atributos são informações individuais que diferenciam um objeto de outro e determinam
a aparência, estado, ou outras qualidades do objeto. Eles são definidos por variáveis e po-
dem ser considerados análogos a variáveis globais para o objeto inteiro.
(B) ERRADA
Superclasse é simplesmente a classe que está acima na hierarquia.
Somente para lembrar: Java não dá suporte nativo à herança múltipla de implementações
(herdar de mais de uma superclasse), ao contrário de C++. No entanto, ainda é possível ob-
ter uma herança múltipla virtual, onde você consegue herdar assinaturas de métodos através
das interfaces.
(C) ERRADA
As operações, ou métodos, de uma classe determinam o que as instâncias daquela classe
fazem quando o estado do objeto muda ou quando estas instâncias são solicitadas a fazer
alguma coisa por outra classe ou objeto.
Lembre-se que as operações nem sempre afetam somente um único objeto; objetos se comu-
nicam usando métodos também. Uma classe ou objeto pode chamar métodos em uma outra
classe ou objeto para comunicar mudanças no ambiente ou para pedir que o objeto altere o
seu estado.
(D) CORRETA
Uma classe é um modelo para múltiplos objeto com características similares. Ela incor-
pora todas as características de um conjunto de objetos. Quando você escreve um programa
em uma linguagem orientada a objetos, você não define objetos reais, você define classe de
Página 18 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
objetos.
Por exemplo, você pode ter uma classe Árvore que descreve as característica de todas as
árvores (tem folhas e raízes, cresce, produz clorofila). A classe Árvore serve como um modelo
abstrato para o conceito de uma árvore � para alcançar e �agarrar�, ou interagir com, ou
cortar uma árvore você tem que ter uma instância concreta desta árvore. Naturalmente,
uma vez que você tenha uma classe Árvore, você pode criar muitas instâncias de árvores
diferentes, e cada instância de árvore diferente pode ter diferentes características (pequena,
alta, etc.).
Uma instância de uma classe é uma outra palavra para objeto. Se uma classe é uma repre-
sentação abstrata de um objeto, uma instância é a sua representação concreta. Portanto
não há diferença alguma entre instância e objeto. Objeto é o termo mais geral, mas ambos
os termos são a representação concreta de uma classe.
(E) ERRADA
Como os objetos usualmente necessitam co-operar a fim de alcançar seus objetivos, eles
comumente entram em relacionamento uns com outros. Citamos aqui três tipos de relacio-
namento:
1. Associação: trata-se do tipo de relacionamento mais importante. Objetos que estão
associados co-operam pelo envio de mensagem. Em geral, associação deveria ser usada
onde dois objetos não estão conceitualmente relacionados, mas dentro do contexto do
problema precisam fazer uso do serviço dos outros. Por exemplo, uma interação na
qual um único objeto Empregado é empregado por um único objeto Companhia;
2. Agregação composta: também referenciada como relacionamento �tem um� ou �parte
de� ela indica que um objeto (o todo) é composto de outros objeto (as partes). Com
a agregação composta o relacionamento existente entre objetos é muito mais forte que
com associação. Nela, o todo não pode existir sem suas partes e as partes não podem
existir sem o todo, de forma que: apagar o todo implica em apagar as partes; existe
um único todo, isto é, as partes não são compartilhadas entre os todos; partes não
podem ser �acessadas� fora do todo, isto é, elas são privadas ao todo; uma mensagem
destinada a uma parte precisa ser enviada para o todo e posteriormente transmitida
para a parte;
3. Agregação compartilhada: nela ainda há o relacionamento todo/parte, mas agora
as partes são compartilháveis com outros todos. Como com a agregação composta uma
mensagem para a parte necessita ser enviada através do todo. Porém, apagar o todo
não implica em apagar as partes. Assim, o acoplamento entre o todo e sua parte é
enfraquecido.
Página 19 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
8. Assuntos relacionados: Engenharia de Software, Orientação a Objeto,
Banca: FCC
Instituição: TRT 18a Região
Cargo: Analista Judiciário - Tecnologia da Informação
Ano: 2008
Questão: 27
São dois conceitos utilizados especificamente nos modelos orientados a objetos:
(a). fluxo de dados e herança.
(b). entidade externa e classe.
(c). método e polimorfismo.
(d). seleção e processo.
(e). depósito de dados e relacionamento.
Solução:
No paradigma orientado a objeto, pressupõe-se que o mundo é composto por objetos, onde
um objeto combina estrutura de dados e comportamento funcional. Neste paradigma, os
sistemas são estruturados a partir dos objetos existentes no domínio do problema, ou seja,
como os objetos interagem. Este paradigma tem origem no projeto de banco de dados e,
normalmente, o modelo de Entidade e Relacionamento (ER) é utilizando como principal
ferramenta.
A orientação a objeto oferece alguns conceitos para a modelagem de sistemas, entre eles:
objetos, atributos, comportamento, identidade, classes e instâncias, abstração, encapsula-
mento, modularidade, hierarquia, mensagens, sobrecarga, polimorfismo, interfaces e pacotes.
Em sistemas modelados com base no paradigma orientado a objetos, os objetos relacionam-
se uns com outros. Vários mecanismos têm sido propostos para a estruturação de classes
e objetos, entre eles: ligações e associações, agregações ou composições e generalização e
especialização.
Algumas linguagens de programação que dão suporte a orientação a objetos: Smaltalk,
Perl, Python, Ruby, PHP, ColdFusion, C++, Object Pascal, Java, JavaScript, ActionS-
cript, Delphi e C#.
A seguir, analisamos as alternativas desta questão:
(A) ERRADA
O conceito de fluxo de dados está relacionado ao paradigma estruturado, que, basicamente,
consiste em um modelo de entrada-processamento-saída, e os dados são considerados sepa-
radamente das funções que os transformam.
O conceito de herança é utilizado no modelo orientado a objeto. A herança é um meca-
nismo que permite criar novas classes a partir de classes já existentes. A classe nova criada,
chamada de subclasse, aproveita (herda) todas as características (atributos e operações) da
classe existente, chamada de superclasse.
As subclasses não estão limitadas somente aos atributos e às operações (métodos) herdados
Página 20 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
da superclasse. Elas podem criar novos atributos e métodos a aqueles herdados e podem
herdar características de uma ou mais superclasse.
Portanto, a alternativa está errada porque o termo fluxo de dados não é um conceito utili-
zado no paradigma de orientação a objeto.
(B) ERRADA
O conceito de entidade externa está relacionado com o Diagrama de Fluxo de Dados da
modelagem de sistemas e representa fontes ou destinos de dados de um sistema. Tipica-
mente, uma entidade externa pode representar pessoas, sistemas ou empresas.
O conceito de classe é utilizado no modelo orientado a objeto. Uma classe descreve um
conjunto de objetos com as mesmas propriedades (atributos), mesmo comportamento (mé-
todo), mesmos relacionamentos com outros objetos e a mesma semântica. Os objetos que
se comportam da maneira especificada pela classe são ditosinstâncias dessa classe. Todo
objeto pertence a uma classe, isto é, é instância de uma classe.
Portanto, a alternativa está errada porque o termo entidade externa não é um conceito
específico do paradigma de orientação a objeto.
(C) CORRETA
Tanto o conceito de método quanto de polimorfismo é utilizado especificamente no mo-
delo orientado a objeto. Logo, alternativa correta.
Os métodos ou operações são utilizados para recuperar ou manipular o estado (proprie-
dades) de um objeto. O estado de um objeto corresponde ao conjunto de suas propriedades
e é representado como atributo. O método é análogo às funções da programação estruturada.
A comunicação entre os objetos ocorrem por meio de troca de mensagens. Uma mensa-
gem consiste do nome do método e dos argumentos requeridos. A mensagem é utilizada
para acessar os atributos de um objeto, podendo alterar o estado do objeto.
O polimorfismo está ligado à comunicação entre objetos. Significa que uma mesma mensa-
gem enviada a diferentes objetos resulta em um comportamento que dependente da classe
do objeto que está recebendo a mensagem. Ou seja, uma mensagem pode ser interpretada
de diferentes maneiras, dependendo da classe do objeto receptor e, é o objeto receptor que
determina a interpretação da mensagem e não o objeto emissor. Então, o polimorfismo é
caracterizado como o fato de uma operação poder ser implementada de diferentes maneiras
em diferentes classes. O código abaixo mostra um exemplo de polimorfismo.
Note neste exemplo, que apesar do método calcular ter sido chamado duas vezes pelo método
mostrarCalculo, o comportamento do objeto varia de acordo com a classe ao qual o objeto
pertence (Soma ou Subtração).
Aliado ao conceito de polimorfismo há outro conceito que precisar ser explicado: o de so-
brecarga. Uma operação é dita polimórfica se ela existe com a mesma assinatura (número
e tipo de argumentos e valor de retorno) e os métodos que a implementam conservam uma
única semântica. Na sobrecarga, as operações não têm necessariamente a mesma semântica
Página 21 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
e não existe necessidade de preservar a assinatura. Na prática, as operações de sobrecarga
são, normalmente, uma coincidência na escolha de nomes das operações.
public abstract class OpMat
{
public abstract double calcular(double x, double y);
}
public class Soma extends OpMat
{
public double calcular(double x, double y)
{
return x+y;
}
}
public class Subtracao extends OpMat
{
public double calcular(double x, double y)
{
return x-y;
}
}
public class Contas
{
public static void mostrarCalculo(OpMat operacao, double x, double y)
{
system.out.println("O resultado é: " + operacao.calcular(x, y);
}
public static void main( String args[] )
{
//Primeiro calculamos uma soma
Contas.mostrarCalculo(new Soma(), 5, 5); //O resultado é: 10
Contas.mostrarCalculo(new Subtracao(), 5, 5); //O resultado é: 0
}
}
(D) ERRADA
O conceito de seleção e processo não são, especificamente, utilizados na modelo de ori-
entação a objetos. Por exemplo, o conceito de seleção pode estar relacionado à instrução de
seleção se-então-senão.
Portanto, a alternativa está errada porque os termos seleção e processo não são concei-
tos específicos do paradigma de orientação a objeto.
(E) ERRADA
O conceito de depósito de dados não está relacionado ao modelo orientado a objetos, e
Página 22 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
o conceito de relacionamento também não está, especificamente, relacionado modelo orien-
tado a objeto. Relacionamento, por exemplo, pode estar relacionado à modelagem de casos
de uso e ao modelo de Entidade e Relacionamento. No modelo de orientação a objetos, uma
forma de representar os relacionamentos é por meio de associação ou ligações e composição
ou agregação.
Portanto, a alternativa está errada porque os termos depósito de dados e relacionamento
não são conceitos específicos do paradigma de orientação a objeto.
Página 23 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
9. Assuntos relacionados: Engenharia de Software, Orientação a Objeto, Atributos e Clas-
ses,
Banca: FCC
Instituição: TRT 18a Região
Cargo: Analista Judiciário - Tecnologia da Informação
Ano: 2008
Questão: 28
O acesso aos atributos e operações das classes somente por intermédio de serviços (mensa-
gens) que conhecem suas interfaces é uma proteção garantida
(a). pela sub-classe.
(b). pela herança.
(c). pelo balanceamento.
(d). pela agregação.
(e). pelo encapsulamento.
Solução:
No modelo orientado a objetos, a comunicação entre os objetos ocorrem por meio de troca
de mensagens. Uma mensagem consiste do nome do método (da operação) e dos argumentos
requeridos. A mensagem é utilizada para acessar os atributos de um objeto, podendo alterar
o estado desse objeto.
A seguir, analisamos as alternativas desta questão:
(A) ERRADA
Uma subclasse herda todas as características (atributos e métodos) de uma superclasse.
A subclasse por herdar as características da superclasse não garante a proteção aos atribu-
tos e às operações de uma classe. Logo, alternativa, errada.
(B) ERRADA
A herança é um mecanismo que permite criar novas classes a partir de classes já exis-
tentes. A classe nova criada, chamada de subclasses, herda todos os atributos e métodos
da superclasse. A herança não garante a proteção a atributos e operações de uma classe.
Portanto, alternativa errada.
(C) ERRADA
O termo balanceamento não é utilizado no modelo de orientação a objeto. Logo, alter-
nativa errada.
(D) ERRADA
As ligações e associações são formas de representar relacionamentos entre objetos e clas-
ses, respectivamente. Uma ligação é uma conexão entre objetos, e uma associação descreve
um conjunto de ligações com estrutura e semântica comuns. Todas as ligações de uma as-
sociação interligam objetos da mesma classe. No exemplo �o empregado José trabalha no
departamento de Informática�, temos um relacionamento entre o objeto empregado José e
o objeto departamento Informática. Neste exemplo, uma ligação é representada entre José
Página 24 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
e Informática e uma associação é representada entre as classes empregado e departamento.
A agregação é um tipo forte de associação, onde um objeto agregado é constituído de vá-
rios objetos componentes. Por exemplo, um carro é composto por motor, rodas, carroceria,
etc. Um motor, por sua vez, é composto de bloco, válvulas, pistões, etc. A agregação é
representada pelo relacionamento �todo-parte� ou �uma-parte-de� no qual os objetos, que
representam os componentes de alguma coisa (classe parte), são associados a um objeto
representando o todo (classe todo). Na agregação, a classe todo existe independente da
classe parte (e vice-versa), não existe uma �ligação forte� entre as duas classes e os objetos
da classe todo são independentes da classe parte.
A agregação não garante proteção aos atributos e às operações de uma classe. Logo, al-
ternativa, errada.
(E) CORRETA
O encapsulamento consiste na separação dos aspectos externos de um objeto, acessíveis
por outros objetos, de seus detalhes internos de implementação, que ficam ocultos dos de-
mais objetos. Este mecanismo é utilizado para impedir o acesso direto aos atributos de um
objeto, disponibilizando métodos que alterem esses atributos.
Com encapsulamento, não há necessidade de saber como as operações encapsuladas estão
implementadas, masapenas o que as operações realizam. Se uma operação está encapsulada,
apenas o objeto que a define precisa ser modificado. A principal motivação para o encap-
sulamento é facilitar a reutilização de códigos. A utilização de encapsulamento é possível
garantir a proteção aos atributos e as operações das classes. Portanto, alternativa correta.
Página 25 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
10. Assuntos relacionados: Engenharia de Software, Orientação a Objeto, Associação entre
Classes,
Banca: FCC
Instituição: TRT 18a Região
Cargo: Analista Judiciário - Tecnologia da Informação
Ano: 2008
Questão: 29
Na associação entre classes, o número de instâncias de uma classe que pode se relacionar
com outra é definido
(a). unicamente pela quantidade de objetos contidos na classe-mãe.
(b). nas operações das classes.
(c). nos atributos das classes.
(d). pela multiplicidade.
(e). pela quantidade de características mutuamente herdadas.
Solução:
Relacionamentos são representações estáticas que modelam associações entre objetos. Cada
classe desempenha um papel na associação, e para cada papel é possível especificar a mul-
tiplicidade (cardinalidade) de uma classe, que indica quantos objetos de uma classe podem
estar associados a um objeto de outra classe. Em geral, a multiplicidade indica a fronteira
inferior e superior para os objetos participantes de um relacionamento.
Por exemplo, em uma empresa, um empregado está lotado em um departamento e, op-
cionalmente, o empregado pode ser chefe do departamento. Por sua vez, um departamento
pode ter vários empregados lotados, mas apenas um chefe. No relacionamento empregado
e departamento, um empregado tem um e somente um departamento. No relacionamento
departamento e chefe, um departamento possui um e somente um chefe.
Neste exemplo, mostramos o tipo de multiplicidade um para um, mas existem outros, como:
zero ou um, um para muitos, zero ou muitos, muitos para muitos, etc.
A seguir, analisamos as alternativas desta questão:
(A) ERRADA
Os objetos são instâncias de uma classe e não estão contidos na classe, e também não
tem nenhuma relação com a multiplicidade de relacionamento de uma classe. Logo, alter-
nativa errada.
(B) ERRADA
As operações de uma classe são utilizadas para recuperar ou manipular o estado (proprieda-
des) de um objeto, e não para especificar relacionamento entre classes. Portanto, alternativa
errada.
(C) ERRADA
Os atributos definem as propriedades de um objeto, e não são utilizados para especificar
Página 26 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
relacionamento entre classes. Logo, alternativa errada.
(D) CORRETA
O número de instâncias que pode se relacionar com outra é definido pela multiplicidade
ou cardinalidade, conforme explicado anteriormente. Portanto, alternativa correta.
(E) ERRADA
A herança é um mecanismo para modelar similaridades entre classes, e por meio dela, é
possível tornar explícitos atributos e serviços comuns em uma hierarquia de classes. A he-
rança não é utilizada para especificar o número de instâncias em um relacionamento entre
classes. Logo, alternativa errada.
Página 27 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
11. Assuntos relacionados: Engenharia de Software, Orientação a Objeto, Relacionamentos
entre Classes,
Banca: FCC
Instituição: TRT 18a Região
Cargo: Analista Judiciário - Tecnologia da Informação
Ano: 2008
Questão: 30
São dois tipos de relacionamento todo-parte:
(a). agregação e composição.
(b). generalização e composição.
(c). generalização e especialização.
(d). composição e dependência.
(e). especialização e agregação.
Solução:
Vários tipos de relacionamento têm sido propostos para estruturar classes e objetos na orien-
tação a objeto, entre eles: associação, composição, agregação, generalização e especialização.
As ligações e associações são formas de representar relacionamentos entre objetos e clas-
ses, respectivamente. Uma ligação é uma conexão entre objetos, e uma associação descreve
um conjunto de ligações com estrutura e semântica comuns. Todas as ligações de uma as-
sociação interligam objetos de mesma classe. No exemplo �o empregado José trabalha no
departamento de Informática�, temos um relacionamento entre o objeto empregado José e
o objeto departamento Informática. Neste exemplo, uma ligação é representada entre José
e Informática e uma associação é representada entre as classes empregado e departamento.
A composição e a agregação são um tipo forte de associação, onde um objeto agregado
é constituído de vários objetos componentes. Por exemplo, um carro é composto por mo-
tor, rodas, carroceria, etc. Um motor, por sua vez, é composto de bloco, válvulas, pistões,
etc. A agregação e a composição são representadas pelo relacionamento �todo-parte� ou
�uma-parte-de� no qual os objetos, que representam os componentes de alguma coisa (classe
parte), são associados a um objeto representando o todo (classe todo).
Na agregação, a classe todo existe independente da classe parte (e vice-versa), não existe
uma �ligação forte� entre as duas classes e os objetos da classe todo são independentes da
classe parte. Por outro lado, na composição, existe uma �ligação forte� entre a classe todo
e a classe parte e os objetos da classe parte são dependentes da classe todo. Um exemplo
de agregação é a relação entre a classe todo Apartamento e a classe parte Garagem. Um
exemplo de composição é a relação entre a classe todo Edifício e a classe parte Apartamento.
Muitas vezes, um conceito geral pode ser especializado, adicionando novas características.
Por exemplo, no conceito de estudantes, há características que são intrínsecas a quaisquer
estudantes, e é possível especializar este conceito para mostrar as especificidades de subtipos
de estudantes, tais como estudantes do 1
o
grau, do 2
o
grau, de graduação e pós-graduação.
De maneira inversa, é possível extrair um conjunto de conceitos, características comuns que,
quando generalizadas, formam um conceito geral. Por exemplo, ao avaliarmos o conceito
que temos de carros, motos, caminhões e ônibus, podemos notar que esses possuem carac-
terísticas comuns que podem ser generalizadas em classe mais geral. O primeiro exemplo é
Página 28 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
de especialização e o segundo exemplo é de generalização.
A generalização permite definir, a partir de um conjunto de classes, uma classe mais geral
contendo todas as características comuns entre esse conjunto de classes. A especialização é
uma operação inversa, isto é, a partir de uma classe geral, a especialização defini um número
de subclasses, explicitando as diferenças entre as novas subclasses. Com a especialização e
a generalização é possível capturar similaridades entre classes, dispondo-as em hierarquias
de classes.
De acordo com o explicado anteriormente, os tipos de relacionamento todo-parte são a
agregação e a composição. Portanto, alternativa correta é a (A).
Página 29 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
12. Assuntos relacionados: Engenharia de Software, Orientação a Objeto, Herança,
Banca: FCC
Instituição: TRT 18a Região
Cargo: Analista Judiciário - Tecnologia da Informação
Ano: 2008
Questão: 31
Em um diagrama de classes, considere que Seguridade e Imóveis herdam características de
Ativos. A classe ItemSuportado é super-classe de Imóveis mas não de Ativos. Nesse cenário,
o relacionamentogeral em que se envolve Imóveis caracteriza-se por
(a). ocultação.
(b). herança múltipla.
(c). dependência.
(d). polimorfismo.
(e). composição.
Solução:
A herança é um mecanismo que permite criar novas classes a partir de classes já existentes,
aproveitando-se das características existentes na classe a ser estendida. Com a herança é
possível criar classes derivadas (subclasses) a partir de classes bases (superclasses).
As subclasses herdam todas as características de suas superclasses, como suas variáveis
(estado) e seus métodos (comportamento). Entretanto, as subclasses não estão limitadas
ao comportamento herdado de sua superclasse. As subclasses podem adicionar variáveis e
métodos a aqueles herdados.
Quando uma subclasse herda características de uma única superclasse, tem-se herança sim-
ples. Quando uma classe é definida a partir de duas ou mais superclasses, tem-se herança
múltipla. É importante observar, no entanto, que na herança múltipla podem ocorrer dois
problemas: colisão de nomes herdados a partir de diferentes superclasses e a possibilidade
de herança repetida. A colisão quando uma classe C herda de duas classes A e B, sendo que
A possui um atributo de mesmo nome que na classe B. Assim, como será a característica
desse atributo na classe C. A herança repetida ocorre quando a classe D herda das classes
B e C, que por sua vez herdam da classe, isto é, a classe D herda, indiretamente, duas vezes
da classe A.
No enunciado desta questão, temos um exemplo de hierarquia entre classes. A Figura 1
ilustra a herança das classes Seguridade, Imóveis, Ativos e ItemSuportado.
Figura 1: herança entre as classes.
Página 30 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
A classe Ativos é superclasse das classes Seguridade e Imóveis, isto é, Seguridade e Imó-
veis são subclasses de Ativos. A classe Imóveis também é subclasse da superclasse Item-
Suportado. A subclasse Imóveis herda características das classes Ativos e ItemSegurado,
caracterizando uma herança múltipla. Portanto, a alternativa correta é a (B).
Página 31 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
13. Assuntos relacionados: Programação, Orientação a Objeto, Tipos de Métodos,
Banca: ESAF
Instituição: Controladoria-Geral da União (CGU)
Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento de
Sistemas de Informação
Ano: 2008
Questão: 21
Com relação aos conceitos de programação orientada a objetos, é correto afirmar que
(a). métodos abstratos são aqueles que não devem ser redefinidos em classes derivadas,
devem ser herdados tal como foram definidos.
(b). métodos estáticos são aqueles que, ao serem executados, não acessam atributos de
instância da classe.
(c). métodos finais, também conhecidos como finalizadores ou destrutores, são chama-
dos na destruição de uma instância.
(d). métodos construtores são métodos chamados sobre um objeto quando ele é criado.
Em Java, os construtores têm o mesmo nome da classe da qual são membros e o
tipo retornado por eles é especificado na sua definição.
(e). métodos de classe são aqueles que executam operações que afetam objetos indivi-
duais da classe.
Solução:
Criado por Alan Kay (autor da linguagem de programação Smalltalk), o termo Programa-
ção Orientada a Objetos diz respeito a um paradigma de análise, projeto e programação de
software baseado na interação entre diversas unidades chamadas de objetos. A ideia funda-
mental é simular o mundo real através de programas de computador. Os objetos interagem
entre si através do envio de mensagens, sendo que o programador deve especificar quais
são as mensagens que cada objeto pode receber e que ações realizar ao receber mensagens
específicas.
Os objetos, instâncias de classes, possuem métodos cujos acessos podem ser (re)definidos
por modificadores de acesso. Em Java, esses modificadores podem ser private, protected,
public e static.
Quando aplicado a um método, o modificador de acesso private indica que ele só pode
ser acessado de dentro da classe que o criou, característica chamada de encapsulamento.
Assim, uma classe que herde de uma superclasse com métodos �privados� não conseguirá
utilizá-los diretamente. O modificador protected indica que o método apenas poderá ser
acessado dentro do pacote em que estiver contida sua classe. Já o modificador public indica
que o método pode ser acessado em qualquer lugar e a qualquer momento da execução do
programa. Por fim, o modificador static indica que o método �estático� deve ser acessado
diretamente na classe e não em suas instâncias, ou seja, ele define métodos de classe em vez
de métodos de instância.
Em conjunto com os modificadores de acesso, podem ser utilizados os modificadores abstract
e final. O primeiro, serve para declarar métodos abstratos, isto é, métodos que deverão ser
implementados nas subclasses. O segundo, indica que o método não pode ser alterado no
decorrer do processamento (constante).
Página 32 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
Os métodos construtores são métodos especiais executados no momento da criação de um
objeto. Não possuindo valor de retorno, representam uma oportunidade de inicializar dados
de forma organizada e sempre têm o nome da classe à qual pertencem. Paralelamente, os
métodos destrutores têm o objetivo de �destruir� o objeto e devolver ao sistema a memória
alocada.
Relativamente à questão, o item a) apresenta uma afirmação contrária à teoria, já que os
métodos abstratos devem ser definidos nas classes derivadas através de herança. O item c)
busca confundir o candidato ao associar os termos destrutores e finalizadores ao modificador
final, insinuando que este último tenha a função de finalizar (destruir) a instância de uma
classe. O item d) expõe uma teoria parcialmente correta sobre construtores, exceto pelo fato
de afirmar que tais métodos possuem valor de retorno. O item e) inverte as definições de
método de classe e método de instância, afirmando que o primeiro possui o comportamento
do segundo. O item b) faz uma afirmativa que está de acordo com a teoria exposta, haja
vista que os métodos estáticos não acessam atributos de instâncias (objetos) da classe, mas
sim atributos da classe, sendo a resposta para a questão.
Página 33 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
14. Assuntos relacionados: Programação, Orientação a Objeto, Encapsulamento, Herança,
Polimorfismo, Abstração,
Banca: ESAF
Instituição: Controladoria-Geral da União (CGU)
Cargo: Analista de Finanças e Controle - Tecnologia da Informação / Desenvolvimento de
Sistemas de Informação
Ano: 2008
Questão: 22
A programação orientada a objetos é baseada em diversos conceitos, tais como encapsula-
mento, herança, polimorfismo e abstração. Com relação a esses conceitos, é correto afirmar
que
(a). o conceito de encapsulamento é alcançado por meio da definição da visibilidade
pública aos atributos e métodos.
(b). herança é um mecanismo que permite que uma classe herde todo o comportamento
e os atributos de outra classe. Em Java, pode-se implementar tanto a herança
única quanto a herança múltipla.
(c). interface pode ser considerada como a forma com que um objeto se apresenta para
outros, no que diz respeito aos seus atributos e métodos. Em Java, uma mesma
classe não pode implementar mais de uma interface.
(d). polimorfismo é o uso de um mesmo nome para identificar diferentes implemen-
tações dos métodos. Seu uso é comum na definição de construtores, em que os
mesmos podem ser implementados em diferentes versõespara as diferentes formas
de se instanciar a classe.
(e). para uma classe ser considerada abstrata, todos os seus métodos devem ser abs-
tratos. Em Java, para se definir uma classe abstrata deve-se utilizar a palavra
chave �abstract� no início de sua declaração.
Solução:
(A) INCORRETA
O encapsulamento permite esconder os detalhes funcionais de uma classe a objetos que
podem enviar mensagens para ela. E, em linguagens de programação, pode significar duas
coisas distintas:
• Um mecanismo de uma linguagem de programação para restrição de acesso aos com-
ponentes de um objeto;
• Uma construção da linguagem que facilita o agrupamento de dados com métodos que
operam naqueles dados.
Como forma de restrição de acesso, seu propósito é o de manter a integridade de um objeto
pela prevenção de que usuários possam alterar seu estado interno, pois existe a possibilidade
dessa modificação levar o objeto a um estado inválido.
No contexto da linguagem Java, há três palavras-chave explícitas para implementação da
restrição de acesso (os especificadores de acesso): public, private e protected.
Quando a visibilidade pública (public) é definida para algum elemento, isso significa que
Página 34 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
qualquer outro objeto de outra classe é capaz de acessar esse elemento. Já quando a palavra-
chave private é usada, é definido que apenas o implementador da classe (e a própria classe)
possui acesso aos membros privados. Qualquer cliente que tentar acessar um membro pri-
vado receberá um erro de compilação. A palavra-chave protected, por sua vez, funciona
de maneira semelhante à private, exceto que qualquer classe que herde da classe original
também terá acesso aos membros protegidos.
Portanto, apesar da definição da visibilidade de membros de uma classe fazer parte da
implementação do encapsulamento, o uso de apenas a visibilidade pública não garante en-
capsulamento.
(B) INCORRETA
É verdade que a herança permite que uma classe herde o comportamento e os atributos
de outra classe. No entanto, não é verdade que com ela é possível herdar todos os com-
portamentos e atributos, pois, como discutido na alternativa anterior, a visibilidade privada
impede que subclasses herdem quaisquer características por ela afetadas. Outra informação
importante é que não existe forma direta de implementar herança múltipla em Java. Uma
forma de contornar essa restrição, no entanto, é através do uso de interfaces.
(C) INCORRETA
A parte inicial da alternativa, �interface pode ser considerada como a forma com que um
objeto se apresenta para outros, no que diz respeito aos seus atributos e métodos�, está
correta. Outras formas de compreender uma interface é como a especificação de um proto-
colo para comunicação entre classes ou como um contrato de comportamento entre as classes.
Em Java, quando uma interface é definida, a palavra-chave interface deve ser usada. Já
quando ela é implementada, a classe que a implementa deve usar a palavra-chave imple-
ments. Como uma interface não possui implementação, apenas especificação, não há nada
que impeça a combinação de interfaces. Isso, aliás, permite dizer �uma coisa x é um a, um b
e um c�, através da implementação de diversas interfaces. Como no exemplo abaixo (retirado
do capítulo 8 do livro Thinking in Java, revisão 4.0):
interface CanFight {
void fight();
}
interface CanSwim {
void swim();
}
interface CanFly {
void fly();
}
class ActionCharacter {
public void fight() {}
}
Página 35 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
class Hero extends ActionCharacter
implements CanFight, CanSwim, CanFly {
public void swim() {}
public void fly() {}
}
public class Adventure {
public static void t(CanFight x) { x.fight(); }
public static void u(CanSwim x) { x.swim(); }
public static void v(CanFly x) { x.fly(); }
public static void w(ActionCharacter x) { x.fight(); }
public static void main(String[] args) {
Hero h = new Hero();
t(h); // O trata como CanFight
u(h); // O trata como CanSwim
v(h); // O trata como CanFly
w(h); // O trata como ActionCharacter
}
}
(D) CORRETA
A definição está correta. Uma vantagem do polimorfismo é que ele permite outra forma
de separação entre interface e implementação. Pois desacopla o que do como.
(E) INCORRETA
Em Java, para uma classe ser considerada abstrata é necessário que um ou mais méto-
dos dessa classe seja definido como abstract. Além disso, é necessário que a própria classe
seja definida como abstract, pois em caso contrário o compilador não a compilará.
Ainda em classes abstratas, quando uma subclasse de uma classe abstrata é definida, se
não houver definição dos métodos abstratos da classe pai, a subclasse também será conside-
rada abstrata e, portanto, não poderá ser instanciada.
Página 36 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
15. Assuntos relacionados: Orientação a Objeto, Atributos e Classes,
Banca: ESAF
Instituição: Receita Federal (RF)
Cargo: Técnico da Receita Federal - Tecnologia da Informação
Ano: 2006
Questão: 24
Analise as seguintes afirmações relacionadas à Programação Orientada a Objetos:
I. Em um Programa Orientado a Objetos as instâncias de uma classe armazenam tipos
diferentes de informações e apresentam comportamentos distintos.
II. Em uma Aplicação Orientada a Objetos podem existir múltiplas instâncias de uma
mesma classe.
III. Em Programação Orientada a Objetos deve existir um e somente um objeto de uma
mesma classe.
IV. Os serviços que podem ser solicitados a um objeto são definidos pelos métodos.
Indique a opção que contenha todas as afirmações verdadeiras.
(a). II e IV
(b). II e III
(c). III e IV
(d). I e III
(e). I e II
Solução:
Para responder essa questão, examinaremos cada uma das afirmações, concluindo se são
verdadeiras ou faltas para, então, apresentar a alternativa correta.
Como conceitos como classe e objeto são discutidos nessa questão, convém defini-los. �Uma
classe é uma 'planta' de um objeto. Quando um objeto é instanciado, uma classe é usada
como base descritiva do objeto a ser construído.� As classes podem ser compreendidas como
modelos para objetos e, portanto, uma classe é usada para criar um ou mais objetos. Essa
planta descreve o estado e comportamento que todos os objetos da classe compartilham.
Fonte: The object-oriented thought process, Matt A. Weisfeld
Um objeto é uma instância específica de uma classe. Por exemplo, uma bicicleta especí-
fica é um objeto. No entanto, foi necessário usar uma �planta� para construí-la: uma classe.
A Figura 2 abaixo exemplifica o relacionamento entre classes e objetos, em que um modelo
de biscoito (classe) é usado para cortar uma massa e gerar biscoitos (objetos).
Página 37 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
Figura 2: exemplo de relacionamento entre classes e objetos.
Afirmação I
Sendo uma classe uma planta ou modelo a ser seguido, é natural que objetos de uma mesma
classe possuam características semelhantes e, portanto, essa afirmativa é incorreta. Como
exemplo, considere o seguinte código Python que define a classe �Person�:
class Person:
def __init__(self, name, address):
self.name = name
self.address = address
def __repr__(self):
return "Hi, I am %s and live at %s." % (self.name, self.address)
Ao instanciar dois objetos, por exemplo, yakko e root com o código:
yakko = Person("Yakko", "WB Tower")
root = Person("Charlie Root", "UNIX")
Vemos que eles exibem comportamento semelhanteao solicitarmos que seja impressa sua
representação:
>>> print yakko
Hi, I am Yacko and live at WB Tower.
>>> print root
Hi, I am Charlie Root and live at UNIX.
Além disso, ao listarmos o conteúdo desses objetos, vemos que eles possuem os mesmos
atributos:
Página 38 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
>>> print dir(yakko)
['__doc__', '__init__', '__module__', '__repr__', 'address', 'name']
>>> print dir(root)
['__doc__', '__init__', '__module__', '__repr__', 'address', 'name']
Confirmando que essa afirmação é incorreta.
Afirmação II
Como exemplificado na discussão da afirmação anterior e na introdução desta questão, vi-
mos que uma mesma classe, �Person�, possuía duas instâncias, �yakko� e �root�, confirmando
que é possível haver múltiplas instâncias de uma mesma classe. Portanto, essa afirmação é
verdadeira.
Afirmação III
Essa afirmação diz o oposto da anterior (II). Como a afirmação II está correta, esta está,
consequentemente, incorreta.
Afirmação IV
Em orientação a objetos, um método é uma função associada a uma classe ou a um ob-
jeto. Em Java, os métodos são criados como parte de uma classe e podem ser chamados
somente por objetos e o objeto deve ser capaz de realizar a chamada ao método. Os métodos
determinam as mensagens que um objeto pode receber, ou os serviços providos pelo objeto.
[1] Pela descrição anterior, vemos que essa afirmativa está correta.
[1] Thinking in Java, Bruce Eckel.
Discussão
Como vimos, as afirmações II e IV estão corretas e, portanto, a alternativa a é a que
responde corretamente a esta questão. Um breve comentário adicional é que, ao perceber
que a afirmativa II está correta e a III é seu oposto, é possível concluir que a alternativa a é a
que responde corretamente, mesmo sem saber se a afirmação IV está correta. É importante
sempre ficar atento a esse tipo de situação para explorá-la sempre que possível.
Página 39 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
16. Assuntos relacionados: Programação, Orientação a Objeto,
Banca: ESAF
Instituição: Receita Federal (RF)
Cargo: Técnico da Receita Federal - Tecnologia da Informação
Ano: 2006
Questão: 25
Na Programação Orientada a Objetos podem-se definir as visibilidades dos métodos e atri-
butos. Quanto a essa característica é correto afirmar que
(a). o acesso aos atributos e aos métodos privados só pode ser feito a partir dos métodos
membros da classe.
(b). os métodos protegidos podem ser acessados a partir dos métodos de qualquer
classe, desde que instanciada na mesma aplicação.
(c). os métodos públicos e os atributos protegidos só podem ser acessados a partir dos
métodos da própria classe ou de classes derivadas.
(d). os métodos privados e os atributos protegidos podem ser acessados a partir dos
métodos de qualquer classe.
(e). o acesso aos atributos privados e aos métodos públicos só pode ser feito a partir
dos métodos membros da classe.
Solução:
Na orientação a objetos, existe o conceito de abstração, que é a habilidade de extrair somente
o que é necessário em um contexto específico. Isso simplifica a programação, pois diminui
a complexidade. Mesmo assim, quando um programa cresce demais, alguns problemas co-
meçam a surgir, principalmente, em relação à clareza e à manutenção que deve ser dada ao
código.
O conceito de encapsulamento está diretamente ligado com o conceito de abstração. Num
dado objeto, somente interessa ao cliente, as funções que ele executa e não a implementação.
A interface descreve as operações que o objeto pode executar e define o que é acessível aos
outros objetos. Já outras informações, como a implementação, fica encapsulada e só é visível
ao próprio objeto.
A visibilidade de métodos ou atributos é utilizada na definição da interface e especifica
a maneira pela qual os atributos e os métodos da classe podem ser acessados. Na linguagem
de programação mais famosa da atualidade, Java, os atributos ou métodos podem ser públi-
cos, privados ou protegidos. Os modificadores de acesso implementam a visibilidade no Java.
Os atributos públicos (public), além de poderem ser acessados pelos métodos da própria
classe, os atributos públicos podem ser acessados por métodos de outras classes. Os atribu-
tos são uma má prática em orientação a objetos, pois violam o conceito de encapsulamento.
Só devem ser utilizados em casos excepcionais.
Os atributos privados (private) só podem ser acessados por métodos da classe. É uma
boa prática que a maioria dos atributos seja privada.
Os atributos protegidos (protected) podem ser acessados por métodos da classe em
que foram declarados e, além disso, em subclasses desta classe e, ainda, em classes que
Página 40 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
fazem parte do mesmo pacote (package) da classe onde houve a declaração do atributo pro-
tegido.
Os métodos públicos podem ser chamados de qualquer classe. Os métodos públicos são
aqueles que realmente definem a interface da classe para que ela possa ser acessada por
outros objetos.
Os métodos privados só podem ser acessados a partir de métodos declarados na classe e
são úteis quando é necessário definir trechos de código que precisam ser executados a partir
de mais de um método da classe, sem que seja necessário fornecê-los para outras classes.
Os métodos protegidos podem ser invocados por métodos de classe que façam parte
do pacote (package). Os pacotes são uma forma de organizar diversas classes em grupos
menores dentro do projeto.
Dados esses conceitos básicos, vamos analisar as alternativas da questão.
a) CORRETA. Tanto atributos quanto métodos privados só podem ser acessados por
métodos membros da própria classe em que foram declarados.
b) ERRADA. Somente métodos pertencentes ao mesmo pacote podem acessar os méto-
dos protegidos, não importando se forem instanciados na mesma aplicação ou não.
c) ERRADA. Pois os métodos públicos podem ser acessados a partir do método de
qualquer classe. Soma-se a esse erro, o fato dos atributos protegidos também poderem
ser acessados por métodos que façam parte do mesmo pacote, mas não somente na
classe, e nas suas derivadas, em que forem declarados.
d) ERRADA. Somente métodos e atributos públicos podem ser acessados a partir de
métodos de qualquer classe.
e) ERRADA. Os métodos públicos podem ser acessados a partir dos métodos de qualquer
classe, essa é a falha da alternativa.
A alternativa a ser marcada é a alternativa (A).
Página 41 de 50
www.handbookdeti.com.br
Handbook de Questões de TI Comentadas para Concursos Volume questões de TI
17. Assuntos relacionados: Orientação a Objeto, Polimorfismo,
Banca: ESAF
Instituição: Superintendência de Seguros Privados (SUSEP)
Cargo: Analista Técnico da SUSEP - Tecnologia da Informação
Ano: 2010
Questão: 23
Polimorfismo é a
(a). utilização múltipla de programas em análise orientada a objetos.
(b). habilidade de uma única operação ou nome de atributo ser definido em mais de
uma classe e assumir diferentes implementações em cada uma dessas classes.
(c). habilidade de um programador em desenvolver aplicações e caracterizar objetos
com múltiplos atributos.
(d). utilização de uma classe com diferentes formatos em programas com definição de
objetos e atributos.
(e). habilidade de uma única variável ser utilizada em diferentes programas orientados
a objetos.
Solução:
O paradigma de Programação Orientada a Objeto (POO) surgiu no início da década de
1970, com o advento da linguagem de programação Simula-68, e foi popularizado pela lin-
guagem SmallTalk, desenvolvida nos laboratórios da Xerox.

Continue navegando