Post on 04-Nov-2020
Aula 00
Curso: Informática – Teoria e Questões
comentadas p/ TRF
Professor: Gustavo Cavalcante Aula 00 – Aula Demonstrativa
Curso: Tecnologia da Informação
Professor: Yuri do Carmo
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 2 de 109
www.exponencialconcursos.com.br
Olá, futuros Servidores do TRF 4º Região.
É com grande satisfação que inicio mais este trabalho aqui na equipe do
Exponencial Concursos.
Meu nome é Yuri do Carmo e sou servidor do Tribunal de Contas do
Estado do Ceará (TCE-CE), atuando como Técnico de Controle Externo
(Tecnologia da Informação), mas já estou aguardando a nomeação para o
cargo de Auditor Fiscal da Receita Estadual – Tecnologia da Informação
da SEFAZ-SC, no qual tive a felicidade de ser aprovado em 1º lugar!
Antes de iniciarmos a aula, gostaria de contar um pouco da minha
trajetória.
Sou de Itapipoca, no interior do Ceará, onde fiz meu ensino
fundamental. Em 2006, vim morar em Fortaleza, capital do Ceará, para fazer
meu ensino médio no Instituto Federal do Ceará (IFCE), onde também concluí
meu curso de Técnico em Informática. Em 2010, iniciei minha graduação em
Ciência da Computação na Universidade Federal do Ceará (UFC), a qual eu
concluí em 2014.
Iniciei minha trajetória no mundo dos concursos em 2013, quando
prestei a prova para o cargo de Técnico em TI da Universidade Federal do
Ceará. Apesar de ser minha primeira prova, dediquei-me bastante aos
estudos e consegui ser aprovado em 1º lugar. Assumi lá em 2014 e fiquei
aproximadamente um 1 ano e meio no cargo.
Continuei estudando para cargos de nível superior e, em 2014, fiz as
provas para o Cargo de Analista de Tecnologia da Informação da EBSERH e da
DATAPREV, sendo aprovado em ambos em 2º lugar. Assumi na DATAPREV em
2015 e fiquei 10 meses lá.
Em 2015, fiz provas para o Tribunal de Contas do Estado do Ceará
(TCE-CE), para os cargos de Técnico de Controle Externo (Auditoria de TI) e
Analista de Controle Externo (Auditoria de TI). Fiquei em 1º lugar no cargo de
Técnico e exerço-o até o momento. Fiquei em 4º no cargo de Analista, mas
infelizmente só convocaram até a 3º posição.
Em 2017 e 2018 também prestei várias provas para cargos de TI, as
quais listo abaixo com a respectiva colocação:
TRT 7º região (5º lugar)
TRF 5º região (1º lugar)
STM (4º lugar)
TST (1º lugar)
CLDF (1º lugar)
SEF/SC (1º lugar)
APRESENTAÇÃO
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 3 de 109
www.exponencialconcursos.com.br
Aguardo a nomeação para CLDF e SEF/SC. Desde essas aprovações,
resolvi aposentar a caneta das provas de concurso e iniciei um novo projeto:
ajudar você a conseguir aprovações! Por meio de aulas como essa, no
Exponencial Concursos, e nos serviços de coaching para concursos que
ofereço, quero ajudar você a conquistar seus sonhos de aprovação!
Agora que vocês já me conhecem, temos a missão de oferecer para
vocês este curso. Seguindo a didática do Exponencial Concursos, estudaremos
os principais pontos da teoria, sempre tentando trazer o conteúdo de forma
esquematizada para que você ganhe tempo na sua preparação para
aprovação.
Contem comigo nessa jornada! Estarei à disposição no Fórum tira-
dúvidas e por meio dos contatos disponíveis no perfil do professor
http://bit.ly/profyuridocarmo.
Para dicas sobre concursos, acesse:
Exponencial Concursos
https://www.youtube.com/channel/UCr9rg5WOPmXvZgOfBl-HEuw
@exponencial_concursos
https://www.instagram.com/exponencial_concursos/?hl=pt-br
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 4 de 109
www.exponencialconcursos.com.br
No quadro abaixo segue o programa do nosso curso.
Aula Conteúdo
00 Orientação a objetos: classe, herança, polimorfismo,
objeto. Modelagem orientada a objetos.
01 Conceitos de Web Services, SOAP/REST.
02 Conceitos de Web Services, SOAP/REST.
03 HTML5
04 CSS
05 Javascript, JSON
06 jQuery, Angular
07 Python
08 PHP
09 XML: conceitos, definição, utilização, escrita: criação e declaração, definição de elementos e atributos, XML schema
10 Conceitos sobre desenvolvimento Web e mobile.
*Confira o cronograma de liberação das aulas no site do Exponencial,
na página do curso.
Caros alunos, iremos focar as questões comentadas na banca FCC, já
que ela foi a última a realizar esse certame, mas também usaremos outras
bancas para complementar o estudo, se necessário.
Vamos buscar esses pontos rumo à aprovação!
Bons estudos!
Professor Yuri do Carmo
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 5 de 109
www.exponencialconcursos.com.br
ASSUNTOS PÁGINA
1. INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) .......... 7
1.1 Classe e Objeto ............................................................................ 10
1.2 Atributos e Métodos ...................................................................... 13
1.3 Mensagens .................................................................................. 17
2. PILARES DA POO .......................................................................... 19
2.1 Abstração .................................................................................... 19
2.2 Encapsulamento ........................................................................... 21
2.3 Herança ...................................................................................... 23
2.4 Polimorfismo ................................................................................ 27
2.5 Resumo dos Pilares da POO ........................................................... 31
3. DEMAIS CONCEITOS DE POO ......................................................... 33
3.1 Modificadores de Acesso ................................................................ 33
3.2 Sobrecarga e Sobrescrita .............................................................. 35
3.3 Classe Abstrata ............................................................................ 38
3.4 Coesão e Acoplamento .................................................................. 41
3.5 Interface ..................................................................................... 44
4. QUESTÕES COMENTADAS ............................................................. 48
5. RISCO EXPONENCIAL .................................................................... 80
6. LISTAS DE EXERCÍCIOS ................................................................ 88
7. GABARITO ..................................................................................109
8. REFERÊNCIAS .............................................................................109
Aula – Programação Orientada a Objetos (POO).
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 6 de 109
www.exponencialconcursos.com.br
Para facilitar sua referência, abaixo listamos as esquematizações desta aula:
Esquema 1 – Diferença entre Programação Estruturada e Programação Orientada a Objetos .... 7 Esquema 2 - Introdução à POO ......................................................................................... 9 Esquema 4 - Diferença entre classe e objeto ..................................................................... 12 Esquema 5 - Atributos e métodos .................................................................................... 14 Esquema 6 - Mensagem .................................................................................................. 17 Esquema 7 - Tipos de Polimorfismo .................................................................................. 29 Esquema 8 - Pilares da POO ............................................................................................ 31 Esquema 9 - Tabela dos modificadores e níveis de acesso ................................................... 34 Esquema 10 - Diferença entre sobrecarga e sobrescrita ...................................................... 36 Esquema 11 - Classe Abstrata ......................................................................................... 39 Esquema 12 - Coesão e Acoplamento ............................................................................... 42 Esquema 13 - Interface .................................................................................................. 46
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 7 de 109
www.exponencialconcursos.com.br
1. INTRODUÇÃO À PROGRAMAÇÃO ORIENTADA A OBJETOS (POO)
A Programação Orientada a Objetos (POO) é uma maneira de
programar que ajuda na organização do código-fonte e resolve muitos
problemas enfrentados pela programação procedural. Um problema da
programação procedural é que não existe uma forma simples de criar conexão
forte entre dados e funcionalidades. Na POO é muito fácil ter essa conexão por
meio dos recursos da própria linguagem. POO ajuda na organização e diminui
a quantidade de linhas de código, além de concentrar as responsabilidades
nos pontos certos, flexibilizando a aplicação, encapsulando a lógica de
negócios.
A POO é um paradigma1 de programação baseado no conceito de
objetos, os quais contêm campos de dados (atributos) e procedimentos
(métodos). Os procedimentos de um objeto acessam e modificam os campos
de dados do objeto ao qual estão associados. Na POO, os programas de
computador são projetados como um conjunto de objetos que interagem
uns com os outros.
As principais linguagens que suportam programação orientada a objetos
(em maior ou menor grau) incluem Java, C++, C#, Python, PHP, JavaScript,
Ruby, Perl, Object Pascal, Objective-C, Swift, Scala, Common Lisp e Smalltalk.
É essencial entender que POO não é apenas classes e objetos. É todo
um paradigma de programação baseado em objetos (estruturas de dados) que
contêm campos de dados e métodos. Usar classes para organizar vários
métodos não relacionados não é orientação a objetos.
A POO aproxima o mundo computacional do mundo real, uma vez
que propõe a abstração e modelagem de objetos do mundo real no mundo
computacional por meio de modelos (ou classes), ao contrário da programação
estruturada, na qual os algoritmos são mais complexos e compreendidos
somente por programadores.
1 Um paradigma de programação fornece e determina a visão que o programador possui sobre a
estruturação e execução do programa. Exemplos: paradigma orientado a objetos, procedural, funcional, imperativo e declarativo.
Programação OO
Objeto
Atributos
(dados)
Métodos
(funções)
Programação
Estruturada
Dados Funções
Esquema 1 – Diferença entre Programação Estruturada e Programação Orientada a Objetos
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 8 de 109
www.exponencialconcursos.com.br
De certa forma, um programa orientado a objetos representa uma
simulação viva do problema que está se tentando resolver. Esse
paradigma exige que o desenvolvedor tenha uma visão global do problema em
nível conceitual, permitindo o uso de substantivos, adjetivos e verbos do
domínio do seu problema.
O uso da POO pode levar a uma série de vantagens, dentre as quais:
Reusabilidade: os conceitos trazidos pela POO aumentam o
reuso de código, o que pode aumentar na velocidade de
produção dos sistemas;
Manutenibilidade: pequenas mudanças nos requisitos não
implicam em alterações massivas no sistema em
desenvolvimento;
Extensibilidade: permite facilmente expandir classes
existentes para incorporar requisitos específicos de uma
nova aplicação a ser desenvolvida, assim como permite incluir
novos tipos de objetos nas aplicações, com um mínimo de
mudanças e possibilidade de erros pelo código;
Programação natural: os objetos refletem o mundo real de
maneira mais aproximada, descrevem de maneira mais precisa
os dados. A decomposição é baseada em um particionamento
natural, e os objetos são mais fáceis de entender;
Confiabilidade: devido a facilidade do reuso de códigos já
testados e a fácil compreensão da linguagem pelo desenvolvedor
durante a manutenção, uma vez que a programação é mais
natural, os sistemas OO são mais seguros e confiáveis.
Na POO a modelagem de dados é a parte mais importante do projeto
por meio de classes que representam entidades do mundo real. As classes
(ou modelos) geram objetos que se comunicam com outros objetos
por meio de mensagens. Temos vários mecanismos na POO para facilitar o
reaproveitamento de código como herança, polimorfismo e encapsulamento,
os quais trataremos com mais detalhes nas seções seguintes.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 9 de 109
www.exponencialconcursos.com.br
Programação Orientada a
Objetos (POO)
Resolve probelmas do paradigma de programação procedural
Objetos contêm dados
(atributos) e procedimentos
(métodos)
Programa é um conjunto de objetos
que interagem entre si
Aproxima o mundo
computacional do mundo real
Vantagens: reusabilidade,
manutenibilidade, extensibilidade,
programação natural e
confiabilidade
Esquema 2 - Introdução à POO
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 10 de 109
www.exponencialconcursos.com.br
1.1 Classe e Objeto
A dificuldade inicial do paradigma da orientação a objetos é saber
distinguir o que é classe e o que é objeto. É comum o iniciante utilizar, de
forma errada, essas duas palavras como sinônimas. Porém, veremos
claramente a diferença entre esses dois importantes conceitos.
Para ajudar na compreensão dos conceitos que veremos nessa e nas
próximas seções, utilizaremos o exemplo de um sistema de vendas de cursos
para concursos públicos, como, por exemplo, o sistema do Exponencial
Concursos. Nesse sistema, conceitos como Curso, Professor, Aluno, Simulado,
Concurso, Pagamento, Fórum, Questão, etc. são entidades de interesse na
modelagem desse sistema. Para a representação gráfica dos conceitos,
utilizaremos a linguagem UML na aula. Em alguns momentos apresentarei
trechos de código em Java, já que é uma linguagem conhecida pela maioria
dos desenvolvedores.
Nesse sistema, podemos dizer que todo Aluno tem um nome, uma data
de nascimento e um estado civil. Porém, são nas instâncias de Aluno que
realmente há espaço para armazenar esses valores.
Ao projeto ou molde de Aluno, isto é, à definição de Aluno,
damos o nome de classe. Ao que podemos construir a partir desse
projeto ou molde, os alunos de verdade, damos o nome de objetos.
Podemos também fazer a seguinte analogia: a planta/projeto de uma casa é
uma casa? Definitivamente não. Não podemos morar dentro da planta de uma
casa, nem podemos abrir sua porta ou pintar suas paredes. Precisamos, antes,
construir instâncias a partir dessa planta. Nessas instâncias que podemos
pintar, decorar ou mora. Assim, a planta da casa seria o equivalente à classe
e as casas construídas a partir dessa planta seriam os objetos.
Informalmente, um objeto representa uma entidade, tanto física
quanto conceitual ou de software. No nosso sistema de venda de cursos,
exemplos de entidade física seriam: Professor e Aluno. Exemplos de entidade
conceitual: Matrícula e Carrinho de Compras. Exemplos de entidade de
software: Lista Encadeada e Arquivo. Podemos afirmar que um objeto é um
conceito, abstração, ou entidade com limites bem definidos e um
significado para a aplicação. Na prática, um objeto é uma representação na
memória do computador de qualquer entidade/conceito do mundo real.
Formalmente, um objeto é algo que possui uma identidade única,
um estado e comportamento. Uma identidade única é a propriedade de
um objeto que o distingue de outros objetos. Identidade não é o nome do
objeto, nem o endereço de memória onde ele está armazenado, é um
conceito de linguagens de programação que não é visível para os
desenvolvedores. O estado normalmente é implementado por meio de seu
conjunto de propriedades (denominados atributos), com os valores das
propriedades, mais as ligações que o objeto pode ter com outros objetos. Em
suma, estado é o conjunto de valores dos atributos do objeto em
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 11 de 109
www.exponencialconcursos.com.br
determinado instante. Comportamento define como um objeto reage às
requisições de outros objetos, em termos de mudanças de estados e
passagem de mensagens.
A classe é a descrição de um grupo de objetos com propriedades
similares (atributos), comportamento comum (operações), relacionamentos
com outros objetos e semânticas idênticas. Todo objeto é instância de uma
classe. Enquanto um objeto individual é uma entidade concreta que executa
algum papel no sistema, uma classe captura a estrutura e
comportamento comum a todos os objetos que estão relacionados.
Uma classe define a estrutura e o comportamento de qualquer objeto
da classe, atuando como um padrão para a construção de objetos. Objetos
podem ser agrupados em classes. A definição da classe consiste na definição
dos atributos e operações dos objetos desta classe.
EXEMPLO
A classe ―Professor‖ define a estrutura (atributos e métodos) comum a
todos os professores. Um possível objeto instância dessa classe seria o
professor ―Yuri do Carmo‖ com seus valores para cada atributo e identidade
única.
Objetos são criados chamando um tipo especial de método na
classe conhecida como construtor. Um programa pode criar muitas
instâncias da mesma classe que é executada, as quais operam de forma
independente. Essa é uma maneira fácil de usar as mesmas operações em
diferentes conjuntos de dados.
Relacionado ao conceito de classe, há o conceito de metaclasse, que é
uma classe cujas instâncias também são classes e não objetos no
sentido tradicional. Assim como classes definem o comportamento de certos
objetos, metaclasses definem o comportamento de certas classes e suas
instâncias. Nem toda linguagem orientada a objeto suporta metaclasses.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 12 de 109
www.exponencialconcursos.com.br
1- (CESPE - 2017 - SEDF - Professor de Educação
Básica - Informática) A respeito das características da programação
orientada a objetos, julgue o item subsequente.
Um objeto define atributos, comportamentos e abstrações comuns
compartilhados por um tipo de classe.
Resolução:
A Cespe inverteu os conceitos de classe e objeto. O correto seria: Um objeto
Uma classe define atributos, comportamentos e abstrações comuns
compartilhados por um tipo de classe objeto.
Gabarito: Errado.
Classe
•Agrupamento de atributos e métodos comuns a um conjunto de objetos
•Descrição de um grupo de objetos com atributos e comportamentos similares
•Padrão/molde/modelo para a construção dos objetos
Objeto
•Possui identidade única, estado (conjunto de valores dos atributos) e comportamento
•É uma instância de uma classe
•Interagem entre si pela troca de mensagens (chamadas de métodos)
Esquema 3 - Diferença entre classe e objeto
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 13 de 109
www.exponencialconcursos.com.br
1.2 Atributos e Métodos
No mundo real, qualquer objeto possui características que o
definem. Na POO, essas características são nomeadas de atributos. Por
exemplo, os atributos de um objeto da classe ―Professor‖ poderiam ser
―Nome‖, ―Idade‖ e ―Disciplina‖ e possuir, respectivamente, os valores ―Yuri do
Carmo‖, 27 e ―Desenvolvimento de Software‖. Atributos também são
conhecidos como campos, membros, variáveis ou propriedades. Um
atributo é uma característica de uma classe. Atributos não apresentam
comportamento, eles definem a estrutura da classe.
No mundo real, os objetos também possuem ações que eles podem
executar. Na POO, essas ações, ou eventos, são chamados de métodos.
Por exemplo, os métodos de um objeto da classe ―Professor‖ poderiam ser
―ofertar curso‖, ―responder dúvida‖ e ―disponibilizar aula‖. Métodos também
são conhecidos como procedimentos, operações ou funções. Métodos
caracterizam o comportamento de um objeto e devem ser o único meio de
acessar, manipular e modificar os atributos de um objeto.
Os atributos possuem a seguinte classificação: atributos de classe
e atributos de instância. Os primeiros pertencem à classe como um todo;
existe apenas uma cópia de cada um desses atributos para todos os objetos
da classe. Já os atributos de instância são dados que pertencem a objetos
individuais; cada objeto tem sua própria cópia de cada um desses atributos
de instância. Por exemplo, o atributo ―nome‖ da classe ―Professor‖ deve ser
um atributo de instância, uma vez que cada objeto dessa classe tem seu
próprio valor para o ―nome‖. Já o atributo ―quantidade de professores‖ pode
ser um atributo de classe, uma vez que não precisa existir uma cópia do valor
desse atributo para cada objeto, mas apenas um valor para a classe, ou seja,
a informação fica guardada pela classe, não é mais individual para cada
objeto.
Existe uma classificação semelhante para os métodos, a qual segue a
mesma lógica: métodos de classe e métodos de instância. Os primeiros
pertencem à classe como um todo e têm acesso somente aos atributos de
classe e às entradas (conhecidas como parâmetros) da chamada do método.
Já os métodos de instância pertencem a objetos individuais e têm acesso às
variáveis de instância para o objeto específico em que são chamadas, às
entradas (parâmetros) e aos atributos de classe.
Às vezes, para que um método possa executar sua ação corretamente,
ele precisa receber algum tipo de informação (entrada) de quem está
solicitando a execução desse método. Por exemplo, para que um objeto da
classe ―Professor‖ possa executar o método ―responder dúvida‖, ele precisa
receber como entrada uma ―pergunta‖. A essa entrada damos o nome de
parâmetro ou argumento. Um método pode ter nenhum, um, dois ou mais
parâmetros. Além disso, o método ―responder dúvida‖, ao finalizar sua
execução, deve devolver uma ―resposta‖. A essa devolução de informação
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 14 de 109
www.exponencialconcursos.com.br
damos o nome de valor de retorno, ou simplesmente retorno. Um método
pode ou não retornar alguma informação.
O conjunto formado pelo tipo de retorno do método, pelo nome
do método e pelos tipos e quantidades de parâmetros do método é
denominado assinatura do método. Especificamente em Java, o tipo de
retorno do método não faz parte da assinatura do método. Veremos que o
conceito de assinatura do método é importante para entendermos os
conceitos de polimorfismo, sobrecarga e sobreposição.
Atributos
• Características dos objetos que o definem
• Também conhecidos como campos, membros, variáveis ou propriedade
• Classificados em atributos de classe e atributos de instância
Métodos
• Ações ou eventos realizados pelos objetos
• Também conhecidos como procedimentos, operações ou funções
• Classificados em métodos de classe e métodos de instância
• Pode receber algum tipo de informação (entrada), chamada de parâmetro ou argumento
• Pode devolver alguma informação, chamada de (valor de) retorno
• Assinatura do método = tipo de retorno + nome + tipo/quantidade dos parâmetros
Esquema 4 - Atributos e métodos
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 15 de 109
www.exponencialconcursos.com.br
2- (FCC - 2014 - TRT - 16ª REGIÃO (MA) - Técnico
Judiciário - Tecnologia da Informação) Bianca está desenvolvendo um
software orientado a objetos para uma aplicação do TRT 16ª Região. Esta
aplicação atenderá a diversos usuários. Um Usuario será modelado como
...I..... , possuindo as seguintes características ou ..II..... :
- Nome
- Endereço
- Telefone
- CPF
Um usuário pode realizar ações. Cada usuário é identificado de forma única,
mas possuindo as mesmas características descritas acima. Assim, cada
usuário será ...III..... e poderá executar as seguintes ações ou ..IV.. :
- EnviarPedido
- LerRespostaPedido
- ConsultarAndamento
As lacunas I, II, III e IV são, correta e respectivamente, preenchidas por:
a) uma abstração - métodos - instanciado como um objeto que herda da
classe - interfaces.
b) um objeto - métodos - uma classe - enviar as mensagens.
c) uma classe - atributos - um objeto da classe Usuario - métodos.
d) uma classe - variáveis - um objeto que herda da classe Usuario - trocas de
mensagens.
e) um objeto - variáveis - instanciado - enviar as mensagens.
Resolução:
Primeiramente, vamos lembrar as principais diferenças entre classe/objeto e
atributo/método.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 16 de 109
www.exponencialconcursos.com.br
Com isso em mente, vamos analisar cada item:
Item I: a questão afirma que o Usuário será modelado com esse conceito, ou
seja, será um molde, o qual terá determinadas características. Pelas definições
vistas, vimos que trata-se de uma classe.
Item II: a questão afirma que esse item é sinônimo das características dos
Usuários. Assim, deduzimos que trata-se dos atributos da classe usuário.
Item III: a questão afirma que cada usuário é identificado de forma única.
Portanto, cada usuário será um objeto (uma instância) da classe Usuario.
Item IV: a questão afirma que cada (objeto) usuário poderá executar algumas
ações, as quais são conhecidas como métodos.
Gabarito: Letra C.
Atributos
• Características dos objetos que o definem
• Também conhecidos como campos, membros, variáveis ou propriedade
Métodos
• Ações ou eventos realizados pelos objetos
• Também conhecidos como procedimentos, operações ou funções
• Classificados em métodos de classe e métodos de instância
Classe
• Descrição de um grupo de objetos com atributos e comportamentos similares
• Padrão/molde/modelo para a construção dos objetos
Objeto
• Possui identidade única, estado (conjunto de valores dos atributos) e comportamento
• É uma instância de uma classe
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 17 de 109
www.exponencialconcursos.com.br
1.3 Mensagens
Em tempo de execução, um software orientado a objetos é um
conjunto de objetos se comunicando entre si. Essa comunicação se dá
por meio da chamada de métodos desses objetos. Uma chamada de método
também é conhecida como passagem de mensagem. O conjunto formado
pelo nome do método mais seus parâmetros de entrada sendo passados para
um objeto é conceituado como uma mensagem. Assim, um programa
orientado a objetos é composto por um conjunto de objetos que interagem
por meio de ―trocas de mensagens‖. Na prática, essa troca de mensagem
traduz-se na aplicação de métodos a objetos. No nosso sistema de exemplo,
um objeto da classe ―Aluno‖ pode enviar a mensagem ―responder dúvida‖
para um objeto da classe ―Professor‖ passando como parâmetro uma
―Pergunta‖.
Esquema 5 - Mensagem
Mensagem
Meio de comunicação dos objetos
em tempo de execução
Na prática, representa
uma chamada de
método
Objetos interagem
por meio da "troca de
mensagens"
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 18 de 109
www.exponencialconcursos.com.br
3- (CESPE - 2015 - MEC - Analista de Teste e
Qualidade) Com relação à orientação a objetos, julgue o item subsecutivo.
Objetos são definidos como entidades da modelagem de sistemas que
armazenam estados com a utilização de atributos dos próprios objetos, sem
interação com outros objetos por meio de mensagens.
Resolução:
A questão peca ao afirmar que não há ―interação com outros objetos por meio
de mensagens‖, já que na POO, os sistemas são projetados como um conjunto
de objetos que interagem uns com os outros, e essa interação/comunicação se
dá pela ―troca de mensagens‖. Na prática, essa troca de mensagem traduz-se
na chamada de métodos a objetos.
Gabarito: Errado.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 19 de 109
www.exponencialconcursos.com.br
2. PILARES DA POO
A POO possui um conjunto de pilares (princípios fundamentais,
conceitos básicos), os quais compõem a base da orientação a objetos. São
eles: abstração, encapsulamento, herança e polimorfismo. Veremos
cada um nas seções seguinte.
2.1 Abstração
A abstração, enquanto pilar da POO, consiste em trabalhar um objeto
dentro da programação se preocupando somente com suas principais
propriedades, sem se apegar a detalhes irrelevantes. Na POO, tentamos
aproximar o mundo virtual do real. Tendo isto em mente, podemos considerar
o objeto como uma representação de algo que realmente existe, como por
exemplo: um professor, um aluno, um curso. Devemos abstrair o objeto que
realmente existe (objeto real), e representá-lo computacionalmente. Como o
mundo real é bem mais complexo que o mundo virtual que iremos programar,
devemos abstrair, ou seja, desconsiderar características do objeto do
mundo real que não são importantes para o sistema que iremos
construir, de tal forma a nos concentrarmos especificamente no que é
importante para nosso sistema. Por exemplo, sabemos que os professores
do mundo real podem possuir um time de futebol para o qual eles torcem.
Porém, para nosso sistema de vendas de curso, essa informação é irrelevante,
assim devemos abstraí-la quando estivermos modelando a classe ―Professor‖
no nosso sistema.
Como estamos lidando com uma representação de um objeto real (o
que dá nome ao paradigma), temos que imaginar o que esse objeto irá
realizar dentro de nosso sistema. São três pontos que devem ser levados em
consideração na abstração: identidade, atributos e métodos. Todo
objeto do mundo real deve ser abstraído nesses três aspectos para
serem modelados numa linguagem OO.
Conseguir abstrair um item do mundo real e transformá-lo em uma
classe é um desafio para os que estão iniciando na POO. Porém, para
concursos públicos, você só precisa entender o conceito da abstração, então
não se preocupe caso você não consiga aplicá-lo ainda, isso virá com o tempo.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 20 de 109
www.exponencialconcursos.com.br
4- (FCC - 2013 - AL-RN - Analista Legislativo -
Analista de Sistemas) Em orientação a objetos, o processo ou resultado de
generalização por redução do conteúdo da informação de um conceito ou
fenômeno observável, normalmente para reter apenas a informação que é
relevante para um propósito particular é chamado de
a) agregação.
b) abstração.
c) polimorfismo.
d) encapsulamento.
e) modelagem lógica.
Resolução:
A questão trata do conceito de abstração, a qual, em outras palavras, consiste
em preocupar-se com as principais propriedades, desconsiderando
características que não são importantes. É pensar e modelar os objetos do
mundo real em termos de identidade, atributos e métodos.
Gabarito: Letra B.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 21 de 109
www.exponencialconcursos.com.br
2.2 Encapsulamento
Encapsulamento é o mecanismo das linguagens OO que permite
encapsular, isto é, esconder os atributos de uma classe, além de esconder
como funcionam as rotinas (no caso, métodos) do nosso sistema.
Encapsular é fundamental para que seu sistema seja suscetível a mudanças:
não precisaremos mudar uma regra de negócio em vários lugares, mas sim
em apenas um único lugar, se essa regra estiver encapsulada. Em outras
palavras, encapsulamento é esconder os detalhes da implementação de
um objeto. Ele permite que um objeto possua uma parte privada, acessível
somente por meio dos métodos definidos na sua interface pública. Não se
deve permitir acesso direto aos atributos de uma classe. O
encapsulamento traz como benefícios: o código cliente usa apenas a
interface pública para operar um objeto; a implementação do objeto pode
mudar (para corrigir erros, aumentar performance, etc.) sem que seja
necessário modificar o código do cliente; a manutenção é mais fácil e menos
custosa; o programa torna-se mais legível e bem estruturado.
Assim, notamos que o encapsulamento está relacionado com a
ocultação de informação, o que envolve impedir o acesso direto aos
atributos dos objetos e também esconder os detalhes de implementação
dos métodos. Porém, encapsulamento também é agrupar o estado de
objetos (as variáveis da classe) e seus comportamentos (os métodos
da classe) em conjuntos segundo o seu grau de relação. Assim, o
propósito do encapsulamento também é o de organizar os dados que sejam
relacionados, agrupando-os (encapsulando-os) em objetos (classes),
reduzindo as colisões de nomes de variáveis e, da mesma forma, reunindo
métodos relacionados às suas propriedades (ou variáveis de classe). Isso
ajuda a manter um programa com várias linhas de código mais legível e fácil
de trabalhar e manter.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 22 de 109
www.exponencialconcursos.com.br
5- (FCC - 2016 - Prefeitura de Teresina - PI -
Analista Tecnológico - Analista de Suporte Técnico) Na Orientação a
Objetos há um conceito bastante utilizado que é o encapsulamento, que
corresponde a
a) não suportar a divisão do programa em mais do que um arquivo físico.
b) limitar o número de classes de um programa orientado a objetos, conforme
o porte do sistema.
c) ocultar os detalhes da implementação dos métodos de uma determinada
classe de outras classes.
d) criptografar o código das classes que possuem a propriedade do
encapsulamento.
e) compactar o código fonte gerado, de forma a diminuir seu tamanho físico.
Resolução:
O conceito de encapsulamento é um dos mais importantes na POO e deve
estar bem entendido, pois várias questões basicamente pedem o seu
significado, como essa. Devemos saber que ele significa: esconder os atributos
e métodos da classe, ou seja, esconder os detalhes de implementação; não
permitir acesso direto aos atributos; e agrupar características e
comportamentos relacionados em objetos.
Gabarito: Letra C.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 23 de 109
www.exponencialconcursos.com.br
2.3 Herança
Prezados alunos, nessa e na próxima seção veremos os dois conceitos
de POO que mais são cobrados em concursos: herança e polimorfismo.
Eles estão intimamente relacionados, portanto atenção.
No nosso sistema de exemplo, temos as classes ―Professor‖ e ―Aluno‖.
Os professores guardam informações em comum com os alunos (por exemplo,
email e senha), mas também possuem outras informações, além de ter
funcionalidades um pouco diferentes. Se tivéssemos outro tipo de pessoa que
utilizasse nosso sistema, precisaríamos criar outra classe e copiar o código em
comum! Além disso, se um dia precisarmos adicionar uma nova informação
para todos os usuários do sistema, precisaremos passar por todas as classes
de usuário e adicionar esse atributo. O problema acontece por não
centralizarmos as informações principais dos usuários do sistema em um único
lugar! A POO oferece uma maneira de relacionarmos uma classe de tal
modo que uma delas herda tudo que a outra tem: a herança. Ela cria
uma relação de classe mãe e classe filha. No nosso caso, gostaríamos de
fazer com que o Professor e o Aluno tivessem tudo que um Usuario tem, ou
seja, gostaríamos que ela fosse uma extensão de Usuario. Assim, a classe
Usuario manteria os atributos (p. ex. email e senha) e métodos (p. ex. ―entrar
no sistema‖) comuns a todos os usuários do sistema. Assim, quando criarmos
um objeto do tipo Professor ou Aluno, este objeto possuirá também os
atributos e métodos definidos na classe Usuario, pois um Professor é um
Usuario e um Aluno é um Usuario, sem precisar duplicar código. Dizemos que
a classe Professor herda todos os atributos e métodos da classe mãe, no
nosso caso, a classe Usuario. Além de a classe filha herdar os atributos e
métodos da classe mãe (ou classe base), a classe filha ainda pode definir
novos métodos e atributos.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 24 de 109
www.exponencialconcursos.com.br
EXEMPLO
Representação gráfica do uso da herança (linguagem UML) das classes
Usuario, Professor e Aluno. Dessa forma, as instâncias (objetos) das classes
Professor e Aluno também possuirão os atributos e métodos da classe Usuario.
A nomenclatura mais encontrada é que Usuario é a superclasse
de Professor, e Professor é a subclasse de Usuario. Dizemos também
que todo Professor é um Usuario. Outra forma é dizer que Usuario é classe
mãe de Professor e Professor é classe filha de Funcionario. As subclasses
também são chamadas de classes derivadas.
A herança otimiza a produção da aplicação em tempo e linhas de
código, ou seja, aumenta a reusabilidade do código. Com ela é possível
criar uma hierarquia dessas classes, criando, assim, classes mais amplas e
classes mais específicas. Os conceitos de generalização/especialização
estão intimamente relacionados com a herança, uma vez que a superclasse
generaliza a subclasse e, por sua vez, a subclasse especializa a superclasse.
Existe uma classificação de tipos de herança bastante cobrada em
concursos: herança simples e herança múltipla. Quando uma classe herda
características somente de outra classe, dizemos que esta é uma herança
simples. Quando uma classe herda de duas ou mais classes, temos um caso
de herança múltipla. Em qualquer circunstância, o fato que você deverá
lembrar é o seguinte: a subclasse herda todos os atributos e métodos da(s)
superclasse(s).
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 25 de 109
www.exponencialconcursos.com.br
EXEMPLO
A classe VeiculoAnfibio, modelada abaixo em UML, é um exemplo de
Herança Múltipla, pois ela herda os atributos e métodos de mais de uma classe
diretamente, já que ela é um ViuculoTerrestre e é um VeiculoMaritmo.
6- (FCC - 2013 - MPE-MA - Analista Ministerial -
Análise e Desenvolvimento de Sistemas) Na orientação a objetos, a
herança permite definir uma classe como uma extensão de outra classe. As
vantagens de utilizar herança são muitas e algumas delas são apresentadas
abaixo. Assinale a alternativa INCORRETA em relação às vantagens do uso de
herança.
a) A herança é sempre a construção mais apropriada nos casos em que se
deseja reutilizar um código.
b) O uso de herança pode evitar a duplicação de código, pois deixa de ser
necessário escrever duas cópias idênticas ou muito semelhantes de um código
em comum.
c) A manutenção da aplicação fica mais fácil com o uso de herança, pois o
relacionamento entre as classes é claramente expresso. Uma alteração em um
método compartilhado entre diferentes tipos de subclasses pode ser feito
apenas uma vez.
d) Com a utilização de herança pode tornar-se mais fácil estender uma
aplicação existente.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 26 de 109
www.exponencialconcursos.com.br
e) Usando a herança, um código existente pode ser reutilizado. Se já existir
uma classe semelhante à que precisamos, às vezes é possível dividir a classe
existente e reutilizar o código em vez de implementar tudo novamente.
Resolução:
Repare que a questão pede para marcar a alternativa INCORRETA. A única
que traz uma inverdade é a letra (a). Vejamos:
a) a herança é sempre nem sempre é a construção mais apropriada nos
casos em que se deseja reutilizar um código.
A alternativa peca ao afirmar que sempre é melhor usar herança para se
reutilizar código. Porém, isso não é verdade. Como a herança traz um alto
grau de acoplamento entra as classes pai e filho, pode ser que ela não seja a
mais apropriada dependendo da aplicação. Além do mais, é importante haver
a relação ―é um‖ entre as duas classes, o que nem sempre ocorre quando
queremos reutilizar código.
Os demais itens trazem características e benefícios da herança. Reparem que
eles usam o verbo ―poder‖, transmitindo uma possibilidade, não uma verdade
absoluta. Já o item (a), ao utilizar a palavra ―sempre‖, traz uma verdade
absoluta, o que geralmente torna o item errado.
Gabarito: Letra A.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 27 de 109
www.exponencialconcursos.com.br
2.4 Polimorfismo
O termo polimorfismo é originário do grego e significa "muitas
formas" (poli = muitas, morphos = formas). Como se trata de um assunto
que está intimamente conectado à herança, entender os dois juntamente é a
melhor opção. Na POO, uma das características do polimorfismo é
permitir que referências de tipos de classes mais abstratas
(superclasses) representem o comportamento das classes concretas
(subclasses) que referenciam. Por exemplo, vimos que todo Professor é
um Usuario, pois é uma extensão de Usuario. Podemos nos referir a um
Professor como sendo um Usuario. Se alguém precisa falar com um Usuario do
sistema, pode falar com um Professor, já que todo Professor é um Usuario. O
polimorfismo é quem permite a um objeto poder ser referenciado de
várias formas. Mas cuidado, polimorfismo não quer dizer que o objeto
fica se transformando. Pelo contrário, um objeto nasce de um tipo e morre
daquele tipo, o que pode mudar é a maneira como nos referimos a ele.
Polimorfismo também é caracterizado quando duas ou mais
classes derivadas de uma mesma superclasse podem invocar métodos
que têm a mesma identificação (assinatura), mas comportamentos
distintos, especializados para cada classe derivada, usando para tanto uma
referência a um objeto do tipo da superclasse. A decisão sobre qual o
método que deve ser selecionado, de acordo com o tipo da classe derivada,
é tomada em tempo de execução, através do mecanismo de late biding
(ligação tardia). É necessário que os métodos tenham exatamente a
mesma identificação (assinatura), sendo utilizado o mecanismo de
redefinição (ou sobrescrita) de métodos. Esse mecanismo de redefinição não
deve ser confundido com o mecanismo de sobrecarga de métodos. Veremos
ambos adiante. Por meio da técnica do polimorfismo, é possível que criemos
estruturas suficientemente genéricas ao ponto de serem utilizadas em vários
contextos, tornando o código-fonte final mais enxuto, legível e manutenível.
A literatura classifica quatro tipos de polimorfismo, apesar de que
nem toda linguagem orientada a objeto implementa todos os tipos: Universal
(subdividido em Inclusão e Paramétrico) e Ad-Hoc (subdividido em
Coerção e Sobrecarga).
O polimorfismo Universal por Inclusão é o tipo que comentamos na
aula, ou seja, quando uma referencia para a classe mãe (superclasse)
pode apontar para instâncias de suas classes filha (subclasses), e as
subclasses fornecem diferentes implementações (por meio da
redefinição/sobrescrita de método) de algum método da superclasse.
É o tipo de polimorfismo mais básico que existe.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 28 de 109
www.exponencialconcursos.com.br
EXEMPLO
Abaixo temos um exemplo em código Java desse tipo de polimorfismo.
O método ―falar()‖ é polimórfico, já que há mais de uma classe que o
implementa de maneira diferente. Será executada a implementação a
depender do tipo da instância (objeto) que está sendo referenciado em tempo
de execução.
O polimorfismo Universal Paramétrico é chamado de Generics em
Java e C#, e templates em C++. Basicamente é uma função ou um tipo
de dado que pode ser escrito genericamente para que ele possa lidar
com valores de forma idêntica sem depender do seu tipo. Generics pode
ser feito tanto com estruturas como com classes.
O polimorfismo Ad-Hoc por Sobrecarga, também conhecido como
Overloading, ocorre quando dois ou mais métodos têm o mesmo nome,
mas quantidade e/ou tipos de parâmetros diferentes, ou seja, assinatura
diferentes. Assim, o método a ser executado, dentre os vários de mesmo
public class Usuario {
public void falar() {
System.out.println("Oi, sou um Usuário.");
}
}
//Professor herda de Usuario
public class Professor extends Usuario {
public void falar() {
System.out.println("Oi, sou um Professor.");
}
}
//Aluno herda de Usuario
public class Aluno extends Usuario {
public void falar() {
System.out.println("Oi, sou um Aluno.");
}
}
public class Teste {
public void fazerUsuarioFalar(Usuario usuario) {
usuario.falar();
}
public static void main( String[] args ) {
Teste t = new Teste();
t.fazerUsuarioFalar(new Usuario());
t.fazerUsuarioFalar(new Professor());
t.fazerUsuarioFalar(new Aluno());
}
}
Console:
Oi, sou um Usuário.
Oi, sou um Professor.
Oi, sou um Aluno.
duas ou mais classes de superclasses diferentes da mesma superclasse possuírem um método com a
mesma assinatura, mas com comportamentos diferentes.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 29 de 109
www.exponencialconcursos.com.br
nome, dependerá do que for passado como parâmetro. Veremos mais
detalhadamente a sobrecarga numa seção seguinte.
O polimorfismo Ad-Hoc por Coerção, também conhecido como
Casting, ocorre quando um tipo primitivo ou um objeto é “convertido”
em outro tipo de objeto ou tipo primitivo. A conversão pode ser implícita
(feita automaticamente pelo compilador) ou explícita (feita pelo programador).
Um exemplo de Coerção bem comum é de um número ponto flutuante que
pode ser usado onde se espera um inteiro. Nesse caso, o número ponto
flutuante é convertido em inteiro, perdendo, assim, suas casas decimais.
Há ainda outra classificação de polimorfismo, subdividindo-o em
polimorfismo estático e polimorfismo dinâmico. O primeiro refere-se ao
polimorfismo Ad-Hoc por Sobrecarga (ou Overloading) e o segundo, ao
polimorfismo Universal por Inclusão (ou Overriding), ambos vistos
anteriormente.
Tipos de Polimorfismo
Universal
Por Inclusão Paramétrico
Ad-hoc
Coerção Sobrecarga
(overloading)
Esquema 6 - Tipos de Polimorfismo
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 30 de 109
www.exponencialconcursos.com.br
7- (FCC - 2014 - TRT - 13ª Região (PB) - Analista
Judiciário - Tecnologia da Informação) Considere o seguinte caso:
Observando o trâmite de processos no tribunal, Marta percebeu que tanto
advogados quanto juízes realizavam análises nos diversos pareceres
constantes dos processos. Com sua experiência como analista ela deduziu que
uma possível informatização dos processos poderia contemplar uma classe
chamada Advogado e outra chamada Juiz, tendo como base uma classe
comum chamada Pessoa, com um método chamado AnalisarParecer. Este
método (definido na classe comum) se comportaria de maneira diferente para
as chamadas feitas a partir de uma instância de Advogado e para as
chamadas feitas a partir de uma instância de Juiz, em razão deles terem
responsabilidades diferentes em sua forma de analisar e opinar sobre os
pareceres.
Pela observação do método e seu comportamento, o princípio da orientação a
objetos aplicável no caso, fundamentalmente, é
a) a comunicabilidade.
b) o encapsulameto
c) a visibilidade.
d) o polimorfismo.
e) a estereotipagem.
Resolução:
Primeiramente, poderíamos eliminar as letras (a) e (e), pois não são princípios
da orientação a objetos. A frase-chave do enunciado para acertar a questão é
―o método chamado AnalisarParecer (...) definido na classe comum se
comportaria de maneira diferente (...)‖. Sabemos que o polimorfismo é o
mecanismo que permite que classes derivadas (no caso, Advogado e Juiz) de
uma mesma superclasse (no caso, Pessoa) tenham métodos de mesma
assinatura (no caso, AnalisarParecer), mas comportamentos diferentes.
Gabarito: Letra D.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 31 de 109
www.exponencialconcursos.com.br
2.5 Resumo dos Pilares da POO
Pil
ares d
a P
OO
Abstração
Preocupar-se com as principais propriedade
Desconsiderar características que não são importantes
Abstrair os objetos do mundo real em termos de identidade, atributos e métodos
Encapsulamento
Esconder os atributos e métodos da classe
Esconder os detalhes de implementação
Não permitir acesso direto aos atributos
Agrupar características e comportamentos relacionados em objetos
Herança
Permite que uma classe herde atributos e comportamentos de outra classe
Relação de classe mãe/filha, superclasse/subclasse, generalização/especialização e relação "é-um"
Herança simples e múltipla
Polimorfismo
"muitas formas"
Permite uma subclasse ser referenciada como sua superclasse
Permite que classes derivadas de uma mesma superclasse tenham métodos de mesma assinatura, mas comportamentos
diferentes
Ligação tardia (late binding) em tempo de execução
Esquema 7 - Pilares da POO
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 32 de 109
www.exponencialconcursos.com.br
8- (FCC - 2013 - AL-RN - Analista Legislativo -
Analista de Sistemas) José foi incumbido de modelar as classes do sistema
que a empresa estava desenvolvendo. Ele se deparou com as seguintes
classes:
Classe 1, que possui os atributos data de nascimento, nome, sexo e um
método para calcular a idade no calendário Gregoriano.
Classe 2, que possui os atributos data de nascimento, nome, sexo,
telefone e um método para calcular a idade no calendário Chinês.
Classe 3, que possui os atributos data de nascimento, nome, sexo e um
método para calcular a idade no calendário Juliano.
Por ser conhecedor de técnicas de orientação a objetos, ele propôs que fosse
criada uma classe com os atributos comuns e o método de cálculo da idade.
Sugeriu que fossem criadas classes baseadas nessa primeira e que apenas
alterassem o que não fosse comum, como a inclusão do atributo telefone e
diferentes tipos de implementação para o método do cálculo da idade. Deste
modo ele utilizou, respectivamente, as técnicas de
a) herança e polimorfismo.
b) abstração e agregação.
c) encapsulamento e abstração.
d) polimorfismo e encapsulamento.
e) abstração e herança.
Resolução:
Primeiramente, José propôs que ―fosse criada uma classe com os atributos
comuns (...)‖. Aqui já temos a técnica/mecanismo de herança, o que
resultará numa classe-mãe com atributos e métodos comuns e as classes
Classe1, Classe2 e Classe3 herdariam dessa classe-mãe. Por fim, ele sugeriu
―a inclusão de (...) diferentes tipos de implementação para o método do
cálculo da idade‖, ou seja, várias subclasses terão a mesma assinatura de
método, mas com implementação diferente. Quem permite isso é o
polimorfismo.
Gabarito: Letra A.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 33 de 109
www.exponencialconcursos.com.br
3. DEMAIS CONCEITOS DE POO
3.1 Modificadores de Acesso
Em um programa OO, podemos desejar que uma classe não possa ser
acessada por outra classe, ou então que determinada variável ou método fique
restrito somente ao escopo da classe. Cada classe é responsável por
controlar o nível de acesso de seus atributos e métodos, centralizando
essa responsabilidade e facilitando futuras mudanças no sistema. Muitas
outras vezes nem mesmo queremos que outras classes saibam da existência
de determinado atributo, escondendo-o por completo, já que ele diz respeito
ao funcionamento interno do objeto. Sempre devemos expor o mínimo
possível de funcionalidades, para criar um baixo acoplamento entre as
nossas classes. Para definir este nível/controle de acesso é que usamos os
modificadores de acesso (também conhecidos como modificadores de
visibilidade). Os modificadores de acesso são palavras-chave nas
linguagens orientadas a objetos que permitem definir o nível de
acesso de determinado membro (atributo ou método) da classe. Eles
servem para definir a visibilidade que determinada classe ou membro terá
diante das outras. Visibilidade neste caso tem o mesmo significado que
acesso, pois se não está visível não pode ser acessado. Para entender como o
controle de acesso é feito, primeiramente devemos diferenciar esses dois
conceitos: níveis de acesso e modificadores de acesso. Níveis de
acesso são conhecidos por public, private, protected e default. Cada
linguagem possui uma palavra-chave (modificador de acesso) para
representar cada um dos níveis de acesso. Em Java, por exemplo, são
apenas três: public, private, protected. O nível de acesso default (padrão)
não exige modificador no Java, já que quando não se declara nenhum
modificador para o membro da classe, o nível default é usado implicitamente.
Vejamos a definição de cada um dos níveis de acesso. Um membro com
o modificador public pode ser acessado de qualquer lugar e por
qualquer entidade que possa visualizar a classe a qual ele pertence. No nível
de acesso private, os membros da classe definidos com ele não podem ser
acessados ou usados por nenhuma outra classe, apenas internamente
na própria classe. Esse modificador não se aplica às classes, somente aos seus
métodos e atributos. Esses atributos e métodos privados também não podem
ser visualizados pelas classes filhas, apesar de podermos dizer que eles são
herdados. Marcando um atributo como privado, fechamos o acesso ao mesmo
em relação a todas as outras classes. Na orientação a objetos, é prática quase
que obrigatória proteger seus atributos com private. O modificador
protected torna o membro acessível à própria classe, suas subclasses
e também às classes do mesmo pacote2. No nível default (padrão), a
classe e/ou seus membros são acessíveis somente internamente e por
2 Pacote, em orientação a objetos, basicamente é um agrupamento de classes. Separar as classes em
pacotes de acordo com sua funcionalidade é uma forma de organizar o projeto.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 34 de 109
www.exponencialconcursos.com.br
classes do mesmo pacote. No esquema abaixo temos uma tabela resumo
com a visibilidade que cada nível de acesso oferece em Java. Em UML, há uma
pequena diferença com relação ao Java: no protected (protegido), não há
acesso às classes no mesmo pacote, apenas à própria classe e às subclasses.
9- (FCC - 2014 - SABESP - Técnico em Gestão -
Informática) Na programação orientada a objetos, em uma classe que possui
os atributos id, nome, telefone e renda, os atributos devem ser
normalmente e os métodos getters e setters devem ser normalmente
. Quando um objeto desta classe é instanciado, para incluir valores nos
atributos utilizam-se os métodos setter e para obter os valores incluídos
utilizam-se os métodos getter. Esse processo está relacionado com o que
chamamos de encapsulamento.
As lacunas I e II são preenchidas correta e, respectivamente, por
a) privados e protegidos
b) privados e públicos
c) protegidos e públicos
d) públicos e protegidos
e) públicos e privados
Resolução:
Cada classe é responsável por controlar o nível de acesso de seus atributos e
métodos. Sempre devemos expor o mínimo possível de funcionalidades e
atributos, para criar um baixo acoplamento entre as classes. Para definir esse
nível/controle de acesso usamos os modificadores de acesso. Níveis de acesso
são conhecidos por public/público, private/privado, protected/protegido e
default/padrão. O princípio do encapsulamento diz que os atributos devem ser
privados e só devem ser acessados/modificados externamente por meio de
métodos públicos.
Gabarito: Letra B.
Esquema 8 - Tabela dos modificadores e níveis de acesso
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 35 de 109
www.exponencialconcursos.com.br
3.2 Sobrecarga e Sobrescrita
Já comentamos na seção de polimorfismo sobre sobrecarga
(overloading) e sobrescrita (overriding), já que esses conceitos estão
intimamente relacionados com polimorfismo. A sobrescrita, por sua vez,
também está relacionada com a herança, pois, quando uma subclasse
herda um método da superclasse, essa subclasse pode alterar o
comportamento desse método, em outras palavras, pode reescrever
(sobrescrever, override) esse método. No caso, a subclasse reimplementa
o método herdado declarando a mesma assinatura, mas implementando-o de
maneira diversa, mais específica.
Já a sobrecarga de método ocorre quando métodos tem o mesmo
nome, desde que não sejam ambíguos, isto é, que exista uma maneira de
distinguir no momento da chamada. Essa distinção é feita pela quantidade
e/ou tipos de parâmetros dos métodos. A seguir temos um exemplo de
sobrecarga de método em Java. Repare que temos três métodos com o
mesmo nome, calcula(), mas como os tipos de parâmetros são diferentes,
o compilador saberá identificar qual o método correto a ser executado
dependendo do tipo do valor passado como argumento. Essa identificação é
feita em tempo de compilação, ao contrário da sobrescrita de método, na
qual a identificação do método correto a ser executado é feita em tempo de
execução.
EXEMPLO
Foi utilizada a sobrecarga de método no método ―calcula‖ da classe
Soma, pois há três métodos com o mesmo nome, ―calcula‖, mas parâmetros
diferentes. No caso, os tipos são diferentes, mas também poderia ser a
quantidade.
public class Soma {
public int calcula( int a, int b ){
return a+b;
}
public double calcula( double a, double b ){
return a+b;
}
public String calcula( String a, String b ){
return a+b;
}
}
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 36 de 109
www.exponencialconcursos.com.br
Esquema 9 - Diferença entre sobrecarga e sobrescrita
Overriding
Subclasse reescreve/redefine um método da superclasse
Mesmo nome, mesma assinatura
Binding/ligação em tempo de execução
Overloading
Mesma classe define mais de um método de mesmo nome, mas tipo/quantidade de parâmetros diferente
Mesmo nome, assinaturas diferentes
Binding/ligação em tempo de compilação
So
brescrit
a
So
brecarg
a
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 37 de 109
www.exponencialconcursos.com.br
10- (FCC - 2017 - TRF - 5ª REGIÃO - Analista
Judiciário - Informática Desenvolvimento) Na programação orientada a
objetos são utilizados classes e métodos. Um método
a) com determinado nome não pode aparecer mais de uma vez na mesma
classe, mesmo que receba parâmetros de tipos diferentes.
b) em uma superclasse pode ser sobrescrito nas subclasses de uma relação de
herança.
c) em Java pode receber diversos parâmetros e ter diversas operações de
retorno consecutivas de tipos diferentes.
d) deve ter assinatura e corpo quando aparecer em uma interface Java e deve
ser público.
e) construtor em uma classe Java pode ser sobrecarregado, desde que tenha
um tipo de retorno diferente de void.
Resolução:
Vamos analisar cada uma das alternativas.
a) Incorreto: com determinado nome não pode pode aparecer mais de uma
vez na mesma classe, mesmo que desde que receba parâmetros de tipos
diferentes. A sobrecarga (overloading) é o mecanismo que permite isso.
b) Correto: em uma superclasse pode ser sobrescrito nas subclasses de uma
relação de herança. Foi descrito corretamente o mecanismo de sobrescrita
(overriding) de método.
c) Incorreto: em Java pode receber diversos parâmetros e ter diversas
operações de retorno consecutivas de tipos diferentes. Os métodos em Java
ou não retornam nada (void) ou retornam um único tipo de retorno.
d) Incorreto: deve ter assinatura e corpo quando aparecer em uma interface
Java e deve ser público. As interfaces definem apenas a assinatura dos
métodos, sem implementá-los.
e) Incorreto: construtor em uma classe Java pode ser sobrecarregado, desde
que tenha um tipo de retorno diferente de void. Métodos construtores não
possuem tipo de retorno. Eles são sobrecarregados diferenciando a quantidade
e/ou tipo dos parâmetros.
Gabarito: Letra B.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 38 de 109
www.exponencialconcursos.com.br
3.3 Classe Abstrata
Às vezes precisamos usar uma classe com apenas um intuito:
economizar código e ganhar polimorfismo para criar métodos mais genéricos,
via herança e sobrescrita, que se encaixem a diversos objetos, mas sem
precisar de instâncias dessa classe. Às vezes não faz sentido ter um objeto
daquele tipo, apesar da classe existir. Imagine, por exemplo, a classe Pessoa e
duas filhas, PessoaFisica e PessoaJuridica. Geralmente, queremos que cada
pessoa no nosso sistema seja ou uma PessoaFisica ou uma PessoaJuridica. A
classe Pessoa, nesse caso, estaria sendo usada apenas para ganhar o
polimorfismo e agrupar atributos e métodos comuns às classes PessoaFisica e
PessoaJuridica. Assim, não faz sentido permitir instanciar a classe Pessoa,
apenas.
Para resolver esses problemas, temos as classes abstratas. A classe
abstrata apenas idealiza um tipo, define apenas um rascunho. Em Java,
por exemplo, usamos a palavra chave abstract para impedir que uma classe
possa ser instanciada, ou seja, declaramos essa classe como abstrata. Você
pode estar se perguntando: para que serve uma classe que não pode ser
instanciada? Serve para o polimorfismo e herança dos atributos e
métodos, que são poderosos recursos da POO, e serve também para não
podermos instanciar um objeto do tipo da classe abstrata, dando mais
consistência ao sistema. Importante ressaltar que a decisão de transformar
uma determinada classe em uma classe abstrata depende do domínio do
sistema, de sua necessidade. No exemplo dado anteriormente, pode ser que
em outro domínio faça sentido poder instanciar a classe Pessoa, nesse caso
ela não deveria ser declarada como abstrata. Nesse caso, dizemos que a
classe Pessoa é concreta, ou seja, não é abstrata.
Adicionalmente, diz-se que uma classe abstrata define um modelo
contendo implementação incompleta, isto é, funcionalidades genéricas a
serem implementadas pelas suas classes derivadas. Em uma classe
abstrata, podemos especificar que determinado método será sempre
escrito pelas classes filhas. Esse método é chamado de método abstrato,
cabeçalhos de método (assinatura) sem um corpo de comandos
definidos. Ele indica que todas as classes filhas (concretas) devem reescrever
esse método ou um erro de compilação ocorrerá. Assim, você obriga as
classes filhas a implementarem esse método, sobrescrevendo-o (overriding).
No nosso exemplo, qualquer classe que estender a classe Pessoa será
obrigada a reescrever seus métodos abstratos, tornando-os ―concretos‖. Por
sua vez, se uma classe possui um método abstrato, isso obriga a classe em
que ele se encontra a ser abstrata.
A essa altura da aula, você já deve ter percebido que os conceitos de
herança, polimorfismo, sobrescrita de método (overriding) e classe
abstrata estão bastante entrelaçados, sendo difícil explicar/entender um
sem explicar/entender o outro. Porém, não se desespere, pois apenas sabendo
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 39 de 109
www.exponencialconcursos.com.br
as palavras-chave de cada um desses conceitos isoladamente já será
suficiente para acertar a maioria das questões. Com o tempo, você irá
compreender melhor a relação entre os conceitos e, assim, acertará as
questões com ainda mais segurança.
Classe Abstrata
Apenas idealiza um tipo, define apenas um rascunho
Define um modelo
incompleto, com funcionalidades
genérias a serem implementadas pelas classes
filhas
Serve para obter
polimorfismo e possibilitar herança dos
seus atributos e métodos
Não permite instanciar objetos
diretamente
Oposto das classe
concretas
Pode especificar um
ou mais métodos
abstratos: aquele sem
corpo, apenas assinatura
Esquema 10 - Classe Abstrata
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 40 de 109
www.exponencialconcursos.com.br
11- (CESPE - 2015 - TRE-GO - Técnico Judiciário -
Programação de Sistemas) Julgue os item subsequente à luz do paradigma
de orientação a objetos.
Uma classe abstrata possui instâncias diretas, bem como suas classes
descendentes.
Resolução:
Uma classe abstrata possui não possui instâncias diretas. A principal
característica das classes abstratas é justamente não poder ser instanciada,
ou seja, não possuir instâncias diretas. Sobre a segunda parte da questão,
―bem como suas classes descendentes‖, não podemos afirmar
categoricamente que está certo ou errado, pois elas poderiam ou não possuir
instâncias diretas, a depender de elas serem concretas (mais comum) ou
também abstratas.
Gabarito: Errado.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 41 de 109
www.exponencialconcursos.com.br
3.4 Coesão e Acoplamento
Coesão e Acoplamento são princípios de engenharia de software
muito utilizados. Esses conceitos são independentes de paradigma de
programação, mas são comumente cobrados em questões associados à POO e
serão explicados com foco nesse paradigma. Ademais, os dois conceitos,
apesar de diferentes, estão intimamente relacionados.
Bem, quando queremos ter uma arquitetura de software madura e
sustentável, temos que levar em conta alguns princípios, pois eles têm um
propósito específico que visa melhorar o design do software, o que, por sua
vez, melhora a legibilidade e manutenibilidade. Dois desses princípios são
Coesão e Acoplamento.
Coesão está relacionada ao princípio da responsabilidade única, o
qual afirma que uma classe deve ter apenas uma única responsabilidade
e realizá-la de maneira satisfatória, em outras palavras, uma classe não
deve assumir responsabilidades que não são suas. A não observância
desse princípio leva a dificuldades de manutenção e de reuso. Em outras
palavras, pode-se definir coesão de um sistema de software como a relação
existente entre as responsabilidades de uma determinada classe e de
cada um de seus métodos. Uma classe altamente coesa tem
responsabilidades e propósitos claros e bem definidos, enquanto uma classe
com baixa coesão tem muitas responsabilidades diferentes e pouco
relacionadas. Uma classe deve ser responsável por exercer uma única
responsabilidade e fazer outras classes cooperarem quando necessário.
Classes coesas são aquelas de relação forte entre seus membros (atributos e
métodos), na qual seus membros estão intimamente ligados e estão ali por
um objetivo comum. Membros que não são absolutamente necessários para
aquela classe não devem estar presentes em classes coesas. Classes
(altamente) coesas são aqueles que possuem poucas responsabilidades.
Desta forma, a manutenção é mais simples e evitam-se efeitos
colaterais. Fica mais fácil alterar uma parte da aplicação sem afetar outras
partes. É importante tirar funcionalidades supérfluas de uma classe e
transferir para outra. Algo sem coesão é algo confuso, incoerente.
Exemplo clássico de baixa coesão é uma classe cuidando das regras de
negócio, persistência de dados e interação com usuário.
Acoplamento é o grau de dependência entre duas classes, ou
seja, o quanto uma classe depende da outra para funcionar. Quanto
maior for esta dependência entre as classes, mais elas estão fortemente
acopladas. De forma inversa, há baixo acoplamento quando uma classe tem
pouco ou nada de dependência em relação à outra. O forte acoplamento
também nos traz muitos problemas, alguns até semelhantes aos
problemas da baixa coesão. O forte acoplamento torna muito custoso a
manutenção e o seu gerenciamento, pois uma mudança pode afetar toda a
cadeia de classes fortemente acopladas. Um exemplo corriqueiro de alto
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 42 de 109
www.exponencialconcursos.com.br
acoplamento é a herança, pois a subclasse não consegue existir sem a
superclasse, ou seja, elas possuem um alto grau de dependência, de
acoplamento. Isso não significa que se deve deixar de usar herança, mas
devemos utilizá-la com maior moderação, sempre analisando se é realmente
necessário esse alto grau de acoplamento.
O ideal, para que um sistema seja flexível, manutenível e
compreensível, são classes com alta coesão e baixo acoplamento. Nem
sempre é possível e fácil, mas devemos buscar isso ao modelar nosso sistema,
pois trará benefícios, como baixo impacto nas manutenções e melhor
gerenciamento de mudanças no negócio.
É a relação existente entre as responsabilidades de uma determinada classe e de seus métodos
Uma classe não deve assumir responsabilidade que não são suas
Deve-se buscar uma alta coesão
É o grau de dependência entre duas classes
Representa o quanto uma classe depende de outra(s) para funcionar
Deve-se buscar um baixo acoplamento
Coesão
Acopla
mento
Esquema 11 - Coesão e Acoplamento
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 43 de 109
www.exponencialconcursos.com.br
12- (FCC - 2010 - TRT - 20ª REGIÃO (SE) - Analista
Judiciário - Tecnologia da Informação) No desenvolvimento de sistemas,
no âmbito das relações intermodulares entre as classes, diz-se que o
programa está bem estruturado quando há
a) maior coesão e maior acoplamento.
b) menor coesão e maior acoplamento.
c) menor coesão e menor acoplamento.
d) maior coesão e menor acoplamento.
e) apenas coesão ou apenas acoplamento.
Resolução:
Coesão é a relação existente entre as responsabilidades de uma determinada
classe e de seus métodos. Uma classe não deve assumir responsabilidade que
não são suas. Deve-se buscar uma alta coesão.
Já o acoplamento é o grau de dependência entre duas classes. Representa o
quanto uma classe depende de outra(s) para funcionar. Deve-se buscar um
baixo acoplamento.
Gabarito: Letra D.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 44 de 109
www.exponencialconcursos.com.br
3.5 Interface
Primeiramente, é importante ressaltar que o termo interface tem
duas acepções na POO. A primeira acepção é: conjunto de métodos
públicos de uma classe. É por meio da interface da classe que se comunica
com os objetos dessa classe. Deve-se programar pensando na interface da
sua classe, ou seja, em como seus usuários a utilizarão, e não somente em
como ela vai funcionar. Isso se deve ao fato da implementação em si (o
conteúdo dos métodos) não ter tanta importância para o usuário dessa classe,
uma vez que ele só precisa saber o que cada método pretende fazer, e não
como ele faz, pois isto pode mudar com o tempo. Sempre que vamos
acessar um objeto, utilizamos sua interface. É na interface (ou
protocolo) da classe que definimos quais mensagens podemos enviar às
instâncias de uma classe, ou seja, quais são as operações que podemos
solicitar que os objetos realizem.
Para simplificar, vamos fazer uma analogia com o mundo real: para
dirigirmos um carro, o que mais importa é a interface do carro (pedais,
volante, etc.), e não sua implementação (funcionamento do moto, etc.).
Podemos trocar o motor do carro sem precisar ter que reaprender a dirigir.
Analogamente, podemos alterar a implementação de um método sem
alterar sua interface, fazendo com que as classes que o utilizam continuem
usando ele da mesma maneira.
A segunda acepção do termo interface na POO refere-se à forma
de garantir a existência de implementação de determinado método em
determinada(s) classe(s). Nessa acepção, por meio de uma interface,
podemos criar um “contrato” que define tudo o que uma classe deve
fazer se quiser ter um determinado status, uma determinada
qualidade. A interface é um contrato no qual quem assina se responsabiliza
por implementar os métodos da interface (cumprir o contrato). Uma
interface pode definir uma série de métodos, mas nunca conter a
implementação deles. Ela só expõe o que o objeto deve fazer, e não como
ele faz, nem o que ele tem. Como ele faz vai ser definido em uma
implementação dessa interface, ou seja, nas classes que ―assinarem‖ esse
―contrato‖, que implementarem essa interface. Quando uma classe
implementa uma interface, ela precisa escrever os métodos pedidos pela
interface. É muito parecido com o efeito de herdar métodos abstratos. Mas
qual o benefício? Com o uso de interfaces, ganhamos mais polimorfismo!
Lembremos que a maneira como os objetos se comunicam num sistema
orientado a objetos é muito mais importante do que como eles executam. O
que um objeto faz é mais importante do que como ele faz. Seguir essa regra
trará sistemas mais fáceis de manter e modificar. E o objetivo do uso de uma
interface é justamente deixar seu código mais flexível e possibilitar a
mudança de implementação sem maiores traumas. Inclusive, o uso de
interfaces em vez de herança é amplamente aconselhado. Foi daí que surgiu
o mantra ―programe orientado a interface e não à implementação‖.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 45 de 109
www.exponencialconcursos.com.br
EXEMPLO
Imagine um sistema bancário, no qual várias entidades desse sistema
(ContaCorrente, SeguroDeVida, etc.) são tributadas pelo governo e o sistema
precisa calcular o valor desse tributo, que é calculado de forma diferente para
cada entidade. A maneira mais flexível de modelar esse cenário num sistema
orientado a objetos é criando, por exemplo, uma interface Tributavel, a qual
possui uma assinatura de método ―double calcularTributos()‖. Dessa forma,
todas as classes desse sistema que precisarem calcular o valor de seus
tributos, poderiam ―assinar‖ essa interface, assim elas seriam obrigadas a
implementar o método ―calcularTributos()‖ e o sistema poderia tratar essas
classes de forma homogênea quando, por exemplo, precisasse implementar
um relatório que listasse o total de tributos pago. Com isso, caso surgisse uma
nova classe no sistema que envolvesse outra forma de calcular tributos,
bastaria ela implementar a interface Tributavel e o código do relatório não
precisaria ser alterado. A figura abaixo traz esse exemplo em UML.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 46 de 109
www.exponencialconcursos.com.br
Interface
Pode também significar o conjunto de
métodos públicos de uma classe
Garante a existência de
implementação de
determinado(s) método(s) em determinada(s)
classe(s).
Cria-se um "contrato" para que uma classe
adquira determinado
status, qualidade
Pode definir uma série de
métodos, mas nunca conter a implementação
deles
Objetiva flexibilizar o
código e possibilitar
mudança de implementação
com baixo impacto
Esquema 12 - Interface
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 47 de 109
www.exponencialconcursos.com.br
13- (FCC - 2013 - MPE-CE - Analista Ministerial -
Ciências da Computação) Em uma aplicação desenvolvida por uma equipe
de TI deseja-se:
Caso 1: obrigar um conjunto de classes a implementar um conjunto de
métodos para se obter um padrão. A ideia é centralizar um conjunto de
assinaturas de métodos em um componente para que um conjunto de classes
possa implementá-los da maneira como lhes convier.
Caso 2: centralizar os atributos e métodos comuns a um conjunto de classes
em uma única classe, de forma que esse conjunto de classes especializadas se
comporte como se tivessem em seu código fonte esses atributos e métodos
comuns.
Os principais conceitos da orientação a objetos que devem ser utilizados para
atender os Casos 1 e 2 são, respectivamente,
a) sobrecarga de métodos e sobrescrita de métodos.
b) pacote e generalização.
c) interface e herança.
d) generalização e especialização.
e) encapsulamento e herança.
Resolução:
Na POO, uma interface pode definir a assinatura de uma série de métodos,
mas nunca conter a implementação deles. Assim, as classes que
implementarem essa interface, serão obrigadas a implementar esses métodos.
O Caso 1 fala de ―centralizar um conjunto de assinaturas de métodos em um
componente‖ e esse componente é justamente a interface.
Já a herança, na POO, permite que uma classe herde atributos e
comportamentos de outra classe, o que cria uma relação de classe mãe/filha,
ou generalização/especialização. O Caso 2 fala ―centralizar os atributos e
métodos comuns (...) em uma única classe (...) classes especializadas‖. Daí
podemos extrair os conceitos de herança. A classe centralizadora será a
classe mãe e as classes especializadas serão as classes filhas.
Gabarito: Letra C.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 48 de 109
www.exponencialconcursos.com.br
4. QUESTÕES COMENTADAS
Programação Orientada a Objetos
14- (FCC - 2018 - DPE-AM - Assistente Técnico de Defensoria -
Programador) O paradigma de programação Orientada a Objetos − OO
utiliza, como um de seus componentes essenciais, a classe. Uma classe, em
conformidade com os melhores padrões da OO,
a) deve ter alta coesão, que implica em ter um conjunto limitado de
responsabilidades, e baixo acoplamento, que implica em ter baixa dependência
de outros componentes.
b) deve ser completa, portanto, quanto mais atributos os métodos da classe
tiver em comum com outros métodos, mais completa ela se torna.
c) deve manter o número de colaborações com outras classes, por meio de
seus objetos, o mais alto possível para facilitar os testes.
d) que possui muitos métodos contribui para diminuir a complexidade da
árvore de herança, aumentando seu potencial de reutilização.
e) que possui métodos é chamada de superclasse e uma classe que não possui
métodos é chamada de subclasse.
Resolução:
Vamos analisar cada uma das alternativas.
a) Correto: um dos principais ―mantras‖ da POO é justamente esse: classes
devem ter alta coesão e baixo acoplamento. Além disso, o item trouxe
corretamente a definição desses conceitos.
b) Incorreto: deve ser completa, portanto, quanto mais atributos os métodos
da classe tiver em comum com outros métodos, mais completa ela se torna.
Primeiramente, não há uma definição do que seria uma ―classe completa‖.
Além do mais, muitos atributos em comum nos métodos da classe indica baixa
coesão.
c) Incorreto: deve manter o número de colaborações com outras classes, por
meio de seus objetos, o mais alto baixo possível para facilitar os testes. A boa
prática diz que a classe deve ter baixo acoplamento, o que significa ter um
número baixo de colaborações com outras classes.
d) Incorreto: que possui muitos métodos contribui para diminuir aumentar a
complexidade da árvore de herança, aumentando diminuindo seu potencial de
reutilização. Uma classe com muitos métodos tem baixa coesão, o que
aumenta a complexidade e diminui a reutilização.
e) Incorreto: numa relação de herança, que possui métodos uma classe mãe
é chamada de superclasse e uma classe filha (ou derivada) que não possui
métodos é chamada de subclasse. Não há nenhuma nomenclatura especial
para classes que possuem (ou não) métodos.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 49 de 109
www.exponencialconcursos.com.br
Gabarito: Letra A.
15- (FCC - 2016 - Prefeitura de Teresina - PI - Analista Tecnológico -
Analista de Sistemas) Na orientação a objetos o entendimento dos conceitos
é fundamental para se explorar ao máximo os recursos disponibilizados neste
paradigma de programação. Um destes conceitos é o de
a) sobrecarga de construtores, que pode ocorrer na maioria das linguagens de
programação, exceto na linguagem Java.
b) polimorfismo, que ocorre quando não há sobrescrita nem sobrecarga de
métodos nas classes e interfaces da aplicação.
c) sobrescrita de métodos, que ocorre quando há métodos de mesmo nome na
classe, mas que recebem parâmetros diferentes.
d) sobrecarga de métodos, que ocorre quando um método recebe mais
parâmetros do que pode suportar.
e) herança múltipla, que ocorre quando uma subclasse possui duas ou mais
superclasses imediatas.
Resolução:
Vamos analisar cada uma das alternativas.
a) Incorreto: sobrecarga de construtores, que pode ocorrer na maioria das
linguagens de programação, exceto inclusive na linguagem Java.
b) Incorreto: polimorfismo, que ocorre quando não há sobrescrita nem
sobrecarga de métodos nas classes e interfaces da aplicação classes derivadas
de uma mesma superclasse possuem métodos de mesma assinatura, mas
comportamentos diferentes.
c) Incorreto: sobrescrita sobrecarga de métodos, que ocorre quando há
métodos de mesmo nome na classe, mas que recebem parâmetros diferentes.
A sobrescrita ocorre quando uma subclasse reescreve/redefine um método da
superclasse, o qual deve possuir a mesma assinatura.
d) Incorreto: sobrecarga de métodos, que ocorre quando um método recebe
mais parâmetros do que pode suportar há métodos de mesmo nome na
classe, mas que recebem parâmetros diferentes.
e) Correto: herança múltipla, que ocorre quando uma subclasse possui duas
ou mais superclasses imediatas. Já a herança simples ocorre quando uma
classe herda características somente de outra classe de forma imediata.
Gabarito: Letra E.
16- (FCC - 2016 - TRT - 14ª Região (RO e AC) - Técnico Judiciário -
Tecnologia da Informação) São, dentre outros, recursos essenciais em uma
aplicação orientada a objetos para se obter polimorfismo:
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 50 de 109
www.exponencialconcursos.com.br
a) Herança e sobrescrita de métodos.
b) Classes estáticas, com métodos protegidos.
c) Interfaces, contendo métodos não abstratos e implementados.
d) Classes abstratas, sem subclasses.
e) Arrays unidimensionais ou multidimensionais.
Resolução:
O polimorfismo pode ser estático (Overloading) ou dinâmico (Overriding).
Quando a questão falar genericamente de polimorfismo, geralmente ela está
tratando do tipo dinâmico. Nesse tipo de polimorfismo, a subclasse
reimplementa (sobrescrita/overriding) o método herdado declarando a mesma
assinatura, mas implementando-o de maneira diversa, mais específica. Isso
permite que classes derivadas de uma mesma superclasse possam invocar
métodos que têm a mesma identificação (assinatura), mas comportamentos
distintos. Assim, notamos que o polimorfismo está intimamente relacionado
com herança e sobrescrita.
Gabarito: Letra A.
17- (FCC - 2016 - TRF - 3ª REGIÃO - Técnico Judiciário - Informática)
A análise e o projeto orientados a objeto modelam um sistema em termos de
objetos, que têm propriedades e comportamentos, e de eventos, que
disparam operações que mudam o estado dos objetos. Considere, abaixo, os
fundamentos da Orientação a Objetos − OO:
I. Ato de empacotar ao mesmo tempo dados e objetos. O objeto esconde seus
dados de outros objetos e permite que os dados sejam acessados por
intermédio de seus próprios métodos. Protege os dados do objeto do uso
arbitrário e não-intencional. Separa a maneira como um objeto se comporta
da maneira como ele é implementado.
II. Refere-se à implementação de um tipo de objeto. Especifica uma estrutura
de dados e as operações permissíveis que se aplicam a cada um de seus
objetos.
III. Pode ser real ou abstrato. Possui informações (dados) e desempenha
ações (funcionalidades). É qualquer coisa, real ou abstrata, a respeito da qual
são armazenados dados e operações.
Os conceitos da OO indicados em I, II e III, são, correta e respectivamente,
a) Herança, Classe, Atributo.
b) Encapsulamento, Método, Objeto.
c) Polimorfismo, Superclasse, Método.
d) Encapsulamento, Classe, Objeto.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 51 de 109
www.exponencialconcursos.com.br
e) Herança, Método, Atributo.
Resolução:
O encapsulamento consiste em esconder os atributos e métodos da classe, ou
seja, esconder os detalhes de implementação. Busca não permitir acesso
direto aos atributos. Além disso, esse conceito também está relacionado com o
ato de agrupar características/atributos e comportamentos/métodos
relacionados em objetos. Dito isso, relacionamos o item (I) com
encapsulamento.
Por fim, devemos lembrar das diferenças entre classe e objeto (abaixo) para
relacionar o item (II) à classe e o item (III) ao objeto.
Gabarito: Letra D.
18- (FCC - 2015 - DPE-RR - Analista de Sistemas) Os dois principais
paradigmas de programação amplamente conhecidos são o paradigma
orientado a objetos e o procedural. Na orientação a objetos,
a) ocorre herança múltipla quando uma superclasse herda características de
mais de uma subclasse.
b) a marca de um produto é considerada uma classe, porém, o preço é
considerado um atributo.
c) uma classe pode conter vários métodos com o mesmo nome, se recebem
parâmetros diferentes.
d) só é permitido um construtor em cada classe, independente da linguagem
de programação utilizada.
e) um método representa uma propriedade da classe, semelhante a um campo
em uma tabela.
Resolução:
Vamos analisar cada uma das alternativas.
Classe
• Descrição de um grupo de objetos com atributos e comportamentos similares
• Padrão/molde/modelo para a construção dos objetos
Objeto
• Possui identidade única, estado (conjunto de valores dos atributos) e comportamento
• É uma instância de uma classe
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 52 de 109
www.exponencialconcursos.com.br
a) Incorreto: ocorre herança múltipla quando uma superclasse subclasse
herda características de mais de uma subclasse superclasse. Item
simplesmente inverteu os conceitos.
b) Incorreto: a marca de um produto é considerada uma classe, porém, um
atributo e o preço também é considerado um atributo. Ambos são atributos da
classe produto, pois representam características do produto.
c) Correto: uma classe pode conter vários métodos com o mesmo nome, se
recebem parâmetros diferentes. Isso é possível devido ao conceito de
sobrecarga de métodos.
d) Incorreto: só é permitido um construtor em cada classe, independente da
linguagem de programação utilizada. A sobrecarga de métodos também pode
ser aplicada aos (métodos) construtores.
e) Incorreto: um método atributo representa uma propriedade da classe,
semelhante a um campo em uma tabela. Método representa uma
operação/comportamento da classe.
Gabarito: Letra C.
19- (FCC - 2015 - TRE-PB - Técnico Judiciário - Área Apoio
Especializado - Programação de Sistemas) Na orientação a objetos, no
que se refere à sobrecarga de métodos, um método é considerado
sobrecarregado se
a) tiver nome diferente de outros métodos da mesma classe.
b) for público, estático e receber mais de um parâmetro.
c) tiver o mesmo nome de outro método da mesma classe, mas receber
parâmetros diferentes.
d) tiver, em uma subclasse, o mesmo nome de um método da superclasse.
e) a quantidade de parâmetros que receber excede o limite permitido.
Resolução:
Na sobrecarga (overloading), uma mesma classe define mais de um método de
mesmo nome, mas tipo/quantidade de parâmetros diferente. Ou seja, mesmo
nome, mas assinaturas diferentes. Com isso, já marcamos a (c).
Vejamos o erro dos demais itens:
(a) Pelo contrário, os nomes devem ser iguais.
(b) O nível de acesso (público, privado, etc) não influencia na
sobrecarga.
(c) Certo!
(d) Isso está mais relacionado à sobrescrita de métodos.
(e) O limite de parâmetros suportado pela linguagem não tem relação
direta com a sobrecarga.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 53 de 109
www.exponencialconcursos.com.br
Gabarito: Letra C.
20- (FCC - 2015 - TRE-AP - Técnico Judiciário - Programação de
Sistemas) Na orientação a objetos com Java as classes
a) permitem apenas um construtor, que pode ser declarado explicitamente ou
não.
b) estáticas são necessárias para se conseguir polimorfismo.
c) podem possuir variáveis com modificadores de acesso public, private,
protected e void.
d) precisam possuir um método main por meio do qual são instanciados os
objetos
e) podem possuir métodos com o mesmo nome, desde que recebam
parâmetros de tipos diferentes.
Resolução:
Vamos analisar cada uma das alternativas.
a) Incorreto: permitem apenas um um ou mais construtores, que pode ser
declarado explicitamente ou não.
b) Incorreto: estáticas são não são necessárias para se conseguir
polimorfismo.
c) Incorreto: podem possuir variáveis com modificadores de acesso public,
private, protected e void. Void não é um modificador de acesso, mas sim uma
palavra-chave do Java usada para indicar que um método não possui retorno.
d) Incorreto: precisam possuir um método main construtor por meio do qual
são instanciados os objetos.
e) Correto: podem possuir métodos com o mesmo nome, desde que recebam
parâmetros de tipos diferentes. É possível, pois Java suporta sobrecarga de
métodos.
Gabarito: Letra E.
21- (FCC - 2015 - MPE-PB - Analista de Sistemas – Desenvolvedor)
Apresenta um conceito correto associado à Análise e Projeto Orientado a
Objetos (OO):
a) Atributos, também chamados de métodos ou serviços, fornecem uma
representação de um dos comportamentos da classe.
b) Subclasse é uma especialização da superclasse. Uma subclasse pode herdar
tanto atributos quanto operações de uma superclasse.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 54 de 109
www.exponencialconcursos.com.br
c) Classe abstrata, também chamada de classe bean, é uma generalização de
um conjunto de classes a ela relacionada.
d) Métodos são instâncias de uma classe específica que herdam os atributos e
operações da classe.
e) Objeto é uma descrição generalizada que descreve uma coleção de métodos
semelhantes e encapsula dados e abstrações procedurais necessárias para
descrever alguma classe do mundo real.
Resolução:
Vamos analisar cada uma das alternativas.
a) Incorreto: Atributos Operações, também chamados de métodos ou
serviços, fornecem uma representação de um dos comportamentos da classe.
b) Correto: Subclasse é uma especialização da superclasse. Uma subclasse
pode herdar tanto atributos quanto operações de uma superclasse.
Apresentou corretamente os conceitos-chave da herança.
c) Incorreto: Classe abstrata, também chamada de classe bean, é uma
generalização de um conjunto de classes a ela relacionada. Bean não é
sinônimo de classe abstrata.
d) Incorreto: Métodos Objetos são instâncias de uma classe específica que
herdam os atributos e operações da classe.
e) Incorreto: Objeto Classe é uma descrição generalizada que descreve uma
coleção de métodos semelhantes e encapsula dados e abstrações procedurais
necessárias para descrever alguma classe do mundo real.
Gabarito: Letra B.
22- (FCC - 2015 - TRT - 4ª REGIÃO (RS) - Analista Judiciário -
Tecnologia da Informação) O uso de herança pode otimizar o tempo de
desenvolvimento das aplicações orientadas a objetos devido ao
reaproveitamento de código. Quando se implementa herança
a) uma subclasse pode se tornar uma superclasse a qualquer momento,
bastando para tanto que se derive uma subclasse a partir dela.
b) a superclasse herda os atributos da subclasse, incluindo os atributos
privados, públicos e protegidos.
c) múltipla na linguagem Java versão 6, a subclasse herda características de
mais de uma superclasse.
d) só é possível obter polimorfismo na aplicação se houver sobrecarga de
métodos.
e) os métodos de uma superclasse não podem ser sobrescritos nas subclasses,
porém, podem ser sobrecarregados.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 55 de 109
www.exponencialconcursos.com.br
Resolução:
Vamos analisar cada uma das alternativas.
a) Correto: uma subclasse pode se tornar uma superclasse a qualquer
momento, bastando para tanto que se derive uma subclasse a partir dela.
Correto, pois a herança pode ser aplicada em uma hierarquia de classes. Por
exemplo, a classe Felino herda da classe Animal. Porém, a classe Gato herda
da classe Felino. Assim, a classe Felino é superclasse e subclasse
simultaneamente.
b) Incorreto: a superclasse subclasse herda os atributos da subclasse
superclasse, incluindo os atributos privados, públicos e protegidos.
c) Incorreto: múltipla na linguagem Java versão 6, a subclasse herda
características de mais de uma superclasse. Java não suporta herança
múltipla.
d) Incorreto: só é é possível obter polimorfismo na aplicação se houver
sobrecarga de métodos. Também é possível com a sobrescrita de métodos,
sendo nesse caso do tipo dinâmico.
e) Incorreto: os métodos de uma superclasse não podem ser sobrescritos
sobrecarregados nas subclasses, porém, podem ser sobrecarregados
sobrescritos. A sobrecarga de método ocorre na mesma classe. Já a
sobrescrita ocorre na subclasse.
Gabarito: Letra A.
23- (FCC - 2015 - TRT - 15ª Região (SP) - Analista Judiciário –
Tecnologia da Informação) A herança é uma das características mais
poderosas e importantes da orientação a objetos, pois permite o
reaproveitamento de atributos e métodos. Em aplicações que utilizam
herança,
a) não é possível sobrescrever em uma subclasse, um método de sua
superclasse.
b) cada superclasse pode ter apenas uma subclasse.
c) somente as superclasses poderão ter métodos ou construtores
sobrecarregados.
d) é possível se obter polimorfismo.
e) é possível a implementação de herança múltipla, em todas as linguagens
orientadas a objetos.
Resolução:
Vamos analisar cada uma das alternativas.
a) Incorreto: não é é possível sobrescrever em uma subclasse, um método
de sua superclasse.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 56 de 109
www.exponencialconcursos.com.br
b) Incorreto: cada superclasse pode ter apenas uma uma ou mais
subclasses.
c) Incorreto: somente as superclasses poderão ter métodos ou construtores
sobrecarregados. Qualquer classe pode.
d) Correto: é possível se obter polimorfismo. O polimorfismo dinâmico está
intimamente relacionado à herança e sobrescrita de métodos.
e) Incorreto: é possível a implementação de herança múltipla, em todas as
linguagens orientadas a objetos. Java, por exemplo, não suporta herança
múltipla.
Gabarito: Letra D.
24- (FCC - 2014 - TCE-GO - Analista de Controle Externo - Tecnologia
da Informação) Em aplicações orientadas a objetos é possível construir
diferentes tipos de classes, como
a) classes abstratas, que podem possuir construtores e serem instanciadas
diretamente.
b) interfaces, que podem possuir construtores e serem instanciadas
diretamente.
c) classes abstratas, que podem conter métodos implementados e assinaturas
de métodos sem implementação.
d) interfaces, que podem possuir constantes, variáveis e atributos privados.
e) superclasses em relações de herança, que podem possuir métodos
abstratos, mas não podem ser instanciadas diretamente.
Resolução:
Vamos analisar cada uma das alternativas.
a) Incorreto: classes abstratas, que podem possuir construtores e serem
instanciadas diretamente. Classes abstratas não possuem instâncias diretas.
b) Incorreto: interfaces, que podem possuir construtores e serem
instanciadas diretamente. Interfaces não possuem construtores nem
instâncias diretas.
c) Correto: classes abstratas, que podem conter métodos implementados e
assinaturas de métodos sem implementação. Os métodos sem implementação
são chamados de métodos abstratos. Eles podem ser sobrescritos pelas
classes derivadas.
d) Incorreto: interfaces, que podem possuir constantes, variáveis e atributos
privados. Interfaces não podem possuir membros (atributos e métodos)
privados.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 57 de 109
www.exponencialconcursos.com.br
e) Incorreto: superclasses em relações de herança, que podem possuir
métodos abstratos, mas não podem ser instanciadas diretamente. Se a
superclasse não for abstrata, então ela poderá sim ser instanciada
diretamente.
Gabarito: Letra C.
25- (FCC - 2014 - AL-PE - Analista Legislativo - Sistemas) O modelo de
dados a seguir deve ser utilizado para responder a questão.
Se fosse construída uma aplicação orientada a objetos para implementar o
modelo apresentado, a forma mais correta de construir as classes referentes
às entidades Juridico, Cliente e Fisico, seria utilizando o conceito de;
a) interface, onde a interface Cliente seria implementada pelas classes Físico e
Juridico.
b) polimorfismo, onde todos os objetos das classes Fisico e Juridico seriam
tratados como objetos da classe Cliente.
c) herança, onde Juridico e Físico seriam subclasses da classe Cliente.
d) abstração, onde uma classe abstrata Cliente teria atributos protegidos e
métodos privados que seriam implementados nas interfaces Juridico e Fisico.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 58 de 109
www.exponencialconcursos.com.br
e) encapsulamento, onde as classes Juridico e Fisico seriam encapsuladas na
classe Cliente, de forma que todas agissem como se fosse uma única classe.
Resolução:
Cada uma das tabelas do modelo de dados (Juridico, Cliente e Fisico) deve ser
uma classe no modelo orientado a objetos. Repare que Juridico é um Cliente e
Fisico é um Cliente. Os atributos/campos da tabela Cliente também devem ser
usados nas tabelas Juridico e Fisico (tanto é que elas possuem chaves-
estrangeiras para a tabela Cliente). Da relação ―é um‖ e da extensão dos
atributos/campos da tabela Cliente para as tabelas Juridico e Fisico,
deduzimos que devemos usar a herança.
Cliente não pode ser uma interface, pois ele possui campos, os quais devem
ser mapeados em atributos de uma classe, e interfaces não possuem
atributos. Assim, letra (a) está errada.
Polimorfismo está relacionado com métodos sobrescritos de mesmo nome,
mas implementações diferentes. Assim, (b) está errada.
Um dos erros da (d) é: métodos privados não são herdados,
consequentemente não podem ser sobrescritos pelas subclasses.
Erro da (e): encapsulamento envolve agrupar atributos e métodos em objetos,
e não duas classes numa terceira classe.
Gabarito: Letra C.
26- (FCC - 2013 - MPE-MA - Técnico Ministerial - Tecnologia da
Informação) Uma aplicação possui quatro classes: A, B, C e D. As classes A
e B são subclasses de A. Nas classes A, B e C existem atributos diferentes e
um método chamado verificarSaldo() com a mesma assinatura mas que
executa operações que retornam valores do tipo double, porém, diferentes. A
classe D é a classe principal. No interior do método main da classe D foram
digitadas as seguintes instruções:
A obj = new B();
double v = obj.verificarSaldo();
A obj1 = new C();
double v1 = obj1.verificarSaldo();
Quando essas linhas foram executadas, a variável v recebeu o valor 100.00 e
a variável v1 recebeu o valor 125.00.
Note que tanto obj como obj1 são objetos do tipo A, porém, além de
possuírem atributos diferentes, ao chamar o método verificarSaldo() por
meio desses objetos, o retorno contido nas variáveis v e v1 foi diferente. Isso
mostra um exemplo de
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 59 de 109
www.exponencialconcursos.com.br
a) encapsulamento.
b) sobrecarga de métodos.
c) herança múltipla.
d) generalização.
e) polimorfismo.
Resolução:
Há uma pequena imprecisão no enunciado, mas podemos resolver mesmo
assim. O correto seria ―As classes A C e B são subclasses de A‖ conforme
demonstra o exemplo de código do enunciado. Dito isso, vejamos: a
passagem-chave do enunciado que demonstram que foi usado polimorfismo é:
‖um método (...) com a mesma assinatura mas que executa operações (...)
diferentes‖. O trecho de código e o exemplo de valores de retorno apenas
ratifica o que foi dito nessa passagem-chave.
Gabarito: Letra E.
27- (FCC - 2013 - MPE-CE - Analista Ministerial - Ciências da
Computação) Esse conceito refere-se à separação dos aspectos externos de
um objeto, que são acessíveis a outros objetos, dos detalhes internos da
implementação, que estão escondidos de outros objetos. Isso evita que partes
de um programa se tornem tão independentes que uma pequena mudança
tenha grandes efeitos em cascata. Pode-se mudar a implementação de um
objeto sem afetar as aplicações que o utilizam. Pode-se querer mudar a
implementação de um objeto para melhorar o desempenho, reparar um erro,
consolidar código ou dar suporte à portabilidade. Esse conceito não é exclusivo
das linguagens orientadas a objetos, mas a capacidade de combinar estrutura
e comportamento de dados em uma única entidade o torna mais claro e mais
poderoso do que em linguagens como Cobol, Fortran e C.
O conceito citado no texto é conhecido como
a) compartilhamento.
b) generalização.
c) polimorfismo.
d) coleção.
e) encapsulamento.
Resolução:
A parte principal do enunciado é ―refere-se à separação dos aspectos externos
de um objeto, que são acessíveis a outros objetos, dos detalhes internos da
implementação, que estão escondidos de outros objetos‖. Trata-se de
encapsulamento. Ele consiste em esconder os atributos e métodos da classe,
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 60 de 109
www.exponencialconcursos.com.br
ou seja, esconder os detalhes de implementação. Busca não permitir acesso
direto aos atributos.
Gabarito: Letra E.
28- (FCC - 2013 - MPE-MA - Analista Ministerial - Análise e
Desenvolvimento de Sistemas) Um dono de uma fábrica de brinquedos
solicitou que seus engenheiros criassem um mesmo controle remoto para os
brinquedos avião, carro e barco. A única restrição era que cada brinquedo
atendesse aos comandos específicos definidos pelo controle. O controle remoto
teria vários botões, sendo que todos eles seriam úteis para todos os
brinquedos. Por exemplo, quando o usuário apertasse o botão mover, o
controle enviaria o sinal MOVER para todos os brinquedos que estivessem em
um raio de 2 metros. Desta forma, quando o brinquedo recebesse o sinal
MOVER, ele se moveria de acordo com a sua função. Para o avião, mover
significa VOAR, para o barco significa NAVEGAR e, para o automóvel, significa
CORRER. Observe que os brinquedos respondem ao mesmo sinal de formas
diferentes.
Na programação orientada a objetos, este exemplo ilustra um caso de
a) Herança.
b) Polimorfismo.
c) Sobrecarga de métodos.
d) Classe abstrata.
e) Hierarquia de herança.
Resolução:
A parte principal do enunciado é ―os brinquedos respondem ao mesmo sinal de
formas diferentes‖. Se associarmos ―sinal‖ com a assinatura do método
MOVER e ―formas diferentes‖ com a implementação desse método em cada
brinquedo (VOAR, NAVEGAR, CORRER), deduzimos a característica do
polimorfismo. Por exemplo, poderia haver a classe Brinquedo que possui o
método MOVER e ela é superclasse das classes Aviao, Carro e Barco. Cada
subclasse iria sobrescrever o método MOVER e implementar as operações
VOAR, CORRER e NAVEGAR, respectivamente. Assim, uma classe Controle
poderia chamar o método MOVER de qualquer objeto instância de uma dessas
três classes e seria executada a operação correta.
Gabarito: Letra B.
29- (FCC - 2013 - AL-RN - Analista Legislativo - Analista de Sistemas)
Um dos conceitos básicos de orientação a objetos é o fato de um objeto, ao
tentar acessar as propriedades de outro objeto, deve sempre fazê-lo por uso
de métodos do objeto ao qual se deseja atribuir ou requisitar uma informação,
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 61 de 109
www.exponencialconcursos.com.br
mantendo ambos os objetos isolados. A essa propriedade da orientação a
objetos se dá o nome de
a) herança.
b) abstração.
c) polimorfismo.
d) mensagem.
e) encapsulamento.
Resolução:
O encapsulamento diz que as classes (e, consequentemente, suas
instâncias/objetos) devem esconder seus atributos (genericamente expresso
como ―detalhes de implementação‖). Isso geralmente é feito deixando os
atributos privados e criando métodos públicos que manipulem (acessem e
modifiquem) esses atributos, conforme a necessidade. Assim, um objeto A não
acessa diretamente um atributo de outro objeto B, mas sim usa um método
público desse objeto B, o que ajuda a manter esses objetos isolados.
Gabarito: Letra E.
30- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Acerca de conceitos básicos e tratamentos de exceção em programação
orientada a objetos, julgue o item subsequente.
O armazenamento de informações referentes às classes de um sistema é feito
em uma metaclasse.
Resolução:
Relacionado ao conceito de classe, há o conceito de metaclasse, que é uma
classe cujas instâncias também são classes e não objetos no sentido
tradicional. Assim como classes definem o comportamento de certos objetos,
metaclasses definem o comportamento de certas classes e suas instâncias.
Nem toda linguagem orientada a objeto suporta metaclasses.
Gabarito: Certo.
31- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Acerca de conceitos básicos e tratamentos de exceção em programação
orientada a objetos, julgue o item subsequente.
Em um sistema de informação que contenha dados pessoais de clientes de
uma empresa de cartões de créditos, caso sejam criadas classes cliente e
pessoas, então a classe pessoas é uma classe de polimorfismo de sobrecarga.
Resolução:
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 62 de 109
www.exponencialconcursos.com.br
Em um sistema de informação que contenha dados pessoais de clientes de
uma empresa de cartões de créditos, caso sejam criadas classes cliente e
pessoas, então a classe pessoas é uma classe de polimorfismo de sobrecarga.
A partir das premissas dadas no item, não podemos inferir que as classes
estão numa relação de herança, mãe-filha. Mesmo supondo que a classe
cliente é uma subclasse de pessoas, o tipo de polimorfismo que se enquadraria
seria o dinâmico, relacionado à sobrescrita, e não à sobrecarga.
Gabarito: Errado.
32- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Acerca de conceitos básicos e tratamentos de exceção em programação
orientada a objetos, julgue o item subsequente.
Considere que, em um sistema de informações, um objeto possua dados de
uma pessoa, tais como: nome, endereço, data de aniversário e número do
cartão de crédito. Considere, ainda, que esse sistema exponha, de forma
pública, informações sobre o nome e a data de aniversário e deixe os dados do
cartão de crédito protegidos em formato privado. Nesse caso, o sistema estará
usando o recurso de interface.
Resolução:
Nesse caso, o sistema estará usando o recurso de interface encapsulamento,
pois o encapsulamento está relacionado com a ocultação de informação,
o que envolve impedir o acesso direto aos atributos dos objetos.
Gabarito: Errado.
33- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Julgue o item a seguir, relativo a projetos orientados a objeto.
A modelagem orientada a objetos demonstra como os objetos podem ser
classificados, a maneira como herdam atributos e operações, como são
compostos e de que forma interagem entre si.
Resolução:
A questão trouxe corretamente sentenças-chave que estão relacionadas a
conceitos da POO: a modelagem orientada a objetos demonstra como os
objetos podem ser classificados (classe), a maneira como herdam atributos e
operações (herança), como são compostos (atributos e métodos) e de que
forma interagem entre si (troca de mensagens).
Gabarito: Certo.
34- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Julgue o item seguinte, quanto aos conceitos da programação estruturada e
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 63 de 109
www.exponencialconcursos.com.br
da programação orientada a objetos e aos métodos de ordenação, pesquisa e
hashing.
Na programação orientada a objetos, uma das características do polimorfismo
é a independência do software que invoca o comportamento polimórfico em
relação aos tipos de objeto para os quais as mensagens são enviadas.
Resolução:
O polimorfismo traz flexibilidade ao código, permitindo uma independência
entre o objeto-cliente e os objetos com comportamento polimórfico, já que o
acoplamento/binding entre o método polimórfico chamado pelo objeto-cliente
e a implementação correta do método a ser executado será feita em tempo de
execução.
Gabarito: Certo.
35- (2018 - STM - Técnico Judiciário - Programação de Sistemas)
Julgue o item seguinte, a respeito de programação orientada a objetos.
Um recurso de grande utilidade nesse tipo de programação consiste na
possibilidade de um objeto exercer o comportamento de outro objeto.
Resolução:
Na POO, a afirmação feita pelo item pode ocorrer de duas formas. Por meio de
herança, já que um objeto da subclasse pode executar um método definido na
superclasse; ou via delegação de responsabilidade, pois um determinado
objeto pode possuir como atributo outro objeto e delegar a execução de
alguma funcionalidade a esse outro objeto em vez desse próprio objeto
determinado implementar a funcionalidade.
Gabarito: Certo.
36- (2018 - STM - Técnico Judiciário - Programação de Sistemas)
Julgue o item seguinte, a respeito de programação orientada a objetos.
O tipo de herança mais eficiente e indicado é a herança de implementação,
pois possibilita que uma nova classe reutilize a implementação de outra classe
sem a necessidade de se recortar e colar o código de forma manual, tornando
o código automaticamente disponível, como parte da nova classe.
Resolução:
Primeiramente, temos que conceituas herança de implementação e
herança de interface. O primeiro se refere a herdar todo o código da
superclasse, não precisando escrever mais código para utilizá-lo, ou seja,
estamos falando de reutilização de código. É a definição geralmente usada
quando se utiliza apenas o termo herança. Já na herança de interface, herda-
se apenas as assinaturas de métodos e propriedades, não herdando código de
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 64 de 109
www.exponencialconcursos.com.br
implementação dos métodos, assim devemos escrever o código das
assinaturas de métodos herdadas. O item peca ao dizer que a herança de
implementação (extends, em Java) é o tipo mais eficiente, pois a herança de
interface (implements, em Java) é mais aconselhada, já que ela diminui o
acoplamento entre as classes.
Gabarito: Errado.
37- (2018 - STM - Técnico Judiciário - Programação de Sistemas)
Julgue o item seguinte, a respeito de programação orientada a objetos.
O encapsulamento permite que um programa seja dividido em várias partes
menores; contudo, as partes tornam-se dependentes umas das outras em
relação à implementação e em relação ao trabalho realizado.
Resolução:
O encapsulamento permite que um programa seja dividido em várias partes
menores; contudo, as partes tornam-se dependentes independentes umas das
outras em relação à implementação e em relação ao trabalho realizado. O
encapsulamento, ao esconder os detalhes da implementação de um
objeto, traz como benefício a possibilidade de mudança da implementação do
objeto (para corrigir erros, aumentar performance, etc.) sem que seja
necessário modificar o código do cliente.
Gabarito: Errado.
38- (2018 - STM - Técnico Judiciário - Programação de Sistemas)
Julgue o item seguinte, a respeito de programação orientada a objetos.
O estado interno de um objeto pode ser alterado por meio de métodos
assessores.
Resolução:
Os métodos podem ser classificados em dois tipos. Os métodos acessores (ou
assessores, há divergência quanto a escrita correta) são usados para leitura
de atributos, ou seja, eles dão acesso aos dados internos de um objeto. São
os chamados métodos getters em Java. Os métodos mutantes são usados
para escrita de atributos, ou seja, eles podem modificar o estado interno de
um objeto. São os chamados métodos setters em Java. Assim, o correto seria:
o estado interno de um objeto pode ser alterado por meio de métodos
assessores mutantes.
Gabarito: Errado.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 65 de 109
www.exponencialconcursos.com.br
39- (CESPE - 2017 - SEDF - Professor de Educação Básica -
Informática) A respeito das características da programação orientada a
objetos, julgue o item subsequente.
Com a utilização do conceito de polimorfismo, sempre que uma nova
funcionalidade for criada ou modificada, a aplicação deve ser compilada.
Resolução:
O polimorfismo pode ser estático (Overloading) ou dinâmico (Overriding).
Quando a questão falar genericamente de polimorfismo, geralmente ela está
tratando do tipo dinâmico. Nesse tipo, a ligação/binding entre o método
chamado e a implementação a ser executada é feita em tempo de execução.
Assim, se uma nova implementação polimórfica surgir, a classe que a usa não
precisará ser recompilada, já que a ligação/binding não é em tempo de
compilação. Porém, da forma que o Cespe escreveu, dá a entender que
nenhuma classe da aplicação precisaria ser (re)compilada ao ciar/modificar
uma funcionalidade, o que é contra intuitivo. Assim, creio que o erro da
questão é dizer que sempre terá que compilar, quando na verdade a classe
que utiliza o método polimórfico não precisa ser recompilada.
Gabarito: Errado.
40- (CESPE - 2017 - SEDF - Professor de Educação Básica -
Informática) A respeito das características da programação orientada a
objetos, julgue o item subsequente.
No encapsulamento com acesso protegido aos métodos, o acesso se restringe
apenas à própria classe e suas subclasses.
Resolução:
Em UML e POO (independentemente de linguagem), há uma pequena
diferença com relação a tabela acima, que se aplica ao Java: no protected
(protegido), não há acesso às classes no mesmo pacote, apenas à própria
classe e às subclasses.
Gabarito: Certo.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 66 de 109
www.exponencialconcursos.com.br
41- (CESPE - 2017 - TRE-TO - Técnico Judiciário - Programação de
Sistemas) Na orientação a objetos, a alteração do comportamento dos
métodos herdados das superclasses para um comportamento mais específico
nas subclasses, de forma a se criar um novo método na classe filha que
contém a mesma assinatura e o mesmo tipo de retorno, relaciona-se a
a) sobrecarga.
b) overloading.
c) portabilidade.
d) abstração.
e) sobrescrita.
Resolução:
A sobrescrita está relacionada com a herança e ocorre quando uma
subclasse herda um método da superclasse e essa subclasse altera o
comportamento desse método, em outras palavras, reescreve
(sobrescreve, override) esse método. No caso, a subclasse reimplementa
o método herdado declarando a mesma assinatura, mas implementando-o de
maneira diversa, mais específica.
Gabarito: Letra E.
42- (CESPE - 2017 - TRE-TO - Técnico Judiciário - Programação de
Sistemas) Assinale a opção que apresenta o mecanismo a partir do qual os
detalhes da implementação dos métodos de uma classe são ocultos dos
usuários da classe.
a) herança múltipla
b) especialização
c) herança simples
d) classe abstrata
e) encapsulamento
Resolução:
Encapsulamento é o mecanismo das linguagens OO que permite encapsular,
isto é, esconder os atributos de uma classe, além de esconder como
funcionam as rotinas (no caso, métodos) do nosso sistema. Está
relacionado com a ocultação de informação, o que envolve impedir o
acesso direto aos atributos dos objetos e também esconder os detalhes
de implementação dos métodos.
Gabarito: Letra E.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 67 de 109
www.exponencialconcursos.com.br
43- (CESPE - 2017 - TRT - 7ª Região (CE) - Analista Judiciário -
Tecnologia da Informação) Acerca de orientação a objetos, assinale a
opção correta.
a) Os desenvolvedores de um sistema devem ter como objetivo a construção
de classes com baixa coesão e alto acoplamento.
b) O polimorfismo caracteriza-se pela possibilidade de vários métodos terem o
mesmo nome, porém com assinaturas diferentes.
c) Membros de dados podem ser acessados diretamente, mas somente podem
ser alterados por meio de métodos específicos.
d) Na agregação, diversos objetos distintos são reunidos para compor um
novo objeto.
Resolução:
a) Incorreto: Os desenvolvedores de um sistema devem ter como objetivo a
construção de classes com baixa alta coesão e alto baixo acoplamento.
b) Incorreto: O polimorfismo A sobrecarga (overloading) caracteriza-se pela
possibilidade de vários métodos terem o mesmo nome, porém com
assinaturas diferentes. Apesar de sobrecarga ser um tipo de polimorfismo,
geralmente as bancas, quando citam apenas a palavra polimorfismo, estão se
referindo ao polimorfismo relacionado à sobrescrita e herança, o tipo mais
comum. Nesse tipo de polimorfismo, os métodos sobrescritos têm a mesma
assinatura, mas comportamentos diferentes.
c) Incorreto: Segundo o princípio do encapsulamento, membros de dados
(atributos) não podem ser acessados diretamente.
d) Correto: Uma Associação descreve um vínculo que ocorre entre objetos.
A Agregação é um tipo especial de associação que especifica que as
informações de um objeto (chamado objeto-todo) precisam ser
complementadas pelas informações contidas em um ou mais objetos de outra
classe (chamados objetos-parte), ou seja, cria uma relação todo/parte. O
objeto-pai poderá usar as informações do objeto agregado. Assim, um objeto
poderá agregar uma ou mais instâncias de outro objeto. Existe também a
Composição, uma variação da agregação. Ela também representa uma
relação todo/parte. No entanto, na composição o objeto-pai (todo) é
responsável por criar e destruir suas partes e um objeto-parte deve possuir
um, e somente um, objeto-pai.
Gabarito: Letra D.
44- (CESPE - 2017 - TRT - 7ª Região (CE) - Analista Judiciário -
Tecnologia da Informação)
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 68 de 109
www.exponencialconcursos.com.br
No trecho de código apresentado, está em uso o conceito de orientação a
objeto do tipo
a) polimorfismo.
b) interface.
c) associação.
d) herança.
Resolução:
Apesar de a questão trazer um exemplo numa linguagem específica (no caso,
C#), podemos resolvê-la apenas com os conhecimentos básicos de linguagens
de programação e POO. Repare que foi criada uma classe Bicho e, em seguida,
associada à classe Bixo, foi criada a classe Gato. Notamos que um Gato é um
Bicho, ou seja, um Gato possui/herda as características comuns a todos os
bixos. Portanto, trata-se do conceito de herança.
Gabarito: Letra D.
45- (CESPE - 2016 - TCE-PR - Analista de Controle - Tecnologia da
Informação) Em se tratando de orientação a objetos, o polimorfismo refere-
se
a) ao reconhecimento do comportamento variado de um método, o que
melhora o aproveitamento do código.
b) à transmissão dos métodos e atributos de uma classe para suas subclasses,
quando ad hoc.
c) à variação das saídas de um método com relação às entradas recebidas,
caso em que é considerado universal.
d) ao uso que um objeto faz dos recursos de outro objeto.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 69 de 109
www.exponencialconcursos.com.br
e) à utilização de métodos específicos para manipular dados com proteção por
meio de encapsulamento.
Resolução:
a) Correto: como a questão falou de polimorfismo de forma genérica, então
se trata do tipo que está associado à sobrescrita (overriding) e herança, o qual
permite que classes derivadas de uma mesma superclasse possam invocar
métodos que têm a mesma identificação (assinatura), mas comportamentos
distintos, o que melhora o aproveitamento do código.
b) Incorreto: misturou o conceito de herança (transmissão dos métodos e
atributos de uma classe para suas subclasses) com um tipo de polimorfismo
(ad hoc).
c) Incorreto: está relacionado ao conceito de sobrecarga (overloading), pois
dependendo dos tipos/quantidades das entradas/parâmetros de um método, a
implementação a ser executada será diferente e, consequentemente, a saída
também variará.
d) Incorreto: está relacionado à associação (agregação e composição) e troca
de mensagens.
e) Incorreto: esse item citou uma das diretrizes que o encapsulamento
prega, qual seja, permitir a modificação/manipulação de atributos/dados via
métodos específicos, e não diretamente.
Gabarito: Letra A.
46- (CESPE - 2016 - FUB - Técnico de Tecnologia da Informação) A
respeito dos conceitos de análise orientada a objetos em engenharia de
software, julgue o seguinte item.
O conjunto de valores das características de determinado objeto é
denominado estado.
Resolução:
Objeto é algo que possui uma identidade única, um estado e comportamento.
O estado normalmente é implementado por meio de seu conjunto de
propriedades (denominados atributos), com os valores das propriedades, mais
as ligações que o objeto pode ter com outros objetos. Em suma, estado é o
conjunto de valores dos atributos do objeto em determinado instante.
Gabarito: Certo.
47- (CESPE - 2016 - FUB - Técnico de Tecnologia da Informação) A
respeito dos conceitos de análise orientada a objetos em engenharia de
software, julgue o seguinte item.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 70 de 109
www.exponencialconcursos.com.br
Denomina-se polimorfismo o fato de duas ou mais classes de superclasses
diferentes possuírem um método com a mesma assinatura, mas com
comportamentos diferentes.
Resolução:
A questão estaria correta se não fosse por um detalhe: as classes que
possuem o método com a mesma assinatura devem herdar da mesma
superclasse, e não de superclasses diferentes. Assim, o correto seria:
denomina-se polimorfismo o fato de duas ou mais classes de superclasses
diferentes da mesma superclasse possuírem um método com a mesma
assinatura, mas com comportamentos diferentes.
Gabarito: Errado.
48- (CESPE - 2016 - TCE-PA - Auditor de Controle Externo - Área
Informática - Analista de Sistema) A propósito de análise e projeto
orientados a objetos, julgue o item subsequente.
Objetos são componentes reusáveis, pois encapsulam um conjunto de
atributos e operações que fornecem serviços a outros objetos.
Resolução:
Um objeto é algo que possui uma identidade única, um estado (formado pelo
conjunto de valores dos seus atributos) e comportamento (operações,
métodos, os quais são utilizados por outros objetos, por meio de troca de
mensagens, para interagirem).
Gabarito: Certo.
49- (CESPE - 2015 - TRE-RS - Analista Judiciário - Análise de
Sistemas) Considere três classes: Prova, Questão e PerguntaSimples. A
classe Prova tem os atributos Data e Assunto, além do método criar(..). A
classe Questão tem os atributos NúmeroDaQuestão e Pergunta, além do
método asssociarÀprova(..). A classe PerguntaSimples tem os atributos
RespostaCerta e Referência, além do método corrigir(..). De acordo com essa
descrição, é possível identificar entre as classes Prova e Questão e entre as
classes Questão e PerguntaSimples, respectivamente, os seguintes conceitos
da orientação a objetos.
a) especialização e agregação
b) herança e especialização
c) agregação e decomposição
d) agregação e especialização
e) classificação e decomposição
Resolução:
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 71 de 109
www.exponencialconcursos.com.br
O conceito de herança está relacionado com as relações de
especialização/generalização e a agregação é um tipo especial de associação
que especifica que as informações de um objeto (chamado objeto-todo)
precisam ser complementadas pelas informações contidas em um ou mais
objetos de outra classe (chamados objetos-parte), ou seja, cria uma relação
todo/parte. Pelo enunciado, notamos que a classe Prova é composta por um
conjunto de questões, tanto é que a classe Prova possui o método
asssociarÀprova(..). Logo, temos um relacionamento de agregação. Além do
mais, a classe PerguntaSimples é uma Questão, e esse relacionamento ―é-um‖
está relacionado com herança, o qual, por sua vez, está relacionado com
especialização/generalização. Mais especificamente: PerguntaSimples é uma
especialização de Questão.
Gabarito: Letra D.
50- (CESPE - 2015 - TRE-MT - Analista Judiciário - Análise de
Sistemas) No que se refere à modelagem orientada a objetos, assinale a
opção correta.
a) No processo de encapsulação, toda a informação é empacotada sob um
nome, podendo ser reutilizada com uma especificação ou componente de
programa.
b) Em uma herança, as subclasses se tornam mais genéricas e a junção de
todas as subclasses resultam na superclasse.
c) Entidades externas, diferentemente das ocorrências, podem ser
classificadas como objetos.
d) Na característica serviços necessários, o objeto em potencial será útil
durante a análise somente se a informação sobre ele precisar ser lembrada
para que o sistema possa funcionar.
e) O polimorfismo está diretamente associado a um atributo por meio de uma
referência a subclasse.
Resolução:
a) Correto: Apesar de a banca ter escrito ―encapsulação‖ em vez de
―encapsulamento‖, este foi o item dado como correto. Uma das definições de
encapsulamento é agrupar o estado de objetos (as variáveis da classe) e seus
comportamentos (os métodos da classe) em conjuntos segundo o seu grau de
relação, organizando os dados que sejam relacionados, agrupando-os
(encapsulando-os) em objetos (classes), reunindo métodos relacionados às
suas propriedades.
b) Incorreto: Em uma herança, as subclasses se tornam mais genéricas
específicas e a junção de todas as subclasses resultam na superclasse (sem
sentido).
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 72 de 109
www.exponencialconcursos.com.br
c) Incorreto: Entidades externas, diferentemente das assim como as
ocorrências, podem ser classificadas como objetos. Um objeto pode
representar uma entidade, tanto física quanto conceitual ou de software.
d) Incorreto: item que, só por trazer conceitos misturados e aparentemente
sem sentido, já mostra que possivelmente está errado. Adicionalmente, o item
traz a palavra ―somente‖, o que reforça a hipótese anterior.
e) Incorreto: A definição apresentada não possui relação com polimorfismo,
já que ele é a possibilidade de duas ou mais classes derivadas de uma mesma
superclasse poderem implementar métodos que têm a mesma identificação
(assinatura), mas comportamentos distintos, e a implementação a ser
executada ser escolhida em tempo de execução.
Gabarito: Letra A.
51- (CESPE - 2015 - Telebras - Engenheiro - Engenharia da
Computação) Julgue o item subsequente, referentes à programação
orientada a objeto.
O polimorfismo permite a associação de um único nome ou operador a
diferentes operações — dependendo do tipo do dado considerado — e a
redefinição de um método dentro de uma classe derivada.
Resolução:
Como a questão falou de polimorfismo de forma genérica, então se trata do
tipo que está associado à sobrescrita (overriding) e herança, o qual permite
que classes derivadas de uma mesma superclasse possam
redefinir/sobrescrever métodos que têm a mesma assinatura, mas
comportamentos distintos. A assinatura desse método é o que o item chama
de ―um único nome ou operador‖ e as ―diferentes operações‖ são as
implementações diversas desses métodos.
Gabarito: Certo.
52- (CESPE - 2015 - TJ-DFT - Analista Judiciário - Analista de
Sistemas) Acerca de análise e projetos orientados a objetos, julgue o item
que segue.
A combinação de dados com o código que os manipula em um único objeto é
denominada encapsulamento.
Resolução:
Encapsulamento pode se referir tanto a esconder os detalhes da
implementação de um objeto (não permitir acesso direto aos atributos),
quanto a agrupar o estado de objetos (as variáveis da classe) e seus
comportamentos (os métodos da classe) em conjuntos segundo o seu grau de
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 73 de 109
www.exponencialconcursos.com.br
relação, em outra palavras, é organizar os dados que sejam relacionados,
agrupando-os (encapsulando-os) em objetos (classes).
Gabarito: Certo.
53- (CESPE - 2015 - TJ-DFT - Analista Judiciário - Analista de
Sistemas) Acerca de análise e projetos orientados a objetos, julgue o item
que segue.
Recurso de classes é a propriedade dos objetos que viabiliza a implementação
de hierarquia entre objetos.
Resolução:
Quem viabiliza a implementação de hierarquia entre objetos é o mecanismo de
herança, um dos pilares da POO. ―Recurso de classe‖ parece ter sido um
termo inventado pela banca para confundir o candidato.
Gabarito: Errado.
54- (CESPE - 2015 - MEC - Analista de Teste e Qualidade) Com relação
à orientação a objetos, julgue o item subsecutivo.
O foco da orientação a objetos está nos procedimentos a serem contemplados
pelo sistema e nas informações que este manipulará e(ou) armazenará.
Resolução:
A POO é um paradigma de programação baseado no conceito de objetos, os
quais contêm campos de dados (atributos) e procedimentos (métodos). Na
POO, os programas de computador são projetados como um conjunto de
objetos que interagem uns com os outros. Quem foca em procedimentos e
informações/dados é o paradigma procedural.
Gabarito: Errado.
55- (CESPE - 2015 - MEC - Analista de Teste e Qualidade) Com relação
à orientação a objetos, julgue o item subsecutivo.
Em um sistema bem elaborado, os métodos são o único meio de se interagir
com os objetos.
Programação OO
Objeto
Atributos
(dados)
Métodos
(funções)
Programação
Estruturada
Dados Funções
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 74 de 109
www.exponencialconcursos.com.br
Resolução:
Segundo o principio do encapsulamento, deve-se esconder os atributos de
uma classe, ou seja, não se deve permitir acesso direto aos atributos de uma
classe. Assim, os métodos (interface pública da classe) devem ser o único
meio de se interagir com os objetos.
Gabarito: Certo.
56- (CESPE - 2015 - TCE-RN - Assessor Técnico de Informática - Cargo
1) No que se diz respeito a análise, projeto e modelagem orientada para
objeto e linguagem de modelagem unificada (UML), julgue o item que se
segue.
O processo de herança permite a reutilização de código, como também o
reaproveitamento de atributos e métodos. Assim, em aplicações que utilizam
herança, a obtenção de polimorfismo é uma possibilidade.
Resolução:
A reutilização de código é um dos principais benefícios da herança, pois ela
permite que as subclasses (classes derivadas, classes-filhas) herdem os
atributos e métodos de uma superclasse (classe-mãe). Além do mais,
polimorfismo está intimamente relacionado com herança.
Gabarito: Certo.
57- (CESPE - 2015 - STJ - Analista Judiciário - Análise de Sistemas de
Informação) Julgue o item subsequente, acerca da linguagem de
programação Delphi e da programação orientada a objetos.
O princípio da responsabilidade única estabelece que uma classe deva
executar apenas uma tarefa; dessa forma, caso uma classe possua mais uma
responsabilidade, deve-se considerar sua decomposição em duas ou mais
classes.
Resolução:
Coesão e Acoplamento são princípios de engenharia de software intimamente
relacionados que possibilitam melhorar o design do software, o que, por sua
vez, melhora a legibilidade e manutenibilidade. Coesão está relacionada ao
princípio da responsabilidade única, o qual afirma que uma classe deve ter
apenas uma única responsabilidade e realizá-la de maneira satisfatória, em
outras palavras, uma classe não deve assumir responsabilidades que não são
suas. Caso uma classe esteja com mais de uma responsabilidade, para
melhorar a coesão, deve-se separa essas responsabilidades em classes
distintas.
Gabarito: Certo.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 75 de 109
www.exponencialconcursos.com.br
58- (CESPE - 2015 - STJ - Analista Judiciário - Análise de Sistemas de
Informação) Julgue o item subsequente, acerca da linguagem de
programação Delphi e da programação orientada a objetos.
O encapsulamento, característica da programação orientada a objetos, é uma
técnica utilizada para ocultar os detalhes da implementação de um objeto.
Resolução:
A POO possui um conjunto de pilares (princípios fundamentais, conceitos
básicos). São eles: abstração, encapsulamento, herança e polimorfismo. O
encapsulamento está relacionado com a ocultação de informação, o que
envolve impedir o acesso direto aos atributos dos objetos e também esconder
os detalhes de implementação dos métodos.
Gabarito: Certo.
59- (CESPE - 2015 - FUB - Engenheiro - Mecatrônica) A respeito de
análise de algoritmos, programação estruturada e orientada a objetos e
estruturas de dados, julgue o item a seguir.
Os conceitos de classe, método, abstração, encapsulamento, associação,
herança e polimorfismo são derivados da programação estruturada, cuja
característica é estabelecer um processo de desenvolvimento de algoritmos
independentemente da linguagem de programação a ser utilizada na
codificação.
Resolução:
Os conceitos de classe, método, abstração, encapsulamento, associação,
herança e polimorfismo são derivados da programação estruturada
programação orientada a objetos (POO). Além do mais, a segunda parte da
questão (―cuja característica...‖) não está relacionada nem a POO, nem a
programação estruturada. Está mais relacionada ao RUP (Rational Unified
Process), pois ele é um ―processo de desenvolvimento‖ que tem como uma
das características ser ―independente da linguagem de programação‖.
Gabarito: Errado.
60- (CESPE - 2015 - FUB - Analista de Tecnologia da Informação) A
respeito de programação orientada a objetos e bancos de dados, julgue o
item a seguir.
Diferentemente da programação estruturada, a programação orientada a
objetos baseia-se em classes, as quais possuem atributos e métodos
acoplados.
Resolução:
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 76 de 109
www.exponencialconcursos.com.br
A Programação Orientada a Objetos (POO) é uma maneira de programar que
resolve muitos problemas enfrentados pela programação procedural. A POO é
um paradigma de programação baseado no conceito de objetos, os quais
contêm campos de dados (atributos) e procedimentos (métodos). A classe é a
descrição de um grupo de objetos com propriedades similares (atributos) e
comportamento comum (operações, métodos).
Gabarito: Certo.
61- (CESPE - 2010 - Banco da Amazônia - Arquitetura de Tecnologia)
Quanto aos conceitos de linguagens de programação, julgue o item que se
segue.
A herança é um conceito implementado por todas as linguagens de
programação orientadas a objeto. No entanto, algumas delas somente
permitem o uso de herança simples, não sendo possível a criação de classes
por meio de herança múltipla.
Resolução:
A herança é um dos pilares da POO, portanto deve ser implementada por
todas as linguagens orientadas a objetos. Existem dois tipos: herança simples
(classe herda características somente de uma outra) e herança múltipla
(classe herda de duas ou mais classes). Algumas linguagens não permitem a
utilização de herança múltipla, a exemplo da linguagem Java e C#.
Gabarito: Certo.
62- (CESPE - 2015 - TRE-GO - Técnico Judiciário - Programação de
Sistemas) A respeito de desenvolvimento e manutenção de sistemas, julgue
o item seguinte.
No desenvolvimento mediante a utilização da metodologia estruturada, têm-se
os dados e as funções separados; já na orientação a objeto, os objetos são
compostos de dados e das funções que os modificam, podendo interagir entre
eles por meio da troca de mensagens.
Resolução:
A Programação Orientada a Objetos (POO) é uma maneira de programar que
resolve muitos problemas enfrentados pela programação procedural. A POO é
Programação OO
Objeto
Atributos
(dados)
Métodos
(funções)
Programação
Estruturada
Dados Funções
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 77 de 109
www.exponencialconcursos.com.br
um paradigma de programação baseado no conceito de objetos, os quais
contêm campos de dados (atributos) e funções (procedimentos, operações,
métodos). A classe é a descrição de um grupo de objetos com atributos e
métodos comuns, os quais se comunicam (interagem) por meio de troca de
mensagens (chamada de métodos).
Gabarito: Certo.
63- (CESPE - 2013 - TRT - 17ª Região (ES) - Analista Judiciário -
Tecnologia da Informação) Acerca da orientação a objetos, julgue o item
seguinte.
Ao se criar um objeto, seus atributos são acessados por qualquer outro objeto,
sem restrições.
Resolução:
A POO possui um conjunto de pilares: abstração, encapsulamento, herança e
polimorfismo. O encapsulamento está relacionado com a ocultação de
informação, o que envolve impedir o acesso direto aos atributos dos
objetos e também esconder os detalhes de implementação dos métodos.
Gabarito: Errado.
64- (CESPE - 2014 - TJ-SE - Analista Judiciário - Banco de Dados)
Tendo como base os padrões de projeto de software, julgue os itens a seguir.
O polimorfismo na programação orientada a objetos é caracterizado quando
duas ou mais classes distintas têm métodos de mesmo nome, de forma que
uma função possa utilizar um objeto de qualquer uma das classes
polimórficas, sem necessidade de tratá-lo de forma diferenciada conforme a
classe desse objeto.
Resolução:
Quando a questão falar genericamente de polimorfismo, geralmente ela está
tratando do tipo dinâmico (overriding), o qual permite que duas ou mais
classes da mesma superclasse possuam um método com a mesma assinatura,
mas com comportamentos diferentes. Isso traz flexibilidade ao código,
permitindo uma independência entre o objeto-cliente e os objetos com
comportamento polimórfico, já que o acoplamento/binding entre o método
polimórfico chamado pelo objeto-cliente e a implementação correta do método
a ser executado será feita em tempo de execução, dispensando um
tratamento diferenciado para cada subclasse.
Gabarito: Certo.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 78 de 109
www.exponencialconcursos.com.br
65- (CESPE - 2014 - TJ-SE - Analista Judiciário - Banco de Dados) No
que diz respeito aos modelos hierárquico, relacional, de entidade-
relacionamento e de modelagem orientada a objeto, julgue os itens a seguir.
Na modelagem orientada a objetos, o conceito de herança permite que uma
subclasse herde tanto operações quanto propriedades.
Resolução:
Na herança, dizemos que a classe subclasse (classe filha) herda todos os
atributos e métodos da classe mãe (superclasse). Além de a classe filha
herdar os atributos e métodos da classe mãe, a classe filha ainda pode definir
novos métodos e atributos.
Gabarito: Certo.
66- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Acerca de conceitos básicos e tratamentos de exceção em programação
orientada a objetos, julgue o item subsequente.
Se o sistema de informação tiver uma consulta sobre o estado de conservação
do automóvel, será considerado que o estado é um atributo do objeto carro.
Resolução:
No mundo real, qualquer objeto possui características que o definem. E
características são nomeadas de atributos. Repare que ―estado de
conservação‖ é uma característica, e não um comportamento, do carro.
Portanto, é um atributo.
Gabarito: Certo.
67- (CESPE - 2016 - FUB - Técnico de Tecnologia da Informação) A
respeito dos conceitos de análise orientada a objetos em engenharia de
software, julgue o seguinte item.
Uma das vantagens de se utilizar encapsulamento em orientação a objetos é
impedir o acesso direto aos atributos de um objeto.
Resolução:
Encapsulamento está relacionado com a ocultação de informação, o que
envolve impedir o acesso direto aos atributos dos objetos e também
esconder os detalhes de implementação dos métodos.
Gabarito: Certo.
68- (CESPE - 2015 - Telebras - Engenheiro - Engenharia da
Computação) Julgue o item subsequente, referente à programação orientada
a objeto.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 79 de 109
www.exponencialconcursos.com.br
A herança permite a extensão de uma classe existente, mas requer a
repetição ou a reescrita do código original.
Resolução:
A herança permite a extensão de uma classe existente, mas requer e não
requer a repetição ou a reescrita do código original. A herança otimiza a
produção da aplicação em tempo e linhas de código, ou seja, aumenta a
reusabilidade do código. Usando herança, a subclasse herda todos os
atributos e métodos da(s) superclasse(s).
Gabarito: Errado.
69- CESPE - 2015 - STJ - Técnico Judiciário - Tecnologia da
Informação) No que concerne a análise, projeto e modelagem orientada a
objetos, julgue o item que se segue.
O polimorfismo de objeto pode criar objetos que herdam comportamento de
uma classe e pode possibilitar que o desenvolvedor programe um
comportamento diferente para os métodos de classes existentes, mas, para
que seja da forma sobrescrita, o polimorfismo precisa possuir a mesma
assinatura.
Resolução:
Essa é a definição mais comum de polimorfismo, a definição relacionada à
herança e à posterior sobrescrita de método herdado. É o tipo de polimorfismo
conhecido como polimorfismo Universal por Inclusão. Caracteriza-se
quando duas ou mais classes derivadas de uma mesma superclasse podem
invocar métodos que têm a mesma identificação (assinatura), mas
comportamentos distintos.
Gabarito: Certo.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 80 de 109
www.exponencialconcursos.com.br
5. RISCO EXPONENCIAL
Diferença entre Programação Estruturada e Programação
Orientada a Objetos
Introdução à Programação Orientada a Objetos (POO).
Programação OO
Objeto
Atributos
(dados)
Métodos
(funções)
Programação
Estruturada
Dados Funções
Programação Orientada a
Objetos (POO)
Resolve probelmas do paradigma de programação procedural
Objetos contêm dados
(atributos) e procedimentos
(métodos)
Programa é um conjunto de objetos
que interagem entre si
Aproxima o mundo
computacional do mundo real
Vantagens: reusabilidade,
manutenibilidade, extensibilidade,
programação natural e
confiabilidade
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 81 de 109
www.exponencialconcursos.com.br
Diferença entre Classe e Objeto.
Atributos e Métodos.
Classe
•Agrupamento de atributos e métodos comuns a um conjunto de objetos
•Descrição de um grupo de objetos com atributos e comportamentos similares
•Padrão/molde/modelo para a construção dos objetos
Objeto
•Possui identidade única, estado (conjunto de valores dos atributos) e comportamento
•É uma instância de uma classe
•Interagem entre si pela troca de mensagens (chamadas de métodos)
Atributos
• Características dos objetos que o definem
• Também conhecidos como campos, membros, variáveis ou propriedade
• Classificados em atributos de classe e atributos de instância
Métodos
• Ações ou eventos realizados pelos objetos
• Também conhecidos como procedimentos, operações ou funções
• Classificados em métodos de classe e métodos de instância
• Pode receber algum tipo de informação (entrada), chamada de parâmetro ou argumento
• Pode devolver alguma informação, chamada de (valor de) retorno
• Assinatura do método = tipo de retorno + nome + tipo/quantidade dos parâmetros
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 82 de 109
www.exponencialconcursos.com.br
Mensagem.
Tipos de Polimorfismo.
Mensagem
Meio de comunicação dos objetos
em tempo de execução
Na prática, representa
uma chamada de
método
Objetos interagem
por meio da "troca de
mensagens"
Tipos de Polimorfismo
Universal
Por Inclusão Paramétrico
Ad-hoc
Coerção Sobrecarga
(overloading)
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 83 de 109
www.exponencialconcursos.com.br
Pilares da POO.
Pil
ares d
a P
OO
Abstração
Preocupar-se com as principais propriedade
Desconsiderar características que não são importantes
Abstrair os objetos do mundo real em termos de identidade, atributos e métodos
Encapsulamento
Esconder os atributos e métodos da classe
Esconder os detalhes de implementação
Não permitir acesso direto aos atributos
Agrupar características e comportamentos relacionados em objetos
Herança
Permite que uma classe herde atributos e comportamentos de outra classe
Relação de classe mãe/filha, superclasse/subclasse, generalização/especialização e relação "é-um"
Herança simples e múltipla
Polimorfismo
"muitas formas"
Permite uma subclasse ser referenciada como sua superclasse
Permite que classes derivadas de uma mesma superclasse tenham métodos de mesma assinatura, mas comportamentos
diferentes
Ligação tardia (late binding) em tempo de execução
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 84 de 109
www.exponencialconcursos.com.br
Tabela dos modificadores e níveis de acesso.
Diferença entre sobrecarga e sobrescrita.
Overriding
Subclasse reescreve/redefine um método da superclasse
Mesmo nome, mesma assinatura
Binding/ligação em tempo de execução
Overloading
Mesma classe define mais de um método de mesmo nome, mas tipo/quantidade de parâmetros diferente
Mesmo nome, assinaturas diferentes
Binding/ligação em tempo de compilação
So
brescrit
a S
ob
recarg
a
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 85 de 109
www.exponencialconcursos.com.br
Classe Abstrata.
Classe Abstrata
Apenas idealiza um tipo, define apenas um rascunho
Define um modelo
incompleto, com funcionalidades
genérias a serem implementadas pelas classes
filhas
Serve para obter
polimorfismo e possibilitar herança dos
seus atributos e métodos
Não permite instanciar objetos
diretamente
Oposto das classe
concretas
Pode especificar um
ou mais métodos
abstratos: aquele sem
corpo, apenas assinatura
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 86 de 109
www.exponencialconcursos.com.br
Coesão e Acoplamento.
É a relação existente entre as responsabilidades de uma determinada classe e de seus métodos
Uma classe não deve assumir responsabilidade que não são suas
Deve-se buscar uma alta coesão
É o grau de dependência entre duas classes
Representa o quanto uma classe depende de outra(s) para funcionar
Deve-se buscar um baixo acoplamento
Coesão
Acopla
mento
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 87 de 109
www.exponencialconcursos.com.br
Interface.
Interface
Pode também significar o conjunto de
métodos públicos de uma classe
Garante a existência de
implementação de
determinado(s) método(s) em determinada(s)
classe(s).
Cria-se um "contrato" para que uma classe
adquira determinado
status, qualidade
Pode definir uma série de
métodos, mas nunca conter a implementação
deles
Objetiva flexibilizar o
código e possibilitar
mudança de implementação
com baixo impacto
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 88 de 109
www.exponencialconcursos.com.br
6. LISTAS DE EXERCÍCIOS
Questões comentadas durante a aula.
1- (CESPE - 2017 - SEDF - Professor de Educação Básica -
Informática) A respeito das características da programação orientada a
objetos, julgue o item subsequente.
Um objeto define atributos, comportamentos e abstrações comuns
compartilhados por um tipo de classe.
2- (FCC - 2014 - TRT - 16ª REGIÃO (MA) - Técnico Judiciário -
Tecnologia da Informação) Bianca está desenvolvendo um software
orientado a objetos para uma aplicação do TRT 16ª Região. Esta aplicação
atenderá a diversos usuários. Um Usuario será modelado como ...I..... ,
possuindo as seguintes características ou ..II..... :
- Nome
- Endereço
- Telefone
- CPF
Um usuário pode realizar ações. Cada usuário é identificado de forma única,
mas possuindo as mesmas características descritas acima. Assim, cada
usuário será ...III..... e poderá executar as seguintes ações ou ..IV.. :
- EnviarPedido
- LerRespostaPedido
- ConsultarAndamento
As lacunas I, II, III e IV são, correta e respectivamente, preenchidas por:
a) uma abstração - métodos - instanciado como um objeto que herda da
classe - interfaces.
b) um objeto - métodos - uma classe - enviar as mensagens.
c) uma classe - atributos - um objeto da classe Usuario - métodos.
d) uma classe - variáveis - um objeto que herda da classe Usuario - trocas de
mensagens.
e) um objeto - variáveis - instanciado - enviar as mensagens.
3- (CESPE - 2015 - MEC - Analista de Teste e Qualidade) Com relação
à orientação a objetos, julgue o item subsecutivo.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 89 de 109
www.exponencialconcursos.com.br
Objetos são definidos como entidades da modelagem de sistemas que
armazenam estados com a utilização de atributos dos próprios objetos, sem
interação com outros objetos por meio de mensagens.
4- (FCC - 2013 - AL-RN - Analista Legislativo - Analista de Sistemas)
Em orientação a objetos, o processo ou resultado de generalização por
redução do conteúdo da informação de um conceito ou fenômeno observável,
normalmente para reter apenas a informação que é relevante para um
propósito particular é chamado de
a) agregação.
b) abstração.
c) polimorfismo.
d) encapsulamento.
e) modelagem lógica.
5- (FCC - 2016 - Prefeitura de Teresina - PI - Analista Tecnológico -
Analista de Suporte Técnico) Na Orientação a Objetos há um conceito
bastante utilizado que é o encapsulamento, que corresponde a
a) não suportar a divisão do programa em mais do que um arquivo físico.
b) limitar o número de classes de um programa orientado a objetos, conforme
o porte do sistema.
c) ocultar os detalhes da implementação dos métodos de uma determinada
classe de outras classes.
d) criptografar o código das classes que possuem a propriedade do
encapsulamento.
e) compactar o código fonte gerado, de forma a diminuir seu tamanho físico.
6- (FCC - 2013 - MPE-MA - Analista Ministerial - Análise e
Desenvolvimento de Sistemas) Na orientação a objetos, a herança permite
definir uma classe como uma extensão de outra classe. As vantagens de
utilizar herança são muitas e algumas delas são apresentadas abaixo. Assinale
a alternativa INCORRETA em relação às vantagens do uso de herança.
a) A herança é sempre a construção mais apropriada nos casos em que se
deseja reutilizar um código.
b) O uso de herança pode evitar a duplicação de código, pois deixa de ser
necessário escrever duas cópias idênticas ou muito semelhantes de um código
em comum.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 90 de 109
www.exponencialconcursos.com.br
c) A manutenção da aplicação fica mais fácil com o uso de herança, pois o
relacionamento entre as classes é claramente expresso. Uma alteração em um
método compartilhado entre diferentes tipos de subclasses pode ser feito
apenas uma vez.
d) Com a utilização de herança pode tornar-se mais fácil estender uma
aplicação existente.
e) Usando a herança, um código existente pode ser reutilizado. Se já existir
uma classe semelhante à que precisamos, às vezes é possível dividir a classe
existente e reutilizar o código em vez de implementar tudo novamente.
7- (FCC - 2014 - TRT - 13ª Região (PB) - Analista Judiciário -
Tecnologia da Informação) Considere o seguinte caso:
Observando o trâmite de processos no tribunal, Marta percebeu que tanto
advogados quanto juízes realizavam análises nos diversos pareceres
constantes dos processos. Com sua experiência como analista ela deduziu que
uma possível informatização dos processos poderia contemplar uma classe
chamada Advogado e outra chamada Juiz, tendo como base uma classe
comum chamada Pessoa, com um método chamado AnalisarParecer. Este
método (definido na classe comum) se comportaria de maneira diferente para
as chamadas feitas a partir de uma instância de Advogado e para as
chamadas feitas a partir de uma instância de Juiz, em razão deles terem
responsabilidades diferentes em sua forma de analisar e opinar sobre os
pareceres.
Pela observação do método e seu comportamento, o princípio da orientação a
objetos aplicável no caso, fundamentalmente, é
a) a comunicabilidade.
b) o encapsulameto
c) a visibilidade.
d) o polimorfismo.
e) a estereotipagem.
8- (FCC - 2013 - AL-RN - Analista Legislativo - Analista de Sistemas)
José foi incumbido de modelar as classes do sistema que a empresa estava
desenvolvendo. Ele se deparou com as seguintes classes:
Classe 1, que possui os atributos data de nascimento, nome, sexo e um
método para calcular a idade no calendário Gregoriano.
Classe 2, que possui os atributos data de nascimento, nome, sexo,
telefone e um método para calcular a idade no calendário Chinês.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 91 de 109
www.exponencialconcursos.com.br
Classe 3, que possui os atributos data de nascimento, nome, sexo e um
método para calcular a idade no calendário Juliano.
Por ser conhecedor de técnicas de orientação a objetos, ele propôs que fosse
criada uma classe com os atributos comuns e o método de cálculo da idade.
Sugeriu que fossem criadas classes baseadas nessa primeira e que apenas
alterassem o que não fosse comum, como a inclusão do atributo telefone e
diferentes tipos de implementação para o método do cálculo da idade. Deste
modo ele utilizou, respectivamente, as técnicas de
a) herança e polimorfismo.
b) abstração e agregação.
c) encapsulamento e abstração.
d) polimorfismo e encapsulamento.
e) abstração e herança.
9- (FCC - 2014 - SABESP - Técnico em Gestão - Informática) Na
programação orientada a objetos, em uma classe que possui os atributos id,
nome, telefone e renda, os atributos devem ser normalmente e os
métodos getters e setters devem ser normalmente . Quando um objeto
desta classe é instanciado, para incluir valores nos atributos utilizam-se os
métodos setter e para obter os valores incluídos utilizam-se os métodos
getter. Esse processo está relacionado com o que chamamos de
encapsulamento.
As lacunas I e II são preenchidas correta e, respectivamente, por
a) privados e protegidos
b) privados e públicos
c) protegidos e públicos
d) públicos e protegidos
e) públicos e privados
10- (FCC - 2017 - TRF - 5ª REGIÃO - Analista Judiciário - Informática
Desenvolvimento) Na programação orientada a objetos são utilizados
classes e métodos. Um método
a) com determinado nome não pode aparecer mais de uma vez na mesma
classe, mesmo que receba parâmetros de tipos diferentes.
b) em uma superclasse pode ser sobrescrito nas subclasses de uma relação de
herança.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 92 de 109
www.exponencialconcursos.com.br
c) em Java pode receber diversos parâmetros e ter diversas operações de
retorno consecutivas de tipos diferentes.
d) deve ter assinatura e corpo quando aparecer em uma interface Java e deve
ser público.
e) construtor em uma classe Java pode ser sobrecarregado, desde que tenha
um tipo de retorno diferente de void.
11- (CESPE - 2015 - TRE-GO - Técnico Judiciário - Programação de
Sistemas) Julgue os item subsequente à luz do paradigma de orientação a
objetos.
Uma classe abstrata possui instâncias diretas, bem como suas classes
descendentes.
12- (FCC - 2010 - TRT - 20ª REGIÃO (SE) - Analista Judiciário -
Tecnologia da Informação) No desenvolvimento de sistemas, no âmbito
das relações intermodulares entre as classes, diz-se que o programa está bem
estruturado quando há
a) maior coesão e maior acoplamento.
b) menor coesão e maior acoplamento.
c) menor coesão e menor acoplamento.
d) maior coesão e menor acoplamento.
e) apenas coesão ou apenas acoplamento.
13- (FCC - 2013 - MPE-CE - Analista Ministerial - Ciências da
Computação) Em uma aplicação desenvolvida por uma equipe de TI deseja-
se:
Caso 1: obrigar um conjunto de classes a implementar um conjunto de
métodos para se obter um padrão. A ideia é centralizar um conjunto de
assinaturas de métodos em um componente para que um conjunto de classes
possa implementá-los da maneira como lhes convier.
Caso 2: centralizar os atributos e métodos comuns a um conjunto de classes
em uma única classe, de forma que esse conjunto de classes especializadas se
comporte como se tivessem em seu código fonte esses atributos e métodos
comuns.
Os principais conceitos da orientação a objetos que devem ser utilizados para
atender os Casos 1 e 2 são, respectivamente,
a) sobrecarga de métodos e sobrescrita de métodos.
b) pacote e generalização.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 93 de 109
www.exponencialconcursos.com.br
c) interface e herança.
d) generalização e especialização.
e) encapsulamento e herança.
Programação Orientada a Objetos (POO).
14- (FCC - 2018 - DPE-AM - Assistente Técnico de Defensoria -
Programador) O paradigma de programação Orientada a Objetos − OO
utiliza, como um de seus componentes essenciais, a classe. Uma classe, em
conformidade com os melhores padrões da OO,
a) deve ter alta coesão, que implica em ter um conjunto limitado de
responsabilidades, e baixo acoplamento, que implica em ter baixa dependência
de outros componentes.
b) deve ser completa, portanto, quanto mais atributos os métodos da classe
tiver em comum com outros métodos, mais completa ela se torna.
c) deve manter o número de colaborações com outras classes, por meio de
seus objetos, o mais alto possível para facilitar os testes.
d) que possui muitos métodos contribui para diminuir a complexidade da
árvore de herança, aumentando seu potencial de reutilização.
e) que possui métodos é chamada de superclasse e uma classe que não possui
métodos é chamada de subclasse.
15- (FCC - 2016 - Prefeitura de Teresina - PI - Analista Tecnológico -
Analista de Sistemas) Na orientação a objetos o entendimento dos conceitos
é fundamental para se explorar ao máximo os recursos disponibilizados neste
paradigma de programação. Um destes conceitos é o de
a) sobrecarga de construtores, que pode ocorrer na maioria das linguagens de
programação, exceto na linguagem Java.
b) polimorfismo, que ocorre quando não há sobrescrita nem sobrecarga de
métodos nas classes e interfaces da aplicação.
c) sobrescrita de métodos, que ocorre quando há métodos de mesmo nome na
classe, mas que recebem parâmetros diferentes.
d) sobrecarga de métodos, que ocorre quando um método recebe mais
parâmetros do que pode suportar.
e) herança múltipla, que ocorre quando uma subclasse possui duas ou mais
superclasses imediatas.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 94 de 109
www.exponencialconcursos.com.br
16- (FCC - 2016 - TRT - 14ª Região (RO e AC) - Técnico Judiciário -
Tecnologia da Informação) São, dentre outros, recursos essenciais em uma
aplicação orientada a objetos para se obter polimorfismo:
a) Herança e sobrescrita de métodos.
b) Classes estáticas, com métodos protegidos.
c) Interfaces, contendo métodos não abstratos e implementados.
d) Classes abstratas, sem subclasses.
e) Arrays unidimensionais ou multidimensionais.
17- (FCC - 2016 - TRF - 3ª REGIÃO - Técnico Judiciário - Informática)
A análise e o projeto orientados a objeto modelam um sistema em termos de
objetos, que têm propriedades e comportamentos, e de eventos, que
disparam operações que mudam o estado dos objetos. Considere, abaixo, os
fundamentos da Orientação a Objetos − OO:
I. Ato de empacotar ao mesmo tempo dados e objetos. O objeto esconde seus
dados de outros objetos e permite que os dados sejam acessados por
intermédio de seus próprios métodos. Protege os dados do objeto do uso
arbitrário e não-intencional. Separa a maneira como um objeto se comporta
da maneira como ele é implementado.
II. Refere-se à implementação de um tipo de objeto. Especifica uma estrutura
de dados e as operações permissíveis que se aplicam a cada um de seus
objetos.
III. Pode ser real ou abstrato. Possui informações (dados) e desempenha
ações (funcionalidades). É qualquer coisa, real ou abstrata, a respeito da qual
são armazenados dados e operações.
Os conceitos da OO indicados em I, II e III, são, correta e respectivamente,
a) Herança, Classe, Atributo.
b) Encapsulamento, Método, Objeto.
c) Polimorfismo, Superclasse, Método.
d) Encapsulamento, Classe, Objeto.
e) Herança, Método, Atributo.
18- (FCC - 2015 - DPE-RR - Analista de Sistemas) Os dois principais
paradigmas de programação amplamente conhecidos são o paradigma
orientado a objetos e o procedural. Na orientação a objetos,
a) ocorre herança múltipla quando uma superclasse herda características de
mais de uma subclasse.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 95 de 109
www.exponencialconcursos.com.br
b) a marca de um produto é considerada uma classe, porém, o preço é
considerado um atributo.
c) uma classe pode conter vários métodos com o mesmo nome, se recebem
parâmetros diferentes.
d) só é permitido um construtor em cada classe, independente da linguagem
de programação utilizada.
e) um método representa uma propriedade da classe, semelhante a um campo
em uma tabela.
19- (FCC - 2015 - TRE-PB - Técnico Judiciário - Área Apoio
Especializado - Programação de Sistemas) Na orientação a objetos, no
que se refere à sobrecarga de métodos, um método é considerado
sobrecarregado se
a) tiver nome diferente de outros métodos da mesma classe.
b) for público, estático e receber mais de um parâmetro.
c) tiver o mesmo nome de outro método da mesma classe, mas receber
parâmetros diferentes.
d) tiver, em uma subclasse, o mesmo nome de um método da superclasse.
e) a quantidade de parâmetros que receber excede o limite permitido.
20- (FCC - 2015 - TRE-AP - Técnico Judiciário - Programação de
Sistemas) Na orientação a objetos com Java as classes
a) permitem apenas um construtor, que pode ser declarado explicitamente ou
não.
b) estáticas são necessárias para se conseguir polimorfismo.
c) podem possuir variáveis com modificadores de acesso public, private,
protected e void.
d) precisam possuir um método main por meio do qual são instanciados os
objetos
e) podem possuir métodos com o mesmo nome, desde que recebam
parâmetros de tipos diferentes.
21- (FCC - 2015 - MPE-PB - Analista de Sistemas – Desenvolvedor)
Apresenta um conceito correto associado à Análise e Projeto Orientado a
Objetos (OO):
a) Atributos, também chamados de métodos ou serviços, fornecem uma
representação de um dos comportamentos da classe.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 96 de 109
www.exponencialconcursos.com.br
b) Subclasse é uma especialização da superclasse. Uma subclasse pode herdar
tanto atributos quanto operações de uma superclasse.
c) Classe abstrata, também chamada de classe bean, é uma generalização de
um conjunto de classes a ela relacionada.
d) Métodos são instâncias de uma classe específica que herdam os atributos e
operações da classe.
e) Objeto é uma descrição generalizada que descreve uma coleção de métodos
semelhantes e encapsula dados e abstrações procedurais necessárias para
descrever alguma classe do mundo real.
22- (FCC - 2015 - TRT - 4ª REGIÃO (RS) - Analista Judiciário -
Tecnologia da Informação) O uso de herança pode otimizar o tempo de
desenvolvimento das aplicações orientadas a objetos devido ao
reaproveitamento de código. Quando se implementa herança
a) uma subclasse pode se tornar uma superclasse a qualquer momento,
bastando para tanto que se derive uma subclasse a partir dela.
b) a superclasse herda os atributos da subclasse, incluindo os atributos
privados, públicos e protegidos.
c) múltipla na linguagem Java versão 6, a subclasse herda características de
mais de uma superclasse.
d) só é possível obter polimorfismo na aplicação se houver sobrecarga de
métodos.
e) os métodos de uma superclasse não podem ser sobrescritos nas subclasses,
porém, podem ser sobrecarregados.
23- (FCC - 2015 - TRT - 15ª Região (SP) - Analista Judiciário –
Tecnologia da Informação) A herança é uma das características mais
poderosas e importantes da orientação a objetos, pois permite o
reaproveitamento de atributos e métodos. Em aplicações que utilizam
herança,
a) não é possível sobrescrever em uma subclasse, um método de sua
superclasse.
b) cada superclasse pode ter apenas uma subclasse.
c) somente as superclasses poderão ter métodos ou construtores
sobrecarregados.
d) é possível se obter polimorfismo.
e) é possível a implementação de herança múltipla, em todas as linguagens
orientadas a objetos.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 97 de 109
www.exponencialconcursos.com.br
24- (FCC - 2014 - TCE-GO - Analista de Controle Externo - Tecnologia
da Informação) Em aplicações orientadas a objetos é possível construir
diferentes tipos de classes, como
a) classes abstratas, que podem possuir construtores e serem instanciadas
diretamente.
b) interfaces, que podem possuir construtores e serem instanciadas
diretamente.
c) classes abstratas, que podem conter métodos implementados e assinaturas
de métodos sem implementação.
d) interfaces, que podem possuir constantes, variáveis e atributos privados.
e) superclasses em relações de herança, que podem possuir métodos
abstratos, mas não podem ser instanciadas diretamente.
25- (FCC - 2014 - AL-PE - Analista Legislativo - Sistemas) O modelo de
dados a seguir deve ser utilizado para responder a questão.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 98 de 109
www.exponencialconcursos.com.br
Se fosse construída uma aplicação orientada a objetos para implementar o
modelo apresentado, a forma mais correta de construir as classes referentes
às entidades Juridico, Cliente e Fisico, seria utilizando o conceito de;
a) interface, onde a interface Cliente seria implementada pelas classes Físico e
Juridico.
b) polimorfismo, onde todos os objetos das classes Fisico e Juridico seriam
tratados como objetos da classe Cliente.
c) herança, onde Juridico e Físico seriam subclasses da classe Cliente.
d) abstração, onde uma classe abstrata Cliente teria atributos protegidos e
métodos privados que seriam implementados nas interfaces Juridico e Fisico.
e) encapsulamento, onde as classes Juridico e Fisico seriam encapsuladas na
classe Cliente, de forma que todas agissem como se fosse uma única classe.
26- (FCC - 2013 - MPE-MA - Técnico Ministerial - Tecnologia da
Informação) Uma aplicação possui quatro classes: A, B, C e D. As classes A
e B são subclasses de A. Nas classes A, B e C existem atributos diferentes e
um método chamado verificarSaldo() com a mesma assinatura mas que
executa operações que retornam valores do tipo double, porém, diferentes. A
classe D é a classe principal. No interior do método main da classe D foram
digitadas as seguintes instruções:
A obj = new B();
double v = obj.verificarSaldo();
A obj1 = new C();
double v1 = obj1.verificarSaldo();
Quando essas linhas foram executadas, a variável v recebeu o valor 100.00 e
a variável v1 recebeu o valor 125.00.
Note que tanto obj como obj1 são objetos do tipo A, porém, além de
possuírem atributos diferentes, ao chamar o método verificarSaldo() por
meio desses objetos, o retorno contido nas variáveis v e v1 foi diferente. Isso
mostra um exemplo de
a) encapsulamento.
b) sobrecarga de métodos.
c) herança múltipla.
d) generalização.
e) polimorfismo.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 99 de 109
www.exponencialconcursos.com.br
27- (FCC - 2013 - MPE-CE - Analista Ministerial - Ciências da
Computação) Esse conceito refere-se à separação dos aspectos externos de
um objeto, que são acessíveis a outros objetos, dos detalhes internos da
implementação, que estão escondidos de outros objetos. Isso evita que partes
de um programa se tornem tão independentes que uma pequena mudança
tenha grandes efeitos em cascata. Pode-se mudar a implementação de um
objeto sem afetar as aplicações que o utilizam. Pode-se querer mudar a
implementação de um objeto para melhorar o desempenho, reparar um erro,
consolidar código ou dar suporte à portabilidade. Esse conceito não é exclusivo
das linguagens orientadas a objetos, mas a capacidade de combinar estrutura
e comportamento de dados em uma única entidade o torna mais claro e mais
poderoso do que em linguagens como Cobol, Fortran e C.
O conceito citado no texto é conhecido como
a) compartilhamento.
b) generalização.
c) polimorfismo.
d) coleção.
e) encapsulamento.
28- (FCC - 2013 - MPE-MA - Analista Ministerial - Análise e
Desenvolvimento de Sistemas) Um dono de uma fábrica de brinquedos
solicitou que seus engenheiros criassem um mesmo controle remoto para os
brinquedos avião, carro e barco. A única restrição era que cada brinquedo
atendesse aos comandos específicos definidos pelo controle. O controle remoto
teria vários botões, sendo que todos eles seriam úteis para todos os
brinquedos. Por exemplo, quando o usuário apertasse o botão mover, o
controle enviaria o sinal MOVER para todos os brinquedos que estivessem em
um raio de 2 metros. Desta forma, quando o brinquedo recebesse o sinal
MOVER, ele se moveria de acordo com a sua função. Para o avião, mover
significa VOAR, para o barco significa NAVEGAR e, para o automóvel, significa
CORRER. Observe que os brinquedos respondem ao mesmo sinal de formas
diferentes.
Na programação orientada a objetos, este exemplo ilustra um caso de
a) Herança.
b) Polimorfismo.
c) Sobrecarga de métodos.
d) Classe abstrata.
e) Hierarquia de herança.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 100 de 109
www.exponencialconcursos.com.br
29- (FCC - 2013 - AL-RN - Analista Legislativo - Analista de Sistemas)
Um dos conceitos básicos de orientação a objetos é o fato de um objeto, ao
tentar acessar as propriedades de outro objeto, deve sempre fazê-lo por uso
de métodos do objeto ao qual se deseja atribuir ou requisitar uma informação,
mantendo ambos os objetos isolados. A essa propriedade da orientação a
objetos se dá o nome de
a) herança.
b) abstração.
c) polimorfismo.
d) mensagem.
e) encapsulamento.
30- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Acerca de conceitos básicos e tratamentos de exceção em programação
orientada a objetos, julgue o item subsequente.
O armazenamento de informações referentes às classes de um sistema é feito
em uma metaclasse.
31- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Acerca de conceitos básicos e tratamentos de exceção em programação
orientada a objetos, julgue o item subsequente.
Em um sistema de informação que contenha dados pessoais de clientes de
uma empresa de cartões de créditos, caso sejam criadas classes cliente e
pessoas, então a classe pessoas é uma classe de polimorfismo de sobrecarga.
32- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Acerca de conceitos básicos e tratamentos de exceção em programação
orientada a objetos, julgue o item subsequente.
Considere que, em um sistema de informações, um objeto possua dados de
uma pessoa, tais como: nome, endereço, data de aniversário e número do
cartão de crédito. Considere, ainda, que esse sistema exponha, de forma
pública, informações sobre o nome e a data de aniversário e deixe os dados do
cartão de crédito protegidos em formato privado. Nesse caso, o sistema estará
usando o recurso de interface.
33- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Julgue o item a seguir, relativo a projetos orientados a objeto.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 101 de 109
www.exponencialconcursos.com.br
A modelagem orientada a objetos demonstra como os objetos podem ser
classificados, a maneira como herdam atributos e operações, como são
compostos e de que forma interagem entre si.
34- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Julgue o item seguinte, quanto aos conceitos da programação estruturada e
da programação orientada a objetos e aos métodos de ordenação, pesquisa e
hashing.
Na programação orientada a objetos, uma das características do polimorfismo
é a independência do software que invoca o comportamento polimórfico em
relação aos tipos de objeto para os quais as mensagens são enviadas.
35- (2018 - STM - Técnico Judiciário - Programação de Sistemas)
Julgue o item seguinte, a respeito de programação orientada a objetos.
Um recurso de grande utilidade nesse tipo de programação consiste na
possibilidade de um objeto exercer o comportamento de outro objeto.
36- (2018 - STM - Técnico Judiciário - Programação de Sistemas)
Julgue o item seguinte, a respeito de programação orientada a objetos.
O tipo de herança mais eficiente e indicado é a herança de implementação,
pois possibilita que uma nova classe reutilize a implementação de outra classe
sem a necessidade de se recortar e colar o código de forma manual, tornando
o código automaticamente disponível, como parte da nova classe.
37- (2018 - STM - Técnico Judiciário - Programação de Sistemas)
Julgue o item seguinte, a respeito de programação orientada a objetos.
O encapsulamento permite que um programa seja dividido em várias partes
menores; contudo, as partes tornam-se dependentes umas das outras em
relação à implementação e em relação ao trabalho realizado.
38- (2018 - STM - Técnico Judiciário - Programação de Sistemas)
Julgue o item seguinte, a respeito de programação orientada a objetos.
O estado interno de um objeto pode ser alterado por meio de métodos
assessores.
39- (CESPE - 2017 - SEDF - Professor de Educação Básica -
Informática) A respeito das características da programação orientada a
objetos, julgue o item subsequente.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 102 de 109
www.exponencialconcursos.com.br
Com a utilização do conceito de polimorfismo, sempre que uma nova
funcionalidade for criada ou modificada, a aplicação deve ser compilada.
40- (CESPE - 2017 - SEDF - Professor de Educação Básica -
Informática) A respeito das características da programação orientada a
objetos, julgue o item subsequente.
No encapsulamento com acesso protegido aos métodos, o acesso se restringe
apenas à própria classe e suas subclasses.
41- (CESPE - 2017 - TRE-TO - Técnico Judiciário - Programação de
Sistemas) Na orientação a objetos, a alteração do comportamento dos
métodos herdados das superclasses para um comportamento mais específico
nas subclasses, de forma a se criar um novo método na classe filha que
contém a mesma assinatura e o mesmo tipo de retorno, relaciona-se a
a) sobrecarga.
b) overloading.
c) portabilidade.
d) abstração.
e) sobrescrita.
42- (CESPE - 2017 - TRE-TO - Técnico Judiciário - Programação de
Sistemas) Assinale a opção que apresenta o mecanismo a partir do qual os
detalhes da implementação dos métodos de uma classe são ocultos dos
usuários da classe.
a) herança múltipla
b) especialização
c) herança simples
d) classe abstrata
e) encapsulamento
43- (CESPE - 2017 - TRT - 7ª Região (CE) - Analista Judiciário -
Tecnologia da Informação) Acerca de orientação a objetos, assinale a
opção correta.
a) Os desenvolvedores de um sistema devem ter como objetivo a construção
de classes com baixa coesão e alto acoplamento.
b) O polimorfismo caracteriza-se pela possibilidade de vários métodos terem o
mesmo nome, porém com assinaturas diferentes.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 103 de 109
www.exponencialconcursos.com.br
c) Membros de dados podem ser acessados diretamente, mas somente podem
ser alterados por meio de métodos específicos.
d) Na agregação, diversos objetos distintos são reunidos para compor um
novo objeto.
44- (CESPE - 2017 - TRT - 7ª Região (CE) - Analista Judiciário -
Tecnologia da Informação)
No trecho de código apresentado, está em uso o conceito de orientação a
objeto do tipo
a) polimorfismo.
b) interface.
c) associação.
d) herança.
45- (CESPE - 2016 - TCE-PR - Analista de Controle - Tecnologia da
Informação) Em se tratando de orientação a objetos, o polimorfismo refere-
se
a) ao reconhecimento do comportamento variado de um método, o que
melhora o aproveitamento do código.
b) à transmissão dos métodos e atributos de uma classe para suas subclasses,
quando ad hoc.
c) à variação das saídas de um método com relação às entradas recebidas,
caso em que é considerado universal.
d) ao uso que um objeto faz dos recursos de outro objeto.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 104 de 109
www.exponencialconcursos.com.br
e) à utilização de métodos específicos para manipular dados com proteção por
meio de encapsulamento.
46- (CESPE - 2016 - FUB - Técnico de Tecnologia da Informação) A
respeito dos conceitos de análise orientada a objetos em engenharia de
software, julgue o seguinte item.
O conjunto de valores das características de determinado objeto é
denominado estado.
47- (CESPE - 2016 - FUB - Técnico de Tecnologia da Informação) A
respeito dos conceitos de análise orientada a objetos em engenharia de
software, julgue o seguinte item.
Denomina-se polimorfismo o fato de duas ou mais classes de superclasses
diferentes possuírem um método com a mesma assinatura, mas com
comportamentos diferentes.
48- (CESPE - 2016 - TCE-PA - Auditor de Controle Externo - Área
Informática - Analista de Sistema) A propósito de análise e projeto
orientados a objetos, julgue o item subsequente.
Objetos são componentes reusáveis, pois encapsulam um conjunto de
atributos e operações que fornecem serviços a outros objetos.
49- (CESPE - 2015 - TRE-RS - Analista Judiciário - Análise de
Sistemas) Considere três classes: Prova, Questão e PerguntaSimples. A
classe Prova tem os atributos Data e Assunto, além do método criar(..). A
classe Questão tem os atributos NúmeroDaQuestão e Pergunta, além do
método asssociarÀprova(..). A classe PerguntaSimples tem os atributos
RespostaCerta e Referência, além do método corrigir(..). De acordo com essa
descrição, é possível identificar entre as classes Prova e Questão e entre as
classes Questão e PerguntaSimples, respectivamente, os seguintes conceitos
da orientação a objetos.
a) especialização e agregação
b) herança e especialização
c) agregação e decomposição
d) agregação e especialização
e) classificação e decomposição
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 105 de 109
www.exponencialconcursos.com.br
50- (CESPE - 2015 - TRE-MT - Analista Judiciário - Análise de
Sistemas) No que se refere à modelagem orientada a objetos, assinale a
opção correta.
a) No processo de encapsulação, toda a informação é empacotada sob um
nome, podendo ser reutilizada com uma especificação ou componente de
programa.
b) Em uma herança, as subclasses se tornam mais genéricas e a junção de
todas as subclasses resultam na superclasse.
c) Entidades externas, diferentemente das ocorrências, podem ser
classificadas como objetos.
d) Na característica serviços necessários, o objeto em potencial será útil
durante a análise somente se a informação sobre ele precisar ser lembrada
para que o sistema possa funcionar.
e) O polimorfismo está diretamente associado a um atributo por meio de uma
referência a subclasse.
51- (CESPE - 2015 - Telebras - Engenheiro - Engenharia da
Computação) Julgue o item subsequente, referentes à programação
orientada a objeto.
O polimorfismo permite a associação de um único nome ou operador a
diferentes operações — dependendo do tipo do dado considerado — e a
redefinição de um método dentro de uma classe derivada.
52- (CESPE - 2015 - TJ-DFT - Analista Judiciário - Analista de
Sistemas) Acerca de análise e projetos orientados a objetos, julgue o item
que segue.
A combinação de dados com o código que os manipula em um único objeto é
denominada encapsulamento.
53- (CESPE - 2015 - TJ-DFT - Analista Judiciário - Analista de
Sistemas) Acerca de análise e projetos orientados a objetos, julgue o item
que segue.
Recurso de classes é a propriedade dos objetos que viabiliza a implementação
de hierarquia entre objetos.
54- (CESPE - 2015 - MEC - Analista de Teste e Qualidade) Com relação
à orientação a objetos, julgue o item subsecutivo.
O foco da orientação a objetos está nos procedimentos a serem contemplados
pelo sistema e nas informações que este manipulará e(ou) armazenará.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 106 de 109
www.exponencialconcursos.com.br
55- (CESPE - 2015 - MEC - Analista de Teste e Qualidade) Com relação
à orientação a objetos, julgue o item subsecutivo.
Em um sistema bem elaborado, os métodos são o único meio de se interagir
com os objetos.
56- (CESPE - 2015 - TCE-RN - Assessor Técnico de Informática - Cargo
1) No que se diz respeito a análise, projeto e modelagem orientada para
objeto e linguagem de modelagem unificada (UML), julgue o item que se
segue.
O processo de herança permite a reutilização de código, como também o
reaproveitamento de atributos e métodos. Assim, em aplicações que utilizam
herança, a obtenção de polimorfismo é uma possibilidade.
57- (CESPE - 2015 - STJ - Analista Judiciário - Análise de Sistemas de
Informação) Julgue o item subsequente, acerca da linguagem de
programação Delphi e da programação orientada a objetos.
O princípio da responsabilidade única estabelece que uma classe deva
executar apenas uma tarefa; dessa forma, caso uma classe possua mais uma
responsabilidade, deve-se considerar sua decomposição em duas ou mais
classes.
58- (CESPE - 2015 - STJ - Analista Judiciário - Análise de Sistemas de
Informação) Julgue o item subsequente, acerca da linguagem de
programação Delphi e da programação orientada a objetos.
O encapsulamento, característica da programação orientada a objetos, é uma
técnica utilizada para ocultar os detalhes da implementação de um objeto.
59- (CESPE - 2015 - FUB - Engenheiro - Mecatrônica) A respeito de
análise de algoritmos, programação estruturada e orientada a objetos e
estruturas de dados, julgue o item a seguir.
Os conceitos de classe, método, abstração, encapsulamento, associação,
herança e polimorfismo são derivados da programação estruturada, cuja
característica é estabelecer um processo de desenvolvimento de algoritmos
independentemente da linguagem de programação a ser utilizada na
codificação.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 107 de 109
www.exponencialconcursos.com.br
60- (CESPE - 2015 - FUB - Analista de Tecnologia da Informação) A
respeito de programação orientada a objetos e bancos de dados, julgue o
item a seguir.
Diferentemente da programação estruturada, a programação orientada a
objetos baseia-se em classes, as quais possuem atributos e métodos
acoplados.
61- (CESPE - 2010 - Banco da Amazônia - Arquitetura de Tecnologia)
Quanto aos conceitos de linguagens de programação, julgue o item que se
segue.
A herança é um conceito implementado por todas as linguagens de
programação orientadas a objeto. No entanto, algumas delas somente
permitem o uso de herança simples, não sendo possível a criação de classes
por meio de herança múltipla.
62- (CESPE - 2015 - TRE-GO - Técnico Judiciário - Programação de
Sistemas) A respeito de desenvolvimento e manutenção de sistemas, julgue
o item seguinte.
No desenvolvimento mediante a utilização da metodologia estruturada, têm-se
os dados e as funções separados; já na orientação a objeto, os objetos são
compostos de dados e das funções que os modificam, podendo interagir entre
eles por meio da troca de mensagens.
63- (CESPE - 2013 - TRT - 17ª Região (ES) - Analista Judiciário -
Tecnologia da Informação) Acerca da orientação a objetos, julgue o item
seguinte.
Ao se criar um objeto, seus atributos são acessados por qualquer outro objeto,
sem restrições.
64- (CESPE - 2014 - TJ-SE - Analista Judiciário - Banco de Dados)
Tendo como base os padrões de projeto de software, julgue os itens a seguir.
O polimorfismo na programação orientada a objetos é caracterizado quando
duas ou mais classes distintas têm métodos de mesmo nome, de forma que
uma função possa utilizar um objeto de qualquer uma das classes
polimórficas, sem necessidade de tratá-lo de forma diferenciada conforme a
classe desse objeto.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 108 de 109
www.exponencialconcursos.com.br
65- (CESPE - 2014 - TJ-SE - Analista Judiciário - Banco de Dados) No
que diz respeito aos modelos hierárquico, relacional, de entidade-
relacionamento e de modelagem orientada a objeto, julgue os itens a seguir.
Na modelagem orientada a objetos, o conceito de herança permite que uma
subclasse herde tanto operações quanto propriedades.
66- (CESPE - 2018 - ABIN - Oficial Técnico de Inteligência - Área 9)
Acerca de conceitos básicos e tratamentos de exceção em programação
orientada a objetos, julgue o item subsequente.
Se o sistema de informação tiver uma consulta sobre o estado de conservação
do automóvel, será considerado que o estado é um atributo do objeto carro.
67- (CESPE - 2016 - FUB - Técnico de Tecnologia da Informação) A
respeito dos conceitos de análise orientada a objetos em engenharia de
software, julgue o seguinte item.
Uma das vantagens de se utilizar encapsulamento em orientação a objetos é
impedir o acesso direto aos atributos de um objeto.
68- (CESPE - 2015 - Telebras - Engenheiro - Engenharia da
Computação) Julgue o item subsequente, referente à programação orientada
a objeto.
A herança permite a extensão de uma classe existente, mas requer a
repetição ou a reescrita do código original.
69- CESPE - 2015 - STJ - Técnico Judiciário - Tecnologia da
Informação) No que concerne a análise, projeto e modelagem orientada a
objetos, julgue o item que se segue.
O polimorfismo de objeto pode criar objetos que herdam comportamento de
uma classe e pode possibilitar que o desenvolvedor programe um
comportamento diferente para os métodos de classes existentes, mas, para
que seja da forma sobrescrita, o polimorfismo precisa possuir a mesma
assinatura.
Curso: Tecnologia da Informação
Teoria e Questões comentadas Prof. Yuri do Carmo
Prof. Yuri do Carmo 109 de 109
www.exponencialconcursos.com.br
7. GABARITO
1 E 11 E 21 B 31 E 41 E 51 C 61 C
2 C 12 D 22 A 32 E 42 E 52 C 62 C
3 E 13 C 23 D 33 C 43 D 53 E 63 E
4 B 14 A 24 C 34 C 44 D 54 E 64 C
5 C 15 E 25 C 35 C 45 A 55 C 65 C
6 A 16 A 26 E 36 E 46 C 56 C 66 C
7 D 17 D 27 E 37 E 47 E 57 C 67 C
8 A 18 C 28 B 38 E 48 C 58 C 68 E
9 B 19 C 29 E 39 E 49 D 59 E 69 C
10 B 20 E 30 C 40 C 50 A 60 C
8. REFERÊNCIAS
DEITEL, Paul. Java Como Programar. 8ª Edição. São Paulo: Prentice Hall,
2010.
BARNES, David. Programação Orientada a Objetos com Java. 4ª Edição.
São Paulo: Prentice Hall, 2009.
WEST, David. POLLICE, Gary. Use a Cabeça! Análise e Projeto Orientado
ao Objeto. Alta Books, 2007.
SANTOS, Rafael. Introdução à programação orientada a objetos usando
Java. Campus, 2003.
LARMAN, Craig. Utilizando UML e Padrões. Bookman Editora, 2002.
ORACLE. Object-Oriented Programming Concepts. Disponível em:
<https://docs.oracle.com/javase/tutorial/java/concepts/index.html >
Acesso em: 10 jan. 2019.
CAELUM. Java e Orientação a Objetos. Disponível em:
<https://www.caelum.com.br/apostila-java-orientacao-objetos/> Acesso em:
12 jan. 2019.