• HelloWorld

    UML diagram behöverhjälp

    Hej, jag håller på att sliter av mig håret just nu med en uppgift till skolan och jag hittar inga bra artiklar eller förklaringar på youtube som förklarar exakt hur man gör för att skapa en java kod utifrån ett UML klass diagram eller tvärtom.
    Vi ska översätta det här bifogade klassdiagrammet till java kod. Jag har kommit en bit och vill veta om det är korrekt och om någon kan hjälpa mig om jag gjort fel..

    Här är UML diagrammet

    och här har jag försökt koda så gott jag kan utifrån det:

     


    class vara
    //Instance Fields

    private String name;
    private double pris;
    private int antal;

    //methods

    public void setNamn(String namn)
    public void setPris (String double pris)
    public void setAntal (int antal)
    public getNamn

    Nu undrar jag om jag är på rätt väg och hur man gör med resten... jag blir så arg för det finns ingen bra sida som beskriver hur man gör.... tycker det här är svårare än vanligt kodande.
    Tacksam för hjälp


     
  • Svar på tråden UML diagram behöverhjälp
  • Gräsrot
    HelloWorld skrev 2013-07-02 13:07:02 följande:
    Jag studerar vid högskolan Dalarna.
    Jag vill tacka dig jättemycket för din hjälp , för tack vare dig insåg jag att jag måste läsa på mer om vad instanser och konstruktorer är för något. Jag har läst om det 100 gånger men av nån aledning vill det inte fastna. 
    Så man kan ju inte direkt koda bra om man inte fattar vad sakerna gör :)
    Jo precis , UML var mer en träning och tillhör ju kursen som "grundkunskaper" så det är ju inte mitt största problem egentligen men anta att jag arbetar någonstans och får ett UML diagram framför mig och inte ens kan översätta diagrammet till kod..ja då ser jag ett problem. :)
    jag har inte löst uppgiften helt ännu..jag ska ta och läsa igenom om konstruktorer och istanser , objekt osv...kolla på det du skickat mig och se om jag kan förstå kopplingen (det gör jag lite halvt) förutom att jag inte riktigt fattar det här med att instansiera osv.  Vi får väl se, jag kan ju demonstrera när jag är klar så kanske du kan ge mig en guldstjärna hehe

    ja jag vet inte vad du vill kalla dig men i mina ögon verkar du påläst och duktig iallafall.  

    Åå tack kamrat.

    Okej så här kan man förklara det hela.

    Du har först klassen du ska skapa.
    Överst i UML står namnet på klassen och det ska alltid börja på stor bokstav (vilket kallas att göra strong naming) MinFörstaKlass

    Därefter i första rutan skriver du alla variabler denna ska innehålla vad de ska heta och vilken typ de är och vilken accessnivå de ska ha osv. (observera att ordningen är omvänd den som står i din UML där namnet står först och datatyp sist)

    Private (kan endast användas internt i klassen) Int (datatyp integer) price (namnet i uml) 
    Public (öppen för anrop från andra klasser eller andra projekt)            

    Därefter i UML står metoderna (egenskaper) som klassen (aka objectet) ska ha
    public void getPrice()
    { return this.price; }   

    För att datorn ska fatta att du nu skapat en klass som ska utföra något och inte bara skrivit en massa text så måste det finnas en construktor. oftast skapas denna by default om du använder en IDE men skriver du allt själv i tex antekningar så måste du skriva en default själv

    Public Class Vara()
    {}

    Nu först fattar maskinen att det är frågan om en klass som det går att skapa objekt ifrån.

    Själva skapandet (eller användandet) av en klass är det som kallas instansiera ett objekt.
    det är det du gör i din testklass när du skrev
    Vara vara = new Vara();
    New ordet anger att det är en ny instans av vara som skapas.. Se set som att klassen vara är ritningen
    och instansierandet är själva byggandet av huset. För att kunna bo i det måste du först bygga det. Varje
    instans måste vara unik och kompilatorn klagar om det finns 2 med samma namn. (Du kan inte bygga ett likadant hus inuti ditt hus). Det är först när du byggt huset efter ritningen som du ser om det blev rätt eller om du saknar en dörr att gå in genom.

    Jag kan skicka kursmaterialet jag en gång hade om du vill.. Det är visserligen från C# (microsoft) men det objektorienterade är detsamma. Det fick mig att fatta en gång..

    Alltid kul att kunna hjälpa någon..      
  • Gräsrot
    HelloWorld skrev 2013-07-02 16:27:14 följande:
    Hej igen, jag sliter fortf med den där uppgiften..nåt jag fastnat på nu är det här :

    public void setName(String name) {
    var.setName() = "Halstabletter";

    jag får ett error på setName som lyder:

    method set name in class Vara.vara cannot be  applied to given types.

    Jag går igenom en vide om set och get methods samt konstruktorer och jag kan inte se något fel i metoden. Vad är det jag missar? Svara bara om du orkar... jag håller på och letar här under tiden så kanske hinner lösa det innan du ser detta :)  

    aha.. Du ska testa..

    Gå till projektet du håller på med och skapa en ny klass som du döper TestKlass
    och kryssa i att detta ska vara din Main klass. Du ska då få denna text

    Static void Main String [] arghs(

     här skriver du anropen till din klass vara.

    Vara var = new Vara();

    därefter kan du använda var objektet.

    var.setname("Halstablett"); // skriver du saker inom " " så utgår datorn automatiskt från att det är en string

    för att få ut saker skriver du i testklassen

    string saken = var.getName(); // var.getPrice() omvandlas här till "Halstablett"  och lagras i saken.

    observera att strängen saken inte skriver "Halstablett" förräns du ber den om det via system.out.write
    fram tills dess behandlas det som ett sträng objekt.   
     
      )      
      
  • HelloWorld
    Gräsrot skrev 2013-07-02 17:02:18 följande:
    Sitter håret kvar på huvudet förresten.
    aha tack :) ska prova om en stund .NU har jag suttit sen imorse och fått en fruktansvärd migrän. Håret sitter kvar men hjärnan håller på och rinner ut genom ena örat... (kokat över ;)  )

    vill nästan ge upp vilken sekund som helst... tack ÄNNU en gång 
  • sportpappa

    Du måste inte skriva en egen konstruktor. Så länge du inte lägger till någon konstruktor så finns det automatiskt en default-konstruktor, dvs. en konstruktor som inte tar några argument/parametrar. Däremot så fort du skapar en konstruktor som tar ett eller flera argument så försvinner default-konstruktorn och först då måste du skapa upp en egen om du behöver den. Skapa inte en av slentrian utan endast om du behöver. Se till att din kod endast innehåller det du behöver och inget annat.

    Default-konstruktor (ska inte innehålla ordet Class):
    public Vara() {
    }

  • HelloWorld
    Gräsrot skrev 2013-07-02 16:48:27 följande:

    Åå tack kamrat.

    Okej så här kan man förklara det hela.

    Du har först klassen du ska skapa.
    Överst i UML står namnet på klassen och det ska alltid börja på stor bokstav (vilket kallas att göra strong naming) MinFörstaKlass

    Därefter i första rutan skriver du alla variabler denna ska innehålla vad de ska heta och vilken typ de är och vilken accessnivå de ska ha osv. (observera att ordningen är omvänd den som står i din UML där namnet står först och datatyp sist)

    Private (kan endast användas internt i klassen) Int (datatyp integer) price (namnet i uml) 
    Public (öppen för anrop från andra klasser eller andra projekt)            

    Därefter i UML står metoderna (egenskaper) som klassen (aka objectet) ska ha
    public void getPrice()
    { return this.price; }   

    För att datorn ska fatta att du nu skapat en klass som ska utföra något och inte bara skrivit en massa text så måste det finnas en construktor. oftast skapas denna by default om du använder en IDE men skriver du allt själv i tex antekningar så måste du skriva en default själv

    Public Class Vara()
    {}

    Nu först fattar maskinen att det är frågan om en klass som det går att skapa objekt ifrån.

    Själva skapandet (eller användandet) av en klass är det som kallas instansiera ett objekt.
    det är det du gör i din testklass när du skrev
    Vara vara = new Vara();
    New ordet anger att det är en ny instans av vara som skapas.. Se set som att klassen vara är ritningen
    och instansierandet är själva byggandet av huset. För att kunna bo i det måste du först bygga det. Varje
    instans måste vara unik och kompilatorn klagar om det finns 2 med samma namn. (Du kan inte bygga ett likadant hus inuti ditt hus). Det är först när du byggt huset efter ritningen som du ser om det blev rätt eller om du saknar en dörr att gå in genom.

    Jag kan skicka kursmaterialet jag en gång hade om du vill.. Det är visserligen från C# (microsoft) men det objektorienterade är detsamma. Det fick mig att fatta en gång..

    Alltid kul att kunna hjälpa någon..      
    Ah helt sjukt vad duktig du är och på att förklara med :)
    Den här javan har fått mig att känna mig som en imbecill men jag fått höra från många att de kände sig så i början så jag ska väl inte vara för hård mot mig själv.
    Måste tyvärr dock ta en paus nån timme eftersom jag suttit sen imorse och ta en migräntablett haha, men du får gärna skicka materialet om du tycker det skulle hjälpa mig. Kan man göra det via familjeliv? Jag är inte inne här sååå ofta egentligen, det blir väl när jag behöver gnälla ang javan mest

     
  • HelloWorld
    sportpappa skrev 2013-07-02 16:38:40 följande:
    Det du försöker göra är att tilldela en metod värdet "Halstabletter".
    Från tidigare inlägg så gissar jag att du vill sätta instansvariabeln name till texten "Halstabletter" vilket du skriver:
    this.name = "Halstabletter";
    tack försökte dock det men fick nån error där med...  måste ha gjort nåt fel nån annanstans antar jag. Känner att det är bäst att börja om 
     
  • HelloWorld
    sportpappa skrev 2013-07-02 17:05:39 följande:
    Du måste inte skriva en egen konstruktor. Så länge du inte lägger till någon konstruktor så finns det automatiskt en default-konstruktor, dvs. en konstruktor som inte tar några argument/parametrar. Däremot så fort du skapar en konstruktor som tar ett eller flera argument så försvinner default-konstruktorn och först då måste du skapa upp en egen om du behöver den. Skapa inte en av slentrian utan endast om du behöver. Se till att din kod endast innehåller det du behöver och inget annat.

    Default-konstruktor (ska inte innehålla ordet Class):
    public Vara() {
    }
    Okej jag förstår. Dock var det en del av uppgiften att skapa konstruktor. Detta är övningen till UML diagrammet jag postade ovan (så ni förstår vad det är jag försöker göra exakt) 

    "Gör en Vara klass av UML klassdiagrammet nedan. Det fattas en konstruktor för att sätta varans: namn pris och antal. Skapa även en sådan så att man kan använda den när ett objekt instansieras ur klassen. Gör en JFrame med ett GUI så att du kan sätta data för en vara och sedan även hämta ut varans data och skriva det till en TextArea."
  • Gräsrot
    sportpappa skrev 2013-07-02 17:05:39 följande:
    Du måste inte skriva en egen konstruktor. Så länge du inte lägger till någon konstruktor så finns det automatiskt en default-konstruktor, dvs. en konstruktor som inte tar några argument/parametrar. Däremot så fort du skapar en konstruktor som tar ett eller flera argument så försvinner default-konstruktorn och först då måste du skapa upp en egen om du behöver den. Skapa inte en av slentrian utan endast om du behöver. Se till att din kod endast innehåller det du behöver och inget annat.

    Default-konstruktor (ska inte innehålla ordet Class):
    public Vara() {
    }

    Jo fast i C# om du ska instansiera från en annan name assembly.. Upptäckte det en gång när jag fick svaret att klassen inte gick att instansiera "due to its protection level".. Ändrade på det sättet med class och vips gick det. Defaulten utan räcker annars om du ska använda allt i samma name assembly.
  • HelloWorld

    Detta går käpprätt åt skogen... error efter error efter error... är det såhär att vara programmerare så tackar ja för mig. Tur att vi har inrikting design i programmet annars hade jag avlidigt.  Nu har jag kollat på videos, snurrat til det helt ...Såhär  ser det ut nu men det är inget som fungerar...


    public class Vara {

    //Deklarerar variabler
    private String name;
    private double price;
    private int antal;
    }

    class Test {
    public static void main(String[] args) {
    Vara var = new Vara();
    }
    //constructors
    public void Vara (String name)
    {
    this.name = name;
    }
    public Vara (int antal)
    {
    this.antal = antal;
    }
    public Vara (double price)
    {
    this.price = price;
    }

    public void setName(String name) {
    var.setName (("Halstabletter");
    // this.name syftar på name i deklarerade variabler (private string name) och name syftar på det som står i parrantesen i void metoden
    }

    public void setPrice (double price) {
    var.setPrice(("12.5"); //det är ju en double

    }
    public void setAntal (int antal) {
    var.setAntal() = (("10");

    }

    public String getName()
    {
    return this.name;
    }

    public double price()
    {
    return this.price;
    }

    public int getAntal()
    {
    return this.antal;
    }
    }

    Det där klasstestet verkar störa en del också... vwt varken ut eller in nu.... Kommer hålla på tills jag klarar det..har inget val...men att det ska vara så jäkla svårt...blir galen
Svar på tråden UML diagram behöverhjälp