Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП-ГОТОВО.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
173.57 Кб
Скачать

«Объектно–ориентированное программирование»

  1. Объектно–ориентированный подход к разработке программного обеспечения: основные понятия, концепции и принципы

  2. Языковые средства описания классов и объектов, уровни видимости и их использование. Примеры на С++

  3. Способы создания и разрушения объектов. Конструкторы и деструкторы, их виды и порядок вызова. Примеры на С++

  4. Наследование: понятие, простое наследование, режимы наследования и их применение. Примеры на языке C++

  5. Полиморфизм и его реализация посредством раннего и позднего связывания. Примеры на языке C++

  6. Чисто-виртуальные методы и абстрактные классы. Примеры на языке C++

  7. Шаблоны классов: назначение и применение. Примеры на языке С++

  8. Перегрузка методов и операций: виды и применение. Примеры на С++

  9. Обработка исключений. Примеры на языке С++

  10. Библиотека STL: назначение, основные элементы

  11. Контейнеры STL: понятие, виды, основные операции, приемы использования

  12. Итераторы STL: понятие, виды, основные операции, приемы использования

1. Объектно–ориентированный подход к разработке программного беспечения: основные понятия, концепции и принципы.

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

Абстрагирование – это выделение наиболее важных, существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов.

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

Модульность – это св-во системы, связанное с возможностью ее декомпозиции на ряд внутренне сильно сцепленных, слабо связанных между собой подсистем (модулей). Иерархия — это ранжированная или упорядоченная система абстракций, расположение их по уровням.

К основным понятиям ОО подхода относятся: объект; класс; атрибут; операция; полиморфизм(интерфейс); компонент; связи.

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

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

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

Класс – это множество объектов, связанных общностью свойств, поведения, связей и семантики. Класс является абстрактным определением объекта и служит в качестве шаблона для создания объектов. Любой объект явл-ся экземпляром класса.

Атрибут – поименованное свойство класса, определяющее диапазон допустимых значений, которые могут принимать экземпляры данного свойства. У атрибута можно определить три возможных значения этого параметра. Public (общий открытый). Private (закрытый).Protected(защищенный). Операция – это реализация услуги, которую можно запросить у любого объекта данного класса. Операции отражают поведение объекта. Существуют четыре различных типа операций.

1)Операции реализации реал-ют некот. функции (процедуры). 2)Операции создания и уничтожения объектов. (конструкторы и деструкторы классов). 3)Атрибуты обычно бывают закрытыми или защищенными. 4) Вспомогательными называются операции класса, которые нужны для выполнения его обязанностей, но о которых др. классы не должны ничего знать. Это закрытые и защищенные операции класса.

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

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

Осн.типы связей: ассоциация, зависимость и обобщение.

Ассоциация – это семантическая связь между классами. Агрегация – более сильный тип связи между целым объектом и его частями (компонентными объектами). Существуют четыре возможных семантики для агрегации: агрегация типа «Безраздельно обладает»; агрегация типа «Обладает»; агрегация типа «Включает»; агрегация типа «Участник».

Мощность это число объектов одного класса, связанных с одним объектом другого класса.

2. Языковые средства описания классов и объектов, уровни видимости и их использование. Примеры на С++.

Важнейшим расширением для языка С является новый тип данных - class, который имеется в С++. Классы позволяют объединить в единый тип данных как данные-члены, так и функции члены. Классы могут предоставлять различные права доступа к различным членам и также ограничивают область видимости идентификаторов, которые в них определены. Синтаксис определения класса в С++ следующий:

Тип_класса имя_класса [ : базовые классы ] { список членов класса

} [ объекты ] ;

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

Как только класс создан, можно создать столько объектов этого класса, сколько захотите, а затем манипулировать этими объектами так, как если бы они являлись элементами, которые существуют в проблеме, которую требуется решить.

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

Пример создания экземпляра лампочки и запроса на включение:

Light lt = new Light(); lt.on();

В этом промере имя типа/класса - Light, имя этого обычного объекта Light - lt, а запросы, которые вы можете сделать для объекта Light - это включить его, выключить, сделать ярче или темнее. Вы создаете объект Light, определяя “ссылку” (lt) для объекта и вызываете new для запроса нового объекта этого типа. Для отправки сообщения объекту вы объявляете имя объекта и присоединяете его к сообщению запроса, разделив их (точкой).

В качестве типа класса могут быть использованы ключевые слова class, struct и union. Базовые классы - это список имен классов, разделяемых запятыми, элементы которых наследуются вновь определяемым классом. Доступ производного класса к наследуемым элементам родительского может указываться модификатором доступа - public, protected и private.

Пример описания класса:

class example { int value;public: example(){ value=1; } protected: int get_value(void){ return value; } private: int last_value(void);};

Модификатор доступа действителен для всех членов класса, которые расположены после него, до момента появления следующего модификатора доступа. Модификаторы доступа не могут комбинироваться. Модификатор доступа может быть неоднократно использован в описании класса. По умолчанию действует модификатор доступа private. Назначение модификаторов доступа раскрывает следующая таблица:

Атрибут доступа

Значение

public

Можно использовать как внутри класса, так и вне. Доступ извне осуществляется через имя объекта и оператор расширения области видимости.

private

Доступ только в пределах данного класса и классов друзей.

protected

Доступ внутри класса, его друзей, а также внутри классов наследников и их друзей.

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

3. Способы создания и разрушения объектов. Конструкторы и деструкторы, их виды и порядок вызова. Примеры на С++.

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

Конструктор – выделяет память для объекта и инициализирует данные-члены класса.

  • имя конструктора совпадает с именем класса;

  • конструктор не имеет возвращаемого значения (даже void);

  • классу без конструктора предоставляется конструктор по умолчанию;

  • при явно описанном конструкторе конструктор по умолчанию не генерируется;

  • конструкторы могут быть перегружены;

  • не могут быть описаны с ключевыми словами virtual, static, const, mutable, volatile;

  • не могут явно вызываться в программе;

  • частным случаем конструктора является конструктор копирования, у которого в аргументах передается ссылка на другой объект того же класса.

Деструктор – вызывается автоматически при разрушении объекта, его задача - освободить память и корректно уничтожить объект.

  • имя деструктора также совпадает с именем класса но предваряется символом тильда "~" (~имя_класса);

  • деструктор не имеет ни какого возвращаемого значения;

  • не может быть описан как static, const, mutable, volatile;

  • без явного задания генерируется деструктор по умолчанию;

  • могут быть описаны как virtual - у всех производных классов деструкторы автоматически будут виртуальными;

  • могут явно вызываться.

Объявление конструктора: ComplexType(); Определение пустого конструктора:

ComplexType() {}

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

ComplexType(double rePar, double imPar); /* Объявление… */

ComplexType(double rePar, double imPar) { /*…*/ }

Конструктор вызывается не для объекта класса, как другие функции-члены, а для области памяти. Для её преобразования ("превращения") в объект класса.

Конструктор копирования (пример):

class demo { char *p; public: demo(void) { p="NULL"; } demo(char* s){ p=s; }

demo(demo& demo_o){ p=o.p; } void out(void){ puts(p); }}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]