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