СИСТЕМА И СПОСОБ ДЛЯ АССОЦИИРОВАНИЯ СВОЙСТВ С ОБЪЕКТАМИ Российский патент 2008 года по МПК G06F7/00 G06F9/00 

Описание патента на изобретение RU2321882C2

Область техники

Настоящее изобретение относится к средствам программного обеспечения, в частности к механизмам для управления свойствами объектов в прикладной программе (приложении).

Уровень техники

Большинство моделей программирования в настоящее время поддерживают концепцию классов. Эти классы обычно структурированы в иерархическом дереве, ветви которого представляют разные классы в классовой иерархии. Если две ветви находятся на разных уровнях, то нижняя ветвь представляет дочерний класс. Дочерний класс наследует информацию от класса, относящегося к верхней ветви (т.е. от родительского класса). Если две ветви находятся на одном и том же уровне, то классы называются братскими классами. В целях приводимого ниже описания при упоминании дочернего класса по отношению к родительскому классу могут быть использованы термины «нижний класс» и «верхний класс» соответственно для дочернего класса и родительского класса. Высшая ветвь в иерархии представляет базовый класс в иерархическом дереве классов. Обычно информация в каждом классе включает в себя свойства, способы и события. Свойства описывают характеристики, ассоциируемые с данным классом. Например, класс кнопок может иметь такие свойства, как ширина, цвет фона, тип шрифта, видимые и нажимаемые кнопки. Когда один из этих классов реализуется, то создается объект этого класса. Каждое свойство объекта имеет связанное с ним значение, которое может запрашиваться и устанавливаться в ходе рабочего прогона. Можно ожидать, что запрашиваемое или устанавливаемое значение будет соответствовать определенному типу данных, если синтаксис четко типизирован. Наличие четко типизированного синтаксиса желательно, поскольку тогда ошибки могут обнаруживаться в приложении до рабочего прогона.

При наличии классовой иерархии введение новой функциональности в объекты, находящиеся в данной классовой иерархии, затруднено. Согласно одной модели программирования новую функциональность принудительно вводят в базовый класс. После этого базовый класс становится очень крупным (например, сто способов, пятьдесят свойств и двадцать событий), что приводит к тому, что иерархия объектов становится почти неуправляемой. Нежелательный результат этой модели программирования заключается в том, что число свойств, способов и событий в базовом классе для разработчиков становится чрезмерным, чтобы разработчики смогли в полной мере понять их перед реализацией желательных характеристик в создаваемых объектах. Еще один нежелательный результат этой модели программирования заключается в том, что предъявляемые к памяти требования становятся чрезмерными из-за того, что значения для свойств сохраняются локально. Поскольку значения сохраняются локально, то приложения, создаваемые с помощью этой модели программирования, масштабируются неудовлетворительно.

Эта модель программирования также обусловливает другие трудности для независимых разработчиков. Независимым разработчикам, которые желают ввести новую функциональность, приходится вводить дочерний класс внизу иерархии. Поскольку новый дочерний класс находится внизу иерархии, то новая функциональность не доступна для других классов в данной иерархии. Поэтому независимым разработчикам необходимо вводить новую функциональность в несколько дочерних классов. Можно предположить, что при этом имеет место дублирование кодов, что отрицательно сказывается на возможности поддержки иерархии объектов. По изложенным выше причинам эта модель программирования не очень желательная.

До появления данного изобретения в распоряжении специалистов в данной обрасти техники не было такой модели программирования, которая позволяет вводить новую функциональность в класс в существующей классовой иерархии без указанных выше недостатков.

Сущность изобретения

Данное изобретение обеспечивает механизм, который обеспечивает возможность новой функциональности для класса, не требуя, чтобы новая функциональность становилась постоянной частью данного класса. Данное изобретение также позволяет сформулировать новую функциональность как свойство, которое не встроено в данный класс. В общем, данное изобретение обеспечивает механизм для ассоциирования свойств одного класса с другим классом. Это ассоциирование является легко модифицируемым, вследствие чего другие группы свойств могут ассоциироваться с данным классом.

В одном из вариантов осуществления компьютерно считываемый носитель, содержащий объект со свойством первой группы свойств, также включает в себя структуру данных. Структура данных содержит определения для каждого свойства второй группы свойств и содержит по меньшей мере один статический способ. Статический способ ассоциирован с одним из свойств второй группы свойств и содержит первый параметр. Первый параметр однозначно идентифицирует одно свойство. Статический способ обеспечивает ассоциирование одного свойства с объектом без указания прямой ссылки на одно свойство в объекте.

Одна из особенностей данного изобретения заключается в том, что статический способ обеспечивает четко типизированный синтаксис.

Еще одна из особенностей данного изобретения заключается в том, что статический способ включает извлечение значения для объекта без использования локально сохраненного значения на объекте. Значение может быть извлечено из нескольких стадий, таких как родительский объект или перечень свойств.

Одно из преимуществ данного изобретения заключается в том, что подразделение свойств на одну или несколько подгрупп облегчает поддержку каждой подгруппы свойств. Еще одно преимущество данного изобретения заключается в том, что иерархия объектов является в большей степени расширяемой, и это обстоятельство позволяет разработчикам вводить функциональность в иерархию объектов, которая воздействует на базовый класс и все нижние классы.

Еще одно преимущество данного изобретения заключается в том, что управление хранением для свойств в объектах становится более эффективным и удобным. Еще одно преимущество данного изобретения заключается в том, что модель программирования действует в среде программирования или маркирования. Помимо этого, модель программирования действует в четко типизированных языках программирования, таких как С++ и С#. Модель программирования также поддерживает перечни свойств, уведомления об изменениях и наследовании значений.

Еще одно преимущество данного изобретения заключается в том, что могут сосуществовать независимые библиотеки, поскольку конфликты имен менее вероятны, т.к. имя присоединяемого класса эффективно становится частью имени свойства. Поэтому если два разных разработчика создают присоединяемое свойство, имеющее свойство с именем «цвет», то эти два присоединяемых свойства не будут конфликтовать.

Краткое описание чертежей

Фиг.1 - пример вычислительного устройства, которое может быть использовано в приводимом в качестве примера варианте осуществления данного изобретения.

