• Nenhum resultado encontrado

Jesuelkler Gouveia Java Básico

N/A
N/A
Protected

Academic year: 2022

Share "Jesuelkler Gouveia Java Básico"

Copied!
43
0
0

Texto

(1)

Jesuelkler Gouveia – Java Básico

(2)

2 1INTRODUÇÃO

Estudar programação é algo que tem requer dedicação e muito esforço. Você irá viajar por um universo onde o fim é sua imaginação. Esse curso de Java proporciona a você uma nova visão no que há de mais moderno no mundo globalizado em aspecto de programação. Java é uma linguagem inovadora que se adapta em qualquer ambiente operacional. Se você prefere trabalhar com Windows ou Linux, não terá problemas em trabalhar com essa linguagem.

1.1 HISTÓRIA DO JAVA

A partir de agora, você iniciará estudo da linguagem de programação Java. Veremos no decorrer desta aula como foi o seu surgimento e porque o Java se tornou tão popular entre os programadores. Observando o símbolo dos projetos em Java, veremos que os mesmo são representados por uma xícara de café. Isso por que o java surgiu a partir de um projeto Green, da empresa Sun Microsystems, onde estava desenvolvendo uma linguagem para o uso de equipamentos eletrônicos.

O nome Java surgiu após uma visita a uma cafeteria local feita pela equipe Sun. Java é o nome da cidade de origem de um tipo de café. Este nome foi sugerido e aceito como uma nova linguagem de programação da Sun. Como o projeto Green para equipamentos eletrônicos enfrentavam grandes dificuldades no mercado, o Java veio a ter o seu uso inicial quando a popularidade da internet cresceu, sendo a linguagem utilizada para adicionar conteúdo dinâmico às páginas.

Java é uma linguagem de programação que pode ser utilizada tanto no desenvolvimento para internet, como aplicativos empresariais de alto-nível. Um dos seus diferenciais em relação às outras linguagens de programação é a forma como seus programas são compilados e interpretados. Através do compilador Java, você inicialmente transforma seu programa em uma linguagem intermediária, chamada bytecode. Esse código é independente de plataforma utilizada (Windows, Linux, etc), sendo mais tarde interpretado por um interpretador JVM – Java Virtual Machine.

Você poderá compilar seu programa Java utilizando qualquer Sistema Operacional. Os bytecode gerados podem também ser interpretados em qualquer plataforma que possua uma JVM.

(3)

3 Você poderá testar em seu celular, ou qualquer aparelho que tenha uma JVM instalada. Um programa Java nada mais é do que um conjunto de Classes que podem ser tanto programada por você, como utilizados a partir da biblioteca de classes.

1.1.2 Primeiro programa em Java

Exercício:

//Meu primeiro programa em Java.

public class Curso {

//Método principal que inicia o programa public static void main (String [ ] args ) { System.out.print(“Meu primeiro programa Java”);

}//fim do método }//fim da classe

2 PROGRAMAÇÃO FUNDAMENTAL

Para que você tenha uma boa prática de programação, é necessário que entenda o que são tipos de dados e o que eles representam na programação. Os tipos de dados são conhecidos também como Tipos de Dados Primitivos. Basicamente são divididos em duas categorias: tipos primitivos e tipos de referencias.

Os tipos primitivos são utilizados para dados mais simples, enquanto os tipos de referências são utilizados por dados mais complexos. Existem 8 tipos de Dados primitivos, onde seis deles são numéricos, um é o caracter e outro é booleano. Veja abaixo a descrição dos tipos de dados que será utilizado em programação.

 Int inteiro de 32 bits.

 Short  Inteiro de 16 bits.

 Byte  Inteiro de 8 bits.

 Long Inteiro de 64 bits.

(4)

4

 Float Representa os números reais de 32 bits.

 Double  Representa os números reais de 64 bits.

 Char  Caractere de 16 bits.

 Boolean Contido em 1 bit.

Esses tipos de dados são usados na declaração de variáveis, que são usadas para armazenar valores dentro do programa. Como o seu nome já diz, o seu valor pode variar. Variáveis de um programa são declaradas após a especificação do seu tipo.

2.1 VARIÁVEIS

Quando se fala em variáveis, estamos falando de espaços reservados na memória Ram do computador que tem o objetivo de armazenar informações que serão utilizadas durante o código do programa. Veja abaixo alguns exemplos de variáveis:

int n1;  Variável chamada de n1 do tipo int.

float x;  Variável chamada de x do tipo float.

doubley,z;  Variável chamada de y e z do tipo double.

Todas as variáveis são declaradas colocando ; (ponto e vírgula) no final, como Java é case- sensitive, todo e qualquer comando, variável, nome de classes e objetos escritos em Java será diferenciado entre maiúsculas e minúsculas.

As variáveis tem que ser escritas em letras minúsculas. No caso de nomes compostos, o segundo nome deve ser iniciado com letras maiúsculas. Exemplo: nomeCliente. Ao declarar uma variável, você deverá atribuir valores ou operações a esta variável. Para atribuir um valor a uma variável, você devera utilizar o sinal de igualdade ( = ).

x = 2;

x = x + 5;

uf = ‘SP’;

int n1;

(5)

5 Scanner dado;

dado = new Scanner (System.in);

n1 = dado.nextInt ();

Observando o código acima note que, ele é uma parte de um programa que recebe dados digitados pelo usuário. Veja a explicação de suas partes:

int n1;  Aqui é declarada uma variável chamada n1 do tipo int. Esta variável poderá receber números inteiros.

Scanner dado;  Aqui é declarada uma nova variável chamada dado do tipo Scanner.

Neste caso Scanner é uma classe que faz parte das APIs do Java, ela serve para que o usuário entre com dados através do teclado.

dado = new Scanner (System.in);  Neste caso é criado um novo objeto Scanner e atribuído à variável dado. Outro observação neste código é o objeto System.in. Ao contrário de Systen.out, é um objeto de entrada padrão de dados.

n1 = dado.nexInt( );  Nesta última linha, é atribuído a variável n1que aguarde uma entrada de dados do tipo inteiro. No caso do usuário digitar um valor não válido, ocorrerá um erro de lógica em tempo de execução. No exemplo anterior, utilizamos a classe Scanner que faz parte do pacote Java.util. Neste caso, a mesma deve ser importada para seu programa. Veja abaixo:

importJava.Util.Scanner;

Não se preocupe em entender o exemplo anterior agora, pois mais afrente no exercício prático você verá como empregar o exemplo citado anteriormente.

2.2 OPERADORES

Os operadores são usados para comparar, relacionar e atribuir valores dentro dos programas.

Para que você entenda claramente essas opções é necessário que você treine com frequência.

Elessão divididos em algumas categorias como:

(6)

6 1- Operadores Aritméticos

