Prévia do material em texto
Programação Orientada a Objetos Márcio Emílio Cruz Vono de Azevedo Conteúdo • Paradigmas de programação • Introdução à linguagem de programação orientada a objetos • Introdução à UML • Diagrama de classes da UML • Mapeamento do diagrama de classes para linguagem de programação Conteúdo • Polimorfismo e classes abstratas • Prática de programação orientada a objetos • Tratamento de exceções • Criação de interfaces gráficas de usuário Paradigmas de Programação • Paradigma Lógico • Paradigma Funcional • Paradigma Imperativo • Paradigma Estruturado • Paradigma Procedural • Paradigma Orientado a Objetos Paradigma Lógico • Linguagens de programação baseadas em funções lógicas • Exemplo de linguagens lógicas – PROLOG Exemplo de Programação Lógica % X filho de Z e Y filho de Z implica X irmão de Y irmaos(X,Y) :- filho(X,Z), filho(Y,Z). filho(X,Y) :- pai(Y,X). % Y pai de X implica X filho de Y filho(X,Y) :- mae(Y,X). % Y mãe de X implica X filho de Y mae(marcia, ana). % marcia mãe de ana pai(tomas, ana). % tomas pai de ana pai(tomas, erica). % tomas pai de érica pai(marcos, tomas). % marcos pai de tomas ?- irmaos(ana, erica). % ana irmão de erica? yes. Paradigma Funcional • Linguagens de programação baseadas em funções matemáticas • Exemplo de linguagem funcional – LISP • Exemplo de programação funcional (defun fatorial (n) (if (= n 0) 1 (* n (fatorial (- n 1))))) Paradigma Imperativo • Através de linguagens de programação imperativas, o programador dá ordens para o computador • Exemplo de linguagem imperativa – BASIC • Nas linguagens imperativas, o programador pode definir saltos de um ponto a outro do programa • Em BASIC, saltos são implementados através do comando GOTO (vá para) Exemplo de Programação Imperativa 20 READ A,B,C 30 IF A=0 THEN GOTO 400 40 LET D=B*B-4*A*C 50 IF D<0 THEN GOTO 420 60 PRINT "SOLUCAO" 70 IF D=0 THEN GOTO 200 80 PRINT "PRIMEIRA SOLUCAO",(-B+SQR(D))/(2*A) 90 PRINT "SEGUNDA SOLUCAO",(-B-SQR(D))/(2*A) 100 GOTO 20 200 PRINT "SOLUCAO UNICA",(-B)/(2*A) 300 GOTO 20 400 PRINT "A DEVE SER DIFERENTE DE ZERO" 410 GOTO 20 420 PRINT "NAO HA SOLUCOES REAIS" 430 GOTO 20 490 DATA 10,20,1241,123,22,-1 500 END Paradigma Estruturado • Semelhante ao paradigma imperativo, porém não são permitidos saltos • Os programas utilizam três estruturas básicas – Sequência: comandos executados em sequência – Decisão: if/then/else, switch/case etc. – Repetição: while, for, do/while etc. • Exemplos de linguagens estruturadas – C, Pascal Exemplo de Programação Estruturada int n, first = 0, second = 1, next, c; printf("Enter the number of terms\n"); scanf("%d",&n); printf("First %d terms of Fibonacci series are :-\n",n); for ( c = 0 ; c < n ; c++ ) { if ( c <= 1 ) next = c; else { next = first + second; first = second; second = next; } printf("%d\n",next); } Paradigma Procedural • Utilizado em linguagens de programação baseadas em procedimentos (ou funções) • Exemplos de linguagens procedurais – C, Pascal • Pode-se combinar os paradigmas procedural e estruturado ou procedural e imperativo • Exemplo de procedimento (ou função) void sayhello(int number_of_times) { int i; for(i=1; i <= number_of_times; i++) { printf("Hello!\n"); } } Paradigma Orientado a Objetos • Linguagens de programação que utilizam objetos • Tentam trazer objetos do mundo real para a linguagem de programação • Baseado em classes e objetos – Classes: estruturas onde são definidos os estados e o comportamento dos objetos – Objetos: instâncias de uma classe – Uma vez definida a classe, vários objetos podem ser instanciados para aquela classe – Várias classes podem ser criadas, definindo vários tipos de objetos • Linguagens de programação orientadas a objetos – Smalltalk, C++, Object Pascal, Java, C#, Objective-C, Ruby Exemplo de Programação Orientada a Objetos import javax.swing.JOptionPane; public class OddEven { private int input; public OddEven() { } public static void main(final String[] args) { OddEven number = new OddEven(); number.showDialog(); } public void showDialog() { try { this.input = Integer.parseInt(JOptionPane.showInputDialog("Please enter a number.")); this.calculate(); } catch (final NumberFormatException e) { System.err.println("ERROR: Invalid input. Please type in a numerical value."); } } private void calculate() { if ((this.input % 2) == 0) { JOptionPane.showMessageDialog(null, "Even"); } else { JOptionPane.showMessageDialog(null, "Odd"); } } } Conceitos de Orientação a Objetos • Abstração – Definir na linguagem de programação objetos semelhantes aos objetos do mundo real, porém extraindo somente os dados que façam sentido para o sistema a ser desenvolvido. – Exemplo: • alunos possuem nome, matrícula, idade, peso, altura, entre outras características. Na construção de um sistema acadêmico, peso e altura são irrelevantes, logo, o objeto aluno será modelado somente com as características relevantes ao sistema: nome, matrícula e idade. Conceitos de Orientação a Objetos • Encapsulamento – Primeira definição: • Descrever em um determinado objeto apenas as características que sejam pertinentes ao objeto em questão. • Exemplo – um aluno está matriculado em um curso. As características do aluno devem ser descritas no objeto aluno e as características do curso devem ser descritas no objeto curso. » Obs.: Existem mecanismos para associar um objeto aluno a um objeto curso que veremos posteriormente. Conceitos de Orientação a Objetos • Encapsulamento – Segunda definição • As características que representam o estado de um objeto devem ser protegidas de acesso externo. O estado do objeto somente será alterado internamente pelo comportamento definido para este objeto. • Exemplo: – A “velocidade” é um possível elemento de estado de um objeto carro. Não se deve permitir que a “velocidade” seja alterada diretamente por entidades externas ao objeto em questão. Ao invés disso, poderão existir definições de comportamento como “acelerar” e “frear” que, sempre que forem invocados, irão alterar o estado atual da “velocidade”. Conceitos de Orientação a Objetos • Classes – Uma classe define as características que um objeto terá. Uma vez definida a classe, vários objetos poderão ser criados e suas características serão moldadas por sua classe. – As classes definem as variáveis de estado e o comportamento que os objetos terão. – Exemplo: • A classe carro poderá definir a variável de estado “velocidade” e os comportamentos “acelerar” e “frear”. Conceitos de Orientação a Objetos • Estado de um objeto – O estado de um objeto é definido através dos valores de suas variáveis membro, ou atributos. – Os atributos do objeto são declarados na definição da classe. • Comportamento de um objeto – O comportamento de um objeto é definido através de suas funções membro, ou operações. – As operações do objeto são declaradas na definição da classe. Conceitos de Orientação a Objetos • Objetos – O objeto é uma instância de uma classe. Por exemplo, a classe “Cadeira” define as características de uma cadeira, mas a cadeira em que você está sentado é um objeto, ou seja, uma instância da classe “Cadeira”. A cadeira em que seu colega está sentado é uma outra instância da mesma classe “Cadeira”. – Apesar dos atributos que representam o estado de um objeto estar definido na classe, é no objeto que eles definem seus valores específicos.Por exemplo, a classe “Aluno” define o atributo “idade”, mas cada objeto da classe “Aluno” terá um valor diferente para seu atributo “idade”. Introdução à Linguagem Java • Linguagem de programação que implementa o paradigma orientado a objetos, combinado com outros paradigmas • Java é o nome de uma tecnologia centrada em uma linguagem de programação com o mesmo nome • Criada em 1991 como parte de um sistema de TV interativa – Na época recebia o nome de “Oak” – carvalho em inglês • Adotou o nome “Java” em 1995 Introdução à Linguagem Java • A tecnologia Java ganhou três edições: – JavaSE – Java Standard Edition – utilizada para o desenvolvimento de aplicações desktop, standalone e de uso geral • Este curso abordará a edição JavaSE – JavaEE – Java Enterprise Edition – utilizada para o desenvolvimento de aplicações corporativas e baseadas em Web – JavaME – Java Micro Edition – utilizada para o desenvolvimento de aplicações para dispositivos com recursos limitados, como dispositivos móveis Anatomia de uma Classe Java public class Carro { private String modelo; private int velocidade = 0; public Carro(String modelo) { this.modelo = modelo; } public void acelerar(int incremento) { velocidade += incremento; } public void frear(int decremento) { if(velocidade > decremento) { velocidade -= decremento; } else { velocidade = 0; } } } Nome da classe Atributos (ou campos) Construtor Operações (ou métodos) Anatomia de uma Classe Java • Por convenção: – Nomes de classes são escritos com a inicial maiúscula e a separação entre palavras com letras maiúsculas (CamelCase ou CamelCaps) – Nomes de atributos e operações são escritos com a inicial minúscula e a separação de palavras com letras maiúsculas (camelCase ou camelBack) Objetos em Java • A classe definida anteriormente representa as propriedade de um objeto do tipo “Carro”. • A palavra reservada “new” é utilizada para instanciar um objeto em Java. • É comum criar uma variável para referenciar o objeto e atribuir o novo objeto criado à variável. Assim o objeto poderá ser utilizado posteriormente no programa. Instanciando um objeto Carro esportivo = new Carro("Camaro"); esportivo.acelerar(160); referência para um objeto criação do objeto chamando a operação acelerar no objeto Introdução à UML • Sigla para Linguagem de Modelagem Unificada (Unified Modeling Language) • Criada por Grady Booch, James Rumbaugh e Ivar Jacobson enquanto trabalhavam para a Rational Software Co., atualmente comprada pela IBM • Linguagem de modelagem visual, através de diagramas • A versão 2.x possui 14 diagramas utilizados para modelar diversos aspectos de um projeto de software orientado a objetos Diagrama de Classes da UML • É o diagrama mais utilizado da UML • Responsável por representar as classes em um sistema orientado a objetos e seus relacionamentos Representação de uma Classe • No diagrama de classes, a classe é representada por um retângulo dividido em três partes – Na parte superior é onde se localiza o nome da classe e seus estereótipos – Na parte do meio é onde se localizam os atributos da classe – Na parte inferior é onde se localizam as operações da classe Representação de uma Classe Nome Atri but os Ope raçõ es Representação de uma Classe • Representação de um atributo: – idade : int = 0 • Representação de uma operação + dividir ( dividendo : float, divisor : float ) : float visibilidadevisibilidade nomenome tipotipo valor defaultvalor default visibilidadevisibilidade nomenome Parâmetros ( nome : tipo, nome : tipo) Parâmetros ( nome : tipo, nome : tipo) tipo de retornotipo de retorno Representação de uma Classe • Exemplo: Representação de uma Classe • A classe do slide anterior, em Java, fica: public class Aluno { private String nome; private int matricula; private int idade = 0; public void matricular(int matricula) { // ... } public float mediaGeral() { // ... } public String getNome() { // ... } } Representação de uma Classe • Caso não seja necessário expor os atributos e as operações de uma classe, ela poderá ser representada com apenas um retângulo contendo o nome da classe • Exemplo: Associação • A associação é um relacionamento entre duas classes que indica que ambas se comunicam afim de prover o serviço necessário • Símbolo: • Na linguagem de programação, a associação entre as classes acima informa que a classe A possui um atributo capaz de armazenar uma instância de B e a classe B possui um atributo capaz de armazenar uma instância de A Associação • Em Java: public class A { private B b; } public class B { private A a; } Associação • Navegabilidade – Informa que a classe A conhece a classe B, porém a classe B não conhece a classe A – Na linguagem de programação, informa que a classe A possui um atributo capaz de armazenar uma instância de B, mas a classe B não possui nenhum atributo capaz de armazenar uma instância de A no que diz respeito a esta associação Associação • Em Java: public class A { private B b; } public class B { } Associação • Multiplicidade – A multiplicidade informa com quantas instâncias de uma classe a outra está associada – Na linguagem de programação, a multiplicidade informa se o atributo do tipo de uma classe que estará presente na outra armazenará um único valor (multiplicidade igual a 1) ou será um vetor (multiplicidade maior do que 1) Associação • Possíveis multiplicidades • Exemplo: 1 um 0..1 zero a um * muitos 0..* zero a muitos 1..* um a muitos 4..8 quatro a oito 10..* dez a muitos Associação • Em Java: public class A { private B[] bs; } public class B { } Associação • Papel (role) – Informa qual o papel que a(s) instância(s) de uma classe representa(m) na associação com a outra – Na linguagem de programação, o papel informa o nome do atributo que será criado na outra classe – No exemplo acima, muitas pessoas representam o papel de “contatos” na associação com a agenda Associação • Em Java: public class Agenda { private Pessoa[] contatos; } public class Pessoa { } Tipos Especiais de Associação • Existem dois tipos especiais de associação que representam relacionamentos todo/parte, ou seja, uma das classes da associação representa um todo e a outra representa uma parte desse todo: – Agregação – Composição Tipos Especiais de Associação • Agregação – Possui a semântica de um relacionamento todo/parte, permitindo que uma parte possa se associar com mais de um todo – No exemplo acima, as disciplinas compõem o curso, ou seja, são partes do curso. – Uma mesma disciplina pode estar presente em mais de um curso – O diamante fica sempre do lado do todo Tipos Especiais de Associação • Composição – Possui a semântica de um relacionamento todo/parte, informando que uma instância da parte somente poderá se relacionar com uma instância do todo – No exemplo acima, em um sistema imobiliário, apartamentos compõem o edifício – Um apartamento somente poderá estar presente em um edifício – O diamante fica sempre do lado do todo Tipos Especiais de Associação • Na linguagem Java, não existe diferença entre a agregação, composição ou associação comum • Agregações e composições são informações semânticas para o programador Classes de Associação • Classe de associação é uma classe que adiciona características especiais na associação entre duas outras classes Classes de Associação • No exemplo anterior, a classe “Situacao” adiciona características(notas e frequência) à associação entre “Aluno” e “Disciplina” • A implementação será semelhante à implementação das associações abaixo: • Ou seja, a situação liga um aluno a uma disciplina Generalização (ou Especialização) • Quando duas ou mais classes possuem características em comum, tais características podem ser generalizadas em uma classe geral • As classes especiais, então, herdam as características da classe geral Classe geral Superclasse Classe mãe Classe geral Superclasse Classe mãe Classe especial Subclasse Classe filha Classe especial Subclasse Classe filha Generalização • O diagrama abaixo possui atributos e operações em comum que podem ser generalizados em uma classe, por exemplo, “Aluno” Generalização Generalização • Em Java: public class Aluno { private String nome; private int matricula; private int idade; public String getNome() { return nome; } } Generalização public class AlunoGraduacao extends Aluno { private float[] notas; public float mediaGeral() { // ... } } Generalização public class AlunoPos extends Aluno { private char[] conceitos; public char conceitoGeral() { // ... } } Generalização (ou Especialização) • Pode ser necessário especializar uma classe em uma estrutura já existe • Por exemplo, no diagrama do slide anterior, podemos adicionar a classe “AlunoMestrado” como uma especialização da classe “AlunoPos” Generalização (ou Especialização) Generalização (ou Especialização) • Em Java: public class AlunoMestrado extends AlunoPos { private String dissertacao; } Classes e Operações Abstratas • Classes abstratas são aquelas que não podem ser instanciadas • Classes abstratas podem ser usadas como referência para objetos de usas classes filhas que sejam concretas (não abstratas) • Operações abstratas não possuem implementação • Operações abstratas de uma classe devem ser redefinidas nas suas subclasses concretas • Classes que possuam operações abstratas são, obrigatoriamente, abstratas • Na UML, classes e operações abstratas são representadas em itálico Classes e Operações Abstratas Operações e Classes Abstratas • Em Java: public abstract class Aluno { private String nome; private int matricula; private int idade; public String getNome() { return nome; } public abstract boolean aprovado(); } Classes e Operações Abstratas public class AlunoGraduacao extends Aluno { private float[] notas; public float mediaGeral() { // ... } public boolean aprovado() { // ... } } Classes e Operações Abstratas public class AlunoPos extends Aluno { private char[] conceitos; public char conceitoGeral() { // ... } public boolean aprovado() { // ... } } Interfaces • Classes abstratas podem possuir operações abstratas e operações concretas (não abstratas) • Interfaces são semelhantes a classes totalmente abstratas (com todas as suas operações abstratas) • Interfaces não possuem atributos, a não ser constantes (public static final) • Em UML, a interface é modelada através da simbologia de uma classe, utilizando o estereótipo <<interface>> Interfaces • Em Java: public interface Pesquisador { public String gerarHistoricoEscolar(); public String gerarCurriculo(); } Realização • Relacionamento entre uma classe e uma interface indicando que a classe implementa as operações da interface Em Java: public class C implements I { // ... } Realização Realização public class AlunoPos extends Aluno implements Pesquisador { private char[] conceitos; public char conceitoGeral() { // ... } public boolean aprovado() { // ... } public String gerarHistoricoEscolar() { // ... } public String gerarCurriculo() { // ... } } “Static” • Atributos ou operações “static” são considerados atributos ou operações da classe, não do objeto • Para acessar os atributos ou operações “static”, não é necessário instanciar a classe • Em UML, atributos e operações “static” são representados através de sublinhado “Static” • Em Java: public class Aluno { private String nome; private int matricula; public static boolean aprovado(String media) { // ... } } “Final” • Operações que possuam o modificador “final” não podem ser redefinidas em classes especializadas • Atributos que possuam o modificador “final” são constantes, ou seja, o seu valor deve ser definido na declaração do atributo e não poderá mais ser alterado • Não existe representação na UML para o modificador “final”, mas, por convenção, atributos constantes são escritos com todas as letras maiúsculas e separação de palavras com underscore • Atributos constantes são, na maior parte das vezes, declarados como “public static final” Visibilidades Visibilidad e Na UML Em Java Visível Por: Pela Classe Pelo Pacote Pela Subclasse Pelo Mundo pública + public Sim Sim Sim Sim protegida # protected Sim Sim Sim Não default ~ Sim Sim Não Não privada – private Sim Não Não Não Exercício proposto • Criar o código Java para o diagrama de classes abaixo Exercício proposto Pede-se modelar as classes de um sistema para uma locadora de veículos. Clientes alugam veículos. O aluguel é a ligação entre um cliente e um veículo e possui data de início, data prevista de devolução, data de fim (data efetiva de devolução), valor previsto e valor pago. O aluguel pode estar nos seguintes estados: agendado, cancelado, em andamento e concluído (indicando que o carro já foi devolvido). Os clientes possuem os seguintes dados: nome, endereço, CPF e telefone. Clientes também podem ser empresariais. Os clientes empresariais, além de alugarem veículos, também podem utilizar serviços de viagem. No serviço de viagem, além dos dados de uma locação comum, possui a informação do motorista (funcionário da locadora) que realiza a viagem e a quantidade de passageiros. Os clientes empresariais não possuem CPF, mas sim CNPJ, e também possuem nome e ramal do contato dentro da empresa. O cliente pessoa física (não empresarial) também possui pontos de fidelidade (milhas) que podem ser utilizados em uma locação futura. O veículo possui as seguintes informações: número do veículo na frota, marca, modelo, ano fabricação, ano modelo e placa. Para cada veículo, o sistema deverá armazenar os dados de cada revisão que o veículo passou. A revisão possui data e nome da concessionária que a realizou, além de possuir a relação de peças trocadas (nome e modelo). Diagrama de Sequência da UML • Utilizado para modelar a interação entre os objetos em um sistema orientado a objetos • Eventos são ordenados de acordo com a sequência dos acontecimentos no tempo • Eventos mostrados mais acima no diagrama ocorreram mais no passado • Eventos mostrados mais abaixo no diagrama ocorreram mais no futuro Linha de Vida do Objeto • Representa o tempo de existência do objeto • Eventos posicionados em pontos superiores da linha ocorrem antes daqueles posicionados em pontos inferiores Linha de Vida do Objeto Tempo Mensagem • Mensagem são trocadas entre objetos ao longo de suas linhas de vida • A barra retangular branca vertical representa o tempo da execução da mensagem Mensagem Mensagem • Mensagens síncronas são representadas por uma seta triangular cheia – O objeto chamador precisa esperar o fim de sua execução antes de executar qualquer outro evento • Mensagens assíncronas são representadas por uma seta aberta – Não há necessidade de espera, logo, o objeto chamador está livre para processar outros eventos tão logo a mensagem é enviada para o processo destinatárioMensagem de Retorno • Representada por uma seta tracejada ao final da execução de uma mensagem síncrona • É uma informação opcional de que a execução da mensagem enviada terminou no processo destinatário Mensagem de Retorno Auto-Chamadas • Mensagens que um objeto envia para ele mesmo Mensagem de Criação • Informa que, em determinado momento, ocorreu uma mensagem que causou a criação de um determinado objeto • Na prática, representa uma chamada a um construtor Mensagem de Criação Mensagem de Destruição • Informa que, em determinado momento, ocorreu uma mensagem que causou a destruição de um determinado objeto • Em linguagens de programação que possuem o conceito de destrutor, pode-se dizer que o destrutor da classe daquele objeto foi chamado naquele momento Mensagem de Destruição Uso do Diagrama de Sequência • O Diagrama de Sequência é utilizado principalmente na fase de projeto do sistema, quando se necessita descobrir as classes que irão se transformar em código fonte na linguagem de programação • Nesse momento, as mensagens são entendidas como chamada a uma operação, que serão implementadas como um método na linguagem de programação Exemplo de Diagrama de Sequência Diagrama de Classes Resultante Programando em Java • Olá Mundo: public class HelloWorld { public static void main(String[] args) { System.out.println("Olá Mundo!!!"); } } – O pequeno programa acima apresenta uma classe com o método main, que é onde todo programa em Java inicia – A mensagem “Olá Mundo!!!” será impressa no console Estruturas de Decisão If/then/else if ( <expressão booleana> ) { // ... } else { //... } Switch/case/default switch ( <expressão inteira> ) { case 1: // ... break; case 2: // ... break; default: // ... break; } Laços While e do/while while ( <expressão booleana> ) { // ... } do { // ... } while ( <expressão booleana> ); For for ( <inicialização> ; <condição de término> ; <incremento> ) { // ... } for ( <declaração de variável> : <vetor ou coleção> ) { // ... } Tratamento de Exceções • Exceções são classes que representam situações de adversas em um código Java try { < bloco de código onde pode ocorrer o erro > } catch ( < declaração de exceção > ) { < bloco de tratamento de erro > } finally { <bloco executado em qualquer situação > } • O bloco “finally” é executado mesmo que haja um retorno no final do método Coleções • Coleções são estruturas dinâmicas capazes de armazenar uma coleção de dados • A imagem abaixo apresenta as principais interface que definem os principais tipos de coleções da API Java Coleções • A tabela abaixo apresenta as principais classes que representam coleções, suas categorias e as interfaces que elas implementam Interfaces Implementações de tabelas Hash Implementações de vetores redimensionáveis Implementações de estruturas em árvore Implementações de listas ligadas Implementações de tabelas hash + listas ligadas Set HashSet TreeSet LinkedHashSet List ArrayList LinkedList Queue LinkedList Deque ArrayDeque Map HashMap TreeMap LinkedHashMap Conversão de Tipos • Utiliza-se a conversão de tipos (cast) para realizar conversões de referências de uma classe para referências de outra classe • A palavra chave “instanceof” verifica se a conversão de tipos pode ocorrer • Exemplo: Aluno aluno = alunos[0]; // lê o aluno de um vetor if ( aluno instanceof AlunoPos ) { // é instância de AlunoPos? AlunoPos pos = (AlunoPos) aluno; // conversão de tipo } Exercício • Criar uma aplicação para incluir, pesquisar e remover alunos (utilizando dados em memória) • Alunos podem ser: – De graduação: possuindo nome, matrícula, idade, período e notas – De pós-graduação: possuindo nome, matrícula, idade, conceitos e orientador Exercício Proposto • Criar uma aplicação para criar, pesquisar e remover contatos em uma agenda (utilizando dados em memória) • Contatos podem ser: – Pessoas físicas: possuindo nome, endereço, telefone e CPF – Pessoas jurídicas: possuindo nome, endereço, telefone, CNPJ e nome fantasia Criação de Interface Gráfica • JFC/Swing – Biblioteca de criação de interface gráfica – Não precisa de ferramenta, o código das interfaces gráficas podem ser criado em qualquer outro editor de texto – Extensão do AWT – Abstract Window Toolkit Confecção de Interface Gráficas • Olá Mundo em JFC/Swing: JFrameJFrame JTextFieldJTextFieldJLabelJLabel JButtonJButton Tratamento de Eventos • Tratamento de evento de clique em botão realizado através da interface ActionListener Tratamento de Eventos • Utilização de classe anônima JButton button = new JButton(“OK”); button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // código de tratamento de evento } }); Confecção de Interface Gráfica • JOptionPane – Classe responsável por exibir caixas de mensagem ou diálogo simples JOptionPaneJOptionPane Confecção de Interface Gráfica • Tela de login: TitledBorderTitledBorder JPasswordFieldJPasswordField Layouts • GridLayout – Os componentes são dispostos em um grid • FlowLayout – Os componentes são dispostos em fluxo (enfileirados e mudando de linha ao acabar o espaço) – Layout padrão do Jpanel • BorderLayout – Os componentes são dispostos nas bordas ou no centro do container (em cima, à esquerda, em baixo, à direita ou no centro) Menus Menus • JMenuBar – Responsável pela criação da barra de menus • JMenu – Responsável pela criação dos menus intermediários • JMenuItem – Responsável pela criação dos itens de menu – O tratamento de eventos é realizado da mesma forma que no JButton, ou seja, através da interface ActionListener Confecção de Interface Gráfica JComboBoxJComboBox Layout • GridBagLayout – Um dos layouts mais flexíveis da API JFC/Swing – Utiliza GridBagConstraints para posicionar os componentes no container • Principais campos do GridBagConstraints: – gridx, gridy – responsável pelo posicionamento dos componentes no grid – gridwidth, gridheight – informa quantos grids de largura ou de altura o componente ocupará – fill – informa como o componente preencherá o grid – ipadx, ipady – configura o tamanho mínimo do componente no grid – Insets – distância entre o componente e a borda do grid – anchor – responsável pelo alinhamento do componente no grid Exercício Proposto • Criar a interface gráfica abaixo FIM! Obrigado! Slide 1 Conteúdo Conteúdo Paradigmas de Programação Paradigma Lógico Exemplo de Programação Lógica Paradigma Funcional Paradigma Imperativo Exemplo de Programação Imperativa Paradigma Estruturado Exemplo de Programação Estruturada Paradigma Procedural Paradigma Orientado a Objetos Exemplo de Programação Orientada a Objetos Conceitos de Orientação a Objetos Conceitos de Orientação a Objetos Conceitos de Orientação a Objetos Conceitos de Orientação a Objetos Conceitos de Orientação a Objetos Conceitos de Orientação a Objetos Introdução à Linguagem Java Introdução à Linguagem Java Anatomia de uma Classe Java Anatomia de uma Classe Java Objetos em Java Instanciando um objeto Introdução à UML Diagrama de Classes da UML Representação de uma Classe Representação de uma Classe Representação de uma Classe Representação de uma Classe Representação de uma Classe Representação de uma Classe Associação Associação Associação Associação AssociaçãoAssociação Associação Associação Associação Tipos Especiais de Associação Tipos Especiais de Associação Tipos Especiais de Associação Tipos Especiais de Associação Classes de Associação Classes de Associação Generalização (ou Especialização) Generalização Generalização Generalização Generalização Generalização Generalização (ou Especialização) Generalização (ou Especialização) Generalização (ou Especialização) Classes e Operações Abstratas Classes e Operações Abstratas Operações e Classes Abstratas Classes e Operações Abstratas Classes e Operações Abstratas Interfaces Interfaces Realização Realização Realização “Static” “Static” “Final” Visibilidades Exercício proposto Exercício proposto Diagrama de Sequência da UML Linha de Vida do Objeto Linha de Vida do Objeto Mensagem Mensagem Mensagem Mensagem de Retorno Mensagem de Retorno Auto-Chamadas Mensagem de Criação Mensagem de Criação Mensagem de Destruição Mensagem de Destruição Uso do Diagrama de Sequência Exemplo de Diagrama de Sequência Diagrama de Classes Resultante Programando em Java Estruturas de Decisão Laços Tratamento de Exceções Coleções Coleções Conversão de Tipos Exercício Exercício Proposto Criação de Interface Gráfica Confecção de Interface Gráficas Tratamento de Eventos Tratamento de Eventos Confecção de Interface Gráfica Confecção de Interface Gráfica Layouts Menus Menus Confecção de Interface Gráfica Layout Exercício Proposto Slide 112