Поговорим про абстракциях. Что вообще это за слово такое абстракция?

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

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

Противоположное слово это конкретный, фактический.

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

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

Абстракции в разработке программного обеспечения

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

Виртуальная память это абстракция от физических адресов. Виртуальная машина это абстрагирования от реальной физической машины (будь то телефон, DeskTop, Server). Любой язык программирования это способ отвлечения от безумно сложных и скучных машинных кодов. В каждой программе есть абстрактные структуры данных такие как бинарные деревья, очереди, стеки, циклические массивы, графы, косые деревья, хеш-таблицы. Файл как и файловые системы преобразуют нули и единицы в удобные текстовые файлики. Алгоритмы компрессии данных это способ отвлечения от реального размера файла. Операционная система это способ отвлечения от конкретного оборудования. POSIX (Portable Operating System Interface) это пример полезного абстрагирования от реализации функций операционных систем. Благодаря POSIX у разных операционных систем появилась совместимость на уровне исходного кода. Иконки на рабочем столе - тоже самое. Гипервизоры нужны чтобы не обращать внимания на то как меняются операционные системы. Байт-код это отвлечение от целевой платформы для которой собрана программа. Язык Python абстрагируется от типов данных. Модель OSI-7 это условное представление того через какие слои проходят данные в интернете. Физический, канальный, сетевой, транспортный, представления, сеансовый, прикладной. DNS адреса удобнее запоминать чем сырые IP адреса. Любое прикладное ПО с GUI это чистейшей воды абстракция. Прикладное ПО (например программа для трассировки печатных плат) это умозрительная концепция, коротая решает конкретную задачу реализованная на основе интерфейсов, которые предоставляет операционная система.

В общем абстракции очень полезны в программировании. Для разработки софтвера надо обязательно обладать развитым абстрактным мышлением.

Абстракции в аппаратном обеспечении

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

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

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

https://habr.com/ru/articles/655879/

Поэтому люди придумали схемы электрические принципиальные. Схемотехника это абстракция от топологии. Однако и схемотехника современных электронных устройств тоже достигла высокого уровня сложности. Схемотехника в 40…100 страниц это уже вообще сегодня норма жизни. Поэтому люди придумали блок-схемы электронных плат. Блок-схема это абстракция от схемотехники, которая работает на 2м уровне. Потом делают схемы топологии сети. Это уже, как минимум, 3тий уровень абстракции. 

https://habr.com/ru/articles/667030/

Проследите цепочку получившихся уровней: 

Физика > Полупроводниковые приборы > аналоговые схемы > цифровые схемы > логические элементы > АЛУ > процессор > SoC > PCB > OS(системное ПО) > Прикладное ПО. Минимум 11 умозрительных уровней!

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

Вероятно абстракции появились как побочный эффект познания мироустройства в науке. Например закон всемирного тяготения это абстракция. Реальные силы значительно труднее в понимании. Это доказывают опыты наблюдения смещения перигелия Меркурия. https://ru.wikipedia.org/wiki/Смещение_перигелия_Меркурия

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

Абстракции мы всегда видим в повседневности. Деньги это вообще абстракция от вида трудовой деятельности. Будь то труд каменщика или труд пекаря. 

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

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

А оut source компании это пресловутый способ абстрагирования от найма как такового и социальных противоречий связанных с этим для продуктовых компаний.
https://habr.com/ru/articles/720464/

У абстракций есть недостатки?

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

В чем достоинства абстракций?

1--Они помогают понять сложные вещи. Абстракции делают возможным применение формальных методов, и алгоритмов, т.е. в конечном счете логики. (модель атома Бора, абстрактные структуры данных в программировании, закон всемирного тяготения)

2--Они уменьшают время понимания сложных вещей (схема метро, электрические принципиальные схемы)

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

4--Они помогают переносить объекты на другую систему координат (Языки программирования Java, гипервизоры, Doсker контейнеры)

5--Они заменяют сложное на простое (языки программирования, файловые системы, DNS адреса, иконки на рабочем столе, программы с GUI).

6--Они помогают уйти от ответственности (out source компании, модель OSI-7)

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

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

Как научиться абстрактному мышлению раз это так полезно? Как научиться придумывать полезные абстракции?

У меня нет четкого ответа на этот вопрос. Наверно надо пробовать. Далее эксперименты покажут какие абстракции жизнеспособны, а какие нет. Это как в физике. Была модель атома Томсона и модель атома Бора. В результате экспериментов выяснилось, что модель атома Бора оказалась более пригодной к реальности. Многие языки программирования тоже канули в лету. Где сейчас Паскаль, Fortran или Бэйсик? Тут как с языками программирования. Некоторые абстракции будут существовать до поры до времени пока их не заменят более эффективные простые абстракции. И это нормально.

Вывод

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

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

Известные мне примеры умозрительных понятий я перечислит тут https://docs.google.com/spreadsheets/d/1JxEuo7bxo2A7J5qksBxekWf3FJVuDCJbXaZKx9IvDnU/edit#gid=0

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

https://habr.com/ru/companies/tiktokcoach/articles/206994/

https://habr.com/ru/companies/skillfactory/articles/508716/

Комментарии (8)


  1. victor_1212
    13.05.2023 22:17
    +2

    >В чем достоинства абстракций?

    >1--они помогают понять сложные вещи

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

    > У природы нет абстракций ...

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

    супер простой пример из математики - теорема пифагора это изобретение человека (как самолет), или открытие факта как устроена природа (например ядерные реакции)?


  1. QtRoS
    13.05.2023 22:17
    +2

    Там реки указывают плавной линией хотя на самом деле они извиваются как змеи и через каждые 100—200 метров поворот

    Занятное видео, объясняющее причину извилистости рек: YouTube.


    1. aabzel Автор
      13.05.2023 22:17
      +2


      youtube.com@MinuteEarth
      Хороший канал. Не знал про такой. Спасибо за ссылку.


  1. artemisia_borealis
    13.05.2023 22:17

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

    Тут есть некоторое противоречие. У природы нет, у человека есть. Т.е. налицо неявное предположение, что человек — это не часть природы. Где граница? Метаболизм — это часть природы, а мозговая деятельность нет? Или всё-таки да, но не вся…
    Построение гнезда, рытьё норы, палка-копалка — что из этого часть природы, а что нет? А бобровая плотина?


    Моё мнение, что эрмитово сопряжение — часть природы, и труба котельной (к сожалению) тоже.


    1. victor_1212
      13.05.2023 22:17

      > Т.е. налицо неявное предположение, что человек — это не часть природы.

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

      таки люди чем-то принципиально отличаются от микроорганизмов, или нет?


  1. phenik
    13.05.2023 22:17
    +1

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

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


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


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


    Абстракции вездесущи! Они в языке, восприятии, воображении, эмоциях, и самой природе.


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


  1. saipr
    13.05.2023 22:17
    +1

    Самый яркий пример абстракций в технике и повседневности сегодня, на мой взгляд, это иконки в GUI и смайлики. Они везде.


  1. Naf2000
    13.05.2023 22:17
    +1

    Государство это абстракция. И компании/корпорации это тоже абстракции.