GET und SET Methoden

Getting started ... Alles für einen gelungenen Start.
10 Beiträge • Seite 1 von 1
10 Beiträge Seite 1 von 1

GET und SET Methoden

Beitrag von yuro (ForumUser / 26 / 8 / 0 ) »
Hallo Leute,

da ich recht neu bin in diesem Forum und ich noch ein totaler Anfänger in ABAP bin wollte ich mal wissen wie ich GET/SET Methoden erstellen kann.

Und zwar geht es um folgendes Problem.

Ich habe öffentliche und nichtöffentliche Attribute. Auf die nichtöffentlichten will ich mit GET/SET Methoden zugreifen können.

Code: Alles auswählen.

CLASS lcl_auto DEFINITION.
  PUBLIC SECTION.

  DATA kennzeichen(10) TYPE c.
        
  METHODS drucke.

  PRIVATE SECTION.
  
  DATA: autotyp(20) TYPE c,
        tankfuellung TYPE i,
        verbrauch TYPE p DECIMALS 2.
ENDCLASS.
Könnte mir da einer weiterhelfen? :)

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: GET und SET Methoden

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
So in etwa?

Code: Alles auswählen.

*----------------------------------------------------------------------*
*       CLASS lcl_auto DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_auto DEFINITION.
  PUBLIC SECTION.

    DATA kennzeichen(10) TYPE c.

    METHODS drucke.
    METHODS get_autotyp EXPORTING e_autotyp TYPE char20.
    METHODS set_autotyp IMPORTING i_autotyp TYPE char20.
  PRIVATE SECTION.

    DATA: autotyp(20) TYPE c,
          tankfuellung TYPE i,
          verbrauch TYPE p DECIMALS 2.
ENDCLASS.                    "lcl_auto DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_auto IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_auto IMPLEMENTATION.
  METHOD drucke.
  ENDMETHOD.                    "drucke

  METHOD get_autotyp.
    e_autotyp = autotyp.
  ENDMETHOD.                    "get_autotyp

  METHOD set_autotyp.
    autotyp = i_autotyp.
  ENDMETHOD.                    "set_autotyp

ENDCLASS.                    "lcl_auto IMPLEMENTATION

Folgende Benutzer bedankten sich beim Autor PeterPaletti für den Beitrag:
yuro


Re: GET und SET Methoden

Beitrag von yuro (ForumUser / 26 / 8 / 0 ) »
Hej Peter :-)

Danke dir erst einmal für die schnelle Antwort.
Das ist das was ich gesucht habe. Habe es bei mir so in etwa gleich definiert.
Werde mal meine Lösung später online stellen :)

Re: GET und SET Methoden

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
Empfehlung meinerseits: Die GET-Methode mit einem RETURNING Parameter statt mit einem EXPORTING Pararameter machen.

lg ADT
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: GET und SET Methoden

Beitrag von PeterPaletti (Specialist / 348 / 32 / 97 ) »
Da hat ADT auch wieder recht.
Also vielleicht besser so:

Code: Alles auswählen.

CLASS lcl_auto DEFINITION.
  PUBLIC SECTION.
    TYPES: t_verbrauch(8) TYPE p DECIMALS 2.

    DATA kennzeichen(10) TYPE c.
    METHODS constructor IMPORTING i_autotyp TYPE char20
                                  i_tank TYPE i
                                  i_verbrauch TYPE t_verbrauch.
    METHODS drucke.
    METHODS get_autotyp RETURNING value(e_autotyp)  TYPE char20.
    METHODS set_autotyp IMPORTING i_autotyp TYPE char20.
  PRIVATE SECTION.
    .
    DATA: autotyp(20) TYPE c,
          tankfuellung TYPE i,
          verbrauch TYPE t_verbrauch.
ENDCLASS.                    "lcl_auto DEFINITION
*----------------------------------------------------------------------*
*       CLASS lcl_auto IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_auto IMPLEMENTATION.
  METHOD constructor.
    autotyp = i_autotyp.
    tankfuellung = i_tank.
    verbrauch = i_verbrauch.
  ENDMETHOD.                    "constructor

  METHOD drucke.
  ENDMETHOD.                    "drucke

  METHOD get_autotyp.
    e_autotyp = autotyp.
  ENDMETHOD.                    "get_autotyp

  METHOD set_autotyp.
    autotyp = i_autotyp.
  ENDMETHOD.                    "set_autotyp

