10240

Основы объектно-ориентированного программирования

Лекция

Информатика, кибернетика и программирование

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

Русский

2013-03-24

48.5 KB

5 чел.

Основы объектно-ориентированного программирования. 

 ООП: Инкапсуляция, Абстракция данных, Наследование, Полиморфизм.

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

Пользователь не может использовать закрытые данные и методы. Реализуется с помощью ключевых слов: private, protected.

Одна из наиболее распространенных ошибок - делать сокрытие реализации только ради сокрытия. Целями являются: предельная локализация изменений при необходимости таких изменений, прогнозируемость изменений (какие изменения в коде надо сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.

Часто инкапсуляция может быть достигнута простейшими организационными мерами: знание того, что «вот так-то делать нельзя» иногда является самым эффективным средством инкапсуляции!

 Пример

class A 

{

 public:

  int a, b; //данные открытого интерфейса

  int ReturnSomething(); //метод открытого интерфейса

private:

  int Aa, Ab; //скрытые данные

  void DoSomething(); //скрытый метод

};

Класс А инкапсулирует свойства Aa, Ab и метод DoSomething, представляя внешний интерфейс ReturnSomething, a, b.

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

Абстракция(от лат. abstractio — «отвлечение») - отвлечение в процессе познания от несущественных сторон, свойств, связей предмета или явления с целью выделения их существенных, закономерных признаков; абстрагирование; теоретическое обобщение как результат такого отвлечения.

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

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

  Полиморфизм - взаимозаменяемость объектов с одинаковым интерфейсом.

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

Смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».

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

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

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

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

Типы наследования.

Различают:

- Простое наследование;

- Множественное наследование.

Простое наследование.

Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derived class).

Множественное наследование

При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого подхода в большей гибкости. Множественное наследование реализовано в C++.

Множественное наследование - потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имен методов в предках. Однако, если такая необходимость все-таки возникла, то для разрешения конфликтов использования наследованных методов с одинаковыми именами, возможно применить операцию расширения видимости -  «::» - для вызова конкретного метода конкретного родителя.

class A{    //базовый класс

};

class B : public A{    //public наследование

}

class C : protected A{    //protected наследование

}

class Z : private A{    //private наследование

}

В C++ существует три типа наследования: public, protected, private. Спецификаторы доступа членов базового класса меняются в потомках следующим образом:

- при public-наследовании все спецификаторы остаются без изменения.

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

- при private-наследовании все спецификаторы меняются на private.

Существуют следующие правила для разделов класса:

- Разделы могут появляться в любом порядке.

- Один и тот же раздел можно определять несколько раз.

- Если не определен ни один раздел, компилятор (по умолчанию) объявляет все элементы закрытыми.

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

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

- Класс может иметь несколько конструкторов.

- Класс может иметь только один деструктор, который должен объявляться в открытом разделе класса.

- Функции-элементы (в том числе конструкторы и деструкторы), состоящие  из нескольких операторов, должны определяться вне объявления класса.

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

 

4

PAGE  3


 

А также другие работы, которые могут Вас заинтересовать

4875. Алгоритмы сортировки в массивах. Сортировка методом пузырька, вставками, выбором. Сортировка Шелла 40 KB
  Алгоритмы сортировки в массивах. Сортировка методом пузырька, вставками, выбором. Сортировка Шелла. Под сортировкой будем понимать упорядочивание элементов в соответствии с некоторым выбранным правилом. В качестве правила упорядочивания может служить...
4876. Быстрая сортировка и способы ее реализации в программировании 72.5 KB
  Быстрая сортировка. Быстрая сортировка (quicksort) является одним из наиболее эффективных алгоритмов сортировки. В основе его лежит идея декомпозиции, т.е. поэтапного сведения исходной задачи к набору аналогичных, но более простых, вплоть до т...
4877. Пирамидальная сортировка и способы ее построения в программировании 73.5 KB
  Пирамидальная сортировка. Пирамидальная сортировка (heap sort) основывается на организации элементов в массиве по типу двоичного (бинарного) дерева. Двоичным деревом называют иерархическую структуру данных, в которой каждый элемент имеет не более дв...
4878. Сортировка внешних данных. Сортировка прямым слиянием 62 KB
  Сортировка внешних данных. Сортировка прямым слиянием. Сортировка слиянием основывается на том факте, что при наличии двух отсортированных последовательностей можно реализовать вычислительно эффективный способ их слияния в единую отсортированную пос...
4879. Сравнение эффективности алгоритмов сортировки 47.5 KB
  Сравнение эффективности алгоритмов сортировки. Каждый из рассмотренных алгоритмов сортировки обладает определенными преимуществами и недостатками. Для того, чтобы сравнивать между собой разные алгоритмы, необходимо сформулировать критерии, характери...
4880. Область видимости и время жизни переменных. Локальные и глобальные переменные. Статические переменные 49 KB
  Область видимости и время жизни переменных. Локальные и глобальные переменные. Статические переменные. Каждое имя в программе на С++ должно относиться к уникальной сущности –объекту, функции, типу или шаблону. Однако, это не означает, что оно м...
4881. Указатели на функции. Перегрузка функций. Шаблоны функций 61 KB
  Указатели на функции. Перегрузка функций. Шаблоны функций. Предположим, что нужно реализовать функцию сортировки массива строк с примерно таким прототипом: void sort( char beg, char end ) здесь beg и end являются указателями на начало и конец...
4882. Статические и динамические библиотеки 200.5 KB
  Статические и динамические библиотеки. Библиотеками называют сборники подпрограмм или объектов, как правило, ориентированных на решение набора близких по тематике задач. С точки зрения их организации и использования библиотеки бывают статическими ...
4883. Кодирование данных. Алгоритм Base64 41.5 KB
  Кодирование данных. Алгоритм Base64. Под кодом понимают определенную систему условных обозначений или сигналов, а процесс кодирования – это переход от одной формы представления информации к другой. При этом целью кодирования, как правило,...