java – parte i - departamento de informática – puc ...inf1621/java1.pdf · herança em java...

35
Linguagens de Programacão I [email protected] 1 Java Java – Parte I Parte I Linguagens de Programacão I [email protected] 2 Introdução Introdução LP OO desenvolvida pela Sun no início da década de LP OO desenvolvida pela Sun no início da década de 90 com sintaxe semelhente a C 90 com sintaxe semelhente a C\ C++. C++. Todos os programas Java são compilados e Todos os programas Java são compilados e interpretados. interpretados. O compilador transforma o programa em um forma O compilador transforma o programa em um forma intermediária independente da plataforma intermediária independente da plataforma ( bytecodes). bytecodes). O interpretador (JVM) testa e executa os O interpretador (JVM) testa e executa os bytecodes. bytecodes.

Upload: hoangkhanh

Post on 09-Nov-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

1

Linguagens de Programacão [email protected] 1

Java Java –– Parte IParte I

Linguagens de Programacão [email protected] 2

IntroduçãoIntrodução

LP OO desenvolvida pela Sun no início da década de LP OO desenvolvida pela Sun no início da década de 90 com sintaxe semelhente a C90 com sintaxe semelhente a C\\C++.C++.

Todos os programas Java são compilados e Todos os programas Java são compilados e interpretados.interpretados.

O compilador transforma o programa em um forma O compilador transforma o programa em um forma intermediária independente da plataforma intermediária independente da plataforma ((bytecodes).bytecodes).

O interpretador (JVM) testa e executa os O interpretador (JVM) testa e executa os bytecodes.bytecodes.

2

Linguagens de Programacão [email protected] 3

IntroduçãoIntrodução

Para cada plataforma é necessário uma JVM Para cada plataforma é necessário uma JVM específica.específica.

Entretanto, um mesmo programa pode ser Entretanto, um mesmo programa pode ser executado em qualquer plataforma.executado em qualquer plataforma.

Linguagens de Programacão [email protected] 4

Classes em JavaClasses em Java

Em Java, a declaração de novas Em Java, a declaração de novas classes é feita através da construçãoclasses é feita através da construçãoclassclass. . class Circulo {class Circulo {

int x,y;int x,y;

float raio;float raio;

......

}}

3

Linguagens de Programacão [email protected] 5

InstanciaçãoInstanciação

Uma vez definida uma classe, uma nova Uma vez definida uma classe, uma nova instância (objeto) pode ser criada através do instância (objeto) pode ser criada através do comandocomando newnew..CirculoCirculo c =c = new Circulo();new Circulo();

Os atributos desta classe podem ser Os atributos desta classe podem ser manipulados diretamente:manipulados diretamente:c.x = 5; c.y = 5;c.x = 5; c.y = 5;

c.raio = 3.5;c.raio = 3.5;

Linguagens de Programacão [email protected] 6

MétodosMétodosAlém de atributos, uma classe deve Além de atributos, uma classe deve declarardeclarar os os métodos que irá métodos que irá disponibilizar.disponibilizar.

class Circulo {class Circulo {int x,y;int x,y;float raio;float raio;......void setRaio(float r){void setRaio(float r){raio = r;raio = r;

}}float getArea(){float getArea(){

return 3,14*raio*raio;return 3,14*raio*raio;}}void move (int dx, int dy){void move (int dx, int dy){x = x+dx;x = x+dx;y = y+dy;y = y+dy;

} } }}

4

Linguagens de Programacão [email protected] 7

Declaração de Variáveis e EscopoDeclaração de Variáveis e Escopo

Java permite que uma variável seja declarada em Java permite que uma variável seja declarada em qualquer lugar dentro de um método.qualquer lugar dentro de um método.

O escopo da variável se estende do momento da sua O escopo da variável se estende do momento da sua declaração até o fim do bloco no qual foi definido.declaração até o fim do bloco no qual foi definido.

int fatorial (int n){int fatorial (int n){if n <= 1 then if n <= 1 then

return 1return 1else { else {

int f = n*fatorial(nint f = n*fatorial(n--1)1)return freturn f

} } }}

escopo de f

Linguagens de Programacão [email protected] 8

Envio de Envio de MensagensMensagens

O envio de uma mensagem O envio de uma mensagem para um para um objeto éobjeto é feito através feito através dada invocação invocação dedemétodosmétodos deste objeto com adeste objeto com a eventual eventual passagempassagem de parâmetrosde parâmetros..

Circulo c = new Circulo();Circulo c = new Circulo();c.setRaio(3);c.setRaio(3);float a = c.getArea();float a = c.getArea();

5

Linguagens de Programacão [email protected] 9

ReferênciasReferências

JavaJava adota um modelo de valor por adota um modelo de valor por referência.referência.

