IBM Visual Age for Smalltalk (далее VA Smalltalk) является наиболее мощной реализацией чистого объектно-ориентированного языка Smalltalk. Он предназначен для проектирования прикладного программного обеспечения разных масштабов: от автоматизации работы на мелких фирмах до транснациональных корпораций и охватывает все направления современного бизнеса: производство, банковское дело, финансы, страхование и т.д.

Семейство сред визуального программирования IBM Visual Age, частью которого является Smalltalk, предоставляет самую широкую и мощную поддержку языков и платформ, обеспечивая единую среду визуального программирования. Все это позволяет пользователям выбрать язык, который они сочтут более приемлемым: Java, Smalltalk, C++, Basic, Cobol, 4GL для тех аппаратных платформ, операционных сред и серверного программного обеспечения, которое используется в организациях. Все продукты интегрированы и являются кросс-платформенными.

VA Smalltalk дает возможность работать с различными серверами баз данных, мониторами транзакций, промежуточным коммуникационным программным обеспечением, с программным обеспечением на мэйнфреймах; поддерживается возможность построения информационных систем для Internet/ Intranet – сетей; может быть обеспечена возможность коллективной разработки; поддерживается контроль версий и изменений при ведении проекта. Перенос приложений с платформы на платформу можно осуществлять без редакции исходного кода.

Замечательная черта сред Visual Age – визуальная сборка приложений из компонент, которые создаются единожды, а затем используются в различных частях проекта. Этап сборки реально, в отличии от других средств RAD (Rapid Application Development – средство быстрой прикладной разработки), может происходить без ручного кодирования. Что еще более важно, логические взаимосвязи между компонентами системы представляются визуально, что существенно облегчает ведение проекта на протяжении всего его жизненного цикла.

В новой версии Visual Age Smalltalk 4.5, которая появляется на рынке в конце лета текущего года, добавляются в том числе UML Designer, служащий для автоматизации анализа и проектирования программного обеспечения, и ObjectExtender, облегчающий создание сложных масштабируемых программ, использующих различные СУБД. Oсновное внимание при ведении проекта с появлением новых возможностей переносится на этапы анализа и проектирования, осуществляемые в соответствии с парадигмой объектно-ориентированного проектирования, наиболее полной реализацией которой является UML (Unified Modeling Language). При этом существует двусторонняя связь между модулями проектирования и полученным/измененным кодом. Все это позволяет, используя среду VA Smalltalk, реализовывать полный жизненный цикл информационной системы.

К сожалению, Smalltalk практически неизвестен российским специалистам. Возможно, одной из причин этого, является отсутствие сколь-нибудь заметного числа публикаций. В тоже время, на Западе, в особенности в США, он является наряду с C++ распространенным средством разработки прикладного ПО, лидируя при этом в отдельных прикладных областях (см., например, IDC White Paper: Smalltalk Strength Stand Out).

Кому нужен VA Smalltalk?

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

Каковы наиболее весомые критерии при выборе программного продукта такого класса?

1. Может ли выбираемый пакет реально обеспечить масштаб тех задач, которые необходимо решить на вашем предприятии или корпорации?

2. Сможет ли существующий персонал перейти на программный продукт данного класса и эффективно его использовать?

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

4. Насколько простым для ваших групп разработчиков будет использование этих специализированных возможностей при разработке, а затем при поддержке/сопровождении конкретных прикладных решений?

5. Является ли важным перенесение существующих данных и приложений в новые прикладные системы и какую часть такой задачи выбираемый продукт сможет осуществить?

6. Какие аппаратные платформы, СУБД и промежуточное программное обеспечение должен поддерживать выбираемый продукт?

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

Посмотрим, как VA Smalltalk может ответить на эти вопросы.

1. С выходом новой версии 4.5 VA Smalltalk можно рассматривать как продукт, обеспечивающий реализацию всего жизненного цикла приложения (анализ-проектирование-кодирование-отладка/тестирование-сопровождение/поддержка). Получаемые прикладные системы масштабируемы от работы в рамках отдела (рабочей группы) до всей корпорации (предприятия). Возможна как обычная, так и коллективная разработка приложений.

