Domanda Risolto Esercizio esame

Stato
Discussione chiusa ad ulteriori risposte.

elcondor

Utente Bronze
28 Settembre 2020
48
13
3
24
Esercizio di esame.

      • Un elemento multimediale è una immagine, un filmato o una registrazione audio identificato da un titolo (una stringa non vuota).
      • Un elemento è riproducibile se ha una durata (un valore positivo di tipo int) e un metodo play()
      • Una registrazione audio è riproducibile e ha associato anche un volume (un valore positivo di tipo int) e i metodi weaker() e louder() per regolarlo. Se riprodotta, ripete per un numero di volte pari alla durata la stampa del titolo concatenato a una sequenza di punti esclamativi di lunghezza pari al volume (una stampa per riga).
      • Un filmato è riproducibile e ha associato un volume regolabile analogo a quello delle registrazioni audio e anche una luminosità (un valore positivo di tipo int) e i metodi brighter() e darker() per regolarla. Se riprodotta, ripete per un numero di volte pari alla durata la stampa del titolo concatenato a una sequenza di punti esclamativi di lunghezza pari al volume e poi a una sequenza di asterischi di lunghezza pari alla luminosità (una stampa per riga).
      • Un'immagine non è riproducibile, ma ha una luminosità regolabile analoga a quella dei filmati e un metodo show() che stampa il titolo concatenato a una sequenza di asterischi di lunghezza pari alla luminosità
      • Eseguire un oggetto multimediale significa invocarne il metodo show() se è un'immagine o il metodo play() se è riproducibile.
    • Organizzare opportunamente con classi astratte, interfacce e classi concrete il codice di un lettore multimediale che memorizza 5 elementi (creati con valori letti da tastiera) in un array e poi chiede ripetutamente all'utente quale oggetto eseguire (leggendo un intero da 1 a 5 oppure 0 per finire) e dopo ogni esecuzione fornisce la possibilità di regolarne eventuali parametri (volume / luminosità).


Messaggio unito automaticamente:

Non facile da fare per chi è alle prime armi
 
Ciao! Ti consiglio di esplicitare i tuoi dubbi e se possibile, di pubblicare una bozza del codice così che anche gli altri utenti possano aiutarti
 
Beh in effetti è un pò lunghetto come esercizio, son più classi astratte e interfacce. Penso l'esercizio sia chiaro, ma lo svolgimento ..... non proprio di facile svolgimento.
 
Esercizio molto carino.

Allora qual'è esattamente il punto di questo thread?
Hai domande particolari o ti basta risolvere l'intero esame?
 
Si NumLock, molto carino, volevo risolverlo ovviamente.
Capisco che è lungo come esercizio. Ho fatto qualcosa con le classi, tipo filmato, multimedia, audio. Ci sono classi astratte e interfacce. Ovviamente ognuno risolve a proprio modo l'esercizio.
Il menù con array non riesco.
Cercvao un aiuto tutto qui, capisco che postare l'intero esercizio non è semplice.
Grazie lo stesso.
 
Ciao @elcondor,

come abbiamo già fatto in altri thread in questo forum, possiamo darti degli "hint" giusto per non farti uscire dalla carreggiata. Se no non impari nulla dall'esercizio e il lavoro del forum rimane il mero condividere codice.

Ritornando al codice, prima di tutto devi definire una classe "madre" che descriva un file Multimediale e che poi estenda alcune proprietà e metodi.
In questo caso FileMultimediale è una classe astratta (non creerai mica un oggetto FileMultimediale senza formato, no?) quindi sai già che dovrai da essa estendere i vari casi. Puoi anche vederla come una interfaccia, i due metodi sono abbastanza simili tranne che per qualche peculiarità che in questo esercizio non occorre.

Vedo un'altra ereditarietà ovvero tra Audio e Video (hanno lo stesso campo int volume e i metodi louder() e weaker()). Quindi stessa cosa qui, dovrai estendere uno per implementare un altro.

Comincia intanto a scindere il grande esercizio in esercizi più piccoli e vedi che piano piano si risolvono e si concatenano, completando il tutto.
In teoria, se questo è un esercizio d'esame, ti dovrebbero chiedere anche la rappresentazione a blocchi degli oggetti (gerarchia).

Fammi sapere se serve una migliore interpretazione.
MP

Ref: https://albertoferrari.github.io/oop-Java/lezioni/OOPJava-06-ereditarietaPolimorfismo.pdf
(La prima cosa che ho trovato su Internet, lol).
Messaggio unito automaticamente:

Ciao @elcondor,

