La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Intelligenza Artificiale Breve introduzione a Java (ed alla rappresentazione ad oggetti) Marco Piastra.

Presentazioni simili


Presentazione sul tema: "Intelligenza Artificiale Breve introduzione a Java (ed alla rappresentazione ad oggetti) Marco Piastra."— Transcript della presentazione:

1 Intelligenza Artificiale Breve introduzione a Java (ed alla rappresentazione ad oggetti) Marco Piastra

2 Breve introduzione a Java - 2 Marco Piastra Argomenti 1.Modello astratto e modello implementativo nei linguaggi di programmazione 2.Modello astratto: rappresentazione ad oggetti 3.Modello implementativo: macchina virtuale 4.Aspetti particolari: - gestione implicita della memoria (garbage collection); - multithreading; - programmazione distribuita.

3 Breve introduzione a Java - 3 Marco Piastra 1 Modello astratto e modello implementativo nei linguaggi di programmazione

4 Breve introduzione a Java - 4 Marco Piastra Il progetto di un linguaggio Da tener presente: un ‘linguaggio di programmazione’ è progettato in riferimento ad modello implementativo specifico; il progetto del linguaggio include un rilevante aspetto teorico, cioè un modello astratto (e.g. il concetto di variabile); i due aspetti sono strettamente correlati.

5 Breve introduzione a Java - 5 Marco Piastra Il progetto di un linguaggio (2) Scelta di un modello astratto: –entità di base della programmazione (e.g. variabili globali, variabili locali, array, puntatori, funzioni). –modo di descrivere i programmi (e. g. programmazione strutturata); –linguaggio (inteso come unione di una sintassi ed una semantica formale); Scelta di un modello implementativo: –tecniche di compilazione (e.g. compilazione parziale) e di linking; –esecuzione a run-time (e.g. gestione della memoria, gestione dello stack delle chiamate); –possibilità di estensione (librerie specifiche).

6 Breve introduzione a Java - 6 Marco Piastra Origini di Java e C (e C++) I due linguaggi hanno origini diverse Il C (ed il C++) derivano dagli studi sui linguaggi per la realizzazione di sistemi operativi (e.g. Unix) e software di base (e.g. database server) Java deriva (in gran parte) dai linguaggi sviluppati per l’intelligenza artificiale Infatti, ad esempio: –anche se la sintassi assomiglia a quella del C++; –il modello ad oggetti e l’idea della macchina virtuale e del bytecode provengono dallo Smalltalk-80; –l’idea dei package proviene dal Common Lisp.

7 Breve introduzione a Java - 7 Marco Piastra Creare un programma in C Tipicamente: –si creano uno o più moduli (file) di codice sorgente; –si utilizzano librerie standard e/o librerie specifiche; –il compilatore traduce il codice sorgente in un formato binario; –il linker combina il prodotto della compilazione con le librerie. CompilatoreLinker #include... main(int argc, char **argv) {... initialize(argv[0]); run(argv[1], argv[2]); if (!errno) printf(”Done.\n”); else exit(errno); } Codice sorgente Librerie Programma eseguibile cc Binario

8 Breve introduzione a Java - 8 Marco Piastra Un interprete di programmi Tipicamente: –non si produce un programma eseguibile indipendente; –il codice sorgente viene tradotto in un formato binario; –il collegamento tra ‘pezzi’ di programma viene fatto ‘al volo’; –le operazioni effettive vengono eseguite dall’interprete. ;; File fattoriale.lisp (defun fattoriale (par) (if (eq par 0) ;; then (return 0) ;; else (return (* par (fattoriale (- par 1))))) ) Codice sorgente LoaderLinker Librerie Binario Lisp> (load “fattoriale.lisp”) Done. Lisp> (fattoriale 2) 2 Listener Interprete Common Lisp

9 Breve introduzione a Java - 9 Marco Piastra Differenze di paradigma In C: –la sintassi è concepita per favorire i controlli di correttezza; –le entità principali sono statiche (e.g. variabili globali, array, funzioni) e si usano tecniche esplicite per la gestione della memoria dinamica (i.e. malloc e free ); –un programma compilato ed eseguibile è di fatto immutabile. In un linguaggio interpretato (e.g. Common Lisp) : –la sintassi è concepita per facilitare la scrittura dl codice; –le entità principali sono dinamiche, e.g. liste di elementi; –la composizione di un programma è definita dallo stato dell’interprete al momento dell’esecuzione.

10 Breve introduzione a Java - 10 Marco Piastra 2 Il modello astratto di Java: rappresentazione ad oggetti

11 Breve introduzione a Java - 11 Marco Piastra Un modello ad oggetti L’idea informale: rappresentare le entità della programmazione come aggregazioni di variabili e metodi struttura comportamento codice titolare saldo interesse fido saldoAttuale ContoCorrente deposita ritira modificaFido modificaInteresse metodi variabili Esempio: Agli inizi, qualcuno ha suggerito l’idea di circuiti integrati software

12 Breve introduzione a Java - 12 Marco Piastra Scambio di messaggi Il flusso dell’esecuzione viene visto come un flusso di messaggi Componenti di un messaggio: –un riferimento al ricevente; –il nome del metodo; –i parametri. Oggetto A Oggetto B ricevente.nomeMetodo(parametri) messaggio Ciclista Bicicletta bici.cambiaRapporto(2) Esempio: bici

13 Breve introduzione a Java - 13 Marco Piastra Classi Descrivere gli oggetti uno ad uno è poco vantaggioso. Infatti: –ogni oggetto richiederebbe una descrizione specifica; –la grande varietà ostacolerebbe la comunicazione. Al contrario, una classe è uno schema generale per la creazione di oggetti simili: –la struttura degli oggetti è descritta come schema; –il comportamento degli oggetti è definito in modo effettivo. struttura comportamento metodi effettivi dichiarazione delle variabili

14 Breve introduzione a Java - 14 Marco Piastra Classi e istanze: ContoCorrente class ContoCorrente { String codice; String titolare; float saldo;... void deposita(float somma) { saldo += somma; } void preleva(float somma) { saldo -= somma; } } codice titolare saldo deposita ContoCorrente ritira N58AB Lino AA54Z Pino N58AB Gino istanza di Operatore c3.deposita(50) c2.preleva(275) c1.deposita(31) istanza di

15 Breve introduzione a Java - 15 Marco Piastra Ereditarietà L’idea di base è quella di classificare gli oggetti mettendo a fattor comune le analogie Animale VertebratoInvertebrato PesceAnfibioRettileUccelloMammifero CarnivoroErbivoro Attenzione: la gerarchia dipende dallo scopo

16 Breve introduzione a Java - 16 Marco Piastra Ereditarietà in Java Le sottoclassi ereditano la struttura (intesa come schema) ed il comportamento dalle superclassi class Alfa { String var1; void method1() {... } } var1 Alfa method1 class Beta extends Alfa { String var2; void method2() {... } } var1 var2 Beta method1 method2 var1 var2 var3 Gamma method1 method3 method2 class Gamma extends Beta { String var3; void method3() {... } }

17 Breve introduzione a Java - 17 Marco Piastra Struttura di classi Un programma Java è rappresentato da una gerarchia di classi La classe Object è la radice di tale gerarchia Object A1A1 A2A2 B1B1 B2B2 B3B3 B4B4 B5B5 C1C1 Generalità Specializzazione class A2 extends A1{... } class A1 {... }

18 Breve introduzione a Java - 18 Marco Piastra Uso di una struttura di classi Per classificare, ovvero strutturare le differenze –nella pratica, si usa raramente Per fattorizzare, ovvero per scrivere meno codice Bicicletta Bicicletta MultirapportoBicicletta Elettrica Bicicletta da StradaMountain Bike codice titolare saldo deposita ContoCorrente ritira calcolaInteresse ContoFamiglia ContoIO ContoManager

19 Breve introduzione a Java - 19 Marco Piastra Uso di una struttura di classi Per disaccoppiare aspetti diversi di uno stesso programma –e rendere lo stesso programma più facile da estendere –a questo scopo si usano spesso anche le interfacce contenuto estrai Oggetto Trasmissibile inserisci TestoVideoImmagine... mentre le specializzazioni ulteriori sono pertinenti in altre parti del programma Un ipotetico sistema di trasmissione usa solo questo livello della gerarchia...

20 Breve introduzione a Java - 20 Marco Piastra Oscuramento dei metodi (Detto anche overriding) In una sottoclasse si può oscurare un metodo definito in una superclasse con una nuova definizione. class Bicicletta {... void cambiaRapporto(int r) {... } } class MountainBike extends Bicicletta {... void cambiaRapporto(int r) {... } } La compatibilità con la segnatura definita nella superclasse viene preservata (polimorfismo) Ciclista Bicicletta bici.cambiaRapporto(2) bici

21 Breve introduzione a Java - 21 Marco Piastra Specializzazione dei metodi (Detta anche overloading) La ‘risposta’ di un oggetto ad un messaggio può dipendere dal tipo dei parametri class Zoofilo extends Persona {... void accarezza(Gattino g) { affettuosamente } void accarezza(Tigre t) { col pensiero } void accarezza(Object o) { informati prima } } La selezione è automatica in base alla segnatura Spiritoso Zoofilo amico.accarezza(animaleSconosciuto) amico

22 Breve introduzione a Java - 22 Marco Piastra Tipo delle variabili In Java ogni variabile deve avere un tipo dichiarato In prima approssimazione, vi sono due categorie di tipi: –tipi primitivi: int, float, byte short, long, double, char, boolean ); –riferimenti ad oggetti (i.e. Object o sottoclasse). class Ciclista extends Persona { int mediaKmAlGiorno; Bicicletta bici;... void allenamento() { int rapporto;... bici.cambiaRapporto(rapporto); } } valore riferimento “Romano Prodi” 70 Bicicletta riferimento

23 Breve introduzione a Java - 23 Marco Piastra Come si scrive un metodo In prima approssimazione, un metodo Java è molto simile ad una funzione C: –dichiarazione formale: nome del metodo, tipo di valore ritornato, nome e tipo dei parametri formali; –gli operatori sono quelli del C (e.g. +, *, =, +=, ==, !=,...); –le istruzioni di controllo sono quelle del C (i.e., if, else, switch, for, while, do ); –l’istruzione di ritorno è return. class Aritmetica { long fattoriale(long arg) { if (arg == 0) { return 1L; } else { long temp; temp = arg * this.fattoriale(arg - 1); return temp; } } }

24 Breve introduzione a Java - 24 Marco Piastra Classi come oggetti In Java anche le classi sono oggetti Quindi anche le classi: –rispondono ai messaggi; –hanno variabili (di classe); –hanno metodi (di classe). Per definire le entità di classe si usa la parola chiave static class Aritmetica { static float piGreco = ; static long fattoriale(long arg) {... } } Alle classi si può fare riferimento per nome Aritmetica fattoriale Aritmetica.fattoriale(33)

25 Breve introduzione a Java - 25 Marco Piastra Nota: per chi conosce il C++ In C++ si usa la parola chiave static con lo stesso significato Ma in C++, le classi non sono oggetti ma solo dichiarazioni a beneficio del compilatore Conseguenza notevole: in Java si può determinare a run-time la classe di un oggetto, in C++ no. class Zoofilo extends Persona {... void accarezza(Object obj) { if (obj instanceof Serpente) { no grazie } else if (obj instanceof Pesciolino) { volentieri, ma come? }... } } codice ContoCorrente N58AB istanza di obj.getClass()

26 Breve introduzione a Java - 26 Marco Piastra Protezioni L’accesso alle entità di classe o di istanza può essere protetto In Java vi sono quattro livelli di protezione e tre parole chiave: – public accesso senza restrizioni – protected solo nello stesso package o nelle sottoclassi – packagesolo nello stesso package – private solo nella classe class ContoCorrente { private float saldo;... float saldo(Persona richiedente) { if (richiedente.autorizzato()) return saldo; else nega informazione } } class MountainBike extends Bicicletta { void cambiaRapporto(int r) { attivaProtezione(); super.cambiaRapporto(); disattivaProtezione(); } private void attivaProtezione() {...} private void disattivaProtezione() {...} }

27 Breve introduzione a Java - 27 Marco Piastra Protezioni: esempio class Automobile { // attributi di classe static int numeroDiRuote = 4; static public boolean haTarga = true; static private Vector archivio; // attributi di istanza public String marca; public String colore; public int annoDiImmatricolazione; public String targa; public int numero DiCavalli; protected Persona titolare; private int rapporto; // metodi di classe static protected void inserisciInArchivioAutoveicoli(Automobile a) { archivio.addElement(a); }... // metodi di istanza public void cambiaRapporto(int r) {... rapporto = r; } public int rapporto() { return rapporto; } }

28 Breve introduzione a Java - 28 Marco Piastra Costruttori Un oggetto Java viene sempre creato tramite un metodo speciale detto costruttore Ogni classe ha uno o piu` costruttori Valgono i principi di ereditarieta`, di specializzazione e di oscuramento class ContoCorrente { ContoCorrente() { generico } ContoCorrente(Persona richiedente) { intestato } } class ContoAziendale extends ContoCorrente { ContoAziendale() { // Oscuramento generico } ContoAziendale(Azienda richiedente) { // Specializzazione intestato } }

29 Breve introduzione a Java - 29 Marco Piastra Pseudo-variabili Nei metodi di istanza, è possibile utilizzare le pseudo-variabili this e super this fa riferimento all’istanza stessa –si usa per evitare ambiguità super fa riferimento all’istanza stessa come se appartenesse alla superclasse –si usa per evitare ambiguità e per specializzare metodi class Ciclista extends Persona { Bicicletta bici; boolean dimmiSeTua(Bicicletta bici) { return this.bici = bici; } } class ContoCorrente { float saldo; void deposita(float somma) { saldo += somma; } } class ContoAziendale { RegistroCassa registro; void deposita(float somma) { super.deposita(somma); registro.annotaEntrata(somma); } }

30 Breve introduzione a Java - 30 Marco Piastra Interfacce L’idea di base è quella di un contratto tra oggetti, una sorta di visibilità limitata Fisco Persona contribuente.dichiaraImponibile(1998) interfaccia Contribuente interface Contribuente { float dichiaraImponibile(int anno); } class Ingegnere extends Persona implements Contribuente {... float dichiaraImponibile(int anno) {... } }

31 Breve introduzione a Java - 31 Marco Piastra Uso delle interfacce Le interfacce contengono solo: –la dichiarazione di metodi (come signature); –la definizione di costanti Le interfacce sono un tipo valido per le variabili Le interfacce possono essere organizzate in strutture ad eredità multipla Una classe può implementare un numero qualsiasi di interfacce class Ingegnere extends Persona implements Contribuente, MembroOrdineIngegneri, PersonaTipicamenteNoiosa,... {... }

32 Breve introduzione a Java - 32 Marco Piastra Tipi in Java I tipi di dati in Java sono organizzati in quattro categorie: –tipi primitivi ( char, boolean, byte, int, long, short, float, double ) –le classi (i.e. Object e tutte le sue sottoclassi) –le interfacce –gli array (dei tre tipi precedenti) Non esistono invece i tipi: –puntatori –funzioni

33 Breve introduzione a Java - 33 Marco Piastra Gestione delle eccezioni La gestione delle eccezioni in Java è un sistema per governare il flusso dell’esecuzione a seguito di errori –di fatto, sostituisce l’unico uso sensato della goto –(che in Java non esiste) class Spiritoso extends Persona {... void proponi(Zoofilo amico) { try { amico.accarezza(...); } catch (MaTuSeiMattoException e) { // Evidentemente, non gradisce }... } } class Zoofilo extends Persona {... void accarezza(Object obj) { if (obj instanceof ScorpioneVelenoso) { throw new MaTuSeiMattoException(); }... } }

34 Breve introduzione a Java - 34 Marco Piastra Eccezioni Le eccezioni sono organizzate come una gerarchia di classi; L’abbinamento throw / catch si stabilisce in base al tipo; Esistono eccezioni checked (i.e. che vengono controllate dal compilatore) ed eccezioni uncheked. class Zoofilo extends Persona {... void accarezza(Object obj) throws MaTuSeiMattoException { if (obj instanceof ScorpioneVelenoso) { throw new MaTuSeiMattoException(); }... } } ThrowableExceptionRuntimeExceptionMaTuSeiMattoException

35 Breve introduzione a Java - 35 Marco Piastra 3 Il modello implementativo di Java: macchina virtuale

36 Breve introduzione a Java - 36 Marco Piastra Modello implementativo Le classi compilate in bytecode sono portabili su qualsiasi macchina per cui esista una macchina virtuale Java Il programma finale viene assemblato a run-time (i.e. linking tra le classi) e dipende quindi dall’ambiente di esecuzione Quindi: –si possono costruire programmi indipendenti dalla piattaforma hardware e software (purchè esista una macchina virtuale) –le classi compilate in bytecode assomigliano a componenti software ricombinabili a piacere

37 Breve introduzione a Java - 37 Marco Piastra Bytecode non è un codice direttamente eseguibile ma è un codice (binario) per una macchina virtuale (cioè un interprete) che si incarica della esecuzione effettiva Macchina reale (e.g. PC Intel con Linux)Macchina virtuale java Classe in bytecode

38 Breve introduzione a Java - 38 Marco Piastra... void spin() { int i; for (i = 0; i < 100; i++) { // Loop body is empty } iconst_0 // Push int constant 0 1 istore_1 // Store into local variable 1 (i=0) 2 goto 8 // First time through don't increment 5 iinc 1 1 // Increment local variable 1 by 1 (i++) 8 iload_1 // Push local variable 1 (i) 9 bipush 100 // Push int constant if_icmplt 5 // Compare and loop if less than (i < 100) 14 return // Return void when done... Bytecode (2) metodo in Java bytecode compilato (in forma simbolica)

39 Breve introduzione a Java - 39 Marco Piastra Compilazione In Java la compilazione è: –parziale (ciascuna classe viene compilata separatamente) –con verifica (di correttezza sintattica e di tipo) Compilatore File “Alfa.java” javac Alfa.java Classe in bytecode class Alfa { String var1; void method1() {... } } File “Alfa.class” Librerie Classe in bytecode Verifica CLASSPATH Altre classi compilate

40 Breve introduzione a Java - 40 Marco Piastra Programma Un programma Java è un insieme di classi Generalmente tale insieme è chiuso, ma è potenzialmente aperto La composizione di questo insieme è stabilita dalla macchina virtuale a run-time Macchina virtuale java nomeClasse Classe in bytecode CLASSPATH ClassLoader Classe in bytecode CLASSPATH

41 Breve introduzione a Java - 41 Marco Piastra Bootstrap dell’esecuzione La macchina virtuale Java esegue come prima cosa il metodo main della classe di bootstrap class Copia {... static void main(String[] args) { if (args.length ” System.exit(0); } else { copia(args[0], args[1]); }... } Macchina virtuale java Copia DaUnFile.txt AUnAltroFile.txt Copia.class CLASSPATH

42 Breve introduzione a Java - 42 Marco Piastra Package L’idea originale (Common Lisp) è quella di un sistema per organizzare i simboli nomi comuni come ad esempio “Persona” sono facilmente usati in più programmi i package possone essere utilizzati per contestualizzare il nome di una classe o interfaccia package it.unipv; PersonaStudente package it.unipv.admin; Dipendente package it.ministeroDelleFinanze; PersonaContribuente

43 Breve introduzione a Java - 43 Marco Piastra Package (2) L’idea originale (Common Lisp) è di un sistema di organizzazione dei simboli: –si usa quindi una notazione qualificata composta da un prefisso e da un simbolo esempio: it.unipv.Persona –la pseudo-istruzione package definisce il package di riferimento –la pseudo-istruzione import serve ad abbreviare i riferimenti simbolici package it.unipv.esercitazioniAI; import it.unipv.Persona; class StudenteDelCorsoAI extends Persona {... }

44 Breve introduzione a Java - 44 Marco Piastra Packages & directories In Java il sistema dei package è anche un modo per organizzare le classi (sia.java che.class): –la struttura del prefisso viene trasformata in percorso nel file system : it.unipv.Persona diventa $CLASSPATH/it/unipv/Persona (.java o.class) –i classloader della macchina virtuale (i.e. java ) e del compilatore (i.e javac ) usano le stesse convenzioni.

45 Breve introduzione a Java - 45 Marco Piastra 4 Altri aspetti particolari di Java: garbage collection, multithreading, programmazione distribuita

46 Breve introduzione a Java - 46 Marco Piastra Allocazione dinamica della memoria In C la memoria dinamica deve essere gestita in modo esplicito Errori comuni: –mancata allocazione –mancata deallocazione In C++ gli oggetti sono allocati dinamicamente In C++ esistono delle entità standard per facilitare la gestione (costruttori, distruttori)

47 Breve introduzione a Java - 47 Marco Piastra Allocazione dinamica in Java In Java tutte le entità sono allocate dinamicamente (e.g. non esistono variabili globali) Tuttavia, solo l’allocazione della memoria (intesa come creazione di oggetti) è gestita esplicitamente La deallocazione è gestita dalla macchina virtuale (garbage collection)

48 Breve introduzione a Java - 48 Marco Piastra Mark and Sweep Un algoritmo di garbage collection che prevede l’interruzione dell’esecuzione Si usa quando gli oggetti sono molti e globalmente accessibili Obj01F5 Obj0F32 Obj054A Obj0102 Obj0987 Obj0B60 Obj0E4F Obj0740 Obj01C3 Mark Obj0102 Obj0987 Obj0B60 Obj01C3 Sweep

49 Breve introduzione a Java - 49 Marco Piastra Mark and Sweep (2) Il principale punto di partenza per la fase di mark è lo stack Stack (stadio n) class Test { static void main(String[] args) { Test t = new Test(); t.test(3); } void test(int n) { if (n == 0) return; Test t = new Test(); t.test(n - 1); } } Test01.t(3)Test tTest02.t(2)Test tTest03.t(1)Test t Test04.t(0) Test04 Test03 Test02 Test01 GCTest.mainTest t Stack (stadio n + 4) Test04 Test03 Test02 Test01 GCTest.mainTest t null

50 Breve introduzione a Java - 50 Marco Piastra Reference Counting Un algoritmo di garbage collection che non prevede l’interruzione dell’esecuzione Si usa quando gli oggetti sono pochi e/o non raggiungibili globalmente (e.g. sistema distribuito) Obj01F5(1) Obj0F32(0) Obj054A(1) Obj0102(1) Obj0987(1) Obj0B60(2) Obj0B60(1) Obj0E4F(1) Obj0740(1) Obj01C3(1) Reference Counting

51 Breve introduzione a Java - 51 Marco Piastra Multithreading Un thread è un flusso di controllo sequenziale in un programma –un thread viene talvolta anche chiamato lightweight process Ogni thread possiede delle risorse private (e.g. stack e pc) tuttavia i thread di un programma condividono lo stesso spazio di indirizzamento Thread1Thread2 Obj0B60 Obj0987Obj01C3 Processo

52 Breve introduzione a Java - 52 Marco Piastra Sincronizzazione Il multithreading non è utilizzabile in pratica senza la possibilità di sincronizzare i thread In Java ciascun oggetto può comportarsi come un monitor: –un monitor è un insieme di procedure relative ad una singola entità (i.e. un oggetto Java); –un monitor implementa il principio di mutua esclusione: solo un thread alla volta può eseguire una procedura. ContoCorrente preleva(y) deposita(x) coda di attesa TTT

53 Breve introduzione a Java - 53 Marco Piastra Interfacce remote Il principio di base è quello di inviare messaggi a distanza Macchina Virtuale A servente interfaccia (funzioni) Macchina Virtuale B cliente (rete) proxy ricevente.nomeMetodo(parametri) Macchina Virtuale cliente ricevente.nomeMetodo(parametri) servente interfaccia (funzioni)

54 Breve introduzione a Java - 54 Marco Piastra Proxy & Skeleton L’effetto viene ottenuto usando due componenti software (solitamente generate automaticamente): –che simulano la presenza del servente in B –e trasmettono le chiamate remote in A servizio interfaccia (funzioni) cliente proxy stub skeleton descrizione IDL Macchina Virtuale B Macchina Virtuale A

55 Breve introduzione a Java - 55 Marco Piastra Sottorete A servente Sottorete B (iiop) ORB cliente stub skeleton CORBA Common Object Request Broker Architecture La comunicazione tra applicazioni non è diretta ma è mediata

56 Breve introduzione a Java - 56 Marco Piastra skeleton ORB servente nome Naming Service Il Naming Service serve a pubblicare oggetti serventi a beneficio dei potenziali clienti –gli oggetti servente vengono registrati in base ad un nome simbolico –i clienti possono ‘agganciare’ i serventi usando questo nome –il Naming Service è solitamente realizzato da un processo separato

57 Breve introduzione a Java - 57 Marco Piastra Modello industriale Java non nasce da un progetto accademico o non-profit I requisiti di progetto di Java sono quindi: –tecnici; –ingegneristici; –di contesto (cioè di mercato). I requisiti tecnici sono evidenti nel progetto del modello astratto I requisiti ingegneristici sono evidenti nel modello implementativo e nell’idea di piattaforma (Per capire i requisiti di mercato, si pensi a chi comanda il gioco)

58 Breve introduzione a Java - 58 Marco Piastra L’idea di piattaforma Uno dei grossi problemi della costruzione software dal punto di vista ingegneristico è la grande quantità di aspetti dipendenti da una piattaforma specifica (e.g. Windows NT, Linux) In questo senso, la storia dei linguaggi di programmazione registra numerosi insuccessi: –il Pascal fu definito senza specificare le funzioni di I/O; –il C (ed il C++) hanno un insieme di librerie standard limitato (e.g. non c’è grafica o networking); –il modello astratto di Common Lisp e Prolog è poco adatto alla gestione grafica interattiva (e.g. multithreading).

59 Breve introduzione a Java - 59 Marco Piastra Java come piattaforma Macchina virtuale Classe in bytecode java.lang Classe in bytecode java.math Classe in bytecode java.io Classe in bytecode java.util Classe in bytecode java.awt Classe in bytecode java.rmi Classe in bytecode java.security Classe in bytecode java.sql Classe in bytecode javax.servlet Classe in bytecode javax.ejb Classe in bytecode java.rmi Classe in bytecode java.beans Classe in bytecode...

60 Breve introduzione a Java - 60 Marco Piastra Per Ulteriori Approfondimenti Tutorial on-line –http://www.javasoft.com/docs/books/tutorial –Consigli: »saltare (in prima lettura) la parte sulle applet »seguire (come minimo): Learning the Java Language, Essential Java Classes, Collections. »consigliati: Creating a GUI, Java Beans Libri –Arnold, K., Gosling, J., The Java Programming Language - Second Edition, Addison-Wesley, –Bishop, J., Java Gently - Second Edition, Addison-Wesley, 1998.


Scaricare ppt "Intelligenza Artificiale Breve introduzione a Java (ed alla rappresentazione ad oggetti) Marco Piastra."

Presentazioni simili


Annunci Google