2. Средства объектно-ориентированного проектирования, которые должны быть встроены в новую версию VA Smalltalk, обеспечивают создание основы прикладной системы без написания какого-либо кода с последующей двусторонней связью между модифицируемым кодом и средствами анализа/проектирования.

Автоматическая генерация определений данных и сценариев работы с ними упрощают работу с реляционными СУБД.

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

3. VA Smalltalk располагает разнообразным и мощным набором средств для работы с большим числом реляционных СУБД и хост-систем, промежуточным ПО. Можно генерировать компоненты для серверов приложений. Ряд фирм предлагает готовые компоненты для той или иной области бизнеса. Например, фирма "СИКОР" разрабатывает компоненты и шаблоны для создания систем технологической подготовки производства в промышленности (пакет АСКД для автоматизации работы с конструкторской и технологической документацией).

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

5. Проблему унаследованных систем (чаще всего приложения на старых мэйнфреймах) можно разбить на две части. Во-первых, проблема данных. В составе пакета VA Smalltalk можно приобрести средства для работы с хост-системами. При этом данные, хранимые на старых машинах, либо просто переносятся на новое железо (CICS/MVS, IMS, DB2 на OS/390), если и до этого использовались такие же программные средства, либо перегружаются из старых СУБД (например, ADABAS) в те, которыми будет пользоваться предприятие.

Что касается старого кода, то имеется возможность часть его перенести без изменений на транзакционные системы и в хранимые процедуры для СУБД (подразумевается, что ранее использовался COBOL). Следует отметить, что существует продукт Visual Age Generator, реально работающий поверх VA Smalltalk, который позволяет создавать терминальные приложения для хост-систем, а также Visual Age Cobol, позволяющий использовать часть унаследованного кода на персональных компьютерах.

6. Как уже было отмечено, приложения, созданные в VA Smalltalk, переносимы на широком диапазоне аппаратных платформ и операционных систем и работают с большинством серверов баз данных и пакетов промежуточного программного обеспечения (мониторы транзакций, коммуникационные пакеты, системы передачи сообщений и т.д.).

7. IBM совместно с бизнес-партнерами, которые распространяют продукт, может проводить обучение, осуществлять техническую поддержку (обновление продукта, предоставление наиболее полной информации и т.д.) и предоставлять консультационные услуги по VA Smalltalk, также как и по широкому спектру программного обеспечения, производимого IBM.

Особенности языка Smalltalk

История языка берет начало с 1970 года, когда фирма Xerox решила создать мощное средство создания информационных систем, основываясь на идеях алгоритмического языка Simula и идеях Алана Кея. Цель проекта заключалась в том, чтобы создать язык, позволяющий описывать и работать с информационными задачами в терминах, естественных для человеческого мышления.

Для человека привычно осмысливать окружающий мир как множество взаимосвязанных объектов, обладающих поведением как реакцией на некие происходящие события. Эта идея легла в основу концепции объектно-ориентированного программирования, вариант которой был сформулирован и предложен Кеем как основа объектно-ориентированного языка. Существующие базовые понятия концепции: объект, сообщение, класс, экземпляр, метод. Эти понятия являются базовыми для Smalltalk, образуя его основу. Используя Smalltalk, разработчик получает возможность развивать, расширять и изменять информационную систему в соответствии с эволюцией представлений и требований пользователей к системе.

Руководящие принципы Smalltalk – целостность, полнота и простота в сложном. Целостность определяется тем фактом, что базовые понятия настолько тесно взаимосвязаны между собой, что без понимания их как целого нельзя получить адекватного представления о каждом понятии в отдельности.

Полнота означает, что основные функции операционной системы обеспечиваются самой средой Smalltalk, а к сервисам других целевых систем (СУБД, промежуточное программное обеспечение и т.д.) предоставляется доступ посредством объектов, имеющихся в самом Smalltalk, формируя представление этих систем в присущей ему идеологии. Объекты, реализующие эти сервисы, встроены в Smalltalk.