Com exceção de tipos primitivos, a Com exceção de tipos primitivos, a atribuição entre duas variáveis cria uma atribuição entre duas variáveis cria uma nova referêncianova referênciaCirculo c1 = new Circulo();Circulo c1 = new Circulo();Circulo c2 = c1;Circulo c2 = c1;

c1c1 e e c2c2 contcontéém referências para o mesmo objeto Circulom referências para o mesmo objeto Circulo

Linguagens de Programacão [email protected] 10

thisthis

Dentro de um método, o objeto pode precisar Dentro de um método, o objeto pode precisar de sua própria referência.de sua própria referência.

A palavra reservada A palavra reservada thisthis denota uma denota uma referência ao próprio objeto.referência ao próprio objeto.class Circulo {class Circulo {

int x,y;int x,y;void setXY (int x, int y){void setXY (int x, int y){

this.x = x;this.x = x;this.y = x;this.y = x;

}}}}

6

Linguagens de Programacão [email protected] 11

Inicialização de ObjetosInicialização de ObjetosEm várias Em várias circunstânciascircunstâncias é interessanteé interessante inicializarinicializar um um objeto objeto com valores.com valores.

Por exemplo, poderíamos querer que todo Por exemplo, poderíamos querer que todo Círculo recémCírculo recém criado criado estivesse em (0,0).estivesse em (0,0).

Esse tipo deEsse tipo de inicializaçãoinicialização pode ser feito especificandopode ser feito especificando--sesevalores iniciais para os valores iniciais para os atributos:atributos:class Circulo {class Circulo {

int x = 0;int x = 0;int y = 0;int y = 0;......

}}

Linguagens de Programacão [email protected] 12

ConstrutoresConstrutores

Ao invés de criar pontos sempre em (0,0), Ao invés de criar pontos sempre em (0,0), poderíamos querer especificar a posição do poderíamos querer especificar a posição do ponto no momento de sua criação.ponto no momento de sua criação.

O uso de O uso de construtoresconstrutores permite isso.permite isso.

Construtores são mais genéricos do que Construtores são mais genéricos do que simples atribuições de valores iniciais aos simples atribuições de valores iniciais aos campos: podem receber parâmetros e fazer campos: podem receber parâmetros e fazer um processamento qualquer.um processamento qualquer.

7

Linguagens de Programacão [email protected] 13

ExemploExemploclass Circulo {class Circulo {

int x,y;int x,y;float raio;float raio;Circulo (int x, int y, float Raio){...} Circulo (int x, int y, float Raio){...}

}}

Circulo c1 = new Circulo(3,3,5.5); Circulo c1 = new Circulo(3,3,5.5); Circulo c2 = new Circulo(0,0,4);Circulo c2 = new Circulo(0,0,4);

Neste exemplo para criar um Circulo é Neste exemplo para criar um Circulo é sempre necessário especificar sua posição e sempre necessário especificar sua posição e o seu raio.o seu raio.

Linguagens de Programacão [email protected] 14

Construtor PadrãoConstrutor Padrão

Quando não especificamos nenhum Quando não especificamos nenhum construtorconstrutor a linguagem Java a linguagem Java declaradeclaraimplicitamenteimplicitamente um construtor um construtor padrãopadrão vazio, vazio, que não recebe parâmetros.que não recebe parâmetros.

Se declararmos algum construtor, esse Se declararmos algum construtor, esse construtor padrão construtor padrão nãonão será mais declaradoserá mais declarado..

No exemplo anterior:No exemplo anterior:Circulo c3 = new Circulo(); Circulo c3 = new Circulo(); erro!!erro!!

8

Linguagens de Programacão [email protected] 15

SobrecargaSobrecarga

Java permite a sobrecarga de métodos, Java permite a sobrecarga de métodos, inclusive de construtores.inclusive de construtores.

class Point {class Point {int x, y;int x, y;Point() {Point() {

this(0,0);this(0,0);}}Point(int x, int y) {Point(int x, int y) {

this.x = x;this.x = x;this.y = y;this.y = y;

}}......

}}

Linguagens de Programacão [email protected] 16

Gerência de MemóriaGerência de MemóriaJava possui uma gerência automática de Java possui uma gerência automática de memória memória com coleta de lixo.com coleta de lixo.

QuandoQuando um objeto não é mais referenciado pelo um objeto não é mais referenciado pelo programaprograma ele é automaticamente coletado ele é automaticamente coletado ((destruído) e a memória correspondente é destruído) e a memória correspondente é desalocada.desalocada.

Qualquer objeto Java é criado sempre na heap.Qualquer objeto Java é criado sempre na heap.

Apenas tipos primitivos são alocados na pilha ou, Apenas tipos primitivos são alocados na pilha ou, eventualmente, na memória estática.eventualmente, na memória estática.

