Содержание

Понятие, виды и примеры абстракции. Абстрактное мышление — Новости Оптом

Содержание статьи:

  • Что это такое? Определение
  • Какой может быть абстракция? Примеры в жизни
  • Чем является абстрагирование? Определение
  • Абстрактное и конкретное
  • Виды абстракции
  • Что понимается под абстрактным мышлением
  • В чем польза отвлеченных понятий и мышления
  • В искусстве

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

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

Что это такое? Определение

Вам будет интересно:Философия возраста. Семилетние циклы жизни человека

Название этого термина происходит от латинского слова abstractio, которое переводится на русский язык, как «отвлечение». Именно в этом и заключается суть данного философского понятия.

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

Вам будет интересно:Абсолютный дух: понятие, теория

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

Также данное понятие определяется как обобщение, достигнутое путем абстрагирования.

Какой может быть абстракция? Примеры в жизни

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

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

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

Вам будет интересно:Сознание, его происхождение и сущность. Проблема сознания в истории философии

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

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

Чем является абстрагирование? Определение

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

То есть абстрагирование – это использование способа отвлечения в процессе познания или объяснения, рассуждения.

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

Абстрактное и конкретное

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

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

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

Виды абстракции

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

В соответствии с целью абстракция бывает:

  • содержательной;
  • формальной.

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

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

К основным видам или же типам этой категории относятся:

  • чувственная примитивная;
  • обобщающая;
  • идеализирующая;
  • изолирующая;
  • конструктивизирующая.

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

Что понимается под абстрактным мышлением?

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

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

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

В чем польза отвлеченных понятий и мышления?

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

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

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

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

В искусстве

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

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

Основоположником этого жанра принято считать российского живописца Василия Кандинского, а первым абстрактным произведением – его акварельную работу «Без названия», написанную в 1910 году.

Источник

Абстрактное мышление: что это такое, примеры, формы, виды в психологии

Содержание

  • 1 Определение понятия
  • 2 Суть и польза
  • 3 Абстрактно-логический вид размышлений
  • 4 Типы абстракций
  • 5 Формы абстрактного мышления
    • 5.1 Суждение
    • 5.2 Умозаключение
    • 5.3 Понятие
  • 6 Примеры того, как абстрактно мыслить
  • 7 Зачем нужно развитие этих навыков
  • 8 Развитие
    • 8.1 У детей
    • 8.2 У взрослых
  • 9 Итог

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

Определение понятия

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

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

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

Конечно, такое происходит не всегда. Представим себе, что мужчина лежит на кровати и листает ленту в социальной сети. Первое, что приходит на ум – «Он лентяй». Такой вывод мы, скорее всего, сделаем исходя из того, что видим. Но ведь на самом деле произойти могло и нечто другое. Он прилег на 10 минут отдохнуть после тяжелого рабочего дня. Он приболел и поэтому не в силах заняться делами. Появляется много вариантов, и если мы отойдем от конкретики и рассмотрим все под различными углами, то сможем понять и узнать много нового.

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

Суть и польза

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

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

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

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

Абстрактно-логический вид размышлений

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

Довольно понятный пример – математика, где ученые пытаются объяснить явления, не имеющие места в природе в материальной форме. Такого понятия, как цифра 3 нет. Мы с вами понимаем, что это три абсолютно одинаковые единицы, а название было разработано для упрощения.

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

Психолог Дарья Милай

Записаться на прием

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

Типы абстракций

Чтобы понять, что значит абстрактное мышление, стоит разобраться в единицах закономерностей, их разновидностях и целях. Их выделяют всего шесть:

  • Изолирующая – способствует выделению тех элементов, на которых делается акцент.
  • Конструктивизация – выражает «размытые» предметы более четкими по форме.
  • Актуальной бесконечности – устанавливают бесконечные составляющие в качестве конечных.
  • Обобщающая – отсекает персональные особенности объекта и концентрирует на общих его характеристиках.
  • Примитивно-чувственная – выделяет одни свойства и черты и избегает других.
  • Идеализирующая – меняет реальное описание на идеальный шаблон, скрывающий все недостатки.

Помимо этого, существует классификация по задачам:

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

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

Формы абстрактного мышления

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

Суждение

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

Очная консультация

Каковы особенности и преимущества очной консультации?

Узнать подробнее

Консультация по скайпу

Каковы особенности и преимущества консультаций по скайпу?

Узнать подробнее

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

Умозаключение

Оно формулируется с применением 2 или большего количества суждений. То есть, по факту, это более сложное соображение. Оно включает в себя предпосылку (начальное рассуждение), вывод и заключительную часть. А все это достигается логическим путем. Приведем образец: «Все женщины красавицы. Маша – представительница женского пола. Значит, она красивая». Из двух посылов мы создали новую гипотезу.

Понятие

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

Опишу такое слово, как «автомобиль». Он бывает легковым, грузовым, хэтчбэк. У всех машин разный колер, функции и форма. Но наличие колес, сидений, двигателя разрешает нам все варианты назвать одним словом.

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

Примеры того, как абстрактно мыслить

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

Или возьмем понятие «жизнь». Что это такое? Ответ на данный вопрос искали многие философы. По сути, это существование тела, куда помещено сознание. Но вот четко сказать об этом понятии мы все равно не сможем.

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

Нельзя не упомянуть и о таком свойстве, как идеализация. Многие люди представляют себе реальность и живущих в ней индивидов идеальными. Известный стереотип – ждать «принца».

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

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

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

Зачем нужно развитие этих навыков

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

Задайте вопрос

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

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

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

Развитие

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

У детей

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

Вот что можно для этого сделать:

  1. На листе бумаги разлейте краску так, чтобы получилось пятно. Из него вместе с ребенком сделайте картинку. Дайте ему простор для воображения, и пусть он сам озвучит свою идею.
  2. Вместе придумывайте слова или имена. Например, подберите иллюстрацию и дайте ей несколько необычных названий. Это может быть все, что угодно: природа, флора и фауна.
  3. Займитесь домашними театральными спектаклями. Вместе с малышом создайте костюмы из подручных вещей и различный реквизит, устраивайте репетиции, импровизируйте. Довольно эффективным является и театр теней.

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

У взрослых

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

  1. Лягте поудобнее и закройте глаза. Ваша задача – четко и детально представить всех людей, с кем вы общались в этот день. Прокрутите в голове то, в чем они были одеты, их голос, жесты и мимику. Одновременно думайте и о своих чувствах и ощущениях, полученных во время коммуницирования.
  2. А теперь начните представлять себе различные эмоции: грусть, счастье, тревожность, сочувствие. При этом не наделяйте ими конкретный объект, а создайте воображаемый образ для каждого состояния.
  3. Затем придумайте силуэты нематериальных явлений или терминов. Наблюдайте за собственными ассоциациями, отслеживайте возникающие символы.

Помимо этого, можно заняться рисованием, решать все те же головоломки или почитать тематическую литературу.

Итог

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

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

Часовая встреча по вашему уникальному запросу в Москве.

Записаться на консультацию

Интенсивный ритм жизни?
Получите он-лайн консультацию из любого уголка мира.

Skype, Viber.

Записаться на консультацию

Причуды абстракций / Хабр

За годы преподавания и коммерческой разработки я повстречал много студентов и разработчиков, которые не до конца понимают смысл слова абстракция. Из многочисленных попыток разъяснить смысл этого термина получилась настоящая статья. Что Вы найдете под катом:

  • Определение понятия абстракции и объяснение откуда оно взялось в ООП.
  • Объяснение на простых примерах, что такое барьер абстракции, побочный эффект абстракции.
  • Как получается хардкод.


Что такое абстракция?

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

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

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

Зачем нужна абстракция?

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


Если бы не фотография с высоты птичьего полета, можно ли было бы себе представить насколько правильно спроектирована Барселона? Кстати, про пример с шариковой ручкой, читать бы тоже не получилось — начертания одной и той же буквы на письме отличаются даже у одного человека.

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


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

Итак, абстрагирование нам нужно как способ познания и описания окружающего мира, для обмена информацией друг с другом. Абстракции позволяют провести декомпозицию предметной области на набор понятий и связей между ними.

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

Барьеры и побочные эффекты абстракций

Чтобы понять ключевые свойства абстракций проведем аналогию с построением проекций на плоскость.



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

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

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

С другой стороны, как мы видим из примера, цилиндр, может проецироваться и в окружность, и в прямоугольник — объекты с различными геометрическими свойствами, отличными от тех, что есть у цилиндра. разрядность (8, 16, 32, 64 бита) Данная абстракция позволяет представить целые числа только из отрезка –p/2+1 до p/2. Побочный эффект – проблема переполнения.