come abbiamo già fatto in altri thread in questo forum, possiamo darti degli "hint" giusto per non farti uscire dalla carreggiata. Se no non impari nulla dall'esercizio e il lavoro del forum rimane il mero condividere codice.

Ritornando al codice, prima di tutto devi definire una classe "madre" che descriva un file Multimediale e che poi estenda alcune proprietà e metodi.
In questo caso FileMultimediale è una classe astratta (non creerai mica un oggetto FileMultimediale senza formato, no?) quindi sai già che dovrai da essa estendere i vari casi. Puoi anche vederla come una interfaccia, i due metodi sono abbastanza simili tranne che per qualche peculiarità che in questo esercizio non occorre.

Vedo un'altra ereditarietà ovvero tra Audio e Video (hanno lo stesso campo int volume e i metodi louder() e weaker()). Quindi stessa cosa qui, dovrai estendere uno per implementare un altro.

Comincia intanto a scindere il grande esercizio in esercizi più piccoli e vedi che piano piano si risolvono e si concatenano, completando il tutto.
In teoria, se questo è un esercizio d'esame, ti dovrebbero chiedere anche la rappresentazione a blocchi degli oggetti (gerarchia).

Fammi sapere se serve una migliore interpretazione.
MP

Ref: https://albertoferrari.github.io/oop-Java/lezioni/OOPJava-06-ereditarietaPolimorfismo.pdf
(La prima cosa che ho trovato su Internet, lol).


EDIT: L'ultima parte ti chiede di avere un array del tipo FileMultimediale[] lettore come tipologia di oggetto. Questo è uno dei punti finali quindi pensaci per ultimo e concentrati a sviluppare le singole classi.
 
  • Mi piace
Reazioni: elcondor
Il menù funziona ma non so se è giusto così:

Java:
import java.util.Scanner;

public class TestMultimedia {

    public static void main(String[] args) {
        System.out.println("LETTORE MULTIMEDIALE");
        Scanner in = new Scanner(System.in);
        Multimedia[] multi = new Multimedia[5];
        int scelta = 0;
        do {
            System.out.println("=============");
            System.out.println("    MENU   ");
            System.out.println("=============");
            System.out.println("Scegli elemento multimediale: ");
            System.out.println("1) Foto ");
            System.out.println("2) Filmato  ");
            System.out.println("3) Audio  ");
            System.out.println("4) Filmato  ");
            System.out.println("5) Filmato ");
            System.out.println("0) ESCI ");
            scelta = in.nextInt();
            switch (scelta) {

            case 1:
                multi[0] = new Immagine("foto");
                Immagine immagine = new Immagine("Foto");
                immagine.darker(3);
                immagine.show();
                break;

            case 2:
                multi[1] = new Filmato("Filmato", 6, 10, 8);
                Filmato filmato1 = new Filmato("Filmato", 6, 10, 10);
                filmato1.darker(4);
                filmato1.weaker(15);
                filmato1.play();
                break;

            case 3:
                Audio audio = new Audio("Audio", 15, 8);
                audio.louder(4);
                audio.play();
                break;

            case 4:
                Filmato filmato2 = new Filmato("Filmato", 6, 10, 10);
                filmato2.darker(4);
                filmato2.weaker(15);
                filmato2.play();
                break;

            case 5:
                Filmato film = new Filmato("Filmato", 6, 10, 10);
                film.darker(4);
                film.weaker(15);
                film.play();
                break;
            }
        } while (scelta != 0);
        System.out.println("exit");
    }
}
 
Mi sembra corretto!

Ora che hai fatto il main, devi costruire le classi degli oggetti che hai definito nel main.

Parti prima dalla classe madre (Multimediale) per poi scendere.
Forse c'è un errore nell'array ma lo vedremo più avanti, facciamo che lo stai facendo in modo "guidato".

MP
 
Ultima modifica:
EDIT. Errato. Ti faccio sapere.

MP
Messaggio unito automaticamente:

Leggendo attentamente la traccia dell'esame, dovresti:

- Creare un array Multimedia ed inserirci file multimediali tramite input dell'utente. Quindi dovrai chiedere 5 volte all'utente che tipologia di file vuole inserire e logicamente i dati richiesti (se vuole una immagine si richieda il titolo, si crea l'oggetto e si inserisce all'interno del vettore e così via..). Questa può essere definita la fase di inizializzazione del vettore multi.

- Dopo aver opportunamente riempito il vettore di 5 elementi, si fa un loop come hai fatto te con la scelta e in base ad ogni caso dovresti chiedere all'utente che cosa vuole fare con la scelta. Se ha scelto l'opzione 2 ed è una immagine, chiederai se vuole utilizzare il metodo show() oppure tornare indietro al menù principale per la scelta del file multimediale (si ritorna al loop infinito condizionato dalla scelta != 0.

Se le classi dei singoli file multimediali sono corretti, la parte di OOP è conclusa e ti richiede solo una parte di progettazione su "Che diavolo deve fare sto programma?!".

MP
Messaggio unito automaticamente:

La prima parte dovresti codificarla come segue:
Java:
Multimedia[] multi = new Multimedia[5] // 5 file multimediali
int tipologia = 0;
String titolo;
for (i=0; i<5; i++)
{
    System.out.println("Che tipologia di file multimediale vuoi inserire?");
    tipologia = in.nextInt();
    if(tipologia == 1) //Immagine per esempio
    {
        System.out.println("Inserire titolo dell'Immagine");
        titolo = in.readLine();
        multi[i] = new Immagine(titolo)
    }
        else if(tipologia == 2) // Audio per esempio
        {
            System.out.println("Inserire titolo dell'Audio");
            titolo = in.readLine();
            System.out.println("Inserire Volume dell'Audio");
            int audio = in.nextInt();
            multi[i] = new Immagine(titolo, audio)   
        }
    ...
            
}
// Il ciclo verrà fatto 5 volte inserendo 5 file multimediali
 
Si certo che sono d'accordo , si condivide sempre ... Un grazie al forum, organizzato alla grande, e a MichPower per la sua generosa disponibilità.
A presto altri esercizi ovviamente
IL SAPERE APPARTIENE AL MONDO
 
Ultima modifica da un moderatore:
Ecco una delle soluzioni
Java:
CLASSE MULTIMEDIA
package LettoreMultimediale;
import java.util.Scanner;
public abstract class Multimedia {
    private String titolo;

    public Multimedia(String titolo) {
        this.titolo = titolo;
    }

    public String getTitolo() {
        return titolo;
    }

    public void setTitolo(String titolo) {
        this.titolo = titolo;
    }

    public void start() {

    }

    public void editSettings(Scanner in)
    {

    }

}

CLASSE LUMINOSITA'
public interface Luminosita {

    void brighter(int bright);
    void darker(int dark);
}

CLASSE IMMAGINE
import java.util.Scanner;
public class Immagine extends Multimedia implements Luminosita{
    private int luminosita;

    public Immagine(String titolo, int luminosita) {
        super(titolo);
        this.luminosita = luminosita ;
    }

    public void editSettings(Scanner in)
    {
        int luminosita;
        System.out.println("Inserire nuovo valore di Luminosità per " + getTitolo());
        luminosita = in.nextInt();
        in.nextLine();
        if (this.luminosita > luminosita)
            darker(luminosita);
        else
            brighter(luminosita);
    }

    public void show() {
        String asterischi = "";
        for (int a = 0; a < this.luminosita; a++) {
            asterischi += "*";
        }
        System.out.println(getTitolo() + " " + asterischi);
    }

    [USER=93960]@override[/USER]
    public void brighter(int bright) {
        if (bright > this.luminosita) this.luminosita = bright;
        else System.out.println("valore inserito inferiore o uguale");
    }

    [USER=93960]@override[/USER]
    public void darker(int dark) {
        if (dark < this.luminosita) this.luminosita = dark;
        else System.out.println("valore inserito superiore o uguale");
    }



}
CLASSE VOLUME
public interface Volume {
    void weaker(int weak);
    void louder(int loud);
}

CLASSE AUDIO
import java.util.Scanner;
public class Audio extends Multimedia implements Volume{
    private int volume;
    private int durata;

    public Audio(String titolo, int volume, int durata) {
        super(titolo);
        this.volume = volume;
        this.durata = durata;
    }

    public void start()
    {
        play();
    }

    /*per facilitare il menù. modifica parametri
    dell'oggetto indipendentemente se audio o video */
        public void editSettings(Scanner in) {
  
        int volume = 0;
        System.out.println("Inserire il nuovo valore di Volume per " + getTitolo());
        volume = in.nextInt();
        in.nextLine();
        if (this.volume > volume)
            weaker(volume);
        else
            louder(volume);
    }

    public void play() {
        String esclamativo = "";
        String durata = "";
        for (int a = 0; a < this.volume; a++) {
            esclamativo += "!";
        }
        for (int a = 0; a < this.durata; a++) {
            durata += getTitolo();
        }
        System.out.println(durata + " " + esclamativo);
    }

    [USER=93960]@override[/USER]
    public void weaker(int weak) {
        this.volume = weak;

    }

    [USER=93960]@override[/USER]
    public void louder(int loud) {
        this.volume = loud;

    }

}
CLASSE FILMATO
import java.util.Scanner;
public class Filmato extends Multimedia implements Volume, Luminosita{
    private int luminosita;
    private int volume;
    private int durata;

    public Filmato(String titolo, int luminosita, int volume, int durata) {
        super(titolo);
        this.luminosita = luminosita;
        this.volume = volume;
        this.durata = durata;
    }

    public void editSettings(Scanner in)
    {
        int luminosita,volume;
        System.out.println("Inserire nuovo valore di Luminosità per " + getTitolo());
        luminosita = in.nextInt();
        in.nextLine();
        if (this.luminosita > luminosita)
            darker(luminosita);
        else
            brighter(luminosita);

        System.out.println("Inserire il nuovo valore di Volume per " + getTitolo());
        volume = in.nextInt();
        in.nextLine();
        if (this.volume > volume)
            weaker(volume);
        else
            louder(volume);
    }

    public void play() {
        String asterischi = ""; String esclamativo = ""; String durata = "";
        for (int a = 0; a < this.luminosita; a++) {
            asterischi += "*";
        }
        for (int a = 0; a < this.volume; a++) {
            esclamativo += "!";
        }
        for (int a = 0; a < this.durata; a++) {
            durata += getTitolo();
        }
        System.out.println(durata + " " + esclamativo + " " + asterischi);
    }

    [USER=93960]@override[/USER]
    public void brighter(int bright) {
        this.luminosita = bright;

    }

    [USER=93960]@override[/USER]
    public void darker(int dark) {
        this.luminosita = dark;

    }

    [USER=93960]@override[/USER]
    public void weaker(int weak) {
        this.volume = weak;

    }

    [USER=93960]@override[/USER]
    public void louder(int loud) {
        this.volume = loud;
    }


}

IL TEST
public class Test {

    public static void main(String[] args) {
        String titolo;
        int initialVolume = 8; // scegliere
        int initialLuminosita = 5; // scegliere
        int tipologia, durata;

        System.out.println("LETTORE MULTIMEDIALE");
        System.out.println("Ciao! In questo momento riempiremo il lettore con 5 file multimediali!");
        Scanner in = new Scanner(System.in);
        Multimedia[] multi = new Multimedia[5];
        for (int i = 0; i < 5; i++) {
            // flag variabile booleana//
            boolean flag = true;
            while (flag) {
                System.out.println("Che tipologia di file multimediale vuoi inserire? (1 Immagine 2 Audio 3 Video)");
                System.out.println("Hai inserito " + i + " file multimediali.");
                tipologia = in.nextInt();
                in.nextLine();
                switch (tipologia) {

                case 1:
                    System.out.println("Inserire titolo immagine.");
                    titolo = in.nextLine();
                    multi[I] = new Immagine(titolo, initialLuminosita);
                    flag = false;
                    break;
                case 2:
                    System.out.println("Inserire titolo Audio. ");
                    titolo = in.nextLine();
                    System.out.println("Inserire durata Audio " + titolo + ".");
                    durata = in.nextInt();
                    in.nextLine();
                    multi[I] = new Audio(titolo, initialVolume, durata);
                    flag = false;
                    break;
                case 3:
                    System.out.println("Inserire titolo Video. ");
                    titolo = in.nextLine();
                    System.out.println("Inserire durata Video " + titolo + ".");
                    durata = in.nextInt();
                    in.nextLine();
                    multi[I] = new Filmato(titolo, initialLuminosita, initialVolume, durata);
                    flag = false;
                    break;
                default:
                    System.out.println("Selezione errata! ");
                    break;
                }
            }
        }

        // Fine inizializazzione menu

        int scelta = 0;
        while (true) {

            System.out.println("Scegli un elemento multimediale da 1-5. Inserisci 0 per uscire!");
            System.out.println("=============");
            System.out.println("    MENU   ");
            for (int i = 0; i < 5; i++) {

                System.out.println((i + 1) + ")" + multi[I].getTitolo());
            }
           
            System.out.println("=============");

            scelta = in.nextInt();
            in.nextLine(); // Flusha input
            if (scelta == 0) System.exit(1);
            System.out.println("exit");

            multi[scelta - 1].start();
            System.out.println("Ho eseguito i tuoi ordini. Vuoi modificare qualcosa del file multimediale? [Y/N]");
            String choice = in.nextLine();
            if (choice.equals("Y"))
                multi[scelta - 1].editSettings(in);
        }
    }
}
 
  • Mi piace
Reazioni: MichPower
Stato
Discussione chiusa ad ulteriori risposte.