Revisão da linguagem Java



Documentos relacionados
Programação por Objectos. Java

Módulo 06 Desenho de Classes

FBV - Linguagem de Programação II. Um pouco sobre Java

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Técnicas de Programação II

Modulo IIa Extra: Object

CURSO DE PROGRAMAÇÃO EM JAVA

PADI 2015/16. Aula 1 Introdução à Plataforma.NET

Programação de Computadores - I. Profª Beatriz Profº Israel

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

Curso Adonai QUESTÕES Disciplina Linguagem JAVA

Introdução à linguagem

Java 2 Standard Edition Como criar classes e objetos

2 Orientação a objetos na prática

Reuso com Herança a e Composiçã

3 Classes e instanciação de objectos (em Java)

Programação Na Web. Linguagem Java Parte II. break com o nome do bloco. Sintaxe. Nome do bloco. Termina o bloco. António Gonçalves ...

Computação II Orientação a Objetos

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Programação por Objectos. Java

Java Básico. Classes Abstratas, Exceções e Interfaces Prof. Fernando Vanini Ic-Unicamp

A Linguagem Java. Alberto Costa Neto DComp - UFS

Capítulo 4. Packages e interfaces

AULA DE JAVA 1 - CONCEITOS BÁSICOS

Paradigmas da Programação PPROG. Linguagem JAVA. Interfaces. (Livro Big Java, Late Objects Capítulo 9) Nelson Freire (ISEP DEI-PPROG 2013/14) 1/33

Programação Orientada a Objetos

Java. Marcio de Carvalho Victorino

Unidade IV: Ponteiros, Referências e Arrays

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento NetBeans Introdução à Linguagem de Programação JAVA

POO Programação Orientada a Objetos. Classes em Java

Programação por Objectos. Java

Programação por Objectos. Java

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

7 RTTI e Interfaces. Desenvolvimento OO com Java. Vítor E. Silva Souza (vitorsouza@inf.ufes.br)

ESQUEMA AULA PRÁTICA 1 Familiarização com o Ambiente de Desenvolvimento Eclipse Introdução à Linguagem de Programação JAVA

BCC221 Programação Orientada a Objetos. Prof. Marco Antonio M. Carvalho 2014/2

BSI UFRPE Prof. Gustavo Callou

Análise de Programação

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Algoritmia e Programação APROG. Linguagem JAVA. Básico. Nelson Freire (ISEP DEI-APROG 2012/13) 1/31

Membros de classe e de instância. PARTE III: Java e OO - detalhes. Exemplo 1: método. Exercício. Exemplo 1 corrigido

Sintaxe Geral Tipos de Dados. Prof. Angelo Augusto Frozza, M.Sc.

Java - Introdução. Professor: Vilson Heck Junior. vilson.junior@ifsc.edu.br

Laboratório de Programação. Aula 13 Java 5COP088. Aula 13 Genéricos e Conjuntos Java Prof. Dr. Sylvio Barbon Junior. Sylvio Barbon Jr barbon@uel.

Aula 2. Objetivos. Encapsulamento na linguagem Java; Utilizando a referência this.

Java Laboratório Aula 1. Divisões da Plataforma. Introdução a Plataforma Java. Visão geral da arquitetura da

Orientação a Objetos em Java. Leonardo Gresta Paulino Murta leomurta@ic.uff.br

Programação Orientada a Objetos

Noções sobre Objetos e Classes

Linguagens de. Aula 02. Profa Cristiane Koehler

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Linguagem de Programação III

Orientação a Objetos com Java

Guia de Fatores de Qualidade de OO e Java

Sobre o Professor Dr. Sylvio Barbon Junior

LINGUAGEM DE PROGRAMAÇÃO JAVA

Classes, Superclasses e Subclasses

Java para Desktop. Introdução à Plataforma Java JSE

Módulo 02 Programação Orientada a Objetos. Última atualização: 07/06/2010

Capítulo 3. Programação por objectos em Java

Módulo 07 Características Avançadas de Classes

Lição 9 Trabalhando com bibliotecas de classes

Programação Orientada a Objetos em java. Polimorfismo

PROGRAMAÇÃO JAVA. Parte 1

JAVA. Fabrício de Sousa

Orientação a Objetos

Um objeto é uma instância de uma 'classe'. Você define uma classe utilizando o trecho de código abaixo;

Tabelas (arrays) (vetores, matrizes, etc) Algoritmos de pesquisa Algoritmos de ordenação

Conceito de classe em C++

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos. Relacionamentos entre objetos

Aula 09 Introdução à Java. Disciplina: Fundamentos de Lógica e Algoritmos Prof. Bruno Gomes

