Абстракции (абстрактные типы и интерфейсы) — Framework Design Guidelines
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 2 мин
Абстракция — это тип, описывающий контракт, но не предоставляющий его полную реализацию. Абстракции, как правило, реализуются как абстрактные классы или интерфейсы, и они поставляются с четко определенным набором справочной документации, описывающей необходимую семантику типов, реализующих контракт. К некоторым из наиболее важных абстракций в .NET Framework относятся Stream, IEnumerable<T> и Object.
Платформы можно расширять, реализуя конкретный тип, поддерживающий контракт абстракции, и используя этот конкретный тип с API-интерфейсами платформы, которые используют абстракцию (работают с ней).
Содержательную и универсальную абстракцию, способную выдержать проверку временем, очень сложно спроектировать. Основная сложность заключается в получении правильного набора элементов — ни больше, ни меньше. Если абстракция содержит слишком много элементов, реализовать ее сложно либо даже невозможно. Если у вас слишком мало элементов для обещанной функции, она становится бесполезной во многих интересных сценариях.
Слишком большое количество абстракций в платформе также отрицательно сказывается на удобстве использования платформы. Часто бывает довольно трудно понять абстракцию, не зная, как она впишется в более полную картину конкретных реализаций и API-интерфейсов, работающих с абстракцией. Кроме того, имена абстракций и их элементов обязательно являются абстрактными, из-за чего их часто трудно или вовсе невозможно понять без более широкого контекста их использования.
Тем не менее абстракции обеспечивают весьма впечатляющую расширяемость, которую часто не могут обеспечить другие механизмы расширяемости. Они являются основой многих архитектурных шаблонов, таких как подключаемые модули, инверсия управления, конвейеры и т. д. Они также чрезвычайно важны для тестирования платформ. Оптимальные абстракции позволяют создать заглушки для сложных зависимостей при модульном тестировании. В целом абстракции отвечают за насыщенность современных объектно-ориентированных платформ.
❌ НЕ следует предоставлять абстракции, если они не проверяются путем разработки нескольких конкретных реализаций и API-интерфейсов, использующих абстракции.
✔️ При проектировании абстракции ПРИНИМАЙТЕ решение взвешенно, выбирая между абстрактным классом и интерфейсом.
✔️ Рассмотрите возможность предоставления сравнительных проверок для конкретных реализаций абстракций. Такие проверки должны дать пользователям возможность узнать, правильно ли реализован контракт в их реализациях.
Фрагменты: © Корпорация Майкрософт (Microsoft Corporation), 2005, 2009. Все права защищены.
Перепечатано с разрешения Pearson Education, Inc. из книги Инфраструктура программных проектов. Соглашения, идиомы и шаблоны для многократно используемых библиотек .NET (2-е издание), авторы: Кржиштоф Цвалина (Krzysztof Cwalina) и Брэд Абрамс (Brad Abrams). Книга опубликована 22 октября 2008 г. издательством Addison-Wesley Professional в рамках серии, посвященной разработке для Microsoft Windows.
- Рекомендации по проектированию на основе Framework
- Разработка с обеспечением расширяемости
Статья Гегеля Кто Мыслит Абстрактно?
Статья Г. В.Ф. Гегеля «Кто мыслит абстрактно?» в популярной и ироничной форме обосновывает парадоксальный тезис о том, что склонность к абстрактности отнюдь не специфический признак теоретического мышления, а напротив, она характерна для обыденного и крайне стереотипного мыслительногопроцесса. В кратком предисловии к статье, вопервых, приводятся сведения о времени ее написанияи русских переводах; вовторых, аргументируется необходимость ее повторной публикации.
Что Гегель называет абстрактным мышлением?
Это и называется «мыслить абстрактно» — видеть в убийце только одно абстрактное — что он убийца, и называнием такого качества уничтожать в нем все остальное, что составляет человеческое существо.
Кто мыслит абстрактно Гегель о чем?
В. Ф. Гегеля «Кто мыслит абстрактно?» в популярной и ироничной форме обосновывает па радоксальный тезис о том, что склонность к абстрактности отнюдь не специфический признак теорети ческого мышления, а напротив, она характерна для обыденного и крайне стереотипного мыслительного процесса.
Что такое абстрактное мышление философия?
Абстрактное мышление — это мышление об объектах, принципах и идеях, которых нет в физическом мире. С помощью абстрактного мышления мы связываем разные явления между собой и выстраиваем их в общую картину, чтобы использовать полученные выводы на практике.
Что такое абстрактное мышление примеры?
Пример абстрактного мышления — это возможность говорить, читать, писать, считать. В природе не существует ни цифр, ни букв — это абстрактные символы, которые придумали люди, чтобы обеспечить понимание. Ваш мозг включает абстрактное мышление, у Вас возникает образ холодильника и яблок.
Почему торговка на рынке мыслит абстрактно а ученый конкретно?
Абстрактно мыслит торговка на рынке, ибо она видит одну сторону целого, расхваливая свой товар. А тот, кто, как ученый, видит много сторон целого, тот мыслит конкретно. Это гегелевское понимание проблемы абстрактности позволило позднее марксистам говорить о методе восхождения от абстрактного к конкретному.
Что значит абстрактное отношение?
abstractio отвлечение, отделение) процесс мысленного отвлечения одних свойств и отношений вещей и явлений от других. А. отождествления выделяет общее свойство объектов путем установления отношения эквивалентности или равенства между ними …
Как происходит процесс абстракции?
Абстракция (образовано от латинского слова: abstractio — отвлечение, отделение, исключение). В процессе абстрагирования осуществляется выбор и обработка информации с целью замещения непосредственно данного эмпирического образа на другой, непосредственно не данный, но подразумеваемый и мыслимый.
Что такое конкретное мышление?
Конкретное мышление — вся мыслительная деятельность ограничивается конкретными суждениями, абстрактное мышление недоступно. Свидетельствует о слабоумии (врожденном или приобретенном) — подробнее см. тему «Патология интеллекта».
Что такое абстрактное понятие простыми словами?
Абстрактное понятие — высшая форма абстракции, но связанная с примитивной чувственной абстракцией.
Что значит думать абстрактно?
отвлечённо, без связи с реальными образами или фактами.
Каковы основные черты абстрактного мышления?
При абстрактном мышлении человек выходит за рамки привычной системы координат и правил мировосприятия, абстрагируясь от внешней действительности и пытаясь сконцентрироваться исключительно на донесении-восприятии мысли или идеи.
Что такое наглядно действенное мышление?
Наглядно—действенное мышление — вид мышления, опирающийся на непосредственное восприятие предметов в процессе действий с ними. Основная характеристика наглядно—действенного мышления определяется возможностью наблюдать реальные объекты и познавать отношения между ними в реальном преобразовании ситуации.
Что значит мыслить критически?
Мыслить критически — значит мыслить упорядоченно, системно, последовательно, организованно. Это требует наведения порядка в своих мыслях.
Какие есть виды мышления?
Все мы с вами знаем, что в психологии принято делить мышление на типы:абстрактное,логическое,абстрактно-логическое,наглядно-действенное, наглядно-образное,теоритическое и практическое.
Абстракция в 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 abstractionClass // объявление класса { частный : интервал х, у; // частные переменные x и y общественность: // метод для установки значений всех объявленных закрытых членов void set ( int a , int b ) // объявление публичного набора функций { х = а; у = б; } void display() // объявление функции display() { cout << " x = " << x << endl ; cout << " y = " << y << endl ; } } ; основной () { объект класса абстракции; // создание объекта объявленного класса obj. set ( 110 , 250 ) ; объект.дисплей () ; вернуть 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». затем мы создали функцию «имя», чтобы продолжать добавлять число к общему количеству. Наконец, в основном классе мы создали объект класса Addition под названием «ad». Мы использовали этот объект для вызова именованной функции, чтобы передать в нее значение и начать добавление.
Заключение
Абстракция данных используется для повторного использования написанного кода и изменения внутренней реализации, не затрагивая исходный код, что помогает программисту защищать данные от внешнего мира. Абстракция данных играет решающую роль в предотвращении дублирования кода для повторного выполнения одной и той же операции.
Рекомендуемые статьи
Это руководство по абстракции в C++. Здесь мы обсуждаем введение в абстракцию вместе с типами и соответствующими примерами. Вы также можете ознакомиться со следующими статьями, чтобы узнать больше –
- Число Армстронга в C++
- Вложенный цикл в C++
- Строка в С++
- Обратная строка в C++
Эпизод об абстракции в вычислительном мышлении
Абстракция в вычислительном мышлении позволяет нам ориентироваться в сложности и находить актуальность и ясность в масштабе. Декомпозиция и распознавание образов разрушают комплекс, а абстракция определяет, как эффективно и точно работать с различными частями. Этот процесс происходит путем отсеивания лишнего и неактуального, чтобы выявить самое важное и связывающее каждую разложенную проблему.
«Но это же трубка». «Нет, это не так, — сказал я. Это рисунок трубки. Понял? Все изображения вещей по своей сути абстрактны. Это очень умно».
Абстракция на самом деле похожа на функцию избирательной фильтрации в нашем мозгу, которая блокирует нейронные сигналы, которыми мы постоянно бомбардируемся, чтобы мы могли осмыслить наш мир и сосредоточиться на том, что для нас важно. in Everyday Life
Еще один способ думать об абстракции — в контексте тех больших понятий, которые формируют наше представление о мире, таких как законы движения Ньютона, закон спроса и предложения или теорема Пифагора.
Все это требовало, чтобы люди, стоящие за ними, думали о больших, широких и сложных концепциях; разбить проблему и поэкспериментировать; и найти закономерности среди экспериментов; и, в конце концов, абстрагировать это конкретное знание, чтобы упаковать его в эти бесплодные утверждения, которые укрывают нас от сложности и трудностей, через которые пришлось пройти, чтобы прийти к этому закону.
Преподаватели используют абстракцию при просмотре обширных наборов данных об учащихся, чтобы сосредоточиться на наиболее важных цифрах и тенденциях. И преподаватели также используют его, помогая ученику выполнить задание. Дети могут бегать по классу или издавать громкие звуки, но они могут настроиться на то, чтобы сосредоточиться на том, о чем спрашивает нуждающийся ребенок, — пока, конечно, это не достигнет пикового уровня буйства и не потребуется вмешательство.
Примеры абстрагирования в учебной программе
Как и другие элементы вычислительного мышления, абстракция является неотъемлемой частью и может рассматриваться учащимися на протяжении всей учебной программы. Вот несколько идей.
Искусство английского языка Учащиеся резюмируют роман в рецензии на книгу.
Математика: Учащиеся проводят опрос сверстников и анализируют данные, чтобы отметить основные результаты, создать визуализацию и представить результаты.
Наука: Учащиеся разрабатывают законы и теоремы, рассматривая аналогичные формулы и уравнения.
Социальные науки: Учащиеся объединяют наиболее важные детали, изложенные в статьях о конкретном текущем событии, и составляют краткую информацию об этом событии.
Языки: Учащиеся создают личное руководство, которое указывает, когда использовать формальное и неформальное «вы» на уроках испанского языка или два глагола «знать» во французском языке, которые, заметьте, всегда приводили меня в замешательство.
Искусство: Учащиеся обобщают последовательности аккордов для распространенных музыкальных жанров в набор общих принципов, которые они могут передать.
Полное руководство по вычислительному мышлению для преподавателей
Это руководство, наполненное примерами с подключением и отключением, даст вам базовое понимание вычислительного мышления и уверенность при обсуждении этой темы со студентами.
Примеры абстракций в информатике
Абстракция в кодировании и информатике используется для упрощения строк кода до различных функций. Он скрывает основную сложность языка программирования, что упрощает реализацию алгоритмов и взаимодействие с цифровыми инструментами.