Про обобщение и абстрагирование — xommep — LiveJournal
Попробую написать очередную теоретическую статью. В последнее время в информационном пространстве накал творящегося хаоса только нарастает, и смотреть на это без слёз уже давно нельзя. И чтобы не чувствовать себя пешкой в чужой игре, хорошо бы развивать навыки самостоятельного освоения информации. Через рассматриваемые в статье обобщение и абстракцию.
На заре этих ваших интернетов, на политических форумах в споре с т.н. «либералами» заметил у них отговорку — «не обобщай». Не знаю, откуда у них это в ту пору вылезло, но тогда это было своего рода мейнстрим — говори конкретно, не обобщай. Мне это изначально казалось странным, буквально вразрез со всем жизненным опытом. Уши подобного подхода иногда вижу и сегодня, и, надеюсь, будет понятно, откуда что взялось.
Начнём, как обычно, с определений. Обобщение нашёл в наглоязычной википедии, так что там оно выглядит немного шероховато:
Обобщение — это форма абстракции, при которой общие свойства конкретных примеров формулируются в виде общих концепций или утверждений. Обобщения предполагают существование предметной области или набора элементов, а также одной или нескольких общих характеристик, разделяемых этими элементами (таким образом, создавая концептуальную модель). Как таковые, они являются существенной основой всех достоверных дедуктивных выводов (особенно в логике, математике и естественных науках), где процесс проверки необходим для определения того, справедливо ли обобщение для любой данной ситуации.
Чтобы два раза не вставать, приведу определения абстракции и абстрагирования:
Абстра́кция — процесс отвлечения (абстрагирования) от тех или иных характеристик объекта для их избирательного анализа; при этом наблюдаемый объект замещается его идеализированным теоретическим образом – абстрактным объектом. Абстракции являются универсальным методом научного познания, они необходимы для формирования понятий, узнавания и классификации объектов исследования на всех уровнях формирования знаний.
Абстраги́рование — операция мышления, состоящая в отвлечении от несущественных сторон, свойств, связей объекта (предмета или явления) с целью выделения их существенных, закономерных признаков. Результат абстрагирования — абстрактные понятия, например: цвет, кривизна, масса, красота и т. д.
Тем не менее, понятие «абстракция» в общественном сознании считается чуть ли не синонимом чего-то несущественного, а то и не существующего — это всего лишь абстракция. Возможно, уши этого явления торчат из художественного абстракционизма, как чего-то примитивного и одновременно непонятного. Хотя, если присмотреться, то абстракции необходимы для того-то и сего-то; а абстрагирование — отсечение несущественных признаков с целью выделения существенных.
В качестве примеров абстрактных понятий можно привести… обычные цифры и числа. 1,2,3,4,5, ноль или бесконечность — это всё абстрактные понятия; не «один банан» или «один патрон», а просто «один». Или буквы; это тоже по большей части абстракция; человек может прекрасно говорить на языке и понятия не иметь о каких-либо буквах, как это было ещё совсем недавно, до ликвидации безграмотности.
Обучение грамотности или счёту — это своего рода обучение абстрагированию; считать не на яблоках или картошке, а на неких закорючках, которых в природе не существует. Когда вы это осваиваете, вы можете автоматически использовать эти самые абстракции, не задумываясь о их виртуальной сущности. В ту же тему, например, правила дорожного движения — видя перед собой какие-то странные знаки, вы понимаете, что тут что-то можно или нельзя.
И если сделать ещё один шажок, то можно увидеть, что обобщение — это не просто использование готовой абстракции, которой вас кто-то научил, а формирование такой абстракции самостоятельно. Да, вы можете ошибаться, и это основная проблема, на которую упирают те же самые псевдо-либералы — ты кто такой вообще, чтобы бла-бла-бла; вон, почитай А, Б или Ц. И вместо самостоятельного обобщения вы просто получаете готовое решение, которое — внимание — тоже не застраховано от ошибок, а в общем случае и от преднамеренного обмана. Даже если аффтар книжек носит пинжак с карманами и вообще уважаемый человек.
Даже если вы полностью согласны с прочитанным в книжке, самостоятельное обобщение вам пригодится для проверки написанного — действительно ли предложенная абстракция работает?.. Не обязательно залазить на верхние слои мироздания, можно и вполне на бытовом уровне посмотреть — работает ли это в вашем конкретном случае, или нет. А если нет, то почему? Может, вы недостаточно верно обобщили; а может быть, всё-таки в предложенной абстракции — дыра, ошибка или прямой обман.
В наше тревожное время года «общество» накачивается пропагандой, чтобы навязать свои абстракции; это касается не какой-то конкретной стороны, а вообще; и это, кстати, тоже обобщение. В европах и прочих сателлитах НАТЫ активно демонизируется Россия и всё, что с ней связано; надеюсь, это уже пояснять особо и не нужно. И это тоже — обобщение — «русский значит плохой». Да, это обобщение ложное — но не потому, что «русский значит хороший», а потому, что это расизм и нацизм.
В противовес данному утверждению (обобщению) с обратной стороны выдвигается обобщение, которое кажется полной противоположностью, хотя по сути это… то же самое — «русский значит хороший». Как же «то же самое», если тут «хороший», а тут «плохой»?.. Но если посмотреть на пример выше, то понятно, что навешивание оценочных признаков по расовому или национальному признаку — это те же самые расизм и нацизм. И я здесь не пытаюсь уровнять «тех» и «этих», но показываю, в каком месте простой трудовой народ пытаются направить по ложному следу.
Я часто в своих статьях упоминаю о не-субъектности обывателя в культуре — это именно про системное не-умение абстрагироваться и обобщать. И дело не в том, что люди массово разучились это делать (хотя они разучились), а в том, что в «обществе» сознательно культивируется не научное, а религиозное мировоззрение; и речь тут не за церковь и богословие. Как мы видим из определения, Абстракции являются универсальным методом научного познания; и попытки самостоятельного абстрагирования сейчас массово заменяются на пропагандистское навязывание мнения, то есть по сути Знание заменяется Верой. Ты должен веровать в правильные идеалы, и тогда ты хороший; а вот они не веруют, и поэтому они плохие. Чем этот подход плох, см. выше. И таки да, под Верой я понимаю не религиозное, а вообще любое доверие без самостоятельной проверки.
Поэтому-то общественное инфо-пространство буквально обсижено разного рода «икспердами», которые многократно доказывают свою проф. непригодность при любом уровне самостоятельного обобщения; но так как в приоритете Вера, а не Знание, то любые сомнения в их правдивости разбиваются — типутин. Или наоборот. Разницы, как ни странно, никакой. ;))) Потому что лажа — она и в Африке лажа.
Поэтому-то мои статьи обычно без готовых рецептов; основной своей задачей вижу обретение обывателем субъектности; как минимум — способности к самостоятельному абстрагированию и обобщению. А если совать ему готовые рецепты, то чем тогда будешь отличаться от типовых пропагандистов?..
>>> Про обобщение и культуру >>>
Tags: психология, размышления, терминология
1.
3. Абстрагирование | Электронная библиотекаЭлектротехника и промышленная электроника / САПР и АРМ / 1.3. Абстрагирование
Под абстрагированием понимается выделение существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и, таким образом, четко определяют его концептуальные границы относительно дальнейшего рассмотрения и анализа. Абстрагирование концентрирует внимание на внешних особенностях объекта и позволяет отделить самые существенные особенности его поведения от деталей их реализации. Выбор правильного набора абстракций для заданной предметной области представляет собой главную задачу объектно-ориентированного проектирования.
Абстрагирование находит широкое применение в языках высокого уровня /3/. Например, в использовании концепции «файла»: файлы абстрагируются от предметной области, конкретного носителя информации, реализуя долговременное постоянно доступное хранилище поименованных единиц. Другим примером абстрагирования является развитие и совершенствование алгоритмических языков высокого уровня, в которых реализованы два важнейших метода: абстрагирование через параметризацию и через спецификацию.
Примером абстрагирования через параметризацию является концепция «функция», передаваемые параметры которой являются формальными, а фактические связываются с ними в момент использования такой абстракции. Программисты часто используют абстракцию через параметризацию, даже не замечая этого.
Абстрагирование через спецификацию позволяет абстрагироваться от процесса вычислений, описанных в теле процедуры, до уровня знаний лишь того, что данная процедура должна в итоге реализовать. Это достигается путем задания для каждой процедуры спецификации, описывающей эффект ее работы, после чего смысл обращения к данной процедуре становится ясным через анализ этой спецификации, а не самого тела процедуры. Абстрагирование через спецификацию реализуется, например, в виде пакета библиотечных функций, широко используемых программистами.
Абстрагирование через параметризацию и спецификацию являются мощными средствами создания программ /3/.
Дальнейшее развитие абстрагирование получило в объектно-ориентированном программировании (ООП) при реализации свойств инкапсуляции, наследования и полиморфизма.
Под инкапсуляцией понимается процесс отделения друг от друга отдельных элементов объекта, определяющих его устройство и поведение /6/. Инкапсуляция служит для того, чтобы изолировать интерфейс объекта, отражающий его внешнее поведение, от внутренней реализации объекта. Объектный подход предполагает, что собственные ресурсы, которыми могут манипулировать только методы самого класса, скрыты от внешней среды. Абстрагирование и инкапсуляция являются взаимодополняющими элементами: абстрагирование фокусирует внимание на внешних особенностях объекта, а инкапсуляция (или, иначе, ограничение доступа) не позволяет объектам-пользователям различать внутреннее устройство объекта.
Наследование — это способность брать существующий – базовый – класс и порождать из него новый класс — потомок, с наследованием всех его атрибутов и поведения.
Это, пожалуй, самая впечатляющая возможность объектно-ориентированного программирования. Наследование может использоваться множество раз при порождении объектов. При единичном наследовании порожденные классы могут наследовать готовые функции элементов своих классов-предков, набирая при каждом порождении все больше и больше функций элементов. Порождение нескольких классов из одного корня
(базового класса) позволяет использовать текст программ для многих классов. Используя наследование, можно наращивать иерархию классов, создавая древовидные структуры. Еще более сложные иерархии образуются через множественное наследование. Под множественным наследованием понимается способность наследования свойств и поведения не от одного базового класса, а от нескольких. Можно распространять классы в объектных кодах среди других программистов. На их базе они смогут порождать новые, специализированные классы, при этом без знания исходного текста. Уже появилось большое количество библиотек классов различных фирм. Возможно, они будут весьма полезны и обеспечат значительный успех в программных проектах.
Если один и тот же объект может по-разному использоваться, в зависимости от обстоятельств, то он обладает полиморфизмом. В ООП используют «раннее» и «позднее связывание», в результате чего получаются функции-элементы, обладающие полиморфизмом, которые ведут себя по-разному, за счет своих различных свойств.
В случае раннего связывания адреса всех функций и процедур определяются на этапе компиляции и компоновки программы, то есть до выполнения программы. В противоположность этому, в случае позднего связывания, адрес функции не связывается с обращением к нему до того момента, пока обращение не произойдет фактически, то есть во время выполнения программы. В такой динамической системе нельзя заранее предсказать, сколько отображаемых объектов будет на экране, каких они будут типов (окно, меню, диалоговая панель и т.д.) и в какой последовательности пользователь будет с ними работать.
Чаще всего механизм перегрузки используется при объявлении конструкторов класса для того, чтобы обеспечить возможность инициализации объектов различными способами, и при перегрузке операций, для того, чтобы обеспечить возможность использования знаков операций для пользовательских типов.
Реализация концепции полиморфизма означает, что можно создать общий интерфейс для группы близких по смыслу действий. Преимуществом полиморфизма является то, что он помогает снижать сложность программ, разрешая использование одного интерфейса для единого класса действий /5/.Таким образом, абстракция широко используется при разработке идеальных моделей технических объектов в АРМ, САПР.
Примеры абстракции в повседневной жизни
Абстракция является неотъемлемой частью вычислительного мышления и решения задач. Это также одна из самых сложных частей вычислительного мышления для концептуализации. Большая часть этой трудности связана с семантикой слова «абстракция», которое часто подразумевается как неясное или расплывчатое. Однако более подходящее определение абстракции применительно к информатике — это «резюме чего-то» или «извлечение из чего-то».
Абстракция, используемая в компьютерных науках, представляет собой упрощенное выражение ряда задач или атрибутов, которые обеспечивают более определенное и доступное представление данных или систем.
Один известный пример абстракции в области компьютерных наук проиллюстрирован в статье Thorben Janssen на Stackify. В этом примере Янссен объясняет абстракцию с точки зрения приготовления утренней чашки кофе. Вы можете завершить процесс, зная только, что добавили воду и зерна и включили кофеварку. Вы не обязательно нужно знать, как кофеварка работает, чтобы приготовить кофе. С очень специфической задачей «приготовить кофе» вам даже не нужно думать, как и когда предоставить кружку, поскольку это будет считаться отдельной «задачей» от «приготовления кофе».
В этом примере абстракция объединяет функцию кофеварки просто в процесс «включения кофеварки» и устраняет необходимость думать о чем-то более сложном, чем базовые процессы для достижения этой конкретной цели: поставить фильтр, добавить кофейную гущу, отмерить и добавить воды, включить. Подробнее об абстракции «CoffeeMachine» читайте здесь.
Кроме того, некоторые реальные примеры абстракции включают:
- Выпечка торта. Если вы следуете рецепту выпечки торта, вы используете абстракцию. В этом примере вы выполняете только необходимые шаги для приготовления и выпечки теста. Вы не рассчитываете и не анализируете научные данные, лежащие в основе различных разрыхлителей и температур выпечки, и можете не понимать внутреннюю работу механизмов контроля температуры и времени в духовке. Тем не менее, вы все равно можете выполнить задачу выпечки торта, поскольку эти тонкости автоматически учитываются, когда вы отмеряете ингредиенты в миске, перемешиваете и ставите форму с тестом в духовку на указанное время.
- Использование известных сочетаний цветов и нарядов для утреннего одевания. Еще один реальный пример абстракции — одеваться по утрам. Вы сможете быстро оценить потребности гардероба и относительно просто собрать соответствующий наряд. Возможно, у вас есть комплект из брюк и куртки, обеспечивающий упрощенную совместимость. У вас есть предварительные знания о том, какие узоры и цвета соответствуют друг другу, без повторного анализа науки о цвете каждый раз, когда вы одеваетесь, эффективно сужая свой выбор блузки или обуви. Наконец, вы также используете абстракцию, чтобы эффективно сочетать свитер и джинсы, а не свитер и шорты для бега, вместо того, чтобы анализировать каждую возможную комбинацию одежды каждый раз, когда вы одеваетесь.
- Еду на работу. Поездка на работу также использует абстракцию в реальном мире. Внутри двигателя есть сложные механизмы, которые заставляют ваше транспортное средство двигаться (например, стартер зацепляет маховик, который вращает коленчатый вал, перемещает поршни и запускает процесс сгорания в двигателе). Однако, помимо «завести двигатель, включить двигатель и использовать педали газа и тормоза», эти тонкости в значительной степени игнорируются, когда вы едете на работу. Вы также автоматически извлекаете свой идеальный маршрут из всех возможных маршрутов, вероятно, с предпочтительным эффективным маршрутом, который вы используете большую часть времени, вместо того, чтобы переоценивать каждый поворот или даже каждую вариацию маршрута по мере приближения к нему.
Еще одно заблуждение
Распространенное заблуждение об абстракции состоит в том, что она должна включать шаги, скрывающие более сложные части задачи (например, как работает кофеварка, как работает духовка, как работает автомобильный двигатель и т. д.). Однако это не обязательно верно. В абстракции определяющим фактором является не то, что эти процессы не поняты конечным пользователем, а скорее то, что они «содержатся» с целью получения того же результата с меньшими затратами. Например, все внутренние механизмы (или атрибуты) кофеварки содержатся в упрощенном контейнере или объекте «кофемашины». Все внутренние механизмы/атрибуты все еще существуют и даже могут быть поняты, но упрощены за счет использования «кофемашины» вместо объяснения внутренних механизмов/атрибутов каждый раз, когда готовится чашка кофе.
Заключительные мысли
Абстракция — это просто процесс упрощения представления кода во внешних системах. Эта концепция является неотъемлемой частью информатики и кодирования, а также вычислительного мышления. Узнайте больше об обучении учащихся абстракции и вычислительному мышлению, изучив EasyTech сегодня.
Абстракция в объектно-ориентированном программировании (ООП)
Абстракция в реальной жизни
Абстракция в философских терминах — это процесс понимания поведения или структуры объекта посредством общего мышления. Например, когда мы думаем об автомобиле, мы обычно вспоминаем абстрактное понятие автомобиля и его функций. Вот почему мы можем распознать такой объект, как автомобиль, даже если он отличается от любого автомобиля, который мы видели раньше. Другими словами, мы разрабатываем концепции предметов повседневного обихода посредством процесса абстракции, когда мы устраняем ненужные детали и сосредотачиваемся на основных атрибутах и функциях.
Абстракция — обычная черта реальных приложений. Например:
- Когда мы входим в онлайн-аккаунт, мы вводим наш идентификатор пользователя и пароль и нажимаем кнопку входа. Процесс отправки входных данных на сервер и их проверки абстрагирован от нас.
- Когда мы печатаем на компьютере, мы нажимаем клавиши, чтобы вывести результат на экран, но нам не нужно знать механизм, лежащий в основе того, как создается вывод.
- В Java класс HashMap предоставляет методы для хранения и извлечения пар ключ-значение из карты. Все, что нам нужно знать, чтобы использовать HashMap в нашем приложении. Детали реализации абстрагируются от нас.
- При разработке класса для взаимодействия с базой данных для выполнения различных операций клиенту класса не обязательно быть знакомым с программированием баз данных. Им нужно знать только некоторые детали класса для выполнения необходимых операций с базой данных без глубокого понимания лежащего в основе программирования.
Что такое абстракция в ООП?
В объектно-ориентированном программировании абстракция включает предоставление необходимой функциональности внешним объектам и сокрытие деталей реализации. Это позволяет программистам использовать сложную логику внутри объекта без необходимости разбираться в его реализации. Другими словами, абстракция в ООП — это процесс сокрытия внутренних деталей приложения от внешнего мира, так что нам нужно знать только то, что делает код, а не как он это делает.
Критические идеи для размышления!- Объект имеет свойства и методы. Используя модификаторы доступа, мы можем скрыть важные детали и предоставить доступ к нужным методам и свойствам внешнему миру. Это один из способов достижения абстракции.
- Абстракция включает определение объектов как абстрактных «акторов», которые могут выполнять набор функций, изменять свое состояние и взаимодействовать с другими объектами.
- Мы также можем понять абстракцию через наследование. В иерархии наследования родительские классы содержат общую реализацию, а дочерние классы содержат более конкретную реализацию.
- Абстракция — ключевая концепция, лежащая в основе нескольких фундаментальных принципов объектно-ориентированного программирования, таких как принцип открытости-закрытости и принцип инверсии зависимостей.
Как реализовать абстракцию?
- В Java абстракция реализуется с помощью абстрактных классов и интерфейсов.
- В C++ абстракция реализуется с помощью файлов заголовков, спецификаторов доступа и абстрактных классов. Абстрактные классы в C++ можно создавать с помощью виртуальных функций и наследования.
Позже мы обсудим абстракцию в Java и C++ в отдельных блогах.
Некоторые важные концепции для изучения!- Как мы можем достичь абстракции в Java, используя абстрактные классы и абстрактные методы?
- Как мы можем достичь абстракции в Java с помощью интерфейсов?
- Когда следует использовать абстрактные классы и интерфейсы в Java?
- Что такое абстрактный класс C++ и как он используется?
- Что такое чистая виртуальная функция в C++ и как она используется?
Типы абстракций в ООП
Объектно-ориентированное программирование можно рассматривать как попытку абстрагировать как данные, так и управление. Итак, в объектно-ориентированном программировании есть два типа абстракции: абстракция данных и абстракция управления.
Абстракция данныхВ объектно-ориентированном программировании абстракция данных включает отделение свойств типа данных от конкретных деталей его реализации. Для этого мы можем определить типы данных в классе, разработать операции для работы с типом данных и скрыть все детали реализации от внешнего мира. Когда данные объекта недоступны для внешнего мира, создается абстракция данных. При необходимости мы можем предоставить доступ к данным объекта через определенные методы.
С другой стороны, абстракция данных может предоставлять интерфейс для типа данных, который виден клиенту и может им использоваться. В то же время операции, работающие с данными внутри класса, могут оставаться закрытыми, что позволяет позже вносить изменения для обновления или повышения эффективности. Идея состоит в том, что такие изменения в конкретной реализации не должны влиять на клиентский код.
Например, мы можем определить абстрактный тип данных под названием Словарь, где каждый ключ связан с уникальным значением, и мы можем получить доступ к значениям на основе их ключей. Эта структура данных может быть реализована с помощью хеш-таблицы, двоичного дерева поиска или даже простого массива. Для клиентского кода абстрактные свойства одинаковы в каждом случае.
Абстракция управленияВ объектно-ориентированном программировании абстракция управления — это абстракция действий. Часто нам не нужно предоставлять подробную информацию обо всех методах объекта. Другими словами, когда мы скрываем внутреннюю реализацию различных методов, связанных с клиентской операцией, создается абстракция управления.
Мы также можем понять абстракцию управления на более низком уровне. Программный код — это набор методов, написанных на языке программирования. Во многих случаях некоторые методы аналогичны и повторяются несколько раз. Идея абстракции управления состоит в том, чтобы идентифицировать эти методы и объединить их в единое целое.
- Абстракция управления следует принципу DRY, который расшифровывается как «Не повторяйся» и предполагает использование методов в программе, чтобы избежать дублирования.
- Используя абстракцию элементов управления, мы можем создавать новые функции и объединять операторы управления в единое целое.
- Мы больше сосредотачиваемся на том, как можно реализовать конкретную функциональность, а не на описании каждой детали.
Примечание: Абстракция управления является одной из основных целей использования языков программирования. Компьютерные машины понимают операции на очень низком уровне, такие как перемещение некоторых битов из одной ячейки памяти в другую и создание суммы двух последовательностей битов. Языки программирования позволяют сделать это на более высоком уровне.
Сравнение абстракции и инкапсуляции
Хорошо спроектированный код с правильным использованием абстракции соответствует принципу наименьшего удивления: «Компонент системы должен вести себя так, как ожидает большинство пользователей. Поведение не должно удивлять пользователей».
Но главный вопрос заключается в следующем: как определить и показать пользователям ожидаемое поведение? Как обрабатывать детали их реализации? На этом этапе появляется следующий столп объектно-ориентированного программирования: инкапсуляция!
Разница между абстракцией и инкапсуляцией
Преимущества абстракции
- Абстракция используется для создания границы между приложением и клиентским кодом, что может помочь упростить разработку и реализацию программного обеспечения.
- В сложном программном обеспечении абстракция помогает нам разделить обязанности на программные сущности (классы, методы и т. д.), которые знают только необходимую функциональность друг друга, но не то, как эта функциональность реализована.
- Абстракция максимально упрощает использование релевантной информации. Другими словами, код с правильной абстракцией помогает программистам быстро понять, что делает код и как он предназначен для использования.