Вещественные числа Числа с плавающей точкой Вещественных чисел несчетное число, а чисел с плавающей точкой — всего лишь конечное. Это значит, что несчетное количество вещественных чисел представлены одним числом с плавающей точкой. Побочный эффект – ошибка округления, из-за который два числа нельзя сравнивать с помощью операции сравнения, а лишь по модулю некоторого маленького epsilon |a-b| < epsilon => a == b, или a/b*1000 может сильно отличаться от a*1000/b. Появилась даже целая дисциплина в математике – численные методы, которая изучает как организовать вычисления с плавающей точкой так, чтобы результаты не сильно отличались от вычислений с вещественными числами.
Деньги Числа с плавающей точкой Погрешность округления чисел с плавающей точкой делает, если не невозможным их использование для финансовых операций, то, по крайней мере, сильно усложняет жизнь. В любом случае, я бы сначала подумал в сторону написания отдельного класса для денежных единиц. Изображение Машинная графика Машинная графика развивается семимильными шагами, чтобы сделать изображение на экране компьютера все более реалистичным. Программное обеспечение Процедура Процедура является базовым элементом декомпозиции в процедурном программировании. Побочный эффект — процедура жестко заданная последовательность команд, которую невозможно изменить без переписывания самой процедуры. Программное обеспечение Класс О классах будем говорить ниже. Предметная область Абстракция сущности и связи между сущностями Побочный эффект — отражает представление, заблуждения, предубеждения и т.д. о предметной области конкретного субъекта. Бизнес-логика Процедура Как уже говорилось выше — побочный эффект процедуры — жесткая последовательность команд. Бизнес-логика же подвержена изменениям, как правило содержит много исключений, о которых пользователи обычно забывают рассказать. Попытка представить бизнес-операцию в виде процедуры часто делает терпит неудачу. Программное обеспечение Поток для распараллеливания операций Многопоточное программирование получилось настолько сложным для восприятия, что немного людей в нем разбирается. Квадрат — это прямоугольник, у которого все стороны равны. Класс квадрат нельзя наследовать от прямоугольника. Классы — это абстракции. У них есть свои собственные свойства, которые отличаются от математических объектов и которые делают невозможным наследование.
Классы

Гради Буч так определяет ООП:
Объектно-ориентированное программирование — это методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного класса, а классы образуют иерархию наследования.

В этом определении самый важный момент — это иерархия наследования. Потому что именно наследование отличает ООП от всех других методологий.

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

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

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

Второй побочный эффект, который стоит отметить — чужой код всегда менее понятный, чем свой собственный.


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

Когда же человек пытается понять чужой код, он как раз двигается наоборот — сверху вниз. То есть сначала понимает общую суть, затем разбивает на компоненты, потом пытается понять суть каждого компонента и т.д. Часто эти движения мысли снизу вверх и сверху вниз у разных людей не совпадают. Естественно, что изучающему чужой код было бы легче, если разбиение кода на компоненты совпадало с его собственными убеждениями, как надо делать. Если это не так, придется затрачивать определенные усилия, чтобы понять ход мыслей разработчика. Поэтому, когда кто-то говорит, что здесь «полный хардкод», но если я перепишу, то будет все проще и понятнее. Это всегда 100% правда… Но только для него, для остальных ценность переписывания уже не так очевидна.

Кстати, если ничего не предпринимать специально, то при разработке снизу вверх, код становится сильно связанным между собой, то есть не повторно используемым. Чтобы побороть этот эффект надо следовать принципу инверсии зависимостей (The Dependency Inversion Principle).

Проиллюстрируем как проявляется описанный побочный эффект на простом примере. Многие жители крупных городов закупаются в крупных супермаркетах. Предположим, что жена отправляет мужа за покупками и, чтобы он не забыл, как обычно, чего-нибудь, составляет список «для тех кто в танке».
Постараемся проследить ход ее мыслей:
— Так чего я сегодня буду готовить на ужин?
— Надо приготовить чего-нибудь вкусненькое, чтобы побаловать ребенка.
— Так, нужна будет мука, молоко.
— Кажется в миксере сели батарейки.
— Стоп! Ребенку нужны витамины. Морковь. Буду делать морковный сок. и мандарины. Скоро же Новый год!
— А хлеб дома есть? Нет, кажется, нет.Значит, надо купить!
— Еще надо купить масло.
— Забыла про ребенка — витамины. Купить яблоки.
— Чего-то ручка плохо пишет. Наверное скоро кончатся чернила. Надо купить!
— Так, ребенку надо купить сока.
— А еще игрушку — пусть порадуется.
— Картошка у нас есть на борщ? На борщ хватит, но на неделю нет. Значит тоже надо купить.
— Чуть не забыла учительница просила принести две тетради.
— К борщу нужна сметана.
— Вроде сахар кончился.
— Ребенок любит виноград.
— И еще надо купить бутилированной воды.

В итоге получаем следующий список:

  • мука
  • молоко
  • батарейки
  • морковь
  • мандарины
  • хлеб
  • масло
  • яблоки
  • ручка
  • сок
  • игрушка
  • картофель
  • тетради
  • сметана
  • сахар
  • виноград
  • вода

Когда приходит муж в магазин то, что он обнаруживает? Указанные в списке товары оказываются в разных частях магазина. Обычно список длинный, поэтому запомнить что-либо, что было уже куплено достаточно трудно. На это накладывается, что какие-то отделы временно закрыты — идет выгрузка товаров, какого-то товара нет в продаже, плюс толчея, зимняя одежда. Более опытные товарищи ходят с карандашом или ручкой с очень озабоченным видом и постоянно смотрят в свой список. Но, в итоге, все равно, что-нибудь да забудешь купить. По своему опыту могу сказать, что это «что-нибудь» окажется самым важным, из-за чего вообще и стоило ехать в магазин.

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

  • Батарейки
  • Детские тетради
  • Ручка
  • Вода
  • Сок
  • Сахар
  • Морковь
  • Апельсины
  • Яблоки
  • Виноград
  • Картофель
  • Масло
  • Хлеб
  • Молоко
  • Сметана
  • Мука
  • Детская игрушка

Еще одно важное наблюдение — невозможно по самим абстракциям определить насколько удачными они получились. Это можно сделать, только если мы попытаемся их использовать на практике. И тут уж выясняется, что одни абстракции лучше подходят для задачи, а другие — хуже. А если еще немного изменить исходные условия, то и прежний «хороший» набор абстракций уже может не работать. Например, второй список покупок из примера перестанет работать, если прийти с ним в другой магазин с иным порядком выкладки товаров. Он станет ничем не лучше, чем первый.
Отсюда вывод — невозможно придумать набор классов, который подойдет на все случаи жизни. В статье The Open-Closed Principle это называется стратегическая замкнутость.

Естественный вопрос, а как сразу создавать хорошие абстракции. Увы, но на этот счет нет точного ответа. Зато со временем выработался набор практик, который говорит, как надо поступать, и обещает, что в этом случае будет хороший результат. К таким практикам относится рефакторинг, стандарты кодирования, code review, объектная гимнастика и т.д. Цель данных практик — направить ход мыслей группы разработчиков в одном направлении, тогда шансов, что чужой код будет понятнее, станет больше. Отношение к каждой из практик у отдельно взятого человека зависит лишь от приобретенного им опыта использования практики. Часто слова «Это не работает» надо интерпретировать как «Я пробовал — у меня не получилось». Нет никаких объективных аргументов «ЗА», равно как и «ПРОТИВ».

Так зачем нужно тогда ООП?

Проведем параллели между естественным языком и ООП

естественный язык ООП
Слово класс
Правила Синтаксис
Жанр Архитектура
литературные приемы паттерны

Любые свои мысли человек выражает словами естественного языка. Есть два типа задач:

  1. Для решения надо хорошо знать сам язык. Например, чтобы написать Войну и Мир.
  2. Сложность не зависит от языка. Неважно сколько и какие языки Вы знаете. Это никак не помогает при решении. Например, теорема Ферма.

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

Меня всегда удивляют, статьи в стиле Почему я люблю X или Почему я не люблю X. Все прекрасно понимают, что X — инструмент. Ведь нет же таких статей про лопату. Хотя, кто знает, ведь ООП существует несколько десятилетий, а лопата несколько тысяч, и быть может где-нибудь в в каменном веке шли жестокие холивары на тему, что лучше лопатка мамонта или мотыга из камня?

Литература по теме

