Jump to content

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

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

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

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

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

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

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

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

[ редактировать ]
Общий пример псевдокода

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

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

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

Выполнение

[ редактировать ]

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

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

[ редактировать ]

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

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

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

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

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

[ редактировать ]

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

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

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

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

[ редактировать ]

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

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

public skeletonExample();

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

public abstract skeletonExample();

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

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

[ редактировать ]

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

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

Параллельный обмен данными

[ редактировать ]

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

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

Параллельное выполнение задач

[ редактировать ]

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

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

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

[ редактировать ]

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

  • «Разделяй и властвуй» использует в качестве основы скелет карты, объединяя его со скелетом while для решения проблемы. В алгоритмах карт функции над данными применяются одновременно. В режиме «разделяй и властвуй» к набору предоставленных данных применяется функция с использованием скелета карты, однако это можно применять рекурсивно с использованием алгоритма «пока». «Пока» прерывается только тогда, когда вся проблема решена.
  • «Ветвь и граница» — это алгоритм, который также использует алгоритмы отображения, однако вместо применения алгоритма «пока» для одновременного выполнения задач этот алгоритм разбивает задачи на ветви. Каждая ветвь имеет определенную цель или «привязку», где условный оператор приведет к ее остановке.
  1. ^ Фриман, Эрик; Фриман, Элизабет; Кэти, Сьерра; Берт, Бейтс (2004). Хендриксон, Майк; Лукидес, Майк (ред.). Шаблоны проектирования Head First (мягкая обложка) . Том. 1. О'РЕЙЛИ. п. 440. ИСБН  978-0-596-00712-6 . Проверено 28 августа 2012 г.
  2. ^ Лоури, Джефф (2 ноября 2019 г.). «Почему разработка программного обеспечения сложна?» . Середина . Проверено 15 ноября 2020 г.
  3. ^ Jump up to: а б Беллами, Рэйчел К.Е. (1 июня 1994 г.). «Что делает псевдокод? Психологический анализ использования псевдокода опытными программистами» . Взаимодействие человека и компьютера . 9 (2): 225–246. дои : 10.1207/s15327051hci0902_3 . ISSN   0737-0024 .
  4. ^ «Объект (Платформа Java SE 8)» . docs.oracle.com . Проверено 2 октября 2020 г.
  5. ^ «Встроенные функции — документация Python v3.0.1» . docs.python.org . 14 февраля 2009 года . Проверено 3 октября 2020 г.
  6. ^ "ссылка | p5.js" . p5js.org . Проверено 15 ноября 2020 г.
  7. ^ Грейнджер, Крис (18 ноября 2020 г.). «Первый взгляд на что-то новое, над чем мы работаем» . Твиттер . Проверено 19 ноября 2020 г.
  8. ^ Озкан, Э. (2004). «Генерация скелета класса Java с использованием интерфейса естественного языка» . Материалы 1-го международного семинара по пониманию естественного языка и когнитивной науке . 1 . SciTePress - Публикации по науке и технологиям: 126–134. дои : 10.5220/0002683301260134 . ISBN  972-8865-05-8 .
  9. ^ Беная, Тамар; Зур, Эла (2008), «Понимание концепций объектно-ориентированного программирования в продвинутом курсе программирования», Образование в области информатики — поддержка вычислительного мышления , Конспекты лекций по информатике, том. 5090, Берлин, Гейдельберг: Springer Berlin Heidelberg, стр. 161–170, doi : 10.1007/978-3-540-69924-8_15 , ISBN  978-3-540-69923-1 , получено 18 ноября 2020 г.
  10. ^ Jump up to: а б с д Гонсалес-Велес, Орасио; Лейтон, Марио (1 ноября 2010 г.). «Обзор алгоритмических каркасов: средства реализации структурированного параллельного программирования высокого уровня» . Программное обеспечение: практика и опыт . 40 (12): 1135–1160. дои : 10.1002/спе.1026 . ISSN   0038-0644 . S2CID   16211075 .
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bbe56ffdce8228ebd973e17a4317e905__1713142020
URL1:https://arc.ask3.ru/arc/aa/bb/05/bbe56ffdce8228ebd973e17a4317e905.html
Заголовок, (Title) документа по адресу, URL1:
Skeleton (computer programming) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)