Jelölő interfész
A számítógép-tudományban a jelölő interfész egy programtervezési minta, amit futásidejű információt nyújtó nyelvek használnak. Eszköz arra, hogy metaadatokat kapcsoljanak az osztályhoz, ha a nyelvben nincs támogatás egyes metaadatok kezeléséhez.
A jelölő interfész nem ír elő funkcionalitást a megvalósító osztálynak. Az interfész jelenlétével jelzi, hogy az osztály speciálisan viselkedik. Használatához az osztálynak elég deklarálnia, hogy megvalósítja az interfészt,'[1] implementálnia legfeljebb olyan metódusokat kell, amelyek ellenőrzik az interfész meglétét.
A minta használatának példája a Java nyelv Serializable interfésze. Ez azt jelenti ki az osztályról, hogy nem tranziens tagjai elmenthetők, ObjectOutputStreambe írhatók. Az ObjectOutputStream writeObject0(Object,boolean) privát metódusa ellenőrzi, hogy szerializálható-e az osztály, és ha nem, akkor kivételt dob (NotSerializableException).
Kritika
Az interfészek szerződést jelentenek az implementáló osztály és a kliensek között. A jelölő interfész megtévesztő lehet, mivel az osztály funkcionalitása nem itt van leírva. Habár lehetséges hibrid interfészek megvalósítása, ez nem ajánlott.
Szerződés jellege miatt egy interfészt csak egyszer lehet implementálni, és nem lehet nem implementálttá tenni egy ősben megvalósított interfészt. A fenti példában az utód osztálynak explicit NotSerializableExceptiont kell dobnia, ha nincs szüksége a szerializálhatóságra.
Alternatív megoldás a metaadatok támogatása, például annotációkkal. A .NET keretrendszerben szerepüket a custom attributumok töltik be. Minden adatfajtára (interfész, osztály, attributumok, metódusok, paraméterek) feltehető, és reflexióval (reflection) elérhető.
Pythonban a Zope és a Plone használ jelölő interfészeket. Metaadatként deklarálják őket, és a leszármazott osztályok az implementsOnly kulcsszóval válogathatnak az ősök interfészei közül.
Jegyzetek
- ↑ Bloch, Joshua. Item 37: Use marker interfaces to define types, Effective Java (Second edition). Addison-Wesley, 179. o. (2008). ISBN 978-0-321-35668-0
Fordítás
Ez a szócikk részben vagy egészben a Marker interface pattern című angol Wikipédia-szócikk fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.