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