9

Linguagens de Programacão [email protected] 17

DestrutoresDestrutores

Quando um objeto Java vai ser coletado, ele Quando um objeto Java vai ser coletado, ele tem seu método tem seu método finalizefinalize chamado.chamado.

Esse método deve efetuar qualquer Esse método deve efetuar qualquer procedimento de finalização que seja procedimento de finalização que seja necessário antes da coleta do objetonecessário antes da coleta do objeto..

Como Java possui gerenciamento automático Como Java possui gerenciamento automático de memória, a utilização de destrutores não é de memória, a utilização de destrutores não é muito comum .muito comum .

Linguagens de Programacão [email protected] 18

EncapsulamentoEncapsulamento

A definição da interface de objetos é feita A definição da interface de objetos é feita através dos modificadores através dos modificadores publicpublic e e privateprivate..

Métodos e atributos declarados como Métodos e atributos declarados como publicpublicsão visíveis para outros objetos Java.são visíveis para outros objetos Java.

Métodos e atributos declarados como Métodos e atributos declarados como private private só podem ser acessados dentro do próprio só podem ser acessados dentro do próprio objeto.objeto.

10

Linguagens de Programacão [email protected] 19

ExemploExemploclass Circulo {class Circulo {

private int x,y;private int x,y;private float raio;private float raio;......public void setRaio(float r){public void setRaio(float r){

raio = r;raio = r;}}public float getArea(){public float getArea(){

return 3,14*raio*raio;return 3,14*raio*raio;}}public void move (int dx, int dy){public void move (int dx, int dy){

x = x+dx;x = x+dx;y = y+dy;y = y+dy;

} } }}

não são acessíveis pornão são acessíveis poroutros objetosoutros objetos

interfaceinterface

Linguagens de Programacão [email protected] 20

Atributos de Classes eAtributos de Classes eMétodos EstáticosMétodos Estáticos

Classes podem declarar membros (atributos e Classes podem declarar membros (atributos e métodos) que sejam comuns a todas as instâncias, métodos) que sejam comuns a todas as instâncias, ou seja, membros compartilhados por todos os ou seja, membros compartilhados por todos os objetos da classe.objetos da classe.

Este mecanismo equivale a definição de variáveis e Este mecanismo equivale a definição de variáveis e funções globais comuns em LPs não OO.funções globais comuns em LPs não OO.

Java suporta a definição de membros de classe Java suporta a definição de membros de classe através do qualificador através do qualificador staticstatic..

11

Linguagens de Programacão [email protected] 21

ExemploExemplopublic class Math{ public class Math{

static double pi = 3.14;static double pi = 3.14;static double cos(){static double cos(){

......}}

... ... }}

public class Produto{ public class Produto{ static int produzidos = 0;static int produzidos = 0;static float getProducao(){static float getProducao(){

return produzidos;return produzidos;}}public Produto(){public Produto(){

++produzidos; ++produzidos; }}......

}}

Linguagens de Programacão [email protected] 22

Acesso a Membros de ClasseAcesso a Membros de Classe

Não é necessário que uma instância da Não é necessário que uma instância da classe exista pra que membros (atributos e classe exista pra que membros (atributos e métodos) da classe possam ser acessados.métodos) da classe possam ser acessados.

O acesso a membros de classe em Java é O acesso a membros de classe em Java é feito diretamente através do nome da classe.feito diretamente através do nome da classe.float perimetro = 2*Math.pi*r;float perimetro = 2*Math.pi*r;

float x = Math.cos(2.3);float x = Math.cos(2.3);

int n = Produto.getProducao();int n = Produto.getProducao();

12

Linguagens de Programacão [email protected] 23

Tipos Básicos de JavaTipos Básicos de Javabooleanboolean truetrue ouou falsefalse

charchar caractercaracter UNICODE (16 bits)UNICODE (16 bits)

bytebyte número inteiro com sinal (8 bits)número inteiro com sinal (8 bits)

shortshort número inteiro com sinal (16 bits)número inteiro com sinal (16 bits)

intint número inteiro com sinal (32 bits)número inteiro com sinal (32 bits)

longlong número inteiro com sinal (64 bits)número inteiro com sinal (64 bits)

floatfloat número em pontonúmero em ponto--flutuante (32 bits)flutuante (32 bits)

doubledouble número em pontonúmero em ponto--flutuante (64 bits)flutuante (64 bits)

Linguagens de Programacão [email protected] 24

Strings e ArraysStrings e Arrays

Em Java strings e arrays são definidos Em Java strings e arrays são definidos através de classes específicas.através de classes específicas.

Exemplos:Exemplos:String texto = “Exemplo”;String texto = “Exemplo”;

