Область техники
Настоящее изобретение относится к средствам программного обеспечения, в частности к механизмам для управления свойствами объектов в прикладной программе (приложении).
Уровень техники
Большинство моделей программирования в настоящее время поддерживают концепцию классов. Эти классы обычно структурированы в иерархическом дереве, ветви которого представляют разные классы в классовой иерархии. Если две ветви находятся на разных уровнях, то нижняя ветвь представляет дочерний класс. Дочерний класс наследует информацию от класса, относящегося к верхней ветви (т.е. от родительского класса). Если две ветви находятся на одном и том же уровне, то классы называются братскими классами. В целях приводимого ниже описания при упоминании дочернего класса по отношению к родительскому классу могут быть использованы термины «нижний класс» и «верхний класс» соответственно для дочернего класса и родительского класса. Высшая ветвь в иерархии представляет базовый класс в иерархическом дереве классов. Обычно информация в каждом классе включает в себя свойства, способы и события. Свойства описывают характеристики, ассоциируемые с данным классом. Например, класс кнопок может иметь такие свойства, как ширина, цвет фона, тип шрифта, видимые и нажимаемые кнопки. Когда один из этих классов реализуется, то создается объект этого класса. Каждое свойство объекта имеет связанное с ним значение, которое может запрашиваться и устанавливаться в ходе рабочего прогона. Можно ожидать, что запрашиваемое или устанавливаемое значение будет соответствовать определенному типу данных, если синтаксис четко типизирован. Наличие четко типизированного синтаксиса желательно, поскольку тогда ошибки могут обнаруживаться в приложении до рабочего прогона.
При наличии классовой иерархии введение новой функциональности в объекты, находящиеся в данной классовой иерархии, затруднено. Согласно одной модели программирования новую функциональность принудительно вводят в базовый класс. После этого базовый класс становится очень крупным (например, сто способов, пятьдесят свойств и двадцать событий), что приводит к тому, что иерархия объектов становится почти неуправляемой. Нежелательный результат этой модели программирования заключается в том, что число свойств, способов и событий в базовом классе для разработчиков становится чрезмерным, чтобы разработчики смогли в полной мере понять их перед реализацией желательных характеристик в создаваемых объектах. Еще один нежелательный результат этой модели программирования заключается в том, что предъявляемые к памяти требования становятся чрезмерными из-за того, что значения для свойств сохраняются локально. Поскольку значения сохраняются локально, то приложения, создаваемые с помощью этой модели программирования, масштабируются неудовлетворительно.
Эта модель программирования также обусловливает другие трудности для независимых разработчиков. Независимым разработчикам, которые желают ввести новую функциональность, приходится вводить дочерний класс внизу иерархии. Поскольку новый дочерний класс находится внизу иерархии, то новая функциональность не доступна для других классов в данной иерархии. Поэтому независимым разработчикам необходимо вводить новую функциональность в несколько дочерних классов. Можно предположить, что при этом имеет место дублирование кодов, что отрицательно сказывается на возможности поддержки иерархии объектов. По изложенным выше причинам эта модель программирования не очень желательная.
До появления данного изобретения в распоряжении специалистов в данной обрасти техники не было такой модели программирования, которая позволяет вводить новую функциональность в класс в существующей классовой иерархии без указанных выше недостатков.
Сущность изобретения
Данное изобретение обеспечивает механизм, который обеспечивает возможность новой функциональности для класса, не требуя, чтобы новая функциональность становилась постоянной частью данного класса. Данное изобретение также позволяет сформулировать новую функциональность как свойство, которое не встроено в данный класс. В общем, данное изобретение обеспечивает механизм для ассоциирования свойств одного класса с другим классом. Это ассоциирование является легко модифицируемым, вследствие чего другие группы свойств могут ассоциироваться с данным классом.
В одном из вариантов осуществления компьютерно считываемый носитель, содержащий объект со свойством первой группы свойств, также включает в себя структуру данных. Структура данных содержит определения для каждого свойства второй группы свойств и содержит по меньшей мере один статический способ. Статический способ ассоциирован с одним из свойств второй группы свойств и содержит первый параметр. Первый параметр однозначно идентифицирует одно свойство. Статический способ обеспечивает ассоциирование одного свойства с объектом без указания прямой ссылки на одно свойство в объекте.
Одна из особенностей данного изобретения заключается в том, что статический способ обеспечивает четко типизированный синтаксис.
Еще одна из особенностей данного изобретения заключается в том, что статический способ включает извлечение значения для объекта без использования локально сохраненного значения на объекте. Значение может быть извлечено из нескольких стадий, таких как родительский объект или перечень свойств.
Одно из преимуществ данного изобретения заключается в том, что подразделение свойств на одну или несколько подгрупп облегчает поддержку каждой подгруппы свойств. Еще одно преимущество данного изобретения заключается в том, что иерархия объектов является в большей степени расширяемой, и это обстоятельство позволяет разработчикам вводить функциональность в иерархию объектов, которая воздействует на базовый класс и все нижние классы.
Еще одно преимущество данного изобретения заключается в том, что управление хранением для свойств в объектах становится более эффективным и удобным. Еще одно преимущество данного изобретения заключается в том, что модель программирования действует в среде программирования или маркирования. Помимо этого, модель программирования действует в четко типизированных языках программирования, таких как С++ и С#. Модель программирования также поддерживает перечни свойств, уведомления об изменениях и наследовании значений.
Еще одно преимущество данного изобретения заключается в том, что могут сосуществовать независимые библиотеки, поскольку конфликты имен менее вероятны, т.к. имя присоединяемого класса эффективно становится частью имени свойства. Поэтому если два разных разработчика создают присоединяемое свойство, имеющее свойство с именем «цвет», то эти два присоединяемых свойства не будут конфликтовать.
Краткое описание чертежей
Фиг.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 модель программирования согласно данному изобретению обеспечивает такие расширенные функции, как групповые запросы и групповое уведомление. Таким образом, описанное выше изобретение обеспечивает модель программирования, которая обеспечивает основанную на зависимостях систему свойств, поддерживающую сложные взаимосвязи между свойствами посредством использования присоединяемых классов. Создаваемые с помощью этой модели программирования прикладные программы очень хорошо масштабируются, поскольку для этой методики организации свойств излишнее локальное поэкземплярное запоминание не требуется. Вместо этого данная модель программирования повторно использует значения свойств, например, с помощью перечней свойств и по унаследованию на уровне базового класса. Как указывалось выше, данное изобретение обеспечивает механизм организации свойств, согласно которому объекты в иерархии объектов запоминают значения свойств при помощи присоединения.
Приведенное выше описание, примеры и данные представляют полное описание изготовления и применения состава данного изобретения. Поскольку возможны различные варианты осуществления без изменения объема и сущности настоящего изобретения, то изобретение определяется тем, как оно охарактеризовано в формуле изобретения.
название | год | авторы | номер документа |
---|---|---|---|
МОДЕЛЬ ДАННЫХ ДЛЯ ОБЪЕКТНО-РЕЛЯЦИОННЫХ ДАННЫХ | 2006 |
|
RU2421798C2 |
СИСТЕМА И СПОСОБ ДЕКЛАРАТИВНОГО ОПРЕДЕЛЕНИЯ И ИСПОЛЬЗОВАНИЯ ПОДКЛАССОВ ВНУТРИ РАЗМЕТКИ | 2003 |
|
RU2347269C2 |
КООРДИНАЦИЯ АНИМАЦИЙ И МУЛЬТИМЕДИА ПРИ ВЫВОДЕ НА КОМПЬЮТЕРНЫЙ ДИСПЛЕЙ | 2005 |
|
RU2391709C2 |
ИНТЕРФЕЙС ПРОГРАММИРОВАНИЯ ДЛЯ КОМПЬЮТЕРНОЙ ПЛАТФОРМЫ | 2004 |
|
RU2371758C2 |
КЛАССИФИКАЦИЯ ТЕКСТОВ НА ЕСТЕСТВЕННОМ ЯЗЫКЕ НА ОСНОВЕ СЕМАНТИЧЕСКИХ ПРИЗНАКОВ | 2016 |
|
RU2628436C1 |
ГРАФООРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ И ВЫПОЛНЕНИЕ НА ОСНОВЕ ПРОИЗВОДИТЕЛЕЙ | 2007 |
|
RU2445682C2 |
ПОДБОР ПАРАМЕТРОВ ТЕКСТОВОГО КЛАССИФИКАТОРА НА ОСНОВЕ СЕМАНТИЧЕСКИХ ПРИЗНАКОВ | 2016 |
|
RU2628431C1 |
СИСТЕМЫ И СПОСОБЫ РАСШИРЕНИЙ И НАСЛЕДОВАНИЯ ДЛЯ БЛОКОВ ИНФОРМАЦИИ, УПРАВЛЯЕМЫХ СИСТЕМОЙ АППАРАТНО-ПРОГРАММНОГО ИНТЕРФЕЙСА | 2004 |
|
RU2412475C2 |
СИСТЕМЫ И СПОСОБЫ СОПРЯЖЕНИЯ ПРИКЛАДНЫХ ПРОГРАММ С ПЛАТФОРМОЙ ХРАНЕНИЯ НА ОСНОВЕ СТАТЕЙ | 2003 |
|
RU2412461C2 |
СИСТЕМЫ И СПОСОБЫ МОДЕЛИРОВАНИЯ ДАННЫХ В ОСНОВАННОЙ НА ПРЕДМЕТАХ ПЛАТФОРМЕ ХРАНЕНИЯ | 2003 |
|
RU2371757C2 |
Изобретение относится к области объектно-ориентированного программирования, в частности к способам управления свойствами объектов в прикладной программе. Технический результат, заключающийся в добавлении новой функциональности в класс, без необходимости постоянного включения этой функциональности в класс, достигается за счет того, что ассоциируют свойства в одном классе с другим классом. В способе используется структура данных, включающая в себя определения для каждого свойства из второй группы свойств и, по меньшей мере один, статический способ. Статический способ ассоциируется с одним свойством из второй группы свойств и включает в себя первый параметр. Первый параметр однозначно идентифицирует одно свойство. Статический способ выполняет ассоциирование одного свойства с объектом без указания прямой ссылки на упомянутое одно свойство объекта. Свойство регистрируется во время рабочего прогона для получения однозначно определенного идентификатора. 5 н. и 24 з.п. ф-лы, 6 ил.
идентификации второго свойства, причем второе свойство ассоциировано с первым параметром во втором объекте;
ассоциирования второго свойства с первым объектом без определения прямой ссылки на первое свойство в первом объекте;
вычисления весовой метрики на основе местоположения первого параметра;
кэширования второго свойства на основе весовой метрики и создания экземпляра первого объекта с первым параметром.
базовый класс, включающий в себя базовые свойства, ассоциированные с базовыми объектами;
присоединяемый класс, включающий в себя присоединяемые свойства;
причем компоненты при их исполнении обеспечивают выполнение этапов ассоциирования, по меньшей мере, одного из присоединяемых свойств с экземпляром соответствующего базового объекта,
создания экземпляра базового объекта путем выборки значения присоединяемого свойства без определения ссылки на какое-либо из базовых свойств в базовом классе; и
кэширование присоединяемого свойства на основе весовой метрики, которая вычислена на основе местоположения значения присоединяемого свойства.
второй класс, имеющий возможность присоединения одного свойства из второго набора свойств к первому объекту в ответ на операционный запрос, связанный с первым объектом, без ссылки на первый набор свойств, причем компоненты при их исполнении обеспечивают выполнение следующих действий:
создание экземпляра первого объекта с присоединяемым свойством из второго набора свойств, при этом присоединяемое свойство кэшируется на основе весовой метрики, которая вычисляется на основе местоположения значения присоединяемого свойства.
идентификации значения, соответствующего второму свойству;
регистрации второго свойства в первом объекте, причем второе свойство сохранено в местоположении, внешнем относительно первого объекта;
вычисления весовой метрики на основе местоположения упомянутого значения;
кэширования второго свойства на основе весовой метрики и создания экземпляра первого объекта с упомянутым значением.
процессор,
средство для присоединения присоединяемого объекта к базовому объекту;
средство для идентификации присоединяемого свойства в присоединяемом объекте;
средство для ассоциирования присоединяемого свойства с базовым объектом без ссылки на базовое свойство в базовом объекте;
средство для вычисления весовой метрики на основе местоположения значения, соответствующего присоединяемому свойству;
средство для кэширования присоединяемого свойства на основе весовой метрики и
средство для создания экземпляра базового объекта с упомянутым значением.
ЕР 0757313 A1, 05.02.1997 | |||
EP 0725337 A1, 07.08.1996 | |||
Способ получения жидкого топлива | 1975 |
|
SU520924A3 |
US 5432925 А, 11.06.1995 | |||
СИСТЕМА И СПОСОБ ЭФФЕКТИВНОГО ИСПОЛЬЗОВАНИЯ КЭШ-ПАМЯТИ В РАСПРЕДЕЛЕННОЙ ФАЙЛОВОЙ СИСТЕМЕ | 1994 |
|
RU2170454C2 |
Авторы
Даты
2008-04-10—Публикация
2003-06-27—Подача