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


 

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

83418. Микола Трублаїні «Тико і Волохан» 30 KB
  Вибіркове читання оповідання Ю. Про той холодний край людей які живуть там письменник розповів у своїх оповіданнях. Вступова бесіда до оповідання З оповідання Миколи Трублаїні ми дізнаємося про життя людей у тундрі на березі холодного Північно-Льодовитого океану.
83419. Леся Українка і її вірші для маленьких. Робота з дитячою книжкою 253.5 KB
  Мета: ознайомити дітей з життям і творчістю Лесі Українки, її творами для малят; удосконалювати навички виразного усвідомленого читання; формувати вміння зв’язно, послідовно передавати почуте; розвивати пізнавальну активність школярів, усне мовлення, естетичні смаки; збагачувати словниковий запас учнів...
83420. А. Барто «Лебединое горе». Пословицы. Е. Благинина «Елка». Загадки 44.5 KB
  Работать над содержанием произведений. Формировать навыки выразительного чтения. Развивать познавательный интерес, связную речь, мышление, умение анализировать. Обогащать словарный запас. Воспитывать любовь к природе, желание приходить на помощь, сочувствие к чужому горю; чувства любви и дружбы.
83421. «Риторика та поезія» С.Я. Маршак 28.5 KB
  Реалізувати пропедевтичні знання про поетичну творчість дитячого поета С.Я. Маршака через методи інтерактивного навчання, розвивати уміння відрізняти риторичні не словесні засоби спілкування від літературних (поетичних)засобів, закріплювати уміння декламувати вірш з риторичними засобами...
83422. Здається, байка просто бреше, а справді ясну правду чеше. Л.Глібов «Лебідь, Щука і Рак», «Коник-стрибунець» 37 KB
  Ознайомити дітей із жанром байки; розвивати способи і види читання байки вчити передавати в інтонації характери дійових осіб оцінювати їхні вчинки виявляти мотиви їхньої поведінки; виховувати в дітей товариськість любов до праці. Сьогодні ми ознайомимося з новим розділом Байки.
83423. У різні пори року приваблива земля 237.5 KB
  У зелених пишних шатах у яскравому вінку прийшла до нас весна. Не забула весна заглянути і в ліс посіяла там травицю пролісками заквітчала галявини задзвеніла піснями пташок. Весна стала господаркою і в нашому краї а земля дочекалася працелюбних рук.
83424. Два різних світи – одне ціле. Програма виховної роботи 340 KB
  Дорослішання сучасної молоді відбувається в складних умовах. Нестабільність сімейного інституту, неактуальність традиційної підготовки молоді до шлюбу диктують необхідність використання спеціальних заходів для надання допомоги дітям в усвідомленні своєї статевої приналежності, формування адекватного...
83425. Розважально-пізнавальна програма. Сім’Я. Сім’Я. Сім’Я 105 KB
  А зараз з великим задоволенням разом рушимо вперед. Кожному з вас доведеться сім разів проявити себе. Оскільки в сім’ї тільки починає складатися життєвий досвід дитини, тому, проявляючи своє Я, він має право звернутися по допомогу або до мами, або до тата, а, може, і до обох відразу.