A kötési tulajdonságok az informatikában egy konkurens programtervezési minta, ami azt jelenti, hogy több megfigyelőt kombinálnak ahhoz, hogy biztosítsák különböző objektumok tulajdonságainak szinkronizálását, vagy koordinálását. Ezt a technikát először Victor Porton írta le.

Összehasonlítás az aspektusorientált programozással Az aspektusorientált programozás kölcsönös tulajdonságainak alternatívájaként javasoltak a kötési tulajdonságok. A LibPropC++ C++ könyvtár tartalmazza.

A LibPropC++ gyengeségei a kötési tulajdonságokkal: Használata nem átlátszó, mivel azt igényli, hogy a kapcsolt tulajdonságokat közönséges tulajdonságokként kell deklarálni, és hozzáférési metódusokat kell biztosítani hozzájuk. A kötési tulajdonságok nem helyettesítik a metódushívásokat. Nincs együttműködési naplózás.

Megvalósítása Kétféle kötési tulajdonsága van, az egyirányú és a kétirányú. Egyirányút csak akkor szabad használni, ha az egyik tulajdonság csak olvasható, egyébként a kétirányút kell.

A végtelen ciklusokat a jel blokkolásával, vagy az új és a régi értékek összehasonlításával, esetleg a fölösleges értékadások kiiktatásával lehet elkerülni.

Különböző típusok között típuskonverzióval lehet kötési tulajdonságokat létrehozni. Ha transzformációkra van szükség, akkor a transzformációkat típuskonverzióként kell kezelni.

Eredménykontextus A tulajdonságok automatikusan szinkronizálódnak. A könyvtári hívások között az EqualityConstraints invariánsban megadott feltételeknek kell megfelelniük. A változások követése erőforrásokat igényel.

Példa kódok Egyirányú kötés:

bind_multiple_one_way(src_obj, src_prop, dst_objs[], dst_props[]) { for (i, j) in (dst_objs, dst_props)

bind_properties_one_way(src_obj, src_prop, i, j);

Kétirányú kötés (C++-ban):

// In this pseudo-code are not taken into the account initial values assignments bind_two_way(prop1, prop2) { bind(prop1, prop2); bind(prop2, prop1); }

A kötés megvalósítása:

on_property_change(src_prop, dst_prop) { block_signal(src_obj, on_property_change); dst_prop := src_prop; unblock_signal(src_obj, on_property_change); }

Jegyzetek

Fordítás

Kategória:Programtervezési minták