2- Operadores de Atribuição 3- Operadores Relacionais

2.2.1 Operadores Aritméticos

Os operadores aritméticos são muito utilizados, pois a maioria dos programas realizam cálculos aritméticos. Veja a tabela abaixo e uma exemplificação de cada um dos operadores aritméticos que é muito usado em todos os programas criados no curso.

OPERAÇÃO OPERADOR EXEMPLO COMENTÁRIOS

Adição + x + y Soma o conteúdo de x e de y.

Subtração - x – y Subtrai o conteúdo de x e de y.

Multiplicação * x * y Multiplica o conteúdo de x e de y.

Divisão / x / y Obtém o quociente da divisão de x e de y.

Resto (Mod) % x % y Obtém o resto da divisão de x e de y.

As expressões aritméticas em Java devem ser escritas na forma de linha reta, por exemplo:

x/y. Em uma operação, você poderá também utilizar os parênteses para agrupar termos em expressões Java. Por exemplo, x * (a + b ).

2.2.2 Operadores de Atribuição

Os operadores de atribuição servem para atribuir o conteúdo de uma variável a outra. Pode- se, por exemplo, atribuir a uma variável a soma das outras variáveis.

OPERADOR EXEMPLO

= x = y

+ = x + = y - = x - = y

++ x ++

- - x --

(7)

7 Dentre os operadores de atribuição mostrados, alguns servem para incremento e decremento de valores. Para incremento você deverá utilizar o sinal ++ e para decremento o sinal - -. Veja o exemplo abaixo:

int n1 = 10;

n1 ++;

2.2.3 Operadores Relacionais

Os operadores relacionais ou operadores de comparação permitem comparar variáveis segundo a relação de igualdade /desigualdade ou relação maior / menor, devolvendo sempre um valor booleano.

OPERADOR EXEMPLO COMENTÁRIOS

= = x = = y x é igual a y

!= x != y x é diferente de y

<= x <= y x é menor ou igual a y

>= x >= y x é maior ou igual a y

> x > y x é maior que y

< x < y x é menor que y

Existem também operadores lógicos que servem para retornar a lógica pedida em um programa. É indispensável o uso dos operadores lógicos em programação.

And(&&)  Devolve verdadeiro se ambos operandos forem verdadeiros.

Or(||)  Devolve verdadeiro se algum dos operandos for verdadeiro.

Junto com os operadores lógicos, temos as estruturas de comandos que servem para executarem ações determinadas pelo usuário. Veremos uma estrutura condicional simples logo abaixo. Observe o exemplo que quando temos mais de um comando a ser executado é necessário utilizar as chaves. Quando temos apenas um comando dentro da estrutura não é necessário utilizar as chaves.

Observação: os dois sinais de (Iguais) são juntos, aqui foi colocados separados para facilitar o Entendimento.

(8)

8 Exemplo 1:

if (condição ) comando;

Exemplo 2:

if (condição ){

comando;

comando;

}

Agora analisa o código de uma estrutura condicional composta, diferente da estrutura condicional simples, se a condição for verdadeira será executado o comando 1; se for falsa, será executado o comando 2 e 3. Esse método é um dos mais utilizados, pois nem sempre desejamos que o resultado retornado fosse apenas uma comparação. Por isso utilizaremos na maioria das vezes as estruturas condicionais compostas.

Exemplo 1:

if (condição ) comando1;

else

comando2;

Exemplo 2:

if (condição ){

comando1;

} else {

comando2;

comando3;

}

Observando a estrutura de código acima, iremos utilizar para demonstrar o comando if.

Pegando como exemplo um programa que faz a média de três números inseridos pelo usuário, vamos imaginar que o programa, agora, verifica se a média foi alcançada ou não.

if (se) a média for maior que 10 imprima ‘Média Alcançada’

else (senão)

imprima ‘Média não Alcançada’

(9)

9 O pseudocódigo anterior determina se a condição da média é verdadeira ou falsa. Se a condição for verdadeira (média maior que 10) será impresso o texto média alcançada. Se esta condição for falsa, será impresso média não alcançada.

Veja agora como ficaria o código usando a programação Java.

if (media > 10)

System.out.print(“Média Alcançada”);

else

System.out.print(“Média não Alcançada”);

Outra estrutura bastante usada é a estrutura case. A esse nome chamamos de switch. A estrutura switch verifica uma variável e age de acordo com seus cases. Os cases são as possibilidades de resultados que são obtidos por switch.

Basicamente, o switch serve para controlar várias condições diferentes de acordo com o case definido dentro dele. Abaixo veremos um exemplo de como utilizar o comando switch.

Exemplo 1:

Swhitch (variável) {

case1: comando;

break;

case1: comando;

break;

default: comando;

}

Observa que o ultimo comando foi default. Esse comando foi utilizado e só será chamado caso o switch não encontre um valor dentro dos cases que ele percorreu.

Exercícios:

// 1º)Programa para calcular a média de quatro números.

(10)

10 import java.util.Scanner;//Importação da classe Scanner.

public class Media {//Declaração da classe Media.

public static void main (String args[]) { //Método principal para executar o programa.

float nota1,nota2,nota3,nota4,media;//variáveis Scanner entrada = new Scanner(System.in);

//Classe Scanner para obter entrada de dados externo.

System.out.print("Nota do primeiro Bimestre: ");//primeira nota.

nota1 = entrada.nextFloat();//Faz a leitura da primeira nota.

System.out.print("Nota do segundo Bimestre: ");//segunda nota.

nota2 = entrada.nextFloat();//Faz a leitura da segunda nota.

System.out.print("Nota do terceiro Bimestre: ");//terceira nota.

Nota3 = entrada.nextFloat();//Faz a leitura da terceira nota.

System.out.print("Nota do quarto Bimestre: ");//quarta nota.

nota2 = entrada.nextFloat();//Faz a leitura da quarta nota.

media = (nota1 + nota2 + nota3 + nota4)/4; //encontra a media.

//Inicio da condição de aprovação.

if(media >= 6) {

System.out.print("Voce foi APROVADO. ");

}

else

(11)

11 {

System.out.print("Voce foi REPROVADO. ");

}

System.out.println("Média = "+(double)media);//Mostra o resultado na tela.

}//fim do método principal. main

}// fim da classe Media.

//2º) Laço para imprimir uma sequencia de números.

public class Loop{

public static void main(String[] args) { int i = 0;

while(true){

if(i == 6) break;

System.out.println(i);

i++;

} //fim do while } //fim do método main } //fim da classe Loop

3 ARRAYS

Agora que você já conhece os comandos de repetição em Java, iremos aprofundar mais os conhecimentos em uma classe de estruturas chamadas Arrays. Eles são divididos em basicamente dois tipos para facilitar o entendimento.

(12)

12 3.1 VETORES

Um Array é um grupo de variáveis, onde seus dados são do mesmo tamanho e tipo. Esses Arrays podem ser divididos em dois tipos: Vetores para Arrays unidimensionais e Matrizes para Array bidimensionais.

Um vetor é uma variável composta homogênea unidimensional. Isto quer dizer que se trata de um conjunto de variáveis do mesmo tipo, que possuem o mesmo identificador (nome) e são alocadas seqüencialmente na memória.

Um Array é um objeto que armazena um número pré-definido de elementos, sendo que o seu tamanho é definido no momento da construção. Seus elementos são acessados através de índices (posição) que se indicam sempre por 0 (zero), ou seja, um Array de tamanho quatro ( 4 ) terá índices (0, 1, 2, e 3). Para a construção de um Vetor, devemos seguir 3 etapas principais.

1. Declaração 2. Construção 3. Inicialização

Como qualquer outro objeto Java, os Arrays são criados a partir da palavra chave new. Ao criar um Array, deve-se especificar o tipo dos elementos do Array e o número de elementos. Para se declarar um vetor, o mesmo é definido pela existência de colchetes vazios ( [ ] ) antes ou depois do nome da variável, sendo feito em seguida o dimensionamento do vetot.

DECLARE nome [tamanho] tipo

Na sintaxe acima, veja que para criar um vetor, necessita-se declara um nome, tamanho e tipo de dados, que será armazenado no vetor. Agora veja o mesmo exemplo acima declarado em Java.

Exemplo 1:

int x [ ];

x = new int [10];

Exemplo 2:

int x [ ] = new int [10];

(13)

13 Os dois exemplos acima são de criação de um vetor. Observe que o primeiro estar em duas linhas, enquanto o segundo está em apenas uma linha. Todos têm a mesma funcionalidade, a diferença é o número de linhas na sua criação.

Na primeira linha do exemplo 1 acima, é declarado uma variável do tipo vetor (através dos colchetes) com o nome x. Na segunda linha é criado um novo objeto Array e determinado que o mesmo terá o tamanho 10, ou seja, posições de 0 a 9.

No segundo exemplo, é mostrado a declaração e o dimensionamento em apenas uma linha de código. Não necessariamente podemos armazenar apenas números em um vetor, podendo também armazenar outros caracteres utilizando o tipo de dados char. Veja abaixo um exemplo de como inserir um caractere para cada posição do vetor, e que utilizando o tipo de dados char, você poderá inserir tanto números, quanto caracteres.

char [ ] x = new char [5];

VALORES A / 3 1 % L

POSIÇÃO 0 1 2 3 4 5

Para atribuir valor a um vetor, deve-se primeiramente informar em qual de suas posições o valor ficará armazenado. Lembre-se que a primeira posição de um vetor, tem índice zero (0).

Observe o código em Java para inserir valor dentro de um vetor.

x[0] = 4; //coloca 4 na posição 0 (inicial) do vetor x[3] = ‘c’; //coloca a letra c na posição 4 do vetor.

Observando o código acima, a letra c não ocupa a 3º posição e sim a 4º posição. Isso ocorre por que o vetor inicia em 0 (zero).

Ao utilizar um vetor, você não necessariamente precisa atribuir valores as suas posições, mas poderá preenchê-las utilizando a estrutura de controle for. No exemplo abaixo, veja que foi utilizado também a classe Scanner vista em tópicos anteriores, para que o usuário possa entrar com os valores através do teclado.

(14)

14 Scanner dado;

dado = new Scanner (System.in);

for (i=0; i<10; i++)

vet[i] = dado.nextInt();

System.out.printLn(vet[i]);

Scanner Dado: Nesta parte do código, é criado uma variável dado do tipo Scanner.

Dado = new Scanner (System.in): Nesta segunda parte do código, é criado um novo Objeto Scanner e o mesmo atribuído a variável Scanner.

for (i=0; i<10; i++): Nesta terceira parte foi utilizado o comando for. Como já foi falado, o comando for começa com um valor inicial (i=0), depois uma condição (i<10) e por fim temos um incremento (i++).

vet[i] = dado.nextInt ( ); Neste caso, é atribuído a variável vet que aguarde a entrada de dados do tipo inteiro. Observe que a variável vet é do tipo vetor, e suas posições estão em i.

System.out.printLn (vet[i]); Neste ultimo código, a cada execução da estrutura de repetição, uma nova posição será utilizada e seu valor será mostrado através desta linha de código.

3.2 MATRIZES

Ao contrário de um vetor que é um Array unidimensional, uma matriz é bidimensional, sendo também formadas por uma seqüência de variáveis, todas do mesmo tipo, com o mesmo nome (identificador).

DECLARE nome [dimensão1, dimensão2] tipo

No caso, a dimensão1 é a quantidade de elementos da 1ª dimensão, sendo também considerada como linha. A dimensão2 é a quantidade de elementos da 2ª dimensão, sendo também considerada como colunas. Uma matriz pode também ser tridimensional, contendo dimensão1 (linhas), dimensão2 (colunas) e dimensão3 (profundidade).

(15)

15 Da mesma forma que um vetor, a declaração de matrizes é feita pela existência de colchetes vazios antes ou depois do nome da variável, sendo definidos em seguida, o tamanho de cada dimensão. Veja também que uma matriz pode Sr criada de duas maneiras, veja no exemplo abaixo.

Exemplo 1:

int x [][];

x = new int [3][5];

Exemplo 2:

int x [][] = new int [3][5];

No exemplo anterior, temos uma variável x contendo 4 linhas (0, 1, 2, 3) e 6 colunas (0, 1, 2, 3, 4, 5). Lembre-se que o índice de uma matriz também começa em zero. Para atribuir valores em uma matriz, se deve percorrer da mesma forma que foi mostrado em vetores. O exemplo abaixo atribui o valor 8 à 2ª linha 4ª coluna da matriz.

x [1][3] = 8;

Para preencher uma matriz o procedimento é quase o mesmo de vetor. Preencher uma matriz significa percorrer e atribuir valores a todos os seus elementos. Como em um vetor, você poderá atribuir um valor fixo diretamente na variável, ou o próprio usuário através do teclado utilizando-se da classe Scanner.

Scanner dado;

dado = new Scanner (System.in);

for (i=0; i<10; i++)//laço das colunas {

for (j=0; j<5; j++)//laço das linhas x[i][j] = dado.nextInt();

System.out.printLn(x[i][j]);

}

3.3 CADEIAS DE CARACTERES

(16)

16 Anteriormente quando falamos sobre vetores e matrizes, você viu no programa exemplo, que declaramos um vetor nome utilizando String. Neste caso, caracteres em Java podem ser armazenados em objetos da classe String, e da classe StringBuffer. Na aula onde falamos sobre tipos de dados, utilizamos char para trabalhar com textos.

A diferença entre ambos, é que String pode armazenar uma cadeia de caracteres tendo seu conteúdo de estar dentro de aspas duplas, ao passo que char pode armazenar apenas um único caractere e seu conteúdo deve estar dentro de aspas simples. Uma string pode ser inicializada de várias formas. Veja abaixo:

String nome = null; //String inexistente sem valor nenhum.

String nome = “ ”; //String sem conteúdo (Vazia).

String nome = “Carlos”; //String com conteúdo.

String nome = “Caixa d\’\água”; //String que armazena o conteúdo com apóstrofo, deve-se colocar entre barras.

A manipulação de cadeia de caracteres na linguagem Java, utiliza o pacote de classes java.lang. Este pacote de classes contém funcionalidades básicas da linguagem Java e, por isso, dispensa o uso do import como é o caso da classe Scanner.

As cadeias de caracteres podem ser inicializadas tanto automaticamente pelo programa ou por meio do teclado. Veja abaixo alguns exemplos.

Exemplo 1:

String nome = new String ();

String nome1 = new String (“Carlos”);

nome = nome1;

Neste exemplo, o objeto nome é instanciado e seu conteúdo é vazio. Em seguida, o objeto nome1 é instanciado e o seu conteúdo é Carlos. Por fim, o objeto nome terá o mesmo conteúdo de nome1. Instanciar é criar um objeto com base em uma classe definida pelo programador.

(17)

17 Exemplo 2:

String nome = new String ();

Scanner nome1;

nome1 = new Scanner (Systen.in);

nome = nome1.next();

No segundo exemplo, o objeto nome é instanciado e o seu conteúdo é vazio. Em seguida, é criado uma entrada de dados através da variável nome1 do tipo Scanner. Por fim, é atribuído à variável nome, o conteúdo da variável nome1 que recebeu seus dados através do teclado.

Ainda neste exemplo, o método next consegue armazenar valores vindos do teclado até existir um espaço em branco. Pegando o nome Carlos da Silva como exemplo, a variável iria armazenar apenas Carlos. Para resolver isso, deve-se utilizar o método nextLine ficando assim o exemplo mostrado acima:

nome = nome1.nextLine();

Quando criamos um objeto do tipo String, seu conteúdo não pode ser modificado, a não ser que criamos outra variável e seu conteúdo seja atribuído a esta variável, onde o conteúdo da primeira será desprezado. Neste caso, você poderá utilizar String Buffer. Ao contrário da classe String, a classe String Buffer pode ter seu conteúdo modificado, podendo armazenar uma cadeia de caracteres que inicialmente tem tamanho 16, mas expansível de acordo com a necessidade.

StringBuffer nome = new String ();

Neste exemplo acima, temos um objeto nome com conteúdo vazio e capacidade de 16 caracteres. No caso, se você colocar, por exemplo, 10 dentro dos parênteses, será então a capacidade de 10 caracteres. Além do StringBuffer, você poderá utilizar o StringBuilder. No caso da StringBuffer, seus métodos são sincronizados, assim é uma classe preparada para ambiente multitarefa.

(18)

18 Já a classe StringBuilder é similar a classe StringBuffer, a única diferença é que os seus métodos não são sincronizados. Esta classe é indicada quando não é necessário ter o controle sobre as threads. Podemos utilizar juntamente com a classe StringBuffer o método append. Este método adiciona conteúdo ao final de uma StringBuffer.

StringBuffer frase = new StringBuffer (“Curso”);

frase.append(“de”);

frase.append(“Java”);

System.out.printLn(frase);

Veja a seguir mais algumas possibilidades que podemos utilizar com a classe String.

Concatenação – Concatenar nada mais é do que juntar duas ou mais strings numa só. Isto pode ser feito utilizando o sinal de adição ( + ) ou utilizando o método concat ( ). Veja abaixo que foi utilizado as duas formas juntas.

//Programa que junta Várias Strings em uma só.

public class concatenacao {//inicio da classe concatenação.

public static void main (String [] args ){//inicio do método

String nome1 = “Carlos ”;

String nome2 = “da “;

String nome3 = “Silva”;

String recebe = nome1.concat(nome2 + nome3);

System.out.printLn(recebe); //(L é em minúsculo) }//fim do método main

}//fim da classe concatenação.

Para descobrir o tamanho da String utilizamos o método length( ). Através dele, você descobre o número de uma cadeia de caracteres. Observando o exemplo abaixo, o programa pedirá para o usuário digitar um nome e fará a contagem dos caracteres através do método length. O

(19)

19 exemplo abaixo se encontra funcionando e servirá como exemplo para você resolver os exercícios que serão feitos com essa finalidade.

import java.util.*; //todo o conteúdo de java.util é importado.

public class NUM_caracteres {//Inicio da classe NUM_caracteres.

public static void main (String [] args ){//inicio do metodo

String nome;

int tamanho;

System.out.println(“Digite um Nome: ”;

nome = new Scanner (System.in).nextLine();

System.out.println(“Nome digitado = ”+nome) tamanho = nome.length();

System.out.println(“Quantidade de Caracteres da String digitada =

”+tamanho);

}//fim do método main }// fim da classe NUM_caracteres

Comparação – O método equals( ) compara o objeto string com outro objeto, se ambos possuem conteúdos iguais, então, é retornado verdadeiro (true), caso contrário falso (false). O método equals ( ) é case sensitive, para fazer uma comparação ignorando esta característica, basta usar o método equalsIgnoreCase( ).

O exemplo abaixo faz comparação do nome Carlos com o primeiro caractere maiúsculo e outro minúsculo.

public class comparacao {//inicio da classe comparação.

public static void main (String [] args){//início do método

(20)

20 String = nome1 “Carlos”; //1º Maiúsculo

String = nome2 “Carlos”; //1º minúscula

System.out.println(“São iguais? (case sensitive)”);

System.out.println(nome1.equals(nome2) ? “sim” : “não”);

System.out.println();//Linha em branco.

System.out.println(“São iguais? (sem case sensitive)”);

System.out.println(nome1.equalsIgnoreCase(nome2) ? “sim” : “não”);

}//fim do método main }//fim da classe.

Exercício:

//1º) Programa para calcular a média de quatro notas de dois alunos utilizando matriz e vetor.

import java.util.Scanner;//Importação da classe Scanner.

public class Matriz {//Declaração da classe Matriz.

public static void main (String args[]) { //Método principal para executar o programa.

double[][] notas = new double[2][4]//variável notas matriz double nota;//Variável nota do tipo double.

double [] media = new double [2];// Variável media vetor String [] nome = new String [2]; // variável nome vetor

/*Veja que neste exemplo, temos uma variável notas do tipo matriz que irá controlar as notas inseridas pelo usuário.

Se você observar, note que teremos 8 elementos, o mesmo que 2 vezes 4 = 8.*/

for (int i = 0; i < 2 ; i++){ //inicio do for

(21)

21 System.out.println("Nome do Aluno "+(i+1)+ ':');//Entrada dos nomes dos alunos.

nome[i] = new Scanner(System.in).nextLine();//Faz a leitura dos nomes dos alunos.

//Veja que neste caso como utilizamos um vetor, não é necessário uma entrada e leitura de código para cada aluno.

}//fim do laço for.

System.out.println();//Insere um espaço em branco.

for (int i = 0; i < 2 ; i++){ //Aqui temos uma condição que irá controlar a entrada de dois alunos com 4 notas.

System.out.println();//Insere um espaço em branco.

nota = 0;//Aqui a variável nota é zerada para receber as notas do segundo aluno.

System.out.println("Aluno "+(nome[i])+':');//Exibe o nome dos alunos.

for (int j = 0; j < 4; j++){//Aqui temos uma condição que irá controlar as 4 notas de cada aluno.

System.out.print("Nota "+(j+1)+':');//Exibe as notas de cada aluno.

nota += new Scanner(System.in).nextDouble();//Faz a leitura de cada nota de cada aluno.

}//fim do laço que controla as notas for j

media[i] = nota /4; //A variável media recebe a soma da variável nota dividida por 4.

(22)

22 }//fim do laço que controla a entrada de dois alunos for i

System.out.println();//Insere um espaço em branco.

for (int i = 0; i < 2; i++){//Aqui temos uma condição que irá controlar a exibição da média de cada aluno.

if (media[i] >= 7)//Aqui faz uma comparação verificando se o valor de i armazenado em media é maior ou igual a 7.

System.out.println("Aluno "+ (nome[i])+" Aprovado, média: "+ (media[i]));

/*Exibe o nome do aluno aprovado caso a condição acima for verdadeira.*/

Else //senão

System.out.println("Aluno "+ (nome[i])+" Reprovado, média: "+ (media[i]));

/*Exibe o nome do aluno reprovado caso a condição acima for falsa.*/

}//Fim instrução for.

}//fim do método principal.

}// fim da classe Matriz.

4 ORIENTAÇÃO A OBJETOS

(23)

23 Nesse capítulo iniciaremos a programação orientada a objetos. Para o melhor entendimento, esse tipo de programação visa o reaproveitamento de código, a fim de poupar tempo na hora da programação. Iremos abordar os principais meios de reaproveitamento de código através dos tópicos seguintes.

4.1 ESTRUTURAS DE PROGRAMAÇÃO

Até agora falamos de Java como uma forma estruturada de programação, mas como já foi dito, uma das suas grandes vantagens é a programação orientada a objetos. Uma das desvantagens da programação estruturada (Trabalhando direto no código) é quando o programa necessita de mudanças, sendo necessárias grandes modificações no código.

Com o passar dos anos, as novas linguagens de programação começaram a utilizar uma nova forma de programação, chamada POO – Programação orientada a Objetos. Esta nova forma de programação imagina um mundo real dentro do computador, utilizando-se assim a idéia de objetos que podem ser:

Utilizando a idéia, fica a cargo do programador, modelar e interagir os objetos entre si. Essa modelagem leva em consideração alguns conceitos, dentre os principais, pode-se citar:

Classes:  É o molde para criar objetos. Possui todas as especificações de um grupo.

Exemplo: São Bernardo e Fila, apesar de serem diferentes, derivam da classe Animais.

Atributos:  Definem as características destes objetos. Exemplo: A classe animais poderia ter com atributos: nome, raça, sexo, etc.

(24)

24 Métodos:  Definem o comportamento dos objetos. No caso da classe Animais, por exemplo, podemos ter os métodos: latir, brincar, morder, etc.

Abstração:  É a habilidade de se concentrar nos principais aspectos de um grupo de objetos, em vez de se preocupar com as suas especificações.

Exemplo: Para a classe Animais são definidas as principais características comuns à maioria e não especificações incomuns, como animais com três patas, por exemplo.

Encapsulamento:  É a habilidade de esconder as características de um objeto. Neste caso, um objeto não deve ser capaz de acessar ou alterar atributos de outro objeto diretamente.

Associação:  É a habilidade pela qual um objeto utiliza recursos de outro.

Herança:  É a capacidade de criar subclasses a partir de uma superclasse. Essas subclasses herdam, então, todas as características da superclasse. Exemplo: Você poderia ter a classe Animais e duas subclasses chamadas Cães e Gatos, que herdariam atributos como: Nome, raça, sexo, etc.

Polimorfismo:  É o principio pelo qual uma subclasse sobrescreve em comportamento (Método) herdado de sua superclasse. Exemplo: A classe animais implementa o método correr, mas a classe cães, derivada da classe animais precisa de algo mais específico, envolvendo mais dados.

Então a classe Cães sobrescreve o método correr, tornando mais especifico.

Animais Cães Gatos

Código 001 001

Nome Freud Mei

Raça Pastor Alemão Persa

Sexo Macho Fêmea

Observando a tabela acima, a coluna animais serve para definir a classe e suas respectivas especificações. (Código, Nome, Raça, e Sexo). Já a coluna cães define o objeto cães e seus dados.

O mesmo faz a coluna Gatos. Perceba que os atributos de ambas as colunas se relacionam com as especificações da classe animais. Veja a seguir o eu foi mostrado nesta tabela através do Java.

(25)

25 class Animais {//inicio da classe

//Estado

integer codigo;

String nome;

String raca;

String sexo;

}//fim da classe

class Contr_Animais {

public static void main (String [] args){

//Declara os objetos Caes e Gatos Animais caes;

Animais gatos;

//Criando os objetos de cães e gatos caes = new Animais();

gatos = new Animais();

//Atribuindo valores para o objeto Cães.

caes.codigo = 001;

caes.nome = “Freud”;

caes.raca = “Pastor Alemão”;

caes.sexo = “Macho”;

System.out.println(“Código do Cão: ”+caes.codigo);

}//fim do método }//fim da classe

//Repete o procedimento para os outros códigos. Nome, raça, e sexo

(26)

26 4.2 MÉTODOS

Você aprendeu no tópico anterior, que criamos um objeto num programa orientado a objetos como é o caso do Java, implementamos todo o seu comportamento em um ou mais métodos.

Pegando como exemplo a classe animais e os objetos cães e gatos, podemos implementar os métodos (comportamentos): Latir, brincar, correr, etc. cada um destes métodos gera uma ação em um programa.

Um método em Java é equivalente a uma função, sub-rotina ou procedimento em uma linguagem modular. Cada método poderá receber valores, parâmetros, podendo devolver ou não um valor de retorno. A chamada de um método requer que seja informado ao objeto, ou a calsse que o executara, sendo que alem disso, deveremos definir seu modificador. Os modificadores são palavras reservadas que controlam o acesso a atributos e métodos, são eles:

Public:  É o menos restritivo de todos. Atributos e métodos declarados como public em uma classe, podem ser acessados pelos métodos da própria classe, classes derivadas e qualquer outra classe dentro do mesmo pacote.

Protected:  Atributos e métodos definidos como Protected são acessíveis pelos métodos da própria classe e pelas classes derivadas.

Private:  Sendo de maior restrição, atributos e métodos declarados como Private, sô podem ser acessados pelos métodos da própria classe.

Default:  No caso de nenhuma das opções acima seja definida, será utilizado uma configuração padrão Default. Atributos e métodos definidos como default podem ser acessados pelos métodos da própria classe, classes derivadas e qualquer outra classe do mesmo pacote.

Observação:  Outro modificador que pode fazer parte quando se declara um método é a instrução static. A idéia deste modificador, é que seus elementos estejam associados com a classe, e não com as instancias dessa classe. Neste caso, não seria necessário nem mesmo a criação de uma instancia.

(27)

27 4.2 ENCAPSULAMENTO

Em tópicos anteriores, criamos uma classe animais e alguns atributos, como: Nome, raça, sexo, etc. Mas neste caso, não definimos nenhuma forma de proteger estes atributos, sendo que os mesmo poderiam ser acessados por qualquer classe externa. Para isso utilizamos uma técnica chamada de Encapsulamento. Essa técnica consiste no isolamento das partes de um programa, proibindo o acesso direto a métodos e atributos, utilizando os já citados modificadores.

Em programação algumas convenções devem ser seguidas. Normalmente os atributos de uma classe são declarados como privados, e os métodos declarados como públicos. Neste caso, o acesso a estes atributos serão feitos através de métodos. Os principais métodos que iremos abortar são os Get e Set.

Para acessar e modificarmos atributos devemos utilizar os métodos get (getters) e set (setters). Veja abaixo:

Método Get (getters):  Método de acesso aos atributos. Exemplo: getNome( ), getIdade( ).

Método Set (setters):  Método para modificar o valor de um atributo. Exemplo:

setNome(String Nome), setIdade(integer Idade).

Os métodos Get e Set devem ser utilizados somente quando necessário, pois nem todos os atributos de uma classe devem ser acessados ou modificados. Um método de acesso a um atributo quando acionado, retorna o valor armazenado no atributo. Utilizamos para isso a palavra get, seguida do nome do atributo. Como neste caso retorna um valor, deveremos ter chamado return no corpo desse método.

public String getNome(){

return nome;

}

(28)

28 Um método de configuração de um atributo quando acionado, envia um valor para ser armazenado no atributo. Utilizamos para isso a palavra set seguida do nome do atributo. Não sendo necessário retornar um valor, os métodos set são void.

public void setNome(String n){

return n;

}

No exemplo abaixo, criamos uma classe chamada Pessoa, tendo apenas um atributo, que é a variável declarada como Private. Sendo um atributo privado, criamos um método get para podermos obter o valor deste atributo. Criamos também o método set para modificarmos esse atributo.

class Pessoa {//inicio da classe

private String nome;//variável nome do tipo String privada.

public String getNome(){//Acessa o conteúdo de nome.

return nome;//Retorna o valor que estiver dentro de nome.

}//fim do método GET

public void setNome(String nome){//Modifica o conteúdo de nome this.nome = nome;

}//fim do método SET }//fim da classe Pessoa

4.2.1 Método Construtor

Quando criamos uma classe, a mesma deve conter pelo menos um Método Construtor. O Método Construtor é um bloco de código como se fosse uma função, tendo a finalidade de cria ruma instancia (objeto) da classe. Este construtor deve ter o mesmo nome da classe em que ele pertence.

(29)

29 Toda vez que chamamos uma classe, um objeto deve ser construído, sendo esta responsabilidade do Método Construtor. Isto é necessário, pois para que um objeto passe a existir, é necessário que o mesmo seja executado por um Método Construtor da classe.

Quando você define um método construtor, o mesmo deverá possuir o mesmo nome da classe e não devera ter o tipo de retorno definido. Caso você não defina, o Java executará o método construtor padrão, que simplesmente reserva espaço na memória para ser executado.

Veja que aqui definimos o construtor para a classe Pessoa. Observe que este construtor possui o mesmo nome da classe e também é declarado como Público. Neste exemplo, toda vez que o objeto Pessoa for chamado, o atributo nome terá uma cadeia de caracteres vazia.

class Pessoa {//Inicio da classe Pessoa

private String nome;//variável nome do tipo String privada

public Pessoa () {//Método CONSTRUTOR PUBLICO nome = “ ”;

public String getNome(){//Acessa os Atributos...

return nome;

}//fim do acesso aos Atributos.

public void setNome (String nome) {//Modifica os Atributos...

this.nome = nome;

}//fim da modificação dos Atributos.

}//fim do método CONSTRUTOR }//fim da classe

Exercícios:

//1º) Cria a Super Classe Animais.

class Animais{//inicio da classe Animais.

(30)

30 //ESTADO

Integer codigo;

String nome;

String raca;

String sexo;

}//fim da Classe Animais.

//2º) Classe que terá os objetos animais. Contr_Animais

class Contr_Animais {//Inicio da classe Contr_Animais

public static void main(String[] args) {//Inicio do método

Animais caes;//Objeto Cães - VARIÁVEL Animais gatos;// Objeto Gatos - VARIÁVEL

caes = new Animais();//Cria o Objeto Cães gatos = new Animais();//Cria o Objeto Gatos

caes.codigo = 001;

caes.nome = "Kakaroto";

caes.raca = "PitBull";

caes.sexo = "Macho";

System.out.println("Código do cão: "+caes.codigo);

System.out.println("Nome do cão: "+caes.nome);

System.out.println("Raça do cão: "+caes.raca);

System.out.println("Sexo do cão: "+caes.sexo);

System.out.println();

gatos.codigo = 001;

gatos.nome = "Benihime";

(31)

31 gatos.raca = "Ragdoll";

gatos.sexo = "Fêmea";

System.out.println("Código do gato: "+gatos.codigo);

System.out.println("Nome do gato: "+gatos.nome);

System.out.println("Raça do gato: "+gatos.raca);

System.out.println("Sexo do gato: "+gatos.sexo);

}//fim do método main }//fim da classe Contr_Animais

Fim de Animais.

//3º Criação de um Método que retorna valor. VAI SER HERDADO class metodos {

public static float divisao (float dividendo, float divisor){

float q;

q = dividendo / divisor;

return q;

}//fim do metodo divisao }//fim da classe

//4º Programa que herdará o Método criado acima. Test_metodos

import java.util.Scanner;

public class Teste_metodos {

public static void main(String args[]){

metodos resposta;

resposta = new metodos ();

(32)

32

Scanner e = new Scanner (System.in);// e representa entrada float n1, n2;

System.out.println("Digite o valor do dividendo: ");

n1 = e.nextFloat();

System.out.println("Digite o valor do divisor: ");

n2 = e.nextFloat();

System.out.println("O resultado da divisão é: "+resposta.divisao (n1, n2));

} }

//Obs: Resposta.Divisao, é por que resposta foi criado do tipo método, que dentro dele tem um método Divisao, que retorna um valor q, que é o resultado do divisor pelo dividendo. Entenda isso.

Agora iremos usar os métodos GET e SET.

//1º Produtos – Usaremos os Métodos GET e SET ( serão HERDADOS )

public class Produto {

private int num;

private String nome;

private float valor;

public Produto() {//inicio o metodo construtor de Produto num = 0;

nome = “ ”;//vazio valor = 0;

}//Fim do construtor Produto

(33)

33

//---inicio SET e GET --- public void setNum(int num){ //modifica o valor do objeto num this.num = num;

}

public int getNum(){ //acessa o valor do objeto num return num; //retorna o valor

}

//---fim SET e GET ---

public void setNome(String nome){

this.nome = nome;

}

public String getNome(){

return nome;

}

//---

public void setValor(float valor){

this.valor = valor;

}

public float getValor(){

return valor;

}

}//Fim da classe Produto

//2º Teste_Produto que herdará produto.

public class Teste_Produto {

(34)

34 public static void main(String args[]){

Produto p; //Objeto p do tipo produto – VARIÁVEL P p = new Produto(); //cria o objeto P

p.setNum(4);

p.setNome("Rack");

p.setValor(500);

System.out.println("Código: " + p.getNum());

System.out.println("Descrição: " + p.getNome());

System.out.println("Valor: " + p.getValor());

}//fim do metodo main }//fim da classe Teste_Produto

5 PACOTES JAVA

Durante o curso criamos vários programas de exemplos, sendo que um deles foi dividido em duas ou mais classes salvos em uma mesma pasta. Em um grande projeto chega um momento que necessitamos organizar nossas classes, sendo aconselhável agrupá-las dentro de pastas.

É ai que entra os pacotes (package) Java. Estes pacotes nada mais são que diretórios (pastas) onde são armazenadas classes que tem alguma relação entre si. O uso de pacotes nos permite tanto organizar classes, como também diferenciar classes distintas que possuem o mesmo nome.

Muitos IDEs criam automaticamente estes pacotes durante um projeto. Mas nada impede de você criá-los diretamente no Sistema Operacional, bastando criar e dar nomes as pastas. Ao criar uma classe e salvá-la dentro de um pacote, você deverá definir em seu código, de qual pacote ela pertence. Isto até agora não foi necessário pelo motivo de salvarmos as classes dentro da mesma pasta.

(35)

35 Para definirmos, devemos utilizar a palavra package juntamente com o nome da pasta. Veja abaixo que a classe Produtos faz parte do pacote Exemplo.

package Exemplo;

public class Produtos{

Durante um projeto podemos ter a necessidade de utilizar uma classe de outro pacote. Para isso, deveremos utilizar o comando import.

5.1 APIS DO JAVA

Anteriormente vimos como utilizar classes que fazem parte de outro pacote, utilizando-se para isso os comandos package e import. Veremos agora que além de poder importar funcionalidades de outra classe, pode utilizar bibliotecas de classes prontas, que são agrupadas em categorias de classes relacionadas entre si.

5.2 JAVA DOC

Vimos anteriormente as APIs do Java, que você poderá sempre que quiser tirar suas dúvidas sobre pacotes, classes e métodos. Estes documentos podem ser acessados a qualquer momento que necessitar, sendo que para isso você deverá utilizar o endereço abaixo:

http://www.oracle.com/technetwork/java/javase/documentation/index-jsp-135444.html

La você encontrará um link para os aplicativos Java. É só clicar que você encontrará todos os documentos necessários para uma explicação. Todos são em inglês, mas você poderá utilizar a Google para traduzir. Este sistema é o padrão de documentação de classes em Java, e muitos IDEs desta linguagem irão automaticamente gerar um javadoc em HTML.

Através deste sistema você poderá gerar documentos das suas próprias classes, sendo muito útil para documentar todo seu projeto. Para documentar as suas classes, você deverá executar o

(36)

36 comando javadoc.exe no prompt de comandos do Windows, ou criar um arquivo bat para isso, e executá-lo.

Siga os comandos abaixo para criar a sua documentação.

Exercícios:

Para realizar esse exercício com sucesso, crie uma pasta com seu nome dentro da unidade C:\ do Windows. Dentro da sua pasta, cria uma subpasta com o nome pacotes. Recorte o Arquivo metodo.java feito anteriormente e cola dentro da pasta pacotes.

Abra o arquivo metodo.java no JCriator e adicione no inicio do programa, a seguinte linha de comando:

//Adiciona no arquivo metodo.java

package pacotes;

public class metodos {

Obs: O public foi adicionado, pois se trata de um arquivo que vem de uma subpasta.

Agora abra o arquivo Teste_metodo.java e acrescenta no inicio o seguinte comando:

import pacotes.*; //importa tudo de dentro de pacotes import java.util.Scanner;

6 HERANÇA

(37)

37 Daremos agora uma introdução a um dos principais recursos de uma programação orientada a objetos, que é a herança. Na vida real, recebe uma herança e adquirir bens e obrigações.

De outra pessoa sendo que na maioria das vezes o herdeiro espera receber algum dinheiro.

Na informática, herança é uma forma de reutilizar recursos. No caso Java, uma nova classe poderá reutilizar os recursos de uma classe existente, que podemos chamar de classe pai, economizando, assim, tempo durante o desenvolvimento de um projeto.

No paradigma orientado a objetos, podemos definir as classes em uma estrutura hierárquica, onde cada uma das classes herdará as características de uma classe superior e assim sucessivamente.

Imaginando alguns exemplos já vistos, podemos dizer que a classe cão poderá herdar recursos da classe Animais. Conseqüentemente, a classe cão herdará recursos da classe animais.

Neste contexto, uma classe existente é chamada de superclasse, enquanto a nova classe, que herdará as características da classe existente, é chamada de subclasse. Para você ter um melhor entendimento, no gráfico abaixo tem a superclasse Animais, com as suas Subclasses próprias. No caso dos mamíferos temos como subclasses cães e gatos.

Em aulas anteriores, vimos que modificadores são palavras reservadas, que fazem o controle no acesso aos atributos e métodos de uma classe. Em Java, atributos e métodos são considerados

(38)

38 membros de uma classe. Ao trabalhar com modificadores em suas superclasses ou subclasses, algumas regras devem ser seguidas. Veja a seguir.

Os membros private de uma classe só são acessíveis por dentro da própria classe. Os membros private de uma superclasse ou não são herdados pelas suas subclasses. Os membros protected de uma superclasse podem ser acessados por membros dessa superclasse, por membros de suas subclasses e por membros de outras classes no mesmo pacote.

Todos os membros de superclasse public e protected retêm seu modificador de acesso original, isto é, membros public da superclasse tornam-se membros public da subclasse. O mesmo ocorre com os membros protected

Para fazermos uma classe herdar as características de outra, usamos a palavra reservada extends logo após a definição do nome da classe.

Public class Mamiferos extends Animais

Como estamos tratando de herança de classes, toda classe tem seu método construtor.

Portanto, se estamos trabalhando com duas classes, temos dois métodos construtores. Para acessarmos o método construtor da classe que está sendo herdada, usamos o comando super( ).

Exercícios:

//1º Teste_Loja

public class Teste_Loja {

public static void main(String args[]){

Moveis m = new Moveis ();

Eletro e = new Eletro ();

}

(39)

39 }

//2ºProdutos “Atributos public ou protectedes” - superclasse

public class Produtos {

protected int num;

protected String nome;

protected float valor;

public Produtos () {//construtor zerando os valores

num = 0;

nome = “ ”;

valor = 0;

}

//---inicio--- public void setNum(int num){ //acesso

this.num = num;

}

public int getNum(){ //modificação return num;

}

//---fim---

public void setNome(String nome){

this.nome = nome;

}

public String getNome(){

(40)

40 return nome;

}

public void setValor(float valor){

this.valor = valor;

}

public float getValor(){

return valor;

} }

//3º Moveis - subclasses

import java.util.Scanner;

public class Moveis extends Produtos {//herda produtos extends

public Moveis () {//construtor moveis

System.out.println ("MÓVEIS");

System.out.println ("");

System.out.print("Digite o código do Produto:");

num = new Scanner(System.in).nextInt ();

System.out.println("");

System.out.print("Digite o nome do Produto:");

nome = new Scanner(System.in).nextLine ();

System.out.println("");

System.out.print("Digite o valor do Produto:");

(41)

41 valor = new Scanner(System.in).nextFloat ();

System.out.println("");

System.out.println("");

}//fim do construtor moveis }//fim da classe Moveis

//4º Eletro – subclasses

import java.util.Scanner;

public class Eletro extends Produtos {//herda produtos - Extends

public Eletro () {//metodo construtor

System.out.println ("ELETRODOMÉSTICO");

System.out.println ("");

System.out.print("Digite o código do Produto:");

num = new Scanner(System.in).nextInt ();

System.out.println("");

System.out.print("Digite o nome do Produto:");

nome = new Scanner(System.in).nextLine ();

System.out.println("");

System.out.print("Digite o valor do Produto:");

valor = new Scanner(System.in).nextFloat ();

System.out.println("");

System.out.println("");

}//fim do construtor

(42)

42 }//fim da classe Eletro

8 POLIMORFISMO

Na programação orientada a objetos, o Polimorfismo (muitas formas) permite usar um mesmo elemento de formas diferentes. Através dele, podemos modificar totalmente o código de um método herdado de uma classe diferente, ou seja, sobrescrevendo o método da classe pai.

Podemos dizer, então, que o polimorfismo está intimamente ligado a herança de classes.

Enquanto que a herança se refere às classes e à sua hierarquia, o polimorfismo diz respeito aos métodos dos objetos. Existem quatro tipos de polimorfismos, divididos em duas categorias. Veja a seguir.

Polimorfismo universal:  Este tipo pode ser aplicado em vários casos, e inúmeras vezes.

Trabalha potencialmente num conjunto infinitos de tipos, de modo disciplinado. Este polimorfismo possui duas formas:

Paramétrico:  o polimorfismo paramétrico representa a possibilidade de definir várias funções com mesmo nome, mas possuindo parâmetros diferentes. Ele se restringe ao uso de tampletes.

Inclusão:  É a possibilidade de redefinir um método em classes que não herdeiras de uma classe básica. Podemos dizer que se trata de um polimorfismo de herança.

Polimorfismo ad-Hoc:  É implementado quando queremos definir uma coisa específica, ou seja, este polimorfismo, diferente do universal, não pode ser usado em todo lugar, logo sabemos quantas vezes ele será aplicado. Este polimorfismo possui duas formas:

Sobrecarga:  Permite que um nome de função seja utilizado mais de uma vez com diferentes assinaturas, como por exemplo, dois métodos com o mesmo nome, porém com tipos de parâmetros diferentes.

Coerção:  Neste caso, a linguagem de programação é quem faz as conversões de tipos, e não o programador, ou seja, não é feita voluntariamente pelo programador e sim pela linguagem. Para um melhor entendimento, coerção é o ato de introduzir alguém e fazer algo pela força, intimidar, etc.

(43)

43 9 AGRADESCIMENTOS

Gostaria de agradecer a todos os amigos que por algum motivo leram essa pequena obra, e que possamos crescer em conhecimento e compartilhando uns com os outros. Agradeço primeiramente a Deus que nos dá sabedoria, e tempo para procurar informações a cada dia.

Agradeço aos amigos do grupo de estudo Lacking Face que nos proporciona cada dia meios para o nosso aprendizado.

Referências

Documentos relacionados

Fluminense, UFF; Alberto Efendy Maldonado de la Torre, Universidade do Vale do Rio dos Sinos, UNISINOS; Alexandre Almeida Barbalho, Universidade Estadual do Ceará, UEC; Amparo

5.1 deste Edital tenham sido preenchidos de forma correta e a documentação obrigatória esteja completa e dentro do prazo de inscrição. Não será permitida a

Das decisões proferidas pela Comissão Permanente de Licitação quanto a ato de “habilitação ou inabilitação” de empresa licitante e “julgamento de

A baixa taxa de desconto ao longo dos anos de produção do campo, para o cálculo da função objetivo, aliada a baixa produção de água que a locação de

Sendo assim, o estudo apresenta como objetivo investigar o nível de sobrepeso e/ou obesidade em idosos assistidos pelo NASF do Município de Patos-PB.. A pesquisa se

Percebe-se que os informes financeiros Disponível, Controle de contas a receber e Controle de contas a pagar são disponibilizados a 100% dos gestores. No entanto, todos

Após a colheita, normalmente é necessário aguar- dar alguns dias, cerca de 10 a 15 dias dependendo da cultivar e das condições meteorológicas, para que a pele dos tubérculos continue

Os instrumentos de pesquisa utilizados serão: Ficha de Rastreamento das Participantes do Estudo, International Consultation on Incontinence Questionnaire – Short Form