Announcement

Collapse
No announcement yet.

Klassen kennen nicht ihre eigenen Instanzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Klassen kennen nicht ihre eigenen Instanzen

    Hier liegt wohl ein grundsätzliches Verständnisproblem vor: Mein Chef kennt weder Delphi noch C++, sondern nur ein sogenanntes Expertensystem mit dem Namen AionDS. In dieser Sprache gibt es ein paar kompfortable Möglichkeiten, auf Instanzen einer Klasse zuzugreifen:
    'SelectOne' zum Beispiel ist eine Klassenmethode, die eine bestimme Instanz einer Klasse zurückliefert. Die Klasse selbst kennt also alle ihre Instanzen! Meines Wissens ist es in Delphi und C++ nicht möglich, dass Klassen selbst irgendwelche Daten halten können, sondern erst die Instanzen dieser Klassen. Mein Chef behauptet jedoch, dass dies in der OOP grundsätzlich so möglich ist.
    Habe ich hier jetzt ein grundlegendes Verständnisproblem oder ist mein Chef nur von seinem Expertensystem verwöhnt?

  • #2
    Das geht schon. Und zwar bei Delphi mit sogenannten Klassenmethoden.
    Such mal in der Delphi-Hilfe nach "Klassenmethoden".

    Über solche Klassenmethoden ist es z.B. möglich eine Verwaltungsliste aufzubauen, in der jede Instanz der Klasse sich im Konstruktur einträgt und im Destruktor wieder austrägt

    Comment


    • #3
      Um wo kann ich dann die Daten (Verwaltungsliste) abspeichern? In einer globalen Variablen? Das wäre äußerst unschön. Das ich Klassenmethoden bauen kann ist mir bekannt aber so etwas wie 'Klassenvariable' gibts doch nicht

      Comment


      • #4
        Globale Variable muss wohl sein, aber wie wird es wohl das Expertensystem machen (dreimal darfst du raten)

        Comment


        • #5
          Mein Chef sagt: 'globale Variable hat man nur in der Steinzeit verwendet'. Wie das Expertensystem das macht, ist nicht rauszufinden. Man kann damit auf jeden Fall ausschliesslich objektorientiert programmieren. Globale Variable oder Proceduren/Funktionen, die nicht Methoden einer Klasse sind gibts da gar nicht. Was da intern abgeht, ist nicht ersichtlich

          Comment


          • #6
            Hallo Thilo,<br>
            das was Bernhard und Dein Chef sagen ist grundsätzlich richtig.<p>
            Innerhalb der Expertensysteme werden alle Klassen von einer gemeinsamen Basisklasse abgeleitet. Innerhalb der Basisklasse wird eine Liste aller Instanzen geführt. D.h. wenn eine Instanz erzeugt wird, wird die Instanz in die Liste eingefügt und umgekehrt.<br>
            Möchtest Du nach Instanzen suchen, muss für jede abgeleitete Klasse
            eine Funktion implementiert werden, die einen String mit den Suchinformationen liefert.<br>
            Wenn Du für die Instanceliste eine Hashliste verwendest, geht das ganze noch ziemlich schnell.<br>
            Insgesamt kannst Du das ganze unter dem Thema Polymorphes Interface oder wie verwende ich virtuelle Klassenmethode ablegen.<p>
            Das kleine Beispiel soll dies schematisch verdeutlichen.<p>
            <pre>
            class basisClass
            private
            lSearch String;
            Instances : THashList;
            public
            function find( Search : String ) : basisClass;
            constructor Create( Search : String );
            destructor destroy; virtual;
            end;

            constructor basisClass.Create( Search : String );
            begin
            inherited;
            lSearch := Search;
            Instances.Add( Search, self );
            end;

            destructor basisClass.Destroy;
            begin
            Instances.DeleteObject( self );
            inherited;
            end;

            <pre>

            Gruss<br>
            Fran

            Comment


            • #7
              Letztlich ist aber immer eine globale Variable beteiligt. Irgendwo muss ja die Wurzel aller Instanzen abgelegt werden. Nur das die globale Variable natuerlich verborgen sein kann

              Comment


              • #8
                Robert hat recht. Auch das Expertensystem nutzt globale Variablen, deren Sichtbarkeit kann aber lokal zur implementierenden Unit sein. Betrachtet man eine Unit als Object dann ist alles nach Interface public und alles nach implementation ist private, und alles nach initialization ist der constructor und nach finalization der destructor. Damit ist das Delphi Unit Konzept sehr wohl bestes OOP design. Dein Chef liegt also mangels fachlicher Kompetenz vollständig FALSCH. basta. Der Chef hat DICH als Experten um IHM Rat zu geben, sollte ein Chef seinem Programmierer da NICHT vertrauen ist er ein schlechter Chef, da seine Aufgabe die Koordination aller Fachidioten ist und nicht deren Lehrmeister. (meistens zumindestens)

                Falls ihm das Expertensystem besser gefällt soll er es weiterhin nutzen. Da aber bestimmte Funktionalität offensichtlich FEHLT muß ein Eigenes entwickelt werden. Er kann nun Millionen in eine ausgefeilte Neuentwicklung investieren oder einfach mit dem Fakt leben das NUR EINE globale, aber private Variable benötigt wird die NICHT seinen OOP Vorstellungen entspricht. Also, meinem Chef interessiert dies NICHT die Bohne, dafür bin ich ja da

                Gruß Hage

                Comment


                • #9
                  Übrigens, die gleichen Techniken und Methoden der Computer Steinzeit stellen die heutige Basis aller Techniken dar. D.h. ob JAVA, Assembler, Delphi oder C alle Sprachen nutzen heute die gleichen Methoden wie in der Steinzeit. Der Unterschied zum OOP System besteht also NICHT im erzeugten Program sondern in der Syntax und den Mögluichkeiten einer Programmiersprache. Im Grunde IST OOP nichts anderes wie steinzeitliche prozedurale Programmierung mit einem Parameter auf eine Datenstruktur. Diese Datenstruktur IST das instanzierte Object, ein Zeiger, und die proceduren sind die methoden die der Klasse zugeordnet wurden. Unterschiedlich ist nur die Syntax und dessen Interpretierung durch das Compilierungssystem = Programmiersprache.

                  Sogesehen, versteht Dein Chef was OOP ist aber NICHT wie sie heutzutage in jedem System funktioniert.

                  Gruß hage

                  Comment


                  • #10
                    Eben. .NET ist ja auch nichts neues. Remote Procedure Call mit XML als Datenformat und HTTP als Transportprotokoll. Eigentlich sicherheitstechnischer Wahnsinn. est werden alle Ports geschlossen und dann wird alles durch den einen http-Port gezwaengt. Damit ist dann der ganze Schutzt der anderen Ports fuer die Katz und muss auf hoeherer Ebene neu installiert werden

                    Comment

                    Working...
                    X