Ugrás a tartalomhoz

immutable object

A Wikiszótárból, a nyitott szótárból


Főnév

immutable object (tsz. immutable objects)

  1. (informatika) Egy immutable object (megváltoztathatatlan objektum) olyan objektum, amelynek állapota létrehozás után többé nem módosítható. Ez a fogalom kulcsfontosságú a funkcionális programozásban, többszálú programozásban, valamint a hibamentes kód írásában.



🧠 Mi az az immutábilis objektum?

Egy objektum akkor immutábilis, ha az összes mezője konstans vagy csak olvasható, és nincs mód a belső állapot megváltoztatására.


📌 Példák különböző nyelveken

C++

struct Point {
    const int x;
    const int y;

    Point(int x, int y) : x(x), y(y) {}
};
  • Itt a x és y mezők const, tehát nem módosíthatók a konstruktor után.
  • Ez egy immutable value object.



Python

point = (3, 4)  # tuple
  • A tuple típusa immutábilis – nem lehet elemeit módosítani.
s = "hello"
s[0] = "H"  # ❌ TypeError: 'str' object does not support item assignment
  • A str (karakterlánc) is immutábilis típus.



Java

final class Point {
    private final int x;
    private final int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public int getX() { return x; }
    public int getY() { return y; }
}
  • Minden mező final, és nincs setter – ez egy klasszikus immutable osztály.



✅ Előnyök

Előny Leírás
Biztonságos párhuzamosítás Többszálú környezetben nem okoz adatversenyt.
Egyszerű hibakeresés Állapot nem változik, kevesebb mellékhatás.
Referenciák megosztása biztonságos Nem okoz gondot, ha többen ugyanarra az objektumra hivatkoznak.



⚠️ Hátrányok

Hátrány Leírás
Több memóriahasználat Minden “változtatás” új objektumot eredményez.
Több példány Módosítás helyett új példány kell.
Nehézkes mutáció igény esetén Ha mégis kellene változtatni, workaround kell (pl. másolat, builder minta).



🔄 Módosítás immutábilis objektum esetén

Mivel nem lehet módosítani, ezért új példányt kell létrehozni:

point = (3, 4)
new_point = (point[0], point[1] + 1)  # új tuple, nem a régit módosítjuk

Vagy C++-ban:

Point p(3, 4);
// nincs mód p.x = 5-re, csak új Point példány készíthető

🧩 Minták, ahol gyakori

  • Value Object (DDD – Domain-Driven Design)
  • Functional Programming
  • Concurrency-safe Systems
  • String interning / caching



🔁 C++-os megközelítés: const mindenhol

class Config {
    const int port;
public:
    Config(int p) : port(p) {}
    int getPort() const { return port; }
};
  • const adattagok
  • csak olvasó függvények (const metódusok)
  • nincs setter



🧭 Összegzés

Tulajdonság Érték
Definíció Objektum, amely nem módosítható
Példák std::string (C++ valójában mutálható), tuple (Python), String (Java)
Cél Stabilitás, biztonság, kiszámíthatóság
Használat Többszálúság, értékobjektumok, funkcionális kód