ENDCLASS.                    "lcl_auto IMPLEMENTATION

DATA ref_my_class TYPE REF TO lcl_auto.
DATA ld_autotyp TYPE char20.

START-OF-SELECTION.
  CREATE OBJECT ref_my_class
    EXPORTING
      i_autotyp   = 'MERCEDES'
      i_tank      = 80
      i_verbrauch = 2.
  ld_autotyp = ref_my_class->get_autotyp( ).
  WRITE ld_autotyp.

Re: GET und SET Methoden

Beitrag von yuro (ForumUser / 26 / 8 / 0 ) »
Hallo nochmal,

danke erstmal für eure Mithilfe :)

Hab folgendes Problem. So sieht momentan mein Quellcode aus:

Code: Alles auswählen.

CLASS lcl_person DEFINITION.
  PUBLIC SECTION.

  DATA: n_name(20) TYPE c,
        v_name(20) TYPE c.

  METHODS:constructor IMPORTING in_name TYPE csequence
                                iv_name TYPE csequence
                                i_plz TYPE csequence
                                i_ort TYPE csequence
                                i_strasse TYPE csequence,
          drucke,
          zaehlen,

          get_plz RETURNING VALUE(r_plz) LIKE plz,
          set_plz IMPORTING VALUE(i_plz) TYPE csequence,
          get_ort RETURNING VALUE(r_ort) LIKE ort,
          set_ort IMPORTING VALUE(i_ort) TYPE csequence,
          get_strasse RETURNING VALUE(r_strasse) LIKE strasse,
          set_strasse IMPORTING VALUE(i_strasse) TYPE csequence.

  PRIVATE SECTION.

  DATA: plz(5) TYPE c,
        ort(20) TYPE c,
        strasse(50) TYPE c.
ENDCLASS.

*------------------------------------*
* Implementierung von Klasse "PERSON"
*------------------------------------*

CLASS lcl_person IMPLEMENTATION.

  METHOD constructor.
    n_name  = in_name.
    v_name  = iv_name.
    ort     = i_ort.
    plz     = i_plz.
    strasse = i_strasse.

    ADD 1 TO zaehler.
  ENDMETHOD.

  METHOD get_plz.
    r_plz = plz.
  ENDMETHOD.

  METHOD set_plz.
    plz = i_plz.
  ENDMETHOD.

  METHOD get_ort.
    r_ort = ort.
  ENDMETHOD.

  METHOD set_ort.
    ort = i_ort.
  ENDMETHOD.

  METHOD drucke.
    WRITE: / 'Mein Name ist ', 15 v_name, 25 n_name, 30 '.',
           / 'Anschrift: ', 12 strasse, 27 plz, 35 ort.
    SKIP.
  ENDMETHOD.
ENDCLASS.

*------------------------------------*
* Datendeklaration
*------------------------------------*

DATA person1 TYPE REF TO lcl_person.

*------------------------------------*
* Ereignis
*------------------------------------*

START-OF-SELECTION.

CREATE OBJECT person1 EXPORTING in_name   = 'Meier'
                                iv_name = 'Peter'
                                i_strasse  = 'Peterstrasse'
                                i_plz      = '60322'
                                i_ort      = 'Frankfurt am Main'.

person1->drucke( ).
Folgender Fehler wird mir angezeigt:
"PLZ" muß eine flache Struktur sein. Interne Tabellen, Referenzen, Strings und Strukturen sind als Komponenten verboten.
@Peter
Hätte eine Frage zur Methode constructor und zwar warum müssen die Variablen dort ebenfalls angegeben werden? Wenn ich im Create Object Teil die Werte eintrage kommen die doch in die set-Methode oder nicht? Bei ABAP liest man doch eigentlich von links nach rechts oder hab ich mich verlesen?

