Абстракция на рабочий стол: Обои абстракция на рабочий стол (2 986 обоев)

Абстракция — Computer Science Wiki

Из Computer Science Wiki

Перейти к навигацииПерейти к поиску

Это основное понятие в информатике

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

Содержание

  • 1 Идентификация примеров абстракции
  • 2 Объясните, почему требуется абстракция
  • 3 Построить абстракцию
  • 4 Различие между сущностью реального мира и ее абстракцией
  • 5 стандартов
  • 6 Каталожные номера

Идентификация примеров абстракции[править]

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

  • Автомобиль — очень сложная машина, но интерфейс простой (руль, педаль газа и рычаг переключения передач)
  • Контроллер видеоигры имеет всего несколько кнопок, но под контроллером находится сложный механизм управления
  • Язык программирования может быть довольно простым, но он переводит инструкции, которые вы пишете, в машинный код, который невероятно сложен

Объясните, почему требуется абстракция решение

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

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

Построить абстракцию[править]

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

Мы могли бы создать гигантскую красную кнопку со словами «запустить ракету с арахисовым маслом в друга», которая запускала бы ракету. Однако, как только эта кнопка будет нажата, начнется ОЧЕНЬ СЛОЖНЫЙ процесс запуска ракеты. В этом примере кнопка представляет собой абстракцию запуска ракеты.

Различие между реальным объектом и его абстракцией[править]

Пожалуйста, обратитесь к примеру с ракетой выше.

Стандарты[править]

Эти стандарты взяты из Предметного руководства IB Computer Science [2]

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

Ссылки[править]

  1. ↑ Дипломная программа IB Руководство по информатике (первые экзамены 2014 г.). Кардифф, Уэльс, Соединенное Королевство: Международная организация бакалавриата. январь 2012 г.

Дайте подробный отчет, включая причины или причины.

Получите единственно возможный ответ.

Разработайте информацию в диаграммной или логической форме.

Разрабатывайте информацию в диаграммной или логической форме.

Прояснить различия между двумя или более понятиями или элементами.

Предоставьте ответ из нескольких вариантов. Распознайте и кратко изложите отличительный факт или особенность.

Абстракция в программировании: приручение единиц и нулей

Ознакомьтесь со всеми сеансами по запросу Intelligent Security Summit здесь .


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

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

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

Почему это? Компьютеры плохо работают с двусмысленностью и нюансами. Двоичный код предоставляет совершенно однозначные инструкции «выключено» (ноль) или «включено» (единица). Они используют эти простые двоичные состояния в качестве основы для логических вычислений, которые отображают схемы компьютера как «включенные» или «выключенные». Эти простые схемы используются для создания логических элементов (например, И, ИЛИ и НЕ), которые позволяют программисту создавать операции и манипулировать данными различными способами. Затем это дублируется миллиарды раз для создания современных процессоров.

Событие

Intelligent Security Summit On-Demand

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

Смотреть здесь

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

Что такое абстракция в программировании?

Абстракция в контексте программирования направлена ​​на то, чтобы скрыть как можно большую сложность, чтобы позволить программистам сосредоточиться на том, что является наиболее важным и актуальным. Абстракция используется для маскировки большей части того, что жизненно важно для работы программы, но она изначально сложна из-за требований машин к двоичному вводу. Однако сокрытие сложности никоим образом не должно отрицательно сказываться на мощности и универсальности машины, а также на ее производительности. Наоборот, добавление уровней абстракции должно привести к более надежным и полезным результатам.

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

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

Потребность в абстракции.

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

Удивительно, но эта форма программирования была фактически изобретена в начале 1800-х годов французским ткачом по имени Жозеф-Мари Жаккард, который использовал перфокарты для направления нитей в ткацком станке для создания тканых тканей причудливых цветов.

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

Очеловечивание машинного кода

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

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

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

Поколения языков программирования

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

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

Языки первого поколения (1GL)  

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

Этот способ программирования, однако, имеет больше проблем, чем преимуществ:

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

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

Языки второго поколения (2GL)

Хотя языки 2GL по-прежнему считаются языками низкого уровня, они известны как языки ассемблера. Это первое поколение языков программирования, которые начали удовлетворять потребность программистов в более естественном методе программирования, в то же время удовлетворяя потребность машин в двоичном вводе. 2GL делают это за счет использования ассемблеров, которые переводят ввод программистов в двоичный код, который затем может быть обработан машиной. Это ознаменовало важный сдвиг в программировании, поскольку больше внимания уделялось человеческой стороне вычислений.