intint[] lista = {1, 2, 3, 4, 5};[] lista = {1, 2, 3, 4, 5};

String[] nomes = {“João”, “Maria”};String[] nomes = {“João”, “Maria”};

SystemSystem.out..out.printlnprintln(nomes[0]); // Imprime “João”.(nomes[0]); // Imprime “João”.

13

Linguagens de Programacão [email protected] 25

OperadoresOperadoresOperadores Aritméticos

Descrição Operador

Adição +

Subtração -

Multiplicação *

Divisão /

Resto divisão inteiro %

Menos unário -

Linguagens de Programacão [email protected] 26

OperadoresOperadoresOperadores Relacionais

Descrição Operador

Igual ==

Diferente !=

Menor <

Menor ou igual <=

Maior >

Maior ou Igual >=

Operadores lógicos Operadores lógicos and (and (&&&&), or (), or (||||) e not () e not (!!))

14

Linguagens de Programacão [email protected] 27

Controle de FluxoControle de Fluxoifif--elseelse

switchswitch--casecase--defaultdefault

whilewhile

dodo--whilewhile

forfor

breakbreak

returnreturn

Linguagens de Programacão [email protected] 28

ifif--elseelsefloat m;float m;

ifif (a>0 && b>0)(a>0 && b>0)

m = m = a*b;a*b;

else {else {

System.out.println(“Erro”); System.out.println(“Erro”);

m = 0;m = 0;

}}

15

Linguagens de Programacão [email protected] 29

switchswitch--casecase--defaultdefaultintint i = f();i = f();switchswitch (i(i){){

case case --1:1:......breakbreak;;

case 0:case 0:......breakbreak;;

defaultdefault::......

}}

Linguagens de Programacão [email protected] 30

whilewhileintint i = 0;i = 0;

whilewhile (i<10(i<10){){

i++;i++;

SystemSystem.out..out.printlnprintln(i);(i);

}}

16

Linguagens de Programacão [email protected] 31

dodo--whilewhileintint i = 0;i = 0;

do{do{

i++;i++;

SystemSystem.out..out.printlnprintln(i);(i);

}}whilewhile (i<10);(i<10);

Linguagens de Programacão [email protected] 32

forforfor (for (intint i=1; i<=10; i++)i=1; i<=10; i++)

SystemSystem.out..out.printlnprintln(i);(i);

17

Linguagens de Programacão [email protected] 33

breakbreakintint i = 0;i = 0;

whilewhile ((true){true){

if (i==10)if (i==10) breakbreak;;

i++;i++;

SystemSystem.out..out.printlnprintln(i);(i);

}}

Linguagens de Programacão [email protected] 34

labellabelinício:início:

for (for (intint i=0; i<10; i++)i=0; i<10; i++)

for (for (intint j=0; j<10; j++)j=0; j<10; j++)

{{

if (v[i][j] < 0)if (v[i][j] < 0) breakbreak início;início;

......

}}

......

18

Linguagens de Programacão [email protected] 35

Herança em JavaHerança em Java

Java suporta o conceito de herança simples, mas não Java suporta o conceito de herança simples, mas não o de herança múltipla na forma tradicional.o de herança múltipla na forma tradicional.

PodePode--se declarar uma subclasse através da palavra se declarar uma subclasse através da palavra reservada reservada extendsextends::

public class Pixel extends Point {public class Pixel extends Point {int color;int color;public Pixel(int x, int y, int c) {public Pixel(int x, int y, int c) {

super(x, y);super(x, y);color = c;color = c;

}}}}

Linguagens de Programacão [email protected] 36

supersuper

Uma subclasse pode acessar o construtor da Uma subclasse pode acessar o construtor da superclasse através da chamada superclasse através da chamada supersuper().().

Caso a subclasse não invoque explicitamente o Caso a subclasse não invoque explicitamente o construtor da superclasse, Java fará isso construtor da superclasse, Java fará isso automaticamente.automaticamente.

Entretanto caso a superclasse não possua um Entretanto caso a superclasse não possua um construtor padrão, a subclasse necessariamente construtor padrão, a subclasse necessariamente deverá fazer uma invocação explícita de um deverá fazer uma invocação explícita de um construtor qualquer da superclasse.construtor qualquer da superclasse.

19

Linguagens de Programacão [email protected] 37

PolimorfismoPolimorfismo

Em Java o comportamento padrão dos Em Java o comportamento padrão dos objetos é polimórfico, e a ligação de objetos é polimórfico, e a ligação de métodos ocorre de forma dinâmica (late métodos ocorre de forma dinâmica (late binding).binding).

Conforme veremos adiante, é possível Conforme veremos adiante, é possível modificar este comportamento quando modificar este comportamento quando necessário.necessário.

