[Java] Theoretische Implementation

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Smokers, 22. März 2011 .

Schlagworte:
  1. 22. März 2011
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Theoretische Implementation

    Hi ho, habe heute folgende Aufgabe bekommen.
    Also entweder ich bin einfach zu doof für son kram, oder ich versteh davon garnichts, oder der typ hat einfach nur einen weg [ich meine wenn ihr ihn kennen würdet, würdet ihr sagen : ja hat er ganz sicher, aber naja !].


    Wir hatten zwar heute ein wenig Softwaretechnik, und auch ein wenig mit Implementation. Aber irgendwie is mir das völlig zu hoch.

    Habt ihr vielleicht einen Denkansatz für mich?
    Hier mal die Beispielausgabe für die Eingabe :
    Bild




    // edit 1 :

    Heute kam ein neuer Hinweis bei der Bearbeitung
    Vielleicht hilft das jemandem :-/
    Mir bisher kaum
     
  2. 23. März 2011
    AW: Theoretische Implementation

    Moin,

    es wäre schön zu erfahren, wo genau die Schwierigkeit für dich liegt.

    So wie ich das sehe musst du nur mit Hilfe der deklarierten Methoden einen Ausdruck bilden, der dem Typen da entspricht. Also praktisch einen Aufruf der Methoden, welcher dir letztlich ein Objekt des Typen zurückgibt.
    Dazu muss man die Methoden halt kombinieren.
    Ich fange mal an:
    Code:
     h() [B]entspricht[/B] [COLOR="SeaGreen"]Foo[/COLOR]
    [COLOR="Orange"]M.<[COLOR="SeaGreen"]Foo[/COLOR]>[/COLOR] f(h()) [B]entspricht[/B] List<List<[COLOR="SeaGreen"]Foo[/COLOR]>>
    M.<[COLOR="SeaGreen"]Foo[/COLOR], [COLOR="SeaGreen"]Foo[/COLOR]> g([COLOR="Orange"]M.<[COLOR="SeaGreen"]Foo[/COLOR]>[/COLOR] f(h()), h()) [B]entspricht[/B] List<List<List<[COLOR="SeaGreen"]Foo[/COLOR]>>>
    
    usw.

    Ich hoffe das hilft
     
  3. 27. März 2011
    AW: Theoretische Implementation

    Nun ja, ich wusste / weiß nicht so genau wofür das M.<foo,foo> etc da ist, und wie ich die Überlegung genau ansetzen muss , um auf ein gewünschtes Ergebnis zu kommen.

    Ich weiß nichtmal genau was mir das Bild bringen soll ^^°
     
  4. 27. März 2011
    AW: Theoretische Implementation

    Hierbei geht es um generische Methoden.
    Java ist ne Insel, Wiki, Java Tut

    Es geht darum Klassen bzw. Methoden zu implementieren, die mit unbekannten Klassen interagieren müssen. Dazu benutzt man Platzhalter, die in spitze Klammern gesetzt werden:
    Code:
    public class Klasse <T>{
     public T blub(T obj)
     {
     return obj;
     }
    }
    Bei Methoden kann man das auch machen:
    Code:
    public static <T> T blub(T obj)
    {
     return obj;
    }
    
    Somit kann man generische Methoden in nicht generischen Klassen verwenden.
    Aufgerufen wird das zB so:
    Code:
    //normal
    blub("hallo");
    //zusätzlich mit den benutzten Klassen
    Klasse.<String> blub("hallo");
    Die Methode hat somit nicht nur das Objekt obj als normalen Parameter sondern die Klasse "String" als weiteren Parameter, nämlich als Parameter für den Typ des normalen Parameters, mit welchem die Methode aufgerufen wird. Nur wird dieser nicht in die Klammer geschrieben, sondern vor den Methodennamen.
    Das Bild (du meinst den Baum in deinem Screenshot?) stellt die Parameter der Aufrufe dar.
    g wird aufgerufen mit "Foo" und "b()" als Parameter und f mit "a()" und "g()".
    Das M in M.<Foo> kommt zustande durch die Klasse in welcher die Methode aufgerufen wird. Das M steht anscheinend für die Klasse, in welcher die statischen Methoden deklariert sind.

    Du musst dir überlegen welche Typen die Rückgabewerte der Methoden haben und welche Typen für die Aufrufe nötig sind. Da der Typ des Rückgabewertes von g abhängig ist von dem Typ des Parameters werden sich die Typen quasi verschachteln. Überlege dir wie du die gewünschte Verschachtelung durch passende Methodenaufrufe erzielst.
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.