Metódus

A Programozás Wiki wikiből

Meghatározás[szerkesztés]

A metódus (avagy tagfüggvény) olyan eljárás vagy függvény, amelyet az objektumon belül deklarálunk mivel szorosan kapcsolódik az objektumhoz.

A metódus az objektumorientált programozás egyik legfontosabb eleme. Tulajdonképpen arról van szó, hogy adatmezőkhöz hasonlóan függvény vagy eljárás típusú mezőket is deklarálhatunk egy objektumtípus definiálásakor. Az ilyen jellegű objektummezőket összefoglalóan metódusnak nevezzük.

A C++ programozási nyelvben a metódusokat egyszerűen csak függvénymezőnek (member function) nevezik.

Statikus metódus[szerkesztés]

A statikus metódus számára a fordító ugyanúgy fordítási időben foglal helyet, és oldja fel a rájuk való hivatkozásokat, mint a hagyományos statikus változóknak. A statikus metódusok gyakran jól használható eszközök, de néha nem elég hatékonyak. Mivel mi van akkor, ha fordítási időben való hivatkozást-feloldást szeretnénk megvalósítani? A probléma megoldása a metódus hivatkozások futási időben való feloldása, vagyis dinamikussá tétele. Ehhez nyújtanak segítséget a virtuális metódusok használata.


Virtuális metódus[szerkesztés]

A virtuális metódusok a sokalakúság igen hatékony támogatói. A sokalakúság jelentése, hogy egy metódusnak nevet adunk és hozzáférhetővé tesszük azt az objektum hierarchiájából (családfájából) úgy, hogy minden objektum saját magához illeszkedő módon implementálja a metódust. Különböző objektumorientált programozási nyelvekben másként jelölik egy metódus virtuális mivoltát. Pl: Pascalban a Virtual foglalt szóval.

point = Object(location)
  visible: boolean;
  Constructor Init(InitX, InitY: integer);
  Procedure Show; Virtual;
  Procedure Hide; Virtual;
  Function  IsVisible: boolean;
  Procedure MoveTo(NextX, NextY: integer);
  Procedure DragIt(DragBy: integer); Virtual;
End;

Amit érdemes megjegyezni a virtuális metódusokkal kapcsolatban, hogy ha egy metódust az Ősben virtuálisnak deklarálunk, akkor valamennyi leszármazott azonos nevű metódusa virtuális lesz. Minden objektum típusnak, amely virtuális metódust tartalmaz, szükséges egy un. konstruktor (ajánlott név: Init), amelyet az objektum minden példányára meg kell hívni, még mielőtt bármelyik virtuális metódusát hívnánk.

Példakód a statikus metódus használatára[szerkesztés]

A metódus az adatstruktúra inicializálásával kezdődik.

  type location = object
                    x, y: integer;
                    procedure init(newx, newy: integer);
                    function GetX: integer;  {statikus metódus}
                    function GetY: integer;  {szintén statikus}
                  end;
  procedure location.init(newx, newy: integer);
  begin
    x:= newx; (*az x mező a location objektumé*)
    y:= newy; (*az y mező a location objektumé*) 
  end;
  function location.GetX: integer;
  begin
    GetX:= x;
  end;
  function location.GetY: integer;
  begin
    GetY:= y;
  end;

A fentiek után már inicializálhatjuk a location objektum egy példányát. Úgy kell hívni a metódust, mintha egy rekord mezője volna.

  var 
   MyLocation: location; {statikus objektum}
  BEGIN
    MyLocation.Init(3, 45);
    WriteLn('X koordináta: ', MyLocation.GetX);
    WriteLn('Y koordináta: ', MyLocation.GetY);
  END.