Фиг.2 - пример отображения, которое может быть создано с помощью вычислительного устройства по фиг.1.

Фиг.3 - графическое представление модели программирования, которая позволяет присоединять свойства одного класса к другому классу в соответствии с данным изобретением.

Фиг.4 - примеры синтаксисов для осуществления модели программирования по фиг.3.

Фиг.5 - логическая блок-схема, иллюстрирующая процесс установки значения в соответствии с данным изобретением.

Фиг.6 - логическая блок-схема, иллюстрирующая процесс извлечения значения в соответствии с данным изобретением.

Подробное описание предпочтительного варианта осуществления изобретения

Настоящее изобретение обеспечивает модель программирования, которая позволяет обеспечить новую функциональность для класса, не требуя, чтобы новая функциональность становилась постоянной частью класса. Помимо этого, данное изобретение позволяет выразить новую функциональность как свойство, которое не встраивается в класс. В общем, данное изобретение обеспечивает механизм для ассоциирования свойств одного класса с другим классом. В соответствии с приведенным ниже подробным описанием модель программирования согласно данному изобретению обеспечивает динамические свойства объектам без встраивания свойств в объект.

Согласно фиг.1 приведенная в качестве примера система для реализации изобретения содержит вычислительное устройство, такое как вычислительное устройство 100. В упрощенной конфигурации вычислительное устройство 100 обычно содержит по меньшей мере один процессор 102 и системную память 104. В зависимости от точной конфигурации и типа вычислительного устройства системная память 104 может быть энергозависимой (ЗУПВ), энергонезависимой (ПЗУ, флэш-ПЗУ) и пр. или комбинацией того и другого. Системная память обычно содержит операционную систему 105, один или более программных модулей 106 и также может содержать программные данные. Примеры программных модулей 106 включают в себя "Visual Studio IntelliSense" компании "Microsoft Corporation, Redmond, WA, и другие виды среды программирования средств программного обеспечения, которые применяют объекты-библиотеки. Помимо этого, программные модули 106 содержат прикладные программы, созданные с помощью среды программирования свойств программного обеспечения. Когда эти прикладные программы выполняются процессором 102, процессор свойств обрабатывает данную прикладную программу согласно модели программирования в соответствии с данным изобретением. Процессор свойств может быть частью операционной системы 105 или может быть другим программным модулем 106. Эта основная конфигурация вычислительного устройства 100 иллюстрируется на фиг.1 компонентами, очерченными пунктирной линией 108.

Вычислительное устройство 100 может иметь дополнительные характеристики или функциональности. Например, вычислительное устройство 100 может содержать дополнительные устройства хранения данных (съемные и/или несъемные), такие, например, как магнитные диски, оптические диски или магнитная лента. Это дополнительное запоминающее устройство показано на фиг.1 как съемное запоминающее устройство 109 и несъемное запоминающее устройство 110. Компьютерные носители данных могут включать в себя энергозависимые и энергонезависимые, съемные и несъемные носители, выполненные по любому способу или технологии для запоминания информации, такие как машинно-считываемые команды, структуры данных, программные модули или другие данные. Системная память 104, съемное запоминающее устройство 109 и несъемное запоминающее устройство 110 являются примерами компьютерных носителей данных. Компьютерные носители данных включают в себя, помимо прочего, ОЗУ, ПЗУ, ЭСППЗУ, флэш-память или другую технологию памяти, КД-ПЗУ, цифровые универсальные диски (ЦУД) или другие оптические запоминающие устройства, магнитные кассеты, магнитную ленту, магнитные диски или другие магнитные запоминающие устройства, или любой другой носитель, который может быть использован для запоминания нужной информации и доступ к которому производится вычислительным устройством 100. Любые такие носители данных могут быть частью устройства 100. Вычислительное устройство 100 может также иметь устройство(а) 112 ввода, такое как клавиатура, мышь, перо, устройство речевого ввода данных, устройство сенсорного ввода данных и др. Вычислительное устройство может также содержать устройство(а) 114 вывода данных, например, дисплей, громкоговорители, принтер и др. Эти устройства хорошо известны в данной области техники и подробно здесь не описываются.

Вычислительное устройство 100 может также содержать соединения 116 связи, которые дают устройству возможность осуществлять связь с другими вычислительными устройствами 118, например, по сети. Соединения 116 связи являются одним из примеров среды передачи данных. Среда передачи данных обычно может быть реализована с использованием машинно-считываемых команд, структур данных, программных модулей или других данных в модулированном сигнале данных, таком как несущее колебание или иной механизм транспортирования; и указанная среда передачи данных включает в себя любые средства доставки информации. Термин «модулированный сигнал данных» означает сигнал, в котором одна или более его характеристик установлена или изменяется таким образом, чтобы кодировать информацию в сигнале. Например, но не в качестве ограничения, среда передачи данных включает в себя проводные средства, такие как проводная сеть или прямое проводное соединение; и беспроводные средства, такие как акустические, радиочастотные, инфракрасные или иные беспроводные средства. Термин «машинно-считываемые носители» в данном контексте включает в себя и носители данных, и среду передачи данных.

Фиг.2 иллюстрирует приведенное в качестве примера отображение, которое может быть создано приложением в среде программирования по фиг.1. Хотя модель программирования согласно данному изобретению может использоваться в разных средах, фиг.2, как неограничивающий пример, иллюстрирует использование модели программирования в среде пользовательского интерфейса. В этом примере одно из приложений по фиг.1 создает отображение 200, показанное на фиг.2. Отображение 200 содержит диалоговое окно 202. Диалоговое окно 202 может содержать любое число других средств управления (т.е. объектов). В этом примере диалоговое окно 202 содержит окно 204 списка, окно редактирования 206 и объект 208 контейнера с двумя объектами-кнопками (например, кнопка ОК и кнопка 212 CANCEL). Согласно приводимому ниже более подробному описанию со ссылкой на фиг.3 применение обычных методов программирования предполагает, что каждый из этих объектов (например, 202-212) является дочерним объектом, выводимым из базового объекта (например, класс элемента). Помимо этого, согласно одному из вариантов осуществления данного изобретения каждый дочерний объект также может быть выведен из класса узла. Как описано ниже, этот класс узла обеспечивает характеристику «присоединения» для присоединяемых свойств.

