Az objektumorientált programozásban a tagváltozó (néha tagmezőnek is hívják) egy meghatározott objektumhoz kapcsolódó változó, amely annak összes metódusa számára (tagfüggvény) elérhető.

Az osztályalapú programozási nyelvekben két kategória létezik: osztályváltozók és példányváltozók. Az osztályváltozóknál (statikus tagváltozónak is hívják) csak egy változópéldány létezik, amely meg van osztva az összes példánnyal. A példányváltozóknál az osztály minden példányának saját független változó példánya van.

Példák

C++ class Foo {

    int bar; // Tagváltozó.

  public:

    void setBar(const int newBar) {

      bar = newBar;

int main () {

  Foo rect; // Helyi változó.

  return 0;

Java public class Program {     public static void main(String[] args)

        // Ez egy helyi változó. Az élettartamát         // a lexikális hatáskör határozza meg.         Foo foo;

public class Foo {     /* Ez egy tagváltozó – Foo minden osztálypéldányához      egy új példány jön létre a változóból. A változó      élettartama megegyezik a "this" Foo példány      élettartamával.     */     int bar; }

Python class Foo:

    def __init__(self):

        self._bar = 0

    @property

    def bar(self):

        return self._bar

    @bar.setter

    def bar(self, new_bar):

        self._bar = new_bar

f = Foo()

f.bar = 100

print(f.bar)

Common Lisp (defclass foo () (bar))

(defvar f (make-instance 'foo))

(setf (slot-value f 'bar) 100)

(print (slot-value f 'bar))

Ruby /*

  A Ruby-nak három tagváltozó típusa van: osztályváltozó,

  osztálypéldányváltozó és példányváltozó.

*/

class Kutya

  # Az osztályváltozó az osztály törzsében van definiálva két kukacjellel

  # és leírja a Kutya osztályt és annak származtatott osztályait (ha van 

    ilyen)

  @@szaglászik = true

end

keverék = Kutya.new

keverék.class.szaglászik #=> true

class Uszkár < Kutya

  # Az osztaly példányváltozó az osztály törzsében van meghatározva egy

  # kukacjellel és csak az Uszkár osztályról tartalmaz információt. Nem

  # állít semmit a szülőosztályáról sem a származtatott osztályairól

  # állítást.

  @vedlik = false

  # Az új Uszkár példány még nincs betanítva amikor létrejön. A ‘betanított’

  # változó az inicializáló metódusban helyi változó és beállítja az @trained

  # példányváltozót. A Példányváltozó a példánymetódusban van definiálva és

  # az Uszkár példánynak egy tagja.

  def initialize(betanított = false)

    @betanított = betanított

  end

  def be_van_tanítva?

    @betanított

  end

end

p = Uszkár.new

p.class.vedlik #=> false

p.be_van_tanítva? #=> false

PHP <?php

class Példa

    /**

     * Példa példányváltozó.

     * Tagváltozók lehetnek: public, protected vagy private.

     * @var int

     */

    public int $foo;

    /**

     * Példa statikus tagváltozó.

     * @var bool

     */

    protected static int $bar;

    /**

     * Példa konstruktor metódus.

     * @param int $foo

     */

    public function __construct(int $foo)

        // Beállítja foo-t.

        $this->foo = $foo;

// Létrehoz egy új Example objektumot.

// Beállítja a "foo" tagváltozót 5-re.

$példa = new Példa(5);

// Felülírja a "foo" tagváltozót 10-re.

$példa->foo = 10;

// Kiír 10-et.

echo $példa->foo;

Lua --region példa

--- @class példa_c

--- @field foo szám Példa "tagváltozó".

local példa_c = {}

local példa_mt = {__index = példa_c}

--- Objektumot hoz létre példából.

--- @return példa_c

function példa_c.new(foo)

  -- Az első táblázat argumentum az objektum tagváltozója.

  -- A Lua objektumokban metatáblák vannak kulcs-érték pár tagváltozókkal.

  return setmetatable({

    foo = foo

  }, példa_mt)

end

--endregion

-- Létrehoz egy példa objektumot.

-- Beállítja "foo" tagváltozót 5-re.

local példa = példa_c.new(5)

-- Átírja "foo" tagváltozót 10-re.

példa.foo = 10

-- Kiír 10-et.

print(példa.foo)

Jegyzetek

Fordítás

Kategória:Python-kódpéldák Kategória:Objektumorientált programozás