Модель взаимодействующих объектов, положенная в основу Smalltalk, обеспечивает принцип модульности: устройство любого объекта системы не зависит от деталей внутреннего устройства любого другого объекта. Наряду с этим, одинаковые объекты объединяются в классы, являющиеся механизмом расширения Smalltalk. Класс, который определил разработчик, становится такой же частью системы, что и встроенные классы (классы ядра). Каждый класс имеет подклассы, что помогает избежать повторов и объединяет классы в единую структуру, которая называется "иерархия классов". Все это позволяет достичь простого управления сложным или простоту в сложности.

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

Все классы именованы. Принцип инкапсуляции, т.е. скрытия деталей реализации объекта, накладывает существенное ограничение на реализацию объектов, поведение которых реально пересекается, т.е. они в чем то похожи друг на друга. Для того, чтобы это ограничение обойти, в язык был введен принцип наследования, разрешающий частичное пересечение между классами. Он состоит в том, что один класс может содержать все экземпляры другого класса, которые "наследуют" от первого структуру его экземпляров и их поведение. Первый класс является суперклассом второго, а второй – подклассом первого. Каждый новый класс в Smalltalk создается как подкласс уже существующего.

Существует системный класс Object, который описывает общие свойства всех объектов, так что любой класс системы как минимум является его подклассом. Как нетрудно догадаться, структура классов является деревом или иерархией классов. Иерархия классов используется для определения метода, вызываемого сообщением, приходящим в объект. Поиск метода ведется вверх по дереву, пока он не будет найден. Иначе, посылается сообщение "не понимаю" с именем вызванного метода.

Все переменные в Smalltalk являются ссылками на экземпляр какого-либо класса. Только конкретному объекту могут быть доступны переменные экземпляра, которые существуют в течении жизни экземпляра и временные переменные, которые создаются при выполнении какого-либо метода и существуют только во время его выполнения. Помимо этого существуют еще общие переменные, которые делятся на три вида: переменные класса доступны всем экземплярам данного класса; глобальные переменные доступны всем экземплярам всех классов; переменные пула доступны экземплярам некоторого подмножества классов системы.

В Smalltalk, как и в Java, не существует указателей и разработчику нет необходимости заботиться об управлении памятью. За него это делает Smalltalk. Стоит отметить, что механизм сборки мусора намного более эффективен, чем тот, который используется в Java. Это вполне понятно, потому что Smalltalk имеет куда более долгую историю и он более "обкатан".

Поскольку все компоненты системы – есть объекты, то каждый класс тоже должен быть объектом, т.е. экземпляром класса. Класс, экземпляром которого является обычный класс, называется метаклассом. Каждый раз при создании нового класса создается его метакласс, который наследует информацию от своего суперкласса. Все метаклассы являются экземплярами класса с именем Metaclass, при этом они образуют иерархию, параллельную иерархии классов. Метаклассы служат для описания переменных и методов классов. Таким образом, класс, сам являясь объектом, может "понимать" сообщения посылаемые для создания новых экземпляров классов (объектов) или выполнения других методов класса. Например, класс Date "понимает" сообщение "today", в ответ на которое возвращает текущую дату.

Синтаксис языка очень прост и компактен. В Smalltalk cуществуют четыре вида выражений:

1. Литералы описывают некие постоянные объекты, такие как строки символов или числа.

2. Имена переменных описывают доступные переменные.

3. Выражения посылки сообщения описывают сообщения, посланные получателю.

4. Выражения-блоки описывают объекты, представляющие отложенные действия; выражения-блоки служат для реализации управляющих структур.

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

Как работает среда Visual Age

Сердцем Visual Age является визуальное программирование и конструирование приложений из компонент ("parts"). Постaвляемые вместе с продуктами Visual Age компоненты обеспечивают прочную основу для создания приложений. Однако, сами по себе они еще не гарантируют эффективного и быстрого создания приложений. Они лишь фундамент, на котором разработчики сами должны возвести здание информационной системы. Этот раздел будет посвящен как краткому обзору встроенных компонент, так и принципу проектирования, позволяющему действительно быстро создавать надежные и удобные в использовании информационные системы.

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