1. Гради Буч Объектно-ориентированный анализ и проектирование с примерами приложений на С++
Данная книга в представлении не нуждается. Одна из наиболее цитируемых книг по программированию.
2. Барбара Минто Принципы Пирамиды Минто.
Работая консультантом McKinsey Барбара Минто создала свой собственный метод написания аналитических документов, основанный. на том, как человек воспринимает информацию. В книге достаточно много места уделено принципам группировки и обобщения.
3. Роберт Мартин (Uncle Bob)
Роберт Мартин написал серию статей и книг про принципы ООП. Наиболее известные из них S.O.L.I..D. На русском языке вышла книжка Роберт Мартин Быстрая разработка программ. Принципы, примеры, практика, в которой описаны эти принципы. Но на мой взгляд про них лучше прочитать в статьях The Single Responsibility Principle, The Open-Closed Principle, The Liskov Substitution Principle, The Interface Segregation Principle, The Dependency Inversion Principle.

АБСТРАКЦИЯ — Что такое АБСТРАКЦИЯ?

Слово состоит из 10 букв: первая а, вторая б, третья с, четвёртая т, пятая р, шестая а, седьмая к, восьмая ц, девятая и, последняя я,

Слово абстракция английскими буквами(транслитом) — abstraktsiya

  • Буква а встречается 2 раза. Слова с 2 буквами а
  • Буква б встречается 1 раз. Слова с 1 буквой б
  • Буква с встречается 1 раз. Слова с 1 буквой с
  • Буква т встречается 1 раз. Слова с 1 буквой т
  • Буква р встречается 1 раз. Слова с 1 буквой р
  • Буква к встречается 1 раз. Слова с 1 буквой к
  • Буква ц встречается 1 раз. Слова с 1 буквой ц
  • Буква и встречается 1 раз. Слова с 1 буквой и
  • Буква я встречается 1 раз. Слова с 1 буквой я

Значения слова абстракция. Что такое абстракция?

Абстракция

АБСТРАКЦИЯ (от лат. abstraho—отвлекать, исключать, отделять) — необходимое условие Познания путем формирования «вторичных образов» реальности (ее информационных моделей), в частности, таких, как восприятия, представления, понятия, теории и пр.

Новая философская энциклопедия. — 2003

АБСТРА́КЦИЯ — абстрактное (от лат. abstraction – отвлечение), – один из моментов процесса познания, к-рый заключается в мысленном отвлечении от ряда несущественных свойств, связей изучаемого предмета и выделении основных, общих его свойств…

Философская энциклопедия

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

Юнг К. Словарь терминов

Абстракция данных

Абстра́кция в объектно-ориентированном программировании — это придание объекту характеристик, которые чётко определяют его концептуальные границы, отличая от всех других объектов.

ru.wikipedia.org

Абстракции принцип

Абстракции принцип, логический принцип, лежащий в основе определений через абстракцию: любое отношение типа равенства, определённое на некотором исходном множестве элементов, разбивает (делит, классифицирует)…

БСЭ. — 1969—1978

АБСТРАКЦИИ ПРИНЦИП — логич. принцип, лежащий в основе определений через абстракцию и связывающий три типа универсалий — классы, свойства и отношения равенства (подобия).

Философская энциклопедия

АБСТРАКЦИИ ПРИНЦИП — логич. принцип, лежащий в основе определений через абстракцию и связывающий три типа универсалий — классы, свойства и отношения равенства (подобия).

Советский философский словарь. — 1974

АБСТРАКЦИЯ ОТОЖДЕСТВЛЕНИЯ

АБСТРАКЦИЯ ОТОЖДЕСТВЛЕНИЯ -способ формирования общих абстрактных понятий, состоящий в том, что при рассмотрении каких-либо реальных, осязаемых исходных объектов принимаются во внимание лишь те их различия…

Новая философская энциклопедия. — 2003

АБСТРАКЦИЯ ОТОЖДЕСТВЛЕНИЯ — способ формирования общих абстрактных понятий, состоящий в том, что при рассмотрении к. -л. исходных объектов мы начинаем принимать во внимание лишь те их различия…

Математическая энциклопедия. — 1977-1985

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

АБСТРАКЦИЯ НЕРАЗЛИЧИМОСТИ — абстракция, принятая в рамках интервального анализа, с целью уточнения понятий о тождестве и различии в ситуациях, когда отсутствует априорная информация об индивидуации объектов универсума (предметной области)…

Философская энциклопедия

АБСТРАКЦИЯ НЕРАЗЛИЧИМОСТИ -абстракция, принятая в рамках интервального анализа, с целью уточнения понятий о тождестве и различии в ситуациях, когда отсутствует априорная информация об индивидуации объектов универсума (предметной области)…

Новая философская энциклопедия. — 2003

АБСТРАКЦИЯ НЕРАЗЛИЧИМОСТИ — эмпирический аналог философской (логической) идеи о тождестве неразличимых. Принята в рамках интервальной методологии с целью уточнения понятий о тождестве и различии в ситуациях…

Прохоров Б.Б. Экология человека. — 2005

Абстракция отождествления

АБСТРАКЦИЯ ОТОЖДЕСТВЛЕНИЯ — одна из осн. абстракций математики и логики, позволяющая говорить об одинаковых объектах как об одном и том же объекте. А. о.

Философская энциклопедия

АБСТРАКЦИЯ ОТОЖДЕСТВЛЕНИЯ — одна из осн. абстракций математики и логики, позволяющая говорить об одинаковых объектах как об одном и том же объекте. А. о.

Советский философский словарь. — 1974

АБСТРА́КЦИЯ ОТОЖДЕСТВЛЕ́НИЯ — одна из осн. абстракций математики и логики, позволяющая говорить об одинаковых объектах как об одном и том же объекте. А. о. представляет собой «образование абстрактного понятия путем объединения…

Философская энциклопедия

Абстракция актуальной бесконечности

АБСТРАКЦИЯ АКТУАЛЬНОЙ БЕСКОНЕЧНОСТИ — основанный на акте творческого воображения способ образования абстрактных понятий, лежащий в основе формирования одной из наиболее сложных разновидностей идеи бесконечности — идеи актуальной бесконечности.

Прохоров Б.Б. Экология человека. — 2005

АБСТРАКЦИЯ АКТУАЛЬНОЙ БЕСКОНЕЧНОСТИ — основанный на акте творческого воображения способ образования абстрактных понятий, лежащий в основе формирования одной из наиболее сложных разновидностей идеи бесконечности—идеи актуальной бесконечности.

Философская энциклопедия

АБСТРАКЦИЯ АКТУАЛЬНОЙ БЕСКОНЕЧНОСТИ — одна из математических идеализации, связанная с определенной формой идеи бесконечности в математике — с идеей так наз. актуальной бесконечности.

Математическая энциклопедия. — 1977-1985

Абстракция потенциальной осуществимости

АБСТРАКЦИЯ ПОТЕНЦИАЛЬНОЙ ОСУЩЕСТВИМОСТИ — Метод мысленного отвлечения, лежащий в основе идеи так называемой потенциальной бесконечности. Как правило, неограниченное развитие какого-либо конструктивного процесса…

Прохоров Б.Б. Экология человека. — 2005

АБСТРАКЦИЯ ПОТЕНЦИАЛЬНОЙ ОСУЩЕСТВИМОСТИ —метод мысленного отвлечения, лежащий в основе идеи т. н. потенциальной бесконечности. Представление о неограниченном развитии какого-либо конструктивного процесса, являющееся конкретным воплощением этой идеи…

Новая философская энциклопедия. — 2003

АБСТРАКЦИЯ ПОТЕНЦИАЛЬНОЙ ОСУЩЕСТВИМОСТИ — одна из осн. абстракций логикоматематич. теорий, составляющая основу идеи потенциальной бесконечности. А. п. о. состоит в отвлечении от трудностей реализации конструктивных процессов…

Философская энциклопедия

ИЗОЛИРУЮЩАЯ АБСТРАКЦИЯ

ИЗОЛИРУЮЩАЯ АБСТРА́КЦИЯ мысленное выделение словесно обозначаемого отд. признака к.-л. предмета или предметов, соответствующего тому или иному их свойству или их отношению к др. предметам…

Философская энциклопедия

Русский язык

Абстра́кция, -и.

Орфографический словарь. — 2004

Абстра́к/ци/я [й/а].

Морфемно-орфографический словарь. — 2002

Примеры употребления слова абстракция

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

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


  • Слова из слова «абстракция»
  • Слова на букву «а»
  • Слова, начинающиеся на «аб»
  • Слова c буквой «я» на конце
  • Слова c «ия» на конце
  • Слова, начинающиеся на «абс»
  • Слова, начинающиеся на «абст»
  • Слова, оканчивающиеся на «ция»
  • Слова, заканчивающиеся на «кция»
  1. абстракционистка
  2. абстракционистский
  3. абстракционист
  4. абстракция
  5. абсурдизм
  6. абсурдистский
  7. абсурдист

