Immutable object

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Immutable object (česky neměnný objekt) je název pro návrhový vzor, používaný při programování. Vyznačuje se tím, že žádná z jeho metod není schopná změnit jeho nastavenou hodnotu.

Účel[editovat | editovat zdroj]

Vzor se hodí pro případy, kdy nechceme aby se nám mohla změnit hodnota objektu se kterým pracujeme. Změnit hodnotu muttable objektů (tj. opak immutable objektů) nám při běhu programu může např. jiné vlákno.

Základní implementace[editovat | editovat zdroj]

Implementace vzoru se skládá z vytvoření jednoho (či více) privátních atributů, ve kterých uložíme hodnotu. Dále musíme zajistit nastavení těchto atributů. Nejčastěji se hodnota nastaví již při tvorbě objektu - tedy v konstruktoru.

Další možností je mít setter, ve kterém hodnotu nastavíme. Ovšem v tomto případě musíme zajistit, že pokud se o nastavení hodnoty pokusí někdo další (tedy změnit hodnotu objektu), tak se operace nepovede (například vyvoláme výjimku).

Implementace v jazyce PHP[editovat | editovat zdroj]

V ukázce vidíme, že přestože posouváme bod v rovině o určitý vektor, tak vracíme nový bod. Tím zajistíme, že jsme nezměnili hodnoty původního objektu.

class Point
{
	private $x;
 
	private $y;
 
	public function __construct($x, $y)
	{
		$this->x = $x;
		$this->y = $y;
	}
 
	public function getX()
	{
		return $this->x;
	}
 
	public function getY()
	{
		return $this->y;
	}
 
	/**
	 * Posune bod o dany vektor
	 * 
	 * Predpokladame rozhrani tridy vektor:
	 * $vector->getX();
	 * $vector->getY();
	 */
	public function addVector(Vector $vector)
	{
		$x = $this->x + $vector->getX();
		$y = $this->y + $vector->getY();
 
		return new Point($x, $y);
	}
 
	public function __toString()
	{
		return "[" . $this->x . ", " . $this->y . "]";
	}
}
 
$point1 = new Point(0, 0);
$point2 = $point1->addVector(new Vector(1, 2));
 
// $point1 a $point2 jsou ruzne objekty
$dumpPoint1 = (string)$point1; // [0, 0]
$dumpPoint2 = (string)$point2; // [1, 2]

Literatura[editovat | editovat zdroj]

Související články[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]