wann static?

Von: , Frage gestellt am Sa, 3. Dez 2011

liebe wissende,
gibt es konventionen, wann man statische methoden und wann man objektmethoden verwendet?
ich habe eine kleine klasse für matrizen (mathematische) und ihre grundrechenarten geschrieben. dabei habe ich für die matrizenmultiplikation eine static-methode geschrieben, die als rückgabewert eine neue matrix hat. dann dachte ich mir, ich schreibe auch noch eine methode für die multiplikation einer matrix mit einem skalar.
sollte ich jetz hier eine statische methode (Matrix.product(Matrix a, Double b)) oder eine objektmethode (public Matrix multiply(int b)) schreiben?
falls die zweite variante gewählt werden soll, soll man dann die werte der Matrix a (bei a.multiply(b)) verändern, oder eine NEUE matrix erzeugen, die das produkt von a und b darstellt?
gibt es da konventionen /regeln wann man welche variante wählen sollte?
lg
niemand

6 Antworten zu dieser Frage

    • Antwort von nach 54 Minuten 0 hilfreich
      Re^2: wann static?

      hi
      nein, es geht nicht um die klasse "math". es ist eine eigene von grund auf neue klasse. ("class Matrix {...")
      bei deinem link habe ich aber keinen hinweise auf irgend eine regel oder konvention gefunden, die sagt, wann man statische methoden, und wann man objektmethoden verwenden soll.
      könntest du mir den abschnitt nennen?
      lg niemand

      • Antwort von nach einer Stunde 0 hilfreich
        Re^3: wann static?

        Moin moin, nein, es geht nicht um die klasse "math". es ist eine eigene
        von grund auf neue klasse. ("class Matrix {...")
        schon mal was von transfer denken gehöhrt.
        du willst das gleiche machen , hat nur ein anderen namen. bei deinem link habe ich aber keinen hinweise auf irgend eine
        regel oder konvention gefunden, die sagt, wann man statische
        methoden, und wann man objektmethoden verwenden soll.
        Dann hast du einfach nicht begriffen was du da liest. könntest du mir den abschnitt nennen?
        lg niemand
        z.b.
        6.4.1 Warum statische Eigenschaften sinnvoll sind
        6.4.2 Statische Eigenschaften mit static
        6.4.3 Statische Eigenschaften als Objekteigenschaften nutzen
        mit Beispiel :

        DiskoMitStatics d = new DiskoUtensilien();
        System.out.println( d.PLATZ_PRO_PERSON );               // keine gute Idee
        System.out.println( DiskoUtensilien.PLATZ_PRO_PERSON ); // das ist gut so


        Und dann gibts da noch das Thema der vererbung , da muss man dann auch nochmal klarstellen was man an methoden überschreiben will und wie der zugriff geregelt wird.

        Das eine ist halt statisch immer gleich , das andere individuell für das objekt.

        Beides ist Möglich in verschiedenen Fällen . Und beides hat seinen Sinn.

        Sorry aber Programmieren ist nicht Physik . Jeder kann sich seinen eigenen weg zur lösung basteln. Wenn es dann später hinderlich ist die eine variante genommen zu haben wird man das schon festellen.

        • Antwort von nach einem Tag 0 hilfreich
          Re^4: wann static?

          hi Dann hast du einfach nicht begriffen was du da liest.
          doch habe ich: z.b.
          6.4.1 Warum statische Eigenschaften sinnvoll sind
          6.4.2 Statische Eigenschaften mit static
          6.4.3 Statische Eigenschaften als Objekteigenschaften nutzen
          mit Beispiel :

          DiskoMitStatics d = new DiskoUtensilien();
          System.out.println( d.PLATZ_PRO_PERSON );               //
          keine gute Idee
          System.out.println( DiskoUtensilien.PLATZ_PRO_PERSON ); // das
          ist gut so

          ich fragte nicht nach den grundlegenden ideen der statischen eigenschaften, sondern nach den konventinen statischer methoden/objektmethoden. bei deinem link wird darüber nichts ausgesagt. Und dann gibts da noch das Thema der vererbung , da muss man
          dann auch nochmal klarstellen was man an methoden
          überschreiben will und wie der zugriff geregelt wird.
          ich will eine von grund auf neue klasse schreiben, ohne etwas zu erben. da die matrizenmultiplikation sowie auch die bildung des produktes aus skalar und matrix eine mathematische operation ist, für die es keine standartmässigen operatoren in java gibt, will ich jeweils eine methode dafür schreiben. dabei bin ich mir nicht sicher ob ich dafür nun eine objektmethode oder eine statische methode wählen soll. beides sind mathematische operationen mit "gleichwertigen" operanden.
          ich bitte dich - falls du mir weiterhelfen kannst - diese fragestellung zu beantworten, und nicht das was du dir vorstellst was ich eigentlich tun möchte und mir sagst was ich deiner meinung an dieser stelle tun sollte.

          gruss niemand

  1. Antwort von nach 2 Tagen 1 hilfreich
    Re: wann static?

    Hallo niemand, soll man dann die werte der Matrix a (bei a.multiply(b)) verändern, oder eine NEUE matrix erzeugen, die das produkt von a und b darstellt?
    Im prinzip beantwortest du damit deine Frage: Objektmethoden macht man dann, wenn auf einem Objekt gearbeitet werden soll. Bei der Objektmethode multiply(double) würde ich zum Beispiel erwarten, dass das Objekt manipuliert wird. Eine Rückgabe würde ich in diesem fall eigentlich gar nicht erwarten.
    Wenn du aus einer Matrix durch die multiplikation eine weitere Matrix erzeugen willst, würde ich die statische Methode bevorzugen, welche dann Matrix und Faktor übergeben bekommt, und das Ergebnis zurückliefert.

    LG Stefan

    • Antwort von nach 3 Tagen 0 hilfreich
      Re^2: wann static?

      hi
      vielen dank für deine antwort, genau nach diesen infos habe ich gesucht! (und sie erscheinen mir eignetlich ziemlich logisch, wenn es einfach so lese:)

      lg niemand

Keine passende Antwort gefunden? Jetzt eigene Frage stellen!