Понимание абстракции в Python — pythobyte.

com

Автор оригинала: Pankaj Kumar.

Вступление

Сегодня в этом руководстве мы собираемся обсудить концепцию абстракции в Python для Объектно-ориентированный подход программирования.

Если вы новичок в Ооп Мы настоятельно рекомендуем пройти через наши Объектно-ориентированное программирование в Python статья.

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

Давайте рассмотрим немного глубже в тему, чтобы найти его важность в реальной жизни и программировании.

Что такое абстракция в Python?

В объектно ориентированном программировании, Наследование , Полиморфизм и Инкапсуляция идти, держась за руки. Но Абстракция также является важным элементом OOP.

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

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

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

Это также может быть применено к компьютерным программам, использующим Ооп концепции. Это сущность объектно-ориентированного программирования.

Абстрактные классы и методы в Python

Объявить Абстрактный класс Мы сначала нужно импортировать ABC модуль. Давайте посмотрим на пример.

from abc import ABC
class abs_class(ABC):
     #abstract methods

Здесь Abs_class Абстрактный класс внутри, которые могут быть определены абстрактные методы или любые другие способы.

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

from abc import ABC, abstractmethod
class abs_class(ABC):
    #normal method
    def method(self):
        #method definition
    @abstractmethod
    def Abs_method(self):
        #Abs_method definition

Здесь Метод () нормальный метод, тогда как ABS_Method () Это абстрактный метод, реализующий @abstractmethod от ABC модуль.

Пример абстракции Python

Теперь, когда мы знаем об абстрактных классах и методах, давайте посмотрим на пример, который объясняет Абстракция в Python Отказ

from abc import ABC, abstractmethod
class Absclass(ABC):
    def print(self,x):
        print("Passed value: ", x)
    @abstractmethod
    def task(self):
        print("We are inside Absclass task")
class test_class(Absclass):
    def task(self):
        print("We are inside test_class task")
class example_class(Absclass):
    def task(self):
        print("We are inside example_class task")
#object of test_class created
test_obj = test_class()
test_obj.task()
test_obj. print(100)
#object of example_class created
example_obj = example_class()
example_obj.task()
example_obj.print(200)
print("test_obj is instance of Absclass? ", isinstance(test_obj, Absclass))
print("example_obj is instance of Absclass? ", isinstance(example_obj, Absclass))

Выход:

Здесь,

Absclass абстрактный класс, который наследует от ABC класс из модуля ABC. Содержит абстрактный метод Задача () и а Печать () Метод, который виден пользователем. Две другие классы, наследующие из этого абстрактного класса, являются test_class и example_class Отказ У них обоих есть свои Задача () Метод (расширение абстрактного метода).

После того, как пользователь создает объекты из обоих test_class и example_class классы и вызывают Задача () Метод для них обоих, скрытые определения для Задача () Методы внутри обоих классов вступают в игру. Эти определения являются скрытый от пользователя. Абстрактный метод Задача () из абстрактного класса Absclass на самом деле никогда не вызывает.

Но когда Печать () Метод называется как для test_obj и example_obj , абсцкласс Печать () Способ вызывается, поскольку это не абстрактный метод.

Примечание : Мы не можем создавать экземпляры абстрактного класса. Раняет Ошибка . Отказ

Заключение

Итак, сегодня в этом руководстве мы поняли понятие Абстракция в Python Отказ

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

Рекомендации

  • Объектно-ориентированное программирование в Python ,
  • Наследование в Python ,

Ветвление по абстракции — Trunk Based Development

Ветвление по абстракции это комплексная техника, которая влияет на параметр ‘время вливания написанного кода’ в trunk. Допустим, у разработчика (или пары разработчиков, если мы говорим про парное программирование), есть какая-то задача, выполнение которой займет 5 дней. В таком случчае, будет не очень удобно создавать ветку для такой большой задачи, т.к. где-то в основной ветке может быть баг или не очень хороший код, который будет исправлен в этой задаче, и это код будет доставлять неудобства остальным разработчикам 5 дней, пока делается задача. Дополнительные неудобства также могут возникнуть при вливании этого кода в trunk.

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

Правила:

  1. У нас есть разработчики, которые зависят от ‘времени вливания написанного кода’, и мы ни в коем случае не хотим тормозить этим параметром их работу.
  2. Ни одно изменение кода, которое было отправлено в общий репозиторий, не должно ставить под угрозу возможность запуска кода иои готовность к релизу.

Идеальные шаги

Для простоты предположим, что есть код, который ‘существовал и был переписан’, и код, который ‘был написан с нуля’.

  1. Напишите абстракцию вокруг кода, который необходимо заменить, и отправьте ее в общий репозиторий для того, чтобы все могли ее видеть. Если необходимо, сделайте это в несколько коммитов. Ни один из этих коммитов не должен ломать сборку, и все они могут быть отправлены в общий репозиторий по порядку и по готовности.
  2. Напишите вторую реализацию абстракции для кода, который был написан ранее, и также отправьте в общий репозиторий, но вам лучше написать эту реализацию таким образом, чтобы она была “выключена” и не влияла на работу других разработчиков в команде. При необходимости это может занять несколько коммитов, как указано выше. Абстракция из №1 также может иногда изменяться, но должна следовать тому же правилу — не ломать сборку.
  3. “Включите” написанную вами реализацию для остальной части команды и сделайте commit/push этого кода.
  4. Удалите заменяемую реализацию.
  5. Удалите абстракцию.

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

Надуманный пример

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

Правила

  1. Механики должны уметь одновременно работать с обивкой, двигателем и т.д.
  2. Автомобиль должен сохранять работоспособность после каждого внесения изменений.

Шаги

Все шаги эффективно выполняются на домкратах/подъемниках/пандусах перед тем, как снова опустить автомобиль на землю.

  1. Одно колесо снимается и помещается в контейнер, который по функционалу является таким же колесом (вращается вокруг оси и выдерживает вес автомобиля), затем этот контейнер вставляется на место снятого колеса. При вождении этот контейнер функционирует так же, как и остальные три колеса.
  2. Колесоподобный контейнер содержит также второе колесо, которое мы хотели бы иметь в конечном счете, в точно таком же физическом пространстве (волшебным образом). Внутри автомобиля добавлен переключатель, чтобы можно было удобно переключать колеса — но это, наверное, лучше делать перед запуском двигателя.
  3. Повторите пп.1-2 для остальных трех колес. Или можно для всех колес поочередно сделать п.1, а потом п.2. Опыт механиков подскажет, что из этого является наиболее эффективным.
  4. Если мы поняли что новые колеса лучше, то старые колеса извлекаются из колесных контейнеров и отправляются на переработку.
  5. Колесоподобные контейнеры также снимаются с новых колес, по одному или все четыре одновременно.

На любой стадии работ, если мы снимаем машину с домкрата/подъемника/пандуса, то она должна быть на ходу (метафора ‘готов к работе’).

We said ‘jacks’ above, because that’s what mechanics use in real life. Software, however, does not follow the rules of gravity, or many of the costs of actual construction. With an IDE for a glove, a single finger could reposition the car in 3D space to allow easy replacement of the wheels.

Пример из разработки ПО

Задокументированный случай — это CI-демон ThoughtWorks для Go. Они изменили библиотеку объектно-реляционного сопоставления (для персистентности), не замедляя при этом деятельность товарищей по команде (правило 1) и не ставя под угрозу работоспособность кода (правило 2).

Они планировали перейти от «iBatis» к «Hibernate» по целому ряду причин, на которых мы не будем подробно останавливаться.

Их действия:

  1. Написали абстракцию вокруг классов/компонентов, которые использовали iBatis напрямую, и убедились что все классы/компоненты, которые неявно ссылались на iBatis, виесто этого начали ссылаться на написанную абстракцию.
  2. Написали вторую реализацию абстракции, в которой ввели Hibernate в кодовую базу, при необходимости поправляя написанную абстракцию.
  3. Сделали небольшой коммит, который включал код с Hibernate для всех членов команды.
  4. Удалили iBatis, затем абстракцию, а затем и переключатель со старой реализации на новую.

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

Вторичные преимущества

Очень дешевая возможность приостановить и возобновить работу по “миграции” одной реализации на другую

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

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

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

Отмена изменений по-прежнему дешевая

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

Это не панацея

Ветвление по абстрации подходит не для всех ситуаций с “изменениями”.

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

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

Some years ago the KDE team was mulling their release 5.0 strategy, and wanting to remain parallel to changes in 4.0, so as not to make mistakes that they had done previously. TODO: откатить назад.

Специальный сайт по этой теме

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

История

