Java Kickstart, day 2 Semelhanças com linguagem C Strings • Criação: String name = “Bond”; ou String name = new String(“Bond”); • Manipulação name = name + “,James Bond”; Strings • Objetos podem ser transformados em String com a invocação do toString(), quando necessário: int num = 15; System.out.println(“Valor” + 15); Programas são feitos de classes Composição das classes: • Campos - Variáveis e objetos internos. São responsáveis pelo estado do objeto. • Métodos - funções que operam sobre os campos para alterar o estado do objeto. To infinite, and beyond... class BuzzLightYear { public static void main(String[] args){ System.out.println("To infinite..."); System.out.println(“and beyond”); } } Em detalhes • A classe anterior só declara um método: main • main é um método especial em Java. É por onde as aplicações começam • main tem como parâmetro um array do String, e é passado via linha de comando. • System.out.println() : Observar a sintaxe objeto.objeto.método() Mais classes e objetos • Declarando mais uma classe: class Point { public double x,y; } • Observar o acesso aos campos Criando Objetos • Sintaxe: Point lowerLeft = new Point(); • O uso de new chama o construtor do objeto. No caso, um construtor default é chamado Alterando campos: • Se o acesso é public, pode ser feito diretamente: lowerLeft.x = 5.0; // O objeto precisa lowerLeft.y = 6.0; // ser criado antes • Não é recomendado liberar acesso public aos campos dos objetos Controle de Acesso • private: Acesso possível apenas de dentro da classe • package : Sem declaração explícita, o acesso é permitido a código dentro do mesmo pacote. Não é permitido a classes filhas em outros pacotes. • protected: Acesso permitido a código do mesmo pacote e código em classes filhas. • public: Acesso permitido de qualquer lugar. Métodos de acesso • Recomenda-se o uso de métodos get e set para cada propriedade (onde o acesso é necessário) do objeto. As propriedades podem então ter acesso restrito. Métodos de acesso e construtor • O novo Point: class Point { private x, y; public void setX(int num){ x = num; } public int getX(){ return x; } //continua... Métodos de acesso e construtor public Point(int x, int y){ this.x = x; this.y = y; } public Point(){ } // falta método de acesso a y } Conceitos: • • • • • Controle de acesso Referência através de this Métodos de acesso Construtor não default O construtor deve ser aproveitado para criar um objeto válido Criando subclasses • A classe Point original: class Point(){ int x,y; public Point(int x, int y){ this.x = x; this.y = y; } } Criando subclasses • A subclasse: class Pixel extends Point { Color color; public Pixel (Color color, int x, int y){ this.color = color; super (x,y); } } Subclasses • Observar o uso do método super() • super dá uma referência à classe mãe • Um objeto da classe filha pode ser usado como objeto da classe mãe • Todas as classes descendem da classe Object • Não é permitido fazer heranças múltiplas Uma classe só pode herdar uma outra classe Interfaces • Úteis para declarar métodos sem suprir implementação • Modelo de tratamento de evento usa extensivamente interfaces Interfaces • Exemplo: public interface ActionListener{ void actionPerformed(ActionEvent e); } • As classes que implementarem ActionListener devem declarar um método actionPerformed() não vazio Packages • Evitam conflitos entre nomes e também servem como mecanismo de proteção • Exemplo: class Date1 { public static void main(String[] args){ java.util.Date now = new java.util.Date(); System.out.println(now); } } Packages • Poderia ter sido usado: import java.util.date; class Date2 { public static void main(String[] args){ Date now = new Date(); System.out.println(now); } } Packages • Convenção de nomenclatura: usar o nome do domínio na Internet invertido. • Exemplos: package org.omg.CORBA.ORBPackage; domínio: omg.org, pacote: CORBA.ORBPackage package br.usp.lsi.DBConnect; package com.sun.java.swing.plaf.*;