Változatlan interfész

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2021. március 22-én felülvizsgált verziótól ; az ellenőrzések 4 szerkesztést igényelnek .

Az objektumorientált programozásban a " változhatatlan interfész " egy minta egy megváltoztathatatlan objektum tervezésére . [1] [2] [3] Egy megváltoztathatatlan interfész típusdefiníciót tartalmaz, amely nem tesz közzé olyan metódusokat , amelyek állapotot módosíthatnak. Az ilyen típusú objektumok megváltoztathatatlannak tűnnek.

Példa

Java

Tekintsük a java osztályt , amely egy 2D pont.

public class Pont2D { private int x ; magán int y ; public Point2D ( int x , int y ) { this . x = x ; ezt . y = y_ _ } public int getX () { return this . x ; } public int getY () { return this . y ; } public void setX ( int newX ) { this . x = újX ; } public void setY ( int newY ) { this . y = új Y ; } }

A Point2D osztály változtatható: létrehozása után az állapota módosítható valamelyik setter metódus ( setX()vagy setY()) meghívásával.

A Point2D megváltoztathatatlan interfésze a következőképpen definiálható:

nyilvános interfész ImmutablePoint2D { public int getX (); public int getY (); }

Azáltal, hogy a Point2D-t az ImmutablePoint2D megvalósításává teszi, az ügyfélkód mostantól olyan típust használhat, amely nem rendelkezik mutációs metódusokkal, és így megváltoztathatatlan marad. Ezt a következő példa szemlélteti:

ImmutablePoint2D pont = new Point2D ( 0 , 0 ); // egy adott Point2D-példányra az int x = pont változtathatatlan interfész hivatkozik . getX (); // érvényes pont metódus hívása . setX ( 42 ); // fordítási hiba: a setX() metódus nem létezik az ImmutablePoint2D típuson

Csak egy megváltoztathatatlan interfész esetén nem lehet olyan metódust meghívni, amely megváltoztatja egy adott objektum állapotát.

Előnyök

  • Egyértelműen kifejezi a típusváltozatlanság szándékát.
  • A megváltoztathatatlan burkolómintát megvalósító típusokkal ellentétben nem kell felülbírálnia a mutáló metódusokat no exploit utasítás használatával vagy futásidejű kivételt dobni a mutációs metódus meghívásakor.

Hátrányok

  • Lehetőség van arra, hogy a változtathatatlan interfész által hivatkozott példányok egy adott változtatható típusra öntsék át, majd módosítsák az állapotot. Például:
public void mutate ( ImmutablePoint2D point ) { (( Point2D ) point ). setX ( 42 ); // érvényes hívás, mert // a pont argumentum a Point2D-be lett leadva }
  • A konkrét osztályoknak kifejezetten deklarálniuk kell egy megváltoztathatatlan interfészt a megvalósításukban. Előfordulhat, hogy ez nem lehetséges, ha az adott osztály harmadik fél kódja "tulajdonosa", például ha egy könyvtárban található.
  • Az objektum nem igazán megváltoztathatatlan, ezért nem alkalmas olyan adatstruktúrákban való használatra , amelyek megváltoztathatatlanságot igényelnek, mint például a hash térképek. Az objektum pedig a "változtatható oldalon" egyszerre változtatható.
  • Előfordulhat, hogy a módosíthatatlan objektumokhoz rendelkezésre álló fordítói optimalizálások egy része nem érhető el változtatható objektumokhoz.

Alternatívák

A megváltoztathatatlan interfész alternatívája a változtathatatlan burkolóminta .

Linkek

  1. Változatlan interfész . Letöltve: 2016. május 10. Az eredetiből archiválva : 2010. szeptember 27..
  2. megváltoztathatatlan: Java szószedet . Letöltve: 2016. május 10. Az eredetiből archiválva : 2016. április 10.
  3. Gyakorlati Java Praxis 65: Használjon öröklődést vagy delegálást a megváltoztathatatlan osztályok meghatározásához | Gyakorlati Java Praxis 65: Öröklődés vagy delegálás használata megváltoztathatatlan osztályok meghatározásához | Inf… . Letöltve: 2016. május 10. Az eredetiből archiválva : 2016. június 3.