Esercizio: Lista Circolare
|
|
|
- Romano Di Mauro
- 8 anni fa
- Visualizzazioni
Transcript
1 Esercizio: Lista Circolare Si realizzi in Java un gestore di una lista circolare. La dimensione minima della lista è 2 elementi (ed è anche la dimensione iniziale). La dimensione massima è 20 elementi. Il gestore della lista deve consentire di cercare, aggiungere e rimuovere elementi. Ogni elemento della lista contiene le informazioni su un frame, ossia l elemento base di un flusso di dati multimediali. Il frame può essere audio o video.
2 Esercizio: Lista Circolare Ogni frame audio è caratterizzato da: nome dello stream numero di sequenza (un intero positivo) bitrate (un intero positivo multiplo di 16) codifica (una String tipo MPEG Layer 3, Dolby AAC, ecc.) flag mono/stereo Ogni frame video è caratterizzato da: nome dello stream numero di sequenza (un intero positivo) bitrate (un intero multiplo di 24) standard (una String tipo PAL, HDTV, ecc.) codifica (una String tipo MPEG4, H.264, ecc.)
3 Esercizio: Lista Circolare Inserimento degli elementi: Ogni frame audio può essere inserito nella lista solo se appartiene allo stesso stream ed ha la medesima codifica di quelli già presenti. Analogamente, un frame video può essere inserito solo se ha medesimo nome dello stream, della codifica e dello standard rispetto agli altri elementi della lista. Inoltre, ad ogni frame inserito deve essere associato un numero di sequenza ottenuto incrementando di una unità il numero di sequenza dell ultimo frame dello stesso tipo inserito.
4 Esercizio: Lista Circolare La funzione di inserimento di un frame nella lista circolare deve inoltre garantire che partendo da un certo elemento, sia possibile percorrere l intera struttura osservando un andamento crescente dei numeri di sequenza dei frame dello stesso tipo partendo da qui, i frame hanno numero di sequenza crescente 6 7 n Frame Audio n Frame Video
5 Esercizio: Lista Circolare Ricerca degli elementi: La funzione di ricerca deve permettere la ricerca di un frame sulla base di almeno un parametro distintivo dell oggetto. Ad esempio, il numero di sequenza.
6 Analisi delle specifiche Lista: elenco dinamico di elementi. L attributo dinamico indica che la lista non ha numero fisso di elementi. Nel nostro esempio, sulla lista sono specificati vincoli e proprietà: il numero minimo (2) e massimo (20) di elementi le operazioni che è possibile svolgere sulla lista
7 Analisi delle specifiche La lista deve contenere degli elementi. Gli elementi della lista sono entità che contengono informazioni su altre entità dette Frame. In particolare, sono considerati due tipi specifici di Frame: i Frame Audio i Frame Video
8 Implementazione Dobbiamo implementare tre entità: 1. La lista 2. I nodi della lista 3. I frame, ossia le entità contenute nei nodi.
9 Il Frame Le entità di cui dobbiamo tenere traccia nella lista sono i frame. Sono definiti due tipi di frame, i quali condividono caratteristiche comuni. Frame Frame Audio Frame Video Li modelliamo perciò in Java come sottoclassi di una classe comune.
10 La classe Frame public abstract class Frame { protected String nomestream, codifica; protected int sequencenum, bitrate; public int getbitrate() { return bitrate; public String getcodifica() { return codifica; public String getnomestream() { return nomestream; public int getsequencenum() { return sequencenum; public void setsequencenum(int sequencenum) { this.sequencenum = sequencenum;
11 La sottoclasse AudioFrame public class AudioFrame extends Frame { private boolean isstereo; public AudioFrame(String nomestream, String codifica, int bitrate, boolean stereo) throws FrameException { if ((bitrate % 16!= 0) (bitrate <= 0)) throw new FrameException("wrong audio bitrate"); this.nomestream = nomestream; this.codifica = codifica; this.bitrate = bitrate; isstereo = stereo; public boolean isstereo() { return isstereo;
12 Il Nodo Il nodo è l elemento che costituisce la lista. Ciascun nodo contiene: L oggetto Frame che deve descrivere Il riferimento al nodo successivo node frame node frame next node next node
13 La classe Nodo public class Nodo { private Frame framedata; private Nodo nextnodo; public Nodo(Frame frame) { framedata = frame; public Nodo getnextnodo() { return nextnodo; public void setnextnodo(nodo nextnodo) { this.nextnodo = nextnodo; public Frame getframedata() { return framedata;
14 La classe Lista public class ListaCircolare { private Nodo lastelement; private int nsequencevideoframe, nsequenceaudioframe; private String codificaaudio, codificavideo, stream; public ListaCircolare(Frame firstelement, Frame secondelement) throws ListException { [corpo del costruttore vedi slide successive]
15 La Lista costruttore (1) public ListaCircolare(Frame firstelement, Frame secondelement) throws ListException { if (! firstelement.getnomestream().equalsignorecase( secondelement.getnomestream() ))) throw new ListException("Frame di stream diversi"); lastelement = new Nodo(secondElement); Nodo temp = new Nodo(firstElement); lastelement.setnextnodo(temp); temp.setnextnodo(lastelement);
16 La Lista costruttore (1) Nodo lastelement Nodo temp Frame secondelement nextnodo Fame firstelement nextnodo
17 La Lista costruttore (2) if (firstelement instanceof VideoFrame) { if (secondelement instanceof VideoFrame) { if (!firstelement.getcodifica().equalsignorecase(secondelement.getcodifica() )) throw new ListException("Codifiche video incompatibili"); firstelement.setsequencenum(1); secondelement.setsequencenum(2); nsequencevideoframe = 2; nsequenceaudioframe = 0; else { firstelement.setsequencenum(1); secondelement.setsequencenum(1); nsequencevideoframe = 1; nsequenceaudioframe = 1; codificavideo = firstelement.getcodifica(); codificaaudio = secondelement.getcodifica();
18 La Lista costruttore (3) else { if (secondelement instanceof VideoFrame) { firstelement.setsequencenum(1); secondelement.setsequencenum(1); nsequencevideoframe = 1; nsequenceaudioframe = 1; codificavideo = secondelement.getcodifica(); codificaaudio = firstelement.getcodifica(); else { if (!firstelement.getcodifica().equalsignorecase(secondelement.getcodifica() )) throw new ListException("Codifiche audio incompatibili"); firstelement.setsequencenum(1); secondelement.setsequencenum(2); nsequencevideoframe = 0; nsequenceaudioframe = 2;
19 La Lista inserimento Frame public void insertframe(frame f) throws ListException { if (f instanceof VideoFrame) { if (! f.getcodifica().equalsignorecase(codificavideo)) throw new ListException("Codifica video non compatibile"); f.setsequencenum(++nsequencevideoframe); else { if (! f.getcodifica().equalsignorecase(codificaaudio)) throw new ListException("Codifica audio non compatibile"); f.setsequencenum(++nsequenceaudioframe); Nodo nuovonodo = new Nodo(f); nuovonodo.setnextnodo(lastelement.getnextnodo()); lastelement.setnextnodo(nuovonodo); lastelement = nuovonodo;
20 La Lista inserimento Frame Nodo lastelement Frame secondelement nextnodo Frame firstelement nextnodo Nodo nuovonodo Nodo lastelement Frame f nextnodo
21 La Lista metodo di ricerca public VideoFrame searchvideoframe(int sequencenum) { if (sequencenum > nsequencevideoframe) return null; else { VideoFrame result = null; Nodo temp = lastelement; boolean prosegui = true; while (prosegui) { try { result = (VideoFrame)temp.getNextNodo().getFrameData(); if (result.getsequencenum() == sequencenum) prosegui = false; catch (ClassCastException e) { temp = temp.getnextnodo(); if (temp == lastelement.getnextnodo()) prosegui = false; return result;
22 ArrayList La classe ArrayList implementa un array dinamico, a cui è possibile aggiungere elementi senza che sia stabilita una dimensione massima in pratica, esibisce il comportamento di una lista. Rispetto a Vector (classe del package java.util), i metodi non sono synchronized e pertanto sono più veloci non dovendo garantire la mutua esclusione nell accesso ai dati gestiti dall istanza di Vector ArrayList gestisce internamente un array di Object: possono essere quindi inseriti oggetti di qualunque tipo
23 ArrayList - svantaggi Internamente, ArrayList si poggia su un array classico : nel caso siano inseriti elementi in eccesso, viene generato un nuovo array di dimensioni maggiori in cui sono copiati i valori dell array iniziale per poi aggiungere i nuovi dati. Tale processo può diventare pesante per liste che variano frequentemente ed in maniera significativa Il metodo get(int index) restituisce l elemento in posizione index: essendo però la lista formata da elementi di classe Object, l elemento ritornato è di classe Object e può essere ricondotto alla classe reale (se diversa da Object) attraverso un cast esplicito. Ciò però richiede la conoscenza della classe dell elemento estratto!
24 ArrayList accesso agli elementi ArrayList list = new ArrayList(); Integer numero = new Integer(10); String nome = new String( Diego"); list.add(numero); list.add(nome); Integer recuperanumero = (Integer)list.get(0); String recuperanome = (String)list.get(1); if (list.get(0) instanceof Integer) System.out.println( Numero!"); else System.out.println( Nooooo"); if (list.get(1) instanceof String) System.out.println( Nome! ); else System.out.println( Nooooo );
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList! Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione e rimane immutato.
Esempio su strutture dati dinamiche: ArrayList
Esempio su strutture dati dinamiche: ArrayList Fondamenti di Informatica L-B 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito
Alberi Binario in Java
Alberi Binario in Java Realizzare un albero binario di ricerca. L albero binario è di ricerca se esiste una relazione di ordinamento tra i valori dei nodi (valori comparabili). In particolare, dato un
GESTIONE DEGLI ERRORI
GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori
Polimorfismo parametrico vs polimorfismo per inclusione
Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico
COMPITO DI LABORATORIO DI PROGRAMMAZIONE Dicembre Alcune Soluzioni
COMPITO DI LABORATORIO DI PROGRAMMAZIONE 2001-2002 10 Dicembre 2001 Alcune Soluzioni ESERCIZIO 1. Si consideri il seguente frammento di codice in linguaggio Java: int[][] a = new int[n][n]; for (int i
18 - Vettori. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
18 - Vettori Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it Corso di
Prova d Esame Compito A
Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private static int counter=0; private int code; public
Implementazione ADT: Alberi
Implementazione ADT: Alberi Livelli di astrazione 2001/2002 1 Esercitazione 5 (E6): alberi (tree) albero struttura dati fondamentale, soprattutto per le operazioni di ricerca tipi di albero con radice
La classe java.lang.object
La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita
Alberi. Strutture dati: Alberi. Alberi: Alcuni concetti. Alberi: definizione ricorsiva. Alberi: Una prima realizzazione. Alberi: prima Realizzazione
Alberi Strutture dati: Alberi Strutture gerarchiche di dati Esempi Il file system di un sistema operativo L organigramma di un azienda Alberi generali, alberi n-ari, alberi binari, Ogni nodo ha un unico
Laboratorio 9 ( Java 4 ) Classe astratta per BFS su grafo
Laboratorio 9 ( Java ) Classe astratta per BFS su grafo Testo esercitazione Scaricare il file EseBFS.zip, scompattarlo ed analizzare le classi in esso contenute con particolare attenzione alla classe astratta
Programmazione a oggetti
Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi [email protected] Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software
Diagramma delle classi UML
Università di Roma La Sapienza, Facoltà di Ingegneria Corso di PROGETTAZIONE DEL SOFTWARE (Ing. Gestionale) Prof. Giuseppe De Giacomo, A.A. 2001-02 SOLUZIONE ESAME DEL 25/06/2002 Roma, 23 giugno 2003 1
Riassunto: cos è la OOP? classi astratte, interfacce, classi interne. Scaletta. Figura con area()? Figura senza area()? Stefano Mizzaro 1.
OO in Java: classi astratte, interfacce, classi interne Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro [email protected] Programmazione,
Progettazione del Software
Progettazione del Software Simulazione di esame Domenico Fabio Savo Dipartimento di Ingegneria Informatica, Automatica e Gestionale Antonio Ruberti Sapienza Università di Roma Anno Accademico 2015/2016
19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso
Esercitazione n 2. Obiettivi
Esercitazione n 2 Obiettivi Progettazione di una applicazione Java Utilizzo di classi come schemi Utilizzo di costruttori Utilizzo di stringhe Uguaglianza tra oggetti Utilizzo di classi come componenti
Uguaglianza e copia di oggetti
Uguaglianza e copia di oggetti Sommario 1. Classi Object e Class 2. Uguaglianza superficiale e uguaglianza profonda 3. Copia superficiale e copia profonda 4. Uguaglianza e copia in classi derivate 1 La