Linguagens de Programacão [email protected] 38

public class Point {public class Point {......public void print() {public void print() {System.out.println(“Point (”+x+“,”+y+“)”);System.out.println(“Point (”+x+“,”+y+“)”);

}}}}

public class Pixel extends Point {public class Pixel extends Point {......public void print() {public void print() {System.out.println(“Pixel (”+x+“,”+y+“,”+color+“)”);System.out.println(“Pixel (”+x+“,”+y+“,”+color+“)”);

}}}}

Point pt = new Point(); // ponto em (0,0)Point pt = new Point(); // ponto em (0,0)Point px = new Pixel(0,0,0); // pixel em (0,0)Point px = new Pixel(0,0,0); // pixel em (0,0)

pt.print(); // Imprime: “Point (0,0)”pt.print(); // Imprime: “Point (0,0)”px.print(); // Imprime: “Pixel (0,0,0)”px.print(); // Imprime: “Pixel (0,0,0)”

20

Linguagens de Programacão [email protected] 39

Valores ConstantesValores Constantes

Constantes em Java são declaradas Constantes em Java são declaradas através da palavra reservada através da palavra reservada finalfinal..

finalfinal força uma ligação estática entre força uma ligação estática entre um valor e uma variável.um valor e uma variável.class Math {class Math {

final float pi = 3.14; ...final float pi = 3.14; ...

}}

Linguagens de Programacão [email protected] 40

finalfinal e Polimorfismoe PolimorfismoPor razões de eficiência, Java permite a Por razões de eficiência, Java permite a especificação de métodos cuja ligação deve ser especificação de métodos cuja ligação deve ser sempre estática.sempre estática.

Esta especificação é feita através da declaração de Esta especificação é feita através da declaração de um método como um método como finalfinal..public class A {public class A {

public final int f() {public final int f() {

......

}}

}}

21

Linguagens de Programacão [email protected] 41

Type CastingType Casting

O mecanismo de typecasting é importante O mecanismo de typecasting é importante em LPs OO para acessar os métodos em LPs OO para acessar os métodos específicos de objetos polimórficos:específicos de objetos polimórficos:Point pt = new Pixel(0,0,1); Point pt = new Pixel(0,0,1); Pixel px = (Pixel)pt; Pixel px = (Pixel)pt; pt = new Point();pt = new Point();px = (Pixel)pt; px = (Pixel)pt; ERRO! pt agora contém um ponto.ERRO! pt agora contém um ponto.pt = new Pixel(0,0,0);pt = new Pixel(0,0,0);px = pt; px = pt; ERRO! pt não é sempre um pixel.ERRO! pt não é sempre um pixel.

Linguagens de Programacão [email protected] 42

instanceofinstanceof

Permite verificar emPermite verificar em tempo de tempo de execuçãoexecução a a classe classe real de um real de um objetoobjeto..

ExemploExemplo::if (pt instanceof Pixel) {if (pt instanceof Pixel) {

Pixel px = (Pixel)pt; Pixel px = (Pixel)pt;

……

}}

22

Linguagens de Programacão [email protected] 43

Classes AbstratasClasses Abstratas

Java suporta o conceito de métodos e Java suporta o conceito de métodos e classes abstratas através da palavra classes abstratas através da palavra reservada reservada abstractabstract..

Uma classe pode ser declarada abstrata sem Uma classe pode ser declarada abstrata sem conter nenhum método abstrato.conter nenhum método abstrato.

Uma classe que contenha ao menos um Uma classe que contenha ao menos um método abstrato deve sempre ser declarada método abstrato deve sempre ser declarada abstrata. abstrata.

Linguagens de Programacão [email protected] 44

Exemplo de Classe AbstrataExemplo de Classe Abstratapublic abstract class Instrumento {public abstract class Instrumento {

public String nome;public String nome;

......

public abstract void tocar();public abstract void tocar();

public abstract void afinar(int ajuste);public abstract void afinar(int ajuste);

public void getNome() {public void getNome() {

System.out.println(nome);System.out.println(nome);

}}

}}

23

Linguagens de Programacão [email protected] 45

InterfacesInterfacesJava não suporta o mecanismo de herança múltipla. Java não suporta o mecanismo de herança múltipla.

Uma subclasse pode estender apenas uma única Uma subclasse pode estender apenas uma única superclasse.superclasse.

Entretanto Java permite que uma subclasse Entretanto Java permite que uma subclasse implemente várias interfaces.implemente várias interfaces.

Interfaces Java podem ser entendidas como classes Interfaces Java podem ser entendidas como classes abstratas puras, ou seja, classes que contém apenas abstratas puras, ou seja, classes que contém apenas métodos abstratos.métodos abstratos.