2GL обеспечивают те же возможности хранения, поиска и обработки данных, что и 1GL. Однако вместо использования всех единиц и нулей в 2GL используются мнемоники — комбинации символов, которые представляют операции, такие как MOV для перемещения и SUB для вычитания, — чтобы указать машине, какую операцию следует выполнить. Синтаксис определяет, на что воздействуют операции, например на ячейку памяти (MOV может перемещать данные из одного места в памяти компьютера в другое) или числовую константу (SUB позволяет вычитать одну числовую константу из другой).

Поскольку в 2GL используются комбинации символов, более узнаваемые людьми, написание, модификация и отладка программ могут выполняться намного проще, чем при программировании с 1GL. Хотя это был шаг в правильном направлении, переносимость и ограниченное практическое использование по-прежнему оставались проблемами для 2GL. Несмотря на то, что это несколько более естественно, чем единицы и нули 1GL, 2GL по-прежнему требовали огромного внимания к мелочам, связанным с достижением желаемого результата.

Языки третьего поколения (3GL)

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

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

Можно сказать, что этот подход очень вычислительный, что заставляет разработчика сосредоточиться в основном на отдельных задачах, которые должны выполнять машины. 3GL — это первый шаг к тому, чтобы программисты могли решать более масштабные и разнообразные задачи, как они это делают при программировании корпоративных приложений. И они могут сделать это с помощью менее сложного или просто меньшего количества кода.

На этом уровне абстрагируются не только реальный язык и синтаксис. Некоторые 3GL заботятся о других проблемах программирования, которые раньше выполнялись вручную, таких как удаление неиспользуемых объектов, засоряющих память, или предоставление библиотек шаблонов и других инструментов с проверенными блоками кода, готовыми к использованию. Примеры 3GL включают COBOL, BASIC, Fortran, C, C++, Java и Pascal. Хотя 3GL используют целые слова и утверждения, образованные этими словами, что является значительным шагом вперед по сравнению с 2GL, они по-прежнему представляют собой очень много процедурных языков, которые требуют явных инструкций для каждого шага, связанного с выполнением задачи.

Языки четвертого поколения (4GL)

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

4GL позволяют программистам сосредоточиться на том, чего они хотят достичь с помощью своих программ, а не на всех отдельных шагах, необходимых для этого.

Одной из наиболее часто используемых иллюстраций того, как абстракция упростила программирование, является программа «Hello World». Простая программа для отображения слов «Hello World» требует 56 строк кода на языке ассемблера. В Ruby, 4GL, инструкции могут быть даны одной строкой.

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

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

От написания сценариев к перетаскиванию: абстракция через low-code

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

Low-code, возможно, более точно можно описать как «скрытый код» из-за уровня абстракции инструментов платформы разработки приложений с низким кодом.

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

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

Low-code также позволяет отдельным лицам создавать более крупные приложения, управляемые процессами, для чего обычно требуется команда разработчиков high-code, разбирающихся в текстовых языках, таких как Java, Python, C++, Ruby и SQL. Поскольку многие распространенные шаблоны приложений с низким кодом являются предварительно созданными и являются частью платформы, разработчикам нужно только указать приложению, что делать. Это может включать в себя такие команды, как «получить электронные письма из Outlook» — и никогда — как это сделать, что делает low-code одним из самых гипердекларативных доступных методов программирования.

Например, создание корпоративного приложения для управления делами с помощью 4GL с высоким кодом может занять несколько месяцев. С 3GL на это могут уйти годы, но с low-code разработчик может создать приложение корпоративного уровня за недели или даже дни. Более того, даже непрофессиональные разработчики, так называемые гражданские разработчики, могут научиться программировать с помощью low-code и создавать полезные корпоративные приложения без необходимости овладевать более глубокими знаниями, необходимыми для написания приложений на традиционных языках с high-code.

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

Основываясь на том, что было сделано ранее, мы можем сделать некоторые обоснованные предположения о том, какие формы абстракции программирования примут в будущем. Чтобы сделать жизнь программистов еще проще, будущие абстракции должны будут:

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

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

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