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

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

  • автор:

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

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

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

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

См. также

Примечания

  1. Абстракция данных (Бьерн Страуструп — Абстракция данных в языке С++)
  • Дополнить статью (статья слишком короткая либо содержит лишь словарное определение).
  • Найти и оформить в виде сносок ссылки на авторитетные источники, подтверждающие написанное.
  • Объектно-ориентированное программирование
  • Информатика

Wikimedia Foundation . 2010 .

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

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

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

Абстракция данных — популярная и в общем неверно определяемая техника программирования. Фундаментальная идея состоит в разделении несущественных деталей реализации подпрограммы и характеристик, существенных для корректного её использования. Такое разделение может быть выражено через специальный «интерфейс», сосредотачивающий описание всех возможных применений программы [1] .

См. также [ править ]

Примечания [ править ]

Основные принципы ООП: абстракция в программировании

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

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

Для чего нужна абстракция в программировании?

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

10 принципов ООП, о которых стоит знать каждому программисту

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

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

  1. Упрощение сложности: абстракция в программировании позволяет скрыть детали реализации и сосредоточиться на ключевых аспектах системы. Это помогает упростить понимание и поддержку кода.
  2. Модульность: возможность разбить систему на модули или классы, которые могут работать независимо друг от друга. Это способствует повторному использованию кода и улучшает масштабируемость проекта.
  3. Повышение безопасности: абстракция позволяет скрыть некоторые детали реализации, что делает код более безопасным и защищенным. Внешние компоненты не имеют прямого доступа к внутренним деталям объекта или системы.

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

В качестве примера реализуем абстрактный класс «Фигура» и его наследников на языке Java:

abstract class Shape < protected String color; public Shape(String color) < this.color = color; >// абстрактный метод для получения площади public abstract double getArea(); // абстрактный метод для получения периметра public abstract double getPerimeter(); // общий метод для вывода информации о фигуре public void printInfo() < System.out.println("Цвет: " + color); System.out.println("Площадь: " + getArea()); System.out.println("Периметр: " + getPerimeter()); >> class Circle extends Shape < private double radius; public Circle(String color, double radius) < super(color); this.radius = radius; >@Override public double getArea() < return Math.PI * radius * radius; >@Override public double getPerimeter() < return 2 * Math.PI * radius; >> class Rectangle extends Shape < private double length; private double width; public Rectangle(String color, double length, double width) < super(color); this.length = length; this.width = width; >@Override public double getArea() < return length * width; >@Override public double getPerimeter() < return 2 * (length + width); >> public class Main < public static void main(String[] args) < Circle circle = new Circle("Красный", 5.0); circle.printInfo(); System.out.println(); Rectangle rectangle = new Rectangle("Синий", 4.0, 6.0); rectangle.printInfo(); >> 

В этом примере абстрактный класс Shape содержит общие свойства и методы для всех фигур. У него есть абстрактные методы getArea() и getPerimeter() , которые должны быть реализованы в наследниках. Классы Circle и Rectangle наследуют абстрактный класс Shape и реализуют абстрактные методы в соответствии с логикой для каждой фигуры.

В методе main() создаются объекты Circle и Rectangle , которые вызывают метод printInfo() , чтобы вывести информацию о каждой фигуре, включая цвет, площадь и периметр.

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

Следите за новыми постами по любимым темам

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

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

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

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

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

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

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

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

В C ++ мы используем классы для определения наших собственных абстрактных типов данных (ADT). Вы можете использовать объект cout класса ostream для потоковой передачи данных на стандартный вывод следующим образом:

#include using namespace std; int main()

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

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

В C ++ мы используем метки доступа для определения абстрактного интерфейса для класса. Класс может содержать ноль или более ярлыков доступа —

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

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

Преимущества абстракции данных

Абстракция данных обеспечивает два важных преимущества —

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

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

Пример абстракции данных

Любая программа на C ++, где вы реализуете класс с общедоступными и частными членами, является примером абстракции данных. Рассмотрим следующий пример:

#include using namespace std; class Adder < public: // constructor Adder(int i = 0) < total = i; >// interface to outside world void addNum(int number) < total += number; >// interface to outside world int getTotal() < return total; >; private: // hidden data from outside world int total; >; int main()

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

Total 60

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

Стратегия проектирования

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

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

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

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