Video Projekt

Sandro95

Bekanntes Mitglied
Einen guten Tag Leute , ich habe ein Uni Projekt erhalten wo ich aus einem Text ein Projekt erstellen soll .
Ich wollte mich vergewissern ob ich aus dem Text ein passendes UML Diagram erstellt habe ( dieses ist noch ohne Methoden) .
Alles ist im Anhang , für ein kurzes Feedback wäre ich euch mehr als dankbar 🙂
 

Anhänge

  • WhatsApp Image 2020-12-30 at 22.03.15.jpeg
    WhatsApp Image 2020-12-30 at 22.03.15.jpeg
    76,7 KB · Aufrufe: 48
  • WhatsApp Image 2020-12-30 at 13.56.11.jpeg
    WhatsApp Image 2020-12-30 at 13.56.11.jpeg
    101,7 KB · Aufrufe: 41
  • WhatsApp Image 2020-12-30 at 13.39.11.jpeg
    WhatsApp Image 2020-12-30 at 13.39.11.jpeg
    96,6 KB · Aufrufe: 33
  • WhatsApp Image 2020-12-30 at 13.01.05.jpeg
    WhatsApp Image 2020-12-30 at 13.01.05.jpeg
    105,1 KB · Aufrufe: 41
Ich wollte mich vergewissern ob ich aus dem Text ein passendes UML Diagram erstellt habe
Nein. Vorab: ich habe nur die Seite mit dem Video überflogen. Eine Klasse Plattformen mit einer ArrayList plattformen gibt wohl kaum Sinn. Google mal nach Enumeration -> auch für Genres. Die einzige Beziehung, die Video in Deinem Diagramm hat, ist zu Influencer - und die passt auch nicht zur Beschreibung.
 
Nein. Vorab: ich habe nur die Seite mit dem Video überflogen. Eine Klasse Plattformen mit einer ArrayList plattformen gibt wohl kaum Sinn. Google mal nach Enumeration -> auch für Genres. Die einzige Beziehung, die Video in Deinem Diagramm hat, ist zu Influencer - und die passt auch nicht zur Beschreibung.
Erstmal danke für deine Hilfe!
Wie würdest du das diagramm denn in etwa erstellen? Plattform kann man sich auch als klasse definieren oder etwa nicht? @mihe7
 
Nein. Vorab: ich habe nur die Seite mit dem Video überflogen. Eine Klasse Plattformen mit einer ArrayList plattformen gibt wohl kaum Sinn. Google mal nach Enumeration -> auch für Genres. Die einzige Beziehung, die Video in Deinem Diagramm hat, ist zu Influencer - und die passt auch nicht zur Beschreibung.
Also mache ich dann für Plattform und Genre zwei Enumeration für die Aufzählungen, aber wie sind die Assoziationen wie verbinde ich alles ? ZB benötigt dann doch Gamer eine Assoziation zu genre oder ?
 
aber wie sind die Assoziationen wie verbinde ich alles ?
So, wie es im Text steht.

Du machst das im Prinzip schon richtig, nur musst Du genauer lesen und jeden Punkt überprüfen. Beispiel:
ZB benötigt dann doch Gamer eine Assoziation zu genre oder ?
Richtig. "Ein Gamer kann bis zu drei unterschiedliche, bevorzugte Genres haben". Hier sind "bis zu drei" und "unterschiedliche" wichtige Informationen. Das sieht dann so aus:
Code:
                   0..3
Gamer ----------------> Genre              
               {unique}

Oder, wenn Du es als Attribut in Gamer angibst:
Code:
- bevorzugteGenres : Genre[0..3] {unique}
 
Das uml muss nicht 1:1 stimmen das dient mir nur als Hilfe.. wichtig ist das ich die passenden Assoziationen herausbekomme ..
Plattform als Enum hätte dann zB eine Assoziation zum Video oder ?
So, wie es im Text steht.

Du machst das im Prinzip schon richtig, nur musst Du genauer lesen und jeden Punkt überprüfen. Beispiel:

Richtig. "Ein Gamer kann bis zu drei unterschiedliche, bevorzugte Genres haben". Hier sind "bis zu drei" und "unterschiedliche" wichtige Informationen. Das sieht dann so aus:
Code:
                   0..3
Gamer ----------------> Genre             
               {unique}

Oder, wenn Du es als Attribut in Gamer angibst:
Code:
- bevorzugteGenres : Genre[0..3] {unique}
 
"Ein Video hat ... eine Liste von Plattformen"
"Ein Gamer kann bis zu drei unterschiedliche, bevorzugte Genres haben"

Ich habe noch nie vorher etwas von enum gehört, schau mal zB beim gamer , im konstruktor soll ja die Option geben bevorzugte Genre anzugeben . Wie mache ich das am besten ?

Über gebe ich im konstruktor die liste<genre>?
 

Anhänge

  • 20201231_122032.jpg
    20201231_122032.jpg
    2 MB · Aufrufe: 14
"Ein Video hat ... eine Liste von Plattformen"
"Ein Gamer kann bis zu drei unterschiedliche, bevorzugte Genres haben"
Java:
import java.util.ArrayList;

public class Gamer  extends Influencer{
    
    public ArrayList<Genre> genre;
    
    
    //Leerer Konstruktor
    public Gamer() {
        
    }
    //Konstruktor für Gamer mit bevorzugten Genre
    public Gamer() {
        
    }
    
    
    
    public enum Genre {
        FPS,
        JUMPANDRUN,
        PUZZLE,
        PLATTFORMER,
        SURVIVAL;
    
    

}
 
Bzgl. des enums:
Java:
pulic enum Genre {
    FPS(5), JUMPANDRUN(2.2), // ...

    private double popularity;

    Genre(double popularity) {
        this.popularity = popularity;
    }

    public double getPopularity() { return popularity; }
};
 
Bzgl. des enums:
Java:
pulic enum Genre {
    FPS(5), JUMPANDRUN(2.2), // ...

    private double popularity;

    Genre(double popularity) {
        this.popularity = popularity;
    }

    public double getPopularity() { return popularity; }
};
Jetzt habe ich eine andere Problematik , und zwar der Teil mit der Videoliste . Dort sollen nur die Titel der in der Videoliste enthaltenen Videos ausgegeben werden(durch die toString) -> siehe zweites Bild der Aufgabe

Doch iwie weiß ich nicht wie ich das genau umsetzen soll .. ich schreibe mal meinen code der klasse influencer , gamer und main hin :


Java:
import java.util.ArrayList;

import java.util.ArrayList;

public abstract class Influencer {

    private String name;
    protected ArrayList<Video> videoliste;
    private Video video;
    
    public Influencer() {
        videoliste= new ArrayList<Video>();
    }
    
    
    
    //Namen zurück geben 
    public String getName() {
        return this.name;
    }
    
    //Videos der Videoliste hinzufügen
    public void addVideos(Video neu) {
        videoliste.add(neu);

    }
    
    public void setVideoListe(ArrayList<Video> list) {
        this.videoliste=list;
    }
    public ArrayList<Video> getVideoliste(){
        return this.videoliste;
    }
    
    public Video getVideo() {
        return this.video;
    }
    //Die passende Ausgabe für einen Influencer
    public String toString ( ) {
        return "[" + this.getName()+", " ; //+", Spezialinfo, [" +this.getVideoliste()+"]]";
    }
}



import java.util.ArrayList;

public class Gamer  extends Influencer{
    
    //Array , wo wir die bervorzugten Genres abspeichern
    public Genre [] genre;
    
    
    //Leerer Konstruktor
    public Gamer() {
        super();
        
    }
    //Konstruktor für Gamer mit bevorzugten Genre
    public Gamer(Genre g, Genre g2, Genre g3) {
        //hier werden 0 bis 3 Genres im array abgespeichert
        genre = new Genre[3];
        genre[0]=g;
        genre[1]=g2;
        genre[2]=g3;
        
        
        
    }
    
//    public void addVideos(Video neu) {
////        this.setVideoliste(videoliste).add(neu);
//        System.out.println(neu.getTitel());
//    }
//    
    
    
    public String toString() {
        
        String res="";
        
        for(int i =0; i<genre.length;i++) {
            if(genre[i]!=null){
                res += " ,[" +genre[i] + "], ";
            }
            if(res=="") {
                return super.toString()+"- ,"+ "["  +super.getVideoliste()+"]]";
            }
        }
        
        return super.toString() +res;
        

        
        
    }

}




public class Main {

    public static void main(String[] args) {
        Artist eins = new Artist();
        System.out.println(eins);
       
        Video one = new Video(3602);
        System.out.println(one);
       
        Gamer onee = new Gamer(Genre.FPS,Genre.JUMPANDRUN,Genre.PUZZLE);
        onee.addVideos(one);
       
        System.out.println(onee);
       
    }

}
 
Zuletzt bearbeitet:
Du iterierst über die Videos der Videoliste, holst Dir den Titel und baust damit einen String zusammen. Tipp: StringBuilder und StringJoiner helfen dabei ungemein.
danke habe es anders lösen können .. 🙂
leider komme ich bei der Methode addRecommendation(..) nicht weiter .. dies ist ja eine methode der klasse video .

Die klasse sieht wie folgt aus : ( getCategory ist noch nicht implementiert)


Java:
import java.util.ArrayList;

public class Video {

    private String titel;
    private int dauer;
    private ArrayList<Plattform> p;
    private ArrayList<Plattform> empfehlList;

    public Video(String name, int dauer,Plattform[]p1) {
       
       
        if(dauer>=5) {
            this.titel=name;
            this.dauer=dauer;
            p = new ArrayList<Plattform>();
           
            for(int i =0; i<p1.length;i++) {
                p.add(p1[i]);
               
                //EIntelung in Kategorien
                int kategorie=0;
               
                for(int j = 0; i<=dauer;i++) {
                    if(j)
                   
                }
            }
        }else
            System.out.println("Das Video muss eine Dauer von mind. 5 haben");
            return;
           
    }

    // getter , damit man die Werte ausgeben kann
    public String getTitel() {
        return this.titel;
    }

    public int getDauer() {
        return this.dauer;
    }

    public ArrayList<Plattform> getPlattformen() {
        return this.p;
    }

    public ArrayList<Plattform> getEmpfehlList() {
        return this.empfehlList;
    }

    //leifert die passende ausgabe
    public String toString() {

        long sum = this.getDauer();
        long x = sum / 3600;
        long y = (sum % 3600) / 60;
        long z = sum % 60;

        return "[" + this.getTitel() + ", Dauer: " + x + "h:" + y + "m:" + z + "sec, auf " + "[" + this.getPlattformen()
                + "], empfohlen: [" + this.getEmpfehlList() + "]]";
    }
   
    public int getCategory() {
     return

       
    }

}


wie setze ich das am besten um , die ganzen BEdingungen in der Methode bringen ich durcheinander .. @mihe7
 
Naja, die Kategorie lässt sich doch einfach mit (dauer/10)+1 bestimmen. Nachtrag: dauer in Minuten.
 
Zuletzt bearbeitet:
Naja, die Kategorie lässt sich doch einfach mit (dauer/10)+1 bestimmen.
ja die habe ich eben auch etwas anders gelöst ..) Problem istt die addRecommendation() methode wobei ich hilfe benötige

Java:
import java.util.ArrayList;

public class Video {

    private String titel;
    private int dauer;
    private ArrayList<Plattform> p;
    private ArrayList<Plattform> empfehlList;
    private int kategorie;

    public Video(String name, int dauer,Plattform[]p1) {
        
        
        if(dauer>=5) {
            this.titel=name;                                               
            this.dauer=dauer;
            p = new ArrayList<Plattform>();
            
            for(int i =0; i<p1.length;i++) {
                p.add(p1[i]);
                
                //EIntelung in Kategorien
                
                
                for(int j = 0; i<=dauer;i+=600) {
                    ++this.kategorie;
                    
                }
            }
        }else
            System.out.println("Das Video muss eine Dauer von mind. 5 haben");
            return;
            
    }

    // getter , damit man die Werte ausgeben kann
    public String getTitel() {
        return this.titel;
    }

    public int getDauer() {
        return this.dauer;
    }

    public ArrayList<Plattform> getPlattformen() {
        return this.p;
    }

    public ArrayList<Plattform> getEmpfehlList() {
        return this.empfehlList;
    }

    //leifert die passende ausgabe
    public String toString() {

        long sum = this.getDauer();
        long x = sum / 3600;
        long y = (sum % 3600) / 60;
        long z = sum % 60;

        return "[" + this.getTitel() + ", Dauer: " + x + "h:" + y + "m:" + z + "sec, auf " + "[" + this.getPlattformen()
                + "], empfohlen: [" + this.getEmpfehlList() + "]]";
    }
    
