- •1. Объектно-ориентированное программирование как методология проектирования программных средств.
- •1.2. Объект
- •Iarray a(10), b(25), c(45);
- •Int main(void)
- •2.1. Перегрузка имен функций
- •Int print(int);
- •Void print(int);
- •Int (*matrix)[10];
- •Void main(void)
- •Void incr(int &aa)
- •3.2 Объявление класса.
- •Имя_класса имя объекта;
- •Имя объекта. Имя элемента
- •Имя_объекта. Имя_метода( );
- •Имя класса *this;
- •Имя_класса (список формальных параметров)
- •Листинг 3.4
- •V_3d( double &X, double &y,double &z)
- •Void main(void)
- •Х:: х(const х&)
- •V_3d::v_3d(const v_3d& v1)
- •Void v_3d::print()
- •Сlass X
- •Void main (void)
- •4. Перегрузка операций
- •V_3d(double x1,double y1,double z1)
- •Void print();
- •Void main(void)
- •Void v_3d::print()
- •4.3.1. Использование дружественных функций при перегрузке операций
- •Void print();
- •Void main(void)
- •Void v_3d::print()
- •4.3.2.Особенности использования дружественных функций
- •Имя объекта. Имя_функции
- •Void f1( X& );
- •Void f2 ( X* );
- •Void main(void)
- •5. Производные классы
- •Int Bfunc( );
- •Int Xfunc( );
- •Int Efunc( X & x1 );
- •Istream
- •Iostream
- •Ifstream
- •С помощью манипуляторов – специальных операций, вставляемых непосредственно в поток вывода.
- •Int width( int w);
- •Int precision( int p);
- •Void main(void)
- •Void open(char* filename, int mode, int access);
- •If(!fout) {
- •7. Виртуальные функции
- •Circle a;
- •A.Build();
- •Virtual double a(double X)
- •Void main (void)
- •Void Graphics Object :: Build() { };
- •8.Шаблоны функций и классов
- •Void main(void)
- •Void Swap ( SwapType &X, SwapType &y)
- •Void main(void)
- •Int a, double b;
- •Int sloc,rloc;//начало и конец очереди
- •Void qput(t I); // помещение элемента в очередь
- •Int main(void)
- •1.Какой принцип ооп реализуется с помощью шаблонных функций и классов?
- •2.Когда целесообразно использовать шаблоны функций? Каков общий вид объявления шаблона функции?
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. НЕ ОБЪЕКТНО-ОРИЕНТИРОВАННЫЕ РАСШИРЕНИЯ С++.
