Baixe o app para aproveitar ainda mais
Prévia do material em texto
Apostila de Programação II Programação Orientada a Objetos (JAVA/Netbeans) Programação II Orientação a Objetos PEDRO HENRIQUE B.MONFORTE MONITOR DE PROGRAMAÇÃO II – CEFET-RJ Uned NI 0 Sumário Capitulo 1 – Revisão: COMANDOS BÁSICOS DE INTERAÇÃO COM O USUÁRIO: ........................................... 1 Operadores Básicos: .............................................................................................................................. 1 Operadores de Incremento e Decremento: ............................................................................................ 1 Comandos de Impressão em Tela: ......................................................................................................... 2 Comando de Leitura (Scanner): .............................................................................................................. 3 ESTRUTURAS DE DECISÃO (CONTROLADORES DE FLUXO): .................................... 4 Estruturas de Decisão “If”: ..................................................................................................................... 4 Estrutura de decisão “Switch”: .............................................................................................................. 4 ESTRUTURAS DE REPETIÇÃO: ............................................................................................ 6 Estrutura de repetição “While”: ............................................................................................................. 6 Estrutura de Repetição “For”: ................................................................................................................ 6 TIPOS DE VARIÁVEIS: ............................................................................................................ 7 Dados compostos: ................................................................................................................................. 7 Capitulo 2 – O Netbeans(IDE): O QUE SÃO IDE’S: ..................................................................................................................... 8 BARRA DE FERRAMENTAS – ABA SUPERIOR: ............................................................... 9 Barra de Ferramentas propriamente dita: ............................................................................................. 9 Barra de Ferramentas de Acesso Rápido: ............................................................................................... 9 LISTAGEM DE RECURSOS - ABA LATERAL-ESQUERDA: ............................................. 9 Árvore de Projetos: ................................................................................................................................ 9 Árvore de Arquivos: ............................................................................................................................. 10 Árvore de Serviços: .............................................................................................................................. 10 EDITOR – ABA DIREITA OU CENTRAL: ......................................................................... 10 CONSOLE – ABA INFERIOR (NEM SEMPRE VISÍVEL): ............................................... 10 Capitulo 3 – Orientação a Objetos: DEFINIÇÃO DO PARADIGMA DE PROGRAMAÇÃO: .................................................... 11 A CLASSE: ................................................................................................................................ 11 Conceito: ............................................................................................................................................. 11 Atributos: ............................................................................................................................................ 11 Métodos: ............................................................................................................................................. 11 O OBJETO: ............................................................................................................................... 11 Conceito: ............................................................................................................................................. 11 Instanciar: ............................................................................................................................................ 12 COMPOSIÇÃO: ....................................................................................................................... 12 MODIFICADORES DE ACESSO: ......................................................................................... 12 MÉTODOS: .............................................................................................................................. 12 O Construtor: ....................................................................................................................................... 13 O método toString: .............................................................................................................................. 13 Metodos Get e Set: .............................................................................................................................. 14 HERANÇA: ............................................................................................................................... 14 CLASSES ABSTRATAS: ........................................................................................................ 15 Capitulo 4 – Interface e UI INTERFACE: ............................................................................................................................ 16 INTERFACE COM O USUÁRIO: .......................................................................................... 17 Caixas de Mensagens: .......................................................................................................................... 18 Formulários: ........................................................................................................................................ 18 1 Revisão (Programação I) Comandos Básicos de Interação com o Usuário: Operadores Básicos: Operação Operador Adição + Subtração - Multiplicação * Divisão / Resto % Atribuição = Igualdade = = Desigualdade != Maior que > Menor que < Maior ou igual a >= Menor ou igual a <= a = a + b a += b a = a – b a -= b a = a * b a *=b a = a / b a /= b a = a%b a %= b Operadores de Incremento e Decremento: Operador Exemplo de Expressão Explicação ++ ++a Incrementa em 1 unidade o valor de “a”, e usa o novo valor na expressão. ++ a++ Utiliza o valor atual de “a” na expressão, então incrementa seu valor em 1 unidade. -- --a Decrementa em 1 unidade o valor de “a”, e usa o novo valor na expressão. -- a-- Utiliza o valor atual de “a” na expressão, então decrementa seu valor em 1 unidade. 2 Comandos de Impressão em Tela: Para imprimir um texto ou o valor de uma variável em Java podemos usar vários comandos, aqui temos os exemplos mais familiares e práticos para se imprimir em um Console: Função ”printf”: O comando printf vem com uma estrutura semelhante a sua estrutura na linguagem de programação C, para uso do comando utilizamos o seguinte formato: “System.out.printf( String, Argumentos);”. Dentro do parênteses da função utilizamos uma String com “argumentos” semelhante ao C por exemplo para imprimir o valor de um inteiro “a=3” utilizamos: “System.out.printf("O valor de a e %d unidades",a)” “O valor de a e 3 unidades” Função “print”: O comando print em Java é anterior ao comando printf e utiliza uma estruturasemelhante a linguagem de programação Pascal, concatenando pedaços de String e valores de variáveis diversas por exemplo: “System.out.print("O valor de a e "+ a +” unidades”);” “O valor de a e 3 unidades” Função “println”: O comando println segue o mesmo estilo do comando print porem ao finalizar a impressão do conteúdo dentro dos parênteses uma linha é pulada. Quebra de linha: A quebra de linha dentro de uma String é dado por um símbolo “\n” (barra invertida n) por exemplo: “System.out.print("O valor de a e: \n "+ a +” unidades”);” Que devera imprimir: “O valor de a e: 3 unidades” 3 Comando de Leitura (Scanner): O comando de leitura no java é muito rudimentar e difícil de se trabalhar, por isso utilizaremos um comando feito, para isso precisamos fazer um importação e o entendimento completo desse comando só pode ser lado a partir do conceito de Classe, cujo ainda não foi abordado no curso: Prestem atenção no exemplo comentado a seguir: import java.util.Scanner; //importamos a classe Scanner a ser utilizada, antes de declararmos a classe principal no arquivo public class Principal { public static void main(String[] args) { int a; //criamos um inteiro “a” Scanner entrada = new Scanner(System.in); // Criamos um Objeto “entrada” que vai funcionar como “os olhos” do programa para ler aquilo que o usuário inserir System.out.println("De um valor para \"a\" "); // usamos um println para notificar o usuário do que queremos a = entrada.nextInt(); //Essa é a estrutura essencial Variavel = entrada.nextInt(); } } A estrutura “a = entrada.nextInt();” significa o seguinte “Atribua a variável ‘a’ o próximo valor inteiro inserido pelo usuário. Ou seja, mesmo que a variável a já tenha um valor o valor novo estará sendo atribuído. Temos ainda outros métodos na classe Scanner, por exemplo para capitar qualquer coisa que o usuário inserir a seguir usaríamos “entrada.next()”; Observação: Organização em Pacotes. Quando um programador utiliza as classes feitas por outro, surge um problema clássico: como escrever duas classes com o mesmo nome? Por exemplo: pode ser que a minha classe de Data funcione de um certo jeito, e a classe Data de um colega, de outro jeito. Pode ser que a classe de Data de uma biblioteca funcione ainda de uma terceira maneira diferente. Como permitir que tudo isso realmente funcione? Como controlar quem quer usar qual classe de Data? Pensando um pouco mais, notamos a existência de um outro problema e da própria solução: o sistema operacional não permite a existência de dois arquivos com o mesmo nome sob o mesmo diretório, portanto precisamos organizar nossas classes em diretórios diferentes. Os diretórios estão diretamente relacionados aos chamados pacotes e costumam agrupar classes de funcionalidades similares ou relacionadas. Por exemplo, no pacote java.util temos as classes Date, SimpleDateFormat e GregorianCalendar; todas elas trabalham com datas de formas diferentes. É por isso que utilizamos “System.out” antes do printf,println,etc. 4 Estruturas de Decisão (Controladores de Fluxo): As estruturas de decisão ou controladores de fluxo são estruturas de lógica que “decidem o caminho” de cada programa, controlando para “que lado” o dado obtido nos leva. Estruturas de Decisão “If”: “If Simples”: O if simples faz um teste lógico básico verificando, de acordo com “desejo” do programador, se um bloco de comando deve ou não ser executado, por exemplo: “ int a= 3; if (a == 4) { System.out.print("O valor de a e " + a + "unidades" ); }” Nesse caso não será executado o comando “System.out.print();” pois o texto lógico resulta em uma afirmação falsa “a” não é igual a “4”. “If...else” “ int a= 3; if (a >= 4) { System.out.print("O valor de a e de 4 unidades ou mais" ); }else{ System.out.print("O valor de a e inferior a 4 unidades" ); }” “If...else...if...else...” If’s Aninhados: Podemos usar vários if’s entrelaçados para garantir as condições ideais por exemplo: “int b = 0 if (b = 0){ System.out.print("Valor nulo” ); }else{ if (b>0) { System.out.print("Valor positivo" ); }else { System.out.print("Negativo" ); } Estrutura de decisão “Switch”: Uma estrutura muito utilizada em programação é o 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 ações diferentes de acordo com o case definido dentro dele. A estrutura do Switch é: switch (variável) { case valor : Código a ser executado caso o valor de case seja o mesmo da variável de switch } 5 Então, detalhadamente, switch recebe uma variável e abre um bloco de dados ( { } ), dentro desse bloco de dados há os cases. Cada case recebe um valor único, ou seja, que não pode ser repetido no mesmo bloco de dados. Então, marcamos cada case com dois pontos ( : ). Após os dois pontos colocamos todo código que deverá ser executado que pode conter quantas linhas nós quisermos. Dica importante: É um bom costume sempre terminar um código após o case com um comando break. Assim, nós evitamos que o resto do código seja executado por acidente. E vale também ressaltar que case não gera resultados booleanos, portanto, não há a possibilidade de fazer comparações (Ex. Isso está totalmente errado-> case var1 > var2:). Default Como switch pode receber várias possibilidades, pode ocorrer de algum caso estar fora do alcance ou não definido. Nesse momento, default faz seu papel. Default pega qualquer resultado que não esteja definido no case. Ou seja, ele é o bloco de código padrão que deve ser executado quando nenhum case for satisfeito. Podemos coloca-lo onde quisermos dentro de switch , mas, geralmente, o colocamos no final. Para exemplificar, vamos ver o código abaixo: switch (diaDaSemana) { case 1: System.out.println("Domingo"); break; case 2: System.out.println("Segunda-feira"); break; case 3: System.out.println("Terça-feira"); break; case 4: System.out.println("Quarta-feira"); break; case 5: System.out.println("Quinta-feira"); break; case 6: System.out.println("Sexta-feira"); break; case 7: System.out.println("Sábado"); break; default: System.out.println("Este não é um dia válido!"); } 6 Estruturas de Repetição: As estruturas de repetição facilitam nossa vida ao trabalhar com códigos repetitivos e manusear vetores e matrizes com mais versatilidade. Estrutura de repetição “While”: O while repete seu bloco de comando até que um requisito seja preenchido, por exemplo até que o usuário entre com um mês válido (de 1 a 12) o programa continuara perguntando o mês. Basta lembrar que a palavra “while” em inglês significa “enquanto”, então enquanto algo for verdadeiro ele vai repetir o bloco de comando. Exemplo: int mes = 0; Scanner entrada = new Scanner(System.in); while ((mes < 1) || (mes > 12)){ System.out.println("Qual é o mês?"); mes = entrada.nextInt(); } Estrutura de Repetição “For”: O for é estrutura de repetição mais básica, e também a mais usada, na programação. Ela funciona como um “contador” e garante a repetição de um código em uma quantidade determinada de vezes: A estrutura é dada por “for( int Contador = “Valor Inicial”; Contandor <= “Valor Final”; Contador++)”, que consiste na declaração do contador e determinação do seu valor inicial;uma determinaçãológica para determinar quando parar; e uma expressão de incremento(ou decremento); Exemplo: for (int i=0;i<10;i++){ System.out.println(i); } Conta de 0 a 9. 7 Tipos de Variáveis: Tipo de Dados Comando Exemplo Inteiro int int quantidade_de_alunos; Real double double preco; Texto String String nome; Vetores “tipo”[] int[] vetor = new int[10]; Objeto Nome da Classe Classe1 Objeto1 = new Classe1(); Dados compostos: Dados compostos são basicamente classes utilizadas como variáveis, por exemplo, para fazer um tipo de dado “Data” precisamos de um tipo de dados com três inteiros, criamos então uma classe com três atributos (dia,mês e ano) e a utilizamos comovariavel. Exemplo: private class Data { int dia; int mes; int ano; Data(int D, int M, int A){ dia = D; mes = M; if ( A < 2014) { ano = A; } else { ano=2014;} } public String toString(){ return " " + dia + "/" + mes + "/" + ano; } } Como classe privada essa classe pode se encontrar no mesmo arquivo que uma classe publica, então não é necessário criar um novo arquivo para ela, embora isso seja recomendado, pois caso contrario ela não poderá ser utilizada diretamente em outras partes do programa. 8 O Netbeans (IDE): O que são IDE’s: O Netbeans é um IDE(Integrated Development Environment – Ambiente Integrado de Desenvolvimento), um programa de computador que reúne características e ferramentas de apoio ao desenvolvimento de software com o objetivo de agilizar este processo. Geralmente os IDEs facilitam a técnica de RAD (de Rapid Application Development, ou "Desenvolvimento Rápido de Aplicativos"), que visa a maior produtividade dos desenvolvedores. As características e ferramentas mais comuns encontradas nos IDEs são: Editor - edita o código-fonte do programa escrito na(s) linguagem(ns) suportada(s) pela IDE; Compilador (compiler) - compila o código-fonte do programa, editado em uma linguagem específica e a transforma em linguagem de máquina; Linker - liga (linka) os vários "pedaços" de código-fonte, compilados em linguagem de máquina, em um programa executável que pode ser executado em um computador ou outro dispositivo computacional. Depurador (debugger) - auxilia no processo de encontrar e corrigir defeitos no código-fonte do programa, na tentativa de aprimorar a qualidade de software; Modelagem (modeling) - criação do modelo de classes, objetos, interfaces, associações e interações dos artefatos envolvidos no software com o objetivo de solucionar as necessidades- alvo do software final. Geração de código - característica mais explorada em Ferramentas CASE, a geração de código também é encontrada em IDEs, contudo com um escopo mais direcionado a templates de código comumente utilizados para solucionar problemas rotineiros. Todavia, em conjunto com ferramentas de modelagem, a geração pode gerar praticamente todo o código-fonte do programa com base no modelo proposto, tornando muito mais rápido o processo de desenvolvimento e distribuição do software; Distribuição (deploy) - auxilia no processo de criação do instalador do software, ou outra forma de distribuição, seja discos ou via internet. Testes Automatizados (automated tests) - realiza testes no software de forma automatizada, com base em scripts ou programas de testes previamente especificados, gerando um relatório, assim auxiliando na análise do impacto das alterações no código-fonte. Ferramentas deste tipo mais comuns no mercado são chamadas robôs de testes. Refatoração (refactoring) - consiste na melhoria constante do código-fonte do software, seja na construção de código mais otimizado, mais limpo e/ou com melhor entendimento pelos envolvidos no desenvolvimento do software. A refatoração, em conjunto com os testes automatizados, é uma poderosa ferramenta no processo de erradicação de "bugs", tendo em vista que os testes "garantem" o mesmo comportamento externo do software ou da característica sendo reconstruída. 9 Barra de Ferramentas – Aba Superior: Barra de Ferramentas propriamente dita: Contem alguns botões simples (apenas a palavra) e da acesso a todas as funções da IDE, os botões mais utilizados serão: Botão Arquivo: Contem ferramentas para criar, abrir e fechar projetos e arquivos além de configurações de impressão e exportação de arquivos e projetos. Botão Editar: Contem ferramentas de edição de código, entre eles os comandos de copiar e colar, substituição e localização de palavras e ferramentas para produção e macros. Botão Exibir: Contem configurações de barras e abas a serem exibidas além do modo de tela cheia e o modo “só editor”. Botão Executar: Contem os comandos de execução de projetos para teste. Botão Ferramentas: Contem ferramentas diversas e o botão “Opções” onde diversas preferencias podem ser definidas inclusive o tamanho da fonte. Barra de Ferramentas de Acesso Rápido: São os botões mais “bonitinhos” com ícones(desenhos), e seus ícones indicam suas funções de forma bem intuitiva, o botão mais utilizado por nós sera o “Executar” que tem o ícone de um “play” verde. Listagem de Recursos - Aba Lateral-Esquerda: Contem ferramentas para navegação rápida e troca de projetos. Pode ser Minimizada (escondida na barra lateral) a partir de um botão com o símbolo “-“ localizado na extrema direita superior da aba. Árvore de Projetos: Nessa aba você encontra todos os projetos atualmente abertos no IDE, é uma boa prática fechar todos os projetos que não vão ser utilizados no momento para evitar confusão ao lidar com os projetos e para melhor desempenho do IDE. Os projetos são dispostos em forma de árvore de arquivos e geralmente separados em quatro “pastas”, mas a única que nos importa agora é a primeira delas: Pacotes de Código-fonte: São os pacotes de código que estão no projeto, todo projeto tem um pacote default (visível ou não) e pacotes diversos, os pacotes são formas de organizar as classes, em projetos complexos se torna um bom hábito separar os códigos em pacotes porem em programas mais simples isso não se faz necessário. Dentro de um dos pacotes você pode criar classes apertando o botão direito do mouse e selecionando Novo → Classe Java. 10 Árvore de Arquivos: Nessa aba você encontra todos os arquivos que estão dentro da pasta padrão do netbeans. Também disposta em forma de árvore da fácil acesso ao arquivos dentro das pastas do projeto porem é geralmente utilizada para verificar o endereço de imagens e arquivos de código fonte. Árvore de Serviços: Nessa aba você encontra todos os serviços disponíveis para o IDE, bancos de dados, servidores, etc. Como no curso de Programação Orientada a Objetos não vamos lidar com o uso de Banco de dados essa aba provavelmente não será utilizada. Editor – Aba Direita ou Central: O Editor é onde nós trabalhamos, funciona como um editor de textos onde inserimos o código. O Editor tem ferramentas automáticas para completar palavras e códigos e geralmente nos cria o hábito de deixa-lo fazer boa parte do código por nós, aconselha-se desativar a função de completar código em Opções. O Editor tem várias abas nomeadas e cada uma delas corresponde a um arquivo no projeto, no caso de classes públicas (maioria das classes será desse tipo até a segunda parte do curso) cada classe tem um arquivo que tem o mesmo nome da classe. Antes do nome de cada arquivo existe um ícone de uma pagina com uma dobra e com o desenho de 3 formas geométricas coloridas. O ícone que estiver com um “play verde” no canto éa classe principal. O ícone que estiver com uma bola vermelha com exclamação no canto indica que o código no arquivo contem um erro grave. O ícone que estiver com um bola ou triangulo amarelo com exclamação no canto indica que existem notificações no código que podem ser erros de lógica ou simplesmente notificações para avisar que uma variável ou importação não foi utilizada. O Editor também tem botões de atalho a funções do menu “Editar” na barra de ferramentas, coloque o mouse acima do botão para ver o seu nome e o controle de teclado associado a ele. Console – Aba Inferior (Nem sempre visível): É o console de execução do compilador, ele deve substituir a “tela preta” que aparecia no Dev C++ além de notificar erros e exceções não tratadas. No console há no seu final uma caixa de texto onde inserimos dados quando o programa esta lendo dados através do Scanner ou outro tipo de entrada de texto. 11 Capitulo 3 - Orientação a Objetos: Definição do Paradigma de Programação: Teoricamente em uma linguagem de Orientação a Objetos tudo deve ser feito através de objetos. A orientação a objetos utiliza de relações entre objetos para cumprir alguma função, semelhante ao mundo real cada objeto vem de um “projeto” um texto que descreve aquele objeto como aquilo, por exemplo, uma bicicleta é definida como um objeto com duas rodas, um quadro, um guidom, um pedal, uma coroa e um peão, além de outros acessórios. A bicicleta em si é considerada um objeto e o conceito do que a define é chamado de classe. A Classe: Exemplo: “public class Bicicleta { public String guidom; public String quadro; public String freio; public String roda_frontal; public String roda_traseira; public String mesa; } Conceito: Classe é uma definição de algo que pode ser criado como um objeto, como se fosse um projeto para um objeto. Cada classe tem seus atributos e seus métodos. Atributos: Os Atributos são as características das classes, por exemplo, uma bicicleta tem duas rodas, um quadro, uma mesa e um guidom. São basicamente variáveis internas da classe. Métodos: Os métodos são a forma a qual o objeto da classe interage com os outros objetos. Em geral são funções definidas para realizar alguma tarefa interna no objeto ou para mostrar dados. O Objeto: Conceito: O objeto é a parte tangível da classe, é quando “o projeto sai do papel”, com objetos de uma classe você trabalhar. Todos os objetos de uma classe têm todos os atributos e métodos por ela definidos, sejam esses públicos ou privados. 12 Instanciar: Instanciar é construir o objeto em si, o colocando para uso, semelhante à declaração de uma variável. Exemplo: “Bicicletas bicicleta_do_marquinhos = new Bicicleta();” Composição: Podemos utilizar objetos de classes como tipo de dados para facilitar a nossa vida como fizemos na classe privada “Data” no capitulo 1, porem utilizando como uma classe publica essa classe pode ser utilizada em diversas partes do projeto. Modificadores de acesso: Os modificadores de acesso modificam o nível de permissão de cada atributo, classe ou método. Modificador de acesso “public”: O modificador public torna a classe, objeto, variável ou método em algo publico, ou seja, que pode ser acessado de qualquer parte do programa. Modificador de acesso “private”: O modificador de acesso private torna algo privado, ou seja, só pode ser acessado dentro do arquivo em que se encontra. Classes Publicas e Privadas: As classes publicas devem estar definidas em um arquivo de classe com o seu nome, separada de qualquer outra classe publica, porem a classe privada pode estar em qualquer arquivo e só poderá ser utilizada por outras classes dentro do mesmo arquivo. Métodos: Métodos são funções de interação utilizadas por classes e objetos. Os métodos são declarados da forma: “Modificador_de_Acesso Tipo nomeDoMetodoComecandoComLetraMinuscula(Tipo parametro1, Tipo parametro2,...,Tipo parametroN){ Bloco de comandos ou corpo do método. } Os parâmetros são passados para dentro do método, basicamente como as funções em C tendo parâmetros para passar e serem analisados, “return” para retornar dados do tipo do método ou no caso de métodos voids que não retornam nada ao programa que o chamou. Métodos com o mesmo nome são diferenciados pelo compilador pelos parâmetros dentro deles. 13 Exemplo de Classe com os métodos principais: public class Pessoa { private String nome; public int idade; Pessoa(){ //Construtor vazio nome = “Sem Nome”; idade = 0; } Pessoa(String nomeNovo,Int idadeNova){ nome = nomeNovo; idade = idadeNova; } Pessoa(String nome){ this.nome = nome;// Observe aqui que o parâmetro do método tem o mesmo nome do //atributo da classe, nesse caso usamos “this.” antes do atributo para indicar que esse é o //atributo, “this” significa “este” e é usado para indicar tudo que esta diretamente associado a //classe atual. } public String retornaNome(){ // método get return nome; } public void modoficaNome(String nome){ //método set, observe que ele é do tipo void, ou seja não retorna dados this.nome = nome; } public String toString(){ return (“O nome e “ + nome + “ e a idade e “+ idade); } O Construtor: O método construtor é um método que inicializa a classe, dando valores iniciais aos atributos, toda classe tem um Construtor Vazio que esta invisível até que outro construtor seja criado. Um construtor vazio é aquele que não recebe nenhum parâmetro. O construtor é um método especial e sempre tem o mesmo nome da classe além de não ter nenhum modificador de acesso, pois sempre deve ser publico. O método toString: O método toString é um método padrão para se “escrever o objeto”, ele retorna tudo que se deve saber sobre o objeto, seria “a descrição ideal” de que objeto é aquele por exemplo ao ver uma pessoa você pergunta a ela algo para identifica-la para saber quem ela é “O nome” e não é necessário por exemplo que ela diga que é uma pessoa. Veja o exemplo de uso, usando como base o exemplo principal da seção: “ Pessoa pessoa1 = new Pessoa(“Joao”,12); //usando o construtor completo System.out.println(pessoa1); // imprimindo literalmente o objeto “pessoa1” 14 Ao imprimir o objeto pessoa1 o programa deve exibir: “O nome e Joao e a idade e 12” Metodos Get e Set: Os métodos get e set são métodos utilizados para manipular os atributos de uma classe e são obrigatórios para qualquer atributo privado que pode ser modificado. É possível modificar os atributos diretamente por atribuição quando esses são públicos por exemplo: “pessoa1.idade = 13” porem quando são privados é necessário utilizar um método de set para modificar ou get para ler. Uma utilidade muito fácil de se entender é o caso de modificar data e hora, não podemos deixar que a modificação seja dada por atribuição pois qualquer valor poderá ser atribuído ao campo de dia ou de mês, com um método set é possível antes de modificar o dia verificar se ele esta entre 1 e 31 dias. Herança: Herança é um dos principais conceitos de orientação a objetos. Quando por exemplo vamos lidar com um programa para manuseio de banco de dados, precisamos cadastrar Clientes e Funcionários além de um Chefe de Setor e um Cliente Vip: Ambos são pessoas portanto herdam atributos da classe pessoa. O Chefe de Setoré um funcionário portanto ele herda atributos de funcionários, o mesmo acontece com Cliente Vip e Clientes. A Herança nos permite pegar uma classe mais simples e utiliza-la como base para uma classe mais complexa. Exemplo: (Obs: para cada public class deve-se criar um arquivo de classe novo, o exemplo de Pessoa da seção anterior esta sendo utilizado) public class Funcionario extends Pessoa{ public Data admissao; public double salario; Funcionario (){// Construtor vazio super(); admissao = new Data(1,1,1990); salario = 700; } Funcionario(String nome,int idade,Data admissao,double salario){ //construtor completo super(nome,idade); this.admissao = admissao; this.salario = salario; } public String toString(){ return (super.toString() + “, admissão” + admissão + “ e salario: R$” + salario); } 15 Toda classe que herda de uma classe com construtor declarado deve ter um construtor. Todos os métodos da classe anterior são imediatamente “copiados” para a classe nova. Para o uso de qualquer atributo da classe anterior no arquivo de classe usamos “super”. Para validar os novos construtores como substitutos dos construtores antigos devemos usar “super()” dentro do construtor novo. Classes Abstratas: Pensemos em algo que sabemos que pode existir porem não sabemos como, temos apenas o conceito e não como fazer, esse é um bom conceito para uma classe abstrata mas não seu único uso. Classe abstrata é toda classe que contem um método abstrato. Uma classe abstrata não pode ser instanciada, apenas herdada. Exemplo: public abstract class Gerador_Quantico{ public int energia; public abstract void geraEnergia (); } Uma classe que contenha um método abstrato deve ser uma classe abstrata. Um método abstrato não tem “corpo” ou bloco de comando, pois não se sabe como vai ser feito o procedimento que gera o método. No exemplo anterior, no mundo da física sabemos que se pode fazer um gerador quântico, agora como ele vai funcionar como vai gerar energia não. Uma classe que herda de uma classe abstrata deve substituir o método abstrato por um novo método de mesmo nome, mesmo tipo e mesmos parâmetros. 16 Capitulo 4 – Interface e UI Interface: A interface é um instrumento de organização de projetos complexos, para facilitar a construção de classes parecidas. Basicamente funciona como uma lista de métodos a serem implementados em um conjunto de classes. Assim como classes publicas as interfaces tem arquivos próprios. Diferentemente da herança, onde cada classe herda diretamente de uma única classe, uma classe pode implementar várias interfaces separando-as por virgulas. Exemplo: public interface Escalavel { void amplia(double escala); void espelha(); } public interface ObjetoGeometrico { Ponto2D centro(); double calculaÁrea(); double calculaPerímetro(); } public class Ponto2D { double x; double y; Ponto2D(){ } Ponto2D(double x,double y){ this.x=x; this.y=y; } @Override public String toString(){ return "("+x+","+y+")"; } } public class RetanguloEscalavel implements ObjetoGeometrico,Escalavel { Ponto2D v1; Ponto2D v2; RetanguloEscalavel(Ponto2D v1,Ponto2D v2){ this.v1=v1; this.v2=v2; } 17 @Override public Ponto2D centro() { Ponto2D centro = new Ponto2D((v1.x+v2.x)/2.0,(v1.y+v2.y)/2.0); return centro; } @Override public double calculaÁrea() { return (Math.abs(v2.x)-Math.abs(v1.x))*(Math.abs(v2.y)-Math.abs(v1.y)); } @Override public double calculaPerímetro() { return ((Math.abs(v2.x))-Math.abs((v1.x))*2)+(Math.abs((v2.y-v1.y))*2); } @Override public void amplia(double escala) { v2.x = ((v2.x-v1.x)*escala)+v1.x; v2.y = ((v2.y-v1.y)*escala)+v1.y; } @Override public void espelha() { v1.x = -v1.x; v1.y = -v1.y; v2.x = -v2.x; v2.y = -v2.y; } @Override public String toString(){ return "Vertice 1: "+v1+", Vertice 2: "+v2+", Centro em: "+this.centro()+", com Area de: "+this.calculaÁrea()+" unidades de area e Perimetro de: "+this.calculaPerímetro()+" unidades de comprimento."; } } Interface com o Usuário: A interface com o usuário (UI) é uma das maiores simplificações no mundo da programação e esta ligado com o melhor aproveitamento do mouse e popularização por PCs. Nem todo mundo tem um curso de informática avançada ou Analise de Sistemas para lidar com programas sem UI, e mesmo que tivessem é muito menos prático, toma muito mais tempo e tira a eficiência do programa. Até então apenas trabalhamos com “Consoles”, nessa seção vamos aprender a criar caixas de mensagens e formulários. 18 Caixas de Mensagens: Caixas de Mensagens são “caixinhas” que “pulam” na tela para informar algo ou pedir alguma confirmação. Segue exemplo comentado: (Lendo nome de 5 pessoas e mostrando em uma caixa de mensagens) public class Pessoa { public String nome; Pessoa(String nome){ this.nome = nome; } } import javax.swing.JOptionPane;//no Cabeçalho Arquivo da classe importamos um pacote java public class PrimeiraInterface { public static void main(String[] args) {//metodo principal da classe principal do programa // TODO code application logic here Pessoa[] Pessoas = new Pessoa[5]; //criamos um vetor de 5 pessoas for (int i=0;i<5;i++){ // criamos um for para ler 5 vezes o nome de pessoas String nome = JOptionPane.showInputDialog("Qual seu nome?"); // usamos uma caixa de mensagens com caixa de texto para perguntar qual o nome da pessoa Pessoas[i] = new Pessoa(nome); // Construimos dentro do vetor um objeto de pessoa //com o nome anteriormente informado. } String nomes = ""; // Criamos uma variável de nomes com uma String vazia for (int i=0;i<5;i++){ // Adicionamos os nomes a variável nomes nomes += Pessoas[i].nome + "; \n"; } JOptionPane.showMessageDialog(null, nomes); // Imprimimos os nomes. } } Ao ler usando JOptionPane.showInputDialog tudo que for lido será considerado uma String e para que isso seja passado para um inteiro usamos “int a = Integer.parseInt(JOptionPane.showInputDialog())” Ou “String a = JOptionPane.showInputDialog() int b = Integer.parseInt(a)” Formulários: Formulários são, oras são formulários, tipo aqueles papeis chatos que temos que preencher pra pedir o histórico a diferença é que nos formulários java a gente digita com o teclado e marca com o mouse, ou digita tbm com o mouse vai que vc ta sem dinheiro pra comprar um teclado. Vamos então aos nossos recursos, os pedacinhos que temos pra juntar e formar um formulário qualquer. 19 Importações para um formulário Básico: import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.JRadioButton; import javax.swing.ButtonGroup; import javax.swing.JLabel;import javax.swing.JCheckBox; import javax.swing.JComboBox; Tipos de Entradas e Saídas: JLabel: JLabels são as linhas de texto que geralmente usamos pra indicar o que deve ser colocado no campo, por exemplo colocamos um JLabel com texto “Nome:” antes de um TextBox de nome. JTextField: São as caixas de texto onde o usuário digita as informações necessárias. Seleções: JRadioButton: São as “bolinhas” que marcamos e quando marcamos desmarca as outras. JCheckBox: São os “quadradinhos” que marcamos e quando marcamos não desmarca os outros. JComboBox: São as caixinhas de seleção que tem uma setinha do lado e quando apertamos nos da um numero de opções disponíveis para aquele campo, muito utilizado para listar coisas como por exemplo estados, países e cidades ou opções de um plano de consumo por exemplo. Botões JButton: são literalmente os botões que pressionamos para executar alguma ação. Organizadores: JPanel: São painéis utilizados para separar vários blocos. ButtonGroup: Essencial ao uso dos RadioButtons são grupos que garantem o relacionamento entre botões, evitando por exemplo que você marque vários RadioButtons onde só se pode marcar um. 20 Event’s Handler’s: São ferramentas que garantem a funcionalidade de botões, sem eles botões são apenas objetos sem função. ActionListener(Interface): É a interface que nos guia a fazer EventHandler’s. ItemListener(Interface): É a interface que nos guia a fazer um EvenHandler quando não estamos manuseando botões. Segue Abaixo um exemplo comentado de formulário: import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemListener; import java.awt.event.ItemEvent; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JTextField; import javax.swing.JRadioButton; import javax.swing.ButtonGroup; import javax.swing.JLabel; public class Formulario extends JFrame { //Declaração de Objetos a serem Usados. private JPanel buttonJPanel; private JPanel textJPanel; private JPanel radioJPanel; private JPanel botoesEscolhaPainel; private JPanel textoPainel; private JPanel botoesPainel; private JTextField textoMatricula; private JTextField textoNome; private JTextField textoCurso; private JLabel escreveMatricula; private JLabel escreveNome; private JLabel escreveCurso; private JButton botaoSalvar; private JButton botaoEscreveDados; private JButton botaoSair; private JButton[] buttons; private JRadioButton[] radioEngenheiro= new JRadioButton[5]; private JRadioButton[] radioTecnico= new JRadioButton[5]; private ButtonGroup radioGroup; Engenheiro[] Eng = new Engenheiro[5]; Tecnico[] Tec = new Tecnico[5]; 21 int numEng =1; int numTec = 5; private int indice=0; public Formulario() { super("Formulario de Cadastro de Engenheiros"); botoesEscolhaPainel= new JPanel(); textoPainel= new JPanel(); botoesPainel= new JPanel(); //Inicializando os vetores de Engenheiros e Técnicos for( int i=0; i< numEng; i++ ) { Eng[i]= new Engenheiro(); } for( int i=0; i< numTec; i++ ) { Tec[i]= new Tecnico(); } //Criando RadioButtons para cada Engenheiro e Técnico for(int i =0; i < numEng; i ++) { radioEngenheiro[ i ]= new JRadioButton("Engenheiro " +(i +1), true); botoesEscolhaPainel.add( radioEngenheiro[ i ] ); } for(int i =0; i < numTec; i ++) { radioTecnico[ i ]= new JRadioButton("Tecnico " +(i +1), true); botoesEscolhaPainel.add( radioTecnico[ i ] ); } //Colocando os RadioButtons no mesmo grupo. radioGroup = new ButtonGroup(); for(int i =0; i < numEng; i ++) { radioGroup.add(radioEngenheiro[ i ] ); } for(int i =0; i < numTec; i ++) { radioGroup.add(radioTecnico[ i ] ); } //Adicionando Labels e Caixas de Texto ao Formulario escreveMatricula= new JLabel("Matricula: ");//Instancia o Objeto dando a ele conteudo textoPainel.add(escreveMatricula); // Adiciona-o ao formulario textoMatricula = new JTextField(10); //Instancia o Objeto dando a ele tamanho maximo textoPainel.add(textoMatricula); escreveNome= new JLabel(" Nome: "); textoPainel.add(escreveNome); textoNome = new JTextField(40); textoPainel.add(textoNome); escreveCurso= new JLabel(" Curso: "); escreveCurso.setToolTipText("Apenas para engenheiros"); //Insere anotação de ajuda no objeto textoPainel.add(escreveCurso); 22 textoCurso = new JTextField(20); textoPainel.add(textoCurso); //Instanciando, adicionando e definindo texto dos botões botaoSalvar= new JButton(" Salvar "); botoesPainel.add(botaoSalvar); botaoEscreveDados = new JButton("Escreve Dados"); botoesPainel.add(botaoEscreveDados); botaoSair= new JButton(" Sair "); botoesPainel.add(botaoSair); //Criando um objeto de administração de eventos relacionados aos botões ButtonHandler handler = new ButtonHandler(); //Atribuindo aos eventos relacionados aos botões os eventos definidos no "handler" botaoSalvar.addActionListener(handler); botaoEscreveDados.addActionListener(handler); botaoSair.addActionListener(handler); //Atribuindo o handler aos radiobuttons for(int i =0; i < numEng; i ++) { radioEngenheiro[ i ].addItemListener( new RadioButtonHandler(i)); } for(int i =0; i < numTec; i ++) { radioTecnico[ i ].addItemListener( new RadioButtonHandler(i + numEng)); } //Adicionando os paineis ao formulario e definindo sua posição add(botoesEscolhaPainel, BorderLayout.NORTH); add(textoPainel, BorderLayout.CENTER); add(botoesPainel, BorderLayout.SOUTH); // desmarcando os dados no radiobutton radioGroup.clearSelection(); } private class ButtonHandler implements ActionListener { //classe de administração de eventos relacionados aos botões public void actionPerformed(ActionEvent event) { if (event.getSource() == botaoSair) { //Definindo procedimento para o botão sair System.exit(0); } if (event.getSource() == botaoSalvar) { //Definindo procedimento para o botão salvar if(indice< numEng) { Eng[indice].alteraDados(Integer.parseInt(textoMatricula.getText() ), String.format(textoNome.getText() ), String.format(textoCurso.getText() )); } else { Tec[indice - numEng].alteraDados(Integer.parseInt(textoMatricula.getText() ), String.format(textoNome.getText() )); } 23 } if( event.getSource() == botaoEscreveDados) { //Definindo procedimento para o botão de escrever dados String escreveTexto=""; for(int i=0; i< numEng; i++ ){escreveTexto += "Engenheiro " + i + " Matricula " + Eng[i].matricula + " Nome " + Eng[i].nome + " Curso " + Eng[i].curso + "\n"; } for(int i=0; i< numTec; i++ ){ escreveTexto += "Tecnico " + i + " Matricula " + Tec[i].matricula + " Nome " + Tec[i].nome + "\n"; } JOptionPane.showMessageDialog(Formulario.this, escreveTexto); } } } public class RadioButtonHandler implements ItemListener { // Administrador de eventos relacionado ao radiobutton private int engnum; public RadioButtonHandler(int i){ //construtor engnum= i; indice= engnum; } public void itemStateChanged(ItemEvent event) { //Procedimento para trocar o radiobutton selecionado e modificar os campos habilitados no formulario indice= engnum; if(engnum < numEng) { textoMatricula.setEditable(true); escreveMatricula.setToolTipText("Habilitado para engenheiros"); textoNome.setEditable(true); escreveNome.setToolTipText("Habilitado para engenheiros"); textoCurso.setEditable(true); escreveCurso.setToolTipText("Habilitado para engenheiros"); }else { textoMatricula.setEditable(true); escreveMatricula.setToolTipText("Habilitado para tecnicos"); textoNome.setEditable(true); escreveNome.setToolTipText("Habilitado para tecnicos"); textoCurso.setEditable(false); escreveCurso.setToolTipText("Desabilitado para tecnicos"); textoCurso.setText("Desabilitado"); 24 } escreveDadosNaJanela(); } public void escreveDadosNaJanela(){ //Metodo para preencher os dados do formulario quando se troca de radiobutton if(indice < numEng) { textoNome.setText( String.format( Eng[indice].nome ) ); textoMatricula.setText( String.format("%d", Eng[indice].matricula) ); textoCurso.setText( String.format(Eng[indice].curso) ); }else { textoNome.setText( String.format( Tec[indice - numEng].nome ) ); textoMatricula.setText( String.format("%d", Tec[indice - numEng].matricula) ); } } } } public class Engenheiro { //Declaração de Atributos public int matricula=0; public String nome=""; public String curso=""; //Declaração de Métodos public void alteraDados(int matricula,String nome,String curso){ this.curso=curso; this.nome=nome; this.matricula=matricula; } } public class Tecnico { //Declaração de Atributos public int matricula=0; public String nome=""; //Declaração de Métodos public void alteraDados(int matricula,String nome){ this.nome=nome; this.matricula=matricula; } } 25 import javax.swing.JFrame; import javax.swing.JOptionPane; public class TestaEngenheiros { public static void main(String[] args) { // TODO code application logic here Formulario panelFrame= new Formulario(); panelFrame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); panelFrame.setSize(700, 300); panelFrame.setVisible( true ); } } Capa Apostila de Programação II
Compartilhar