КУРС

ОСНОВЫ DATA SCIENCE

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

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

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

Что такое абстракции в программировании и зачем они нужны

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

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

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

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

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

Итак, абстракция в ООП простыми словами – это структурирование информации и удаление лишних деталей. Что это дает:

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

Пример

Возьмем язык программирования Java, и на нем реализуем абстрактный класс, допустим, «Фигура», то есть, Shape. Он будет содержать методы и свойства для всех вариантов фигур.

У класса Shape есть два метода, реализуемых в наследниках: «Площадь», то есть getArea() и «Периметр», то есть getPerimeter().

Также класс Shape наследуют классы Circle и Rectangle – они реализуют методы для каждой созданной фигуры. Для этого создают соответствующие объекты в методе main(). Они, через метод printInfo(), выводят данные о каждой создаваемой фигуре.

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

КУРС

ОСНОВЫ DATA SCIENCE

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

Интерфейс

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

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

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

У интерфейсов и абстрактов много схожего, но есть один важный момент: один класс может наследовать одновременно несколько интерфейсов. Но не наоборот.

Уровни абстракции в программировании

Рассматриваемая концепция подразумевает несколько уровней абстракций. Рассмотрим на примере кулинарного рецепта:

  • Наивысший уровень – действия с готовым блюдом (съедим сами, отправим на продажу, подарим соседям);
  • «Рабочий» уровень, тот, который интересен для реализации задач – список продуктов и действия с ними (сам рецепт);
  • Низкий уровень – как продукты попадают на кухню (купили, принесли родственники, украли со склада).

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

О языках с высоким уровнем абстракции

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

  1. Сверхвысокоуровневый – язык, в котором описывается только «что необходимо сделать». Используется для написания быстрых прототипов или одноразовых скриптов. К таким языкам относят AWK, Unicon, Ruby, 1C, Python, Perl, Haskell.
  2. Язык программирования с высоким уровнем абстракции. К таким относят все те же Ruby, Python и Perl, а также Паскаль, Java и JavaScript, C# и C++, Лисп, PHP, Fortran и Delphi.
  3. Низкоуровневый. Такие языки используют в машинных кодах, например, это группа Ассемблер, языки Форт, CIL.

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

Как рассчитать KPI менеджера по ключевым клиентам

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

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

  • суммарная прибыль от таких клиентов;
  • количество продаж;
  • коэффициент удержания клиентов;
  • общий объем контактов с клиентами;
  • количество новых клиентов.

Каждый показатель рассчитывают отдельно, по типовой формуле: (личный показатель менеджера/общий показатель)× 100%.

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

КУРС

ОСНОВЫ DATA SCIENCE

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