Команды использовали ветвление по абстракции задолго до того, как этот подход получил свое имя (Стейси Керл(Stacy Curl) упоминала про него в 2007 году), но когда была первая реализация — история про это умалчивает. Перед тем, как переходить на ветвление по абстракции, команды должны были сделать ветку для больших, длительных и ломающих изменений, или делать это с огромным количеством ухищрений типа:“Привет всем, возьмите отпуск на неделю пока мы тут ломаем код”.

С техникой втевления по абстракции, вероятность того, что команда откажется от Trunk-Based Development в пользу разработки в долгоживущих ветках, очень сильно снижается.

show references

© 2017-2020: Paul Hammant. With Contributions from friends. Site built with Hugo with Material theme, via Netlify.   Contribute to this page

Что такое абстракция в ООП? Java Abstract Class & Method

ByJames Hartman

Hours

Обновлено

Что такое абстракция в ООП?

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

Нажмите здесь, если видео недоступно

Давайте изучим абстракцию в ООП на примере:

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

Абстракция в Java

Но не вся вышеуказанная информация требуется для создания банковского приложения.

Таким образом, вам нужно выбрать только полезную информацию для вашего банковского приложения из этого пула. Такие данные, как имя, адрес, налоговая информация и т. д., имеют смысл для банковского приложения, которое является примером абстракции в ООП.

Поскольку мы извлекли/удалили/выбрали информацию о клиенте из большего пула, этот процесс называется абстракцией в ООП.

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

Разница между абстракцией и инкапсуляцией

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

Разница между абстрактным классом и интерфейсом

Абстрактный класс Интерфейс
Абстрактный класс может иметь как абстрактные, так и неабстрактные методы. Интерфейс может иметь только абстрактные методы.
Не поддерживает множественное наследование. Поддерживает множественное наследование.
Может обеспечить реализацию интерфейса. Не может обеспечить реализацию абстрактного класса.
Абстрактный класс может иметь защищенные и абстрактные общедоступные методы. Интерфейс может иметь только общедоступные абстрактные методы.
Абстрактный класс может иметь переменную final, static или static final с любым спецификатором доступа. Интерфейс может иметь только общедоступную статическую конечную переменную.

Что такое абстрактный класс?

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

Что такое абстрактные методы?

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

Преимущества абстракции

  • Основное преимущество использования абстракции в программировании заключается в том, что она позволяет группировать несколько связанных классов как братьев и сестер.
  • Абстракция в объектно-ориентированном программировании помогает упростить процесс проектирования и реализации программного обеспечения.

Когда использовать абстрактные методы и абстрактный класс?

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

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

Резюме:

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

Узнайте о примерах абстракции данных, которые приносят пользу бизнесу

Опубликовано — Келси Тейлор

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

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

Понимание абстракции данных и ее примеры
  • Что такое абстракция данных?
  • Типы абстракции данных
  • Понимание разницы между абстракцией данных и инкапсуляцией данных
  • Почему важна абстракция данных?
  • Вот лучшие примеры абстракции данных для различных предприятий:
    • Примеры абстракции данных для прогнозов погоды
    • Примеры абстракций данных для сбора данных и структур
    • Примеры абстракции данных для смартфонов
    • Примеры абстракций данных для автомобилей

Что такое абстракция данных?

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

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

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

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

Основные уровни абстракции данных:

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

  • Физическая/внутренняя абстракция:

Это относится к работе с физическими атрибутами организационной структуры.

  • Концептуальная/ логическая абстракция:

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

  • Вид/Внешняя абстракция:

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

Типы абстракции данных

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

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

Заголовочные файлы обычно скрывают внутренние функции от пользователей и программистов.

Поймите разницу между абстракцией данных и инкапсуляцией данных

Абстракция данных является компонентом объектно-ориентированного программирования. Более того, он решает комплексы еще на этапе проектирования. Однако инкапсуляция данных решает проблемы на этапе реализации.

Кроме того, абстракция данных в программировании скрывает лишние детали, отображая важную информацию. Но инкапсуляция данных объединяет код и данные в одно целое.

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

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

Вот лучшие примеры абстракции данных для различных предприятий:

Примеры абстракции данных для прогнозов погоды

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

Примеры абстракций данных для сбора данных и структур

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

Более того, языки программирования и API обычно предоставляют абстрактные типы данных. Таким образом, благодаря абстракциям данных структуры данных становятся доступными и дают более полезную информацию.

Примеры абстракции данных для смартфонов

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

Примеры абстракций данных для автомобилей

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

Заключение:

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

Поведенческая абстракция

Поведенческая абстракция Предыдущий раздел | Следующий раздел | Содержание | Индекс | Титульная страница

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

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

Таким образом, преобразования в Найквисте — это не просто операции над сигналами. За Например, если я хочу растянуть ноту, нет смысла вычислять сначала обратите внимание, а затем растяните сигнал. Это приведет к падению подача. Вместо этого преобразование изменяет преобразование . среда , в которой вычисляется заметка. Думайте о преобразованиях как выполнение запросов к функциям. Это зависит от функции, чтобы выполнить запрос. Поскольку функция всегда находится под полным контролем, можно выполнять преобразования с «интеллектом»; то есть функция может выполнить соответствующее преобразование, например, сохранить желаемую высоту тона и растягивание только «поддерживающей» части конверта, чтобы получить более длинную записку.

Окружающая среда

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

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

*деформация*
Преобразование времени, включая сдвиг времени, растяжение времени и непрерывная деформация времени. Значение *warp* равно интерпретируется как функция от логического (локальная оценка) времени к физическому (глобальное реальное) время. Не обращайтесь к *warp* напрямую. Вместо этого используйте локально-глобальный ( t ) к преобразование из логического (местного) времени в реальное (глобальное) время. Чаще всего, вы позвоните по номеру с местного на глобальный (0) . Несколько операторов преобразования работать с *warp* , включая на ( @ ), растягивать ( ~ ), и деформация . См. также get-duration() и get-warp() .
*громко*
Громкость, выраженная в децибелах. По умолчанию (номинальная) громкость 0,0 дБ (без изменений). Не заходить *громко* напрямую. Вместо этого используйте get-loud() , чтобы получить текущее значение *громко* и либо громко , либо громко-абс , чтобы изменить его.
*транспонировать*
Преобразование высоты тона, выражено в полутона. (По умолчанию: 0,0). Не обращайтесь к *transpose* напрямую. Вместо этого используйте get-transpose() , чтобы получить текущее значение *транспонировать* и либо транспонировать , либо транспонировать-абс по изменить его.
*поддерживать*
«Поддержка», «артикуляция», «коэффициент заполнения» или величина, на которую отдельные или перекрывающиеся последовательные ноты. За например, стаккато может быть выражено *сустейном* 0,5, в то время как очень Игра легато может быть выражена *сустейном* 1.2. В частности, *sustain* растягивает длительность нот (сустейн). не влияя на время между приступами (ритм). Не получать доступ *поддерживать* напрямую. Вместо этого используйте get-sustain() , чтобы получить текущее значение *поддерживает* и либо поддерживает , либо сустейн-абс для модификации.
*старт*
Старт время области отсечения. Примечание: в отличие от предыдущих элементов окружения, *start* имеет точная интерпретация: звук не должен генерироваться до *start* . Это реализовано во всех низкоуровневых звуковых функциях, так что можно вообще игнорировать. Вы можете прочитать *начать* напрямую, но использовать экстракт или экстракт-абс , чтобы изменить его. Примечание 2: Срок к некоторой внутренней путанице между указанным временем начала и фактическое время начала сигнала после отсечения, *start* реализуется не полностью.
*стоп*
Время остановки отсечения область, край. По аналогии с *start* , по истечении этого времени звук не должен воспроизводиться. *старт* и *стоп* разрешить композитору просмотреть небольшой фрагмент произведения не вычисляя его от начала до конца. Вы можете прочитать *стоп* напрямую, но используйте экстракт или экстракт -абс , чтобы изменить его. Примечание: Из-за некоторой внутренней путаницы между указанными время начала и фактическое время начала сигнала после отсечение, *стоп* реализовано не полностью.
*контрольная скорость*
Образец скорость управляющих сигналов. Эта среда элемент обеспечивает частоту дискретизации по умолчанию для управляющих сигналов. Здесь нет формальное различие между сигналом управления и звуковым сигналом. Вы можете прочитать *control-srate* напрямую, но используйте control-srate или control-srate-abs , чтобы изменить его.
*скорость звука*
Образец скорость музыкальных звуков. Этот элемент среды обеспечивает частота дискретизации по умолчанию для музыкальных звуков. Вы можете читать *sound-srate* напрямую, но использовать sound-srate или sound-srate-abs , чтобы изменить его.