    public int getCategory() {
     return this.kategorie;
    
    }
 
wie setze ich das am besten um , die ganzen BEdingungen/ Einschränkungen in der Methode bringen mich durcheinander ..
ich habe ja in der Klasse eine ArrayList deklariert für die Empfehlungen. füge ich dort ein video hinzu ? also als parameter übergebe ich ein Video neu Zb und füge dann den titel . neu.getTitel() hinzu ? bin durcheinander..
 
Deine Empfehlungsliste ist aktuell eine Liste von Plattformen. Das ist schon mal falsch, da es eine Liste von Videos sein soll. Und ja, prinzipiell fügst Du einfach das übergebene Video dieser Liste hinzu. Vorab musst Du eben testen, ob Du es hinzufügen darfst. Zum Beispiel darf das übergebene Video eben nicht this sein. Ansonsten musst Du zählen, wie viele Videos mindestens doppelt so lange sind, wie this. Ist die Zahl kleiner 2, ist das Hinzufügen möglich.
 
Deine Empfehlungsliste ist aktuell eine Liste von Plattformen. Das ist schon mal falsch, da es eine Liste von Videos sein soll. Und ja, prinzipiell fügst Du einfach das übergebene Video dieser Liste hinzu. Vorab musst Du eben testen, ob Du es hinzufügen darfst. Zum Beispiel darf das übergebene Video eben nicht this sein. Ansonsten musst Du zählen, wie viele Videos mindestens doppelt so lange sind, wie this. Ist die Zahl kleiner 2, ist das Hinzufügen möglich.
Also ich habe die Methode jetzt hinbekommen vielen dank.. nur meine Ausgabe passt nicht .. es soll nur der Titel vom Video welches in der Empfehlungsliste drin ist ausgegeben werden und die Klammern am Ende sind zu viel ..habe schon vieles in der toString versucht aber komme nicht auf das richtige erg.. @mih
 

Anhänge

  • 20210101_203000.jpg
    20210101_203000.jpg
    4,4 MB · Aufrufe: 11
  • 20210101_203011.jpg
    20210101_203011.jpg
    4,3 MB · Aufrufe: 15
Also ich habe die Methode jetzt hinbekommen vielen dank.. nur meine Ausgabe passt nicht .. es soll nur der Titel vom Video welches in der Empfehlungsliste drin ist ausgegeben werden und die Klammern am Ende sind zu viel ..habe schon vieles in der toString versucht aber komme nicht auf das richtige erg.. @mih
Und da einfach einmal als Anmerkung: toString sollte eigentlich nur für Debugging und Co benutzt werden. Eine Logik, wie ein Element angezeigt werden soll, gehört in die UI Schicht und nicht in das Model selbst. Daher schreib dafür den Code doch bitte separat in der UI selbst. Und wenn Du da dann eine Anzeige an mehreren Stellen brauchst, dann kannst Du das nach den üblichen Refactoring Methoden in eine eigene Klasse packen.

In einer Grafischen Oberfläche kämst Du doch auch nie auf die Idee, das Model eines Videos zu erweitern, so dass deine Entity auch zugleich eine JavaFX View ist mit Controls für alle Felder und so damit Du bei einer Scene direkt ein video hinzu fügen könntest zum anzeigen ....
 
Und da einfach einmal als Anmerkung: toString sollte eigentlich nur für Debugging und Co benutzt werden. Eine Logik, wie ein Element angezeigt werden soll, gehört in die UI Schicht und nicht in das Model selbst. Daher schreib dafür den Code doch bitte separat in der UI selbst. Und wenn Du da dann eine Anzeige an mehreren Stellen brauchst, dann kannst Du das nach den üblichen Refactoring Methoden in eine eigene Klasse packen.

In einer Grafischen Oberfläche kämst Du doch auch nie auf die Idee, das Model eines Videos zu erweitern, so dass deine Entity auch zugleich eine JavaFX View ist mit Controls für alle Felder und so damit Du bei einer Scene direkt ein video hinzu fügen könntest zum anzeigen ....
ich habe dafür keine GUI , ist keine grafische oberfläche .. Das mit dem StringBuilder etc ist mir neu . gibt es keine andere Option um die korrekte ausgabe zu bekommen ?
 
ich habe dafür keine GUI , ist keine grafische oberfläche .. Das mit dem StringBuilder etc ist mir neu . gibt es keine andere Option um die korrekte ausgabe zu bekommen ?
Ja, aber Du hast eine UI, ein User Interface. Und das sollte man durchaus ähnlich abkapseln.

Und wenn Du Strings nicht mit + aneinander packen willst und Du dir den StringBuilder nicht ansehen möchtest, kannst Du auch:
a) einfach eine Reihe von Ssystem.out.print nutzen und das println erst nutzen, wenn Du in die nächste Zeile willst.
b) String.format nutzen, so Du das printf aus C kennst und magst.
...

Möglichkeiten gibt es somit sehr viele.
 
danke habe es hinbekommen 🙂
Ja, aber Du hast eine UI, ein User Interface. Und das sollte man durchaus ähnlich abkapseln.

Und wenn Du Strings nicht mit + aneinander packen willst und Du dir den StringBuilder nicht ansehen möchtest, kannst Du auch:
a) einfach eine Reihe von Ssystem.out.print nutzen und das println erst nutzen, wenn Du in die nächste Zeile willst.
b) String.format nutzen, so Du das printf aus C kennst und magst.
...

Möglichkeiten gibt es somit sehr viele.
 

Zurück
Oben