Подобные вещи есть и в других пакетах RAD. То, что отличает Visual Age – графическое представление связи компонент и таким образом полное представление элементов приложений графическим способом, например пользовательской формы (рис. 1).


Рис. 1

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

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

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

Поддержание версий классов, а стало быть и приложений, контроль изменений имеет куда более простой и легкий характер, чем где-бы то ни было (рис. 2).


Рис.2

Рис.3

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

Особенностью Smalltalk, которая удобно представлена в VA Smalltalk, является отсутствие разделения между этапом создания и этапом выполнения программ, что делает процесс разработки действительно инкрементным (рис. 3). Возможность отладки выбранной части кода, характерная для VA Smalltalk, вносит существенный вклад в ускорение процесса разработки.

VA Smalltalk предоставляет множество средств, облегчающих создание программ: навигацию по иерархии классов снизу вверх легко осуществить в Hierarchy Browser, работу с отдельным классом через Object Browser, мониторинг среды через Object Visualizer и т.д.

Следует отметить, что VA Smalltalk по существу является одним из центральных звеньев в серии продуктов IBM Visual Age. Используемая им виртуальная машина (UVM) применяется также и в Visual Age for Java. Сама Visual Age for Java написана на Smalltalk, который входит также в более тяжелые индустриальные средства разработки Visual Age Generator и Visual Age Pacbase.

Распространено мнение, что написанные на Smalltalk программы работают гораздо медленнее, чем написаные на C++ или на Паскале. Однако, за долгий период развития языка для него удалось добиться производительности, которая в случае информационных систем ничуть не хуже, чем у написанных на вышеупомянутых языках (см., например:http://www.std.org.BenchMark .

Одним из существенных показателей качества языка служат опросы групп разработчиков, регулярно проводимые рейтинговыми компаниями в США (например, IDC). Разработчики и менеджеры организаций дали используемым ими средствам разработки на Smalltalk наивысшие оценки. Что касается других языков (C++, Java), в особенности для больших прикладных проектов, оценки были существенно ниже.

VA Smalltalk для создания информационных систем на производстве

Основная особенность автоматизации информационных потоков на заводах и КБ, заключается в их низкой стандартизации. Отсюда можно сделать вывод, что приобретение готовой системы, которая бы действительно работала, для большого числа предприятий оказывается маловероятным событием. Дело осложняется еще и тем, что у многих предприятий финансовое положение оставляет желать лучшего, а "богатых" предприятий, которые бы могли позволить себе купить полное решение, очень мало. Даже для самых благополучных покупка дорогого пакета, который предоставлял бы полное решение задачи автоматизации (например, R3 фирмы SAP), сопряжено с нелегким периодом настройки системы.

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

Возможности пакета, описанные выше, позволяют предприятию использовать опыт специалистов, знания и умение прикладных программистов из отделов АСУ и КБ, создавать системы без тяжелой ноши написания системных библиотек и программ, для создания которых требуется более высокая квалификация персонала и большие капиталовложения. Кроме того, VA Smalltalk дает решение задачи управления проектами (что на самом деле еще существенней) и не требует жесткой привязки к аппаратным платформам и операционным системам.

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

Предприятие вполне может выбрать вариант, когда для автоматизации информационных потоков высокого уровня приобретается готовая информационная система (например, R3), а, допустим, автоматизация технологической подготовки производства осуществляется с помощью VA Smalltalk. Это возможно, потому что мир Smalltalk – мир открытых систем. Конечно, все это отнюдь не очень легко и просто делается, но может оказаться вполне приемлемым решением задачи автоматизации.

Однако, не следует думать, что подобные проблемы характерны только для России. Те же задачи стоят перед промышленными предприятиями всех западных стран. Здесь Smalltalk показал себя с наилучшей стороны как средство решения похожих задач на производстве даже для очень крупных и богатых компаний. По отчету IDC системы, написанные на этом языке, успешно работают по более чем двадцати направлениям в автомобильной, авиакосмической, оборонной, судостроительной и других отраслях промышленности, в области энергетики и транспорта, коммуникаций и т.д.

В рамках серии Visual Age существует продукт Visual Age Generator, позволяющий описывать приложения на языке 4GL без применения средств объектно-ориентированного программирования, который функционирует поверх VA Smalltalk. Для многих предприятий он может стать наиболее удобным средством решения их задач, с учетом его мощности и возможности для разработчиков и руководителей проектов перейти на этот пакет, используя существующие навыки работы с инструментальными средствами прикладного программирования и аппаратными платформами/операционными средами, которые эксплуатируются на предприятии. Специфическая черта Visual Age Generator – возможность создавать терминальные приложения для хост-систем, что может оказаться весьма полезным на некоторых наших предприятиях.

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


Фирма <СИКОР>

"СИКОР" - российская инжиниринговая компания, много лет работающая в области систем CAD/CAM/CAE высокого уровня.

Фирма является партнером таких компаний, как IBM, BAAN, CADSY и др. Она известна АО "АвтоВАЗ", АО "Люлька-Сатурн", ЗИО (г.Подольск), АО "Белэнергомаш", АО "Метровагонмаш", МВЗ им. Миля и т.д.

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

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

Фирма "СИКОР" является филиалом Московского учебного центра IBM и проводит обучение пользователей CATIA. Еще одним направлением деятельности "СИКОР" является продажа и консалтинг по средствам разработки IBM Visual Age, а также разработка программного обеспечения для АСУ промышленных предприятий.


Новости. Хроника событий. Семинар в Туле

В Туле по инициативе Администрации области 24 июня 1998 г. был проведен семинар "Автоматизация конструкторско-технологической подготовки производства". Семинар открыл первый заместитель губернатора тульской области В.А. Богомолов.

Президент тульской научно-технической фирмы "Автоматизированное проектирование" (АПРО), Г.К. Агеев показал разработку фирмы "Комплекс Систем Автоматизированного Проектирования "ТЕМП". Был представлен состав комплекса, его функциональное назначение.

Комплекс достаточно широко распространен на предприятиях не только в Туле, но и в других регионах России. В подтверждение этого следующий докладчик (Е.Н. Николаев) рассказал в своем докладе об успешном внедрении и трехлетнем опыте эксплуатации комплекса, разработанного в АО "АПРО", на Узловском заводе "Аппараты Дальней Связи". Он высоко оценил его легкую осваиваемость, возможность работать как на отдельном ПК, так и в сетевом варианте.

Доцент кафедры "Автоматизированные станочные системы" ТулГУ А.Н. Иноземцев доложил о разработанной на кафедре "Распределенной компьютерной системе технологических проектных решений". Эта работа, на наш взгляд, представляет определенный интерес, и ее следовало бы довести до производственного варианта.

Вызвали заинтересованность на семинаре "Система автоматизации технологической подготовки и диспетчеризации производства "САПФОРД" (АК "ЦНИИСУ") и разработка "Сквозное проектирование на АК "Туламашзавод" от дизайна до разработки управляющих программ для станков с ЧПУ".

Начальник бюро "Тульский патронный завод" П.Н. Гайдуков поделился с участниками семинара опытом практической трехлетней работы на чертежно-графическом редакторе "КОМПАС-ГРАФИК", а директор Московского представительства АО "Аскон" А.Г. Тимошин рассказал о новых разработках системы в среде Windows.

О новой версии параметрической системы автоматизированного проектирования и черчения "T-FLEX Parametric Pro 6.0" доложил коммерческий директор фирмы "ТОП СИСТЕМЫ" (Москва) Д.К. Ксенофонтов.

Семинар показал высокий уровень профессионализма местных ученых и практиков. Так что в Тулу можно ездить не только за самоварами и пряниками, но и за новыми идеями и конкретными разработками в области автоматизации конструкторско-технологической подготовки производства.

А.С. Давыдкин