Nov 17, 2007

JavaFX: Связываем аттрибуты разных классов.

Одной из интересных возможностей JavaFX является связывание атрибутов. Для этого используется ключевое слово inverse. Если интерпретатор JavaFX встречает ключевое слово inverse в описании атрибута класса, он автоматически обновляет (вставка, удаление замена) соотвествующий (связанный атрибут). Рассмотрим несколько примеров. Первый взят из официального описания языка (The JavaFX Script Programming Language): class Person { attribute name: String; attribute parent: Person inverse Person.children; attribute children: Person* inverse Person.parent; function getFamilyIncome(): Number; function getNumberOfChildren(): Number; operation marry(spouse: Person); } В данном случае изменение атрибута children повлечет изменение атрибута parent соответствующего объекта. Вот как это будет выглядеть: var pp:Person = Person {name: "Parent"}; var pc1:Person = Person {name: "Child1"}; var pc2:Person = Person {name: "Child2"}; insert pc1 into pp.children; pc2.parent = pp; p("pc1 = {pc1}"); p("pc2 = {pc2}"); p("pp = {pp}"); В консоле мы получим следующее: pc1 = Person {name: 'Child1' parent: Person {name: 'Parent' parent: null children: [Person ... Person {name: 'Child2' parent: Person ... children: []}]} children: []} pc2 = Person {name: 'Child2' parent: Person {name: 'Parent' parent: null children: [Person {name: 'Child1' parent: Person ... children: []} Person ...]} children: []} pp = Person {name: 'Parent' parent: null children: [Person {name: 'Child1' parent: Person ... children: []} Person {name: 'Child2' parent: Person ... children: []}]} Как видно, добавление нового объекта pc1 в коллекцию объекта pp автоматически обновляет атрибут pc1.parent. И, соотвественно, когда мы указывает значение атрибута parent у объекта pc2 - от он автоматически добавляется в коллекцию pp.children.

No comments: