Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5fan_ru_Obektno-orientirovannoe_programmirovan...doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
351.74 Кб
Скачать

1.2. Объект

В самом общем смысле объект – это осязаемая реальность, имеющая четко выраженное поведение.

В программном обеспечении термин объект впервые введен в языке Simula и означал какой-либо аспект моделируемой реальности. Этот термин относился только к данным. Под объектом подразумевался участок памяти, в котором при выполнении программы будет храниться некоторое значение

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

Объект – это абстрактный тип данных, содержащий структуры данных и набор функций, обрабатывающих эти данные.

Рассмотрим пример - фрагмент программы на С++. Предположим, что нам нужно работать с объектами – массивами типа int.

Пусть в программе имеется следующее объявление:

Листинг 1.1.

class Iarray

{

int maxitems; //максимальное число элементов

int citems; //число элементов, размещенных в массиве

int *items; //указатель на массив

public:

//конструктор –функция создания объекта класса

Iarray(int nitems);

//деструктор - функция уничтожения объекта класса

Iarray();

// функция занесения элемента в массив

int putitem(int item);

// функция получения элемента из массива

int getitem(int ind,int &item);

//функция получения фактического числа элементов в массиве

int count() {return citems;};

};

Это объявление определяет не объект, а класс – новый тип с именем Iarray. В классе объявлены элементы-данные maxitems , citems, *items, описывающие свойства объекта и элементы-функции для работы с этими данными.

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

Чтобы создать объекты данного класса, следует записать:

Iarray a(10), b(25), c(45);

Здесь объявлено 3 объекта с именами a, b, c, каждый из которых занимает определенную область в памяти (каждый объект – свою область). Свойства этих объектов являются общими. Элементы-данные классы описывают такие общие свойства объектов, как:

  • максимальное количество элементов в массиве maxitems,

  • число элементов, размещенных в массиве citems,

  • адрес массива *items.

Элементы-функции класса реализуют алгоритмы обработки данных.

Таким образом, объект содержит в себе как данные, так и операции над ними.

1.3. Первая программа на С++

Листинг 1.2.

// Первая программа на С++

#include <iostream.h> // заголовочный файл содержит определения классов:

// ввода istream и вывода ostream

Int main(void)

{

int x;

float y;

char str[80];

cout <<” Введите целое число ”; //cout – имя стандартного потока вывода

cin >> y; //cin - имя стандартного потока ввода

cout <<” Введите число с дробной частью ”;

cin >> x;

cout <<” Введите строку ”;

cin >> str;

cout <<” Вы ввели числа: ”<< x <<”,”<< y <<”\n”;

cout <<” Вы ввели строку: ”<< str <<”\n”;

return 0;

}

Поясним, как выполняется ввод-вывод в этой программе. В С++ по-прежнему доступны функции ввода-вывода языка С, такие, как printf(), scanf() и другие, однако С++ обеспечивает иной, лучший способ выполнения этих операций. В С++ ввод-вывод выполняется с использованием операций, а не библиотечных функций. Операция ввода – это >>, ее еще называют операцией извлечения из потока, а операция вывода – это<<, ее называют также операцией вставки в поток. В С эти операции являются операциями побитового сдвига вправо и влево. В С++ они сохраняют первоначальное значение и, кроме того, используются и как операции ввода-вывода. Расширенное толкование << и >> является примером перегрузки операций. Перегрузка операций подробнее будет рассмотрена позже.

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

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

Абстракция данных означает возможность создания новых типов данных на базе существующих. В С++ поддерживается посредством определения классов.

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

Полиморфизм - возможность определить внутреннюю процедуру, исходя из типа данных.

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

Наследование – это процесс, посредством которого один объект может приобретать свойства другого. Точнее, объект может наследовать свойства другого объекта и добавлять к ним черты, характерные только для него. Наследование позволяет поддерживать концепцию иерархии классов и играет очень важную роль в ООП. В программе из листинга 1.2 наследование выражается в том, что классы ввода istream и вывода ostream являются наследниками класса iostream.

Более подробно перечисленные принципы ООП будут рассмотрены позднее.

Контрольные вопросы

1.Какое взаимодействие между подпрограммами поддерживают языки второго и третьего поколений?

2.Какие методы программирования были реализованы в языках третьего поколения?

3.Какова архитектура языков третьего поколения?

4.Какие языки называют процедурно-ориентированными?

5.В чем сущность методологии объектно-ориентированного программирования?

6.Какова архитектура программных систем на основе объектно-ориентированных языков?

7.Приведите определение объекта, используемое в языке С++. Что содержит в себе объект?

8.Как выполняется ввод вывод данных в программах на С++?

9.Дайте характеристику основных принципов ООП.

2. НЕ ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ РАСШИРЕНИЯ С++.

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