Хотя внешне отображение 200 может выглядеть похожим на отображения, создаваемые с помощью моделей программирования известного уровня техники, здесь механизм создания отображения 200 совершенно другой. В моделях программирования известного уровня техники отображение 200 реализации кода программирования имело бы поведение объекта и внешний вид объекта, введенное в сам объект или в один из родительских объектов. Но как описано ниже, отдельные классы обеспечивают действия и внешний вид для объектов 202-212 без прямой ссылки между двумя классами.

Это позволяет разработчикам модифицировать либо представляющую действия часть, либо представляющую внешний вид часть без видоизменения всего объекта. Так, в этом примере пользовательского интерфейса каждый объект подразделяется на две части. Одна часть относится к действию (т.е. поведению), ассоциируемому с этим объектом; и другая часть относится к внешнему виду (т.е. визуализации) объекта. Поскольку визуализация отделена от поведения объекта, поэтому внешний вид объекта можно легко видоизменить, чтобы объект выглядел по-другому.

Хотя согласно приведенному выше примеру пользовательского интерфейса свойства объекта удобным образом подразделяют на группу поведения и группу внешнего вида, авторы установили, что свойства многих объектов в разной среде можно удобным образом подразделять на две или более соответствующие группы. Затем в соответствии с данным изобретением эти соответствующие группы можно «косвенно» ассоциировать друг с другом, чтобы полностью реализовать объект. Это «косвенное» ассоциирование дает несколько преимуществ по сравнению с моделями программирования известного уровня техники. Одно из преимуществ заключается в том, что независимые разработчики могут удобным образом модифицировать соответствующую группу, которая относится к их прикладной программе, при этом не изменяя прочие группы. Это сильно упрощает то количество информации, которую должен знать разработчик, чтобы изменить функциональность объекта. Помимо этого, иерархия объектов становится более управляемой. Еще одно преимущество заключается в том, что сокращается запоминание, поскольку каждый объект необязательно должен поддерживать локальное значение с текущим состоянием. Наоборот, согласно приведенному ниже более подробному описанию со ссылкой на фиг.6 состояние может быть получено из разных источников по мере необходимости.

Фиг.3 графически представляет модель 300 программирования, которая обеспечивает механизм для «косвенного» ассоциирования соответствующих групп свойств одного класса с другим классом в соответствии с данным изобретением. Аналогично другим моделям программирования данное изобретение предусматривает наличие базового класса 302. Базовый класс 302 включает в себя первую группу свойств 304, ассоциируемую с базовым классом 302. Помимо этого, базовый класс 302 включает в себя группу способов 306 и группу событий 308. Но согласно данному изобретению базовый класс выводят из класса 301 узла. Класс 301 узла обеспечивает способ SetVaue() 307 (установка значения) и способ GetValue() 39 (получение значения).

