x3: rekursion mit Schutzmechanismus

Beitrag lesen

Hi,

@ Hans:

Also: von 1988 bis 1990 habe ich ein Berufskolleg besucht und dort vieles erfahren. Nach einer kleinen Pause beim olivgrünen Verein habe ich mein Wissen während eines 11-semestrigen Studiums (darunter Praktika bei IBM und Forschungsinstitut) vertieft. Danach folgten 9 Jahre Berufserfahrung bevor ich jetzt Dir antworte.

Dann verstehst Du sicherlich, wenn ich mit meinen ca fünf Jahren Web/Programmiererfahrung noch einige Fragen habe.

Willst Du allen ernstes erwarten, daß ich Dir mein ganzes Wissen in einem einzigen Posting weitergeben kann ?

ne, aber Du kannst es ja versuchen, mir das, was ich wissen will zu erklären. (Hab ja nicht gefragt: "Erkär mir mal schnell die ganze Informatik")

Also hier mal das Wichtigste:

Heap = Arbeitsspeicher Stack = Speicher, auf dem kurzfristig Variablen, Speicheradressen, Rücksprungadressen etc abgelegt werden.

Also kann ich mir einen Stack zum Beispiel als eine Datei (Also gespeichert auf der Festplatte) vorstellen, in der ich die Pfade der noch zu durchsuchenden Verzeichnisse zwischenspeichere ?! Oder ist der Stack irgendwas ausserhalb von Festplatte/Arbeitsspeicher?

Stell Dir vor, Du hast in der linken Hand ("Heap") eine Schüssel mit Pudding(...)

Danke, schönes Beispiel, jetzt hab ich Hunger... Nee, ich glaube, jetzt kann ich das in ein Programm umsetzen. Viele Konzepte erschließen sich mir erst, wenn ich einen konkret programmtechnisch-praktischen Nutzen erkenne.

Zum Beispiel: Was ist der Sinn von Vererbung/überschreiben von Methoden: Ich kann verschiedene Objekte in eine Liste packen, indem ich die die benötigten Funktionen in eine Elternklasse oder (in Java) in ein Interface packe, und dann die Elternklasse als den Typ der Liste nehme. Dann kann ich aber trotzdem die überschriebenen Methoden der Kindklassen aufrufen. Als ich das gecheckt hatte, war mir Vererbung klar.

Oder das Überladen von Methoden: dadurch kann ich dem Nutzer der Klasse die Tipparbeit abnehmen, indem ich Methoden erstelle, die sich selbst mit voreingestellten Parametern aufrufen (zum Beispiel Serverroot=localhost usw.) Das habe ich beim Durchstöbern von den Standard Javaklassen gesehen, wird da extensiv angewendet.

jetzt hab ich also ein konkretes Beispiel gefunden, zur Verwendung von Stacks, danke...

Such einfach mal nach Tutorials von einfachen Sprachen, wie Pascal, C.

C++ ist tatsächlich die nächste Sprache, die ich mir angucke (erstes Beispiel kompiliert, hab auch schon die Stadtbibliothek durchstöbert, und das Buch 'C++ Programmierung' von Andre Williams genommen, gefällt mir sehr gut). Und Pascal finde ich insofern interessant, weil die kompilierten Programme so schnell wie C-Programme sein sollen. (Das schlaucht an Java enorm, mein alter Rechner wird echt gemartert.)

Lass die objektorientierten Dinger weg.

Weniger, nachdem ich mir die Semantik und Syntax von Java reingezogen habe -sehr schön, aber meiner Meinung nach ein paar krasse Designschwächen (z.B. Objekt objekt = new Objekt(), statt einfach objekt = Objekt()), versuche ich eigentlich, nur noch in OOP zu schreiben. Vor allem weil meine Programmierexperimente immer größer und unlesbarer werden.

Meine letze Entdeckung war, das javascript(!) hier ja ausgesprochen weitreichende Möglichkeiten bietet, bis hin zur Vererbung, sehr cool.

Ein Beispiel einer einfachen Model-View-Controller- initialisierung in javascript, falls es jemand gebrauchen kann. Habe ich nach einem Tutorial von tin-Ho Chan und Gerhard Stegmann (leider vom Netz genommen, aber ich habs mir gesaugt, hehe) zum üben erstellt (auch in java), und hey, es funzt! (Allerdings habe ich keine Ahnung, warum mein Firefox vier Pop-ups anzeigt, ist auch nicht auf IE getestet, nur Firefox, Opera und Netscape)


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">

<html>

   <head>
      <title>MVC-Initialisierung Schablone</title>
   </head>

   <body>
      <script type="text/javascript">


         model=new Model();
         model.init();

         view=new View(model);
         view.init();

         model.notifyObservers();



         function Model()
         {
            var setOfObservers=new Array();

            this.addObserver=function(observer) {
               setOfObservers.push(observer);
            };

            this.deleteObserver=function(observer) {
               for (i=0; i<setOfObservers.length; i++) {
                  /*hab nicht getestet ob das korrekt ist, '==' oder 'equals()' ?!*/
                  if (setOfObservers[i] == observer) {
                     setOfObservers.splice(i,1);
                  }
               }
            };

            this.notifyObservers=function() {
               for (i=0; i<setOfObservers.length;i++) {
                  setOfObservers[i].update();
               }
            };

            this.init=function() {
               /* Model initialisieren mit Daten */
            };
         }



         function View(model)
         {
            this.prototype=new Observer();
            var self = this;
            /*nötig, weil this nicht aus privaten Funktionen aus aufgerufen werden kann, vergleiche wikipedia-javascript*/
            this.myModel=model;
            this.myModel.addObserver(this);
            makeController();
            this.myController.init();

            this.init=function() {
               /* View initialisieren mit Daten */
            };

            this.update=function() {
               alert("Hallo vom View");
            };

            function makeController() {
               self.myController=new Controller(self.myModel, self);
            }
         }



         function Controller (model, view)
         {
            this.prototype=new Observer();
            this.myModel=model;
            this.myView=view;
            this.myModel.addObserver(this);

            this.init=function() {
               /* Controller initialisieren mit Daten */
            };

            this.update=function()
            {
               alert("Hallo vom Controller");
            };
         }



         /*ist das in javascript überhaupt nötig?!*/
         function Observer()
         {
            this.update=function() {
               alert("nur die überschriebenen Methoden werden aufgerufen");
            };
         }
     </script>

   </body>

</html>

Je nachdem, wie gut Du bist, kannst Du Teile der Tutorials überspringen (Was ist ein Array, Unterschied zwischen Funktion/Prozedur etc.)

Warte mal, Unterschied Funktion/Prozedur, das hab ich mal gelesen in 'Einführung in die Informatik', kanns aber nicht mehr finden...doch, Funktion, gibt den Rückgabewert mit Return zurück, bei der Prozedur muß der Rückgabewert in der Kopfzeile genannt werden.. aber was hat das für praktische Auswirkungen, ist das nicht einfach nur ein semantischer Unterschied? Ja, ich merke, das ich anfange Tutorials von hinten nach vorne zu lesen, weil ich die Einführungen gar nicht mehr brauche

Und vergiß ganz schnell zu glauben, jahrelanges Wissen/Erfahrung könnte man sich mit einem Mausklick aneignen.

Das habe ich schon nach meinem ersten Programmierversuch aufgegeben, Datenbankzugriff mittels javascript... nebenbei, soweit ich weiß hast Du mir Google empfohlen ;-)

@Daniel:

vielen Dank, für den Link, eigentlich finde ich zu fast allem immer einen guten Artikel in der Wikipedia, ich vergesse nur manchmal, da zu suchen, ich steh halt manchmal auf dem Schlauch...

Das Datenbanken intern B-Bäume benutzen, ist ja interessant, das wusste ich gar nicht.

Nur das mit den fehlenden Tutorials zum Umgang mit großen Datenmengen ist schade, ein Umstand, den ich in ferner Zukunft mal zu ändern gedenke...

z.B. OOP oder das mvc-Prinzip sind ja Versuche, ein verallgemeinertes Prinzip für den Aufbau von Software bereitzustellen, kann mir nicht vorstellen, das die Informatik für obiges Thema noch keine verallgemeinernden Schemas gefunden hat, wenn nicht, dann ist das eben ein (noch) schwarzer Fleck auf der Informatik-Landkarte...

Gruß