Buscar

UNINASSAU - Livro Unidade 4.3 - Linguagem de Programação

Prévia do material em texto

LINGUAGEM DE 
PROGRAMAÇÃO
Priscila Gonçalves
 
Templates: sobrecarga 
de métodos e funções
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Conceituar as templates.
 � Identificar a sobrecarga de métodos e funções.
 � Construir uma aplicação utilizando templates e sobrecarga de métodos 
e funções.
Introdução
Quando uma classe for vista somente como manipuladora de dados, há 
um sentido em separar as definições da classe e dos tipos manipulados, 
fazendo a sua descrição sem a definição dos dados que ela manipula. A 
sobrecarga de métodos e funções pode ser utilizada na implementação 
de classes templates e ocorre quando dois métodos possuem o mesmo 
nome, mas com assinaturas, tipos e quantidades de parâmetros diferentes.
Neste capítulo, você estudará o conceito de classes templates, a utiliza-
ção da sobrecarga de métodos e funções, bem como a implementação 
de todos esses objetos de estudo em programas.
Class template
Na linguagem C++, geralmente uma classe é projetada para armazenar tipos 
de dados e, se dentro desse contexto, ela for vista somente como uma mani-
puladora de dados, pode ser que tenha algum sentido separar as definições de 
classe e de tipos manipulados, fazendo-se, assim, a descrição de uma classe 
sem a definição dos tipos de dados que ela manipula. 
Desse modo, você definirá a classe sendo parametrizada pelo tipo genérico 
c <T>, logo, trata-se de uma descrição de um conjunto de classes que tem 
um mesmo comportamento e operam em um tipo T. Dá-se o nome de class 
template para essa construção e, por meio dela, você, programador, poderá 
criar uma série de classes distintas com a mesma descrição.
Declaração de templates
Por se tratar da descrição de uma classe, deve-se ler essa descrição antes 
de alguma declaração que englobe a template. Um dos pontos de atenção 
em relação a esse fato são os erros semânticos, que aparecerem somente no 
momento de utilização da template, pois, durante sua declaração, verificam-se 
apenas os de sintaxe, por isso, mesmo que ela seja compilada sem erros, estes 
podem aparecer quando ocorrer seu uso.
Na Figura 1, você pode ver um exemplo de declaração de template.
Figura 1. Exemplo de declaração de template.
Fonte: Microsoft (2015, documento on-line).
As templates podem utilizar diversos argumentos na parametrização da descrição 
da classe base. 
O programador pode utilizar como argumentos da template tipos primitivos da 
linguagem, por exemplo, inteiros ou caracteres.
Sobrecarga de métodos e funções
Quando se trata de orientação aos objetos, a sobrecarga de método geralmente 
ocorre quando existem dois métodos que possuem o mesmo nome, porém 
com assinaturas, tipos e quantidades de parâmetros diferentes. Em Java, por 
Templates: sobrecarga de métodos e funções2
exemplo, pode-se ter dois ou mais métodos em uma classe com o nome igual, 
desde que os parâmetros declarados sejam diferentes — com assinaturas 
diferentes. Já o polimorfismo é implementado por meio da sobrecarga.
Em C++, você pode usar a sobrecarga em funções e operadores, porque, 
assim, fornecerá mais de uma definição para um determinado nome de função 
dentro do mesmo programa. Geralmente, o compilador faz a seleção sobre 
qual a versão de função mais apropriada ou ainda qual o melhor operador, se 
baseando nos argumentos com os quais ele é chamado. Para esse procedimento, 
ele verifica os seguintes pontos:
 � o objeto que está sendo inicializado;
 � o lado esquerdo de uma instrução de atribuição;
 � o argumento formal a uma função;
 � o argumento formal a um operador definido pelo usuário;
 � o tipo de retorno de função.