Re: GET und SET Methoden

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
Du refernzierst mit den LIKEs in deiner PUBLIC Schnittstelle (GET_PLZ, GET_ORT und GET_STRASSE) auf Variablen im PRIVATE Abschnitt und das funktioniert nicht.

Das mit dem Constructor und der Parameterübergabe an ihn ist so eine Sache...
Vielerorts wird er als INIT-Methode "missbraucht" um nicht die Methodenaufrufe alle extra ausführen zu müssen. Du hast aber schon recht, dass bei Vorhandensein von SET-Methoden die Initialisierung über den Constructor unnötig ist. Aber der Programmierer ist halt mal ein (schreib)faules Tier ;)
Außerdem kann man bei zwingenden Parametern im Constructor von einem "Grundset" an vorhandenen Informationen ausgehen.

Noch was zum Thema bessere CODE-Lesbarkeit:
Gewöhne dir bitte gleich von Anfang an an, wenn du auf Variablen deiner Instanz zugreifst das Schlüsselwort ME zu verwenden.

Code: Alles auswählen.

  METHOD set_ort.
    me->ort = i_ort.
  ENDMETHOD.

  METHOD drucke.
    WRITE: / 'Mein Name ist ', 15 me->v_name, 25 me->n_name, 30 '.',
           / 'Anschrift: ', 12 me->strasse, 27 me->plz, 35 me->ort.
    SKIP.
  ENDMETHOD.
Dann kann man sofort zwischen den Parametern der Methode und den Variablen der Klasse unterscheiden.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
yuro

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: GET und SET Methoden

Beitrag von yuro (ForumUser / 26 / 8 / 0 ) »
Danke schonmal für den Tipp :)

Frag mich nur wie ich jetzt auf meinen Private bereich zugreifen kann? :cry:

Re: GET und SET Methoden

Beitrag von Thanatos82 (Expert / 699 / 32 / 123 ) »
Moin,

innerhalb deiner definierten Methoden kannst du auf deine privaten Attribute und Methoden zugreifen.
Von außerhalb deiner Klasseninstanz kannst du nur auf öffentliche Methoden und Attribute zugreifen.
Gruß,
der Matze

Re: GET und SET Methoden

Beitrag von a-dead-trousers (Top Expert / 4396 / 223 / 1182 ) »
yuro hat geschrieben:Frag mich nur wie ich jetzt auf meinen Private bereich zugreifen kann? :cry:
Verwende einfach statt LIKE einen echten Datentyp mit TYPE.
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Seite 1 von 1

Vergleichbare Themen

2
Antw.
1888
Views
Aufruf Methoden
von SAP_ENTWICKLER » 24.11.2015 08:27 • Verfasst in ABAP® Core
3
Antw.
2118
Views
Tables in Methoden
von debianfan » 03.07.2018 09:56 • Verfasst in ABAP Objects®
4
Antw.
3991
Views
Methoden redefinieren
von cschmoel » 01.10.2012 08:57 • Verfasst in ABAP® für Anfänger
1
Antw.
1612
Views
Methoden aufrufen
von chyth » 30.07.2007 15:06 • Verfasst in ABAP® für Anfänger
0
Antw.
2005
Views
Verwendungsnachweis für Methoden?
von Yllana » 12.07.2007 15:01 • Verfasst in ABAP Objects®

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 12 Minuten von DeathAndPain 14 / 10726
Dialog-Container mit Toolbar/Status
vor 23 Minuten von DeathAndPain gelöst 24 / 3847
User Exit EXIT_RQCPRM10_001
vor 19 Stunden von a-dead-trousers 2 / 337
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1387

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Trennen Strasse und Hausnummer
vor 12 Minuten von DeathAndPain 14 / 10726
Dialog-Container mit Toolbar/Status
vor 23 Minuten von DeathAndPain gelöst 24 / 3847
User Exit EXIT_RQCPRM10_001
vor 19 Stunden von a-dead-trousers 2 / 337
Daten an Tabelle binden
Gestern von Lukas Sanders 2 / 1387

Unbeantwortete Forenbeiträge

aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2919
Hilfe bei SWEC/SWE2
September 2024 von retsch 1 / 9513