Buscar

POO - PARADIGMAS DE LINGUAGEM DE PROGRAMAÇÃO

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

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

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

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

POO – PARADIGMAS DA LINGUAGEM DE PROGRAMAÇÃO
Métodos de programação
Desafio
Os paradigmas de programação são diferentes classificações atribuídas à estruturação de linguagens de programação. Ao longo do desenvolvimento da computação, surgiram vários paradigmas e, consequentemente, novas linguagens de programação que empregavam seus conceitos na forma de se estruturar, o que também impactou os profissionais da área, uma vez que é comum um profissional mais novo achar estranho trabalhar com uma linguagem embasada em um paradigma de décadas atrás. 
Imagine que você trabalha em uma equipe de desenvolvimento de softwares em uma organização que já trabalha há muito tempo com softwares desenvolvidos internamente, com linguagens de programação da década de 90, como Visual Basic 5.0 e Delphi 6.0.
Na sua equipe há um programador mais novo que começou a trabalhar com linguagens orientadas a objetos, principalmente com Java, e que encontrou uma dificuldade na adaptação ao paradigma de linguagens estruturadas. 
Você, como programador mais experiente, deve explicar ao programador:
a) A diferença entre os dois paradigmas.
b) O porquê de, ao contrário do Java, não ser possível desenvolver com as linguagens de paradigma estruturado Visual Basic 5.0 e Delphi 6.0.
Padrão de resposta esperado
a) O Java é uma linguagem precursora do paradigma de orientação a objetos, o qual considera entidades do mundo real objetos que se relacionam com os demais e apresentam atributos e métodos, sendo o seu conceito de desenvolvimento de códigos. A diferença entre os paradigmas é que o pensamento em linguagens orientada a objetos exige que o programador pense mais na construção e na reutilização de códigos.
b) Linguagens estruturadas como o Visual Basic 5.0 e o Delphi 6.0 trabalhavam com código repetido entre diversas telas do sistema, uma vez que o paradigma estruturado era orientado a eventos de ação de tela, diferente de objetos.
Métodos de programação
1. É natural que estudantes da área de computação questionem o porque de se estudar os conceitos e a história das linguagens de programação, no entanto, adquirir esse conhecimento 7
proporciona ao aluno e futuro profissional diversas vantagens. Assinale a alternativa que expresse algumas dessas vantagens:
R:A. Embasamento para escolha de linguagens adequadas e melhor entendimento da importância da implementação.
Algumas das vantagens de estudar o conceito de linguagens de programação são o embasamento para escolha da linguagem adequada e o melhor entendimento da importância da 
implementação. O reúso de componentes está mais ligado ao conhecimento específico de algumas linguagens, já o reaproveitamento de código também está relacionado a um padrão de 
desenvolvimento de algumas linguagens e, por fim, a facilidade de comunicação não se relaciona a esses conceitos.
2. Computadores têm sido utilizados para uma infinidade de áreas que, por sua vez, resultam no desenvolvimento de novos conceitos e linguagens que demandam novos paradigmas e 
métodos de programação. Assinale a alternativa correta sobre algumas das áreas que impulsionaram esse desenvolvimento:
R:C. Inteligência Artificial e World Wide Web.
Entre as áreas que impulsionaram o desenvolvimento de novos conceitos e paradigmas de programação estão a Inteligência Artificial e a World Wide Web. Áreas como o Governo, a 
Medicina e a Indústria Automobilística, apesar de grandes consumidores de tecnologia, não são consideradas impulsionadoras no desenvolvimento desses conceitos.
3. As linguagens de programação podem apresentar características e comportamentos definidos de acordo com o paradigma que a construiu. No entanto, uma linguagem pode apresentar 
características provenientes de diferentes paradigmas. Dessa forma, assinale a alternativa verdadeira:
R:A. Os paradigmas não estão vinculados à linguagem de programação.
Os paradigmas não estão vinculados e não são definidos pela linguagem de programação. O paradigma de orientação a objetos, apesar de muito embasado em reusabilidade, não foi o 
precursor do conceito, já o paradigma declarativo está relacionado à preocupação com o resultado e não com a forma de execução de uma instrução. Por fim, um paradigma deve ser 
definido pelo tipo de situação a ser resolvida e não pela tecnologia.
4. O paradigma de programação imperativo tem como principal característica a declaração comandos, que descreve uma sequência de instruções para alcançar um objetivo. Sobre os 
conceitos do paradigma imperativo, assinale a alternativa correta:
R:D. A programação imperativa apresenta linguagens amplamente utilizadas, como a linguagem C, por exemplo.
O paradigma de programação imperativa é implementado por um grande número de linguagens de programação, entre elas a linguagem C. Esse paradigma, apesar de ter o foco em 
entender os comandos, segue uma lógica entre eles, focando nas instruções recebidas. É um paradigma amplamente utilizado e apresenta linguagens que possibilitam, entre outros recursos, o reúso de código.
5. O paradigma de programação estruturada surgiu com a ideia da criação de estruturas e blocos de execução de rotinas e foi amplamente utilizado, dando ênfase para o surgimento do 
paradigma orientado a objeto. Assinale a alternativa correta sobre o paradigma de programação estruturada:
R: E. O paradigma estruturado permite a organização do código em estruturas funcionais.
O paradigma estruturado possibilita a organização do código em estruturas funcionais e reutilizáveis. Ele não foi substituído pelo orientado a objetos, apesar de ser o alicerce para o seu 
surgimento. Recursos como polimorfismo, herança e classes pertencem ao paradigma orientado a objetos.
--------------------------------------------------------------------------------------------------------------------------
Programação declarativa 
Desafio
A programação declarativa é um paradigma de programação que possibilita desenvolvimento mais objetivo, pois o desenvolvedor precisa especificar apenas o que deseja obter de resultado com o programa. Dentro desse contexto, aplicações clientes servidor, como, por exemplo, WebService, têm ampla adesão.
Você, como desenvolvedor da equipe de desenvolvimento da companhia, tem como desafio um novo projeto de integração entre dois sistemas.
O seu sistema deve se integrar com um WebService responsável por fazer o cálculo e a geração da folha de pagamento. Sendo assim, o sistema deverá enviar um arquivo XML com os dados dos funcionários, como ponto e férias, e receber outro aquivo XML de retorno com os dados da folha de pagamento gerada.
Diante desse cenário, como a programação declarativa pode atender essa necessidade? Justifique a adequação realizada para o escopo do projet 
Padrão de resposta esperado
O principal conceito das linguagens de programação declarativa é o resultado a ser alcançado, não importando como será realizado o processo para chegar nos resultados.
Assim, a programação declarativa pode atender a necessidade do projeto, pois os sistemas devem se preocupar apenas em enviar o XML com os dados necessários dos funcionários, para que a folha de pagamento seja calculada corretamente, gerando férias para quem tem direito, descontos ou horas extras, por exemplo. Esse é o conceito da programação declarativa.
Contudo, nesse cenário, os serviços de backend responsáveis por executarem os cálculos seriam desenvolvidos com o conceito imperativo por serem instruções de sequências típicas desse paradigma, mas a parte de troca de informações sobre a geração da folha não, entrando em ação a programação declarativa.
Programação declarativa
1. As linguagens de programação declarativas têm como principal característica lógica do programa estarem orientadas para o resultado a ser obtido e não para o modo como será 
alcançado. Ou seja, têm foco no quê e não no como. Assinale a alternativa que descreva outra característica também associada a esse paradigma:
R:B. Facilidade de aprendizagem.
Outra característica das linguagens declarativas é sua facilidade de aprendizagemem relação às linguagens imperativas, pois o fato de serem delimitadas pela elaboração do código, com 
apenas o resultado a ser alcançado e não com o como, facilita o aprendizado. Características de modelagem de entidades do mundo real são de orientação a objetos. Comandos e 
instruções passo a passo são de linguagens imperativas. Criação de código enxuto e integração com outras linguagens são condições particulares, o que dependerá da situação.
2. As linguagens de programação declarativa, assim como linguagens em outros paradigmas, são indicadas para programas em algumas áreas do conhecimento. Assinale a alternativa que 
identifica as áreas do conhecimento em que mais se aplicam as linguagens de programação declarativa:
D. Inteligência Artificial e Banco de Dados.
Entre as áreas que utilizam o paradigma de linguagem de programação declarativa, destacam-se a Inteligência Artificial e o Banco de Dados, principalmente, por conta das linguagens SQL 
e Prolog, pois, como o paradigma de linguagem declarativa facilita o uso nesse tipo de problema, sua implicação com lógica e cálculos matemáticos é amplamente facilitada. Outras áreas, 
como jogos e processamento de imagem, apesar de usarem, não são unânimes. Além disso, em sistemas estruturados, as linguagens imperativas predominam. Sistemas estruturados, 
como o próprio nome sugere, não fazem parte desse paradigma e móbile e sistemas web trabalham mais com o conceito de programação imperativa.
3. As linguagens de programação lógica, como o Prolog, têm grande embasamento na lógica matemática, fazendo uso de símbolos na declaração pela lógica de predicados. Assinale a 
alternativa correta acerca de algumas características da programação lógica:
R:A. Processamento simbólico e fácil modificação.
O processamento simbólico e a facilidade de modificação são características desse tipo de linguagem. Outras características, como processamento numérico, soluções algorítmicas e 
difícil modificação, são características de linguagens imperativas.
4.O paradigma de programação funcional é uma forma de programação declarativa, criado explicitamente para dar suporte a uma abordagem funcional pura, para a solução de problemas. 
Para atingir esse objetivo, são características desse paradigma:
R: E. Foco em funções com objetos de primeira classe e coleção de dados.
A principal característica da programação funcional é o foco em funções, como objetos que se relacionam para implementar o programa. Já o foco em controle de tarefas, como controlar a 
execução dos passos no algoritmo, e em controle de loops e condicionais são características de linguagens não funcionais.
5. As linguagens de programação por restrições são uma complementação ao padrão lógico e se referem à implementação de restrições na relação entre variáveis, especificando soluções e 
critérios a serem cumpridos, atuando sobre domínios. As linguagens de programação por restrições atuam sobre alguns domínios. Assinale a alternativa abaixo que apresenta alguns 
domínios onde esse tipo de linguagem atua:
C. Booleano e finito.
As linguagens de programação restritivas atuam sobre os domínios: booleano, de números inteiros e racionais, linear, misto e finito. Não atuam sobre os domínios estrutural e 
condicional. O domínio de funções é das linguagens funcionais, e linguagens declarativas não atuam em domínios imperativos e orientados a objetos.
---------------------------------------------------------------------------------------------------------------
Programação imperativa
Desafio
O paradigma imperativo é o mais antigo dos paradigmas da computação e o que obteve, até então, o maior sucesso. Esse sucesso pode ser relacionado à própria arquitetura de processamento dos computadores. Conhecê-lo e saber como aplicá-lo é fundamental.
Veja a seguinte situação:
Você foi contratado como desenvolvedor em uma equipe de desenvolvimento para um novo projeto. Nesse projeto, o seu desafio será construir um sistema responsável por automatizar as rotinas de planejamento e controle da programação da linha de produção. As características do ambiente exigem que o programa execute rotinas de reprogramação da linha de produção, sem grande necessidade de interface gráfica, nem preocupações com integrações, por exemplo, e que rode em computadores cujos recursos de hardware são poucos, como memória e CPU.
Então você sugere a implementação em uma determinada linguagem, após analisar as características do software e os requisitos de ambiente.
a) Qual linguagem você sugere?
b) Como você utilizaria a programação imperativa por meio dessa linguagem para atender a esse cenário? Lembre-se de justificar sua escolha.
Padrão de resposta esperado
a) Linguagem em C.
b) As linguagens de programação imperativa têm como principal característica o fato de seus algoritmos especificarem instruções e comandos que descrevem como uma rotina será executada para alcançar determinado objetivo.
Outro fato que justifica a escolha da linguagem C do paradigma imperativo é que as linguagens imperativas implementam por si só o modelo de computação de Von Neumann, o qual permite que o programa e seus dados utilizem e compartilhem a mesma memória, um recurso importante para esse tipo de computador.
--------------------------------------
1. O paradigma de programação imperativa é largamente caracterizado pelo fato de seus programas expressarem instruções e comandos que o computador deve executar para alcançar os 
objetivos. Outra característica importante do paradigma de programção imperativa é:
R:A. Mutação de estado (alterar os valores das variáveis).
Outra característica marcante de linguagens de programação imperativa é a alteração dos valores de variáveis. Linguagens que implementam essa característica são imperativas, mesmo 
que também atendam a outros paradigmas. Expressar o código por meio de funções, implementação de subprogramas e herança e polimorfismo, apesar de ser possível em linguagens 
imperativas, é característica que define outros paradigmas. Expressar símbolos e letras é de linguagens lógicas.
2. As linguagens de programação imperativa podem ser classificadas como completas quanto a Turing. Analise as questões e assinale a que representa uma síntese do que significa ser 
completa quanto a Turing.
R:C. Apresentar recursos que permitem expressar qualquer algoritmo computacional.
Uma linguagem é considerada completa quanto a Turing quando permite que qualquer algoritmo seja expresso, implementando condicionais e controle de fluxo, por exemplo. Reutilizar 
código não é uma necessidade para esse enquadramento, bem como escrita em linguagem de baixo nível. Em linguagens imperativas, os dados ocupam a memória junto ao programa, o 
que quebraria a regra, caso fosse uma necessidade.
3. As linguagens de programação imperativa são também chamadas de linguagens procedurais devido ao fato de permitirem uma certa estruturação do código construído. Acerca desse 
conceito, assinale a alternativa que apresenta uma desvantagem dessa característica:
R:D. Falta de flexibilidade dado o caráter sequencial das instruções.
A falta de flexibilidade do código em linguagens imperativas procedurais, dado o caráter sequencial das intsruções, é uma das desvantagens desse conceito. Existem muitas linguagens 
de programação que implementam o paradigma no mercado e permitem implementar recursividade, dispõem de comandos interativos e têm boa legibilidade do código.
4. A programação em linguagem imperativa se caracteriza por expressar a chegada a um resultado e não como. Analise o código abaixo, acerca de um o trecho do código de um programa 
em linguagem C, e assinale a alternativa correta sobre a característica do paradigma imperativo que é possível perceber.
function join(array) { var text = ""; for (var i = 0; i < array.length; i++) {
 text += array[i];
 }
return text;
}
R:B. Instruções explícitas.
O código representa uma implementação em paradigma imperativo. Podemos observar que é explícito como o comando interativo for vai fazer para percorrer o arraye também incrementar
o valor da variável text. Apesar do uso de funções e comandos incrementais em linguagens imperativas, isso por si só não é característica que justifique uma linguagem imperativa. 
Já quanto a reuso e código enxuto, isso não é perceptível no trecho e também não é justificativa para classificar uma linguagem como imperativa.
5. Uma linguagem de programação pode dar suporte a mais do que um só paradigma de programação. Nesse contexto, analise as alternativas a seguir e assinale a que apresenta as 
características que justifiquem que uma linguagem forneça suporte à implementação do paradigma imperativo.
R:C. Variáveis, atribuição e execução sequencial de procedimentos.
Para que uma linguagem implemente características de programação imperativa, faz-se necessário que, ao menos, implemente o conceito de atribuição a variáveis para manipulação de 
seu estado e uma execução sequencial dos procedimentos. Implementação lógica e alto nível de abstração são características de linguagens declarativas.
-------------------------------------------------------------------------------------------------------------------------------------
Programação estruturada
Desafio
As linguagens de programação estruturada surgiram como uma nova proposta às antigas linguagens, as quais demandavam desvio de fluxo em um código com a utilização dos comandos GOTO, constituindo casos em que o fluxo às vezes tornava complexa a análise de código. Esse tipo de comando era muito utilizado para resolver situações de desvio de fluxo em linguagens como BASIC, por exemplo. 
Assim, considere a seguinte situação:
Você trabalha em uma equipe de desenvolvimento e recebeu da sua gerência o desafio de reescrever um sistema atual em BASIC para a linguagem C. Ao analisar o código atual, você percebe problemas característicos da implementação que justificam a migração para uma nova linguagem, uma vez que eles tornam o código difícil de manter e interpretar. A seguir, veja o código:
Considerando a situação apresentada:
a) Identifique problemas no código.
b) Justifique como a implementação estruturada em C conseguiria solucionar esses problemas.
Padrão de resposta esperado
a) O principal problema que se pode perceber no código apresentado é a utilização de comandos GOTO, o qual realiza saltos de instruções no código que, em excesso, pode levar a problemas de manutenção do código.
b) Com a utilização de uma linguagem estruturada, este trecho de código seria substituído por estruturas de controle e comandos condicionais que o deixariam bem mais legível e de fácil interpretação.
A seguir, verifique a implementação do mesmo código em linguagem estruturada em C e a explicação, etapa por etapa, de como seria a conversão:
int main(){
// Declaração da variável que vai receber o número digitado pelo usuário  
int a;
// Instruções sequenciais, primeiro enviando comando para exibir uma informação na tela e depois para ler o número digitado pelo usuário           
printf("Quanto é 12 - 12?: ");
scanf("%d", &a);
//Bloco condicional onde compara se o número informado é igual a zero e exibe a mensagem de Certo
if(a==0)
// Novamente comandos sequencias dentro da estrutura condicional 
      printf("Certo! Parabéns!\n");
// Caso não seja verdadeira a condicional exibe mensagem de erro
   else 
      printf("Errado... Tente outra vez!\n”);
system(“PAUSE);
return 0;
}
Programação estruturada	
1. A programação estruturada propõe uma disciplina para construção de códigos de programas com o objetivo de permitir, entre outros fatores, uma fácil manutenção dos programas. 
Esse paradigma surgiu no início da década de 70.
Acerca dos eventos que motivaram o surgimento da programação estruturada, assinale a alternativa correta:7
R: C. A crise do software e o uso excessivo de comandos GOTO nos códigos.
Conhecida pela crise do software, a dificuldade de manutenção dos sistemas atuais, em grande parte criticada pelo uso excessivo do comando GOTO, foi o principal motivador do 
surgimento da programação estruturada. A introdução de novas linguagens não foi a causa do seu surgimento e, ao contrário, o mercado de software estava em constante queda.
2. O princípio básico de programação estruturada é que um programa é composto por blocos elementares de código que se interligam por intermédio de três mecanismos básicos.
Assinale a alternativa correta quanto a estes três mecanismos:
R: A. Sequência, Seleção e Iteração.
Os três mecanismos básicos de um programa em programação estruturada são Sequência, Seleção e Iteração. As variáveis, apesar de, assim como procedimentos, estarem presentes em
linguagens estruturadas, não são mecanismos básicos.
3. Na programação estruturada é fundamental a elaboração de algoritmos e, para expressá-los, algumas formas de representação são usadas.
Assinale a alternativa correta sobre as formas de representação utilizadas para algoritmos em programação estruturada:
R: D. Linguagem Natural, Fluxogramas e Pseudocódigo.
As formas de representação de algoritmos em programação estruturada são: Linguagem Natural, Fluxogramas e Pseudocódigo. Linguagem de máquina é outra terminologia e não se 
enquadra neste propósito, bem como técnica de prototipação.
4. Uma das características da linguagem de programação estruturada são as estruturas em sequência. Conforme tal característica, as instruções dos programas são executadas 
sequencialmente de cima para baixo, linha a linha.
Com base nessa característica, assinale a alternativa correta quanto ao seu benefício na estruturação de código:
R: E. Facilidade em compreender o fluxo de execução de um Programa.
O benefício da estrutura sequencial está diretamente relacionado ao fato de compreensão do fluxo de execução de um programa, uma vez que as instruções são executadas na medida em 
que aparecem no código. Por si só, isso não traz facilidade de processamento e nem desalocação de memória. O controle de desvio no código é executado pelas instruções condicionais.
5. Uma das características da programação estruturada é a utilização de estruturas de repetição, representada na maioria das linguagens estruturadas por comandos FOR e While.
Assinale a alternativa correta quanto a uma das principais vantagens que essa estrutura proporciona:
R: C. Execução de blocos de instruções várias vezes.
A principal vantagem do uso das estruturas repetitivas é a execução de um bloco de instruções seguidas vezes enquanto uma condição for necessária. Não necessariamente, essas
estruturas possibilitam melhor performance e não foram criadas para a utilização de comandos GOTO e, sim, para a sua substituição. Não são novas formas de escrever comandos 
condicionais, os quais são descritos pelas estruturas condicionais e comandos If Else, funções são outro recurso e podem até conter no seu bloco de execução uma estrutura condicional, 
mas a estrutura condicional não substitui função.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Programação orientada a objetos: modelagem de problemas
Desafio
O principal conceito da programação orientada a objetos é que todo programa é uma coleção de objetos que se relacionam e apresentam comportamentos e atributos únicos.
Imagine que uma empresa contratou você para desenvolver um programa simples em uma linguagem orientada a objetos. O escopo desse programa é controlar os pedidos feitos em uma lanchonete.
A seguir, no Desafio, veja como os pedidos são feitos atualmente e como eles deverão ser realizados após o desenvolvimento do programa.
AnteriorDica do Professor
PróximoNa prática
Com base nos requisitos estudados até aqui, elabore uma descrição das possíveis classes, métodos e atributos que seu programa deve apresentar para contemplar o escopo desse cenário. Os atributos e os métodos não precisam ser definidos, mas apenas identificados. 
Padrão de resposta esperado
O programa seria composto basicamente por quatro classes, sendo que a principal seria "Pedido". Além dela, haveriaas classes "Atendente", "Cliente" e "Item", que teriam os seguintes atributos e métodos:
1. Classe Pedido
1.1. Atributos: numeroPedido, quantidadeItem
1.2. Métodos: fazerPedido()
2. Classe Item
2.1. Atributos: codigo, valor
3. Classe Atendente
3.1. Atributos: nome, metaDiaria
3.2. Métodos: ajustarMetaDiaria()
4. Classe Cliente
4.1. Atributos: nome, CPF
4.2. Métodos: avaliarPedido()
Exercícios
1. 
O conceito principal da programação orientada a objetos, que justifica o nome do próprio paradigma, é que tudo pode ser abstraído para um objeto e, assim, um programa seria uma coleção de objetos que se relacionam e apresentam comportamento único.
Assinale a alternativa que apresenta os principais componentes de um objeto:
D. Atributos e métodos.
Os principais componentes de um objeto são seus atributos e seus métodos. Apesar de um objeto apresentar diferentes estados ao longo do ciclo de execução do programa, ele não se caracteriza como um componente do objeto. Colunas e tabelas não fazem parte de um objeto e as variáveis são declaradas no escopo do objeto, mas são utilizadas para a definição de atributos. 
2. 
A orientação a objetos trouxe alguns conceitos interessantes para a programação, e um deles está relacionado ao conhecimento sobre a implementação interna da classe, o qual é desnecessário do ponto de vista do objeto.
Assinale a alternativa correta quanto ao seu nome:
B. Encapsulamento.
O encapsulamento é a técnica que permite que o conhecimento sobre a implementação interna de uma classe seja desnecessário quanto ao objeto que a instancia. Já o relacionamento não é um conceito-base da orientação a objetos. Ainda, as classes são estruturas e a abstração, embora seja um dos conceitos novos, diz respeito a entender o conceito de objetos, enquanto que a herança refere-se a herdar estruturas de uma classe para outra. 
3. Um dos novos conceitos surgidos sobre a programação orientada a objeto é o de que ela é um mecanismo por meio do qual é possível selecionar as funcionalidades utilizadas de forma dinâmica por um programa no decorrer de sua execução.
Assinale a alternativa correta que apresenta o nome desse mecanismo:
E. Polimorfismo.
O polimorfismo é o mecanismo que possibilita às funcionalidades serem utilizadas de forma dinâmica por um programa no decorrer de sua execução. Os atributos resultam das características dos objetos; já a herança é a possibilidade de uma classe herdar a estrutura de outra e abstração é o entendimento de entidades do mundo real para a concepção de objetos. 
4. Uma das grandes vantagens da adoção da programação orientada a objetos é a reutilização de código e sua organização.
Com relação às vantagens da reutilização de código na programação orientada a objetos, assinale a alternativa correta:
C.  A reutilização de código é consequência da análise e do projeto de código.
A reutilização de código é consequência das etapas de análise e projeto da orientação a objetos, que fazem com que os projetos de código sejam bem projetados e, por influência das classes que agrupam códigos, reutilizados. Em orientação a objetos, as funções são substituídas por métodos, os quais não são, no entanto, os responsáveis pela boa reutilização e pelos procedimentos que não são de linguagens OO, assim como pelos eventos que são da programação estruturada. A simplificação de código é essencial em qualquer paradigma, mas ela, por si só, não é suficiente para a reutilização de código, e sim para a sua otimização. 
5. 
Um objeto é uma instância de uma classe em programação orientada a objetos. As classes definem, então, a estrutura dos objetos que serão instanciados a partir dela.
Com base nessa afirmativa, analise a classe a seguir em Java e assinale a alternativa correta:
public class Bola
{
String cor;
int tamanho;
boolean cheia;
void encher()
{
cheia = true;
}
void esvaziar()
{
cheia = false;
}
}
C. Cor, tamanho e cheia são atributos da classe bola.
Os atributos da classe que você analisou são: cor, tamanho e bola. Cada atributo de um tipo, ou seja, cor é um tipo string, tamanho do tipo int e cheia do tipo booleano. Encher e esvaziar são métodos que alteram o valor do atributo cheia. 
----------------------------------////////////////////////////////////////////////////////////////
Programação orientada a objetos: classes, relacionamentos e encapsulamento
Desafio
As classes têm diferentes tipos de relacionamentos, que possibilitam especificar comportamentos e necessidades diferentes. Por exemplo, relacionamentos de associação (agregação ou composição) são tipos distintos e são utilizados para representar situações diferenciadas, assim como os relacionamentos de herança (generalização ou especialização) são utilizados para representar situações de heranças entre classes.
Imagine que você está participando da etapa de análise e projeto de um sistema que será construído em uma linguagem orientada a objetos. O escopo do sistema, definido até o momento, considera o seguinte:
Sem se preocupar com atributos e métodos, você deverá identificar as possíveis classes e seus relacionamentos, justificando a sua escolha. 
Padrão de resposta esperado 
Pelo escopo definido, o modelo poderia contar com as seguintes classes e seus respectivos relacionamentos:
1. Classes
1.1 Pedido
1.2 Itens
1.3 Cliente
1.4 ClientePessoaFisica
1.5 ClientePessoaJuridica
1.6 Departamento
2. Relacionamentos
2.1 Composição entre as classes Pedido e Itens, pois um item só existe se existir o pedido; logo, se o Pedido deixar de existir, seus Itens também deverão ser destruídos.
2.2 Associação entre as classes Pedido e ClientePessoaFisica, Pedido e ClientePessoaJuridica, pois o Pedido pode ser para qualquer um dos tipos de cliente.
2.3 Generalização entre as classes Cliente e ClientePessoaFisica, Cliente e ClientePessoaJuridica, pois ambas herdam a estrutura da classe Cliente sem necessidade de especialização.
2.4 Agregação entre as classes Departamento e Pedido, pois, na medida em que um Departamento passa a existir, pedidos podem ser criados para esse Departamento.
Programação orientada a objetos: classes, relacionamentos e encapsulamento
1. Há um tipo específico de relacionamento entre classes, em que o objetivo é mostrar que as informações de um objeto (chamado objeto todo) necessitam serem complementadas por um 
ou mais objetos de outra classe (objeto parte).
Assinale a alternativa abaixo que contenha o nome desse tipo de relacionamento.
R: E. Agregação.
O tipo de relacionamento em que as informações de um objeto precisam ser complementadas por outro são representadas pelo relacionamento do tipo agregação. Composição é um tipo 
de relacionamento utilizado para representar outro tipo de dependência, enquanto generalização é utilizado para representar relacionamento do tipo herança entre classes. Associação 
forte é, também, uma denominação do relacionamento de composição e não se enquadra para esse tipo de situação; especialização é um tipo de relacionamento de herança entre classes.
2. Todo o atributo de uma classe só poderá ser manipulado pelos métodos da própria classe. O objeto, assim, esconde seus dados de outros objetos e permite que os dados sejam acessados 
por intermédio de seus próprios métodos.
Quanto a esse conceito, assinale a alternativa correta.
R: A. Esse conceito é conhecido como encapsulamento.
O conceito que possibilita que apenas os métodos da própria classe manipulem os seus atributos, é denominado de encapsulamento. O conceito de herança está relacionado a uma classe 
herdeira dos atributos de outra classe; polimorfismo é o conceito de que uma classe possa modificar o comportamento padrão da classe que herda. Relacionamentos são tipos de 
associações ou heranças entre classes; e abstração é o conceito de entendimento do universo a ser implementado pelos objetos.
3. Um tipo de objeto especifica uma família, sem se preocupar em definir como o tipo e o objeto serão implementados. Na programação orientada a objetos, os tipos são determinados na 
etapade análise.
Assinale a alternativa correta quanto à estrutura utilizada para definir como serão implementados os tipos de objetos.
R: B. Classes.
As classes são estruturas que determinam como os tipos de objetos que a utilizam serão implementados. Nelas, são definidos os atributos e métodos, assim como os tipos de 
relacionamentos. Atributos são características de objetos; os métodos, seus comportamentos. Herança e associação são alguns dos tipos de relacionamento entre as classes e objetos.
4. Os relacionamentos do tipo herança entre classes apresentam diferenças. Um dos tipos de relacionamento de herança é indicado quando existe algum atributo que seja aplicável a 
mais de uma classe, que contenha os atributos comuns a outras classes especializadas.
Assinale a alternativa correta quanto ao nome desse tipo de relacionamento.
R: C. Generalização.
A generalização é um tipo de relacionamento de herança, que é utilizado quando uma classe herda os atributos de outra classe. Quando existe a necessidade de criação de atributos 
específicos pela classe herdeira, é utilizado o relacionamento de especialização. Encapsulamento não é um tipo de relacionamento; e associação é a representação de qualquer relação 
entre classes, não determinando esse conceito específico, bem como herança.
5. Existe um tipo de relacionamento que impõe o sentido de que um objeto todo não existe sem suas partes. Não se pode ter uma cesta de produtos, sem os seus produtos, correto?
Assinale a alternativa correta quanto ao nome desse tipo de relacionamento.
R: D. Composição.
O tipo de relacionamento que possibilita especificar que, só faz sentido os objetos parte existirem, se existir o objeto todo é a composição. A agregação é um tipo de relacionamento 
semelhante à composição, mas nela, um objeto parte pode existir sem esse grau de dependência e, muitas vezes, é chamada de Agregação fraca, enquanto a composição é chamada de 
Agregação forte. Especialização é um tipo de relacionamento de herança e de não associação; o mesmo vale para o tipo especialização; e abstração não é um tipo de relacionamento.
///////////////////////////////////////////////////////////////////////////////
Programação orientada a objetos: herança e polimorfismo
Exercícios
1. 
Ao analisar um modelo de classes de um sistema, você identificou que existe um relacionamento de herança entre as classes MeioPagamento e CartaoCredito, sendo a classe mãe a MeioPagamento e a classe herdeira a CartaoCredito.
Sobre essa situação, assinale a alternativa correta:
B. 
Todos os atributos da classe MeioPagamento serão herdados pela classe CartaoCredito.
Como existe um relacionamento de herança entre as classes, sendo a classe MeioPagamento a mãe e a CartaoCredito a herdeira, é possível determinar que todos os atributos e métodos da classe MeioPagamento serão herdados pela classe CartaoCredito independentemente da sua visibilidade. Qualquer novo atributo criado na classe MeioPagamento passará a ser herdado pela classe CartaoCredito e não existe a necessidade de criar antes um objeto da classe MeioPagamento para criar um da classe CartaoCredito. 
2. Utilizando ainda o exemplo do exercício anterior, caso haja a necessidade de inserir um atributo para armazenar o valor do limite de gastos diários, que seria único por CartaoCredito, lembrando que a classe MeioPagamento também tem como herdeira a classe CartaoDebito, assinale a alternativa correta sobre essa implementação:
C. 
O atributo limiteGastosDiario seria criado somente na classe MeioPagamento.
O atributo seria criado somente na classe MeioPagamento. Apesar de o limiteGastosDiario ser único por CartaoCredito, isso se refere ao valor do atributo limiteGastosDiario. Então, não existe relação com o fato de o atributo não ser possível de ser herdado. Além do mais, CartaoCredito é um tipo de MeioPagamento e atributos comuns a MeioPagamento devem ficar na classe mãe. Os métodos get e set seriam criados na classe MeioPagamento, mas o atributo limiteGastosDiario também, e não um em cada classe. Não existiria a necessidade de criar um atributo em cada classe, mesmo que CartaoDebito e CartaoCredito tenham limiteGastosDiario diferentes. 
3. 
Em algumas linguagens de programação orientada a objetos, como C++ e Python, é possível que uma classe tenha relacionamento de herança com mais de uma classe.
Assinale a alternativa correta quanto ao nome desse tipo de herança:
D. 
Herança Múltipla.
Quando uma classe tem relacionamento de herança com mais de uma classe, esse tipo de relacionamento é chamado de Herança Múltipla. As demais denominações — Herança Composta, Herança Binária, Herança Dupla, Herança Associativa — não existem. Diz-se Herança Simples quando herda de apenas uma classe, e Herança Múltipla como nesses casos. 
4. 
Em herança entre classes, existe a possibilidade de uma classe herdeira reescrever um método implementado pela classe mãe. Dessa forma, a classe herdeira atribui um comportamento diferenciado ao da classe mãe, sendo o nome desse conceito polimorfismo.
Assinale a alternativa correta sobre o polimorfismo:
E. 
O polimorfismo é uma característica em orientação a objetos que usa a hierarquia de objetos.
O polimorfismo é um conceito que se utiliza de herança e, consequentemente, da hierarquia de objetos. O polimorfismo estático, em que a assinatura dos métodos é alterada, é um conceito que surgiu com os demais, assim como a herança na orientação a objetos, e pode ser aplicado tanto em casos de herança simples como em caso de múltiplas. Não existe limitação quanto à quantidade de métodos da superclasse por uma subclasse, desde que esta herde os métodos da superclasse 
5. 
Existem duas formas de implementação de polimorfismo. Uma se dá quando se tem a mesma operação implementada várias vezes na mesma classe e a outra acontece na herança, quando a classe herdeira altera o método original.
Assinale a alternativa correta quanto ao nome desses tipos de implementação de polimorfismo:
A. 
Sobrecarga e Sobreposição.
O tipo de polimorfismo em que um método é implementado várias vezes é chamado de polimorfismo estático ou Sobrecarga e o que altera o método original é chamado de polimorfismo dinâmico ou Sobreposição. Portanto, Estático e Sobrecarga são a mesma coisa, assim como Dinâmico e Sobreposição. Já Alternativo não é um tipo de implementação de polimorfismo. 
////////////////////////////////////////////////////////////////
Programação orientada a objetos: interfaces e classes abstratas
1. As classes abstratas são classes que determinam um tipo, são como uma espécie de rascunho de como as classes que a implementam devem se comportar.
Sobre os conceitos de uma classe abstrata, assinale a alternativa correta:
R: C. Classes abstratas não podem ser instanciadas.
Em uma classe abstrata, não é necessário que todos os métodos sejam definidos como abstratos.
Não existe restrição ao conceito de polimorfismo pelas classes herdeiras, ao contrário, a obrigação de implementação de métodos abstratos pelas classes herdeiras é o conceito de 
polimorfismo dinâmico. ​​​​​​​As classes abstratas não podem ser instanciadas, apenas definem o modelo que deve ser seguido por suas classes herdeiras. Não é necessário que as classes 
herdeiras implementem todos os métodos das classes abstratas. Classes abstratas não são um tipo de encapsulamento, seu conceito é justamente ao contrário, deixando a implementação 
por conta das classes herdeiras.
2. Outras questões são também importantes ao considerar o conceito de classes abstratas. Analise as afirmativas a seguir e assinale aquela que está correta acerca dos conceitos de classes 
abstratas.
R: A. Uma classe abstrata pode herdar de outra classe abstrata.
Uma classe abstrata pode herdar de outra classe abstrata, não existe restrição. Os métodos abstratos não têm implementação na classe abstrata; são implementados pelas classes herdeiras.
Apesar de as classes abstratas não conterem instâncias, elas são consideradas superclasses. Nas classes abstratas podem ser definidosmétodos construtores e eventos como em outras 
classes e a sua funcionalidade é complementada pelas classes derivadas, pois estas implementam os métodos abstratos da classe.
3. Classes abstratas têm um significado diretamente ligado ao conceito de herança. São classes que não fazem sentido sem que exista uma relação de herança de outras classes com a classe
abstrata. Em relação a essa afirmativa, marque a alternativa correta sobre a relação entre classes abstratas e herança na orientação a objetos:
R: D. As classes abstratas impedem que a instância de objetos seja a partir da classe genérica.
Com a utilização de classes abstratas, diferentemente do caso de herança, não é possível um objeto ser instanciado a partir da classe genérica ou superclasse. Os métodos genéricos, tanto 
em herança como em classes abstratas, podem tanto ser implementados na classe genérica como nas derivadas, apesar de o ideal ser somente na primeira. ​​​​​​​As classes abstratas são 
declaradas de forma diferente da superclasse na herança, caso contrário não fariam sentido, e, tanto em classes abstratas como em herança, novos métodos podem ser acrescentados na
classe abstrata após herança com uma classe derivada.
4. As interfaces em programação orientada a objetos são outro recurso importante e que, dependendo do contexto, possibilita algumas vantagens se comparado ao uso de classes abstratas.
Uma das principais vantagens da utilização de interfaces está relacionada ao fato de que:
R: E. A vantagem principal das interfaces é que não há limites de quantas interfaces uma classe pode implementar. A principal vantagem das interfaces é que não existe um limite de 
quantas interfaces uma classe pode implementar, diferentemente de classes abstratas. As interfaces, todavia, exigem que as classes que as referenciam implementem todos os seus 
métodos. Não existe vantagem em otimização de memória entre uma ou outra, isso depende da implementação do programa. Assim como nas classes abstratas, não é possível instanciar 
objetos a partir das interfaces. ​​​​​​​As interfaces não definem um tipo de classe padrão, isso está mais relacionado às classes abstratas.
5. O seguinte trecho de código em linguagem de programação Java especifica uma interface para classes que implementem um tipo de FiguraGeometrica:
public interface FiguraGeometrica
{
 public String getNomeFigura(); 
 public int getArea();
 public int getPerimetro();
}
Assinale a alternativa que contém uma afirmativa correta sobre o trecho apresentado:
R: A. As classes podem conter diferentes implementações dos métodos de FiguraGeometrica.
Como se trata de uma interface, é possível afirmar que todas as classes que implementam a interface podem ter diferentes execuções dos seus métodos. Todas as classes que herdam, 
necessariamente, devem implementar, mesmo que igualmente, os seus métodos, mas todos devem obedecer à assinatura dos métodos definidos na interface. Pode-se ter outra interface 
FiguraGeometrica com um nome diferente; e as classes podem implementar uma ou outra, ou mesmo as duas. Não é possível afirmar que todas as classes implementam todos os métodos 
com o mesmo escopo, apesar de ser possível, pois as interfaces não restringem isso.

Continue navegando