Скелет (компьютерное программирование) - Skeleton (computer programming)

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

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

Скелетные программы используются в шаблон метод проектирования шаблон используется в объектно-ориентированного программирования. В объектно-ориентированного программирования, фиктивный код соответствует абстрактный метод, а заглушка метода или фиктивный объект. в Вызов удаленного метода Java (Java RMI) номенклатура, a заглушка общается на стороне клиента со скелетом на стороне сервера.[1]

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

Фон

Код, обычно встречающийся в Java, соответствует структуре на основе скелета

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

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


Отношение к псевдокоду

Общий пример псевдокода

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

Компьютерные программисты очень сильно зависят от псевдокода, настолько, что оказывает заметное влияние на их психика.[3] Типичный программист настолько обусловлен идеей написания упрощенного кода каким-либо образом, будь то написание псевдокода или скелетного кода, или даже просто рисование диаграммы, что это оказывает измеримое влияние на то, насколько хорошо они могут написать свою окончательную реализацию. Это было обнаружено в нескольких приложениях, когда разные программисты работали на разных языках и парадигмы программирования.

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

Выполнение

Скелетное программирование может быть реализовано в различных программных приложениях.

Документация по языку программирования

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

Ява, объектно-ориентированный язык, уделяет большое внимание структурированной странице документации с полностью разделенными методами для каждой объектной части пакетов Java.[4] Объектно-ориентированные языки ориентированы на иерархическую структуру своих реализаций, а не на простой нисходящий подход, характерный для других языков. «Объекты» хранят в себе данные и переменные, что позволяет писать более эффективную программу. У этих объектов есть отдельные функции, которые могут обращаться к внутренним переменным, известным как методы.

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

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

Определение класса

Классы написанные сторонними разработчиками, прежде всего как часть библиотек, также демонстрируют свое программирование в виде скелетного кода. Это помогает информировать новичков в библиотеке о том, как работают функции и методы. P5.Js использует этот формат на своей странице документации, чтобы объяснить предполагаемое использование определенных включенных функций.[6] Однако это отличается от документации по языку программирования, в которой используется скелетный код для отображения параметры а не все возможные варианты использования метода.

Интерфейсы на естественном языке (NLI) чаще всего встречаются в ситуациях, когда программисты пытаются Вход, обычно в просторечии называется (без использования специфики языка программирования жаргон ) и используйте это для создания программы или метода. Реализация этого использует небольшой набор скелетного кода, подразумевающий, что функция работает в фоновом режиме.[7]

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

Определения на основе полиморфизма

Полиморфизм это идеология, которая следует за объектно-ориентированного программирования парадигма, где методы могут быть переопределены или перегружен (методы с тем же именем в дочернем классе, которые будут иметь приоритет над методом, написанным в родительском классе). Определение методов основано на каркасной структуре, определяемой синтаксис языка.[9]

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

общественный скелетExample ();

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

публичный абстрактный скелетExample ();

В этих примерах используется синтаксис Java.

Параллельное программирование

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

Алгоритмический скелет Фреймворки используются в параллельном программировании для абстрактного описания рассматриваемых методов для дальнейшей разработки. Фреймворки не ограничиваются одним типом, и каждый из этих типов имеет разные цели для повышения эффективности программы разработчика. Их можно разделить на три основных типа: параллельные данные, параллельная задача и разрешение.[10]

Параллельные данные

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

  • «Карты» - это наиболее часто используемые алгоритмы параллельной обработки данных, которые обычно включают одну операцию, выполняемую над большим набором данных. Для повышения эффективности эта операция применяется к нескольким наборам данных одновременно, прежде чем данные снова будут структурированы вместе в конце.
  • «Вилки» похожи на «карты», но для определенных типов данных используются разные операции. Это известно как параллелизм множественных данных.[10]
  • «Сокращение» или «сканирование» используются для применения префиксов к набору данных перед применением операции к данным. Они отличаются от «карт», поскольку они имеют набор частичных результатов во время выполнения самого метода.

