Programação Orientada a Objetos – Parte II Prof. André Argeri [email protected] Ribeirão Preto, Agosto 2009 Conversões • para String – String.ValueOf • String para int – Integer.parseInt() • String para float – Float.parseFloat(); • String para double – Double.parseDouble(); • String para Char – minhastring.charAt(0); Operadores Aritiméticos • São representados por um conjunto de símbolos que definem as operações matemáticas básicas. Operadores de Atribuição Operadores Matemáticos de Atribuição Operadores Relacionais • São utilizados para realizar comparações entre variáveis do mesmo tipo. Estrutura condicional Estrutura Condicional Simples if ( condicao ) { } Estrutura Condicional Composta if ( condicao ) { } else { } Estrutura Condicional Aninhada if ( condicao1 ) { if ( condicao2 ) { ... } } else { if ( condicao3 ) { ... } else { ... } } Estrutura Condicional Mutuamente Exclusiva if ( condicao1 ) { ... } else if (condicao 2) { ... } else if (condicao 3) { ... } else { ... } Estrutura Condicional Mutuamente Exclusiva – switch ... case switch(variavel) { case 1: ... break; case 2: ... break; default: ... } Estrutura de Repetição Estrutura FOR – Utilizada quando se sabe o número de vezes que um trecho do programa deve ser repetido for ( condicao_inicial; condicao_parada; incremento ou decremento ) { trecho do programa } Estrutura de Repetição Exemplos de utilização da Estrutura FOR – Números entre 1 e 100 com incremento de 1 • for ( int i = 1; i <= 100; i++ ) – Números entre 100 e 1 com decremento de 1 • for ( int i = 100; i >= 1 ; i-- ) – Números entre 7 e 77 com incremento de 7 • for ( int i = 7; i <= 77; i += 7 ) – Números entre 20 e 2 com decremento de 2 • for ( int i = 20; i >= 2; i -= 2 ) Estrutura de Repetição Estrutura WHILE – Utilizada quando o número de repetições não é fixo. public static void main(String[] args) { int cont = 1; while ( cont <= 10 ) { System.out.println(cont); cont++; } } Estrutura de Repetição Estrutura DO..WHILE – Utilizada quando o número de repetições não é fixo. public static void main(String[] args) { int cont = 1; do { System.out.println(cont); cont++; } while(cont <= 10); } Exercícios Escreva um programa que receba um conjunto de 5 (cinco) números inteiros, calcule e mostre: – Soma desses números – Média desses números – Maior número digitado – Menor número digitado – Total de números positivos – Total de números negativos Vetor • Definição – Estruturas de dados que contém itens do mesmo tipo – Uma vez criadas mantém o mesmo tamanho estáticas • Representam um conjunto de dados localizado continuamente na memória – Cada localização da memória tem o mesmo nome – Cada localização da memória tem o mesmo tipo Vetor • Índices – Em Java o índice dos Arrays começa em 0 (zero) • v[0], v[1], ... , v[n] – v.length • retorna o tamanho (número de elementos)do array v • Declaração – int v[] = new int[10] – String c[] = new String[100]; Vetor public static void main(String[] args) { int vet[] = new int[5]; vet[0] = 10; vet[1] = 20; vet[2] = 30; vet[3] = 40; vet[4] = 50; System.out.println("Tamanho do vetor = " + vet.length); System.out.println("Elementos do vetor"); for (int i = 0; i < vet.length; i++) System.out.println(" Posição " + i + " = " + vet[i]); } Vetor public static void main(String[] args) { int vet[] = {10,20,30,40,50}; System.out.println("Tamanho do vetor = " + vet.length); System.out.println("Elementos do vetor"); for (int i = 0; i < vet.length; i++) System.out.println(" Posição " + i + " = " + vet[i]); } Matriz • Arranjos multidimensionais organizados através de linhas e colunas • Exemplo: Matrizes 2D – matriz[linha][coluna] • Declaração – int mat[][] = new int[3][4]; 3 linhas 4 colunas – int mat[][] = {{1,2},{3,4}}; 2 linhas 2 colunas Exercícios - Faça um programa que preencha dois vetores de dez elementos cada um e mostre o vetor resultante da intercalação entre eles. Exercícios - Faça um programa que preencha um vetor com 8 posições de números inteiros, calcule e mostre dois vetores resultantes. O primeiro vetor resultante deve conter os números positivos, enquanto o segundo deve conter os números negativos. Cada vetor resultante vai ter no máximo, oito posições, que poderão não ser utilizadas. Exercícios - Faça um programa que preencha um vetor de 10 números inteiros, calcule e mostre o vetor resultante de uma ordenação crescente. Exercícios - Faça um programa que receba 6 números inteiros e mostre: - Os números pares digitados; - A quantidade de pares digitados; - A soma dos números pares; - Os números impares digitados; - A quantidade de impares digitados; - A soma dos números impares; Exercícios - Desenvolva um programa que preencha uma matriz 10x20 com números inteiros e some cada uma das linhas, armazenando o resultado das somas em um vetor. A seguir, o programa deverá multiplicar cada elemento da matriz pela soma da linha correspondente e mostrar a matriz resultante. Exercícios - Desenvolva um programa que preencha uma matriz 6x4 com números inteiros, calcule e mostre quantos elementos dessa matriz são maiores que 30 e, em seguida, monte uma segunda matriz com os elementos diferentes de 30. No lugar do número 30 da segunda matriz, coloque o número 0. Exercícios - Crie um programa que preencha uma matriz 8x8 com números inteiros e mostre uma mensagem dizendo se a matriz digitada é simétrica. Uma matriz só pode ser considerada simétrica se A[i,j] = A[j,i]. Exercícios - Elabore um programa que preencha uma matriz 10x10 com números inteiros, execute as trocas especificadas a seguir e mostre a matriz resultante: - a linha 2 com a linha 8 - a coluna 4 com a coluna 10 - a diagonal principal com a diagonal secundária - a linha 5 com a linha 10 Exercícios - Faça um programa que preencha uma matriz 7x7 de números inteiros e crie dois vetores com 7 posições cada um que contenham, respectivamente, o maior elemento de cada uma das linhas e o menor elemento de cada uma das colunas. Escreva a matriz e os dois vetores gerados. Exercícios - Crie um programa que leia um vetor V contendo 18 elementos. A seguir, o programa deverá distribuir esses elementos em uma matriz 3x6 e, no final, mostrar a matriz gerada. PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : FUNDAMENTOS PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : FUNDAMENTOS PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : FUNDAMENTOS • Classe – É um conjunto de códigos de programação que incluem a definição dos atributos e dos métodos necessários para a criação de um ou mais objetos. – Contém toda a descrição da forma do objeto, é um molde para a criação do objeto, é uma matriz geradora de objetos, é a fábrica de objetos. – Uma classe também é um tipo definido pelo usuário. PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : FUNDAMENTOS • Objeto ou Instância – Tem determinadas propriedades que o caracterizam e que são armazenadas no próprio objeto. As propriedades de um objeto são chamadas ainda de atributos. – O objeto interage com o meio e em função de excitações que sofre, realiza determinadas ações que alteram o seu estado (atributos). – Um objeto é uma entidade única que reúne atributos e métodos, ou seja, reúne as propriedades do objeto e as reações aos estímulos que sofre. PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : FUNDAMENTOS PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : FUNDAMENTOS Declarando uma Classe: class Pessoa { string nome; void Andar() { } } Declarando um Objeto Pessoa objPessoa = new Pessoa(); PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : FUNDAMENTOS PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Atributos Atributos de Classe – Quando um atributo é dividido entre todos os objetos criados, ele é armazenado na classe. EX: Um contador de relógios criados. Atributos de Objeto – Quando um atributo é individual ele é armazenado no objeto. EX: A hora de um relógio. String nome = “Andre”; int idade = 28; PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Métodos • As ações ou comportamento dos objetos são chamados de métodos. • Os comportamentos do objeto são definidos na classe através dos métodos e servem para manipular e alterar os atributos do objeto. • Manipuladores – set = atribuem valores – get = retornam valores PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Métodos PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Métodos Testando a classe Pessoa PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Métodos Métodos que não retornam valores – O nome do método é precedido da palavra reservada void public void ExibirMensagem(String msg) { System.out.println(msg); } PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Métodos • Métodos que retornam valores – O nome do método é precedido do tipo de dados que o método deverá retornar – Obrigatoriamente esses métodos devem conter a palavra reservada return public int Quadrado(int valor ) { return valor*valor; } public int Cubo(int valor ) { return valor*valor*valor; } PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Métodos • Regras de Escopo – Local – Global int x = 5;// atributo global public void Imprimir() { int x = 10;// atributo local System.out.println("X (local) = " + x ); System.out.println("X (global) = " + this.x ); } PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Fundamentos • Na linguagem Java os tipos de dados são divididos em dois grupos: – Primitivos • boolean, char, int, float, double, etc – Referência (ou não primitivos) • Objetos • Quando tipos primitivos são criados eles são inicializados automaticamente com valor zero (ou false no caso do boolean). • Os tipos Referência são inicializados com null PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Fundamentos Tipos Referência inicializados com null public static void main(String[] args) { Pessoa objPessoa = new Pessoa(); objPessoa.ExibirNome(); } PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Construtores • Construtor – Construtores são métodos especiais responsáveis pela implementação de ações necessárias para a existência de um objeto – É o primeiro método executado quando a classe é instanciada. – Possui o mesmo nome da classe public Pessoa() { nomepessoa = ""; } PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Construtores • Sobrecarga de Construtores – Tanto os métodos de uma classe quanto seus construtores podem ser sobrecarregados. – Isso permite a definição de métodos ou construtores com mesmo nome, mas com funcionalidades diferentes. PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Construtores • Sobrecarga de Construtores public Pessoa() { nomepessoa = ""; } public Pessoa(String nome) { nomepessoa = nome; } PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Construtores • Utilizando construtores sobrecarregados public static void main(String[] args) { Pessoa p1 = new Pessoa(); Pessoa p2 = new Pessoa("José"); p1.setNome("João"); p1.ExibirNome(); p2.ExibirNome(); } PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Métodos • Passagem de Parâmetros – Passagem por Valor • Uma cópia do valor da variável é passada para o método chamador • Todas os tipos de dados primitivos (int, char, double) são passados por valor – Passagem por Referência • O método chamador tem acesso direto ao valor armazenado na variável • É mais rápido do que a Passagem por Valor, pois não “duplica” os dados na memória; • Em Java todos os objetos são passados por referência – Arrays são objetos em Java PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Métodos PROGRAMAÇÃO ORIENTADA A OBJETOS (POO) : Métodos Exercícios • Cria uma classe chamada Contador , com as seguintes características: – Tenha uma variável inteira capaz de armazenar o valor do contador – Possua um construtor que inicializa o contador com zero – Contenha um construtor no qual seja possível informar o valor inicial para o contador – Um método para incrementar o contador (em 1) – Um método para decrementar o contador (em 1) – Um método para imprimir o contador Exercícios • Escreva uma classe chamada Calculadora essa classe deverá conter os seguintes métodos: – Soma – Subtracao – Multiplicacao – Divisao Importante!!! Cada método deverá conter outro sobrecarregado para operar com números inteiros e ponto flutuante (double) Exercícios • Crie uma classe JogoDaVelha que permita escrever um programa completo para jogar o Jogo da Velha. • A classe deve conter como dados privados um arranjo bidimensional de inteiros de 3 por 3. • Um construtor deve inicializar o tabuleiro vazio com zeros em todas as posições. • O jogo poderá ser utilizado por dois jogadores humanos. Exercícios • Todo movimento deve ocorrer apenas para uma posição vazia do arranjo – Caso o jogador tente mover para uma posição ocupada uma mensagem deve ser exibida. • Depois de cada movimento, determine se alguém ganhou o jogo, ou se houve empate – Além disso, imprima o status do tabuleiro Jogo da Velha utilizando POO X|0|X ----------X|0|0 ----------0|X| • Crie uma classe de Teste para ilustrar o funcionamento do Jogo