Понятие абстрактного мышления. Виды абстракции
Философия, по мнению многих людей, это наука, которая характеризуется переливанием из пустого в пустое, как говорится. То есть в глазах обывателей философы делают только то, что рассуждают, без всякой пользы. Эта идея науки сложилась во многом благодаря ее непостижимости, благодаря использованию сложных специфических терминов и длинным, единообразным описаниям их значений. Между тем, многие философские понятия вполне уместны в обычной жизни. Например, абстракция. Это слово можно услышать очень часто. Более того, в разговорах люди используют его для обозначения абстракции или “туманности” того, что говорится. Но что такое абстракция с научной точки зрения?
Что это такое? Определение
Название этого термина происходит от латинского слова abstraction, которое переводится на русский язык как «отвлечение».»Именно в этом и заключается суть этой философской концепции. Абстрагирование — это не что иное, как отвлечение, мысленный отход от изучаемого, изучаемого или обсуждаемого предмета, осуществляемый с целью выявления и выделения наиболее важных, значимых моментов, признаков, элементов путем обобщения. Проще говоря, это способ мысленно устранить ненужное, помочь сосредоточиться на главном. Кроме того, важность может быть как обобщена, так и детализирована. Также это понятие определяется как обобщение, достигаемое путем абстракции.
Какой может быть абстракция? Примеры в жизни
Как правило, категория воспринимается только как часть некоторых длинных диалогов. На самом деле, каждый человек прибегает к ней ежедневно и не один раз.
Самый простой пример — это ход мыслей, возникающий при взгляде на небо. Каждый современный человек знает, что над его головой существует атмосфера, состоящая из нескольких чередующихся слоев. Всем известно, что он состоит из углекислого газа, кислорода и азота. Но что происходит в голове, когда смотришь вверх? Просто слово «небо.»Это пример естественной абстракции, которая не требует особых усилий. В этом случае в мозгу возникает отвлечение от известных человеку, смотрящему в небо, но в данный момент ненужных деталей и подробностей. То есть искомый элемент определяется и выделяется путем обобщения.
Если при взгляде вверх в мыслях появляется слово “облака», то это уже более сложная абстракция. Она предполагает не только обобщение, но и выделение конкретного, важного элемента. Впрочем, это тоже естественно, не требуя особых усилий. Люди в повседневной жизни также довольно часто видят примеры абстракции сознательного. В любом разговоре, в котором рассказчик прибегает к абстрактным аналогиям, чтобы что-то объяснить, эта категория задействована. То есть, если человек приводит пример случая из жизни, объясняя им, что он хочет сказать, он прибегает к абстракции и делает это сознательно.
Чем является абстрагирование? Определение
Примеры абстракции демонстрируют наличие определенных приемов в общении и, конечно же, способ мышления. Совокупность этого в философии называется абстракцией. Это понятие имеет два основных значения, которые связаны по смыслу, накладываются друг на друга. Первый определяет это понятие как сам процесс отвлечения или как метод, а второй-как метод. То есть абстракция-это использование метода отвлечения в процессе познания или объяснения, рассуждения.
Отвлечение происходит от всего незначительного, несущественного в определенный период времени, от ненужного, что мешает правильно понять суть. Результатом этого процесса является формирование абстрактного понятия.
Абстрактное и конкретное
Примеры абстракции, как содержательной, так и естественной, демонстрируют достижение определенного результата. Именно его называют в философии абстрактным понятием. Это может быть практически все, что угодно, лишенное четких деталей, таких как цвет, свет, кривизна, уродство или красота. То есть если озвучить только результат абстракции, вне контекста, например, слово «небо», то у каждого человека будет свое понимание.
Другими словами, это понятие несет в себе смысл, имеет смысл, но не передает никаких точных характеризующих деталей, которые уточняют и сужают его. Именно наличием точных характеристик отличаются абстрактные и конкретные понятия. То есть если при получении информации ее можно воспринимать совершенно по-другому, то она абстрактна. Конкретная концепция не допускает различных интерпретаций, она предельно точна.
Виды абстракции
Как это ни парадоксально, эта категория имеет как четкую классификацию по назначению, так и весьма обширный и расплывчатый перечень условных типов. В соответствии с целью абстрагирования является:
- содержательной;
- формальной.
Содержательная форма подразумевает выделение частного через общее. То есть, вспоминая упомянутый выше пример, если при взгляде на небо в голову приходит слово «туча», то это содержательная абстракция.
Формальная же выделяет те элементы, которые сами по себе не существуют, например цвет. Формальная абстракция является основой в усвоении и передаче описаний внешних свойств, а также служит базой для теоретических размышлений.
К основным видам или же типам этой категории относятся:
- чувственная примитивная;
- обобщающая;
- идеализирующая;
- изолирующая;
- конструктивизирующая.
Отдельно ученые выделяют так называемую абстракцию действительной бесконечности. Она выделяется тем, что примеры абстрагирования основных типов можно встретить в повседневной жизни, но наблюдать этот вид невозможно. То есть эта философская категория является полностью теоретическим понятием. В чем его суть? Именно для того, чтобы мысленно отвлечься от аксиомы, что невозможно зафиксировать каждую из составляющих бесконечного множества. И тогда это множество станет конечным. Эта философская теория, хотя и напоминает утопию, очень серьезно рассматривается математиками. Не исключено, что в будущем он все же будет востребован на практике, например, в процессе освоения космоса.
Что понимается под абстрактным мышлением?
Часто слышишь, как говорят о ком-то, что он мыслит абстрактными категориями. Более того, понятно, что речь идет о человеке, который не отличается обыденностью и обыденностью, о том, кто склонен мыслить и рассуждать без всякой ясности и конкретности. Но что в этом смысле понимается под философией? Абстрактное мышление-это, проще говоря, не что иное, как форма познавательной деятельности. То есть это тип мозговой деятельности человека, для которого характерно формирование конкретных абстрактных понятий и их дальнейшее функционирование.
То есть для индивида с таким типом мышления характерна абстракция картины восприятия окружающего мира, какого-либо явления или понятия. В рассуждении и диалоге он отходит от привычной системы правил и аксиом. Это позволяет передавать или получать информацию, идеи или мысли без излишнего напряжения, использовать символы и образы. Однако, точность теряется, и, конечно, контекст или известный символ, необходимы для правильного понимания мысли.
В чем польза отвлеченных понятий и мышления?
Общее понятие абстракции, принятое в науке, вовсе не раскрывает практических преимуществ этого явления. Между тем, это необходимо для развития умственных способностей человека. Например, именно через абстракции и их сопоставление дети начинают познавать мир. Абстрактные понятия являются неотъемлемой частью психической деятельности человека. Они способствуют раскрытию связей и отношений между явлениями, объектами, элементами, понятиями. С помощью абстрактного мышления люди синтезируют существующие идеи и формируют новые типы взаимосвязей и отношений между рассматриваемыми объектами, тем самым развивая собственное сознание.
То есть с помощью отвлечения внимания происходит прогресс познавательной, умственной деятельности человека. Кроме того, абстракции неразрывно связаны с языковыми навыками. Изучение речи младенцев происходит с использованием этого типа мышления.
В искусстве
Не только философия, но и искусство характеризуется таким понятием, как “абстракция”. Картины многих известных художников написаны в этом жанре. Абстрактное искусство-это направление в искусстве, которое характеризует отказ от передачи чего-либо в виде реалистического отображения. В первую очередь это касается форм изображений в живописи и скульптуре. Однако любое произведение может быть абстрактным, например, рассказ, стихотворение, театральные декорации, костюмы и многое другое.
Основоположником этого жанра считается русский живописец Василий Кандинский, а первой абстрактной работой является его акварельная работа “Без названия”, написанная в 1910 году.
8) Абстракция данных — CoderLessons.com
Что такое абстракция в ООП?
Абстракция — это выбор данных из большего пула, чтобы показать пользователю только соответствующие детали объекта. Абстракция «показывает» только необходимые атрибуты и «скрывает» ненужную информацию. Это помогает уменьшить сложность программирования и усилия. Это одна из самых важных концепций ООП.
Нажмите здесь, если видео не доступно
Давайте изучим концепцию абстракции на примере
Предположим, вы хотите создать банковское приложение, и вас попросят собрать всю информацию о вашем клиенте. Есть вероятность, что вы получите следующую информацию о клиенте
Но не вся вышеуказанная информация требуется для создания банковского приложения.
Таким образом, вам нужно выбрать из этого пула только полезную информацию для вашего банковского приложения. Такие данные, как имя, адрес, налоговая информация и т. Д. Имеют смысл для банковского приложения
Поскольку мы извлекли / удалили / выбрали информацию о клиенте из большого пула, этот процесс называется абстракцией.
Однако одна и та же информация после извлечения может быть использована для широкого спектра применений. Например, вы можете использовать одни и те же данные для приложения больницы, приложения портала работы, правительственной базы данных и т. Д. Практически без изменений. Следовательно, он становится вашими основными данными. Это преимущество абстракции.
Что такое абстракция в Java?
Абстракция в JAVA «показывает» только необходимые атрибуты и «скрывает» ненужные детали объекта от пользователя. В Java абстракция выполняется с использованием абстрактных классов, абстрактных методов и интерфейсов. Абстракция помогает уменьшить сложность и трудоемкость программирования.
Абстрактный класс
Класс, который объявлен «абстрактным», называется абстрактным классом. Он может иметь как абстрактные методы, так и конкретные методы. Нормальный класс не может иметь абстрактных методов.
Абстрактный метод
Метод без тела известен как абстрактный метод. Он должен быть объявлен в абстрактном классе. Абстрактный метод никогда не будет окончательным, потому что абстрактный класс должен реализовывать все абстрактные методы.
Правила абстрактного метода
- Абстрактные методы не имеют реализации; имеет только сигнатуру метода
- Если класс использует абстрактный метод, он должен быть объявлен как абстрактный. Противоположность не может быть правдой. Это означает, что абстрактный класс не обязательно должен иметь абстрактный метод.
- Если обычный класс расширяет абстрактный класс, то этот класс должен реализовывать все абстрактные методы абстрактного родителя.
Разница между абстракцией и инкапсуляцией
абстракция | Инкапсуляция |
---|---|
Абстракция решает проблемы на уровне дизайна. | Инкапсуляция решает это уровень реализации. |
Абстракция — это сокрытие ненужных деталей и отображение самой важной информации. | Инкапсуляция означает связывание кода и данных в единый блок. |
Абстракция позволяет сосредоточиться на том, что должен содержать информационный объект | Инкапсуляция означает скрытие внутренних деталей или механизмов того, как объект что-то делает из соображений безопасности. |
Разница между абстрактным классом и интерфейсом
Абстрактный класс | Интерфейс |
---|---|
Абстрактный класс может иметь как абстрактные, так и неабстрактные методы. | Интерфейс может иметь только абстрактные методы. |
Он не поддерживает множественное наследование. | Он поддерживает множественное наследование. |
Это может обеспечить реализацию интерфейса. | Он не может обеспечить реализацию абстрактного класса. |
Абстрактный класс может иметь защищенные и абстрактные публичные методы. | Интерфейс может иметь только публичные абстрактные методы. |
Абстрактный класс может иметь конечную, статическую или статическую конечную переменную с любым спецификатором доступа. | Интерфейс может иметь только открытую статическую переменную final. |
Преимущества абстракции
- Основное преимущество использования абстрактного класса состоит в том, что он позволяет группировать несколько связанных классов как братьев и сестер.
- Абстракция помогает снизить сложность процесса проектирования и внедрения программного обеспечения.
Когда использовать абстрактные методы и абстрактный класс?
Абстрактные методы в основном объявляются, когда два или более подклассов также делают одно и то же по-разному через разные реализации. Он также расширяет тот же класс Abstract и предлагает различные реализации абстрактных методов.
Абстрактные классы помогают описать универсальные типы поведения и иерархию классов объектно-ориентированного программирования. Он также описывает подклассы, чтобы предложить детали реализации абстрактного класса.
Резюме:
- Абстракция — это процесс выбора важных наборов данных для Объекта в вашем программном обеспечении и исключения незначительных.
- После того как вы смоделировали свой объект с помощью Abstraction, один и тот же набор данных может использоваться в разных приложениях.
- Java, абстракция осуществляется с использованием абстрактных классов и интерфейсов. Мы будем подробно изучать абстрактные классы и интерфейсы в следующих уроках.
ФП на Python. Часть 3. Абстракция и композиция. Данные. [1]
В рамках данной статьи начнем работать над вопросом “что такое данные?”, разберемся с тем, как с помощью абстракции и композиции составлять из простых элементов сложные, и выделим роли, которые данные играют в разработке программного обеспечения.
Введение
Если в нашем распоряжении есть функции, которые являются объектами первого класса, то мы можем формировать уровни абстракции, позволяющие нам строить вычисления, обладающие все более общими свойствами. Этот подход можно перенести и на второй столп программирования – данные. Используя абстракцию и композицию можно строить составные данные, которые обеспечивают большую выразительность и универсальность решения, а также являются инструментом для управления сложностью в проекте.
На сегодняшний день, наиболее мощным инструментом для построения абстракций является ООП. Мы не будем затрагивать эту область. Вместо этого постараемся использовать минимальный набор инструментов.
Материал данной статьи во много опирается на SICP.
ДанныеЕсли попытаться максимально абстрактно посмотреть на процесс работы любой современной программы, то можно сказать, что единственное, что они все делают – это превращают один набор цифр в другой. Да и сами программы тоже являются наборами цифр, которые располагаются в определенном месте в памяти (
На самом деле все гораздо сложнее и интереснее, о представлении данных в зависимости от теоретической базы, которую мы используем, будет рассказано в следующей статье.
Для наших текущих задач, выбранного описания будет достаточно. Это идею можно представить в виде диаграммы:
Но с таким представлением данных сложно работать. Перешагнув через несколько уровней абстрагирования (набор байт в памяти -> именование ячейки или группы ячеек ->…) мы придем к определению из SICP: “данные – это то, что определяется некоторым набором селекторов и конструкторов, а также некоторыми условиями, которым эти процедуры должны удовлетворять, чтобы быть правильным представлением”. Существует еще более абстрактный подход к тому, как определять, что такое данные: метод абстрактных моделей (Хоар), алгебраическая спецификация (Зиллес, Гоген и др.)), но мы остановимся на приведенном определении.
Из этой формулировки могут быть непонятны слова: селектор и конструктор. Конструктор – это функция для создания экземпляра данных. Селекторы – функции для извлечения составляющих элементов из экземпляра.
Для примера возьмем список из языка Python: в нем конструктор – это функция list(), можно, конечно, объявить набор данных, перечислив элементы в квадратных скобках, но хочется более формально проиллюстрировать принцип. Селектором будет метод __get_item__().
>>> a = list([1, 2, 3]) >>> a [1, 2, 3] >>> a.__getitem__(0) 1 >>> a.__getitem__(2) 3
Если говорить в терминологии ООП, то конструктор – это конструктор класса, а селекторы – это методы.
Теперь поговорим более подробно про абстракции данных, которые полезны при разработке программного обеспечения. В зависимости от решаемой задачи абстракция может выполнять ту или иную роль.
Роль первая: БарьерыАбстракция позволяет нам не думать о внутренней реализации, когда мы работаем с элементам, предоставляемыми ею. То есть мы отделяем место, где данные используются, от места, где они создаются.
В качестве примера рассмотрим работу с комплексными числами. Создадим свою реализацию библиотеки для работы с такого типа числами.
Во-первых, нам нужен конструктор, построим его:
def make_complex(a, b): return (a, b)
В него мы передаем действительную и мнимую части.
Теперь реализуем селекторы, которые извлекают действительную и мнимую части из комплексного числа.
def real(c): return c[0] def img(c): return c[1]
В данном случае мы намеренно опускаем проверки, сейчас нам интересен сам принцип.
Построим операции сложения, вычитания, умножения и деления.
def add_complex(c1, c2): return (real(c1) + real(c2), img(c1) + img(c2)) def sub_complex(c1, c2): return (real(c1) - real(c2), img(c1) - img(c2)) def mul_complex(c1, c2): rl = real(c1) * real(c2) - img(c1) * img(c2) im = real(c1) * img(c2) + img(c1) * real(c2) return (rl, im) def div_complex(c1, c2): if real(c2) == 0 and img(c2) == 0: return None else: den = real(c2) * real(c2) + img(c2) * img(c2) rl_num = real(c1) * real(c2) + img(c1) * img(c2) im_num = img(c1) * real(c2) - real(c1) * img(c2) return (rl_num / den, im_num / den)
Этого набора функций достаточно для того, чтобы строить комплексные числа и выполнять с ними различные арифметические действия:
>>> c1 = make_complex(3, 7) >>> c2 = make_complex(11, 5) >>> real(c1) 3 >>> img(c1) 7 >>> add_complex(c1, c2) (14, 12) >>> sub_complex(c1, c2) (-8, 2) >>> mul_complex(c1, c2) (-2, 92) >>> div_complex(c1, c2) (0. 4657534246575342, 0.4246575342465753)
В качестве базовых элементов мы использовали двухэлементные кортежи, которые предоставляет Python.
Может возникнуть необходимость использовать более высокоуровневую абстракцию. Например, в случае, если мы будем строить систему, которая должна уметь выполнять арифметические операции над любыми видами чисел, тогда функции верхнего уровня могут носить имена add, sum, и т.д., а внутри себя распознавать, что за тип числа был им передан (целое число, число с плавающей точкой, комплексное, рациональное и т.п.) и вызывать соответствующую функцию, относящуюся к заданному типу.
Таким образом, мы на каждом следующем уровне возводим барьер, скрывающий реализацию и предоставляющий все более общий интерфейс для работы с данными.
Роль вторая: ИнтерфейсДанные могут выступать в роли интерфейса. Как правило, это используется в системах с потоковой обработкой, где имеется большое количество функций для преобразования данных, но при этом тип данных не меняется. Такой подход получил широкое распространение в области машинного обучения и анализа данных. Строить конвейеры вычислений в этой области – это обычная практика.
Приведем пример. Допустим у нас есть какой источник данных: файл на диске или интернет ресурс, наша задача извлечь данные, провести над ними ряд преобразований и отправить в алгоритм обучения модели, в этом случае поток обработки может выглядеть следующим образом:
- извлечение данных
- выделение признаков
- очистка данных
- разделение данных на обучающую и тестовую выборки
- масштабирование данных
- обучение модели
Если мы берем экосистему Python, то скорее всего тип данных будет либо DataFrame из библиотеки Pandas, либо ndarray из Numpy.
Структуры данныхПод структурой данных будем понимать составные данные, полученные из однотипных (атомарных) элементов. В качестве такого элемента возьмем пару.
ПараПара является идеальным строительным блоком для представления списковых и иерархических структур данных для демонстрации идей использования абстракции и композиции.
Для наших экспериментов построим конструктор, который создает кортеж из двух элементов:
def pair(x, y): return (x, y)
Теперь нам нужны селекторы – функции, которые будут извлекать первый и второй элементы. По аналогии с языком Haskell назовем их fst и snd:
def fst(p): return p[0] def snd(p): return p[1]
Для того, чтобы не усложнять реализацию мы не будем приводить код проверки того, что преданное значение является парой и т.п.
>>> p = pair(3, 7) >>> fst(p) 3 >>> snd(p) 7Свойство замыкания
Для начала разберемся со свойством замыкания, которое нам пригодится для построения списковых и иерархических структур данных. Замыкание, в рамках данной статьи, мы будем понимать в математическом смысле. Приведем пример на натуральных числах. Множество натуральных чисел замкнуто относительно операций сложения и умножения. То есть, если мы сложим (или умножим) два натуральных числа, то результат будет натуральное число. Сколько бы раз не повторялась эта процедура, мы не сможет выйти за рамки множества натуральных чисел. В этом случае, говорят, что множество натуральных чисел замкнуто относительно операции сложения (умножения):
1+2 = 3 3+(1+2) = 6
Функциональный вариант:
> add(1, 2) > 3 > add(3, add(1, 2)) > 6
Заметим, что множество натуральных чисел не замкнуто относительно операции вычитания, так, например 5-8=-3, уже не является натуральным числом.
Пары, которые мы определили выше, замкнуты относительно операции конструирования пары, то есть результат примирения конструктора пары к другим конструкторам является парой:
>>> p1 = pair(1,2) >>> p1 (1, 2) >>> p2 = pair(3, p1) >>> p2 (3, (1, 2))Списковые структуры
Структуру, которую мы сейчас построим, называют связный список. Для наглядности, в качестве элементов пар, будем использовать числа типа int.
На рисунке ниже представлена диаграмма, иллюстрирующая организацию списка, который мы будем собирать из пар.
Построим список, состоящий из чисел [1, 2, 3, 4, 5]:
pair(1, pair(2, pair(3, pair(4, pair(5, None))))
Несмотря на то, что выглядит эта запись довольно громоздко, свою задачу она выполняет. Вопрос производительности не будем рассматривать.
Можно предложить следующий конструктор списка:
def lst(*x): if len(x) == 1: return (x[0], None) else: return pair(x[0], lst(*x[1:]))
Пример использования:
>>> pl = lst(1, 2, 3, 4, 5) >>> pl (1, (2, (3, (4, (5, None)))))
Теперь построим селектор для доступа к произвольному элементу списка.
def lst_sel(ps, n): if isinstance(p, tuple): if n == 0: return fst(ps) else: return lst_sel(snd(ps), n-1) else: raise Exception("Selector error")
Получим данные из созданного ранее списка:
>>> lst_sel(pl, 0) 1 >>> lst_sel(pl, 3) 4 >>> lst_sel(pl, 10) . .. Exception: Selector error
Можно написать довольно много различных полезных утилит для работы с этой структурой данных. Например, функция, которая определяет количество элементов в списке:
def lst_lenght(ps): if snd(ps) is None: return 1 else: return 1 + lst_lenght(snd(ps))
Применим ее к нашему списку:
>>> lst_lenght(pl) 5
Для пользователя, работающего со структурами pair или lst, не важно как они устроены “под капотом” (если не брать в расчет производительность и безопасность), важен только интерфейс (конструкторы и селекторы): pair, fst, snd для пары и lst, lst_sel для списка.
Иерархические структурыКлассическим примером иерархической структуры являются деревья. Воспользуемся парой для построения дерева следующего вида:
>>> t1 = pair((pair(1, 2), 3), pair(4, 5)) >>> t1 (((1, 2), 3), (4, 5))
По аналогии со списком можно построить ряд инструментов для работы с деревьями. Для примера реализуем функцию, определяющую количество листьев в дереве:
def leavs(p): if p is None: return 0 if not is_pair(p): return 1 else: return leavs(fst(p)) + leavs(snd(p))
>>> t1 (((1, 2), 3), (4, 5)) >>> leavs(t1) 5Заключение
В рамках данной статьи мы постарались проиллюстрировать подход использования абстракции и композиции для построения составных данных и сделали акцент на той роли, которую может играть абстракция в разработке ПО. Изложенные идеи носят скорее иллюстративный характер. Несомненно, уровень абстракций в крупных проектах, достигаемый за счет мощи ООП или ФП подходов, будет гораздо более масштабным.
P.S.Вводные уроки по “Линейной алгебре на Python” вы можете найти соответствующей странице нашего сайта. Все уроки по этой теме собраны в книге “Линейная алгебра на Python”.
Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. Для начала вы можете познакомиться с вводными уроками. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
Абстрагирование | | Наша Психология
Абстрагирование – это мыслительный прием, когда мы отбрасываем несущественные свойства, характеристики объекта и рассматриваем лишь те его качества, особенности, которые считаем наиболее значимыми для решаемой задачи.
Мы используем абстрактные понятия постоянно. Цвет, угол, стул, четыре, друг – все это примеры абстрактных понятий. Не «четыре яблока», а просто «четыре». Не «друг мой Колька», а просто «друг». Спрашивается: откуда берется это множество понятий?
Процесс абстрагирования
Абстрактные понятия появляются, когда мы мысленно выделяем одни характеристики объекта (более существенные) и отвлекаемся от других его характеристик (менее существенных). Этот процесс называется абстрагированием.
Способность к абстрагированию отличает человека от животных, наши питомцы на это не способны.
Есть известный анекдот о том, как физик рассчитал формулу сферического коня в вакууме. Это пример идеализации – одного из типов абстрагирования, когда мысленно отбрасываются несущественные свойства и особенности объекта.
Только если в анекдоте оно высмеивается как практически бесполезная идея, то на самом деле без абстрагирования обойтись совершенно невозможно.
Как абстрактное превращается в конкретное
Без абстрагирования сложно представить научное познание, методы и расчеты. Даже на элементарном уровне – в арифметике мы складываем не две груши и еще три груши, а просто два плюс три (в реальном мире никакого «три» не существует). Дальше уровень абстракции растет (математика – вообще самая абстрактная наука): возведение в степень, интеграл, производная и даже квадратный корень из минус единицы! Также абстрактные понятия лежат в основе геометрии: точка, прямая, плоскость – в реальной жизни их не существует.
Другая сфера познания, где процветает абстрагирование, это философия.
Правила логики позволяют совершать умозаключения, оперируя абстрактными понятиями, идеями, и создавать из них теории.
Теоретическая физика – еще одно «царство абстракций». Кроме уже упомянутого «сферического коня в вакууме», есть совершенно серьезные абстрактные понятия, например «абсолютно черное тело», «идеальный газ». Самое главное, что, оперируя абстрактными категориями, физики делают расчеты совершенно реальных процессов. Трудно привести более убедительный пример этого, чем историю о том, как абстрактное E=mc2 превратилось в атомную бомбу.
Где скрываются опасные ловушки?
В нашей обычной жизни мы постоянно мысленно движемся между абстрактным и конкретным. Абстрагирование и конкретизация – противонаправленные процессы, и они оба нам нужны.
«Женщины после тридцати», «старый холостяк», «настоящий мужчина», «роковая женщина» – все это абстрактные понятия, которыми мы пользуемся.
Здесь есть ловушка. «Все мужчины смотрят налево», «все женщины – стервы» – такие абстрактные суждения мешают увидеть особенности конкретного человека и разобраться в конкретной ситуации.
Нескоординированность абстрактного и конкретного ведет к неудаче. Когда мы ставим перед собой слишком абстрактные цели, то часто их не достигаем.
Перечислим самые распространенные ловушки:
- – «Начинаю вести здоровый образ жизни»;
- – «Буду худеть»;
- – «Я решила правильно питаться»;
- – «Стану заниматься спортом».
Внимание! Если эти цели не конкретизировать, то неудача гарантирована.
Еще один пример из жизни: «Как вы терпите ворчание мужа?» – «А я абстрагируюсь!» Согласно определению, абстрагироваться – значит не учитывать несущественные свойства. Хотя в приведенном диалоге было бы точнее сказать «не обращаю внимания», «не придаю значения», однако по сути все правильно.
ПохожееКонечно, то, что любимый человек иногда ворчит, – это далеко не самое важное в близких отношениях, можно и абстрагироваться.
Абстракция данных: определение и пример — видео и расшифровка урока
Смартфон Пример
Примером из реального мира является мобильный телефон или смартфон. Типичный пользователь смартфона не знает, как совершаются звонки, как телефон выходит в Интернет и даже как в телефоне хранятся данные. Вместо этого пользователю мобильного телефона или смартфона предоставляется интерфейс, который скрывает от него эти детали. Выполнение вызова просто включает в себя выбор номера телефона контакта. Для доступа к Интернету необходимо выбрать значок на экране.
Пользователю не нужно разбираться в деталях того, как осуществляется телефонный звонок или как работает Интернет. Эти детали абстрагированы от интерфейса телефона, чтобы сделать телефон более простым и эффективным в использовании. Дизайн мобильного телефона или смартфона четко отделяет интерфейс от реализации. Пользователь может изучить функции телефона, даже не зная, как телефон работает внутри.
Пример автомобиля
Еще один реальный пример — автомобиль.Большинство людей сегодня знают, как управлять автомобилем, ничего не зная о том, как работает двигатель внутреннего сгорания или как работает трансмиссия. Было время, когда большинство пользователей автомобилей действительно должны были знать что-то об этих деталях, но по мере совершенствования автомобильных технологий детали двигателя и других рабочих частей были абстрагированы, так что водителю в первую очередь нужно было только знать, как завести машину. как заставить машину ехать и останавливаться, как управлять машиной и как доливать бензин, когда бензобак пуст.
Автоматическая коробка передач — еще один пример абстракции. Когда автомобили были впервые выпущены, у них была только механическая коробка передач, и все водители автомобилей должны были научиться переключать передачи трансмиссии, чтобы автомобиль двигался вперед или назад. Со временем внедрение автоматической коробки передач абстрагировало этот слой знаний о реализации автомобиля, облегчив пользователю вождение автомобиля.
Пример компьютерного программирования
В компьютерном программировании примитивные типы данных языков программирования сами по себе являются абстракциями.Например, строковый тип данных скрывает от программиста многие детали. Во-первых, программисту не нужно знать, как отдельные символы хранятся в компьютере или даже как комбинации символов объединяются в строку. То же самое относится и к числовым типам данных. Программисту не нужно знать, как числа хранятся внутри ЦП или как работают арифметические операторы для выполнения арифметических операций над числами. Эти детали скрыты от программиста с помощью абстракции, чтобы сделать программирование проще и эффективнее.
Развитие самих языков программирования можно рассматривать как процесс абстракции. Первыми инструментами для программирования были патч-панели, где программист буквально менял схему компьютера, чтобы написать программу. Следующим шагом стал машинный язык, где программисты писали инструкции в терминах двоичных кодов.
Оттуда программирование перешло на язык ассемблера, где детали машинного языка были абстрагированы в более похожие на английский язык команды, что значительно упростило программирование.Следующим уровнем абстракции были такие языки, как Fortran, в котором удалось абстрагироваться от некоторых деталей языка ассемблера, чтобы сделать программирование еще проще.
Теперь у нас есть объектно-ориентированные языки, которые полностью полагаются на абстракцию, чтобы скрыть детали объектов, которые использует программист, и у нас есть декларативные языки, такие как SQL, где уровень инструкций абстрагирован, так что программист SQL сообщает компьютеру что делать, и SQL выясняет, как это сделать.
Резюме урока
Очевидно, что абстракция и абстракция данных играют большую роль в компьютерном программировании, и для начинающего программиста очень важно понимать, что такое абстракция данных и какую роль она играет в написании эффективных и полезных компьютерных программ. Абстракция данных скрывает детали реализации объекта, поэтому пользователю нужно только знать, как работать с объектом.
При правильном использовании абстракции данных пользователь может работать с объектом без необходимости разбираться в деталях реализации объекта, если только пользователь не решит изучить эти детали реализации. Правильное использование абстракции данных позволяет программисту самому решать, какой объем знаний об объекте он хочет иметь.При правильном использовании абстракции данных программист предоставляет пользователю объекта максимальную гибкость в работе с этим объектом.
Эпизод об абстракции в вычислительном мышлении
Абстракция в вычислительном мышлении позволяет нам ориентироваться в сложности и находить актуальность и ясность в масштабе. Декомпозиция и распознавание образов разрушают комплекс, а абстракция определяет, как эффективно и точно работать с различными частями. Этот процесс происходит путем отсеивания лишнего и неактуального, чтобы выявить самое важное и связывающее каждую разложенную проблему.
«Но это же трубка». «Нет, это не так, — сказал я. Это рисунок трубки. Понял? Все изображения вещей по своей сути абстрактны. Это очень умно».
Абстракция на самом деле похожа на функцию избирательной фильтрации в нашем мозгу, которая блокирует нейронные сигналы, которыми мы постоянно бомбардируемся, чтобы мы могли осмыслить наш мир и сосредоточиться на том, что для нас важно.
Примеры абстракции в повседневной жизни
Еще один способ думать об абстракции — в контексте тех больших понятий, которые формируют наше представление о мире, таких как законы движения Ньютона, закон спроса и предложения или теорема Пифагора.
Все это требовало, чтобы люди, стоящие за ними, думали о больших, широких и сложных концепциях; разбить проблему и поэкспериментировать; и найти закономерности среди экспериментов; и, в конце концов, абстрагировать это конкретное знание, чтобы упаковать его в эти бесплодные утверждения, которые укрывают нас от сложности и трудностей, через которые пришлось пройти, чтобы прийти к этому закону.
Преподаватели используют абстракцию при просмотре обширных наборов данных об учащихся, чтобы сосредоточиться на наиболее важных цифрах и тенденциях.И преподаватели также используют его, помогая ученику выполнить задание. Дети могут бегать по классу или издавать громкие звуки, но они могут настроиться на то, чтобы сосредоточиться на том, о чем спрашивает нуждающийся ребенок, — пока, конечно, это не достигнет пикового уровня буйства и не потребуется вмешательство.
Примеры абстракции в учебной программе
Как и другие элементы вычислительного мышления, абстракция является неотъемлемой частью и может рассматриваться учащимися на протяжении всей учебной программы.Вот несколько идей.
Искусство английского языка Учащиеся резюмируют роман в рецензии на книгу.
Математика: Учащиеся проводят опрос сверстников и анализируют данные, чтобы отметить основные результаты, создать визуализацию и представить результаты.
Наука: Учащиеся разрабатывают законы и теоремы, рассматривая аналогичные формулы и уравнения.
Социальные науки: Учащиеся объединяют наиболее важные детали, изложенные в статьях о конкретном текущем событии, и составляют краткую информацию об этом событии.
Языки: Учащиеся создают личное руководство, которое указывает, когда использовать формальное и неформальное «вы» на уроках испанского языка или два глагола «знать» во французском языке, которые, заметьте, всегда приводили меня в замешательство.
Искусство: Учащиеся обобщают последовательности аккордов для распространенных музыкальных жанров в набор общих принципов, которые они могут передать.
Полное руководство по вычислительному мышлению для преподавателей
Это руководство, наполненное примерами подключенных и отключенных устройств, даст вам базовое понимание вычислительного мышления и уверенность при обсуждении этой темы со студентами.
Примеры абстракций в информатике
Абстракция в кодировании и информатике используется для упрощения строк кода до различных функций. Он скрывает основную сложность языка программирования, что упрощает реализацию алгоритмов и взаимодействие с цифровыми инструментами.
Абстракция помогает учащимся вернуться к более крупной проблеме, которая вызвала все это приключение вычислительного мышления, и определить наиболее важные детали из более ранних этапов.Понимание абстракции позволяет учащимся разобраться в проблемах, с которыми они сталкиваются, помогая им не перегружаться чем-то сложным и упорствовать, вычислять, повторять и генерировать идеи.
Что дальше? Ознакомьтесь с нашими статьями о декомпозиции, распознавании образов и алгоритмическом мышлении.
Абстракция в Python с примерами
В этом посте мы увидим использование концепции OOPS Абстракция в Python.
Что такое абстракция
Абстракция означает сокрытие сложности реализации и предоставление пользователю только основных функций. В качестве примера вы можете взять любой элемент электроники, где вы взаимодействуете с продуктом с помощью кнопок и переключателей, чтобы включать и выключать его, увеличивать и уменьшать громкость или скорость. Настоящая сложность реализации этой функциональности скрыта от нас.
В контексте объектно-ориентированного программирования абстракция означает раскрытие только конечных точек (методов) и сокрытие реальной реализации от конечного пользователя.
Абстракция в Python
Абстракция в Python достигается за счет использования абстрактных классов и интерфейсов.
Абстрактный класс — это класс, содержащий один или несколько абстрактных методов. Абстрактные методы — это методы, которые не содержат какой-либо реализации, подклассы, которые наследуются от абстрактного класса, должны обеспечивать реализацию абстрактных методов. Абстрактный класс также может иметь обычные методы (методы с телом метода), поэтому вы можете сказать, что абстрактный класс обычно предоставляет неполную функциональность, обеспечивающую реализацию общих методов, оставляя конкретную реализацию подклассам.
Интерфейс предоставляет только сигнатуры методов без тел методов. Подклассы должны обеспечивать реализацию всех методов, определенных в интерфейсе. Python не поддерживает создание интерфейса с помощью отдельного ключевого слова, вам придется определять интерфейс с помощью самого абстрактного класса. Если вы создаете абстрактный класс, содержащий только абстрактные методы, которые действуют как интерфейс в Python.
Абстракция в Python с использованием абстрактного класса
Давайте рассмотрим пример абстракции в Python с использованием абстрактного класса.Для объявления класса Abstract вам необходимо импортировать модуль abc.
В этом примере у нас есть абстрактный класс User, который имеет один конкретный метод display_user() и один абстрактный метод process_fee().
из abc import ABC, abstractmethod Пользователь класса (ABC): def __init__(я, имя, количество_месяцев): self.name = имя self.num_of_months = количество_месяцев # конкретный метод деф display_user (я): print('Пользователь %s подписался на %d месяцев' % (self. name, self.количество_месяцев)) # абстрактный метод @абстрактный метод деф процесс_плата (сам): проходят
Есть два подкласса, наследуемые от User и реализующие абстрактный метод process_fee().
класс PlatinumUser(Пользователь): ПЛАТИНОВЫЙ_ПАКЕТ = 2200 деф процесс_плата (сам): вернуть self.num_of_months * PlatinumUser.PLATINUM_PACKAGE класс GoldUser (пользователь): Gold_PACKAGE = 1500 деф процесс_плата (сам): вернуть self.num_of_months * GoldUser.Gold_PACKAGE
Как пользователь, мы просто знаем, что мы должны вызвать метод process_fee(), мы абстрагируемся от фактической реализации метода, который отличается для разных дочерних классов пользователя.
obj = PlatinumUser('Майк Даллас', 8) obj.display_user() плата = obj.process_fee() print('Плата', плата) obj = GoldUser('Голди Хоун', 6) obj.display_user() плата = obj.process_fee() print('Плата', плата) obj = PlatinumUser('Ашиш Мишра', 10) obj.display_user() плата = obj. process_fee() print('Плата', плата)
Вывод
Пользователь Майк Даллас подписался на 8 месяцев Стоимость 17600р. Пользователь Goldie Hawn подписался на 6 месяцев Стоимость 9000р. Пользователь Ashish Mishra подписался на 10 месяцев Стоимость 22000
Похожие сообщения
Это все по теме Абстракция в Python с примерами .Если чего-то не хватает или у вас есть чем поделиться по теме, пишите в комментариях.
Вам также может понравиться
Поделиться этой публикацией:
Абстракция
АбстракцияДалее: Точка зрения Up: Некоторые фундаментальные доктрины Предыдущий: Некоторые фундаментальные доктрины
Процесс установления декомпозиции проблемы на более простые и понятные примитивы является основой науки и разработки программного обеспечения.Этот процесс имеет много основных методов абстракции.
Абстракция — это модель. Процесс преобразования одной абстракции в более подробную абстракцию называется уточнением. Новую абстракцию можно назвать усовершенствованием исходной. Абстракции и их уточнения обычно не сосуществуют в одном описании системы. Точно что имеется в виду под более подробной абстракцией, точно не определено. Должна быть поддержка взаимозаменяемости понятий от одной абстракции к другой.Композиция возникает, когда две абстракции используются для определения другой более высокой абстракции. Декомпозиция происходит, когда абстракция разбивается на более мелкие абстракции.
Управление информацией является одной из целей абстракции. Сложные функции одной абстракции упрощаются в другую абстракцию. Хорошие абстракции могут быть очень полезными в то время как плохие абстракции могут быть очень вредными. А хорошая абстракция приводит к многократно используемым компонентам.
Сокрытие информации различается между общедоступным и частным Информация.Только основная информация обнародуется, а внутренние детали остаются конфиденциальными. Это упрощает взаимодействие и локализует детали и их операции в четко определенных единицах.
Абстракция в традиционных системах естественным образом формирует слои, представляющие разные уровни сложности. Каждый слой описывает решение. Затем эти слои накладываются друг на друга. Таким образом, абстракции высокого уровня материализуются абстракциями более низкого уровня, пока не может иметь место простая реализация.
Как Хор [#!Хор:1994!#] сказал,
См. рисунок C.4 на стр. .
Абстракция может быть выполнена на функциях, данных и процессах. В функциональной абстракции детали алгоритмов выполнения функции не видны потребителю функции. Потребителю функции нужно только знать правильное соглашение о вызовах и быть уверенным в точности функциональных результатов.
При абстракции данных детали контейнера данных и элементы данных могут быть невидимы для потребителя данных. Контейнер данных может представлять собой стек, очередь, список, дерево, график или многие другие подобные контейнеры данных. Потребитель контейнера данных заботится только о правильном поведении контейнера данных и не так много внутренних деталей. Кроме того, точные сведения об элементах данных в контейнере данных могут быть не видны потребителю элемента данных.Зашифрованный сертификат является окончательным примером абстрактного элемента данных. Сертификат содержит данные, зашифрованные ключом, неизвестным потребителю. Потребитель может использовать этот сертификат для предоставления возможностей, но не может просматривать или изменять содержимое сертификата.
Традиционно абстракция данных и функциональная абстракция объединяются в концепцию абстрактных типов данных (ADT). Сочетание АТД с наследованием дает сущность объектно-ориентированной парадигмы.
В абстракции процесса детали потоков выполнения не видны потребителю процесса. Примером абстракции процесса является планировщик параллелизма в системе баз данных. Система базы данных может обрабатывать множество одновременных запросов. Эти запросы выполняются в определенном порядке, некоторые параллельно, а некоторые последовательно, так что результирующую базу данных нельзя отличить от базы данных, в которой все запросы выполняются последовательно. Потребителя запроса, представляющего один поток выполнения, интересует только достоверность запроса, а не процесс, используемый планировщиком базы данных для выполнения запроса.
Далее: Точка зрения Up: Некоторые фундаментальные доктрины Предыдущий: Некоторые фундаментальные доктрины Рональд Лерой Бербак
14.12.98
Абстракция и инкапсуляция
Абстракция данных
Абстракция данных — чрезвычайно распространенный термин, когда говорят о методологиях программирования. Но что это на самом деле означает?
По сути, абстракция — это конструкция, отделяющая реализацию какой-то вещи от вариантов ее использования. Он «инкапсулирует» некоторую обобщенную реализацию в согласованный интерфейс. Помните первый урок по C++ — абстракции данных? Переменные являются примером абстракции. Они абстрагируют процесс чтения и записи значений простым интерфейсом присваивания и арифметики.
В практическом программировании абстракция данных предполагает отделение интерфейса (или API) некоторой системы от ее реализации. В C++ это обычно реализуется с помощью классов и связанных с ними шаблонов доступа.Например, можно создать абстракцию «список», где интерфейс включает методы для хранения и извлечения упорядоченных значений. Базовая реализация не должна быть известна, чтобы иметь возможность использовать этот «список».
Однако это ни в коем случае не единственный тип абстракции данных. Функции, структуры данных, объекты, API, языки — все это абстракции. Их объединяет то, что они предоставляют удобный интерфейс для более «абстрактного» (или общего) уровня, будь то более конкретный код, низкоуровневые аппаратные операции или даже другой язык.
Но чем полезна абстракция данных? Самым большим преимуществом является то, что это позволяет «более крупной» программе использовать абстракцию последовательно и без изменений, даже если реализация под абстракцией резко изменится. Если базовая структура «списка» была изменена с массива на связанный список, код, использующий интерфейс «список», обновлять не нужно.
Сокрытие данных
Абстракция тесно связана с концепцией сокрытия данных.Сокрытие данных — это просто процесс фактического сокрытия реализации абстракции таким образом, чтобы пользовательский код не мог ее коснуться. Хотя вопрос о том, следует ли всегда поддерживать сокрытие данных, является спорным, он обеспечивает полезный уровень безопасности, поскольку гарантирует, что абстрагированная реализация работает в своей собственной сфере, не беспокоясь о том, что другой код проникнет внутрь и изменит ситуацию.
В C++ это обычно относится к использованию закрытых и защищенных членов, а также интерфейсов. Мы уже рассматривали модификаторы доступа к классам, поэтому сейчас не будем их повторять. Однако что такое интерфейс? Некоторые языки, такие как Java, позволяют вам определять классы «интерфейса», которые полностью определяют интерфейс. Это также известно как «контракт на реализацию». Если класс хочет реализовать интерфейс, он наследует требуемый интерфейс и может последовательно использоваться спецификацией интерфейса. В C++ интерфейсы могут быть определены путем создания базового класса только с чисто виртуальными методами.Однако использование полиморфизма всегда приводит к снижению производительности, поэтому на практике интерфейсы C++ используются редко. Вместо этого «скрытые» элементы данных просто помечаются как «частные» или «защищенные».
API
API или интерфейс прикладного программирования — это термин для одного из этих интерфейсов к абстракции. API могут быть большими, маленькими или где-то посередине. До сих пор я говорил об относительно небольших API, например, об одном классе. Однако API для более крупных абстракций — скажем, графической библиотеки — могут охватывать множество различных функций, классов, интерфейсов, перечислений и даже языков.
API, как правило, делятся на две основные категории дизайна: минимальный и расширенный. Минимальные API-интерфейсы включают только ту функциональность, которая необходима для использования в более крупном проекте. Минимальные API имеют тенденцию развиваться, когда кто-то создает абстракцию внутри проекта. Примером этого может быть структура данных для конкретного использования.
Рекомендуемые API, с другой стороны, стремятся предоставить функциональность, подходящую для всех мыслимых вариантов использования в своей области, даже если это означает, что большая часть из них никогда не будет использоваться в конкретном проекте.Этот тип дизайна полезен при создании API для использования во многих проектах или для распространения среди многих людей. Если большие API-интерфейсы достаточно велики, они, как правило, вводят свой собственный стиль использования, синтаксис и мышление — язык, специфичный для предметной области. Рекомендуемые API включают такие библиотеки, как SDL, OpenGL, DirectX, Boost и многие другие.
Модульность и соединение
Другой целью абстракции данных является модульность. Как вы могли догадаться, модульность — это мера того, насколько легко модуль может быть переназначен, заменен, перемещен или иным образом изменен.Идеальная ситуация модульности позволяет вам вытащить любой компонент программы и использовать его в другом месте, а также легко добавить другую реализацию этого компонента обратно в вашу основную программу.
Это тесно связано со связью, мерой того, насколько компонент зависит от других. Если какая-то абстракция зависит от нескольких других компонентов программы для функционирования, она рассматривается как сильно связанная. Связывание уменьшает модульность: оно явно усложняет получение и отделение модулей от целого.Однако всегда требуется определенная степень связи — компоненты программы должны каким-то образом работать вместе. Ограничение связанности помогает уменьшить общую сложность программы и значительно упрощает изменение отдельных частей. В C++ это чаще всего достигается за счет ограничения систем или классов одной конкретной областью задач и уменьшения объема, который они должны взаимодействовать с другими системами. Затем отдельные модули могут быть организованы модулем «контроллер».
Понимание абстракции в Python — AskPython
Введение
Сегодня в этом руководстве мы собираемся обсудить концепцию абстракции в Python для подхода объектно-ориентированного программирования.
Если вы новичок в ООП , мы настоятельно рекомендуем ознакомиться с нашей статьей «Объектно-ориентированное программирование в Python».
По сути, Абстракция фокусируется на сокрытии внутренних реализаций процесса или метода от пользователя. Таким образом, пользователь знает, что он делает, но не знает, как выполняется работа.
Давайте углубимся в тему, чтобы понять ее важность в реальной жизни и программировании.
Что такое абстракция в Python?
В объектно-ориентированном программировании наследование, полиморфизм и инкапсуляция идут рука об руку. Но Абстракция также является важным элементом ООП.
Например, , люди не думают об автомобиле как о наборе тысяч отдельных частей. Вместо этого они видят в нем четко определенный объект со своим уникальным поведением. Эта абстракция позволяет людям использовать автомобиль для вождения, не зная сложности частей, из которых состоит автомобиль. Они могут игнорировать детали работы двигателя, трансмиссии и тормозной системы. Вместо этого они могут свободно использовать объект в целом.
Эффективным способом управления абстракцией является использование иерархической классификации. Это позволяет нам наслаивать семантику сложных систем, разбивая их на более управляемые части. Снаружи автомобиль представляет собой единый объект. Оказавшись внутри, вы видите, что автомобиль состоит из нескольких подсистем: рулевого управления, тормозов, аудиосистемы, ремней безопасности и т. д. В свою очередь, каждая из этих подсистем состоит из более мелких узлов.
Дело в том, что мы управляем сложностью автомобиля (или любой другой сложной системы) посредством использования иерархических абстракций.
Это также может быть применено к компьютерным программам, использующим концепции ООП . В этом суть объектно-ориентированного программирования.
Абстрактные классы и методы в Python
Чтобы объявить абстрактный класс , нам сначала нужно импортировать модуль abc
. Давайте посмотрим на пример.
из abc импорта ABC класс abs_class (ABC): #абстрактные методы
Здесь abs_class
— это абстрактный класс, внутри которого могут быть определены абстрактные методы или любые другие методы.
В качестве свойства абстрактные классы могут иметь любое количество абстрактных методов, сосуществующих с любым количеством других методов. Например, мы можем видеть ниже.
из abc import ABC, abstractmethod класс abs_class (ABC): #нормальный метод Метод защиты (сам): #определение метода @абстрактный метод Def Abs_method(я): #Abs_method определение
Здесь method()
— обычный метод, тогда как Abs_method()
— абстрактный метод, реализующий @abstractmethod
из модуля abc .
Пример абстракции Python
Теперь, когда мы знаем об абстрактных классах и методах, давайте рассмотрим пример, объясняющий Абстракцию в Python .
из abc import ABC, abstractmethod класс Absclass(ABC): деф печать (я, х): print("Передано значение: ", x) @абстрактный метод задача определения (я): print("Мы внутри задачи Absclass") класс test_class (абскласс): задача определения (я): print("Мы внутри задачи test_class") класс пример_класса (абскласс): задача определения (я): print("Мы внутри задачи example_class") # объект test_class создан test_obj = test_class() test_obj.задача() test_obj.print (100) # объект класса example_class создан пример_объект = пример_класс() example_obj.task() example_obj.print(200) print("test_obj является экземпляром Absclass?", isinstance(test_obj, Absclass)) print("example_obj является экземпляром Absclass?", isinstance(example_obj, Absclass))
Вывод:
Пример абстракции PythonЗдесь
Absclass
— это абстрактный класс, который наследуется от класса ABC из модуля abc. Он содержит абстрактный метод task()
и метод print()
, которые видны пользователю.Два других класса, унаследованных от этого абстрактного класса, — test_class
и example_class
. У обоих есть собственный метод task()
(расширение абстрактного метода).
После того, как пользователь создаст объекты из обоих классов test_class и example_class и вызовет метод task()
для обоих из них, скрытые определения для методов task()
внутри обоих классов вступают в игру. Эти определения скрыты от пользователя.Абстрактный метод task()
из абстрактного класса Absclass
фактически никогда не вызывается.
Но когда метод print()
вызывается как для test_obj , так и для example_obj , вызывается метод print()
класса Absclass, поскольку он не является абстрактным методом.
Примечание : мы не можем создавать экземпляры абстрактного класса. Выдает ошибку Error
.
Заключение
Итак, сегодня в этом уроке мы поняли концепцию Абстракции в Python .
Если у вас возникнут дополнительные вопросы, обращайтесь в комментарии ниже.
Ссылки
Как сделать ваш код более читабельным с помощью абстракции
от Tiago Antunes
Пока вы учитесь программировать, часто можно увидеть людей, использующих термин под названием абстракция . Вы начинаете задавать себе вопросы: что такое абстракция и почему она важна?
В этой статье я объясню вам концепцию абстракции и способы ее использования, а также приведу несколько примеров на Python.
Перво-наперво: что такое абстракция?
По словам моего учителя по основам программирования:
«Абстракция — это упрощенная спецификация сущности»
Это означает, что абстракция — это представление вычислительной сущности. Это способ скрыть свою конкретную информацию и предоставить программисту только наиболее важную информацию.
Абстракция также ситуативна: каждая соответствует потребности, поэтому вы можете связать хорошую абстракцию с конкретным использованием этой сущности.
Давайте посмотрим на двоичное дерево поиска (если вы не знаете, что это такое, посмотрите мою статью о них). Мы можем определить узел как объект со следующими свойствами:
Узел имеет: Узел * левый Узел * правый int val
Здесь мы бы сказали, что Узел имеет два указателя на другие узлы и значение int. Но , насколько это полезно для кого-то по сравнению с функцией вставить (узел, значение)
, и она просто правильно вставит его? Таким образом, вам просто нужно было позвонить, и все было сделано.Простой.
Вот чем полезна абстракция. Все библиотеки, которые вы используете в своих программах, используют его, так что пользоваться библиотекой становится очень просто.
Хорошо, но насколько хороша абстракция данных?
Абстракция данных позволяет нам преобразовать сложную структуру данных в простую и удобную в использовании. В результате программа с высоким уровнем сложности кода может быть преобразована в программу, которая выглядит близкой к английской (назовем ее высокоуровневый код ).
Тип данных состоит из двух частей: свойств и методов, которые могут быть открытыми или закрытыми. Публичные — единственный способ использовать данные. Они должны охватывать все функции, которые вы хотите, чтобы данные могли выполнять.
Что произойдет, если вы используете свой абстрактный код? На самом деле не имеет значения, изменяются ли ваши внутренние свойства, если методы по-прежнему получают те же аргументы и делают то же самое, что и раньше. Если что-то не так, вам нужно изменить это только один раз.
Давайте выберем пример и будем работать с ним: Векторы
Предположим, что Векторы это:
- Объекты с двумя значениями, x и y
- x и y оба неотрицательные числа
Таким образом Векторы что-то вроде (2 ,5), (0, 19) и так далее.
Хороший способ создания абстракций — использование объектов. Они обеспечивают сокрытие информации и представление анонимности. Это позволяет пользователю сохранить абстракцию.
Давайте начнем с определения нашего класса (я не буду определять проверку типов, чтобы сделать код чище, но вы должны это сделать):
Итак, мы определили несколько методов, и теперь у нас есть много вещей, которые мы можем сделать:
Для 2D-вектора это может показаться простым.Если вы начнете реализовывать это в более крупных и сложных программах, вы заметите, что они очень удобны.
Давайте теперь сделаем другую реализацию вектора класса (изменим его внутреннее состояние) на что-то с теми же методами, но с другим кодом:
Реализация другая, но вывод тот жевыход останется прежним. Это связано с используемой нами абстракцией, даже если код полностью изменился. Вот почему очень важно использовать абстракцию.Это обеспечивает гибкость вашего кода и независимость от кода других людей.
Давайте теперь возьмем другой пример, на этот раз с двумя классами: City и Citizen.
Город состоит из горожанИ мы получаем следующее:
### ВЫВОД ### Население города 1000, случайное: Гражданин женщина 20 летНаселение города 1000, случайное: Гражданин мужчина 74 года old
Но представьте теперь, что мы хотим изменить то, как внутри работает класс Citizen. Если бы мы не использовали абстракцию, нам пришлось бы менять весь код! Это много работы!
Теперь мы изменили класс Citizen, очень быстро — и все по-прежнему работает!Теперь, если код запускается снова, мы знаем, что он работает, хотя результаты другие.Как видите, мы изменили целый класс, но все работает!
Подведение итогов
На первый взгляд может показаться, что абстракция не нужна. Чем ниже уровень языка, который вы используете, тем важнее использовать абстракцию. Это позволяет избежать сложного кода и делает его действительно простым. В таких языках, как C, это действительно очень полезно.