Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
JAVA_Aula1.pdf 1 Programação Orientada a ObjetosProgramação Orientada a Objetos em Javaem Java Aula 1 Aula 1 –– Introdução, História e Introdução, História e ConceitosConceitos Prof. Dr. Francisco Isidro Massetto francisco.isidro@techschool.com.br 2 Plano de EnsinoPlano de Ensino • Justificativa • Apresentar técnicas de programação Orientada a Objetos com implementações em uma linguagem de programação. 3 Plano de EnsinoPlano de Ensino • Objetivo • Capacitar o aluno a desenvolver aplicações através do paradigma Orientado a Objetos. 4 BibliografiaBibliografia • Básica • DEITEL, H. M.; DEITEL, P. J. Java, Como Programar. 4ª Edição, Bookman, Porto Alegre, 2003. • HORSTMANN, C. S. Core Java 2: Fundamentos. Makron Books, São Paulo, 2001, v.1. • HORSTMANN, C. S. Core Java 2: Recursos Avançados. Makron Books, São Paulo, 2001, v.2. 5 BibliografiaBibliografia • Complementar • FURGERI, S. Java 2: Ensino Didático: desenvolvendo e implementando aplicações. Érica, São Paulo, 2002, 372p. • Softwares de Apoio • Java Development Kit (JDK) • NetBeans IDE Introdução a Linguagem JavaIntrodução a Linguagem Java 2 7 • A linguagem Java tem-se consolidada no mercado de aplicativos • Apresenta um código portável • Utilizada em: • Sites • Sistemas Bancários IntroduçãoIntrodução 8 IntroduçãoIntrodução • Pensando em servidores, tem- se os Servlets, JSPs (JavaServer Pages), EJBs (Entreprise Java Beans) • Muitas linhas de pesquisas envolvem desenvolvimento nessa linguagem (Computação Distribuída, Multimídia, Middleware, Processamento de Alto- Desempenho) • Permite a implementação do paradigma Orientado a Objetos, já consolidado por outras linguagens (ex. C++) 9 HistóriaHistória • Surgimento: resultado de um projeto de pesquisa - Green (1991) - financiado pela Sun Microsystems • Objetivo: desenvolvimento de uma linguagem baseada em C e C++ que pudesse fazer funcionar os utensílios domésticos do futuro e possibilitar a comunicação entre eles. • Ex: TV, liqüidificador, torradeira. • Mudança no enfoque do projeto devido a problemas de patrocínio 10 • Aumento da popularidade da WWW em 1993 - imediato potencial de Java para criar páginas WEB • 1995: a Sun anunciou Java formalmente • Se consolidou por volta de 1996 • Primeiro nome adotado: “Oak”(carvalho) - James Gosling • O crescimento do WWW (Internet) fez surgir o HotJava – um browser em Java para o próprio código Java HistóriaHistória 11 • Empresas começaram a incorporar o browser Java (Netscape, IBM, Symantec, Microsoft, etc) • As primeiras versões eram pobres (nem imprimiam) • As evoluções em curto período de tempo mostraram o poder da linguagem HistóriaHistória 12 • Linguagem de programação Orientada a Objetos, desenvolvida pela Sun Microsystems. • Tem como base linguagens de alto nível anteriores. • Simplicidade • Versão simples de C++ • Simples implementar Orientação a Objetos • Código interpretado pequeno • Máquina Virtual (JVM) pequena – 45Kb CaracterísticasCaracterísticas 3 13 • Orientação a Objetos • Recursos desse paradigma • Não possui herança múltipla CaracterísticasCaracterísticas 14 • Distribuída • Comunicação facilitada através de redes de computadores • Execução remota de recursos (RMI) • Criação de aplicações server- side (Servlets, JSP, etc.) CaracterísticasCaracterísticas 15 • Segurança • Nada é seguro!!! • Sistemas de segurança na JVM • Assinatura digital • Grande eficácia • Controle para evitar estouro de pilha • Controle para evitar corrupção de memória • Controle de Escrita ou leitura de arquivos locais CaracterísticasCaracterísticas 16 CaracterísticasCaracterísticas • Portabilidade e Arquitetura Neutra • Código intermediário (bytecode) • Java possui ricas coleções de classes existentes em bibliotecas de classes Java - Java APIs (Applications Programming Interfaces – Interfaces de programas aplicativos) 17 • Múltiplas linhas de execução • Facilidade de construção de threads • Atraente para aplicações servidores • Dinâmica • Adapta- se para o ambiente de execução • Adiciona classes, métodos, variáveis em tempo de execução CaracterísticasCaracterísticas 18 • Bytecode • Código intermediário, pré- compilado e pronto para ser interpretado • Coletor de lixo (Garbage collection) • Recurso do Java para gerenciamento de memória, liberando memória que não é mais necessária CaracterísticasCaracterísticas 4 19 • HotJava • Browser da Sun para execução de códigos Java, já “esquecido” desde que a Nestscape o incorporou • JVM • Máquina virtual Java, responsável pela interpretação do código Java • Compilador JIT (Just- in- Time) • Compilador de Java específico para uma plataforma CaracterísticasCaracterísticas 20 • JavaScript • Linguagem de scripts para páginas Web; apesar do nome e da sintaxe, não tem nada a ver com a programação em Java • Java é extensão do HTML • HTML é uma linguagem de marcação de hypertexto • Java é uma linguagem de programação CaracterísticasCaracterísticas 21 Conceitos errados sobre JavaConceitos errados sobre Java • Java é fácil • Nenhuma linguagem de programação é fácil • Implementar os conceitos de OO não é simples 22 Ambiente Java TípicoAmbiente Java Típico Fase 1 Editor Disco - O programa é criado no editor (.java) e armazenado em disco Fase 2 Compilador Disco - O compilador cria bytecodes (.class) e osarmazena em disco. Fase 3 Class Loader .. Memória Principal Disco - O carregador de classe coloca bytecodes na memória. Fase 4 Verificador de Bytecode .. Memória Principal - O verificador de bytecodes confirma que todos os bytecodes são válidos e não violam restrições de segurança de Java. (Internet) Fase 5 Interpretador .. Memória Principal - O interpretador lê os bytecodes e os traduz para uma linguagem que o computador possa entender, possivelmente armazenando valores dos dados enquanto executa o programa. 23 Java Software Java Software DevelopmentDevelopment KitKit • O ambiente de desenvolvimento de software Java, Java SDK (antigamente, JDK), é formado essencialmente por: • um conjunto de aplicativos que permite, entre outras tarefas, realizar a compilação e a execução de programas escritos na linguagem Java. • um amplo conjunto de APIs que compõem o núcleo de funcionalidades da linguagem Java. • Uma API (Application Programming Interface) é uma biblioteca formada por código pré-compilado, pronto para ser utilizado no desenvolvimento de suas aplicações. 24 • As ferramentas básicas do kit de desenvolvimento Java são: • o compilador Java, javac, • o interpretador de aplicações Java, java e • o interpretador de applets Java, appletviewer. • Tudo em Java está organizado em classes. • Algumas classes são desenvolvidas pelo programador da aplicação e outras, • Já estão disponíveis através do núcleo de funcionalidades da plataforma Java. Java Software Java Software DevelopmentDevelopment KitKit 5 25 • As classes que compõem o núcleo de funcionalidades Java estão organizadas em pacotes. • Um pacote (package) Java é um mecanismo para agrupar classes de finalidades afins ou de uma mesma aplicação. • Além de facilitar a organização conceitual das classes, o mecanismo de pacotes permite localizar cada classe necessária durante a execução da aplicação. • Principal funcionalidade de um pacote Java: • Evitar a explosão do espaço de nome, ou seja, classes com o mesmo nome em pacotes diferentes podem ser diferenciadas pelo nome completo, pacote.classe. Núcleo de funcionalidadesNúcleo de funcionalidades 26 Principais Pacotes JavaPrincipais Pacotes Java • Entre os principais pacotes oferecidos como parte do núcleo Java estão: • java.lang • java.util • java.io • java.awt • java.applet • java.net • Observe que esses nomes seguem a convenção Java, pela qual nomes de pacotes (assim como nomes de métodos) são grafados em letras minúsculas, enquanto nomes de classes têm a primeira letra (de cada palavra, no caso de nomes compostos) grafada com letra maiúscula. • Além dessas funcionalidades básicas, há também APIs definidas para propósitos mais específicos compondo a extensão padronizada ao núcleo Java. 27 BytecodesBytecodes • Um dos grandes atrativos da plataforma tecnológica Java é a portabilidade do código gerado. • Esta portabilidade é atingida através da utilização de bytecodes. • Bytecode é um formato de código intermediário entre o código fonte, o texto que o programador consegue manipular, e o código de máquina, que o computador consegue executar. • Na plataforma Java, o bytecode é interpretado por uma máquina virtual Java (JVM). 28 BytecodesBytecodes • A portabilidade do código Java é obtida à medida que máquinas virtuais Java estão disponíveis para diferentes plataformas. • Assim, o código Java que foi compilado em uma máquina pode ser executado em qualquer máquina virtual Java, independentemente de qual seja o sistema operacional ou o processador que executa o código: 29 Máquina Virtual Java (JVM) Máquina Virtual Java (JVM) • É uma máquina de computação abstrata e um ambiente de execução independente de plataforma. • Programas escritos em Java e que utilizem as funcionalidades definidas pelas APIs dos pacotes da plataforma Java executam nessa máquina virtual. 30 FerramentasFerramentas • Editor • UNIX/Linux • vi • emacs • Windows 95/98/ME e NT/2000 • Edit do DOS • Notepad • Ambiente de Desenvolvimento Integrado (IDEs) • Forté for Java Community Edition • NetBeans IDE • JBuilder da Borland • Eclipse da IBM • J++ da Microsoft 6 31 1 //um primeiro programa em Java 2//Welcome.java 3 public class Welcome { 4 // o método main inicia a execução do aplicativo Java 5 public static void main (String args [ ] ) 6 { 7 System.out.println(“Welcome to Java Programming!”); 8 } // fim do método main 9 } // fim da classe Welcome Estrutura de um Programa em Estrutura de um Programa em JavaJava Welcome to Java Programming! 32 Estrutura de um Programa em Estrutura de um Programa em JavaJava • // (comentário de única linha) • indica que o restante da linha é um comentário • /* (comentário de múltiplas linhas) */ • pode ser dividido em várias linhas • /** (cometário de documentação) */ • programa utilitário javadoc - lê esses comentários e usa os mesmos para preparar a documentação do programa • Documentar programas e melhorar a legibilidade • Dica: todo programa deve inciar com um comentário indicando o propósito do programa. 33 Estrutura de um Programa em Estrutura de um Programa em JavaJava • public class Welcome { • Inicia a definição de classe para a classe Welcome • class palavra reservada (sempre escrita em minúsculo) • Convenção: nome de classes iniciam com uma letra maiúscula e têm uma letra maiúscula para cada palavra do nome de classe (ExemploNomeClasse) - identificador • O identificador é uma série de caracteres que consistem em letras, dígitos, sublinhados ( _ ) e sinais de cifrão ($) que não iniciem com um dígito e não contenham nenhum espaço • Java faz distinção entre letras maiúsculas e minúsculas - erro de sintaxe • Todas as definições de classe Java são armazenadas em arquivos que terminam com a extensão nome de arquivo “.java” 34 Estrutura de um Programa em Estrutura de um Programa em JavaJava • Dica: erro comum para uma classe public • Se o nome do arquivo não for idêntico ao nome da classe (ortografia e letras maiúsculas e minúsculas) • Um arquivo contenha duas ou mais classes public • { • inicia o corpo de cada definição de classe • } • termina cada definição de classe • Observe que as linhas de 4 a 8 estão recuadas - convenção de espaçamento 35 Estrutura de um Programa em Estrutura de um Programa em JavaJava • public static void main (String args [ ] ) • Faz parte de todo aplicativo Java • Responsável pelo início da execução dos aplicativos • ( ) indicam que main é um método • Palavra-chave void indica que esse método realizará uma tarefa (exibindo uma linha de texto nesse programa), mas não retornará nenhuma informação • Dica: recue o corpo inteiro de cada definição de método um “nível” de recuo entre { e } que definem o corpo do método. 36 Método Método MainMain • É um método associado à classe e não a um objeto específico da classe • é definido como um método estático • deve ser um método público para permitir sua execução a partir da máquina virtual Java. • Não tem valor de retorno, mas recebe como argumento um arranjo de strings que corresponde aos parâmetros que podem ser passados para a aplicação a partir da linha de comando. Essas características determinam a assinatura do método. 7 37 Método Método MainMain • Assinatura do método main é: • public static void main(String args []) ou • static public void main(String args []) • O nome do parâmetro (args) poderia ser diferente, mas os demais termos da assinatura devem obedecer ao formato especificado. • Se a máquina virtual Java do interpretador não encontrar um método com essa assinatura para a classe especificada, uma exceção será gerada em tempo de execução: Exception in thread "main" java.lang.NoSuchMethodError: main 38 Método Método MainMain • Argumento do main: • O método main recebe como argumento um parâmetro do tipo arranjo de objetos String. • Cada elemento desse arranjo corresponde a um argumento passado para o interpretador Java na linha de comando que o invocou. • Por exemplo, se a linha de comando é • java Xyz abc 123 def • o método main (String args []) da classe Xyz vai receber, nessa execução, um arranjo de três elementos na variável args com os seguintes conteúdos: • em args[0], o objeto String com conteúdo "abc"; • em args[1], o objeto String com conteúdo "123"; • em args[2], o objeto String com conteúdo "def". 39 Compilando e Executando Compilando e Executando –– aplicativo Javaaplicativo Java • Usando o kit JSDK: • Para compilar: • Abrir uma janela de comando • Mudar para o diretório onde o código fonte está armazenado • Digitar: javac NomeDoPrograma.java • Resultado: se o programa não contiver erros de sintaxe, o comando precedente criará um novo arquivo - NomeDoPrograma.class contendo os bytecodes de Java que representam nosso aplicativo • Para executar: • Digitar no diretório onde se encontram os arquivos .java e .class: java NomeDoPrograma • Este comando dispara a execução do interpretador Java e indica que ele deve carregar o arquivo .class 40 ArgumentosArgumentos // Principal.java // Mostra o uso de argumentos public class Principal { public static void main(String args[]) { int numargs = args.length; String arg1 = args[0]; String arg2 = args[1]; } } C:\>java Principal nome endereco ... args[0] args[1] args[2] ... args.length 41 System.out System.out (objeto de saída padrão)(objeto de saída padrão) • System.out.println(“Welcome to Java Programming!”); • Instrui o computador a realizar uma ação: imprimir a string de caracteres contida entre aspas duplas. • System.out é conhecido como objeto de saída padrão • Permite exibir strings e outros tipos de informações na janela de comando a partir da qual o programa Java é executado. • O método System.out.println exibe (ou imprime) uma linha de texto na janela de comando. • A linha inteira System.out.println , seu argumento entre parênteses e ; , é uma instrução. • Cada instrução deve terminar com ; 42 PalavrasPalavras--chave Javachave Java enumwhilevolatilevoid trytruetransientthrowsthrow thissynchronizedswitchsuperstatic shortreturnpublicprotectedprivate packagenullnewnativelong interfaceintinstanceofimportimplements ifforfloatfinallyfinal falseextendselsedoubledo defaultcontinueclasscharcatch casebytebreakbooleanabstract 8 43 OperadoresOperadores • Aritméticos • + • - • * • / • % (módulo) “resto da divisão” • Igualdade • = = • ! = • Relacionais • > • < • >= • <= • Lógicos • && (E lógico) • | | (Ou lógico) • ! (Não lógico) 44 Precedência e Associatividade de Precedência e Associatividade de OperadoresOperadores de atribuiçãoDa direita para esquerda= + = - = * = / = % = condicionalDa direita para esquerda(teste)? se V: se F Ou lógicoDa esquerda para direita| | E lógicoDa esquerda para direita&& igualdadeDa esquerda para direita= = ! = relacionalDa esquerda para direita< <= > >= aditivoDa esquerda para direita+ - multiplicativoDa esquerda para direita* / % parêntesesDa esquerda para direita( ) TipoAssociatividadeOperadores 45 Operadores de Incremento e Operadores de Incremento e DecrementoDecremento Utiliza o valor atual de b na expressão em que b reside. b--Pós-incremento-- Decrementa b por 1, depois utiliza o novo valor de b na expressão em que b reside. --bPré-incremento-- Utiliza o valor atual de a na expressão em que a reside. a++Pós-incremento++ Incrementa a por 1, depois utiliza o novo valor de a na expressão em que a reside. ++aPré-incremento++ ExplicaçãoExpressão de exemplo Chamado deOperador JAVA_Aula1-GUI.pdf 1 Programação Orientada a ObjetosProgramação Orientada a Objetos em Javaem Java Aula 6 Aula 6 –– Interface Gráfica com Interface Gráfica com Usuário (GUI)Usuário (GUI) Prof. Dr. Francisco Isidro Massetto francisco.isidro@tecschool.com.br 2 GUI GUI -- Interface Interface GráficaGráfica com com UsuárioUsuário • Conjunto consistente de componentes intuitivos de interface com o usuário. • Um componente GUI é um objeto através do qual o usuário interage via mouse ou teclado. • Exemplos de GUI: • Botão, Rótulo, Barra de Menus, Campo de Texto… 3 ContainersContainers Container ScrollPane Window Frame Dialog Panel Applet Contém componentes Contém componentes 4 ComponentesComponentes Pacote SWING: JFrame, JApplet, JDialog 5 IntroduçãoIntrodução • GUI (Graphical User Interface) • Fornece a um programa uma "aparência"e um "comportamento" diferenciados. • As GUIs são construídas a partir de componentes GUI • JLabel: área em que podem ser exibidos textos não-editável ou ícones. • JTextField: área em que o usuário insere dados pelo teclado ou exibe informações. • JButton: área que aciona um evento quando você clica • JCheckBox e JRadioButton: componentes que possuem dois estados: selecionado ou não-selecionado. • JComboBox: lista de itens a partir da qual o usuário pode fazer uma seleção clicando em um item na lista ou digitando na caixa, se permitido. 6 IntroduçãoIntrodução • JList: área em que uma lista de itens é exibida, a partir da qual o usuário pode fazer uma seleção clicando uma vez em qualquer elemento na lista. • JPanel: Container em que os componentes podem ser colocados • Pacote javax.swing.* • Esses componentes GUIs se tornaram padrão a partir da versão 1.2 - Java 2 • Conhecidos como componentes Java puros • Componentes GUIs originais do pacote java.awt estão associados com recursos da interface gráfica com o usuário da plataforma local • Aparência e Interação com os componentes diferente em cada plataforma (Windows, Macintosh…) 2 7 IntroduçãoIntrodução • Componentes swing permitem que o programador especifique uma aparência e um comportamento uniformes em todas as plataformas. • Oferecem um maior nível de portabilidade e flexibilidade que os componentes GUIs originais do pacote java.awt. 8 SuperclassesSuperclasses comunscomuns de de muitosmuitos componentescomponentes SwingSwing java.lang.Objectjava.lang.Object java.awt.Componentjava.awt.Component java.awt.Containerjava.awt.Container javax.swing.JComponentjavax.swing.JComponent Superclasse para a maioria dos componentes swing A maioria dos componentes GUIs estendem esta classe direta ou indiretamente. Métodos paint ( ), repain ( ) e update ( ). Operações comuns par a maioria dos componentes É uma coleção de componentes relacionados. Em aplicativos JFrames e applets , anexamos os componentes ao painel de conteúdo, que é um objeto da classe Container 9 JLabelJLabel • Apresenta textos e/ou imagens não selecionáveis • Construtores: JLabel(String texto) JLabel(Icon imagem) JLabel(String texto, Icon imagem, int alingH) • Alinhamento: LEFT, CENTER, RIGHT • Um Icon é um objeto de qualquer classe que implementa a interface Icon do pacote javax.swing. • Uma dessas classes é ImageIcon, que suporta dois formatos de imagem, GIF e JPEG. 10 JLabelJLabel • Alguns Métodos: • setText(String) • getText() • setIcon(Icon) • getIcon() • “seta” ou “obtém” texto/imagem do JLabel • setHorizontalTextPosition(int) • setVerticalTextPosition(int) • “seta” posicionamento horizontal/vertical do JLabel 11 JLabelJLabel • setToolTipText() • herdado de JComponent - especificar dica de ferramenta quando o usuário posiciona o cursor do mouse 12 JTextFieldJTextField e e JPasswordFieldJPasswordField • JTextField são áreas de uma única linha em que o texto pode ser inserido pelo usuário via teclado ou o texto pode ser simplesmente exibido • Construtores: JTextField() JTextField(int tamanho) JTextField(String frase) JTextField(String frase, int tamanho) 3 13 JTextFieldJTextField e e JPasswordFieldJPasswordField • JPasswordField mostra que um caractere foi digitado quando o usuário insere caracteres, mas oculta os caracteres assumindo que eles representam uma senha. • Construtores: JPasswordField() JPasswordField(int tamanho) JPasswordField(String frase) JPasswordField(String frase, int tamanho) 14 JTextFieldJTextField e e JPasswordFieldJPasswordField • Quando o usuário digita os dados em um desses componentes e pressiona Enter, ocorre um evento de ação • Alguns métodos: • setEditable(): herdado da classe JTextComponent • addActionListener(): recebe como argumento um objeto ActionListener • getSource():determina o componente GUI com o qual o usuário interagiu • getPassword(): devolve a senha como um array do tipo char 15 JTextFieldJTextField e e JPasswordFieldJPasswordField • Tratamento de eventos: • Interface: ActionListener •actionPerformed (ActionEvent event) • ActionEvent: •getActionCommand(): devolve o texto que gerou o evento 16 ModeloModelo de de TratamentoTratamento de de EventosEventos • As GUIs são baseadas em eventos, isto é, geram eventos quando o usuário do programa interage com a GUI. • Algumas interações comuns são: • mover o mouse • clicar no mouse • clicar em um botão • digitar em um campo de texto • selecionar um item de um menu, fechar uma janela, etc. • Quando ocorre uma interação com o usuário, o evento é automaticamente enviado para o programa. 17 ModeloModelo de de TratamentoTratamento de de EventosEventos • Para processar um evento de interface gráfica com o usuário, o programador deve realizar duas tarefas principais: • Registrar um ouvinte de eventos e • Implementar um tratador de eventos. • Um ouvinte de eventos para um evento GUI é um objeto de uma classe que implementa uma ou mais das interfaces ouvintes de eventos dos pacotes java.awt.event e javax.swing.event 18 ModeloModelo de de TratamentoTratamento de de EventosEventos • Um objeto ouvinte de eventos “ouve” tipos específicos de eventos gerados no mesmo objeto ou por outros objetos de um programa • Um tratador de eventos é um método chamado automaticamente em resposta a um tipo de evento em particular 4 19 JButtonJButton • Um botão é um componente no qual o usuário clica para acionar uma ação específica • Construtores: JButton() JButton(String texto, Icon imagem) JButton(String texto) JButton(Icon imagem) • Um botão de comando gera um ActionEvent quando o usuário clica no botão • Herda da classe AbstractButton • JButton pode exibir Icons (Icon rollover - exibido quando o mouse é posicionado sobre o botão) 20 JButtonJButton • Alguns métodos: • setEnabled(boolean) • setRolloverIcon(): herdado da classe AbstractButton para especificar a imagem exibida no botão quando o usuário posiciona o mouse sobre o botão • ActionEvent - interface ActionListener • getActionCommand() • actionPerformed(ActionEvent event) 21 JToggleButtonJToggleButton, , JCheckBoxJCheckBox e e JRadioButtonJRadioButton • Componentes Swing contêm 3 tipos de botões de estado: • JToggleButton: são frequentemente utilizados com barras de ferramentas • JCheckBox e JRadioButton são subclasses de JToggleButton 22 JCheckBoxJCheckBox • Botão de seleção para coleta de informações • Permite a seleção de vários componentes deste tipo • Construtores: JCheckBox() JCheckBox(String texto) JCheckBox(Icon imagem) JCheckBox(String texto, Icon imagem) 23 JCheckBoxJCheckBox • Quando o usuário clica em um JCheckBox é gerado um ItemEvent, que pode ser tratado por um ItemListener. • ItemListener define o método itemStateChanged que é chamado quando o usuário clica na JCheckBox • O método e.getSource() determina qual JCheckBox foi clicada • O método e.getStateChange() determina o estado do botão • Alguns métodos: • addItemListener() 24 FontsFonts • A classe Font define fonte para o texto. • Construtor: Font(String nome, int estilo, int tamanho) • Font.PLAIN • Font.BOLD • Font.ITALIC • Font.getAllFonts()- retorna um array de todas as fontes do sistema 5 25 JRadioButtonJRadioButton • Botões de opção • Possuem dois estados: • Selecionado • Não-selecionado • Aparecem como um grupo em que apenas um botão de opção pode ser selecionado por vez • Utilizados para representar um conjunto de opções mutuamente exclusivas • ButtonGroup: permite o relacionamento lógico entre os botões de opção • add() 26 JRadioButtonJRadioButton • Construtores: JRadioButton() JRadioButton(String texto) JRadioButton(Icon imagem) JRadioButton(Icon imagem, boolean sel) JRadioButton(String texto, Icon imagem) JRadioButton(String texto, Icon imagem, boolean sel) JRadioButton(String texto, boolean sel) 27 JRadioButtonJRadioButton • Tratamento de eventos: • ItemEvent • getStateChange(): determina o estado do botão • Interface ItemListener • itemStateChanged() 28 JComboBoxJComboBox • Caixa de Combinação: fornece uma lista de itens da qual o usuário pode fazer uma seleção • Construtores: JComboBox() JComboBox(Object[] itens) JComboBox(Vector itens) • Tratamento de eventos: • ItemEvent • getStateChange (): determina se a caixa está ou não marcada • Interface ItemListener • itemStateChanged () 29 JComboBoxJComboBox • Alguns Métodos: • setMaximumRowCount(): estabelecer o número máximo de elementos que são exibidos • getSelectedIndex(): determina o número do índice do item selecionado 30 JListJList • Exibe uma série de itens da qual o usuário pode selecionar um ou mais itens. • Não fornecem uma barra de rolagem se houver mais itens na lista que o número de linhas visíveis- JScrollPane • Suporta: • Listas de uma única seleção e • Listas de seleção múltipla • Construtores: JList() JList(Object[] itens) JList(Vector itens) 6 31 JListJList • Alguns métodos: • setVisibleRowCount(): número de itens que são visíveis na lista • setSelectionMode(): especificar o modo de seleção para a lista • addListSelectionListener(): adiciona um "ouvite" para tratamento de eventos • valueChanged(): executado quando o usuário faz uma seleção • getSelectionIndex (): retorna o índice do item selecionado • Tratamento de eventos: • Interface ListSelectionListener - valueChanged () 32 JPanelJPanel • Um container genérico e visual. • As GUIs complexas exigem que cada componente seja colocado em uma posição exata • Consistem em múltiplos painéis com os componentes de cada painel organizados em um layout específico • Classe JPanel- subclasse de JComponent • Cada JPanel é um Container. Assim, JPanels podem ter componentes, incluindo outros painéis, adicionados a eles. 33 JPanelJPanel • O construtor padrão cria um objeto JPanel com FlowLayout • Diferentes layouts podem ser especificados • Durante a construção ou • Através do método setLayout(): • FlowLayout • BorderLayout • GridLayout. 34 GerenciadoresGerenciadores de Layoutsde Layouts • São úteis para organizar os componentes GUIs em um container para fins de apresentação • FlowLayout • Forma menos rígida de organização • Coloca os componentes sequencialmente (da esquerda para a direita) na ordem em que foram adicionados. • Também é possível especificar a ordem dos compoentes utilizando o método add de Container que recebe um Component e um índice de posição inteiro como argumentos • Quando os componentes alcança a borda do container, os componentes continuam na próxima linha • Alinhamentos: LEFT, RIGHT e CENTER • setAligment () 35 GerenciadoresGerenciadores de Layoutsde Layouts • BorderLayout • Padrão para painéis de conteúdo de JFrames e JApplets. • Organiza os componentes em cinco áreas: •NORTH •SOUTH •EAST •WEST •CENTER • Até cinco componentes podem ser adicionados diretamente a um BorderLayout - um para cada região 36 GerenciadoresGerenciadores de Layoutsde Layouts • GridLayout • Organiza os componentes em linhas e colunas. • Cada componente em um GridLayout tem a mesma largura e altura • Os componentes são adicionados a um GridLayout que começa na célula da parte superior esquerda da grade e vai da esquerda para a direita até a linha estar cheia • Reorganizar um container cujo Layout foi alterado • Método validate() recalcula o layout do Container com base no gerenciador de Layout atual para o Container e o conjunto atual de componentes GUIs exibidos. JAVA_Aula2.pdf 1 Prof. Dr. Francisco Isidro Massetto francisco.isidro@techschool.com.br Programação Orientada a ObjetosProgramação Orientada a Objetos em Javaem Java Aula 2 Aula 2 –– Fundamentos da Fundamentos da Linguagem JavaLinguagem Java 22 • Booleanos • Caracteres • Inteiros • Ponto flutuante Obs.: Além dos tipos de dados primitivos as variáveis em Java podem ser instâncias de qualquer classe definida. TiposTipos de Dados de Dados PrimitivosPrimitivos 33 BooleanosBooleanos • Variáveis do tipo boolean podem assumir os valores true ou false. • valor default para um atributo booleano de uma classe, se não especificado, é false. • Variáveis booleanas e variáveis inteiras, ao contrário do que ocorre em C e C++, não são compatíveis em Java. • Assim, não faz sentido atribuir uma variável booleana a uma variável inteira ou usar um valor inteiro como uma condição de um teste. • Exemplo de declaração e uso: boolean deuCerto = true; 44 CaracteresCaracteres • Uma variável do tipo char contém um caracter Unicode, ocupando 16 bits de armazenamento em memória. • um valor literal do tipo caracter é representado entre aspas simples (apóstrofes), como em: char umCaracter = 'A'; • Valores literais de caracteres podem também ser representados por seqüências de escape, como em '\n' (nova linha) 55 InteirosInteiros • Valores numéricos inteiros em Java podem ser representados por variáveis do tipo byte, short, int ou long. • Todos os tipos contém valores inteiros com sinal. • O valor default para atributos desses tipos é 0. • byte: ocupam 8 bits de armazenamento interno (-128 a +127). • short: ocupam 16 bits de armazenamento interno (-32.768 a +32.767). • int: ocupam 32 bits de armazenamento interno (-2.147.483.648 a +2.147.483.647). • long: ocupam 64 bits de armazenamento interno ( -9.223.372.036.854.775.808 a +9.223.372.036.854.775.807). • Constantes literais do tipo long podem ser identificadas em código Java através do sufixo l ou L, como em: long valorQuePodeCrescer = 100L; • Ao contrário do que ocorre em C, não há valores inteiros sem sinal (unsigned) em Java. Combinações da forma long int ou short int são inválidas em Java. 66 Ponto FlutuantePonto Flutuante • Valores reais, com representação em ponto flutuante, podem ser representados por variáveis de tipo float ou double. • Representação interna desses valores segue o padrão de representação IEEE 754 • O valor default para atributos desses tipos é 0.0. • float: ocupam 32 bits de armazenamento interno (±3.40282347E+38 a ±1.40239846E-45) - com nove dígitos significativos de precisão. • double: ocupam 64 bits de armazenamento interno (±4.94065645841246544E- 324 a ±1.79769313486231570E+308) - com 18 dígitos significativos de precisão. • Constantes literais do tipo float podem ser identificadas no código Java pelo sufixo f ou F; do tipo double, pelo sufixo d ou D. 2 77 Conversões de Tipos de DadosConversões de Tipos de Dados • String para int? • int para String? • float para int? • float para String? • double para int? • String para double?.. java.lang.Integer java.lang.Float java.lang.Double java.lang.String 88 Conversões de Tipos de DadosConversões de Tipos de Dados • String para double • Double.parseDouble(String) • String para int • Integer.parseInt(String) • String para Float • Float.parseFloat(String) • int, float, double para String • toString() ou toString(tipo) • String.valueOf(int ou float ou double) 99 Estruturas de ControleEstruturas de Controle • Antes de escrever um programa • Entendimento completo do problema • Abordagem cuidadosamente planejada para resolvê- lo • Entender os tipos de blocos de construção disponíveis • Empregar princípios comprovados de construção de programas 1010 Estruturas de ControleEstruturas de Controle • As instruções em um programa: • São executadas na ordem em que são escritas • Execução sequencial • Transferência de controle (Java) • Estrutura de seqüência • Estrutura de seleção (3 tipos) • Estrutura de repetição (3 tipos) 1111 Estruturas de ControleEstruturas de Controle • Estruturas de Seleção • if (estrutura de seleção única) • Executa uma ação indicada somente quando a condição for verdadeira • Exemplo: suponha que a nota de aprovação em um exame seja 60 (em 100). if ( nota >= 60 ) System.out.println ( “Aprovado”); nota>=60 Imprimir “Aprovado”verdadeira falsa 1212 Estruturas de ControleEstruturas de Controle • Estruturas de seleção (continuação) • if/else (estrutura de seleção dupla) • Especifica ações separadas que serão executadas quando a condição for verdadeira e quando for falsa. • Considere o exemplo anterior: if ( nota >= 60 ) System.out.println ( “Aprovado”); else System.out.println ( “Reprovado”); nota>=60 Imprimir “Aprovado” verdadeirafalsa Imprimir “Reprovado” 3 1313 Estruturas de ControleEstruturas de Controle • Exemplo estrutura if/else aninhadas: imprimirá A para as notas >= 90, B para as notas no intervalo de 80 a 89, C para as notas no intervalo de 70 a 79, D para as notas no intervalo de 60 a 69 e F para as demais notas if ( nota >= 90 ) System.out.println ( “A”); else if ( nota >= 80 ) System.out.println ( “B”); else if ( nota >= 70 ) System.out.println ( “C”); else if ( nota >= 60 ) System.out.println ( “D”); else System.out.println ( “F”); Dica: se existirem vários níveis de recuo, cada nível deve ser recuado pela mesma quantidade adicional de espaço. 1414 Estruturas de ControleEstruturas de Controle • Exemplo: - o corpo da primeira estrutura if é uma estrutura if/else. - testa se x > 5, se for, a execução continua testando se y > 5. Se a segunda condição for verdadeira, exibe x e y são > 5 - entretanto se a segunda condição for falsa, o string x é <= 5 é exibido, embora saibamos que x >5. - para forçar a estrutura anhinhada anterior a ser executada como pretendido a estrutura deve ser escrita como no exemplo acima. - as { } indicam ao compilador que a segunda estrutura if está no corpo da primeira estrtutura if e que o else corresponde à primeira estrutura if. if ( x > 5 ) if ( y > 5 ) System.out.println(“x e y são > 5”); else System.out.println(“x é <= 5”); if ( x > 5 ) { if ( y > 5 ) System.out.println(“x e y são > 5”); } else System.out.println(“x é <= 5”); 1515 Estruturas de ControleEstruturas de Controle • Para incluir mais instruções no corpo de um if, inclua as instruções entre { e } - bloco if ( nota >= 60 ) System.out.println ( “Aprovado”); else { System.out.println ( “Reprovado”); System.out.println ( “Você deve repetir este curso”); } - observe que as chaves cercam as duas instruções na cláusula else. Essas chaves são importantes, pois sem elas a instrução System.out.println ( “Você deve repetir este curso”); estaria fora do corpo da parte else da estrutura if e seria executada independentemente da nota ser ou não menor que 60. 1616 Estruturas de ControleEstruturas de Controle • switch (estrutura de seleção múltipla) • Trata uma série de condições nas quais uma variável ou expressão particular é comparada com valores que ela pode asssumir e diferentes ações são tomadas • break depois das instruções para cada case: faz com que o controle saia imediatamente da estrutura switch • Só pode comparar com expressões constantes integrais case a ação (ões) default case z ... ação (ões) do caso a break ação (ões) do caso z break verdadeiro verdadeiro falso falso 1717 Estruturas de ControleEstruturas de Controle • Estruturas de repetição • while • Especifica que uma ação deve ser repetida enquanto alguma condição permanecer verdadeira while ( condição) instrução • Exemplo: segmento de programa projetado para encontrar a primeira potência de 2 maior que 1000 int produto = 2; while (produto <= 1000) produto = 2 * produto; produto<=1000 produto = 2 * produtoverdadeira falsa 1818 Estruturas de ControleEstruturas de Controle • do/while • Testa a condição de continuação do laço no final do laço • O corpo do laço será executado pelo menos uma vez do { instrução } while (condição); condição falso ação(ões) verdadeiro 4 1919 Estruturas de ControleEstruturas de Controle • for • trata de todos os detalhes da repetição controlada por contador e exige o seguinte: • o nome de uma variável de controle; • o valor inicial da variável de controle; • o incremento (ou decremento) pelo qual a variável de controle é modificada a cada passagem pelo laço (cada iteração do laço); e • A condição que teste o valor final da variável de controle. for (expressão1; expressão2; expressão3) instrução • Expressão1: inicializa a variável de controle do laço; • Expressão2: é a condição de continuação do laço; • Expressão3: incrementa a variável de controle, até que a condição de continuação do laço se torne falsa 2020 Estruturas de ControleEstruturas de Controle • Componentes de um cabeçalho de for típico for ( int contador = 1; contador <= 10; contador++ ) Incremento da variável de controleValor inicial da variável de controle Valor final da variável de controleNome da variável de controle Condição de continuação do laço contador<=10 contador++ verdadeiro falso int contador = 1 corpo do laço (que pode conter muitas instruções) 2121 Estruturas de ControleEstruturas de Controle • Exemplos com a estrutura for: • Variável de controle de 1 a 100 em incrementos de 1 for ( int i = 1; i <= 100; i++ ) • Variável de controle de 100 a 1 em incrementos de -1 for ( int i = 100; i >= 1; i-- ) • Variável de controle de 7 a 77 em incrementos de 7 for ( int i = 7; i <= 77; i += 7 ) • Variável de controle de 20 a 2 em incrementos de -2 for ( int i = 20; i >= 2; i -= 2 ) • Variável de controle assumir a seguinte seqüência de valores: 2, 5, 8, 11, 14, 17, 20. for ( int j = 2; j <= 20; j += 3 ) • Variável de controle assumir a seguinte seqüência de valores: 99, 88, 77, 66, 55, 44, 33, 22, 11. for ( int j = 99; j > 0; j -= 11 ) 2222 Estruturas de ControleEstruturas de Controle • break • Quando executada em uma das instruções de repetição (while, for, do/while ou switch), causa saída imediata dessa estrutura • A execução continua com a primeira instrução depois da estrutura • continue • Quando executada em uma das instruções de repetição (while, for, do/while), pula qualquer instrução restante no corpo da estrutura e prossegue com o teste para a próxima iteração do laço • Nas estruturas while e do/while, o programa avalia o teste de continuação do laço imediatamente depois da instrução continue ser executada • Em estruturas for, a expressão de incremento é executada e depois o programa avalia o teste de continuação do laço 2323 System.in (objeto de entrada System.in (objeto de entrada padrão)padrão) import java.io.*; public class Leitura { public static void main (String args[]){ try { InputStreamReader in = new InputStreamReader (System.in); System.out.println("Digite algo e tecle enter"); BufferedReader br = new BufferedReader(in); String s = br.readLine(); System.out.println(s); } catch(Exception e) {} } } Leitura.java 2424 Classe Classe JOptionPaneJOptionPane • Pacote javax.swing. • Contém classes que ajudam os programadores de Java definir interfaces gráficas com o usuário para seu aplicativo • JOptionPane • showMessageDialog(null, “string a exibir”,”string que deveria aparecer na barra de título”, tipo de diálogo de mensagem) • JOptionPane.PLAIN_MESSAGE • JOptionPane.ERROR_MESSAGE • JOptionPane.INFORMATION_MESSAGE • JOptionPane.WARNING_MESSAGE • JOptionPane.QUESTION_MESSAGE 5 2525 Classe Classe JOptionPaneJOptionPane • showInputDialog(“string indicando o que o usuário deve digitar no campo texto”) System.exit(0): termina adequadamente um programa que exibe uma interface gráfica JAVA_Aula3.pdf 1 Prof. Dr. Francisco Isidro Massetto francisco.isidro@techschool.com.br Programação Orientada a Objetos Programação Orientada a Objetos em Javaem Java Aula 3 Aula 3 –– Classes e ObjetosClasses e Objetos 2 Classes e ObjetosClasses e Objetos Classe Pessoa objeto Maria objeto Pedro 3 Classe A T R I B U T O S M É T O D O S Pessoa nome endereco telefone idade altura registrar() matricular() estudar() cadastrar() pagar() Maria Rua A, 23 3226-5689 15 1.6 Pedro Rua B, 45 3205-2365 21 1.8 Objetos Classes e ObjetosClasses e Objetos 4 Classes e ObjetosClasses e Objetos Palio JWO-4567 Parati KLJ-0978 Celta JDK-6543 OBJETOS (Instâncias da classe Automóvel) Automóvel Marca Placa CLASSE 5 Classes em JavaClasses em Java • Um dos principais resultados das fases de análise e projeto OO: • Definição de um modelo conceitual para o domínio da aplicação, contemplando as classes relevantes e suas associações. • O uso de uma linguagem de modelagem, tal como o diagrama de classes UML, permite expressar esse resultado de maneira organizada e padronizada. • Uma classe é um gabarito para a definição de objetos. • propriedades (atributos) e • comportamentos (métodos) 6 Definição de Classes em JavaDefinição de Classes em Java • Diagrama de Classes: a representação de classes contempla três tipos básicos de informação: Automovel - nomeProprietario: String - modelo: String - placa: String - ano: int + setNomeProprietario (nome: String): void + setPlaca (nPlaca: String): void + imprimir (): void Nome da classe: Um identificador para a classe que permite referenciá-la posteriormente (por exemplo, no momento da criação de um objeto). Atributos: nome: um identificador para o atributo. tipo: o tipo do atributo (inteiro, real, caracter, outra classe, etc.) valor_default: opcionalmente, pode-se especificar um valor inicial para o atributo. 2 7 Definição de Classes em JavaDefinição de Classes em Java • Métodos: • nome: um identificador para o método. • tipo: quando o método tem um valor de retorno, o tipo desse valor. • lista de argumentos: quando o método recebe parâmetros para sua execução, o tipo e um identificador para cada parâmetro. • Modificadores de acesso a membros • Pode-se especificar o quão acessível é um atributo ou método de um objeto a partir de outros objetos. • Os valores possíveis são: + public:visibilidade externa total # protected:visibilidade externa limitada. - private:nenhuma visibilidade externa 8 ExemploExemplo: Classe : Classe AutomovelAutomovel //declaração de pacotes //definição da classe Automovel public class Automovel { //declaração dos atributos da classe private String nomeProprietario; private String modelo; private String placa; private int ano; //método construtor public Automovel (String nomeProprietario, String modelo, String placa, int ano) { this.nomeProprietario = nomeProprietario; this.modelo = modelo; this.placa = placa; this.ano = ano; } 9 ExemploExemplo: Classe : Classe AutomovelAutomovel //declaração dos demais métodos da classe public void imprimir () { System.out.println(nomeProprietario+ " possui um(a) "+modelo+ " com placa "+placa+ " e ano "+ano); } public void setNomeProprietario (String nome) { this.nomeProprietario = nome; } public void setPlaca (String nPlaca) { this.placa = nPlaca; } 10 ExemploExemplo: Classe : Classe AutomovelAutomovel //definição do método main public static void main (String args []) { //instanciando um objeto da classe Automóvel Automovel a = new Automovel ("Eduardo", "Palio", "JWO2125", 2002); //troca de mensagens (chamada ao método imprimir()) a.imprimir(); System.out.println ("***Transferencia de Proprietario***"); a.setNomeProprietario("Rosa"); a.imprimir(); Automovel b = new Automovel ("Rodrigo", "Parati", "JSX6481", 1999); b.imprimir(); System.out.println ("***Mudanca de Placa***"); b.setPlaca("SDK2581"); b.imprimir(); }//fim do método main }//fim da classe Automovel 11 Definição de Classes em JavaDefinição de Classes em Java • Em Java, classes são definidas através do uso da palavra-chave class. • Sintaxe para definir uma classe: [modificador] class NomeDaClasse { // corpo da classe... } • Após a palavra-chave class, segue-se o nome da classe, que deve ser um identificador válido para a linguagem. • [modificador] é opcional; se presente, pode ser uma combinação de public e abstract ou final. • O modificador abstract indica que nenhum objeto dessa classe pode ser instanciado. • O modificador final indica que a classe não pode ser uma superclasse (uma classe não pode herdar de uma classe final) 12 Definição de Classes em JavaDefinição de Classes em Java • A definição da classe propriamente dita está entre { e }, que delimitam blocos na linguagem Java. Usualmente, o corpo de uma classe obedece à seguinte seqüência de definição: • As variáveis de classe, iniciando pelas public, seguido pelas protected, e finalmente pelas private. • Os atributos (ou variáveis de instância) dos objetos dessa classe, seguindo a mesma ordenação definida para as variáveis de classe. • Os construtores de objetos dessa classe. • Os métodos da classe, geralmente agrupados por funcionalidade. • Toda classe pode também ter um método main associado • Esse método como já mencionado é utilizado pelo interpretador Java para dar início à execução de uma aplicação. • Propriedades de uma classe podem ser obtidas através das funcionalidades oferecidas na classe java.lang.Class 3 13 Modificadores de acesso a Modificadores de acesso a membros em Javamembros em Java • O modificadores de acesso controlam o acesso às variáveis de instância e aos métodos de uma classe • Quando nenhum membro modificador de acesso é oferecido para um método ou variável quando estão definidos em uma classe – acesso de pacote • Se o programa consiste em uma definição de classe, isso não tem nenhum efeito específico no programa • Se o programa utilizar várias classes do mesmo pacote (um grupo de classes relacionadas), essas classes podem acessar todos os métodos de acesso e dados com acesso de pacote umas das outras diretamente, através de uma referência a um objeto 14 Modificadores de acesso a Modificadores de acesso a membros em Javamembros em Java • public • Amplia a visibilidade padrão (está restrita a todos os membros que fazem parte de um mesmo pacote) deixando-a sem restrições. • Uma classe definida como pública pode ser utilizada por qualquer objeto de qualquer pacote. • Um arquivo fonte (.java) pode ter no máximo uma classe pública, cujo nome deve ser o mesmo do arquivo. • As demais classes num arquivo fonte, não públicas, são consideradas classes de suporte para a classe pública e têm a visibilidade padrão. 15 Modificadores de acesso a Modificadores de acesso a membros em Javamembros em Java • protected • Nível intermediário de proteção entre o acesso public e private • Restringe a visibilidade do membro modificado, atributo ou método, apenas à própria classe, àquelas derivada desta (herança) e também a outras classes no mesmo pacote (acesso de pacote). 16 Modificadores de acesso a Modificadores de acesso a membros em Javamembros em Java • private • Restringe o acesso a membros de uma classe (atributo ou método) a objetos da própria classe que contém sua definição - encapsulamento. • Tornar private as variáveis de instância de uma classe e public os métodos da classe facilita a depuração, uma vez que os problemas com as manipulações dos dados estão localizados nos métodos da classe 17 Variáveis de ClasseVariáveis de Classe • Cada objeto de uma classe tem sua própria cópia de todas as variáveis de instância da classe • Em certos casos, apenas uma cópia de uma variável particular deve ser compartilhada por todos os objetos de uma classe • Uma variável de classe tem sua declaração precedida pela palavra-chave static. 18 Variáveis de ClasseVariáveis de Classe • Várias constantes são definidas em Java como public static final • a classe Math (java.lang) de Java, por exemplo, define as constantes E (2.71828...) e PI (3.14159...). Para ter acesso a esses valores, basta precedê-los com o nome da classe e um ponto, como em double pi2 = Math.PI/2; • Outro exemplo de variável public static final é a variável out da classe System. Essa variável, System.out, está associada a um objeto que representa a saída padrão. 4 19 Atributos ou Variáveis de Atributos ou Variáveis de InstânciaInstância • Sintaxe para definir um atributo em uma classe é: [modificador] tipo nome [ = default]; onde • modificador (opcional), uma combinação de • public, protected ou private; • final; • tipo:deve ser um dos tipos primitivos da linguagem Java ou o nome de uma classe. • nome: deve ser um identificador válido. • default: (opcional) é a especificação de um valor inicial para a variável. • O modificador final especifica que uma variável de instância não é modificável (constante). 20 Métodos em JavaMétodos em Java • A definição de métodos reflete de forma quase direta a informação que estaria presente em um diagrama de classes UML, a não ser por uma diferença vital: o corpo do método. • Dica: uma boa prática de programação é manter a funcionalidade de um método simples, desempenhando uma única tarefa. • O nome do método deve refletir de modo adequado a tarefa realizada. • Se a funcionalidade do método for simples, será fácil encontrar um nome adequado para o método. • Os métodos são essencialmente procedimentos que podem: • Manipular atributos de objetos para os quais o método foi definido. • Definir e manipular variáveis locais • Receber parâmetros por valor através da lista de argumentos 21 Métodos em JavaMétodos em Java • Sintaxe para definir um método em uma classe é: [modificador] tipo nome(argumentos) { corpo do método } onde: • modificador (opcional), uma combinação de: • public, protected ou private; • abstract ou final; e • static. • tipo: indicador do valor de retorno, sendo void se o método não tiver um valor de retorno; • nome: deve ser um identificador válido • argumentos: são representados por uma lista de parâmetros separados por vírgulas, onde cada parâmetro obedece à forma tipo nome. 22 Métodos em JavaMétodos em Java • O modificador abstract define apenas a assinatura do método que deverá ser implementado na subclasse • O modificador final associado ao método indica que o mesmo não pode ser sobrescrito em uma subclasse • O modificador static indica o uso do método independentemente de qualquer objeto de uma classe • Sintaxe de chamada ou acesso a métodos: objeto.nomeDoMetodo(argumentos) classe.nomeDoMetodo(argumentos)– para métodos static 23 Métodos em JavaMétodos em Java • Usualmente, métodos definidos em uma classe são aplicados a objetos daquela classe. • Há situações nas quais um método pode fazer uso dos recursos de uma classe para realizar sua tarefa sem necessariamente ter de estar associado a um objeto individualmente. • Java define os métodos da classe, cuja declaração deve conter o modificador static. • Um método estático pode ser aplicado à classe e não necessariamente a um objeto. 24 Métodos em JavaMétodos em Java • Exemplos de alguns métodos estáticos em Java incluem os métodos definidos nas classes: • java.lang.Character • java.lang.Integer • java.lang.Double • java.lang.Math • Exemplo: para atribuir a raiz quadrada de 4 a uma variável raiz: double raiz = Math.sqrt(4.0); 5 25 Métodos Métodos getget e sete set • As variáveis de instância privadas podem ser manipuladas somente por métodos da classe • Métodos set (métodos modificadores) • Atribuir valores a variáveis de instância private • Métodos get (métodos de acesso) • Obter valores de variáveis de instância private • Embora os métodos get e set possam fornecer acesso a dados private, o acesso é restringido pela implementação dos métodos feita pelo programador 26 Métodos Métodos getget e sete set • Os métodos que configuram valores de dados private devem verificar se os novos valores pretendidos são adequados. • Se eles não forem, os métodos set devem colocar variáveis de instância private em um estado consistente apropriado • Exemplos: public String getNome () { return nome; } public void setNome (String novoNome) { this.nome = novoNome; } 27 Objetos em JavaObjetos em Java • O que é um objeto? • Sob o ponto de vista da programação, um objeto não é muito diferente de uma variável no paradigma de programação convencional. • Exemplo: quando se define uma variável do tipo int em C ou em Java, essa variável tem: • um espaço em memória para registrar o seu estado atual (um valor); • um conjunto de operações associadas que podem ser aplicadas a ela, através dos operadores definidos na linguagem que podem ser aplicados a valores inteiros (soma, subtração, inversão de sinal, multiplicação, divisão inteira, resto da divisão inteira, incremento, decremento). 28 Objetos em JavaObjetos em Java • Da mesma forma, quando se cria um objeto, esse objeto adquire: • um espaço em memória para armazenar seu estado (os valores de seu conjunto de atributos, definidos pela classe) e • um conjunto de operações que podem ser aplicadas ao objeto (o conjunto de métodos definidos pela classe). • É através de objetos que (praticamente) todo o processamento ocorre em aplicações desenvolvidas com linguagens de programação OO. • Objetos são instâncias de classes: • Precisam ser criados a fim de que, através de sua manipulação, possam realizar seu trabalho. • Após a conclusão de suas atividades, objetos podem ser removidos. • Arranjos de tipos primitivos ou de objetos são criados e manipulados de forma análoga a objetos. 29 Como criar um objeto em JavaComo criar um objeto em Java • A criação do objeto é feita através da aplicação do operador new (uma vez que a classe a partir da qual deseja- se criar o objeto exista): NomeDaClasse umaRef = new NomeDaClasse(argumentos); • essa expressão invoca o construtor da classe • umaRef é uma variável que guarda uma referência para um objeto do tipo NomeDaClasse. • new indica que um novo objeto está sendo criado • argumentos especificam os valores utilizados pelo construtor da classe para inicializar o objeto 30 Como criar um objeto em JavaComo criar um objeto em Java • Objetos nunca são manipulados diretamente, mas sempre através de uma variável que contém uma referência para o objeto. • Internamente, uma referência conterá: • O endereço para a área de memória que contém o objeto, mas isso é irrelevante sob o ponto de vista do programador. 6 31 Manipulação de objetosManipulação de objetos • Quando se declara uma variável cujo tipo é o nome de uma classe, como em: String nome; • não está se criando um objeto dessa classe, mas simplesmente uma referência para um objeto da classe String, a qual inicialmente não faz referência a nenhum objeto válido: • Quando um objeto dessa classe é criado, obtém-se uma referência válida, que é armazenada na variável cujo tipo é o nome da classe do objeto. nome ? 32 Manipulação de objetosManipulação de objetos • Quando se cria uma string como em nome = new String("POO/Java"); • nome é uma variável que armazena uma referência para um objeto específico da classe String - o objeto cujo conteúdo é "POO/Java": • É importante ressaltar que a variável nome mantém apenas a referência para o objeto e não o objeto em si. nome (Outras informações…) POO/Javareferência objeto 33 Manipulação de objetosManipulação de objetos • Assim, uma atribuição como String outroNome = nome; • não cria outro objeto, mas simplesmente uma outra referência para o mesmo objeto: • O único modo de aplicar os métodos a um objeto é através de uma referência ao objeto. nome (Outras informações…) POO/Javareferência objeto outronome 34 ConstrutoresConstrutores • Um construtor é um método especial, definido para cada classe. • Determina as ações associadas à inicialização de cada objeto criado. • É invocado toda vez que o programa instancia um objeto dessa classe. • A assinatura de um construtor diferencia-se das assinaturas dos outros métodos por não ter nenhum tipo de retorno (nem mesmo void). • O nome do construtor deve ser o próprio nome da classe. • O construtor pode receber argumentos, como qualquer método. • Toda classe tem pelo menos um construtor sempre definido. 35 ConstrutoresConstrutores • Se nenhum construtor for explicitamente definido pelo programador da classe, um construtor default (0 para tipos numéricos primitivos, false para boolean e null para referências), que não recebe argumentos, é criado pelo compilador Java. • Se o programador da classe criar pelo menos um método construtor, o construtor default não será criado automaticamente - se ele o desejar, deverá criar um construtor sem argumentos explicitamente. • Usando o mecanismo de sobrecarga (lista de parâmetro diferentes), mais de um construtor pode ser definido para oferecer diversas maneiras de inicializar os objetos dessa classe. volta 36 Referência Referência thisthis • É uma referência a um objeto • Quando um método de uma classe faz referência a outro membro dessa classe para um objeto específico dessa classe, como Java assegura que o objeto adequado recebe a referência? • Cada objeto tem uma referência a ele próprio - chamada de referência this • Utiliza-se a referência this implicitamente para fazer referências às variáveis de instância e aos métodos de um objeto 7 37 Referência Referência thisthis • Exemplos de uso de this • A palavra- chave this é utilizada principalmente em dois contextos: 1. Diferenciar atributos de objetos, de parâmetros ou variáveis locais de mesmo nome; 2. Acessar o método construtor a partir de outros construtores. • Utilizar this explicitamente pode aumentar a clareza do programa em alguns contextos em que this é opcional 38 Referência Referência thisthis • Esse exemplo ilustra esses dois usos: public class EsteExemplo { int x; int y; // exemplo do primeiro caso: public EsteExemplo(int x, int y) { this.x = x; this.y = y; } // exemplo do segundo caso: public EsteExemplo () { this(1, 1); } } 39 Remoção de objetosRemoção de objetos • Em linguagens de programação OO, a criação de objetos é um processo que determina a ocupação dinâmica de muitos pequenos segmentos de memória. • Se esse espaço não fosse devolvido para reutilização pelo sistema, a dimensão de aplicações desenvolvidas com linguagens de programação OO estaria muito limitada. • As duas abordagens possíveis são: • Dedicar essa tarefa ao programador ou • Deixar que o sistema seja o responsável por esta retomada de recursos. 40 Remoção de objetosRemoção de objetos • O problema da primeira abordagem é que o programador pode não considerar todas as possibilidades • Na segunda abordagem, recursos adicionais do sistema são necessários para a manutenção da informação necessária para saber quando um recurso pode ser retomado e para a execução do processo que retoma os recursos. • C++ é uma linguagem que adota a primeira estratégia. • A remoção de objetos é efetivada explicitamente pelo programador (através do operador delete), que pode também especificar o procedimento que deve ser executado para a liberação de outros recursos alocados pelo objeto através de um método destructor. 41 Remoção de objetosRemoção de objetos • Java adota a abordagem de ter um coletor de lixo automático • verifica que objetos não possuem nenhuma referência válida, retomando o espaço dispensado para cada um desses objetos. • O programador não precisa se preocupar com a remoção explícita de objetos. • Pode ser necessário liberar outros recursos que tenham sido alocados para o objeto. • Cada classe em Java pode ter um método finalizador que retorna recursos ao sistema • É garantido que o método finalizador para um objeto é chamado para realizar uma limpeza de terminação no objeto imediatamente antes do coletor de lixo reivindicar a memória para o objeto 42 Remoção de objetosRemoção de objetos • O método finalizador de uma classe sempre tem o nome finalize(), não recebe parâmetros e não retorna nenhum valor • Esse método é definido na classe Object como protected. Portanto, se for necessário redefiní-lo o programador deve também declará-lo como protected. • Chamada explícita ao coletor de lixo • Método gc() da classe System • Lembre-se de que não há garantia de que o coletor de lixo será executado quando System.gc() é invocado e nem há garantia de que ele colete objetos em uma ordem específica. 8 43 ExercíciosExercícios • Implementar um TAD Pessoa como classe (Pessoa.java e PessoaTeste.java) Pessoa nome: String sobrenome: String idade: int sexo: char imprimir(): void Assinatura do método public void imprimir() 44 ExercíciosExercícios • Implementar um TAD Empregado como classe (Empregado.java e EmpregadoTeste.java) Empregado nome: String salario: double imprimir(): void aumentarSalario(...):void Assinaturas dos métodos public void imprimir() public void aumentarSalario (double percentual) 45 ExercíciosExercícios Implementar um TAD Time como classe (Time.java e TimeTeste.java) Time hora: int minuto: int segundo: int setTime (...): void exibirHoraUniversal(): String exibirHoraPadrao(): String Assinaturas dos métodos public void setTime (int h, int m, int s) public String exibirHoraUniversal(): String public String exibirHoraPadrao(): String Hora Universal 00:00:00 – 13:30:07 Hora Padrão 00:00:00 e um indicador de AM PM 1:27:06 PM JAVA_Aula4.pdf 1 Prof. Dr. Francisco Isidro Massetto francisco.isidro@techschool.com.br Programação Orientada a Objetos Programação Orientada a Objetos em Javaem Java Aula 4 Aula 4 –– Herança e PolimorfismoHerança e Polimorfismo 2 HerançaHerança Pessoa Estudante Professor Funcionário Diretor é um (a) 3 HerançaHerança Pessoa nome endereco telefone Estudante ra curso anoGraduacao Professor titulo instituicao salario 4 HerançaHerança Proprietário Placa Ano Modelo Marca VeiculoVeiculo 5 HerançaHerança emem JavaJava • O que torna a Orientação a Objetos única é o conceito de herança. • Herança é um mecanismo que permite que características comuns a diversas classes sejam fatoradas de uma classe base, ou superclasse. • A herança é uma forma de reutilização de software em que novas classes são criadas a partir das classes existentes, absorvendo seus atributos e comportamentos e adicionando novos recursos que as novas classes exigem 6 HerançaHerança emem JavaJava • A partir de uma classe base, outras classes podem ser especificadas. • Cada classe derivada ou subclasse apresenta as características (estrutura e métodos) da superclasse e acrescenta a elas o que for definido de particularidade para ela. • Cada subclasse se torna uma candidata a ser uma superclasse para alguma subclasse futura 2 7 HerançaHerança emem JavaJava • Sintaxe: [modificador] class NomeDaSuperclasse { // corpo da superclasse... } [modificador] class NomeDaSubclasse extends NomeDaSuperclasse { // corpo da subclasse... } • extends - indica que está sendo criada uma nova classe que deriva de uma classe existente • Classe existente - superclasse, classe base ou classe progenitora • Nova classe - subclasse, classe derivada ou classe filha • Em geral, as subclasses têm mais funcionalidade que sua superclasse. 8 ExemploExemplo de de HerançaHerança ((SuperclasseSuperclasse-- Empregado.javaEmpregado.java)) import java.text.*; public class Empregado { private String nome; private double salario; public Empregado (String n, double s) { this.setNome(n); this.setSalario(s); } public void setNome(String n) { nome = n; } public void setSalario(double sal) { salario = sal; } 9 ExemploExemplo de de HerançaHerança ((SuperclasseSuperclasse-- Empregado.javaEmpregado.java)) public String getNome() { return nome; } public double getSalario() { return salario; } public void aumentarSalario (double percentual) { salario *= 1 + percentual / 100; } 10 ExemploExemplo de de HerançaHerança ((SuperclasseSuperclasse-- Empregado.javaEmpregado.java)) public String formatarMoeda () { NumberFormat nf = NumberFormat.getCurrencyInstance(); nf.setMinimumFractionDigits(2); String formatoMoeda = nf.format(salario); return formatoMoeda; } public void imprimir () { System.out.println(nome + " " + "salario " + this.formatarMoeda()); } 11 ExemploExemplo de de HerançaHerança ((SuperclasseSuperclasse-- Empregado.javaEmpregado.java)) public static void main (String args []) { Empregado [] e = new Empregado [3]; e[0] = new Empregado ("Harry Hacker", 3500); e[1] = new Empregado ("Carl Cracker", 7500); e[2] = new Empregado ("Tony Tester", 3800); int i; for (i = 0; i < 3; i++) e[i].imprimir(); System.out.println("******************************"); for (i = 0; i < 3; i++){ e[i].aumentarSalario(10); e[i].imprimir(); } } } 12 ExemploExemplo de de HerançaHerança ((SubclasseSubclasse-- Gerente.javaGerente.java)) import java.text.*; public class Gerente extends Empregado { private String nomeSecretaria; public Gerente (String n, double s, String nSec) { super (n, s); this.setNomeSecretaria(nSec); } public String getNomeSecretaria () { return nomeSecretaria; } public void setNomeSecretaria (String nome) { nomeSecretaria = nome; } 3 13 ExemploExemplo de de HerançaHerança ((SubclasseSubclasse--Gerente.javaGerente.java)) public void aumentarSalario (double percentual) { //adiciona bonus de 20% ao valor do salario double bonus = 20; super.aumentarSalario(percentual + bonus); } 14 HerançaHerança emem JavaJava • Palavra-chave super refere-se a uma superclasse • indica a chamada ao construtor da superclasse • se a superclasse não contiver o construtor padrão e o construtor da subclasse não chamar nenhum outro construtor da superclasse explicitamente→ compilador java vai informar um erro • Em um relacionamento de herança: • é necessário apenas indicar as diferenças entre a subclasse e superclasse→ o reuso é automático • é necessário redefinir métodos→ um dos primeiros motivos para usar herança 15 HerançaHerança emem JavaJava • Exemplo da subclasse Gerente: • redefinição do método aumentarSalario() • para que ele funcione diferente para gerentes e empregados comuns • esse método não tem acesso direto às variáveis de instância privados da superclasse, ou seja, esse método não pode alterar diretamente a variável de instância salario, embora cada objeto Gerente tenha uma variável de instância salario • somente os métodos da classe Empregado têm acesso aos atributos de instância privados • Resultado dessa redefinição para objetos da classe Gerente: • Quando se dá a todos os empregados um aumento de 5%, os gerentes vão receber um aumento maior automaticamente 16 ExemploExemplo de de HerançaHerança ((ClasseClasse PrincipalPrincipal--GerenteTeste.javaGerenteTeste.java)) import java.text.*; public class GerenteTeste { public static void main (String args[]){ Gerente g = new Gerente ("Carl Cracker", 7500, "Harry Hacker"); Empregado [] e = new Empregado [3]; e[0] = g; e[1] = new Empregado ("Harry Hacker", 3500); e[2] = new Empregado ("Tony Tester", 3800); int i; for (i = 0; i < 3; i++) e[i].aumentarSalario(10); for (i = 0; i < 3; i++) e[i].imprimir(); System.out.println("O nome da secretaria do departamento e: " +g.getNomeSecretaria()); } } 17 SubclassesSubclasses • Para saber se a herança é adequada para um programa • ter em mente que qualquer objeto que seja uma instância de uma subclasse precisa ser utilizável no lugar de um objeto que seja uma instância de superclasse • objetos de subclasse são utilizáveis em qualquer código que use a superclasse • um objeto de subclasse pode ser passado como argumento para qualquer método que espera um parâmetro de superclasse • um objeto de superclasse não pode geralemente ser atribuído a um objeto de subclasse g = e[i]; //erro • Os atributos só podem ser adicionados, e não removidos, os objetos de uma subclasse herdados têm, pelo menos, tantos atributos de dados quanto os objetos de superclasse 18 SubclassesSubclasses • Uma das regras fundamentais da herança: • um método definido em uma subclasse com o mesmo nome e mesma lista de parâmetros que um método em uma de suas classes antecessoras oculta o método da classe ancestral a partir da subclasse 4 19 RecomendaçõesRecomendações de de ProjetoProjeto parapara HerançaHerança 1. Coloque métodos e atributos comuns na superclasse 2. Use herança para modelar uma relação de “estar contido em” (um objeto da subclasse é um (a) objeto da superclasse) Exemplo: classe Empreiteiro 3. Não use herança a menos que todos os métodos herdados façam sentido Exemplo: classe Feriado class Feriado extends Day { . . .} - Um dos métodos públicos da classe Day é avancarData ( ), que permite transformar dias feriados em dias normais, de modo que não é um método apropriado para se fazer com dias feriados. Feriado natal; natal.avancarData(10); // neste caso, um feriado é um dia mas não um Day (objeto) 20 RecomendaçõesRecomendações de de ProjetoProjeto parapara HerançaHerança 4. Use polimorfismo, não informação de tipo - Sempre que você encontrar código do tipo if (x é o tipo 1) acao1(x); else if (x é o tipo 2) acao2(x); - Pense em Polimorfismo - acao1 e acao2 representam um conceito comum? - Caso afirmativo, faça o conceito virar um método de uma superclasse. Assim poderá simplesmente chamar: x.acao( ); - o ponto a ser observado aqui é que o código para usar métodos polimórficos é muito mais fácil de se manter e estender que um código que use múltiplos testes de tipos de dados. 21 PolimorfismoPolimorfismo • O polimorfismo permite escrever programas de uma forma geral para tratar uma ampla variedade de classes relacionadas existentes e ainda a serem especificadas • Polimorfismo: • é a capacidade de um objeto decidir que método aplicar a si mesmo. • embora a mensagem possa ser a mesma - os objetos podem responder diferentemente • aplicado a qualquer método que seja herdado de uma superclasse 22 PolimorfismoPolimorfismo • Comunicação entre objetos: envio de mensagens • ao enviar uma mensagem que pede para uma subclasse aplicar um método usando certos parâmetros • a subclasse verifica se ela tem ou não um método com esse nome e com exatamente os mesmos parâmetros. Se tiver, usa-o. • caso contrário: a superclasse torna-se responsável pelo processamento da mensagem e procura por um método com esse nome e esses parâmetros. Se encontrar, chama esse método. • Exemplo: • o método aumentarSalario() da classe Gerente é chamado em vez do método aumentarSalario() da classe Empregado quando se envia uma mensagem aumentarSalario ao objeto Gerente 23 PolimorfismoPolimorfismo • a chave para fazer polimorfismo: • ligação tardia (late binding) ou ligação dinâmica: • o compilador não gera o código para chamar um método em tempo de compilação • em vez disso, cada vez que se aplica um método a um objeto, o compilador gera código para calcular que método deve ser chamado, usando informações de tipo do objeto • o mecanismo de chamada de método tradicional é chamado ligação estática: determinada em tempo de compilação 24 Polimorfismo Polimorfismo • Vinculação dinâmica de objeto • Em programação OO, cada uma dessas classes pode ser dotada da capacidade de desenhar a si própria. • Cada classe tem seu próprio método desenhar e a implementação do método desenhar é bem diferente para cada forma • Ao desenhar uma forma, qualquer que seja essa forma, seria ótimo se poder tratar genericamente como objetos da superclasse Forma FormaForma RetânguloRetânguloCírculoCírculo TriânguloTriângulo QuadradoQuadrado 5 25 PolimorfismoPolimorfismo • Assim, para desenhar qualquer forma, poderíamos simplesmente chamar o método desenhar da superclasse Forma e deixar o programa determinar dinamicamente (durante a execução), com base no tipo de objeto real, qual é o método desenhar de subclasse que deve ser utilizado. • Para permitir esse tipo de comportamento, declaramos desenhar na superclasse e então sobrescrevemos desenhar em cada uma das subclasses para desenhar a forma apropriada • Se utilizarmos uma referência para a superclasse para fazer referência a um objeto da subclasse e invocarmos o método desenhar, o programa escolherá o método desenhar correto da subclasse dinamicamente. 26 ExercícioExercício Cliente nome endereço saldo void imprimir() boolean fazerCompra(double valor) void quitarDivida(double valor) ClienteVip Crédito void imprimir() boolean fazerCompra(double valor) JAVA_Aula5.pdf 1 Programação Orientada a ObjetosProgramação Orientada a Objetos em Javaem Java Aula 5 Aula 5 –– Classes Abstratas, Classes Abstratas, Interfaces e Herança MúltiplaInterfaces e Herança Múltipla Prof. Dr. Francisco Isidro Massetto franicsico.isidro@techschool.com.br 22 Classes AbstratasClasses Abstratas • Classes abstratas são classes que devem ser definidas com o propósito de criar apenas um modelo de implementação • As classes abstratas não podem ter objetos instanciados • Uso: apenas para usar uma referência genérica • Exemplo: Classe Forma Geométrica (Aula 4) 33 Classes AbstratasClasses
Compartilhar