Announcement

Collapse
No announcement yet.

Objekt einer Instanz zuweisen, verschiedene Möglichkeiten

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

  • Objekt einer Instanz zuweisen, verschiedene Möglichkeiten

    Hallo,

    ich bin sowohl ein Neuling in diesem Forum als auch unter den Programmierern.
    Ich habe eine grundlegende Frage, es handelt sich um eine VB.Net Umgebung die in ABB Robotstudio 5.11 integriert ist.

    Welchen Unterschied machen mir die folgenden 2 Formulierungen, wenn ich alles richtig verstanden habe geht es darum, dass ich einer Instanz die ich anlege ein Objekt zuweise:

    Dim stn as Station=Project.ActiveProject
    Dim selobject as Projectobject=stn.Selection.SingleSelectedObject

    und

    Dim selobject as projectobject= Project.ActiveProject.Selection. SingleSelectedObject



    Von der Funktionalität macht es scheinbar keinen Unterschied (Debug-Modus in Robotstudio nicht nutzbar!)und die grundsätzliche Funktionalität ist mir klar. Bei beiden habe ich im Endeffekt eine Variable, der im aktiven Projekt ein Object zugewiesen wird, wenn genau eines vor Starten des Makros mit Mausklick ausgewählt wurde. Welchen Unterschied macht es, wenn ich mir zunächst die Variable stn bilde (das nennt man docj dann Instanz??) oder nicht?




    Ich habe noch ein weiteres analoges Beispiel, wobei einer der beiden hier zu einer Fehlermeldung führt:

    Dim stn as Station=Project.ActiveProject
    Dim wobj as RSWorkobject = stn.ActiveTask.ActiveWorkobject

    oder

    Dim wobj as RSWorkobject = Project.ActiveProject.ActiveTask.ActiveWorkobject




    Der 2. Fall brint mir hier folgende Fehlermeldung: "ActiveTask" is not a member of "ABB.Robotocs.RobotStudio.Project"

    Schön und gut...nur was macht das dann für einen Unterschied, ob ich mir erst die Instanz stn schaffe? Warum ist ActiveTask dann auf einmal Member???
    Ich danke euch schon mal für eure Antworten. Und wenn ich irgendwas falsch benannt habe (Instanzen z.b.) korrigiert mich bitte.


    Zuerst dachte ich, dass jeweils beide Schreibweisen das gleiche bedeuten (lediglich Verkürzung, ich muss nicht immer "Project.ActiveProject" sondern nur noch "stn" schreiben), aber beim gerade vorangegangenen Beispiel ist dies ja nicht der Fall! Also


    Die verwendeten Namespaces und Referencen sind ABB eigene Referenzen. Sie sind in der Hilfe wie folgt beschrieben:

    Station (Class): The Station object is a set of objects with a spatial and/or logical relationsship. Creates and initiates a new station object.
    Project (Class): Base class for all project types.
    ActiveProject (Public Ahared Property): Gets the project that is currently active
    Projectobject (Class): Abstract base class for all objects that can be part of a Project. It can not be instanciated.
    Selection (Public Read only Prooerty): Gets an object giving acces to the selection system for the project.
    Singleselected (Public Read only property): If a single object is selected, that object is returned, otherwise null.
    RSWorkobject: A Workobject is a coordinate system...Initializes a new instance of the RSWorkobject class.
    ActiveTask: !keine Definition gefunden! Aber bezieht sich wohl darauf, dass das ActiveWorkobject (siehe nächster Befehl) aus dem aktiven Task genommen wird.
    ActiveWorkobject: Gets or stes the active RSWorkobject of the task

  • #2
    Hallo und willkommen,

    Welchen Unterschied machen mir die folgenden 2 Formulierungen, wenn ich alles richtig verstanden habe geht es darum, dass ich einer Instanz die ich anlege ein Objekt zuweise:

    Dim stn as Station=Project.ActiveProject
    Dim selobject as Projectobject=stn.Selection.SingleSelectedObject

    und

    Dim selobject as projectobject= Project.ActiveProject.Selection. SingleSelectedObject
    Es macht keinen Unterschied. Wenn die Variable stn gar nicht benötigt wird optimiert der Kompiler dies sogar weg.

    Den Rest kann ich nicht beurteilen denn ich hab keine Ahnung von ABB Robotstudio und will mich auch nicht darin einarbeiten. Bitte um Verständnis.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      Dim stn as Station=Project.ActiveProject
      Dim wobj as RSWorkobject = stn.ActiveTask.ActiveWorkobject

      oder

      Dim wobj as RSWorkobject = Project.ActiveProject.ActiveTask.ActiveWorkobject




      Der 2. Fall brint mir hier folgende Fehlermeldung: "ActiveTask" is not a member of "ABB.Robotocs.RobotStudio.Project"
      Von welchem Klassentyp ist den die Rückgabe Project.ActiveProject? Von der Fehlermeldung her ist die wohl vom Typ 'Project'. Im ersten Fall hast du also vermutlich die Rückgabeklasse von 'Project' auf 'Station' gecastet. Diese Klasse hat eben die Property ActiveTask während die eigentliche Rückgabe von 'Project.ActiveProject' diese nicht hat. Du mußt also vermutlich im 2.ten Fall nur den passenden Cast ebenfalls einbauen.

      Comment


      • #4
        Danke für eure Antworten!

        @Ralf Jansen: Ja das ist korrekt! Kannst du mir einen Tipp geben, wie ich bei sowas vorgehe? Also wenn ich was bestimmtes umsetzen will, mir aber dazu die Funktionen fehlen bzw. die Typen unverträglich sind? Muss ich da einfach wild rumprobieren oder steckt da einen für einen Laien erkennbare Logik hintendran? Denn die Beispiele stammen von ABB udn ich wollte sie nur nachvollziehen um von nun an selbst dort zu programmieren.
        Warum muss ich den Typ explicit umcasten indem ich mir eine Instanz von einem Objekt ableite und das Programm erkennt es nicht direkt automatisch?

        Comment


        • #5
          Warum muss ich den Typ explicit umcasten indem ich mir eine Instanz von einem Objekt ableite und das Programm erkennt es nicht direkt automatisch?
          Der Satz als ganzes ist schwer zu verstehen.
          Klarstellungen
          1.) Instanz == Objekt != Klasse. Der Mittelteil deines Satzes macht also keinen Sinn.
          2.) Man leitet Klassen von Klassen ab. Objekte/Instanzen haben da nichts zu suchen.
          3.) Man erhält eine Instanz(Objekt) durch instanzieren aus einer Klasse nicht durch ableiten. Siehe auch 2.tens
          4.) Der Compiler kann nicht automatisch die Richtigkeit deines Aufrufs erkennen da erst zur Laufzeit feststeht welcher konkreter Typ von Project.ActiveProject zurückgegeben wird. Nur der Programmierer aufgrund von zusätzlichem Wissen über den Programmcontext kann entscheiden das da immer nur ein Objekt vom Typ Station zurückkommen kann. Oder er muß selbst Code schreiben der prüft was den da für ein Klassentyp zurückkommt und dann entsprechend vorgehen.

          Sorry, bei deiner Antwort denke ich das ein kompletter Rundumschlag der objektorientierten Programmierung notwendig wäre um dir das richtig zu erklären. Das passt hier vom Umfang sicher nicht hin. Du solltest dich um passende Literatur bemühen.

          Comment


          • #6
            Danke....ja ich weiß, Grundlagen würden mir nicht Schaden ;-)
            Aber danke, deine 4 Punkte haben mich das schon vom Prinzip her verstehen lassen.

            Comment

            Working...
            X