Вторая группа свойств 324 содержится в присоединяемом классе 322. Присоединяемый класс 322 также включает в себя по меньшей мере два статических способа, ассоциируемых с каждым из свойств второй группы свойств 324 (например, SetFont() 326 (установка шрифта) и GetFont() 330 (получение шрифта). Эти статические способы можно рассматривать как глобальные способы, которые доступны для объектов, зарегистрировавших свойство, ассоциируемое со статическим способом. Разработчик, обеспечивающий присоединяемый класс 322, несет ответственность за написание кода для каждого из этих статических способов 326 и 330. Этот код будет включать в себя вызов одного из способов, обеспечиваемых классом 301 узла. Например, прикладная программа, вызывающая SetFont() 326 для определенного идентификатора свойства (PropertyID) и данного значения шрифта, в конечном счете выполнит вызов SetValue() 307 в классе 301 узла. Параметры, которые SetFont() 326 передает в вызов для SetValue() 307, будут содержать определенный идентификатор PropertyID и значение данного шрифта, которые были обеспечены в вызове SetFont() 326. Примером функции SetFont() может быть следующий:

SetFont(PropertyID, белый)

{ PropertyID->SetValue(PropertyID, белый);

}.

Специалисту в данной области техники ясно, что таким образом присоединяемый класс обеспечивает четкую типизацию для любого присоединяемого свойства. Хотя в соответствии с данным изобретением предусматривается прикладная программа, вызывающая SetValue() 307 непосредственно, это обстоятельство обходит преимущество обеспечения четкой типизации во время составления. Как указано выше, четкая типизация обеспечивает возможность обнаружения ошибок до рабочего прогона. В соответствии с еще одним вариантом осуществления данного изобретения присоединяемый класс 322 обеспечивает дополнительный статический способ (например, GetFontID() 328) для каждого из присоединяемых свойств 324. Этот дополнительный статический способ проверяет, зарегистрировано ли запрашиваемое присоединяемое свойство. Поэтому этот дополнительный статический способ 328 используют для того, чтобы удостовериться в том, что прикладная программа должным образом зарегистрировала присоединяемое свойство до выполнения статических способов установки и получения для присоединяемого свойства. Например, если GetFontID() 328 обнаруживает, что присоединяемое свойство цвета не зарегистрировано, то GetFontID() может дать ошибку, может автоматически зарегистрировать присоединяемое свойство цвета для запрашивающего объекта или т.п.

Ниже приведен пример осуществления по обеспечению задержанной регистрации:

Аналогично другим моделям программирования данное изобретение предусматривает применение дочерних классов (не изображены) базового класса 302. На фиг.3 для простоты графически не иллюстрируются дочерние классы базового класса 302 или другие присоединяемые классы и поэтому не иллюстрируются дочерние классы, ассоциируемые с другим присоединяемым классом. Специалисту в данной области техники из данного описания будет ясно, что можно с легкостью составить прикладную программу с дочерними классами, ссылающимися на другие присоединяемые классы. В общем, любой класс может быть «поставщиком» присоединяемых свойств, если данный класс обеспечивает необходимые статические способы для присоединяемых свойств.

Присоединяемый класс 322 дает независимым разработчикам возможность динамически вводить свойства и функциональность в свои прикладные программы, не модифицируя при этом базовый класс 302. Аналогично модифицированию свойств в базовом классе 302 вводимые свойства (например, вторая группа свойств 324) влияет на объекты во всем иерархическом дереве 390 объектов. Во время исполнения этой прикладной программы присоединяемый класс 322 не реализуется. Поэтому для каждого объекта, реализуемого из базового класса 302, один и тот же присоединяемый класс (присоединяемый класс 322) может обеспечивать вторую группу свойств 324 по каждому из этих объектов.

Во время рабочего прогона прикладной программы реализуется базовый объект 312. Помимо этого реализуются один или более дочерних объектов (например, дочерние объекты 340-350). Реализация объектов в дереве 390 объектов может осуществляться с помощью программного управления (например, С#), языка маркирования (например, XML) или с помощью других свойств. Когда дерево 390 объектов создают с помощью программного управления, компилятор обычно определяет, есть ли ошибки в командах, выполняющих присоединяемый класс 322, такие как недозволенные наименования или тип данных. Как указано выше, присоединяемый класс 322 обеспечивает четкую типизацию. Поэтому ошибки можно выявить до рабочего прогона. Помимо этого средства разработки программного обеспечения могут обнаруживать ошибки во время разработки прикладной программы. Если дерево 390 объектов создается с помощью языка маркирования, то синтаксический анализатор интерпретирует формулировки маркирования. Как правило, название метки в языке маркирования является названием для соответствующего класса.

Каждый из этих дочерних объектов 340-350 может содержать одно или несколько дочерних свойств (например, дочернее свойство 341) в дочернем объекте (например, дочернем объекте 340). Значения дочерних свойств можно запоминать в ассоциируемом дочернем объекте. Но согласно данному изобретению дочерние объекты не обязательно должны иметь локальную память для запоминания значения. Помимо этого, каждый из этих дочерних объектов 340-350 может содержать одно или несколько присоединяемых свойств (например, присоединяемое свойство 352, представленное пунктирным окном), ассоциируемых с дочерним объектом. Согласно приведенному ниже подробному описанию со ссылкой на фиг.6 присоединяемое свойство 352 может получать свое значение из локальной памяти, ассоциируемой с дочерним объектом 350, может получить свое значение по наследованию (например, базовый объект 312), по перечню свойств (не изображен), с помощью способов программирования (например, статический способ 330 совместно со способом 309) и с помощью других средств согласно данному изобретению. Хотя эти значения для присоединяемых свойств ассоциируются с дочерним объектом, память для этих значений не является типичной частью дочернего объекта.

Фиг.3 изображает модель программирования в среде пользовательского интерфейса. Нужно отметить, что свойства в базовом объекте 312 и дочерних объектах 340-350 относятся к поведению объектов. Базовый объект 312 представляет диалоговый объект, дочерний объект 340 представляет объект-кнопку, дочерний объект 350 представляет редакционное окно, и дочерний объект 342 представляет объект-селектор, имеющий два дочерних объекта 346 и 348, представляющих окно перечня и дерево соответственно. Каждый из этих дочерних объектов 340-350 содержит одно или несколько дочерних свойств (например, дочернее свойство 341), такое как свойство нажатия для объекта-кнопки и свойство расширения для объекта-дерева.

Напротив, свойства в присоединяемом классе 322 относятся к внешнему виду объекта. Например, вторая группа свойств может содержать некоторое свойство и значение по умолчанию для типа шрифта, цвета и т.п. Эта модель программирования конфигурируется для установки свойства во время рабочего прогона дочерних объектов. В этом смысле присоединяемое свойство (например, присоединяемое свойство 382) в каждом дочернем объекте конфигурировано с возможностью получения некоторого значения от присоединяемого класса.

На фиг.4 показано несколько приведенных в качестве примера синтаксисов для разных операционных сред, в которых можно осуществить модель программирования по фиг.3. Термин «поставщик» в каждом из приводимых в качестве примера синтаксисов означает, что статические способы, описываемые в синтаксисах, ассоциируются с присоединяемым классом, имеющим название «поставщика». Поэтому, поскольку каждый из этих синтаксисов позволяет именовать присоединяемый класс, одинаково именованные свойства в двух разных присоединяемых классах не будут конфликтовать друг с другом. Это обстоятельство обеспечит разработчикам возможность разработать присоединяемые классы свойств, не опасаясь возможных конфликтов присваивания имен.

Для приведенных в качестве примера синтаксисов, если программирующей средой является такой программный язык, как Visual Basic или C#, то может появиться псевдо-код, изображаемый в программном синтаксисе 401. Программный синтаксис 401 включает в себя идентификатор 402 класса, который идентифицирует данный класс как содержащий присоединяемое свойство. Программный синтаксис 401 также содержит идентификатор 404 способа, перечень параметров, имеющий первый идентификатор 406 для определения названия свойства, и второй идентификатор 408 для определения значения, ассоциируемого со свойством, указываемым в первом идентификаторе 406. Перечень параметров заключен в скобках, и некоторый период отделяет друг от друга идентификатор 402 класса и идентификатор 404 способа. В случае присоединяемого класса 322, показанного на фиг.3, для присоединяемого свойства "FONT" программный синтаксис будет следующим:

AttachedClass.SetFont(PropertyID, value).

Необходимо отметить, что этот синтаксис выглядит аналогично синтаксисам в моделях программирования известного уровня техники. Но синтаксис не идентичен, и программный синтаксис 401 отличается от синтаксисов известного уровня техники. Например, в программном синтаксисе 401 идентификатор 404 способа идентифицирует статический способ для класса Поставщика (т.е. присоединяемый класс 322 на фиг.3). В моделях программирования известного уровня техники идентификатор способа идентифицировал бы способ реализации объекта для экземпляра объекта-Поставщика. Поскольку данное изобретение использует класс Поставщика (т.е. присоединяемый класс 322 на фиг.3), поэтому модель программирования может поддерживать свойства программного расширения в перечнях маркирования и свойств, поскольку время существования экземпляра объекта-Поставщика отслеживать не нужно. Еще одна особенность программного синтаксиса 401 заключается в том, что синтаксис четко типизирован. Как упоминалось выше, четко типизированный синтаксис обеспечивает хороший инструментарий, т.к. такие потенциальные ошибки, как неправильное написание названий, неверные типы данных и т.п., можно выявлять во время составления, а не во время рабочего прогона.

Помимо этого, для такой среды программирования, как Visual Basic, C# или т.п., модель программирования также позволяет применение слабо типизированного синтаксиса (т.е. программного синтаксиса 411). Программный синтаксис 411 содержит идентификатор 412 объекта, идентифицирующий целевой объект, идентификатор 414 способа, идентифицирующий статический способ в присоединяемом классе свойств, перечень параметров, включающий в себя идентификатор присоединяемого свойства и значение 419. Идентификатор присоединяемого свойства содержит идентификатор 416 класса и идентификатор 418 свойства, который идентифицирует присоединяемое свойство в ассоциируемом присоединяемом классе.

Согласно еще одному варианту осуществления модель программирования может быть реализована с помощью синтаксиса маркирующего языка, такого как маркирующий синтаксис 421. Маркирующий синтаксис 421 содержит метку 422, присоединяемое свойство, имеющее обозначение 424 поставщика, и идентификатор 426 свойства и значение 428. Согласно одному из вариантов осуществления метка 422 является названием целевого объекта (например, объект-кнопка 340 на фиг.3). Обычно маркирующий синтаксис 421 начинается и заканчивается символом открытия и закрытия "<"И">" соответственно. В этом случае также синтаксический анализатор осуществляет обработку, чтобы определить местоположение присоединяемых свойств, поскольку присоединяемые свойства не находятся непосредственно в этом классе.

Согласно еще одному варианту осуществления модель программирования можно осуществить с помощью расширенного языка маркировки (XML) с перечнями стилей, например, синтаксис 431 перечня стилей, показанный на фиг.4. Для этого варианта осуществления синтаксис 431 перечня стилей включает в себя атрибут 432 «метки». Атрибут 432 метки соответствует тому классу, который запрашивает обработку. Пример присоединяемых свойств в XML:

<Button xmlns:ap="expandoNameSpace" Pressed=false"

ap:Expandos.String="string"/>

Когда исполняется прикладная программа, реализующая присоединяемые свойства согласно данному изобретению, она реализует объекты в дереве объектов. Затем прикладная программа совместно с процессором свойств осуществляет операции рабочего прогона, которые включают в себя выборку и установку значений для объектов. Фиг.5 и 6 иллюстрируют обработку, выполняемую данной прикладной программой совместно с процессором свойств.

Но прежде чем можно будет выполнить процесс SetValue() или процесс GetValue(), показанные на фиг.5 и 6, должно быть зарегистрировано присоединяемое свойство, которое определено одним из этих двух процессов. Как указано выше, в одном из вариантов осуществления может выполняться проверка для определения факта регистрации данного свойства. Эта проверка (например, GetFontID() 328) может быть выполнена в любом из статических способов, которые соответствуют присоединяемому свойству (например, SetFont() 326 и GetFont() 330). Поскольку эта проверка должна выполняться всякий раз, когда вызывается любой статический способ, поэтому данный вариант осуществления отрицательно влияет на рабочие характеристики. Специалистам в данной области техники должно быть ясно, что в рамках данного изобретения могут быть реализованы другие варианты осуществления, оптимизирующие регистрацию свойства, например, требование, чтобы прикладная программа выполнила регистрацию.

Регистрация присоединяемого свойства выдает в ответ особый PropertyID для присоединяемого свойства. Пример вызова для регистрации свойства:

BarDP=RegisterProperty("Bar",0,typeof(string),typeof(Button),0x3);

В этом варианте осуществления переменная величина BarDP будет содержать особый идентификатор для присоединяемого свойства. Этот особый идентификатор затем используется в вызовах функции SetValue() и GetValue(). В одном варианте осуществления вызывается RegisterProperty прямо или косвенно из статического конструктора владельца. Владелец обращается к классу, который присоединяет присоединяемое свойство. После регистрации присоединяемого свойства любой экземпляр объекта, соответствующий целевому типу присоединяемого свойства, может «косвенно» присоединять свойство путем вызова статических способов Get (получение) и Set (установка), ассоциируемых с присоединяемым свойством. Согласно приведенному выше примеру вызова для регистрации свойства "Bar" обозначает имя для присоединяемого свойства. Процессор свойств обычно не использует это имя. Но синтаксический анализатор использует это имя, чтобы определить, зарегистрировано ли для данного владельца свойство с этим же именем. Целевым типом является «кнопка». Для присоединяемых свойств владелец и цель не будут одинаковыми. Значением по умолчанию является «0». Как описано ниже со ссылкой на фиг.6, процессор свойств определяет, где извлечь значение для присоединяемого свойства. Поэтому вызов registerProperty содержит биты поведения, которые идентифицируют стадии, на которых осуществляется поиск значения для данного свойства, такие как наследование, перечни свойств. В приведенном выше примере вызова биты поведения «0х3» указывают, что осуществляется поиск локального значения, перечня свойств и наследования, чтобы определить значение для присоединяемого свойства. Так, в соответствии с одним из вариантов осуществления интерпретация этих битов поведения может кодироваться в статическом способе GetValue(). Альтернативно определение этих стадий может быть обеспечено выражением, которое формальным способом моделирует взаимосвязи между свойствами.

Согласно одному из вариантов осуществления код для присоединяемого класса может иметь вид, показанный в таблице 1.

В приведенном выше коде присоединяемое свойство под именем "Bar" определяется в присоединяемом классе "BarProvider". Имя "Bar" присоединяемого свойства определяется таким типом данных, как строка, и оно может быть присоединено только к объектам Button. Статические способы являются четко типизированными и обеспечивают доступ к свойству и установку свойства.

После регистрации присоединяемого свойства можно выполнить функции SetValue() и GetValue(). Фиг.5 является логической блок-схемой, которая иллюстрирует процесс установки значения в соответствии с данным изобретением. Обработка начинается в блоке 501, где функция установки инициируется для изменения значения, ассоциируемого с некоторым свойством. Как правило, процесс 500 SetValue будет запоминать значение локально для нужного свойства (далее - «нужное свойство»). Обработка продолжается в блоке 502 принятия решения.

В блоке 502 принятия решения определяется, если ли локальная память для нужного свойства. Поскольку согласно данному изобретению каждое свойство для каждого экземпляра объекта автоматически не запоминается, если нужное свойство ранее не имело запомненного для него значения, то назначается область памяти (блок 504). После назначения области памяти обработка продолжается в блоке 506, как и продолжалась бы, если бы в блоке 502 принятия решения была обнаружена локальная память.

В блоке 506 значение копируется в память, относящуюся к нужному свойству. После того, как нужное свойство изменит состояния, высылаются уведомления об изменении состояния (блок 508). Согласно одному из вариантов осуществления это уведомление может включать в себя установку недействительного бита, чтобы указать зависимым свойствам, что их состояние, возможно, более не действительно. Либо уведомление может содержать сообщение каждому зависимому свойству о том, что источник изменился, как описано в выше упомянутой патентной заявке. Обработка продолжается в блоке 510 принятия решения.

В блоке 510 принятия решения определяется, запомнено ли значение в кэш-памяти для нужного свойства. Если в кэш-памяти значения для этого нужного свойства нет, то процесс заканчивается. И если значение в кэш-памяти есть, то кэш-память очищается (блок 512), поскольку это значение более не действительно. Затем процесс заканчивается.

Фиг.6 - логическая блок-схема, иллюстрирующая процесс извлечения значения в соответствии с данным изобретением. Обработка начинается в блоке 601, в котором инициирован запрос. Обработка продолжается в блоке 602.

В блоке 602 прикладная программа указывает, что одно из нужных свойств (далее - «нужное свойство») необходимо обновить. Обычно это может произойти, если объект запрашивает свойства в их текущем состоянии. Процесс 600 определяет значение для свойства путем проверки разных стадий. Эти стадии определяют при регистрации свойства. Блоки 606-610 принятия решения представляют примеры стадий, но в рамках данного изобретения могут вводиться и другие стадии. Обработка продолжается в блоке 604 принятия решения.

В блоке 604 принятия решения процесс проверяет кэш-память, чтобы определить, было ли ранее запомнено в ней нужное свойство. Обычно нужные свойства запоминают в кэш-памяти, чтобы оптимизировать выборку. Если данное свойство было ранее запомнено в кэш-памяти, то процесс переходит к блоку 612, где это значение извлекается из кэш-памяти. Либо процесс продолжается в блоке 606 принятия решения. В блоке 606 принятия решения определяется, является ли значение нужного свойства локальным. Значение будет локальным, если операция SetValue() была выполнена для установки значения для свойства локально, согласно фиг.5. Если данное значение является локальным, то процесс продолжается в блоке 612, где это значение извлекается из локальной памяти. Если данное значение не является локальным, то процесс продолжается в блоке 608 принятия решения.

В блоке 608 принятия решения определяется, есть ли в перечне свойств значение для нужного свойства. Если базовый класс имеет перечень ассоциируемых свойств, то перечень свойств определяет, как будет выглядеть каждый дочерний класс данного базового класса при его реализации. Если нужное свойство имеется в перечне свойств, то обработка продолжается в блоке 612, где значение извлекается из перечня свойств. Но если значение не имеется в перечне свойств, то обработка продолжается в блоке 610 принятия решения.

В блоке 610 принятия решения определяется, можно ли получить значение для нужного свойства по унаследованию (т.е. наследуемое значение). Наследуемые значения выводят из родительского объекта данного дочернего объекта. Если один из родительских объектов имеет нужное свойство, то обработка переходит к блоку 612, где значение извлекается из родительского объекта. Если данное значение не является наследуемым, то извлекается значение по умолчанию из присоединяемого класса, ассоциируемого с присоединяемым свойством (блок 614). Обработка продолжается в блоке 616.

В блоке 616 прикладная программа вычисляет весовую метрику на основе стадии, на которой было принято данное значение. Весовая метрика запоминается и используется для принятия обоснованных решений, согласно которым нужные свойства запоминают в кэш-памяти, чтобы оптимизировать будущую выборку. Затем обработка заканчивается.

Помимо описываемых выше процессов SetValue и GetValue модель программирования согласно данному изобретению обеспечивает такие расширенные функции, как групповые запросы и групповое уведомление. Таким образом, описанное выше изобретение обеспечивает модель программирования, которая обеспечивает основанную на зависимостях систему свойств, поддерживающую сложные взаимосвязи между свойствами посредством использования присоединяемых классов. Создаваемые с помощью этой модели программирования прикладные программы очень хорошо масштабируются, поскольку для этой методики организации свойств излишнее локальное поэкземплярное запоминание не требуется. Вместо этого данная модель программирования повторно использует значения свойств, например, с помощью перечней свойств и по унаследованию на уровне базового класса. Как указывалось выше, данное изобретение обеспечивает механизм организации свойств, согласно которому объекты в иерархии объектов запоминают значения свойств при помощи присоединения.

Приведенное выше описание, примеры и данные представляют полное описание изготовления и применения состава данного изобретения. Поскольку возможны различные варианты осуществления без изменения объема и сущности настоящего изобретения, то изобретение определяется тем, как оно охарактеризовано в формуле изобретения.

Похожие патенты RU2321882C2

название год авторы номер документа
МОДЕЛЬ ДАННЫХ ДЛЯ ОБЪЕКТНО-РЕЛЯЦИОННЫХ ДАННЫХ 2006
  • Нори Анил Кумар
  • Дим Майкл Э.
  • Пиццо Майкл Дж.
  • Анонсен Стивен П.
  • Хартер Стивен В.
RU2421798C2
СИСТЕМА И СПОСОБ ДЕКЛАРАТИВНОГО ОПРЕДЕЛЕНИЯ И ИСПОЛЬЗОВАНИЯ ПОДКЛАССОВ ВНУТРИ РАЗМЕТКИ 2003
  • Рамани Сандарам
  • Релая Роберт А.
  • Богдан Джеффри Л.
RU2347269C2
КООРДИНАЦИЯ АНИМАЦИЙ И МУЛЬТИМЕДИА ПРИ ВЫВОДЕ НА КОМПЬЮТЕРНЫЙ ДИСПЛЕЙ 2005
  • Нельсон Элизабет К.
  • Скечтер Грег Д.
  • Бланко Леонардо Э.
  • Кэлкинс Мэттью В.
  • Хиллберг Майкл Дж.
  • Гупта Намита
  • Субраманиан Срирам
  • Джэкоб Курт
  • Янг Кеннет Л.
  • Маллен Патрик
RU2391709C2
ИНТЕРФЕЙС ПРОГРАММИРОВАНИЯ ДЛЯ КОМПЬЮТЕРНОЙ ПЛАТФОРМЫ 2004
  • Богдан Джеффри Л.
  • Релая Роберт А.
RU2371758C2
КЛАССИФИКАЦИЯ ТЕКСТОВ НА ЕСТЕСТВЕННОМ ЯЗЫКЕ НА ОСНОВЕ СЕМАНТИЧЕСКИХ ПРИЗНАКОВ 2016
  • Колотиенко Сергей Сергеевич
  • Анисимович Константин Владимирович
  • Мякутин Андрей Валерьевич
  • Инденбом Евгений Михайлович
RU2628436C1
ГРАФООРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ И ВЫПОЛНЕНИЕ НА ОСНОВЕ ПРОИЗВОДИТЕЛЕЙ 2007
  • Шамье Фади
  • Эдде Элиа
RU2445682C2
ПОДБОР ПАРАМЕТРОВ ТЕКСТОВОГО КЛАССИФИКАТОРА НА ОСНОВЕ СЕМАНТИЧЕСКИХ ПРИЗНАКОВ 2016
  • Колотиенко Сергей Сергеевич
  • Анисимович Константин Владимирович
RU2628431C1
СИСТЕМЫ И СПОСОБЫ РАСШИРЕНИЙ И НАСЛЕДОВАНИЯ ДЛЯ БЛОКОВ ИНФОРМАЦИИ, УПРАВЛЯЕМЫХ СИСТЕМОЙ АППАРАТНО-ПРОГРАММНОГО ИНТЕРФЕЙСА 2004
  • Демироски Беким
  • Уитни Роберт Т.
  • Томпсон Патрик Дж.
  • Нори Анил К.
  • Агарвал Самит
  • Селис Педро
  • Кэмпбелл Дэвид Г.
  • Терек Ф. Сонер
  • Камерон Ким
  • Смит Уолтер Р.
  • Шакиб Даррен А.
  • Баллоу Натаниел Х.
  • Ачарья Сринивасмурти П.
  • Раман Балан Сетху
  • Спиро Питер М.
RU2412475C2
СИСТЕМЫ И СПОСОБЫ СОПРЯЖЕНИЯ ПРИКЛАДНЫХ ПРОГРАММ С ПЛАТФОРМОЙ ХРАНЕНИЯ НА ОСНОВЕ СТАТЕЙ 2003
  • Ву Уинни К.
  • Дим Майкл Э.
  • Шеппард Эдвард Дж.
  • Фан Лицзянь
  • Ли Дзянь
  • Тэйлор Майкл Б.
RU2412461C2
СИСТЕМЫ И СПОСОБЫ МОДЕЛИРОВАНИЯ ДАННЫХ В ОСНОВАННОЙ НА ПРЕДМЕТАХ ПЛАТФОРМЕ ХРАНЕНИЯ 2003
  • Нори Анил К.
  • Агарвал Самит
  • Томпсон Дж. Патрик
  • Селис Педро
  • Кэмпбелл Дэвид Г.
  • Терек Сонер Ф.
  • Камерон Ким
  • Смит Уолтер Р.
  • Шакиб Даррен А.
  • Бэллоу Натаниел Х.
  • Ачария Сринивасмуртхи П.
  • Раман Балан Сетху
  • Спиро Питер М.
RU2371757C2

Иллюстрации к изобретению RU 2 321 882 C2

Реферат патента 2008 года СИСТЕМА И СПОСОБ ДЛЯ АССОЦИИРОВАНИЯ СВОЙСТВ С ОБЪЕКТАМИ

Изобретение относится к области объектно-ориентированного программирования, в частности к способам управления свойствами объектов в прикладной программе. Технический результат, заключающийся в добавлении новой функциональности в класс, без необходимости постоянного включения этой функциональности в класс, достигается за счет того, что ассоциируют свойства в одном классе с другим классом. В способе используется структура данных, включающая в себя определения для каждого свойства из второй группы свойств и, по меньшей мере один, статический способ. Статический способ ассоциируется с одним свойством из второй группы свойств и включает в себя первый параметр. Первый параметр однозначно идентифицирует одно свойство. Статический способ выполняет ассоциирование одного свойства с объектом без указания прямой ссылки на упомянутое одно свойство объекта. Свойство регистрируется во время рабочего прогона для получения однозначно определенного идентификатора. 5 н. и 24 з.п. ф-лы, 6 ил.

Формула изобретения RU 2 321 882 C2

1. Машиночитаемый носитель, содержащий исполняемые компьютером команды для ассоциирования первого объекта, имеющего первое свойство, с вторым свойством во втором объекте, причем команды при исполнении обеспечивают выполнение способа, содержащего этапы

идентификации второго свойства, причем второе свойство ассоциировано с первым параметром во втором объекте;

ассоциирования второго свойства с первым объектом без определения прямой ссылки на первое свойство в первом объекте;

вычисления весовой метрики на основе местоположения первого параметра;

кэширования второго свойства на основе весовой метрики и создания экземпляра первого объекта с первым параметром.

2. Машиночитаемый носитель по п.1, в котором упомянутый этап ассоциирования поддерживает четко типизированный синтаксис.3. Машиночитаемый носитель по п.1, в котором упомянутый этап создания экземпляра дополнительно содержит операцию выборки значения для второго свойства из местоположения, внешнего по отношению к первому объекту.4. Машиночитаемый носитель по п.3, в котором операция выборки значения включает в себя определение того, какая одна из множества стадий содержит значение, ассоциируемое с упомянутым вторым свойством.5. Машиночитаемый носитель по п.4, в котором упомянутая одна стадия содержит родительский объект первого объекта.6. Машиночитаемый носитель по п.4, в котором упомянутая одна стадия включает в себя перечень свойств.7. Машиночитаемый носитель по п.1, в котором упомянутый этап ассоциирования дополнительно содержит ассоциирование второго параметра с первым объектом путем ассоциирования значения со вторым параметром, при этом указанное значение сохранено в местоположении внешнем относительно первого объекта.8. Машиночитаемый носитель по п.1, в котором первое свойство соответствует поведениям, ассоциированным с первым объектом, а второе свойство соответствует внешнему виду первого объекта.9. Машиночитаемый носитель, содержащий исполняемые компьютером компоненты для реализации объектно-ориентированного создания экземпляров классов, включающих

базовый класс, включающий в себя базовые свойства, ассоциированные с базовыми объектами;

присоединяемый класс, включающий в себя присоединяемые свойства;

причем компоненты при их исполнении обеспечивают выполнение этапов ассоциирования, по меньшей мере, одного из присоединяемых свойств с экземпляром соответствующего базового объекта,

создания экземпляра базового объекта путем выборки значения присоединяемого свойства без определения ссылки на какое-либо из базовых свойств в базовом классе; и

кэширование присоединяемого свойства на основе весовой метрики, которая вычислена на основе местоположения значения присоединяемого свойства.

10. Машиночитаемый носитель по п.9, в котором базовый объект наследует, по меньшей мере, один способ из класса узла, при этом упомянутый, по меньшей мере, один способ вызывается статическим способом при ассоциировании, по меньшей мере, одного присоединяемого свойства с экземпляром соответствующего базового объекта.11. Машиночитаемый носитель по п.10, в котором статический способ и упомянутый, по меньшей мере, один способ включают в себя первый параметр для выдачи однозначно определенного идентификатора для, по меньшей мере, одного присоединяемого свойства.12. Машиночитаемый носитель по п.11, в котором однозначно определенный идентификатор доступен после регистрации, по меньшей мере, одного присоединяемого свойства во время исполнения.13. Машиночитаемый носитель по п.10, в котором упомянутый, по меньшей мере, один способ обеспечивает слабо типизированный синтаксис.14. Машиночитаемый носитель по п.10, в котором упомянутый статический способ поддерживает четко типизированный синтаксис.15. Машиночитаемый носитель по п.9, в котором экземпляр базового объекта создается путем выборки значения присоединяемого свойства из родительского объекта, ассоциированного с базовым объектом.16. Машиночитаемый носитель по п.9, в котором экземпляр базового объекта создается путем выборки значения присоединяемого свойства из перечня свойств.17. Компьютерная система, содержащая машиночитаемый носитель, содержащий сохраненные на нем компоненты для реализации объектно-ориентированного создания экземпляров классов, содержащая первый объект, который выведен из первого класса, причем первый объект содержит первый набор свойств; и

второй класс, имеющий возможность присоединения одного свойства из второго набора свойств к первому объекту в ответ на операционный запрос, связанный с первым объектом, без ссылки на первый набор свойств, причем компоненты при их исполнении обеспечивают выполнение следующих действий:

создание экземпляра первого объекта с присоединяемым свойством из второго набора свойств, при этом присоединяемое свойство кэшируется на основе весовой метрики, которая вычисляется на основе местоположения значения присоединяемого свойства.

18. Компьютерная система по п.17, дополнительно содержащая первый параметр, предназначенный для однозначно определенного идентифицирования присоединяемого свойства.19. Компьютерная система по п.18, в которой упомянутое присоединяемое свойство регистрируется перед тем, как первый параметр сможет однозначно определенно идентифицировать упомянутое присоединяемое свойство.20. Реализуемый компьютером способ для ассоциирования первого объекта, имеющего первое свойство, со вторым свойством во втором объекте, содержащий этапы

идентификации значения, соответствующего второму свойству;

регистрации второго свойства в первом объекте, причем второе свойство сохранено в местоположении, внешнем относительно первого объекта;

вычисления весовой метрики на основе местоположения упомянутого значения;

кэширования второго свойства на основе весовой метрики и создания экземпляра первого объекта с упомянутым значением.

21. Реализуемый компьютером способ по п.20, в котором упомянутая регистрация дополнительно включает в себя назначение однозначно определенного идентификатора второму свойству.22. Реализуемый компьютером способ по п.21, дополнительно содержащий вызов статического способа, имеющего первый параметр, причем первый параметр ссылается на однозначно определенный идентификатор.23. Реализуемый компьютером способ по п.22, в котором статический способ является четко типизированным.24. Реализуемый компьютером способ по п.20, в котором первый объект ассоциирован с дочерним объектом, при этом дочерний объект ассоциирован со вторым свойством.25. Реализуемая компьютером система для ассоциирования присоединяемого свойства к базовому объекту, содержащая

процессор,

средство для присоединения присоединяемого объекта к базовому объекту;

средство для идентификации присоединяемого свойства в присоединяемом объекте;

средство для ассоциирования присоединяемого свойства с базовым объектом без ссылки на базовое свойство в базовом объекте;

средство для вычисления весовой метрики на основе местоположения значения, соответствующего присоединяемому свойству;

средство для кэширования присоединяемого свойства на основе весовой метрики и

средство для создания экземпляра базового объекта с упомянутым значением.

26. Система по п.25, в которой упомянутое средство для ассоциирования поддерживает четко типизированный синтаксис для языка программирования.27. Система по п.25, в которой упомянутое средство для ассоциирования поддерживает слабо типизированный синтаксис для языка программирования.28. Система по п.25, в которой упомянутое средство для ассоциирования содержит оператор в документе разметки.29. Система по п.25, в которой упомянутое средство для ассоциирования содержит оператор в перечне свойств.

Документы, цитированные в отчете о поиске Патент 2008 года RU2321882C2

ЕР 0757313 A1, 05.02.1997
EP 0725337 A1, 07.08.1996
Способ получения жидкого топлива 1975
  • Хидемаса Хонда
  • Ясухиро Ямада
  • Хотоо Какияма
SU520924A3
US 5432925 А, 11.06.1995
СИСТЕМА И СПОСОБ ЭФФЕКТИВНОГО ИСПОЛЬЗОВАНИЯ КЭШ-ПАМЯТИ В РАСПРЕДЕЛЕННОЙ ФАЙЛОВОЙ СИСТЕМЕ 1994
  • Кэнтрелл Томас Джордж
  • Джаджи Себнем
  • Шахин Амаль Ахмед
  • Уорд Ричард Байрон
RU2170454C2

RU 2 321 882 C2

Авторы

Богдан Джеффри Л.

Финоккьо Марк Дж.

Крамер Николас М.

Даты

2008-04-10Публикация

2003-06-27Подача