Utilizem a classe Aula.java da aula passada:

Aula 3 Objeto atual com referencia THIS e Classes com Herança

Universidade Federal de Uberlândia

Programação Orientada a Objetos. Encapsulamento

Encapsulamento de Dados

Programação com Acesso a BD. Programação com OO Acesso em Java

Linguagem de Programação III

public Agenda() { compromissos = null; } public int getnumerodecompromissos() { if (compromissos==null) return 0; else return compromissos.

Capítulo 2. Fundamentos de Java

Programação online em Java

Introdução à orientação a objetos. João Tito Almeida Vianna 25/05/2013

Organização de programas em Java. Vanessa Braganholo

5 Caso de estudo O cartão fidelidade

Programação com Objectos. Processamento de Dados I. 4. Classes Abstractas

Seminário - C# DSO II. Desenvolvimento de Sistemas Orientados a Objetos 2. Equipe: Diorges, Leonardo, Luís Fernando, Ronaldo

Java 1 visão geral. Vitor Vaz da Silva

Introdução a POO. Introdução a Linguagem C++ e POO

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Como o FIT funciona. FIT: Framework for Integrated Tests FIT. Dados de testes. Programa. Fixtures. classes. Resultados de testes

Sintaxe Básica de Java Parte 1

O programa abaixo exemplifica o uso da classe Image para carregar e mostrar uma imagem localizada em um arquivo.

JSP - ORIENTADO A OBJETOS

Especialização em desenvolvimento para web com interfaces ricas. Tratamento de exceções em Java Prof. Fabrízzio A. A. M. N. Soares

Computação II - Java Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Herança, Polimorfismo e Construtores

Linguagem de Programação Introdução a Linguagem Java

Para desenvolver a atividade a atividade desta aula utilizaremos o ambiente de desenvolvimento integrado NetBeans.

insfcanceof new public switch transient while byte continue extends for int null

Transcrição:

Revisão da linguagem Java Laboratório de Programação Pedro Vasconcelos, DCC/FCUP Fevereiro 2015 Java TM linguagem de programação de propósito genérico desenvolvida pela Sun (e agora Oracle) suporta tipos estáticos, classes, objetos e concorrência compilada para bytecode duma máquina virtual ( write-once, run anywhere ) sintaxe baseada no C/C++ mais alto nível: modelo de objetos mais simples que o de C++ libertação automática de memória (garbage collection) não suporta aritmética de apontadores tratamento de erros de execução usando exceções Platforma Java Java Standard Edition (JSE): compilador: javac interpretador JVM: java conjunto de biliotecas padrão ferramentas (jar, javadoc, etc.) Java Enterprise Edition (JEE): JSE + componentes extra para aplicações empresariais 1

Evolução da linguagem 1996 JDK 1.0 primeira versão 2000 J2SE 1.3 HotspotVM 2005 J2SE 5 tipos genéricos, enumerações, ciclos for implícitos 2011 JSE 7 melhorias na inferência de tipos genéricos 2014 JSE 8 expressões lambda, streams funcionais Em laboratório de programação: vamos usar o JSE 7. Outras linguagens A máquina virtual JVM pode também ser usada para executar outras linguagens; algums exemplos: Scala Clojure Python Ruby http://www.scala-lang.org http://clojure.org/ http://www.jython.org/ http://jruby.org/ NB: não suportadas oficialmente pela Oracle! Princípios da linguagem combina programação imperativa com objetos distingue entre valores básicos e objetos objetos são usados para estruturar programas valores básicos não são objectos execução em máquina virtual (facilita portabilidade) gestão automática de memória: a alocação de objetos é explícita a libertação é implícita (garbage collection) Objetos, classes e packages objetos são agregados de dados e operações associadas 2

as classes são moldes para criar objectos objectos da mesma classe suportam um conjunto de operações comuns packages são agregados de classes relacionadas (para facilitar distribuição) NB: em Java, classes também são usadas apenas para agrupar métodos e atributos estáticos. Ficheiros Java O nome do ficheiro duma classe pública deve ser igual ao nome da classe. // num ficheiro Rectangle.java public class Rectangle { NB: pode ter outras classes desde que não sejam públicas. Método main programa completo deve ter uma classe com um método estático main os argumentos de linha de comando são passados como um array de String // num ficheiro Hello.java class Hello { public static void main(string args[]) { System.out.println("Hello world!"); Compilação e execução 3

$ javac Hello.java # compilar $ java Hello # executar # alternativa com CLASSPATH $ java -cp ~/myclasses Hello Tipos básicos principais tipo valores literais int inteiros com sinal 32 bits 0, -7, 12345 long inteiros com sinal 64 bits -12345L float vírgula-flutuante simples 1.234f, -10.5e6f double vírgula-flutuante dupla -0.25, 1.234d boolean valores lógicos true, false char carateres Unicode 'A', '\u2764' Arrays int[] anarray; // declaração anarray = new int[10]; // inicialização (zeros) // inicialização com constantes int[] anarray = { 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 ; Arrays (2) os índices começam em zero (como em C/C++) arrays em Java têm associado um atributo length (ao contrário do C/C++) int[] someprimes = { 2, 3, 5, 7, 11, 13 ; for (int i=0; i<someprimes.length; i++) { System.out.println(somePrimes[i]); 4

Ciclo for implícito Também podemos percorrer arrays usando um ciclo for com o índice implícito ( for-each ou enhanced for ): int[] someprimes = { 2, 3, 5, 7, 11, 13 ; for (int prime : someprimes) { System.out.println(prime); NB: estes ciclos podem ser usados também noutras coleções (listas, conjuntos, etc.). Arrays (3) não há arrays multi-dimensionais alternativa: arrays de arrays permite dimensões internas não homogéneas String[][] names = { {"Mr. ", "Mrs. ", "Ms. ", {"Smith", "Jones" ; System.out.println(names[0][0] + names[1][0]); // Mr. Smith System.out.println(names[0][2] + names[1][1]); // Ms. Jones Cadeias de texto Cadeias são objetos da classe String. String s1 = "Hello"; // declarar e inicializar String s2 = new String("Hello") // alternativa Podemos obter o comprimento e concatenar. System.out.println(s1.length()); // output: 5 // NB: length() é um método System.out.println(s1 + " world!"); // output: "Hello world!" 5

Cadeias de texto (2) não são arrays de carateres mas podemos aceder aos carateres individuais usando charat() String pal = "Dot saw I was Tod"; int len = pal.length(); for (int i = 0; i < len; i++) { System.out.printlen(pal.charAt(i)); Cadeias de texto (3) não podemos modificar o comprimento ou os carateres duma cadeia (é um objeto imutável) mas podemos construir novas cadeias por concatenação alternativa: classe StringBuilder (mais tarde) Programação com objetos definimos classes para novos tipos objetos na definição da classe incluimos: atributos (i.e. valores de estado) métodos (i.e. operações suportadas) Exemplo: contas bancárias class Account { int balance = 0; // balanço (atributo) // depositar uma quantia void deposit(int amount) { balance = balance + amount; // obter o saldo atual int getbalance() { return balance; 6

Exemplo de uso class AccountDemo { public static void main(string args[]) { Account acc1 = new Account(); Account acc2 = new Account(); System.out.println(acc1.getBalance()); System.out.println(acc2.getBalance()); acc1.deposit(100); acc2.deposit(50); System.out.println(acc1.getBalance()); System.out.println(acc2.getBalance()); Controlo de acesso Podemos limitar o acesso a métodos ou atributos usando modificadores; os mais comuns são: public visível em todas as classes private vísivel apenas na própria classe Outros: protected visível na classe, sub-classes e no package (sem modificador) visível na classe e no package Contas bancárias (2) class Account { private int balance = 0; // depositar uma quantia public void deposit(int amount) { balance = balance + amount; // obter o saldo atual 7

public int getbalance() { return balance; Encapsulamento não podemos modificar balance fora da classe Account podemos apenas usar os métodos públicos // no método main() da classe AccountDemo acc = new Account() acc.balance = acc.balance + 100; // ERRO acc.deposit(100); // OK Construtores devemos definir construtores especializados para inicializar objetos um construtor tem o nome da classe e não tem tipo de retorno pode haver mais do que um construtor (com diferentes números de argumentos ou tipos) class Account { private int balance = 0; // construtor com saldo inicial public Account(int amount) { balance = amount; Métodos e atributos estáticos Por omissão, os atributos e métodos são associados a cada instância particular (i.e. cada objeto). O modificador static permite associar métodos ou atributos à classe em vez das instâncias. 8

class Account { // balanço (um por cada conta) private int balance = 0; // taxa de câmbio (todas as contas) static private float rate = ; Herança uma classe pode extender outra por herança se A extende B então A é sub-classe de B uma sub-classe: herda atributos e métodos da classe original pode definir novos métodos ou redefinir métodos existentes (override) class SavingsAccount extends Account { // novos atributos e métodos private float interestrate; A classe Object a classe Objet está no topo da hierarquia todas as outras classes herdam de Object (direta ou indiretamente) se não declaramos herança explícita para um nova classe, esta herda de Object: class Account { é equivalente a class Account extends Object { 9

Métodos da classe Object Alguns métodos definidos em Object: Object clone() criar uma cópia do objeto boolean equals(object other) comparar igualdade com outro objeto String tostring() converte o objeto numa string int hashcode() retornar o código de hash inteiro NB: por vezes é necessário re-definir estes métodos nas sub-classes. Cuidados com herança O (ab)uso da herança é desaconselhado: implica perda de flexibilidade porque compromete o programa com implementações específicas aumenta o acouplamento entre partes distintas do código uma alteração numa classe pode ter efeitos imprevistos noutras a integridade da relação de herança é bastante subtil: https://isocpp.org/ wiki/faq/proper-inheritance#circle-ellipse Interfaces especificações de um conjunto métodos relacionados representam um contrato entre uma classe e o mundo exterior uma interface pode ser implementada por várias classes uma classe pode implementar várias interfaces Exemplo interface Sizeable { float getarea(); // calcular área class Rect implements Sizeable { private float width, height; public float getarea() { 10

return width*height; Exemplo (cont.) class Circle implements Sizeable { private float radius; public float getarea() { return Math.PI*Math.pow(radius,2.0); Classes vs. interfaces classes podem conter atributos e métodos interfaces só podem declarar métodos (sem implementação) ou constantes uma classe só pode extender uma outra classe uma interface pode extender múltiplas interfaces public interface GroupedInterface extends Interface1, Interface2, Interface3 { // declarações de constantes // e assinaturas de métodos Enumerações tipos enum permitem definir valores constantes dum conjunto finito de alternativas o compilador verifica que valores dum tipo enum são corretamente atribuidos podem também ser usados em instruções switch public enum Day { SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY 11

Exemplo public void tellitlikeitis(day day) { switch (day) { case MONDAY: System.out.println("Mondays are bad."); break; case SATURDAY: case SUNDAY: System.out.println("Weekends are best."); break; default: System.out.println("Midweek days are so-so."); break; Outros cuidados valores null comparações de igualdade anotações de override implementações do método equals Valores null um array ou objeto sem inicialização toma o valor null podemos também atribuir explicitamente null null representa a ausência de um objeto invocar métodos ou atributos de null causa um erro: NullPointerException String s1; // inicializada com null System.out.println(s1.length()); // NullPointerException Comparações de igualdade O operador == compara: igualdade de valores para tipos básicos (int, char, etc.) igualdade de referências para arrays e objetos 12

int x = 1+2+3; int y = 2*3; // x==y dá true String s1 = "Hello " + "world"; String s2 = "He" + "llo world"; // s1 == s2 dá false Comparações de igualdade (2) Para comparar igualdade de valores entre objetos devemos usar o método equals: String s1 = "Hello " + "world"; String s2 = "He" + "llo world"; boolean r1 = s1.equals(s2); // true boolean r2 = s2.equals(s1); // true Igualdade entre Arrays Arrays são objetos da classe Array a igualdade está definida em java.util.arrays (não é o método equals) import java.util.arrays; int a[] = {1, 2, 3 ; int b[] = {1, 2, 3 ; boolean r1 = a == b; boolean r2 = a.equals(b); boolean r3 = Arrays.equals(a,b); // false // false // true Anotação de Override as anotações indicam meta-informação para o compilador, IDEs e outras ferramentas quando queremos redefinir um método numa sub-classe devemos anotá-lo com @Override 13

permite ao compilador/ide avisar se nos enganarmos no nome do método ou tipos de argumentos class Foo { @Override public String tostring() { // redefinir um método herdado de Object Implementação de equals o método equals definido em Object compara as referências dos objetos (como o operador ==) para comparar valores devemos redefinir este método possiveis armadilhas: assinatura de tipos demasiado restrita definir equals dependendo de atributos mutáveis definir equals sem respeitar uma relação de equivalência devemos também redefinir hashcode Mais informação: How to Write an Equality Method in Java Exemplo: rectângulos class Rect { private int width, height; // largura, altura @Override public boolean equals(object other) { if (other == null!(other instanceof Rect)) return false; Rect that = (Rect)other; // coerção return (this.width == that.width && this.height == that.height); 14

Redefinir também hashcode Para usar Rect em coleções baseadas em funções de hash (e.g. HashMap ou HashSet) devemos também redefinir hashcode. class Rect { @Override public int hashcode() { // produtos com um primo return (41 * (41 + width) + height); Os IDEs podem gerar automaticamente métodos equals e hashcode mas nem sempre corretos! 15