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


 

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

23359. Изучение влияние емкости конденсатора на период колебаний в электрическом контуре 179.5 KB
  Основы теории Рассмотрим процесс возникновения колебаний в идеальном электрическом контуре осцилляторе рис. Таким образом можно сделать вывод что частота гармонических колебаний в идеальном электрическом контуре равна корню квадратному из коэффициента при заряде q формула 2: При этом период колебаний равен формула Томсона: 6 Связь периода колебаний с величинами С и L качественно объясняется следующим образом. С увеличением...
23361. Списки та стрічки в Python 3.02 MB
  3 Дії зі списками 1.4 Методи роботи зі списками 1.1 Дожина списка 1.
23362. Функції в мові Пітон 300.73 KB
  Київ 2013 Завдання: Вивчення засобів роботи і принципів організації функції в мові Пітон.1 Функції параметри аргументи 1.2 Поверненне значення функції 1.
23363. Кортежі і словники 277.75 KB
  1 Загальні відомості 1.1 Загальні відомості 2.
23364. Робота с файлами 133.75 KB
  2 Порядок роботи с файлами 3. Методи роботи с файлом 4. Повний цикл роботи читаннязапису файла Індивідуальне завдання 1. Висновок: В даній лабораторній роботі я навчився працювати зі списками з методами роботи з файлами з режимами роботи с файлами.
23365. Юнікод 163.23 KB
  Робота с кодуванням в мові Пітон.2 Робота с Юнікодом в ручному режимі 2.3 Спрощена робота в Юнікод Індивідуальне завдання 1.
23366. Вивчення основ програмування на мові Python 562.41 KB
  Тексти програм на мові Python. Мета роботи Ознайомлення з основними типами даних в Python. Вивчення основ програмування на мові Python.
23367. Исследование термоэлектрического термометра 436.5 KB
  Произвести измерения термоЭДС на клеммах подключения термопары 1819 для значений указанных преподавателем. Рассчитать основную абсолютную погрешность прибора по формуле: где Eиtt0 – измеренное значение термоЭДС; Eдtt0 – действительное значение термоЭДС определяемое по градуировочной таблице с учетом введения поправки на температуру свободных концов. Рассчитать основную приведенную погрешность термопары по формуле: где Eвt0C и Eнt0C – значения термоЭДС соответствующие верхнему и нижнему пределам измерения температуры...