AOT A Object T Lab LABLAB Università degli Studi di Parma · L’ingegneria del software tratta...

28
Agent and Object Technology Lab Dipartimento di Ingegneria dell’Informazione Università degli Studi di Parma AOT AOT LAB LAB Ingegneria del software A Introduzione Michele Tomaiuolo

Transcript of AOT A Object T Lab LABLAB Università degli Studi di Parma · L’ingegneria del software tratta...

Agent and Object Technology LabDipartimento di Ingegneria dell’Informazione

Università degli Studi di Parma

AOTAOTLABLAB

Ingegneria del software A

Introduzione

Michele Tomaiuolo

2

AOTAOTLABLAB Ingegneria del software

L’ingegneria del softwaretratta della realizzazionedi sistemi software didimensioni e complessitàtali da richiedere uno opiù team di persone

La nascita e lo svilupposono una conseguenzadiretta dell’aumento dicomplessità del software

3

AOTAOTLABLAB Alcune possibili definizioni

L’ingegneria del software è l’approccio sistematico allosviluppo, all’operatività, alla manutenzione ed al ritiro delsoftware

L’ingegneria del software è la disciplina tecnologica emanageriale che riguarda la produzione sistematica e lamanutenzione dei prodotti software che vengonosviluppati e modificati entro tempi e costi preventivati

L’ingegneria del software è un corpus di teorie, metodi estrumenti, sia di tipo tecnologico che organizzativo, checonsentono di produrre applicazioni con le desideratecaratteristiche di qualità

4

AOTAOTLABLAB Software e ingegneria classica

Creatività e metodo

Il software è un prodotto dell’ingegno e non di un processoindustriale

Prodotto e processo

L’ingegneria classica (civile, meccanica) progetta il prodotto eanche il processo industriale

L’ingegneria del software (spesso) progetta solo il prodotto e nonutilizza un processo industriale formalizzato

5

AOTAOTLABLAB Cenni storici (1/3)

L’ingegneria delsoftware nasce con laconferenza NATO del1968

Nuovi punti di vistaSoftware crisisSoftware reuseSoftware engineering

6

AOTAOTLABLAB Cenni storici (2/3)

Anni 1990, sviluppodelle tecnologieorientate agli oggettiProgrammazione orientata

agli oggettiUML (Unified Modeling

Language)Design pattern

7

AOTAOTLABLAB Cenni storici (3/3)

Da metà anni 1990,nuove prospettiveWeb, e-commerce InteroperabilitàOpen source

JavaLinguaggio orientato agli

oggettiMulti-piattaformaWeb-orientedBen accettato dalla comunità

dell’open source

8

AOTAOTLABLAB Storia dei linguaggi

http://www.oreilly.com/news/graphics/prog_lang_poster.pdf http://www.levenez.com/lang/history.html http://www.byte.com/art/9509/sec7/art19.htm http://www.princeton.edu/~ferguson/adw/programming_languages.shtml

Linguaggiomacchina

Assembly

FORTRAN

ALGOL

LISPADA

Smalltalk

PascalC

1945 1950 1960

C++Java

1970

BASICCOBOL

Inizi Sistema GUI

1980

SimulaC#

Internet

JavascriptPHP

2000

Prolog

9

AOTAOTLABLAB Ingegneria del software – Outline

Qualità del softwareFasi di sviluppo del software

RequisitiAnalisiProgettazione ImplementazioneTesting

Modello a cascata e modelli iterativiGestione dei progettiApproccio orientato agli oggetti

Dai casi d’uso ai modelli strutturali e comportamentali

Architetture softwareDesign Pattern

10

AOTAOTLABLAB eXtreme Programming

Seminario della prof. Turci

Fallimento di progetti softwareMetodologie agilieXtreme Programming

11

AOTAOTLABLAB Cos’è Java

Insieme di tecnologieLinguaggio orientato agli oggetti che migliora il C++Strumenti sia a compile-time che a run-time

Lancio ufficiale nel 1995Piattaforma sviluppata da Sun MicrosystemsOpen source dal 2006-07, iniziativa OpenJDK

Svincolare software da hardware e sistema operativoSistemi web-oriented

