Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
vstup.docx
Скачиваний:
26
Добавлен:
13.03.2016
Размер:
1.28 Mб
Скачать

Екзаменаційний білет № 7

1. Принципи об’єктно-орієнтованого програмування (парадигми програмування, поняття класу).

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

С течением времени акцент при разработке программ сместился от проектирования процедур в сторону организации данных. Набор связанных процедур вместе с данными, которые они обрабатывают, часто называют модулем. Новая парадигма программирования реализована в компиляторах языков ALGOL, Pascal и C). Сутью модульного (структурного) программирования является представление программы в виде совокупности взаимосвязанных процедур (или блоков) и тех данных, которыми эти процедуры (или блоки)

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

Для написания более сложных задач понадобился новый подход к программированию, которым и стал объектно-ориентированный подход (ООП). В методологии ООП решаемая задача представляется не в виде алгоритмической модели, а в виде совокупности объектов различных классов, которые обмениваются запросами.

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ

Модель объектно-ориентированного программирования основана на нескольких основополагающих концепциях.

Абстракция данных– это возможность определять новые типы данных, с которыми можно работать почти так же, как и с основными типами данных.

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

Для реализации этих двух основополагающих концепций в языке C++ используются классы.

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

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

В более общем смысле полиморфизм – это способность объектов различных классов отвечать на вызов функции сообразно типу своего класса.

КЛАССЫ

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

Класс позволяет управлять правами доступа к внутренним данных класса,представляя их как открытые (public), закрытые (private) и защищенные (protected). Класс устанавливает четко определенный интерфейс для взаимодействия объектов этого типа с остальным миром. Закрытые методы или данные доступны только внутри этого объекта. Вместе с тем открытые методы и данные, несмотря на то что они заданы внутри объекта, доступны для всех частей про-

граммы. Открытая часть объекта как раз и используется для создания интерфейса объекта с остальным миром.

Описание класса имеет следующий вид:

class <имя_класса>

{

//закрытые функции-члены и данные-члены класса

public:

//открытые функции-члены и данные-члены класса

} <список_объектов>;

В описании класса <список_объектов> не является обязательным. Можно объявить объекты класса позже, по мере необходимости. Хотя <имя_класса> также необязательно,но его обычно указывают. <имя_класса> становится новым именем типа данных, которое используется для объявления объектов этого класса.

Функции и переменные, объявленные внутри объявления класса, становятся членами этого класса. Переменные, объявленные внутри объявления класса, называются данными-членами этого класса; функции, объявленные внутри объявления класса, называются функциями-членами класса. По умолчанию все функции и переменные, объявленные в классе, становятся закрытыми для этого класса. Это означает, что они доступны только для других членов этого класса. Для объявления открытых членов класса используется ключевое слово public, за которым следует двоеточие. Все функции и переменные, объявленные после ключевого слова public, доступны и из других членов класса, и из любой другой части программы.

Пример объявления класса MyTimer, который реализует функции таймера:

class MyTimer

{

int t; //закрытый элемент класса

public:

int get_timer();

void set_timer(int num);

void add();

};

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

Хотя функции get_timer(), set_timer() и add() и объявлены в классе

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

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