Последовательное поведение

Предыдущие примеры показали использование seq , последовательное поведение оператор. Теперь мы можем объяснить seq с точки зрения преобразований. Рассмотрим простое выражение:

воспроизвести последовательность (моя-нота (c4, q), моя-нота (d4, i))
 

Идея состоит в том, чтобы создать первую ноту в момент времени 0 и начать следующую. обратите внимание, когда первый закончит. Все это достигается путем манипулирования окружение. В частности, *warp* изменен так, что то, что локально время 0 для второй ноты преобразуется или искажается в логическое время остановки первой ноты.

Один из способов понять это в деталях — представить себе, как это может быть выполнено: сначала *warp* устанавливается в начальное значение, которое не имеет влияние на время, и оценивается my-note(c4, q) . Звук возвращается и сохранен. Звук имеет время окончания, которое в данном случае будет 1.0 потому что длительность q равна 1.0 . Это время окончания, 1.0 , используется для создания нового *warp* , который имеет эффект смещения время на 1,0. Вторая нота оценивается и начинается в момент времени 1. Звук, который возвращенный теперь добавляется к первому звуку для формирования составного звука, чей продолжительность будет 2.0 . *warp* восстанавливается до исходного значения.

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

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

Деталь языка: несмотря на то, что Найквист откладывает вычисление второй части seq , выражение может ссылаться на переменные в соответствии с обычным Правила области видимости Lisp/SAL. Это потому что seq фиксирует выражение в закрытии, которое сохраняет все привязки переменных.

Одновременное поведение

Другой оператор — sim , который вызывает несколько вариантов поведения одновременно. время. Например,

играть 0,5 * сим (моя-нота (c4, q), моя-нота (d4, i))
 

обе ноты будут воспроизводиться одновременно.