Veja na Figura 2 um exemplo de sobrecarga de operadores.
Figura 2. Sobrecarga de operadores.
Fonte: Programar em C++ (2011, documento on-line).
3Templates: sobrecarga de métodos e funções
No exemplo anterior, é mostrado um trecho de código em que x e y não 
têm referência a qual objeto pertencem, mas a operação ocorre dentro de um 
deles. Logo, pode-se notar que o operador pertence a um dos objetos, obrigato-
riamente àquele que o antecede, assim, foi declarado o segundo dado a operar.
Se for selecionada mais de uma função, a sobrecarga será ambígua e apresentará erro, 
por isso, a função selecionada terá de ser melhor que as outras do grupo para, no 
mínimo, um argumento, caso contrário, a sua chamada gerará um erro.
Polimorfismo
O polimorfismo é um dos conceitos mais utilizados em programação orientada 
ao objeto, pois promove a reutilização contínua dos códigos, apresentando 
de que maneira um método pode assumir formas diferentes das quais foram 
implementadas inicialmente e agir para que possa ser reutilizado inclusive em 
outra classe. Ele cria variações de métodos com nomes totalmente iguais em 
uma classe, contendo listas de argumentos diferentes para fazer a separação 
deles, em C++, por exemplo, ocorre por meio da conversão de ponteiros ou 
referências utilizando objetos em hierarquia de classes.
Segundo Horstmann (2005), o polimorfismo descreve um conjunto de 
objetos de diferentes classes com comportamento similar. A herança é usada 
para expressar os atributos em comum entre elas, já as funções virtuais per-
mitem variações no comportamento.
Uma das vantagens da sobrecarga é permitir que os métodos relacionados sejam 
acessados com o uso de um mesmo nome, assim, quando um deles for sobrecarregado, 
poderá executar qualquer atividade em cada versão existente.
Templates: sobrecarga de métodos e funções4
Construção de uma aplicação de sobrecarga
Para construir uma aplicação que contenha sobrecarga, você deve declarar 
dois ou mais métodos da mesma classe que compartilhem um nome igual, 
porém trazendo as declarações de seus parâmetros de entradas diferentes, ou 
seja, declarar versões diferentes do mesmo método. Por meio da sobrecarga 
de operadores, pode-se redefinir o significado da maioria deles em C++, o que 
ocorre quando ao menos um operador for um objeto da classe. 
Em C++, não é possível criar operadores, apenas podem ocorrer novas 
definições para os já existentes, e nem todos são sobrecarregados. Veja no 
Quadro 1 um exemplo de operadores que recebem a sobrecarga.
Operadores unários
!
&
( )
*
+
++
-
--
~
conversion operators
NOT lógico
Address-of
Operador cast
Desreferência de ponteiro
Mais unário
Incremento
Negação unária
Decremento
Complemento de um
Operadores de conversão
Operadores binários
,
!=
%
%=
&
&&
&=
*
*=
+
+=
-
-=
Vírgula
Desigualdade
Módulo
Atribuição de módulo
AND bit a bit
AND lógico
Atribuição AND de bit a bit 
Multiplicação
Atribuição de multiplicação
Adição
Atribuição de adição
Subtração
Atribuição de subtração
Quadro 1. Linguagem de programação C++. Sobrecarga em operadores
(Continua)
5Templates: sobrecarga de métodos e funções
Quadro 1. Linguagem de programação C++. Sobrecarga em operadores
Operadores binários
->
->*
/
/=
<
<<
<<=
<=
=
==
>
>=
>>
>>=
^
^=
Seleção de membro
Seleção de ponteiro para membro
Divisão
Atribuição de divisão
Menor que
Shift esquerda
Atribuição de deslocamento para a esquerda
Menor ou igual
Atribuição
Igualdade
Maior que
Maior ou igual
Shift direita
Atribuição de deslocamento para a direita
OR exclusivo
Atribuição de OR exclusivo
Operadores unários ou binários
( )
[ ] 
delete
new
Chamada de função
Subscrito de matriz
Delete
New
(Continuação)
Para exemplificar o conceito de sobrecarga, veja a seguir o código em que deverá 
ser calculado um salário de duas formas, uma somente passando o número de horas 
trabalhadas no mês, e a outra, o salário básico mais o número de horas extras na classe 
Instrutor (Java ou C#):
Templates: sobrecarga de métodos e funções6
A seguir, você verá um exemplo de como a sobrecarga pode ser utilizada:
7Templates: sobrecarga de métodos e funções
Construção de uma aplicação utilizando templates
A aplicação que usa templates permite a criação de código reutilizado, gerando 
funções e classes genéricas, assim, os tipos de dados utilizados nessas funçõessão parâmetros. No exemplo a seguir, você verá como criar uma template de 
soma e utilizar a sobrecarga para somar os dados.
Funções templates
Os modelos de classes definirão um conjunto de classes relacionadas, que são 
baseadas em argumentos do tipo passados para elas quando instanciados. Já 
em relação às funções, ocorre de forma semelhante, porém definindo uma 
família de funções. Dessa forma, você pode especificar um conjunto de funções 
baseadas no mesmo código e atuando em diferentes tipos ou classes. A template 
de função não permitirá que objetos de tipos diferentes sejam trocados, porque 
o compilador conhece os de parâmetros em tempo de execução.
Templates: sobrecarga de métodos e funções8
Quando um argumento de template é especificado de forma explícita, 
realizam-se conversões implícitas para converter o argumento da função para 
tipos de parâmetros daquela correspondente.
Funções genéricas
Veja a seguir um exemplo de função genérica.
9Templates: sobrecarga de métodos e funções
Após criar uma template para uma função que troca os valores, esta pode ser usada 
tendo ints, doubles ou chars. Nesse caso, utiliza-se o X como data type e swapargs() como 
função genérica. O compilador automaticamente cria três versões para a swapargs(), 
portanto, as templates não funcionam para os vários tipos, pois, antes, elas permitem 
poupar escrita ao programador para não ter de especificar cada tipo.
A template function ou generic function é uma definição de uma função precedida 
pela statement template. Já a especialização == ocorre quando o compilador cria a 
versão específica da função, também conhecida como generated function, em que o 
ato de gerar a função é referido como instantiating.
Outra forma de declaração é:
Este se tornou bem parecido com o modelo utilizado anteriormente.
Veja a seguir uma função com dois tipos genéricos:
Repare que existem dois tipos de dados diferentes na mesma função.
Templates: sobrecarga de métodos e funções10
1. O que é uma class template?
a) É uma descrição de 
uma classe que tem um 
comportamento diferente.
b) É uma descrição de uma 
classe que tem um mesmo 
comportamento e opera 
em um tipo diferente.
c) É uma descrição de 
uma classe que tem um 
mesmo comportamento 
e opera em um tipo T.
d) Ocorre quando um ou mais 
métodos têm a assinatura 
diferente, mas implementações 
específicas de acordo com 
a classe a que pertencem.
e) Ocorre quando um ou mais 
métodos possuem o mesmo 
nome, mas têm conjuntos 
de parâmetros diferentes.
2. O que a utilização da class 
template permite?
a) Assinatura e declaração 
do método.
b) Declaração de variáveis 
e tipos no argumento do 
método diferentes.
c) Criação de método sem a 
reutilização do código.
d) Criação do código 
reutilizado, criando funções 
e classes genéricas.
e) Conjunto de parâmetros 
de métodos diferentes.
3. Como se deve utilizar as 
funções templates?
a) A função template deverá ser 
utilizada quando for especificar 
um conjunto de funções baseado 
no mesmo código, atuando em 
diferentes tipos ou classes.
b) Ela deverá ser utilizada quando 
um conjunto de funções não for 
baseado em um mesmo código.
c) Ela deverá ser utilizada quando 
não houver a necessidade de 
especificar classes ou atributos.
d) A função template deverá ser 
utilizada quando for especificar 
um conjunto de funções baseado 
em código diferente, atuando 
em diferentes tipos ou classes.
e) Ela deverá ser utilizada 
quando for especificar um 
conjunto de funções baseado 
no mesmo código, atuando 
em tipos ou classes iguais.
4. Qual a diferença entre class 
template e função template?
a) Class template utiliza uma técnica 
na qual subclasses herdam 
membros da superclasse.
b) Função template implementa 
uma interface.
c) Templates de classes definirão um 
conjunto de classes relacionadas, 
baseadas em argumentos do 
tipo passados para elas quando 
instanciados. Com as funções, 
ocorre de forma semelhante, 
porém, especificando um 
conjunto de funções.
d) A diferença é quando se 
utiliza o método com o nome 
diferente, mas alterando seu 
conjunto de parâmetros, 
sejam números, ordem dos 
parâmetros ou tipos diferentes.
11Templates: sobrecarga de métodos e funções
e) Função template ocorre 
quando uma classe possui 
métodos set e get.
5. Em relação à sobrecarga e 
ao polimorfismo, marque 
a alternativa correta.
a) Na sobrecarga de método, dois 
métodos possuem o mesmo 
nome, porém assinaturas 
diferentes. Já o polimorfismo 
descreve um conjunto de 
objetos de diferentes classes 
com comportamento similar.
b) Na sobrecarga de métodos, há 
métodos com mesmo nome 
e conjunto de parâmetros 
diferentes em uma mesma classe, 
além de assinaturas iguais.
c) Quando métodos de uma 
mesma classe possuem 
assinatura igual, tem-se a 
ocorrência de funções.
d) Ao implementar uma interface 
e utilizar seus métodos de 
forma específica em cada classe, 
caracteriza-se as templates.
e) Na sobrecarga e no 
polimorfismo, os métodos não 
possuem implementações.
HORSTMANN, C. Conceitos de computação com o essencial de C++. 3. ed. Porto Alegre: 
Bookman, 2005.
MICROSOFT. Templates (C++). 2015. Disponível em: <https://msdn.microsoft.com/
en-us/library/y097fkab.aspx>. Acesso em: 16 jun. 2018.
PROGRAMAR em C++: sobrecarga de operadores. 2011. Disponível em: <https://
pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Sobrecarga_de_operadores>. 
Acesso em: 16 jun. 2018.
Leituras recomendadas
ARNOLD, K.; GOSLING, J.; HOLMES, D. A linguagem de programação Java. 4. ed. Porto 
Alegre: Bookman, 2007.
MEYERS, S. C++ eficaz: 55 maneiras de aprimorar seus programas e projetos. 3. ed. 
Porto Alegre: Bookman, 2011.
MICROSOFT. Sobrecarga de função. 2015. Disponível em: <https://msdn.microsoft.
com/pt-br/library/5dhe1hce.aspx> Acesso em: 04 maio 2018.
PROGRAMAR em C++. 2012. Disponível em: <https://pt.wikibooks.org/wiki/Progra-
mar_em_C%2B%2B/Imprimir >. Acesso em: 04 maio 2018.
Templates: sobrecarga de métodos e funções12
https://msdn.microsoft.com/
http://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Sobrecarga_de_operadores
https://msdn.microsoft/
https://pt.wikibooks.org/wiki/Progra-
PROGRAMAR em C++. 2014. Disponível em: <https://pt.wikibooks.org/wiki/Progra-
mar_em_C%2B%2B/Templates>. Acesso em: 11 maio 2018.
SCHILDT, H. Java para iniciantes: crie, compile e execute programas Java rapidamente. 
6. ed. Porto Alegre: Bookman, 2015.
13Templates: sobrecarga de métodos e funções
https://pt.wikibooks.org/wiki/Progra-
Encerra aqui o trecho do livro disponibilizado para 
esta Unidade de Aprendizagem. Na Biblioteca Virtual 
da Instituição, você encontra a obra na íntegra.
 
Conteúdo:

Continue navegando