Baixe o app para aproveitar ainda mais
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:
Compartilhar