Para herdar de uma interface uma subclasse deve Para herdar de uma interface uma subclasse deve ser declarada com a paravra reservada ser declarada com a paravra reservada implementsimplements..

Linguagens de Programacão [email protected] 46

Membros de InterfacesMembros de Interfaces

Uma vez que uma interface não possui Uma vez que uma interface não possui implementação, devemos notar que:implementação, devemos notar que:

seus campos devem ser públicos, estáticos e seus campos devem ser públicos, estáticos e constantes;constantes;

seus métodos devem ser públicos e abstratos.seus métodos devem ser públicos e abstratos.

Como esses qualificadores são fixos, não Como esses qualificadores são fixos, não precisamos declaráprecisamos declará--los. los.

24

Linguagens de Programacão [email protected] 47

ExemploExemplointerface Instrumento {interface Instrumento {

String marca = ‘Yamaha’; String marca = ‘Yamaha’; static e final static e final void tocar(); void tocar(); abstract e publicabstract e publicvoid afinar(int ajuste);void afinar(int ajuste);

}}

class Tambor implements Instrumento{class Tambor implements Instrumento{void tocar(){void tocar(){

......}}

void afinar(int ajuste){void afinar(int ajuste){......

}}}}

Linguagens de Programacão [email protected] 48

InterfacesInterfaces

Apesar de uma interface não ser uma classe, Apesar de uma interface não ser uma classe, podemos declarar variáveis como sendo de podemos declarar variáveis como sendo de um tipo de interface específico.um tipo de interface específico.

Instrumento i = new Tambor();Instrumento i = new Tambor();

A partir daí aplicamA partir daí aplicam--se todas as regras de se todas as regras de polimorfismo e o mecanismo de typecast polimorfismo e o mecanismo de typecast padrão.padrão.

25

Linguagens de Programacão [email protected] 49

InterfacesInterfaces

Uma classe pode concomitantemente Uma classe pode concomitantemente estender uma subclasse e implementar estender uma subclasse e implementar diversas interfaces, de forma análoga ao diversas interfaces, de forma análoga ao mecanismo de herança múltipla.mecanismo de herança múltipla.

Exemplo:Exemplo:public class SuperHomen extends SuperHeroipublic class SuperHomen extends SuperHeroi

implements Voador, VisaoRaioX, SuperForca {implements Voador, VisaoRaioX, SuperForca {......

}}

Linguagens de Programacão [email protected] 50

Programas JavaProgramas Java

A estrutura de um programa Java consiste A estrutura de um programa Java consiste exclusivamente na especificação de classes.exclusivamente na especificação de classes.

A execução de um programa em Java A execução de um programa em Java consiste na execução de uma classe.consiste na execução de uma classe.

Executar uma classe significa executar seu Executar uma classe significa executar seu método estáticométodo estático mainmain..

O método main deve portanto especificar o O método main deve portanto especificar o programa a ser executado.programa a ser executado.

26

Linguagens de Programacão [email protected] 51

Olá Mundo!Olá Mundo!

classclass Mundo {Mundo {

public static void mainpublic static void main(String[](String[] argsargs) {) {

SystemSystem.out..out.printlnprintln(“Olá Mundo!”);(“Olá Mundo!”);

}}

}}

Linguagens de Programacão [email protected] 52

Programas JavaProgramas Java

Um programa em Java usualmente é composto por Um programa em Java usualmente é composto por várias classes.várias classes.

A unidade de compilação em Java é a classe.A unidade de compilação em Java é a classe.

Cada classe deve ser declarada em um arquivo Cada classe deve ser declarada em um arquivo separado tendo como nome o nome da classe separado tendo como nome o nome da classe declarada mais a extensão declarada mais a extensão .java.java..

Por exemplo, o arquivo Por exemplo, o arquivo Tambor.javaTambor.java deve conter a deve conter a definição da classe Tambor.definição da classe Tambor.

27

Linguagens de Programacão [email protected] 53

PacotesPacotes

Para organizar as classes e facilitar a Para organizar as classes e facilitar a modularidade de código, Java suporta o uso modularidade de código, Java suporta o uso de pacotes.de pacotes.

Um pacote é um conjunto de classes e outros Um pacote é um conjunto de classes e outros pacotes.pacotes.

Pacotes permitem a criação de espaços de Pacotes permitem a criação de espaços de nomes, além de mecanismos de controle de nomes, além de mecanismos de controle de acesso. acesso.

Linguagens de Programacão [email protected] 54

PacotesPacotes

O nome do pacote qualifica os nomes de O nome do pacote qualifica os nomes de todas as classes e outros pacotes que o todas as classes e outros pacotes que o compõem, criando portanto um espaço de compõem, criando portanto um espaço de nomes independente.nomes independente.

Se todos as classes declarando instrumentos Se todos as classes declarando instrumentos fossem agrupados no pacote instrumentos, fossem agrupados no pacote instrumentos, poderíamos acessar a classe Tambor através poderíamos acessar a classe Tambor através de uma declaração como:de uma declaração como:instrumentos.Tambor t = new instrumentos.Tambor();instrumentos.Tambor t = new instrumentos.Tambor();

28

Linguagens de Programacão [email protected] 55

PacotesPacotes

Pacotes são tipicamente implementados como Pacotes são tipicamente implementados como diretórios e os arquivos das classes pertencentes ao diretórios e os arquivos das classes pertencentes ao pacote devem ficar em seu diretório.pacote devem ficar em seu diretório.

Hierarquias de pacotes são construídas através de Hierarquias de pacotes são construídas através de hierarquias de diretórios.hierarquias de diretórios.

Por exemplo o pacote Por exemplo o pacote java.tools.instrumentosjava.tools.instrumentos deve deve estar localizado numa hierarquia de diretórios com a estar localizado numa hierarquia de diretórios com a forma forma \\javajava\\toolstools\\instrumentosinstrumentos. .

Linguagens de Programacão [email protected] 56

PacotesPacotes

Para declararmos uma classe como Para declararmos uma classe como pertencente a um pacote devemos:pertencente a um pacote devemos:

DeclaráDeclará--la em um arquivo dentro do la em um arquivo dentro do diretório que representa o pacote; diretório que representa o pacote;

Declarar, na primeira linha do arquivo, que Declarar, na primeira linha do arquivo, que a classe pertence ao pacote, utilizando a classe pertence ao pacote, utilizando para isso a palavra reservada para isso a palavra reservada packagepackage..

29

Linguagens de Programacão [email protected] 57

ExemploExemplopackage instrumentos;package instrumentos;

class Tambor implements Instrumento{class Tambor implements Instrumento{void tocar(){void tocar(){

......}}

void afinar(int ajuste){void afinar(int ajuste){......

}}}}

Linguagens de Programacão [email protected] 58

Encapsulamento RevisitadoEncapsulamento Revisitado

Quando não declaramos explicitamente a visibilidade Quando não declaramos explicitamente a visibilidade dos membros de uma classe, Java assume que a dos membros de uma classe, Java assume que a visibilidade é do tipo “friendly”.visibilidade é do tipo “friendly”.

Membros “friendly” funcionam como Membros “friendly” funcionam como publicpublic para para classes dentro de um pacote e como classes dentro de um pacote e como privateprivate para para classes fora do pacote.classes fora do pacote.

Java disponibiliza ainda o modificador Java disponibiliza ainda o modificador protectedprotected, que , que permite a visibilidade de membros de uma classe permite a visibilidade de membros de uma classe apenas em subclasses desta classe.apenas em subclasses desta classe.

30

Linguagens de Programacão [email protected] 59

Visibilidade de ClassesVisibilidade de Classes

Todas as classes de um pacote Todas as classes de um pacote “enxergam” as demais classes do “enxergam” as demais classes do mesmo pacote.mesmo pacote.

Classes de outros pacotes só são Classes de outros pacotes só são visíveis em uma classe se forem visíveis em uma classe se forem explicitamente importadas através da explicitamente importadas através da declaração declaração importimport..

Linguagens de Programacão [email protected] 60

ExemploExemplopackage instrumentos;package instrumentos;

import Java.util.ArrayList;import Java.util.ArrayList;import meuPacote.*;import meuPacote.*;

class Tambor implements Instrumento{class Tambor implements Instrumento{void tocar(){void tocar(){

......}}void afinar(int ajuste){void afinar(int ajuste){

......}}

}}

importa a classe ArrayListimporta a classe ArrayListdo pacote java.utildo pacote java.util

importa todas as classesimporta todas as classesdo pacote meuPacotedo pacote meuPacote

31

Linguagens de Programacão [email protected] 61

VisibilidadeVisibilidade

É possível declarar uma classe como privada, É possível declarar uma classe como privada, usando o modificador usando o modificador privateprivate..

Neste caso a classe deve ser declarada no mesmo Neste caso a classe deve ser declarada no mesmo arquivo da classe principal que irá utilizar esta arquivo da classe principal que irá utilizar esta classe.classe.

O nome do arquivo é o mesmo da classe principal.O nome do arquivo é o mesmo da classe principal.

Quando uma classe for declarada sem um Quando uma classe for declarada sem um modificador ela será considerada “friendly”.modificador ela será considerada “friendly”.

Linguagens de Programacão [email protected] 62

ExceçõesExceções

Java possui dois tipos de exceções:Java possui dois tipos de exceções:

