• Non ci sono risultati.

Sezione: Packages. package. Packages. Una collezione di classi correlate. Programmazione /2003 Università degli Studi di Trento

N/A
N/A
Protected

Academic year: 2022

Condividi "Sezione: Packages. package. Packages. Una collezione di classi correlate. Programmazione /2003 Università degli Studi di Trento"

Copied!
16
0
0

Testo completo

(1)

Sezione: Packages

Packages

package

Una collezione di classi correlate

package myclasses;

class A {...};

class B {...};

import myclasses.A;

import myclasses.*;

(2)

Annidamento di package

package myclasses;

class A {...};

package myclasses;

class B {...};

package myclasses.veryUsefulClasses;

class C {...};

import myclasses.*; // NON importa C!

Definizione suggerita di un nomeunivocoper i packages:

È basata sul nome internet (es.: it.unitn.science.mypackage)

Annidamento di package

I packages si riflettono in una struttura di directories

myclasses

A.class B.class veryUsefulClasses

C.class

(3)

Sezione: Costruttori

Costruttori

Definizione dei costruttori

Se per una classe A non scrivo nessun

costruttore, il sistema automaticamente crea il costruttore A();

Se invece definisco almeno un costruttore non

void, ad es. A(int s), il sistema non crea il

costruttore A();

(4)

Definizione dei costruttori

Se B è figlia di A, il costruttore di B come prima cosa invoca A(), a meno che la prima istruzione non sia una super.

B(int k) { super(k)...

}

A(int k) { ...

} A() {

...

}

B(int k) { ...

}

Invocazione dei costruttori

public class A { public A() {

System.out.println("Creo A");

} }

public class B extends A { public B() {

System.out.println("Creo B");

}

public B(int k) {

System.out.println("Creo B_int”);

} }

Output:

Creo A Creo B_int

public static void main(String [] a) { B b=new B(1);

}

(5)

Invocazione dei costruttori

public class A { public A(int k) {

System.out.println("Creo A");

} }

public class B extends A { public B() {

System.out.println("Creo B");

}

public B(int k) {

System.out.println("Creo B_int”);

} }

Output:

ERRORE ! Perchè ?

public static void main(String [] a) { B b=new B(1);

}

Sezione: Modificatori

Abstract e Controllo di accesso

(6)

Modificatori: abstract

Classi dichiarate abstract non possono essere istanziate, e devono essere subclassate.

Metodi dichiarati abstract devono essere sovrascritti

Una class non abstract non può contenere abstract metods

Modificatori: visibilità

public visibile da tutti

(non def.) visibile da tutti nello stesso package protected visibile dalle sottoclassi

private nascosta da tutti

public class ACorrectClass { private String aUsefulString;

public String getAUsefulString() { return aUsefulString; // "get" the value

}

private void setAUsefulString(String s) { //protected void setAUsefulString(String s) {

aUsefulString = s; // "set" the value

Uso di metodi “di accesso”:

(7)

Sezione: Upcast - downcast

Upcast & downcast

Coercion

Una funzione può essere polimorfa senza essere stata disegnata tale intenzionalmente.

Sia f una funzione che prende un argomento di tipo T, e S sia un tipo che può essere automaticamente

convertito in T. Allora f può essere detta polimorfa respetto a S e T.

float somma(float x, float y) accetta anche

somma (3, 3.14) somma(2,3)

(coercion di int a float)

(8)

public class Test {

public static void main(String a[]) { new Test();

}

cast

Test() { A a;

B b = new B();

a=b;

a.f1();

a.f2();

} }

OK: upcast implicito

class A { void f1() {System.out.println("f1");} } class B extends A { void f2()

{System.out.println("f2");} } class C extends B { void f3()

{System.out.println("f3");} }

NO: "method f2 not found in class A"

(compiler)

public class Test {

public static void main(String a[]) { new Test();

}

cast

Test() { A a;

B b = new B();

a=b;

a.f1();

((B)a).f2();

} }

class A { void f1() {System.out.println("f1");} } class B extends A { void f2()

{System.out.println("f2");} } class C extends B { void f3()

{System.out.println("f3");} }

OK: upcast implicito

OK: downcast corretto

(9)

public class Test {

public static void main(String a[]) { new Test();

}

cast

Test() { A a;

B b = new B();

a=b;

a.f1();

((C)a).f3();

} }

class A { void f1() {System.out.println("f1");} } class B extends A { void f2()

{System.out.println("f2");} } class C extends B { void f3()

{System.out.println("f3");} }

OK: upcast implicito

NO: downcast illecito (runtime) java.lang.ClassCastException

Type conversion - cast

Si può applicare cast SOLO all’interno di una gerarchia di ereditarietà

È consigliabile usare l'operatore instanceof per verificare prima effettuare un downcast

if (staff[1] instanceof Manager) { Manager n = (Manager)staff[1];

...

}

(10)

Eccezioni

Try – catch - finally

try {

System.out.println("Dammi un intero");

i=Integer.parseInt(s.readLine());

System.out.println("Hai scritto "+i);

}

catch (Exception e) {e.printStackTrace();}

finally { doSomethingInEveryCase() }

(11)

throws

Ogni frammento di codice che lancia una

eccezione DEVE essere contenuto in un blocco try-catch

OPPURE

stare nel corpo di un metodo che “throws” una eccezione

do() throws SomeException { ...

}

throw

Le eccezioni possono essere generate dall’istruzione throw.

throw(new SomeException());

(12)

Input da tastiera

Lettura di stringhe

import java.io.*;

public class A { public A() {

BufferedReader s = new BufferedReader(

new InputStreamReader(System.in));

try {

System.out.println("Dammi una stringa");

String str=s.readLine();

System.out.println("Hai scritto "+str);

}catch (IOException e){

e.printStackTrace();

} }

public static void main(String [] ar) { A a=new A(); }

Dammi una stringa abracadabra

Hai scritto abracadabra

(13)

Lettura di int

public A() { int i=0;

BufferedReader s = new BufferedReader(

new InputStreamReader(System.in));

try {

System.out.println("Dammi un intero");

i=Integer.parseInt(s.readLine());

System.out.println("Hai scritto "+i);

}catch (Exception e) {e.printStackTrace();}

}

Dammi un intero 2

Hai scritto 2

Lettura di int

public A() { int i=0;

BufferedReader s = new BufferedReader(

new InputStreamReader(System.in));

try {

System.out.println("Dammi un intero");

i=Integer.parseInt(s.readLine());

System.out.println("Hai scritto "+i);

}catch (IOException e) {e.printStackTrace();}

}

Dammi un intero pippo

java.lang.NumberFormatException: For input string: "gh"

at

java.lang.NumberFormatException.forInputString(NumberFormatException.ja va:48)

at java.lang.Integer.parseInt(Integer.java:426) at java.lang.Integer.valueOf(Integer.java:532) at pila.A.<init>(A.java:11)

(14)

Lettura di float

public A() {

float f=0; boolean error;

BufferedReader s = new BufferedReader(

new InputStreamReader(System.in));

try { do {

System.out.println("Dammi un float");

try{

error=false;

f=Float.parseFloat(s.readLine());

} catch (NumberFormatException e) { error=true;

System.out.println("Input non valido");

}

} while (error);

System.out.println("Hai scritto "+f);

}catch (IOException e) {e.printStackTrace();}

}

Dammi un float pippo

Input non valido Dammi un float 3

Hai scritto 3.0

Fondamenti di Java

Introduzione alla costruzione di GUI

Pluggable Look & Feel

(15)

Pluggable Look&Feel

Scelta del Look&Feel

public static void main(String[] args) { try {

UIManager.setLookAndFeel(

UIManager.getCrossPlatformLookAndFeelClassName());

} catch (Exception e) { }

new SwingApplication(); //Create and show the GUI.

}

UIManager.getCrossPlatformLookAndFeelClassName() Returns the Java look and feel.

UIManager.getSystemLookAndFeelClassName()

Specifies the look and feel for the current platform.

(16)

Scelta del Look&Feel

public static void main(String[] args) { try {

UIManager.setLookAndFeel(

"com.sun.java.swing.plaf.gtk.GTKLookAndFeel");

} catch (Exception e) { }

new SwingApplication(); //Create and show the GUI.

}

UIManager.getSystemLookAndFeelClassName(String s) Specifies the look and feel for the platform described by

“s”.

Available Look&Feel

"com.sun.java.swing.plaf.gtk.GTKLookAndFeel"

Specifies the GTK+ look and feel. Introduced in release 1.4.2.

"javax.swing.plaf.metal.MetalLookAndFeel"

Specifies the Java look and feel.

"com.sun.java.swing.plaf.windows.WindowsLookAndFeel"

Specifies the Windows look and feel. Currently, you can use this look and feel only on Microsoft Windows

systems.

"com.sun.java.swing.plaf.motif.MotifLookAndFeel"

Specifies the CDE/Motif look and feel. This look and

feel can be used on any platform.

Riferimenti

Documenti correlati

Il seminario è libero e rivolto principalmente ad agricoltori che coltivano cultivar locali tradizionali, operatori di fatto- ria didattica e a coloro che operano nel

Dai boccioli di rosa persiana provenienti dagli altopiani iraniani, viene ricavato il prezioso olio essenziale che caratterizza tutta la linea degli esclusivi prodotti

L’aggiudicataria, specie in relazione alle plurime risoluzioni, ha formulato in modo reticente e omissivo le proprie dichiarazioni sul possesso dei requisiti generali per indurre in

Se, dunque, neppure la violazione del principio di corrispondenza tra chiesto e pronunciato, anche ove si sia tradotta nella mancanza totale di pronuncia da parte del primo giudice

“La situazione rilevata dai Carabinieri del Nas nelle sedi di continuità assistenziale non ci stupi- sce - ha dichiarato Tommasa Maio, segretario nazionale di Fimmg Conti-

Le Camere di Commercio sono da sempre un partner strategico dei Confidi e hanno contribuito alla sostenibilità del sistema privato della garanzia in Italia, a favore delle

L’esecuzione di tale esame prevede una serie di prove tra cui la stimolazione dell’organo vestibolare tramite l’introduzione di acqua tiepida nell’orecchio esterno. Tale prova

e per gli atti richiesti ai soli fini istruttori, l’identicità dei contenuti delle copie informatiche dei documenti allegati alla precitata pratica con gli originali