Операционное правило для sim : оценивать каждое поведение в current *warp* и вернуть сумму результатов. (в САЛ sim функция примененная к звукам эквивалентна их добавлению с оператором инфикс + . Следующий раздел иллюстрирует две концепции: во-первых, звук не является поведение , а во-вторых, оператор sim и на трансформацию можно использовать для размещения звуков во времени.

Звуки и поведение

Следующий пример загружает звук из файла в текущем каталоге и сохраняет его в a-snd :

  ; загрузить звук
; 
установить a-snd = s-read(strcat(current-path(), "demo-snd.aiff"))
  ; Сыграй
; 
играть
 

Один может возникнуть соблазн написать следующее:

play seq(a-snd, a-snd)  ; НЕПРАВИЛЬНЫЙ! 
play seq(a-snd, a-snd @ 3)  ; ТОЖЕ НЕПРАВИЛЬНО! 
 

Почему это неправильно? Отзывать что seq работает, изменяя *warp* , а не оперируя звуки. Итак, seq продолжит вычисление а-снд с разные значения *warp* . Однако результат оценки a-snd (переменная) всегда один и тот же звук, независимо от Окружающая среда; в обоих этих случаях, второй a-snd должен начать вовремя 0.0 , как и первый. После окончания первого звука Найквист не может «откатиться» к нулевому времени, поэтому фактически этот будет . воспроизводить два звука последовательно, но это результат реализации детали, а не правильное выполнение программы. Второй случай подчеркивает это: Найквист вернет звук продолжительностью всего 2 секунды потому что 9Преобразование 0338 @ не применяется к звуку. По сути, будущая версия Найквист может (правильно) остановиться и сообщить об ошибке, когда обнаружит, что второй звук в последовательности имеет реальное время начала, которое предшествует запросил один.

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

play seq(cue(a-snd), cue(a-snd))  ; ПРАВИЛЬНЫЙ! 
play seq(cue(a-snd), cue(a-snd) @ 3)  ; ПРАВИЛЬНЫЙ! Продолжительность = 2 секунды 
 

Эти примеры верны, потому что вторая реплика выражения изменят звучание хранится в a-snd для запуска в нужное время.

Урок здесь очень важный: звуки не поведение! Поведение это вычисления, которые генерируют звуки в соответствии с преобразованием Окружающая среда. После создания звука его можно сохранить, скопировать, добавляются к другим звукам и используются во многих других операциях, но звуки не подлежит трансформации. Чтобы преобразовать звук, используйте cue , звук или управление . Отличия этих операций обсуждаются позже. На данный момент, вот партитура в стиле «справочного листа», которая воспроизводит 4 копии a-snd :

  ; используйте sim и at, чтобы размещать звуки во времени
; 
играть в sim(cue(a-snd) @ 0.0,
         cue (a-snd) @ 0,7,
         cue(a-snd) @ 1.0,
         cue(a-snd) @ 1.2)
 

Преображение

Второе понятие, введенное в предыдущем примере, — это @ . операция, которая сдвигает *warp* компонент среды. За пример,

cue (a-snd) @ 0,7
 

можно объяснить следующим образом: изменить *warp* путем сдвига это на 0,7 и оценить cue(a-snd) . Вернуть полученный звук после восстановления *warp* до исходного значения. Обратите внимание, как @ используется внутри sim конструкция для поиска копий a-snd в время. Это стандартный способ представления списка заметок или листа реплик в Найквист.

Это также объясняет, почему звуки должны быть cue ‘d для того, чтобы быть смещенными. во времени или в определенной последовательности. Если бы это было не так, то сим взял бы все его параметры (набор звуков) и выровнял бы их, чтобы начать в то же время. Но cue(a-snd) @ 0.7 — это просто звук, так что сим «отменит» эффект @ , сделав все звуки в предыдущем примере запускаются одновременно, несмотря на @ ! Так как sim учитывает внутреннее время начала звуков, специальный операция cue необходима для создания нового звука с новым стартовым время.

Трансформация в растяжку

В дополнение к At (обозначается в SAL оператором @ , функция Stretch трансформация очень важна. Он появился во введении и он обозначается в SAL цифрой ~ оператор (или в LISP по растяжке особая форма). Stretch также работает с компонентом *warp* окружение. Например,

оск (с4) ~ 3
 

делает следующее: модифицирует *warp* , масштабируя степень «растянуть» на 3 и вычислить osc(c4) . Поведение osc использует коэффициент растяжения для определения продолжительности, поэтому он вернет звук длительностью 3 секунды. Восстановить *warp* до исходного состояния ценность. Как и At, Stretch влияет только на поведение. а-снд ~ 10 ес эквивалентно a-snd , потому что a-snd — это звук, а не поведение. Поведения — это функции, которые вычисляют звуки в соответствии с окружение и вернуть звук.

Вложенные преобразования

Преобразования можно комбинировать с помощью вложенных выражений. Например,

sim (сигнал (a-snd),
    громко (6. 0, cue (a-snd) @ 3))
 

масштабирует амплитуду, а также сдвигает второй вход a-snd .

Зачем использовать громко вместо того, чтобы просто умножать a-snd на некоторые масштаб? Использование громкого дает поведение возможность реализовать абстрактное свойство громкость соответствующим образом, например. включая тембр изменения. В этом случае поведение cue , которое реализует громкость простым масштабированием амплитуды, поэтому результат эквивалентен к умножению на db-to-linear(6.0 ).

Преобразования также можно применять к группам поведений:

громко (6.0, sim (сигнал (a-snd) @ 0.0,
              cue (a-snd) @ 0,7))
 

Определение поведения

Группы поведений могут быть названы с помощью определить (мы уже видели это в определениях my-note и env-note ). Вот еще один пример определение поведения и его использование. Определение имеет один параметр:

определить функцию snds(dly)
  вернуть sim(cue(a-snd) @ 0.0,
             cue (a-snd) @ 0,7,
             cue(a-snd) @ 1.0,
             cue(a-snd) @ (1.2 + dly))
играть в игры(0.1)
играть громко(0,25, snds(0,3) ~ 0,9)
 

В последней строке snds преобразуется: преобразования будут применяться к сигналам поведений в пределах snds . громкий преобразование масштабирует звуки на 0,25 , а растяжение ( ~ ) будет подать на смену (@) суммы 0.0 , 0.7 , 1.0 , и 1,2 + dly . Сами звуки (копии a-snd ) будут не растягиваться, потому что cue никогда не растягивает звуки.

Раздел

Преобразования описывает полный набор преобразований.

Переопределение преобразований по умолчанию

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

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

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

определить функцию двухфазного окружения (время нарастания)
  начинать
    с dur = get-duration(1)
    вернуть pwl(время нарастания, 1, длительность) ~~ 1.0
  конец
 

Чтобы «зафиксировать окружение в локальной переменной», с конструкция используется для создания локальной переменной dur и установки его значение get-duration(1) , что отвечает на вопрос: «Если я использую среду, чтобы растянуть что-то, чье номинальное продолжительность равна 1, какова результирующая продолжительность?» (Поскольку преобразования времени могут включать в себя непрерывные временные деформации, этот вопрос не так как бы просто это ни звучало, поэтому, пожалуйста, используйте предоставленную функцию, а чем заглянуть внутрь *warp* структура и попытка сделать это себя. ) Далее «выключаем» растяжку с помощью стрейч-абс форма, которая в SAL обозначается оператором ~~ . Наконец, мы готовы вычислить конверт, используя pwl . Здесь, мы используем абсолютные длительности. Первая точка останова находится на времени нарастания , поэтому время атаки задается параметром времени нарастания . pwl затухает до нуля в момент времени в течение , поэтому общее продолжительность соответствует продолжительности, ожидаемой от среды, с которой столкнулись этим экземпляром двухфазный-env . Заметим, однако, что, поскольку pwl оценивается в другой установленной среде на ~~ , он не растягивается (или, может быть, точнее, он растянут на 1,0). Это хорошо, потому что это означает, что время нарастания будет не растягиваться, но мы должны быть осторожны, чтобы расширить конверт до dur , чтобы он имел ожидаемую продолжительность.

Частота дискретизации

Глобальная среда содержит *sound-srate* и *control-srate* , которые определяют частоту дискретизации звуков и управляющие сигналы. Они могут быть переопределены в любой момент преобразования sound-srate-abs и control-srate-abs ; за пример,

звук-srate-abs (44100.0, osc (c4))
 

будет вычислять тон, используя частоту дискретизации 44,1 кГц, даже если частота по умолчанию установлено что-то другое.

Как и в случае с другими компонентами среды, никогда не следует изменять *sound-srate* или *control-srate* напрямую. Глобальная среда определяется двумя дополнительными переменные: *default-sound-srate* и *default-control-srate* . Вы можете добавить следующие строки в файл init.lsp , чтобы изменить глобальная среда по умолчанию:
(setf * звук по умолчанию * 44100.0)
(setf *default-control-srate* 1102. 5)
 

Вы также можете сделать это, используя настройки в NyquistIDE. Если вы уже запустили Найквиста и хотите изменить настройки по умолчанию, можно использовать настройки или следующие функции:

exec set-control-srate (1102.5)
exec set-sound-srate (22050.0)
 

Они изменяют значения по умолчанию и повторно инициализируют среду Найквиста.


Предыдущий раздел | Следующий раздел | Содержание | Индекс | Титульная страница

abc — Абстрактные базовые классы — Документация Python 3.10.7

Исходный код: Lib/abc.py


Этот модуль обеспечивает инфраструктуру для определения абстрактной базы классы (ABC) в Python, как указано в PEP 3119 ; см. PEP, почему это было добавлено в Python. (См. также PEP 3141 и Модуль номеров , касающийся иерархии типов для номеров на основе ABC.)

Модуль collections содержит несколько конкретных классов, производных от азбуки; они, конечно, могут быть получены в дальнейшем. В дополнение collections.abc В подмодуле есть несколько ABC, которые можно использовать для проверки того, класс или экземпляр предоставляет определенный интерфейс, например, если он hashable или если это сопоставление.

Этот модуль предоставляет метакласс ABCMeta для определения ABC и вспомогательный класс ABC для альтернативного определения ABC через наследование:

класс абв. азбука

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

 из abc импортировать ABC
класс MyABC (ABC):
    проходить
 

Обратите внимание, что тип ABC по-прежнему ABCMeta , поэтому наследование от ABC требует обычных мер предосторожности в отношении использование метаклассов, так как множественное наследование может привести к конфликтам метаклассов. Можно также определить абстрактный базовый класс, передав метакласс ключевое слово и используя ABCMeta напрямую, например:

 из импорта abc ABCMeta
класс MyABC (метакласс = ABCMeta):
    проходить
 

Новое в версии 3.4.

класс абв. ABCMeta

Метакласс для определения абстрактных базовых классов (ABC).

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

Классы, созданные с помощью метакласса ABCMeta , имеют следующий метод:

регистр ( подкласс )

Зарегистрируйте подкласс как «виртуальный подкласс» этой ABC. За пример:

 из abc импортировать ABC
класс MyABC (ABC):
    проходить
MyABC.register(кортеж)
утверждать issubclass (кортеж, MyABC)
утверждать isinstance((), MyABC)
 

Изменено в версии 3.3: возвращает зарегистрированный подкласс, чтобы его можно было использовать в качестве декоратора класса.

Изменено в версии 3.4: Чтобы обнаружить вызовы register() , вы можете использовать метод Функция get_cache_token() .

Вы также можете переопределить этот метод в абстрактном базовом классе:

__подклассхук__ ( подкласс )

(Должен быть определен как метод класса.)

Проверить, считается ли подкласс подклассом этого ABC. Это означает что вы можете настроить поведение issubclass без нужно вызвать register() для каждого класса, который вы хотите рассмотреть подкласс АВС. (Этот метод класса вызывается из __subclasscheck__() метод Азбуки. )

Этот метод должен возвращать Верно , Ложно или Не реализовано . Если он возвращает True , подкласс считается подклассом этого ABC. Если он возвращает False , подкласс не считается подклассом эту азбуку, даже если она обычно была бы одной. Если он вернется NotImplemented , проверка подкласса продолжается обычным механизм.

Для демонстрации этих концепций посмотрите на этот пример определения ABC:

 класс Foo:
    def __getitem__(я, индекс):
        ...
    защита __len__(я):
        ...
    защита get_iterator (я):
        вернуть его (себя)
класс MyIterable(ABC):
    @абстрактный метод
    защита __iter__(я):
        в то время как Ложь:
            урожайность
    защита get_iterator (я):
        вернуть себя.__iter__()
    @классметод
    защита __subclasshook__(cls, C):
        если cls MyIterable:
            если есть ("__iter__" в B. __dict__ для B в C.__mro__):
                вернуть Истина
        вернуть нереализованный
MyIterable.register(Foo)
 

ABC MyIterable определяет стандартный итерируемый метод, __iter__() , как абстрактный метод. Данная реализация здесь все еще можно вызывать из подклассов. Метод get_iterator() также является частью абстрактного базового класса MyIterable , но не имеет для переопределения в неабстрактных производных классах.

Определенный здесь метод класса __subclasshook__() говорит, что любой класс который имеет __iter__() метод в своем __dict__ (или в одном из его базовых классов, доступ к через список __mro__ ) также считается MyIterable .

Наконец, последняя строка делает Foo виртуальным подклассом MyIterable , хотя он не определяет метод __iter__() (он использует итеративный протокол старого стиля, определенный в терминах __len__() и __getitem__() ). Обратите внимание, что это не сделает get_iterator доступен как метод Foo , поэтому предоставляется отдельно.

Модуль abc также предоставляет следующий декоратор:

@ абв. абстрактный метод

Декоратор, указывающий абстрактные методы.

Для использования этого декоратора требуется, чтобы метакласс класса был ABCMeta или происходит от него. Класс, имеющий метакласс, производный от ABCMeta не может быть создан, если все его абстрактные методы не и свойства переопределяются. Абстрактные методы можно вызывать с помощью любого нормальных «супер» механизмов вызова. abstractmethod() можно использовать объявлять абстрактные методы для свойств и дескрипторов.

Динамическое добавление абстрактных методов в класс или попытка изменить статус абстракции метода или класса после его создания поддерживается с помощью update_abstractmethods() функция. abstractmethod() влияет только на подклассы, полученные с использованием обычных наследование; «виртуальные подклассы», зарегистрированные в регистре ABC () метод не влияет.

Когда abstractmethod() применяется в сочетании с другим методом дескрипторов, он должен применяться как самый внутренний декоратор, как показано на следующие примеры использования:

 класс С(АВС):
    @абстрактный метод
    def my_abstract_method(я, arg1):
        ...
    @классметод
    @абстрактный метод
    def my_abstract_classmethod (cls, arg2):
        ...
    @статический метод
    @абстрактный метод
    Def my_abstract_staticmethod (arg3):
        ...
    @имущество
    @абстрактный метод
    Def my_abstract_property (я):
        ...
    @my_abstract_property.setter
    @абстрактный метод
    def my_abstract_property (я, значение):
        ...
    @абстрактный метод
    защита _get_x (я):
        ...
    @абстрактный метод
    защита _set_x (я, значение):
        . ..
    х = свойство (_get_x, _set_x)
 

Чтобы правильно взаимодействовать с механизмом абстрактного базового класса, дескриптор должен идентифицировать себя как абстрактный, используя __isabstractmethod__ . В общем случае этот атрибут должен быть True если какой-либо из методов, используемых для составления дескриптора, является абстрактным. За Например, встроенное в Python свойство эквивалентно:

. Дескриптор класса
:
    ...
    @имущество
    def __isabstractmethod__(я):
        вернуть любой (getattr (f, '__isabstractmethod__', False) для
                   f in (self._fget, self._fset, self._fdel))
 

Примечание

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

Модуль abc также поддерживает следующие устаревшие декораторы:

@ абв. абстрактный классметод

Новое в версии 3.2.

Устарело, начиная с версии 3.3: теперь можно использовать classmethod с abstractmethod() , что делает этот декоратор излишним.

Подкласс встроенного classmethod() , указывающий на абстрактный метод класса. В остальном это похоже на abstractmethod() .

Этот особый случай устарел, так как декоратор classmethod() теперь правильно идентифицируется как абстрактный при применении к абстрактному метод:

 класс С(АВС):
    @классметод
    @абстрактный метод
    def my_abstract_classmethod (cls, arg):
        ...
 
@ абв. абстрактный статический метод

Новое в версии 3.2.

Устарело, начиная с версии 3.3: теперь можно использовать статический метод с abstractmethod() , что делает этот декоратор излишним.

Подкласс встроенного staticmethod() , указывающий на абстрактный статический метод. В остальном это похоже на абстрактный метод() .

Этот особый случай устарел, так как декоратор staticmethod() теперь правильно идентифицируется как абстрактный при применении к абстрактному метод:

 класс С(АВС):
    @статический метод
    @абстрактный метод
    def my_abstract_staticmethod (аргумент):
        ...
 
@ абв. абстрактное свойство

Устарело, начиная с версии 3.3: теперь можно использовать свойство , свойство.getter() , property.setter() и property.deleter() с abstractmethod() , что делает этот декоратор излишним.

Подкласс встроенного property() , указывающий на абстрактный имущество.

Этот особый случай устарел, так как декоратор property() теперь правильно идентифицируется как абстрактный при применении к абстрактному метод:

 класс С(АВС):
    @имущество
    @абстрактный метод
    Def my_abstract_property (я):
        ...
 

В приведенном выше примере определяется свойство только для чтения; вы также можете определить абстрактное свойство чтения-записи путем соответствующей маркировки одного или нескольких базовые методы как абстрактные:

 класс С(АВС):
    @имущество
    защита х (я):
        ...
    @x.setter
    @абстрактный метод
    защита х (я, значение):
        ...
 

Если только некоторые компоненты являются абстрактными, только эти компоненты должны быть обновлено для создания конкретного свойства в подклассе:

 класс Д(С):
    @C.x.setter
    защита х (я, значение):
        ...
 

Модуль abc также обеспечивает следующие функции:

проз. get_cache_token ()

Возвращает текущий токен кэша абстрактного базового класса.

Токен — это непрозрачный объект (поддерживающий проверку на равенство), идентифицирующий текущая версия кэша абстрактного базового класса для виртуальных подклассов. Маркер изменяется при каждом вызове ABCMeta.register() на любом ABC.

Новое в версии 3.4.

проз. update_abstractmethods ( клс )

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

Возвращает cls , чтобы разрешить использование в качестве декоратора класса.

Если cls не является экземпляром ABCMeta , ничего не делает.

Примечание

Эта функция предполагает, что суперклассы cls уже обновлены. Он не обновляет никаких подклассов.

Новое в версии 3.10.

Сноски

1

Программистам C++ следует помнить, что виртуальный базовый класс Python концепция отличается от 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.task()
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, поскольку он не является абстрактным методом.

Примечание : Мы не можем создавать экземпляры абстрактного класса. Выдает ошибку .


Заключение

Итак, сегодня в этом уроке мы поняли концепцию Абстракции в Python .

Если у вас возникнут дополнительные вопросы, обращайтесь в комментарии ниже.


Ссылки

  • Объектно-ориентированное программирование в Python,
  • Наследование в Python,

Абстракция в C++ | Руководство по типам абстракций с примерами

Абстракция — один из важнейших столпов объектно-ориентированного языка программирования C++. Концепция абстракции данных в C++ помогает программистам предоставлять внешнему миру только необходимую информацию, скрывая фоновые детали. Это наиболее широко используемый метод, основанный на разделении реализации и интерфейса кода. Абстракция данных помогает пользователю повысить гибкость кода, сводя к минимуму проблемы и проблемы.

Код:

 #include 
используя пространство имен std ;
класс Дополнение
{
частный : int p, q, r ; // объявление закрытых переменных p, q и r
public :    // публичная функция add() может использоваться любым внешним классом
отменить добавление ()
{
cout << "Пожалуйста, введите две цифры: " ;
cin >> q >> r ;
р = д + г ; // выполняем сложение и сохраняем итог в целочисленной переменной p
cout << "Сумма двух чисел: " << p << endl ;
}
} ;
основной ()
{
Добавить объявление ; // создание объявленного объекта класса «объявление»
объявление. добавить() ; // вызов метода add()
вернуть 0 ;
} 

Вывод:

Типы абстракции

Ниже приведены два типа абстракции:

1. Абстракция управления: В управлении детали реализации абстракции всегда будут скрыты и не будут видны.

2. Абстракция данных: При абстракции данных информация о данных в коде всегда будет скрыта.

Для реализации нашего собственного абстрактного типа данных (ADT) мы можем использовать классы. Мы используем объект cout класса выходного потока для потоковой передачи данных. Мы можем использовать спецификаторы доступа, такие как public, private и protected, чтобы скрыть объявление членов данных как private-public, или protected и скрыть их от внешнего мира по отдельности.

Примеры абстракции в C++

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

Пример #1

Абстракция данных с использованием классов.

Код:

 #include 
используя пространство имен std ;
class abstractClass // объявление класса
{
частный :
интервал х, у; // частные переменные x и y
общественность:
// метод для установки значений всех объявленных закрытых членов
void set ( int a , int b ) // объявление набора общедоступных функций
{
х = а ;
у = б ;
}
void display() // объявление функции display()
{
cout << " x  =  " << x << endl ;
cout << " y  = " << y << endl ;
}
} ;
основной ()
{
объект класса абстракции; // создание объекта объявленного класса
obj.set ( 110 , 250 ) ;
obj.display() ;
вернуть 0 ;
} 

Вывод:

В приведенном выше коде вы можете видеть, что мы объявили класс, известный как класс абстракции. В этом классе мы объявили две закрытые целочисленные переменные x и y. После этого мы объявили функцию set в спецификаторе публичного доступа, а также создали одну функцию display() в общедоступном режиме. Наконец, в основном классе мы создали объект абстрактного класса class под названием «obj». Мы использовали этот объект для вызова функции set and display для установки и отображения результатов.

Пример #2

Абстракция данных с использованием файлов заголовков.

Код:

 #include 
#include 
используя пространство имен std ;
основной ()
{
интервал х = 8 ;
целая мощность = 4 ;
int result = pow ( x , мощность ) ; // pow(n,power) — функция мощности для вычисления мощности
std :: cout << " Квадрат числа x равен: " << результат << std :: endl ;
вернуть 0 ;
} 

Вывод:

В приведенном выше коде вы можете видеть, что мы использовали файл заголовка math.h, чтобы мы могли использовать предопределенные математические функции в нашем коде. В этом коде мы объявили три общедоступные целочисленные переменные x, мощность и результат. После этого мы использовали std::out для вычисления квадрата заданного числа, а затем сохраняли их в целочисленном результате, которое мы объявили в начале кода.

Пример #3

Абстракция с использованием спецификаторов.

Код:

 #include 
используя пространство имен std ;
class Addition {    // объявление класса для программы
общественность:
// конструктор
Addition ( int i = 0 ) { // конструктор для одноименного класса
всего = я ;
}
// интерфейс с внешним миром
void numAdd ( int number ) { // добавляем функцию для добавления значений
всего += число ;
}
// интерфейс с внешним миром
intgetTotal() {
общая сумма возврата ;
} ;
частный :
// скрытые данные из внешнего мира
целая сумма ;
} ;
интервал основной () {
Добавить объявление ;
ad.numAdd ( 25 ) ;
ad.numAdd ( 35 ) ;
ad.numAdd ( 44) ;
cout << " Суммарное число равно  " << ad.getTotal() << endl ;
вернуть 0 ;
} 

Вывод:

В приведенном выше коде вы можете видеть, что мы объявили класс, известный как Addition. В этом классе мы объявили один конструктор с именем «Добавление», и внутри этого конструктора мы инициализировали значение нулем, а общее значение установлено в целочисленное значение «i».

Автор записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *