Абстракция | это… Что такое Абстракция?
| В этой статье не хватает ссылок на источники информации. Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. |
Абстра́кция (от лат. abstractio — отвлечение) — отвлечение в процессе познания от несущественных сторон, свойств, связей объекта (предмета или явления) с целью выделения их существенных, закономерных признаков; абстрагирование; теоретическое обобщение как результат такого отвлечения.
В европейской философии и логике абстрагирование трактуется как способ поэтапного продуцирования понятий, которые образуют всё более общие модели — иерархию абстракций. Наиболее развитой системой абстракций обладает математика. Степень отвлечённости обсуждаемого понятия называется уровнем абстракции.
Содержание
|
Абстрактное понятие
Абстрактное понятие — высшая форма абстракции, но связанная с примитивной чувственной абстракцией. Начиная с одних чувственных свойств и выделения других чувственных свойств (примитивная чувственная абстракция) абстракция переходит от чувственных свойств предмета и выделение его нечувственных свойств, выраженных в отвлеченных абстрактных понятиях. Поэтому мысль может через отношения между предметами выявить их абстрактные свойства. Абстракция в своих высших формах является результатом раскрытия все более существенных свойств вещей и явлений через их связи и отношения. Существовало два учения об абстракции, то есть о том процессе, когда мышление переходит к абстрактным понятиям:
- абстракция эмпирической психологии — это учение сводило абстрактное лишь к чувственному,
- абстракция реалистической психологии — отрывало абстрактное от чувственного, утверждая, что абстрактное содержание порождается мыслью.

Но в действительности абстрактное и несводимо к чувственному, и неотрывно от него. Мысль может прийти к абстрактному лишь исходя из чувственного, то есть это движение мысли, которая переходит от чувственных свойств предметов к их абстрактным свойствам.
Абстрагирование
Абстрагирование — это мысленное выделение, вычленение некоторых элементов конкретного множества и отвлечение их от прочих элементов данного множества. Это один из основных процессов умственной деятельности человека, опирающийся на знаковое опосредствование и позволяющий превратить в объект рассмотрения разные свойства предметов. Это теоретическое обобщение позволяет отразить основные закономерности исследуемых объектов или явлений, изучать их, а также прогнозировать новые, неизвестные закономерности. В качестве абстрактных объектов выступают целостные образования, составляющие непосредственное содержание человеческого мышления — понятия, суждения, умозаключения, законы, математические структуры и др.![]()
Потребность в абстракции определяется ситуацией, когда становятся явными отличия между характером интеллектуальной проблемы и бытием объекта в его конкретности. В такой ситуации человек пользуется, например, возможностью восприятия и описания горы как геометрической формы, а движущегося человека — в качестве некой совокупности механических рычагов.
Виды абстракции
Некоторые типы абстракции:
- примитивная чувственная абстракция — отвлекается от одних свойств предмета или явления, выделяя другие его свойства или качества (выделение формы предмета, отвлекшись от его цвета или наоборот). В силу бесконечного многообразия действительности никакое восприятие не в состоянии охватить все её стороны, поэтому примитивная чувственная абстракция совершается в каждом процессе восприятия и неизбежно связана с ним.
- обобщающая абстракция — даёт обобщённую картину явления, отвлечённую от частных отклонений. В результате такой абстракции выделяется общее свойство исследуемых объектов или явлений.
Данный вид абстракции считается основным в математике и математической логике. - идеализация — замещение реального эмпирического явления идеализированной схемой, отвлечённой от реальных недостатков. В результате образуются понятия идеализированных (идеальных) объектов («идеальный газ», «абсолютно чёрное тело», «прямая», «сферический конь в вакууме» (из анекдота про идеализацию) и др.)
- изолирующая абстракция — тесным образом связана с непроизвольным вниманием, поскольку при этом выделяется то содержание, на котором сосредоточивается внимание.
- абстракция актуальной бесконечности — отвлечение от принципиальной невозможности зафиксировать каждый элемент бесконечного множества[источник не указан 747 дней], то есть бесконечные множества рассматриваются как конечные[источник не указан 747 дней].
- конструктивизация — отвлечение от неопределённости границ реальных объектов, их «огрубление».
По целям:
- формальная абстракция — выделение таких свойств предмета, которые сами по себе и независимо от него не существуют (форма или цвет).
Этот тип абстракции служит основой усвоения детьми знаний, описывающих предметы по их внешним свойствам, что служит предпосылкой теоретического мышления. - содержательная абстракция — вычленение тех свойств предмета, которые сами по себе обладают относительной самостоятельностью (клетка организма). Этот тип абстракции у учащихся развивает способность оперировать ими.
Абстрактное и конкретное
В диалектической логике понятие «абстрактное» противопоставляется конкретному, например, конкретное мышление — абстрактное мышление (см. Восхождение от абстрактного к конкретному). В диалектической логике понятие абстракция часто употребляется в негативном смысле: как нечто одностороннее, неразвитое, слишком оторванное от жизни, в отличие от конкретного.
Абстрактное мышление подразумевает оперирование абстракциями («человек вообще», «число три», «дерево», и т. д.), конкретное мышление имеет дело с конкретными объектами и процессами («Сократ», «три банана», «дуб во дворе», и т.
д.). Способность к абстрактному мышлению является одной из отличительных черт человека, которая, вероятно, сформировалась одновременно с языковыми навыками и во многом благодаря языку (так, нельзя было бы даже мысленно оперировать числом «три вообще», не имея для него определённого языкового знака — «три», поскольку в окружающем нас мире такого абстрактного, ни к чему не привязанного понятия попросту не существует: это всегда «три человека», «три дерева», «три банана» и т. п.).
Определение через абстракцию
Определение через абстракцию — способ описания (выделения, «абстрагирования») не воспринимаемых чувственно («абстрактных») свойств предметов путём задания на предметной области некоторого отношения типа равенства (тождества, эквивалентности). Такое отношение, обладающее свойствами рефлексивности, симметричности и транзитивности, индуцирует разбиение предметной области на непересекающиеся классы (классы абстракции, или классы эквивалентности), причём элементы, принадлежащие одному и тому же классу, неотличимы по определяемому таким образом свойству.![]()
Медицина
Ввиду некоторых физиологических особенностей головного мозга индивидуумов, у людей, которых имеются такие заболевания как Умственная отсталость, олигофрения, может отсутствовать или быть слабо выражено абстрактное мышление
См. также
- Абстракция данных
- Слой абстрагирования (уровень абстракции) в программировании
- Обобщение
- Мереологический нигилизм
Понятие абстрактного мышления. Виды абстракции
Философия, по мнению многих людей, это наука, которая характеризуется переливанием из пустого в пустое, как говорится. То есть в глазах обывателей философы делают только то, что рассуждают, без всякой пользы. Эта идея науки сложилась во многом благодаря ее непостижимости, благодаря использованию сложных специфических терминов и длинным, единообразным описаниям их значений. Между тем, многие философские понятия вполне уместны в обычной жизни. Например, абстракция. Это слово можно услышать очень часто. Более того, в разговорах люди используют его для обозначения абстракции или “туманности” того, что говорится.
Но что такое абстракция с научной точки зрения?
Что это такое? Определение
Название этого термина происходит от латинского слова abstraction, которое переводится на русский язык как «отвлечение».»Именно в этом и заключается суть этой философской концепции. Абстрагирование — это не что иное, как отвлечение, мысленный отход от изучаемого, изучаемого или обсуждаемого предмета, осуществляемый с целью выявления и выделения наиболее важных, значимых моментов, признаков, элементов путем обобщения. Проще говоря, это способ мысленно устранить ненужное, помочь сосредоточиться на главном. Кроме того, важность может быть как обобщена, так и детализирована. Также это понятие определяется как обобщение, достигаемое путем абстракции.
Какой может быть абстракция? Примеры в жизни
Как правило, категория воспринимается только как часть некоторых длинных диалогов. На самом деле, каждый человек прибегает к ней ежедневно и не один раз.
Самый простой пример — это ход мыслей, возникающий при взгляде на небо.
Каждый современный человек знает, что над его головой существует атмосфера, состоящая из нескольких чередующихся слоев. Всем известно, что он состоит из углекислого газа, кислорода и азота. Но что происходит в голове, когда смотришь вверх? Просто слово «небо.»Это пример естественной абстракции, которая не требует особых усилий. В этом случае в мозгу возникает отвлечение от известных человеку, смотрящему в небо, но в данный момент ненужных деталей и подробностей. То есть искомый элемент определяется и выделяется путем обобщения.
Если при взгляде вверх в мыслях появляется слово “облака», то это уже более сложная абстракция. Она предполагает не только обобщение, но и выделение конкретного, важного элемента. Впрочем, это тоже естественно, не требуя особых усилий. Люди в повседневной жизни также довольно часто видят примеры абстракции сознательного. В любом разговоре, в котором рассказчик прибегает к абстрактным аналогиям, чтобы что-то объяснить, эта категория задействована. То есть, если человек приводит пример случая из жизни, объясняя им, что он хочет сказать, он прибегает к абстракции и делает это сознательно.
Чем является абстрагирование? Определение
Примеры абстракции демонстрируют наличие определенных приемов в общении и, конечно же, способ мышления. Совокупность этого в философии называется абстракцией. Это понятие имеет два основных значения, которые связаны по смыслу, накладываются друг на друга. Первый определяет это понятие как сам процесс отвлечения или как метод, а второй-как метод. То есть абстракция-это использование метода отвлечения в процессе познания или объяснения, рассуждения.
Отвлечение происходит от всего незначительного, несущественного в определенный период времени, от ненужного, что мешает правильно понять суть. Результатом этого процесса является формирование абстрактного понятия.
Абстрактное и конкретное
Примеры абстракции, как содержательной, так и естественной, демонстрируют достижение определенного результата. Именно его называют в философии абстрактным понятием. Это может быть практически все, что угодно, лишенное четких деталей, таких как цвет, свет, кривизна, уродство или красота.
То есть если озвучить только результат абстракции, вне контекста, например, слово «небо», то у каждого человека будет свое понимание.
Другими словами, это понятие несет в себе смысл, имеет смысл, но не передает никаких точных характеризующих деталей, которые уточняют и сужают его. Именно наличием точных характеристик отличаются абстрактные и конкретные понятия. То есть если при получении информации ее можно воспринимать совершенно по-другому, то она абстрактна. Конкретная концепция не допускает различных интерпретаций, она предельно точна.
Виды абстракции
Как это ни парадоксально, эта категория имеет как четкую классификацию по назначению, так и весьма обширный и расплывчатый перечень условных типов. В соответствии с целью абстрагирования является:
- содержательной;
- формальной.
Содержательная форма подразумевает выделение частного через общее. То есть, вспоминая упомянутый выше пример, если при взгляде на небо в голову приходит слово «туча», то это содержательная абстракция.
Формальная же выделяет те элементы, которые сами по себе не существуют, например цвет. Формальная абстракция является основой в усвоении и передаче описаний внешних свойств, а также служит базой для теоретических размышлений.
К основным видам или же типам этой категории относятся:
- чувственная примитивная;
- обобщающая;
- идеализирующая;
- изолирующая;
- конструктивизирующая.
Отдельно ученые выделяют так называемую абстракцию действительной бесконечности. Она выделяется тем, что примеры абстрагирования основных типов можно встретить в повседневной жизни, но наблюдать этот вид невозможно. То есть эта философская категория является полностью теоретическим понятием. В чем его суть? Именно для того, чтобы мысленно отвлечься от аксиомы, что невозможно зафиксировать каждую из составляющих бесконечного множества. И тогда это множество станет конечным. Эта философская теория, хотя и напоминает утопию, очень серьезно рассматривается математиками.
Не исключено, что в будущем он все же будет востребован на практике, например, в процессе освоения космоса.
Что понимается под абстрактным мышлением?
Часто слышишь, как говорят о ком-то, что он мыслит абстрактными категориями. Более того, понятно, что речь идет о человеке, который не отличается обыденностью и обыденностью, о том, кто склонен мыслить и рассуждать без всякой ясности и конкретности. Но что в этом смысле понимается под философией? Абстрактное мышление-это, проще говоря, не что иное, как форма познавательной деятельности. То есть это тип мозговой деятельности человека, для которого характерно формирование конкретных абстрактных понятий и их дальнейшее функционирование.
То есть для индивида с таким типом мышления характерна абстракция картины восприятия окружающего мира, какого-либо явления или понятия. В рассуждении и диалоге он отходит от привычной системы правил и аксиом. Это позволяет передавать или получать информацию, идеи или мысли без излишнего напряжения, использовать символы и образы.
Однако, точность теряется, и, конечно, контекст или известный символ, необходимы для правильного понимания мысли.
В чем польза отвлеченных понятий и мышления?
Общее понятие абстракции, принятое в науке, вовсе не раскрывает практических преимуществ этого явления. Между тем, это необходимо для развития умственных способностей человека. Например, именно через абстракции и их сопоставление дети начинают познавать мир. Абстрактные понятия являются неотъемлемой частью психической деятельности человека. Они способствуют раскрытию связей и отношений между явлениями, объектами, элементами, понятиями. С помощью абстрактного мышления люди синтезируют существующие идеи и формируют новые типы взаимосвязей и отношений между рассматриваемыми объектами, тем самым развивая собственное сознание.
То есть с помощью отвлечения внимания происходит прогресс познавательной, умственной деятельности человека. Кроме того, абстракции неразрывно связаны с языковыми навыками. Изучение речи младенцев происходит с использованием этого типа мышления.
В искусстве
Не только философия, но и искусство характеризуется таким понятием, как “абстракция”. Картины многих известных художников написаны в этом жанре. Абстрактное искусство-это направление в искусстве, которое характеризует отказ от передачи чего-либо в виде реалистического отображения. В первую очередь это касается форм изображений в живописи и скульптуре. Однако любое произведение может быть абстрактным, например, рассказ, стихотворение, театральные декорации, костюмы и многое другое.
Основоположником этого жанра считается русский живописец Василий Кандинский, а первой абстрактной работой является его акварельная работа “Без названия”, написанная в 1910 году.
ГЛАВА 10
ГЛАВА 10
ПОНЯТИЕ АБСТРАКЦИИ
Абстракция позволяет собирать экземпляры сущностей в группы, в которых их общие атрибуты учитывать не нужно.
Два
виды абстракций в языках программирования — это абстракция процессов и данных.
абстракция.
концепция абстракции процесса один из старейших. Все подпрограммы абстракции процесса, потому что они предоставляют программе способ указать, что какой-то процесс должен быть выполнен, без предоставления подробностей о том, как это должно быть Выполнено.
Процесс абстракция имеет решающее значение для процесса программирования. Возможность абстрагироваться от многих деталей алгоритмов в подпрограмм позволяет создавать, читать и понимать большие программы.
Все подпрограммы, включая параллельные подпрограммы и обработчики исключений, абстракции процессов
ИНКАПСУЛЯЦИЯ
Инкапсуляция — это группа подпрограмм и данных, которыми они управляют
Ан инкапсуляция обеспечивает абстрактную систему и логическую организацию для набор связанных вычислений
Они часто помещаются в библиотеки и становятся доступными для повторного использования в других программах. чем те, для которых они написаны
ВВЕДЕНИЕ К АБСТРАКЦИИ ДАННЫХ
Ан абстрактный тип данных — это просто инкапсуляция, включающая только данные представление одного конкретного типа данных и подпрограмм, обеспечивающих операции для этого типа
Ан экземпляр абстрактного типа данных называется объектом
Объектно-ориентированный программирование является результатом использования абстракции данных КАК РЕЗЮМЕ ТИП ДАННЫХ
Все встроенные типы являются абстрактными типами данных, даже в FORTRAN I
Плавающая точка
Типы используют ключевую концепцию абстракции данных: сокрытие информации.![]()
ПОЛЬЗОВАТЕЛЬ ОПРЕДЕЛЕННЫЕ ТИПЫ РЕФЕРАТНЫХ ДАННЫХ
концепция определяемых пользователем абстрактных типов данных появилась относительно недавно
Они необходимо указать:
— А определение типа, которое позволяет программным модулям объявлять переменные типа, но скрывает представление этих переменных
— А набор операций по работе с объектами типа
Ан абстрактный тип данных
— представление или определение типа и операции содержатся в единая синтаксическая единица
— представление объектов типа скрыто от модулей программы, использующих тип, так что только прямые операции, возможные на этих объектах, являются теми, предусмотрено в определении типов
Программа единицы, использующие определенный абстрактный тип данных, называются клиентами этого тип.
А
Преимуществом сокрытия информации является повышенная надежность.
Это связано с тем, что клиенты не могут изменить
лежащие в основе представления объектов напрямую, либо намеренно, либо посредством
аварии, тем самым повысив целостность объекта
ДИЗАЙН ВОПРОСЫ
А средство для определения абстрактных типов данных в языке должно обеспечивать синтаксическая единица, которая может инкапсулировать определение типа и подпрограмму определения операций абстракции
Параллельно Pascal, Smalltalk, C++ и Java напрямую поддерживают абстрактные типы данных
Немного проблемы проектирования, выходящие за рамки инкапсуляции, заключаются в том, какие виды типов могут быть абстрактные должны быть ограничены, могут ли абстрактные типы данных быть параметризованы, и какие средства управления доступом предоставляются, и как такие средства управления указано
ЯЗЫК ПРИМЕРЫ
Simula 67
— Данные абстракция, хотя и неполная по определению, появилась в конструкции класса Симула 67.
— Simula классы являются динамическими в куче, что означает, что они создаются динамически в куче по запросу программы пользователя
—
Simula
Вклад 67 в абстракцию данных — инкапсуляция класса
построить.
— Переменные объявленные в классе Simula 67, не скрыты от клиентов, создающих объекты этого класса, нарушающие требование сокрытия информации определения абстрактного типа данных.
— Simula Классы 67s гораздо менее надежны, чем настоящий абстрактный тип данных, из-за нарушение.
— Несмотря на то что Конструкция класса Simula 67 обеспечивает инкапсуляцию, но не обеспечивает сокрытие информации.
Ада
— Ада предоставляет средства инкапсуляции, которые можно использовать для имитации абстрактных данных. типов, включая возможность скрывать их представления.
— конструкции инкапсуляции в Аде называются пакетов .
— Каждый пакет состоит из двух частей.
— Первый, это пакет спецификаций , который обеспечивает интерфейс инкапсуляции
— Второй, это пакет тела , который обеспечивает реализацию сущностей, назван в спецификации.
— пользователь может сделать объект видимым для клиентов или предоставить только
информация об интерфейсе.
Модуль-2
— модули Модулы-2 аналогичны пакетам Ады, поэтому они обеспечивают аналогичный уровень поддержки абстрактных типов данных
— Основное различие между ними состоит в том, что в Модуле-2 все типы, представления, скрытые в модулях, должны быть указателями.
С++
— В отличие от Ады и Модулы-2, которые обеспечивают инкапсуляцию, которая может используемый для имитации абстрактных типов данных, C++ предоставляет класс, который более непосредственная поддержка абстрактных типов данных
— данные, определенные в классе, называются членами данных ; функции, определенные в классе называются функций-членов .
— Классы может содержать как скрытые, так и видимые сущности.
Ява
— Java поддержка абстрактных типов данных аналогична C++
— Там однако есть несколько отличий, например, все пользовательские типы данных в Java классы и все объекты выделяются из кучи и доступны через ссылочные переменные и поддержка абстрактных типов данных в Java могут быть только определяется в классах
—
Ява
также включает пакеты в качестве одной из своих конструкций инкапсуляции.
ПАРАМЕТРИЗИРОВАННЫЙ РЕЗЮМЕ ТИПЫ ДАННЫХ
А параметризованный абстрактный тип данных означает, что тип данных является общим
Оба Ада и C++ допускают общие или параметризованные абстрактные типы данных
Эти общие типы считаются шаблонами
Абстрактные типы данных и функции абстракции
Лекция 8. Абстрактные типы данных и функции абстракцииМы заметили, что самое важное использование функция «комментарий» языков программирования заключается в том, чтобы предоставить спецификации поведения объявленных функций, чтобы программные модули можно использовать без проверки их кода (модульное программирование ).
Теперь рассмотрим использование комментариев в модулях реализаций .
Первый вопрос, который мы должны себе задать, — кто будет
прочитайте комментарии, написанные в реализациях модуля. Потому что мы собираемся
усердно работать над тем, чтобы пользователи модуля могли программировать модуль только для чтения
его интерфейс, очевидно, что пользователи не являются целевой аудиторией.
Скорее, цель
комментариев к реализации состоит в том, чтобы объяснить реализацию другим разработчикам или сопровождающим модуля.
Это делается путем написания комментариев, которые убеждают читателя в том, что реализация правильно реализует
его интерфейс.
Недопустимо копировать спецификации функций, найденных в интерфейсе модуля в модуль реализация. Копирование рискует внести несогласованность, поскольку программа развивается, потому что программисты не синхронизируют копии. Копирование кода и спецификаций является основным источником (если не , то основной источник) программных ошибок. В любом случае разработчики всегда могут посмотреть на интерфейс для Технические характеристики. Это эмпирическое правило может быть неудобным для те, кто использует устаревшие редакторы, которые не могут просматривать два файла одновременно, но отдача того стоит.
Таким образом, реализация
комментарии нужны только если есть детали
реализации, которые не очевидны читателю.
Например, если мы
см. следующую подпись и структуру,
очевидно, что структура реализует подпись и
таким образом, любой дополнительный комментарий в структуре был бы излишним:
тип модуля ВЫБЕРИТЕ = sig (* one_to_ten() — число от 1 до 10 *) val one_to_ten: единица измерения -> целое число конец модуль Выберите: ВЫБЕРИТЕ = структура пусть one_to_ten() = 7 конец
Комментарии к реализации делятся на две категории. Первый
категория возникает из-за того, что реализация модуля может определять новые типы и
функции, которые являются исключительно внутренними для модуля. Если их значение не
Очевидно, что эти типы и функции должны быть задокументированы примерно в том же стиле.
которые мы предложили для документирования интерфейсов. Часто по мере написания кода
становится очевидным, что новые типы и функции, определенные в форме модуля
абстракция внутренних данных или, по крайней мере, набор функций, который делает
смысле как самостоятельный модуль.
Это сигнал о том, что внутренние данные
абстракция может быть перемещена в отдельный модуль и
манипулировать только посредством его операций.
Вторая категория комментариев реализации связана с использованием абстракции данных ; эти комментарии находятся в центре внимания этой лекции. Предполагать мы реализуем абстракцию для набора натуральных чисел. Интерфейс может выглядеть примерно так:
тип модуля SETSIG = sig введите набор val пусто: 'набор val add : 'a -> 'набор -> 'набор val mem: 'a -> 'a set -> bool val rem : 'a -> 'набор -> 'набор val size: 'a set -> int val union: 'набор -> 'набор -> 'набор val inter: 'набор -> 'набор -> 'набор конец
В реальной подписи для наборов нам нужны такие операции, как map и fold , но давайте не будем усложнять. Есть много способов реализовать
эта абстракция. Один простой способ — это список целых чисел:
набор модулей: SETSIG = структура введите 'a set = 'список пусть пусто = [] добавим x l = x :: l пусть память x l = List.mem x l пусть rem x l = List.filter (fun h -> hx) l пусть размер записи l = сопоставить л с [] -> 0 | h::t -> size(t) + (если List.mem h t, то 0, иначе 1) пусть объединение l1 l2 = l1 @ l2 пусть inter l1 l2 = List.filter (fun h -> List.mem h l2) l1 конец
Эта реализация имеет преимущество простоты. Для небольших наборов, которые как правило, не имеют повторяющихся элементов, это будет прекрасный выбор. Его производительность будет плохим для больших наборов или приложений с большим количеством дубликатов, но для некоторых приложений это не проблема.
Обратите внимание, что типы функций в реализации не прописаны; они не нужны, потому что они уже присутствует в подписи, как и спецификации, которые также находятся в подписи и не должны быть реплицированы в структуре.
Откуда мы знаем
соответствует ли эта реализация своему интерфейсу SETSIG ? Это
может показаться, что нам нужно внимательно смотреть на каждый метод и все возможные
взаимодействия между методами.
Вот еще одна реализация SETSIG также используя int list ; эта реализация также верна (а также
медленно для больших наборов).
Обратите внимание, что мы используем один и тот же тип представления, но некоторые важные
аспекты реализации совершенно разные. Опять же, это немного
задача решить, что эта реализация действительно работает без дополнительных
Информация.
набор модулей: SETSIG = структура
введите 'a set = 'список
пусть пусто = []
добавим x l = если List.mem x l, то l else x :: l
пусть память x l = List.mem x l
пусть rem x l = List.filter (fun h -> hx) l
пусть размер l = List.length l
пусть объединение l1 l2 =
List.fold_left (fun a x -> if List.mem x l2 then a else x::a) l2 l1
пусть inter l1 l2 = List.filter (fun h -> List.mem h l2) l1
конец
Другой
реализация может использовать какую-то древовидную структуру (которую мы
покрытие позже в семестре).
Возможно, вы сможете придумать более сложные способы реализации наборов.
которые (обычно) лучше любого из них. Мы поговорим о проблемах
выбора хороших реализаций на лекциях
скоро появится.
Важная причина, по которой мы ввели написание спецификаций функций
было включить локальное рассуждение : как только у функции есть спецификация, мы можем судить
делает ли функция то, что она должна делать, не глядя на остальную часть
программа. Мы также можем судить, работает ли остальная часть программы без
глядя на код функции. Однако мы не можем локально рассуждать о
отдельные функции в трех только что приведенных реализациях модулей. Проблема
заключается в том, что у нас недостаточно информации о взаимосвязи между
конкретные типы (например, int list , bool vector ) и
соответствующий абстрактный тип ( набор ). Этот недостаток информации может быть
решается путем добавления в реализацию двух новых видов комментариев: абстракция функция и инвариант представления для абстрактного типа данных.
Пользователь любой реализации SETSIG не должен иметь возможности
различать их по поведению. Насколько может судить пользователь, эти
операции действуют как математический идеал множества как
просматривается через операции. Для исполнителя списки [3,1] , [1,3] и [1,1,3] различимы; к
пользователя первой реализации, все они представляют абстрактный
набор {1,3} и не может быть отличен с помощью операций
подпись SETSIG (обратите внимание, что вторая реализация
не допускает последнее из них как представление множества).
С точки зрения пользователя, аннотация
тип данных описывает набор абстрактных значений и связанных с ними операций; в
разработчики знают, что эти абстрактные значения представлены конкретными значениями
которые могут содержать дополнительную информацию, невидимую для пользователя. Этот
потеря информации описывается функция абстракции , которая является
отображение из пространства конкретных значений в абстрактное пространство.
Абстракция
Функция для первой реализации Set выглядит так:
Обратите внимание, что несколько конкретных значений могут отображаться в одно абстрактное значение; что
то есть функция абстракции может быть многие-к-одному . Также возможно, что
некоторые конкретные значения, такие как список [-1,1] , не сопоставляются ни с одним
абстрактное значение; функция абстракции может быть частичный .
Функция абстракции важна для принятия решения о том, является ли реализация
правильно, и поэтому он принадлежит в качестве комментария к реализации любого
абстрактный тип данных. Например, в модуле NatSet мы могли бы
задокументируйте функцию абстракции следующим образом:
: SETSIG = структура введите set = 'список (* Функция абстракции: список [a1;...;an] представляет * наименьший набор, содержащий все a1;...;an. Список может * содержат дубликаты. Пустой список представляет пустой набор.*) ...
Этот комментарий явно указывает, что список может содержать дубликаты, что, вероятно, полезно в качестве подкрепления первого предложения. Сходным образом, случай пустого списка упоминается явно для ясности. Функция абстракции для второй реализации, которая не допускает дублирования, намекает на важное отличие: мы можем написать функцию абстракции для это второе представление немного проще потому что мы знаем, что элементы различны:
набор модулей : SETSIG = структура
введите set = 'список
(* Функция абстракции: список [a1;...;an] представляет множество
* {а1;...;ан}. [] представляет пустой набор.
*)
... Другой вариант определения функции абстракции — дать
псевдокод, определяющий его; например, в случае первого
реализация Установите , мы могли бы написать:
(* Функция абстракции:
АФ([]) = {}
AF(h::t) = {h} U AF(t) (где «U» — математическое объединение множеств)
*) Обычно рекомендуется использовать английский язык, поскольку некоторые программисты находят
формализм труден и из-за возможности
путаница, когда нотация реализации (код OCaml) соответствует нотации
абстрактной области (в данном случае математики).![]()

*)
...