Параллельная задача

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

  • «Последовательный» закрывает и завершает вложенный набор скелетных алгоритмов. Методы и программы, которые являются частью скелетов, включаются как завершающие аспекты программы перед закрытием.
  • «Фермы» известны как группа задач, работник или как хозяин или подчиненный другой функции. Он выполняет поставленные задачи, реплицируя задачи в нескольких потоках и выполняя их одновременно. Это разделяет нагрузку на конкретный поток, эффективно создавая отношения главный / подчиненный между потоками.
  • «Конвейеры» - это более традиционные формы алгоритмов, в которых каждый метод или функция выполняется последовательно. Это соответствует порядку, в котором программист написал свой код. Это делается параллельным путем одновременного выполнения различных задач над набором данных, обычно вводимых, для повышения производительности и скорости. Каждое одновременное вычисление называется этапом. Алгоритм конвейера может быть вложенным, где один находится внутри другого, каждый из которых разделяет обязанности для увеличения скорости, а также количества этапов.
  • «Если» дает программе условное разделение задач, где набор скелетного кода разбивается на два основных раздела. Программе дается условный оператор, поэтому ей задается определенный алгоритм.
  • «For» выполняет задачу несколько раз, оба раза, указанные программистом, что позволяет получить более эффективный набор кода. Количество запусков кода является предварительно установленным значением, указывающим, что при время выполнения, это не может быть изменено. Он должен выполнить задание указанное количество раз.
  • «Пока» - это алгоритм, очень похожий на работу алгоритма «для», когда задача выполняется несколько раз. Однако в алгоритмах «while» программа вычисляет задачу несколько раз, прежде чем будет выполнено условное выражение. Это означает, что алгоритм «while» может выполнять свою задачу разное количество раз при каждом запуске.

Скелеты разрешения

Эти скелеты сильно отличаются от типичных скелетов, найденных выше. Алгоритмы «разрешения» используют комбинацию методов для решения указанной проблемы. Данная проблема алгоритма может быть «семейством проблем».[10] Есть два основных типа этих скелетов: «разделяй и властвуй» и «заклейми и сковывай».

  • «Разделяй и властвуй» использует скелет карты в качестве основы, комбинируя его со скелетом while для решения проблемы. В алгоритмах карты функции данных применяются одновременно. В «разделяй и властвуй» к предоставленному набору данных применяется функция с использованием каркаса карты, однако это может быть применено рекурсивно с использованием алгоритма «пока». «Пока» нарушается только тогда, когда решена вся проблема.
  • «Ветвь и граница» - это алгоритм, который также использует алгоритмы сопоставления, однако вместо применения алгоритма «пока» для одновременного выполнения задач этот алгоритм разбивает задачи на ветви. Каждая ветвь имеет определенную цель или «привязку», когда условный оператор останавливает ее.

Рекомендации

  1. ^ Фриман, Эрик; Фриман, Элизабет; Кэти, Сьерра; Берт, Бейтс (2004). Хендриксон, Майк; Лукидес, Майк (ред.). "Шаблоны проектирования в первую очередь" (мягкая обложка). 1. О'РЕЙЛИ: 440. ISBN  978-0-596-00712-6. Получено 28 августа, 2012. Цитировать журнал требует | журнал = (помощь)
  2. ^ Лоури, Джефф (2 ноября 2019 г.). "Почему разработка программного обеспечения сложна?". Середина. Получено 15 ноября, 2020.
  3. ^ а б Беллами, Рэйчел К. Э. (1 июня 1994 г.). «Что делает псевдокод? Психологический анализ использования псевдокода опытными программистами». Взаимодействие человека с компьютером. 9 (2): 225–246. Дои:10.1207 / s15327051hci0902_3. ISSN  0737-0024.
  4. ^ «Объект (Java Platform SE 8)». docs.oracle.com. Получено Второе октября, 2020.
  5. ^ «Встроенные функции - документация Python v3.0.1». docs.python.org. 14 февраля 2009 г.. Получено 3 октября, 2020.
  6. ^ "ссылка | p5.js". p5js.org. Получено 15 ноября, 2020.
  7. ^ Грейнджер, Крис (18 ноября 2020 г.). «Первый взгляд на что-то новое, над чем мы работаем». Twitter. Получено 19 ноября, 2020.
  8. ^ Озджан, Э. (2004). «СОЗДАНИЕ СКЕЛЕТА КЛАССА JAVA С ИСПОЛЬЗОВАНИЕМ НАТУРАЛЬНОГО ЯЗЫКОВОГО ИНТЕРФЕЙСА». Материалы 1-го Международного семинара по пониманию естественного языка и когнитивной науке. SciTePress - научно-технические публикации. 1: 126–134. Дои:10.5220/0002683301260134. ISBN  972-8865-05-8.
  9. ^ Беная, Тамар; Зур, Эла, «Понимание концепций объектно-ориентированного программирования в продвинутом курсе программирования», Конспект лекций по информатике, Берлин, Гейдельберг: Springer Berlin Heidelberg, стр. 161–170, ISBN  978-3-540-69923-1, получено 18 ноября, 2020
  10. ^ а б c d Гонсалес-Велес, Орасио; Лейтон, Марио (1 ноября 2010 г.). «Обзор структур алгоритмического каркаса: инструменты структурного параллельного программирования высокого уровня». Программное обеспечение: практика и опыт. 40 (12): 1135–1160. Дои:10.1002 / spe.1026. ISSN  0038-0644.