Бьерн Страуструп - Абстракция данных в языке С++ - Введение

ОГЛАВЛЕНИЕ

 

Введение

    В данной статье ставится цель показать как писать программы на С++,
  используя "абстракцию данных" (*2). В статье предлагается обсуждение
  каждой новой особенности языкa для помощи читателю в осознании места,
  занимаемого ею в общем проекте языка техники программированияб которую
  она предназначена поддерживать, ошибок и издержек, избежать которых
  она предназначенa помочь программисту. Однако поскольку данная статья
  не является руководством она не дает полной детализации примитивов
  языка; последнее может быть найдено в [3].

*1 Bjarnх Stroustrup Cand.Scient (Mathematic and Computer Scitnct) 1975
    Universit. Aarch Denmark. Ph.D (Computer Science). 1979
    Cambrigх University. AT&T Bell Laboratorie 1979
    - иследовательские интересы включают : распределенные вычислительные
      системы, моделирование, методология программирования, языки
      программирования. В настоящее время является членом Computer
      Scienc Researc Center, член АСМа и IEEE.
    (Рукопись получена 5 августа 1983 г.)

  *2 Замечание по названию С++ : ++ - знак операции инкремента в С, если
    этa операция применяется к переменной (обычно к индексу массива или
    указателю) значение переменной увеличивается так, чтобы указывать на
    следующий элемент. Название С++ было предложен Риком Маскитти (Rici
    Mascitti). С++ в дальнейшем следует рассматривать как уточняющее
    название, употребляемое либо по формальному поводу, либо во
    избежании двусмысленности. Среди посвященных С++ именуется С, а
    язык С, описанный в [1], "старым С". Более короткое обозначение С
    является синтаксической ошибкой. Оно также использовалось как
    название одного, не относящегося к теме статьи, языка. Ценители
    семантики С найдут, что С++ менее выразительном чем ++С, однако
    последнее не является приемлемым названием. Язык не назван D, так
    как является расширением С, а не попыткой решить некие проблемы
    изначально присущие базовой структуре языкa С. Название С++ отражает
    эволюционный характер изменений относительно старого С. Еще одну
    интерпретацию названия С++.(см. [2], Приложение.)

        Эволюционизируя из языка С [1] C++ прошел через несколько
      промежуточных этапов известных под общим названием "С с классами"
      [4,5]. Первоначальное Simula6 [6,7].
        Основным намерением являлось создание возможностей абстракции при
      проектировании больших систем и в то же время полезных в областях,
      где очень важны лаконичность С и его способность выражать
      низкоуровневые детали. В связи с этим было специально предусмотрено
      чтобы использование классов С, предоставляющих общий и гибкий
      механизм структурирования не приводило в сравнении со старым С
      к издержкам ни по памяти ни по времени исполнения.
        Зa исключением таких деталей как введение новых ключевых слов,
      С++ является надмножеством языка С. см. ниже #2."Реализация и
      совместимость". Язык полностью реализован и используется. Десятки
      тысяч строк код написаны и отлажены десятками программистов.

        Статья разделяется на три основные части :

      1. Краткое представление идеи абстракции данных.

      2. Полное описание возможностей, предоставляемых для реализаци этой
        идеи, при помощи небольших примеров. Это описание само по себе
        распадается на три секции :

        a. Базовая техника для упрятывания информации ; доступ к данным,
            размещения и инициализации. Классы, составляющие функции
            класса, конструкторы, перегрузки имен функций представлены
            начиная с #3. "Разграничение доступа к данным".

        b. Механизмы и техника создания новых типов с связанными
            операциями. Перегрузка знаков операций, преобразование типов,
            определяемых пользователем, ссылки и операции управления
            свободной памятью, представлены начиная с #8. " Перегрузка
            знаков операций и преобразование типов".

        c. Механизмы для создания иерархии абстракций для динамической
            типизации объектов и для создания полиморфных классов и функций.
            Производные классы и виртуальные функции представлены, начиная
            с #14."Производные классы".

        Пункты b и c не зависят непосредственно друг от друга.

      3. В заключение несколько общих замечаний по технике программирова-
        ния, реализации языка, эффективности, совместимости со старым С и
        сравнение с другими языками, начиная с #18. "Ввод и вывод".

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