Breve introduzione a Java (2) (ed alla programmazione ad oggetti)

Slides:



Advertisements
Presentazioni simili
Ambiente Java.
Advertisements

Programmazione in Java
1 Introduzione ai calcolatori Parte II Software di base.
Costruttori e Distruttori
Linguaggi di programmazione
Massa Laura Mela Enrica
1 Informatica Generale Susanna Pelagatti Ricevimento: Mercoledì ore presso Dipartimento di Informatica, Via Buonarroti,
Gestione del processore
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
Generalità Linguaggio e Macchina Astratta
LIP: 1 Marzo 2005 Classe Object e Vettori. Partiamo da Lesercizio dellultima esercitazione realizzato tramite array Vedremo come si puo fare in modo piu.
Fondamenti di Informatica
Semantiche dei linguaggi di programmazione
Programma Dott. Ing. Leonardo Rigutini
Distributed Object Computing
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Terza parte: Programmazione ad oggetti in Java. Cosè Java Linguaggio di programmazione definito dalla Sun Obiettivo: sviluppo di applicazioni sicure,
Costruzione di Interfacce Lezione 12 C++STL
Introduzione al linguaggio C++ 5 lezioni
1 Corso di Laurea in Biotecnologie Informatica (Programmazione) Introduzione a JAVA Anno Accademico 2009/2010.
Corso di Informatica (Programmazione)
Introduzione al linguaggio Java
eliana minicozzi linguaggi1a.a lezione2
Gestione dei Progetti Software 2 (a.a. 2004/05) - Lezione 3 1 JAVA e Internet: il World Wide Web Internet: milioni di computer collegati fra di loro attraverso.
Struttura dei sistemi operativi (panoramica)
I Thread.
Software di base Il sistema operativo è un insieme di programmi che opera sul livello macchina e offre funzionalità di alto livello Es.organizzazione dei.
Approfondimento delle classi
CAPITOLO 4 LINGUAGGIO JAVA: COSTRUTTI DI BASE. ALFABETO Java adotta la codifica standard Unicode della società Unicode, Inc. (ftp://ftp.unicode.org) definito.
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
nome: sequenza di caratteri usata per denotare un oggetto
memoria gestita staticamente:
Sistemi Operativi GESTIONE DEI PROCESSI.
Espressioni condizionali
Elaborazione di Franco Grivet Chin
Argomenti della lezione
IL CONCETTO DI PACKAGE Una applicazione è spesso composta di molte classi (eventualmente correlate) Un package è un gruppo di classi che costi- tuiscono.
Programmazione in Java
JAVA Franco Bombi 8 ottobre FB Introduzione Java è un linguaggio di impiego generale, basato su classi e orientato agli oggetti Java.
Java Contardi Carlo A.S. 2008/09.
Unità Didattica 3 Linguaggio C
Java come linguaggio di programmazione
Programmazione concorrente
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Fopndamenti di programmazione. 2 La classe String Una stringa è una sequenza di caratteri La classe String è utilizzata per memorizzare caratteri La classe.
Fondamenti di Programmazione Prof.ssa Elisa Tiezzi
1 Applet ed HTML Fondamenti di Informatica Corso D.
I nomi in Java F. Bombi 18 novembre novembre 2003.
Appunti di Java (J2SDK 1.4.2, JDK 1.6.0) prof. Antonella Schiavon settembre 2009.
Threads.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Astrazione procedurale ed eccezioni
Fondamenti di Informatica II Ingegneria Informatica / Automatica (A-I) Meccanica Prof. M.T. PAZIENZA a.a – 3° ciclo.
Introduzione. Introduzione Un’applet Java: Una applet ("applicazioncina") è una applicazione non autonoma, ma pensata per far parte di una pagina Internet.
Programmazione ad oggetti
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di informatica Oggetti e Java Luca Cabibbo Luca Cabibbo – Fondamenti di informatica: Oggetti e Java Copyright © 2004 – The McGraw-Hill Companies.
1 novembre I nomi in Java F. Bombi 1 novembre 2002.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
© Copyright NTT DATA Italia – All Rights Reserved The information contained in this document is the property of NTT DATA Italia S.p.A. and the addressee.
Gestione dei thread in Java
Programmazione Attività di progettazione ed implementazione di programmi I programmi permettono di realizzare funzioni complesse su un hardware in grado.
1 Macchine astratte, linguaggi, interpretazione, compilazione.
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
1 Linguaggi: guardando la semantica §esistono un insieme di concetti semantici e di strutture di implementazione in termini dei quali si descrivono in.
Introduzione alle Classi e agli Oggetti in Java 1.
Transcript della presentazione:

Breve introduzione a Java (2) (ed alla programmazione ad oggetti) Marco Piastra

Argomenti 1. Modello astratto e modello implementativo (in un linguaggio di programmazione) 2. Modello astratto: rappresentazione ad oggetti 3. Modello implementativo: macchina virtuale 4. Aspetti particolari: - gestione implicita della memoria (garbage collection) - multi-threading; - programmazione distribuita.

Il modello implementativo di Java: macchina virtuale 3 Il modello implementativo di Java: macchina virtuale

Modello implementativo Le classi compilate in bytecode sono portabili su qualsiasi macchina per cui esista una macchina virtuale Java (Java Virtual Machine – JVM) 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

Macchina reale (e.g. PC Intel con Linux) Bytecode non è un codice direttamente eseguibile ma è un codice (binario) per una macchina virtuale (cioè un interprete) che si incarica dell’esecuzione effettiva Classe in bytecode Macchina virtuale java Macchina reale (e.g. PC Intel con Linux)

Bytecode (2) metodo in Java bytecode compilato (in forma simbolica) ... void spin() { int i; for (i = 0; i < 100; i++) { // Loop body is empty } ... 0 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 100 11 if_icmplt 5 // Compare and loop if less than (i < 100) 14 return // Return void when done ... bytecode compilato (in forma simbolica)

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

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 Classe in bytecode ClassLoader java nomeClasse Macchina virtuale Classe in bytecode Classe in bytecode CLASSPATH CLASSPATH

Bootstrap dell’esecuzione La macchina virtuale Java esegue come prima cosa il metodo main della classe di bootstrap La strategia di caricamento delle altre classi può dipendere dall’implementazione della macchina virtuale java Copia DaFile.txt AFile.txt class Copia { ... static void main(String[] args) { if (args.length < 2) { System.out.println( ”Uso: Copia <from> <to>” System.exit(0); } else { copia(args[0], args[1]); } ... } Copia.class Macchina virtuale Copia.class CLASSPATH

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; package it.ministeroDelleFinanze; Persona package it.unipv.admin; Persona Dipendente Contribuente Studente

Package (2) L’idea originale (Common Lisp) è di un sistema di organizzazione dei simboli: uso di una notazione qualificata composta da un prefisso e da un simbolo esempio: it.unipv.Persona ogni file (classe o interfaccia) appartiene ad un package di riferimento (il package di default è il package ‘root’) all’inizio di ciascun file, 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 { ... }

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.

4 Altri aspetti particolari di Java: garbage collection, multithreading, programmazione distribuita

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)

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)

Garbage collection: Mark and Sweep Un algoritmo di garbage collection che prevede l’interruzione dell’esecuzione in una prima fase (mark) si marcano tutti gli oggetti accessibili in una seconda fase (sweep) si rimuovono gli oggetti non marcati (e si rimuove il marcatore dagli altri) Si usa quando gli oggetti sono molti e globalmente accessibili Obj054A Obj0F32 Mark Obj0102 Obj0987 Obj0B60 Obj01C3 Sweep Obj0B60 Obj0B60 Obj0102 Obj01F5 Obj0987 Obj0740 Obj01C3 Obj0E4F

Mark and Sweep: accessibilità Il principale punto di partenza per la fase di mark è lo stack Test04 Stack (stadio n) Test03 Test04.t(0) null Test03.t(1) Test t Test02 Test02.t(2) Test t Test01.t(3) Test t Test01 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); } } GCTest.main Test t Test04 Test03 Test02 Stack (stadio n + 4) Test01 GCTest.main Test t

Garbage collection: Reference Counting Un algoritmo di garbage collection che non prevede l’interruzione dell’esecuzione si incrementa/decrementa un contatore quando un oggetto viene referenziato/dereferenziato vengono rimossi gli oggetti con contatore a zero Si usa quando gli oggetti sono pochi e/o non raggiungibili globalmente (e.g. sistema distribuito) Obj054A(1) Obj0F32(0) Reference Counting Obj0B60(2) Obj0B60(1) Obj0102(1) Obj01F5(1) Obj0987(1) Obj0740(1) Obj01C3(1) Obj0E4F(1)

Multi-threading Un thread è un flusso di controllo sequenziale in un programma un thread viene talvolta anche chiamato lightweight process Ogni thread possiede delle risorse private (tipicamente stack e pc) ... ... tuttavia i thread di un programma condividono lo stesso spazio di indirizzamento Thread1 Thread2 Obj0B60 Obj0987 Obj01C3 Processo

Sincronizzazione Il multi-threading 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 in Java è unmonitor un oggetto che implementa almeno un metodo synchronized ContoCorrente preleva(y) deposita(x) coda di attesa T

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)

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).

Java come piattaforma Macchina virtuale Classe in bytecode java.util java.io Classe in bytecode java.rmi Classe in bytecode java.lang Classe in bytecode java.math Classe in bytecode java.sql Classe in bytecode javax.servlet Macchina virtuale Classe in bytecode java.awt Classe in bytecode java.rmi Classe in bytecode javax.ejb Classe in bytecode java.beans Classe in bytecode ... Classe in bytecode java.security

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, 1998. Bishop, J., Java Gently - Second Edition, Addison-Wesley, 1998.