• Inizialmente lato client, oggi principalmente lato server• (Mosaic creato nel 1993)

Sistemi embedded (Green group)Recentemente, sistemi mobili (telefoni cellulari, PDA)

12

AOTAOTLABLAB Java è un insieme di tecnologie

Problema distribuzione su web: programmi strettamentelegati ad una piattaformaPiattaforma: combinazione di hardware e software di sistema

Byte codeUn compilatore Java (javac) non produce codice eseguibile da una

particolare piattaforma, come farebbe un compilatore CA differenza del linguaggio macchina, il byte code Java resta

uguale per tutte le piattaforme

Macchina virtuale (VM)La VM (java) trasforma il byte code in codice nativo

Tutti questi pezzi sono denominati assieme come JavaCompilatore, byte code, macchina virtuale, librerie, linguaggio ecc.

13

AOTAOTLABLAB

Ciclo di vitadi un’applicazione Java

14

AOTAOTLABLAB Java è semplice

Java ha una sintassi simile al C...Ma non è una estensione del C, come il C++Un compilatore Java non accetta codice CModifiche sostanziali per convertire un programma da C a Java

Java è semplice: facile da capire e scrivere (senza errori)Codice C medio, al rilascio, ha un bug ogni 55 righe di codiceJava ha sintassi minima - No “syntactic sugar” (es. operatori)Ma più funzionalità del C, grazie all’ampia libreria di classi

Allocazione e deallocazione automatica della memoriaNiente chiamate a malloc(), free() e distruttoriMetà dei bug in C e C++ sono legati alla gestione della memoria

(allocazione e deallocazione)

Riferimenti controllatiNiente algebra dei puntatori e accessi arbitrari alla memoria

15

AOTAOTLABLAB Java è orientato agli oggetti

Programmazione orientata agli oggettiOrigini negli anni 1960 – SimulaMa diffusione negli anni 1990 – GUI moderneProgramma: collezione di oggettiCampi e metodi, scambio di messaggi, classi ed ereditarietà

Astrazione, programmi più semplici e facili da leggereMigliore riuso del codiceSviluppo e rilascio più veloceCodice modulare, più affidabile e manutenibile

Java è completamente orientato agli oggettiA differenza di Smalltalk ha tipi primitivi

C++ è ibrido, eredita dal C la scarsa leggibilitàPossibilità di produrre codice offuscato

16

AOTAOTLABLAB

Java è indipendentedalla piattaforma

Java è cross-platform Non solo codice sorgente – come C – ma anche bytecode

Portare programmi Java su una nuova piattaforma1. Portare la macchina virtuale (“interprete”)2. Portare parte delle librerie (AWT, I/O, rete…) Compilatore e gran parte delle librerie sono scritte in Java

Eliminazione di costrutti non specificati o dipendentidalla piattaforma Interi sempre a 32 bit Virgola mobile secondo lo standard IEEE 754

17

AOTAOTLABLAB Java è sicuro

Verfica del byte code e sandboxEsecuzione sicura di codice scaricato da fonti non fidateLe applet non possono accedere al disco o alla reteVerifica preventiva sul byte code dell’applet, controlli a run timeAl più, una applet può bloccare la VM, ma non l’intero sistema

No puntatori I programmi Java non possono accedere arbitrariamente alla

memoria

Java ha controllo dei tipi forteSi può convertire un int in long, un byte in short…Ma non un int in booleanControllo su riferimenti e cast tra classi

Gestione delle eccezioni per errori attesi o inattesi

18

AOTAOTLABLAB Java ha buone prestazioni

Il byte code Java può essere compilato al volo (just-in-time) per ottenere prestazioni simili a codice nativo

Esistono compilatori Java (es. gcj) che generano codicenativo per una particolare piattaforma (no VM)

Non si possono limare le prestazioni operando a bassolivello come in C, ma si possono ottenere risultatiadeguati per molti ambiti

Grossi programmi scritti in JavaEclipse (IDE), Limewire (file sharing), HotJava (browser), jEdit (text

editor), JBoss (application server), Tomcat (web server), Xerces(parser XML), the Xalan (processore XSLT), javac (compilatore)

19

AOTAOTLABLAB Java è multi-threaded

Un programma Java può avere diversi thread diesecuzione paralleli

Reazioni rapide all’input dell’utente o alle richieste deiclient

Difficile portare Java su architetture (es. Windows 3.1)che non supportano il preemptive multi-threading

Fonte di bug difficili da trovare (corse, deadlock…)Problema inerente alla programmazione parallelaJava fornisce una API molto semplice per gestire threadMonitor per accesso concorrente alle risorse

20

AOTAOTLABLAB Java ha collegamenti dinamici

Java non ha una fase di link esplicita

Il compilatore…Genera un file di byte code (.class) per ogni classe del programmaRisolve le dipendenze e compila tutte le classi necessarie

Il programma può caricare classi a runtimePer esempio, un browser può caricare alcune appletLe classi necessarie sono cercate e caricate dinamicamente

CLASSPATH, ClassLoader

21

AOTAOTLABLAB

Java libera la memoriaautomaticamente

Garbage collection: la raccolta della spazzatura di Java

Non c’è bisogno di allocare o deallocare la memoriaesplicitamenteLa memoria è allocata quando necessarioViene liberata quando non più utilizzataOggetti sempre in heapCostruttori utili per l’inizializzazione

L’algoritmo usato per la garbage collection è diversosulle varie VM Idea di base: conteggio dei riferimenti, ma cicli…Generational garbage collection per oggetti creati di recenteMark & sweep per gli oggetti più duraturi

22

AOTAOTLABLAB OOP e Java – Outline

Oggetti e classi Incapsulamento e composizioneEreditarietà e polimorfismoDiagrammi UML

Introduzione a JavaCollezioni e tipi genericiInput/outputInterfacce utente

SwingArchitettura MVC

Eccezioni e asserzioniProgrammazione multi-threaded

23

AOTAOTLABLAB Esercitazioni

Laboratorio di informatica di base

Linguaggio JavaLibrerie fondamentali Interfacce grafiche e SwingEccezioni, thread, …

Enfasi su…Analisi e progettazione, modelli UMLRiuso del software, ereditarietà e composizioneDesign-by-contract, eccezioni, asserzioniTestingArchitettureDesign pattern

24

AOTAOTLABLAB Esame

1. Prova scrittaDomande aperte di teoria

a. A fine lezioni, oppure…b. Appelli successivi

2. Prova al PC (in laboratorio)Sviluppo di una applicazione Java

a. A fine lezioni, oppure…b. Appelli successivi

3. La partecipazione attiva alle esercitazioni… Costituisce titolo di merito

25

AOTAOTLABLAB Software

Java SE, JDK 6 (77 MB)http://java.sun.com/

Notepad++ (o Notepad, o qualsiasi editor di testo)http://notepad-plus.sourceforge.net/

Eclipse IDE for Java Developers (85 MB)http://www.eclipse.org/

Omondohttp://www.eclipsedownload.com/

JUnithttp://www.junit.org

Anthttp://ant.apache.org/

26

AOTAOTLABLAB Materiale on-line

Slide del corsohttp://www.ce.unipr.it/people/tomamic

JavaDocumentazione API e tools, tutorial, convenzioni sul codice…http://java.sun.com/javase/6/docs/

EckelThinking in JavaThinking in Patterns (with Java)http://www.mindview.net/Books/

27

AOTAOTLABLAB Testi consigliati

Sommerville (Prentice-Hall, 2006)Software Engineering

Pressman (McGraw-Hill, 2004)Software Engineering: A Practitioner's Approach

Damiani, Madravio (Pearson Education, 2003)UML Pratico

Gamma et al. (Pearson Education, 2002)Design Patterns

Kruchten (Pearson Education, 2000)Rational Unified Process

28

AOTAOTLABLAB Come potete contattarmi?

Ufficio: Palazzina 1 – Sede Scientifica IngegneriaViale G. Usberti 181/A

Tel: 0521 90 5712

Fax: 0521 90 5723

E-mail: [email protected]

Web: http://www.ce.unipr.it/people/tomamic