[OOP] Beliebige Type Casts

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Slava
    antwortet
    na ja,
    ich bin damit auch nicht besonders glücklich.
    und Casting gehört eben zu OOP.
    ich kann auch nicht wirklich nachvollziehen warum in Java und PHP mehrfache Vererbung abgeschafft bzw nicht verfolgt wurde, was in C++ perfekt funktioniert.
    Jetzt kämpfen gerade die Programmierer, mit Decorator Paten, statt einer direkter Vererbung von einer 2ter classe zu machen.
    Beweis dafür ist JavaSwing bei dem die hälfte von komponenten ohne jeglicher Veränderung von anderen classen übernommen sein könnten.
    statt dessen müssten die Programmierer bei jeder neuer Komponente ein decorator machen, bzw zusätzlicher Interface ableiten, was natürlich Arbeitsaufwand steigert als auch die netz von UML diagrammen so wachsen lässt, dass kein Mensch von diesen unübersichtlichen diagrammen profitiert.

    Einen Kommentar schreiben:


  • BugBite
    antwortet
    irgendwie kann ich schon damit leben, aber es schränkt einen
    ungemein ein, wenn man sauberes OOM machen will =(

    Einen Kommentar schreiben:


  • combie
    antwortet
    Habe gerade wohl Polymorphie und Mehrfachvererbung in einen Topf geworfen. Aber mit dem fehlenden Casting kann und wird man in PHP leben müssen.

    Einen Kommentar schreiben:


  • Slava
    antwortet
    Ja, wie ich auch erwartet habe funktioniert casting auch in C#
    PHP-Code:
    public class test{
      static 
    void Main(string[] args){
      
    Class2 c=new Class2();
    //hier kommt es zu ausgabe "Class1" da es gekastet wurde
      
    Console.Write(((Class1)c).t1());
      
    Console.Read();
      }
    }
        
    public class 
    Class1
    {
      public 
    Class1(){}

      public 
    string t1(){    return "Class1";}
    }

    //vererben    
    public class Class2 Class1
    {
      public 
    Class2(){}
      public 
    string t1(){    return "Class2";}

    Einen Kommentar schreiben:


  • Slava
    antwortet
    Hi combie
    Java macht das garantiert.
    Ob das C# macht, muss ich gleich testen, aber ich bin mir sicher, dass C# das auch wie java unterstützt.
    nach dem testen sage ich wegen c# bescheid.

    Einen Kommentar schreiben:


  • combie
    antwortet
    ohne dann die polymorphie vollständig zu unterstützen.
    Das tun eigendlich nur ganz wenige Sprachen! z.B. C++ geht dort recht weit.
    Selbst so moderne Sprachen wie Java machen das nicht.

    Einen Kommentar schreiben:


  • BugBite
    antwortet
    edit: doppelpost verfluchtes wackel wlan
    Zuletzt geändert von BugBite; 11.10.2007, 17:44.

    Einen Kommentar schreiben:


  • BugBite
    antwortet
    is ja schön das du das ok findest, jedoch find ich es ziemlich dämlich
    in einer programmiersprache interfaces und vererbung anzubieten,
    ohne dann die polymorphie vollständig zu unterstützen.
    Und casting is da einfach ne essentielle komponente.

    @ Slava
    /signed

    naja damit wäre ja dann meine frage diesbezüglich wohl beantwortet.
    ich bedanke mich und werde einfach mein modell ein wenig abändern,
    also anstatt einer get row eine fetchRow methode anbieten, die eine kopie der geforderten Row ausgibt, und weiterhin eine set(r,c) und get(r,c) methode zum lesen und setzen der werte meiner tabelle
    verwenden

    Einen Kommentar schreiben:


  • combie
    antwortet
    PHP-Code:
    class t1 {
      function 
    f1(){echo 't1';}
    }
    class 
    t2 extends t1{
      function 
    f1(){echo 't2';}
    }

     
    $t=new t2;

    function 
    test(t1 $var)
    {
      
    $var->f1();
    }
    test($t); 
    Mit dem Typehinting kann man auf Basisklassen und Interfaces testen, das soll reichen. Dass man "von aussen" nicht auf überschriebene Methoden der Basisklasse zugreifen kann, finde ich OK!

    Einen Kommentar schreiben:


  • tontechniker
    antwortet
    Die Möglichkeit eigene Typecast zu definieren (neben __toString auch noch __toInt / __tot1) wurde für PHP 6 leider abgelehnt ...

    Einen Kommentar schreiben:


  • Slava
    antwortet
    was mich aber bei PHP ein wenig ergert, dass es wirklich in vergleich zu den anderen sprachen nicht jeder casting funktioniert.
    ich finde das nicht gut, dass ich ein object nicht auf seine basisclasse kasten kann, was natürlich bei C#.Java, C++ problemlos funktioniert.
    PHP-Code:
    class t1 {
      function 
    f1(){echo 't1';}
    }
    class 
    t2 extends t1{
      function 
    f1(){echo 't2';}
    }

     
    $t=new t2;

    //das wird bei php5.1 nicht funktionieren
    //ich kann hier nur auf Array, String oder Object casten, aber nicht auf die 
    //basisclasse
     
    $a= (t1)$t
    warum das so ist, habe ich wirklich keine Erklärung.

    Einen Kommentar schreiben:


  • combie
    antwortet
    edit: das null objekt als entwurfsmuster gibt es in php
    Rückwärsgang: Ja du darfst dein "NULL Objekt" so verwenden..

    PHP ist in dem Punkt leider etwas krank(finde ich)..
    Das Handbuch sagt:
    Type Hints can only be of the object and array (since PHP 5.1) type.
    Aus: http://www.php.net/manual/en/languag...ypehinting.php

    PHP-Code:
    class bli {}

    class 
    test
    {
      public function 
    blabli $var=NULL)
      {
        echo 
    'hello bla ';
      }
      public function 
    blubli $var)
      {
        echo 
    'hello blu ';
      }
    }
    $t = new test;
    $b = new bli;
    $t->bla(NULL); // funktioniert
    $t->blu(NULL); // wirft Fehler 
    Und dieser Code zeigt, dass NULL kein passendes Objekt ist.
    Aber machmal eben doch
    Warum einmal NULL verwendet werden darf und das andere Mal nicht, sehe ich nicht ein!
    (aber wieder was dazu gelernt)
    Zuletzt geändert von combie; 11.10.2007, 11:39.

    Einen Kommentar schreiben:


  • PHP-Desaster
    antwortet
    Original geschrieben von combie
    RowData $r=null
    Nein, Es gibt keine Null Objekte in PHP!
    Null ist kein Objekt, aber du kannst einem getypten Parameter null als Standardwert geben, so dass dieser Wert optional wird.

    Einen Kommentar schreiben:


  • BugBite
    antwortet
    OffTopic:
    hab ich auch nie behauptet
    jedoch kann $r den wert null annehmen...
    zudem kann ich nur sagen: works as designed
    wenn ich addRow() aufrufe wird ganz normal ne Row eingefügt

    edit: das null objekt als entwurfsmuster gibt es in php
    Zuletzt geändert von BugBite; 10.10.2007, 22:28.

    Einen Kommentar schreiben:


  • combie
    antwortet
    RowData $r=null
    Nein, Es gibt keine Null Objekte in PHP!

    Einen Kommentar schreiben:

Lädt...
X