Checked ExceptionsChecked Exceptions -- são exceções que devem são exceções que devem ser usadas para modelar falhas contornáveis. ser usadas para modelar falhas contornáveis. Devem sempre ser declaradas pelos métodos que Devem sempre ser declaradas pelos métodos que as lançam e precisam ser tratadas (a menos que as lançam e precisam ser tratadas (a menos que explicitamente passadas adiante).explicitamente passadas adiante).

Unchecked ExceptionsUnchecked Exceptions -- são exceções que são exceções que devem ser usadas para modelar falhas devem ser usadas para modelar falhas incontornáveis. Não precisam ser declaradas e incontornáveis. Não precisam ser declaradas e nem tratadas.nem tratadas.

32

Linguagens de Programacão [email protected] 63

ExceçõesExceções

O tratamento de exceções é feito através de O tratamento de exceções é feito através de estruturas de controle delimitadas pelas estruturas de controle delimitadas pelas palavras reservadas palavras reservadas trytry--catchcatch--finally.finally.

Todo trecho de código no qual podem ser Todo trecho de código no qual podem ser lançadas exceções do tipo lançadas exceções do tipo checkedchecked deve ser deve ser declarado dentro de um bloco declarado dentro de um bloco trytry..

As rotinas responsáveis pelo tratamento de As rotinas responsáveis pelo tratamento de exceções são declaradas em um bloco exceções são declaradas em um bloco catchcatch..

Linguagens de Programacão [email protected] 64

ExemploExemploFileReader f = null;FileReader f = null;try {try {

f = new FileReader(args[0]); f = new FileReader(args[0]); ... ...

f.close(); f.close(); }}catch (IOException e){catch (IOException e){

System.out.println(e);System.out.println(e);if (f != null)if (f != null)f.close();f.close();

}}......

abre um arquivo abre um arquivo -- podepodelançar uma exceção dolançar uma exceção dotipo IOtipo IO

captura a exceçãocaptura a exceção

33

Linguagens de Programacão [email protected] 65

ExceçõesExceções

Um bloco Um bloco trytry pode conter vários tratadores de pode conter vários tratadores de exceção.exceção.

O bloco O bloco finallyfinally permite especificar um trecho permite especificar um trecho de código que sempre deve ser executado de código que sempre deve ser executado independentemente da ocorrência de independentemente da ocorrência de exceções.exceções.

Se uma exceção não for tratada pelo bloco Se uma exceção não for tratada pelo bloco que a lançou, ela irá se propagar seguindo a que a lançou, ela irá se propagar seguindo a pilha de chamadas (cadeia dinâmica).pilha de chamadas (cadeia dinâmica).

Linguagens de Programacão [email protected] 66

ExemploExemploFileReader f = null;FileReader f = null;try {try {f = new FileReader(args[0]); f = new FileReader(args[0]); ... ...

}}catch (IOException e){catch (IOException e){System.out.println(e);System.out.println(e);

}}catch (OutraException e){catch (OutraException e){......System.out.println(e);System.out.println(e);

}}finally{finally{if (f != null)if (f != null)f.close();f.close();

}}......

sempre executasempre executa

34

Linguagens de Programacão [email protected] 67

ExemploExemploFileReader f = null;FileReader f = null;try {try {f = new FileReader(args[0]); f = new FileReader(args[0]); ... ...

}}catch (IOException e){catch (IOException e){System.out.println(e);System.out.println(e);

}}catch (OutraException e){catch (OutraException e){......System.out.println(e);System.out.println(e);

}}finally{finally{if (f != null)if (f != null)f.close();f.close();

}}......

sempre executasempre executa

Linguagens de Programacão [email protected] 68

ExceçõesExceções

PodePode--se ainda definir novas exceções se ainda definir novas exceções através da especialização da classe através da especialização da classe ExceptionException ou de qualquer uma de suas ou de qualquer uma de suas subclasses. subclasses.

Métodos que não tratam uma exceção Métodos que não tratam uma exceção do tipo checked devem declarar isso do tipo checked devem declarar isso explicitamente em sua assinatura explicitamente em sua assinatura através do modificador através do modificador throws.throws.

35

Linguagens de Programacão [email protected] 69

ExemploExemplopublic void metodoX() throws IOException{public void metodoX() throws IOException{

FileReader f = null;FileReader f = null;try {try {

f = new FileReader(args[0]); f = new FileReader(args[0]); ... ...

f.close(); f.close(); }}catch (Exception e){catch (Exception e){

System.out.println(e);System.out.println(e);if (f != null)if (f != null)f.close();f.close();trow e;trow e;

}}......

}}

captura qualquer exceçãocaptura qualquer exceção

relança a exceçãorelança a exceção

indica o possível lançamentoindica o possível lançamentodesta exceçãodesta exceção