Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу




Скачать 0.6 Mb.
Название Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу
страница 1/4
Дата публикации 24.05.2014
Размер 0.6 Mb.
Тип Учебно-методическое пособие
literature-edu.ru > Математика > Учебно-методическое пособие
  1   2   3   4
БЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

МЕХАНИКО-МАТЕМАТИЧЕСКИЙ ФАКУЛЬТЕТ

Кафедра численных методов и программирования

И. Н. Блинов, В. С. Романчик

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

Учебно-методическое пособие

по курсу «МЕТОДЫ ПРОГРАММИРОВАНИЯ»

для студентов механико-математического факультета

МИНСК БГУ

2005

УДК 004.43(075.8) ББК 32.973.26-018.1я73 Б69

Рекомендовано

Ученым советом механико-математического факультета 29 марта 2005 г., протокол № 5

Рецензенты:

кандидат физико-математических наук, доцент И. М. Галкин; кандидат физико-математических наук, доцент C. В. Суздаль

Блинов, И. Н.

Б69 Объектно-ориентированное программирование на языке С+

учебно-метод. пособие для студ. механико-матем. фак. / И. Н. Бли­нов, В. С. Романчик. Мн.: БГУ, 2005. - 57 с. ISBN 985-485-498-1.

В пособии рассматриваются вопросы, относящиеся к использованию тех­нологии объектно-ориентированного программирования на языке C++. Описа­ние методологии построения и использования классов сопровождается много­численными примерами. Предназначено для студентов 2-го курса механико-математического факультета, изучающих курс «Методы программирования».

УДК 004.43(075.8) ББК 32.973.26-018.1я73

© Блинов И.Н.,

Романчик В.С., 2005
ISBN 985-485-498-1 © БГУ, 2005

ВВЕДЕНИЕ

Язык С++ был спроектирован и разработан в фирме Bell Laboratories (США) в 1983 г. как расширение языка С. Оператор инкрементирования «++» в действительности означает переноси­мость С-программ в среду С++. Разработчик языка Б. Страуструп кроме языка C называет еще один источник С++ - язык Simula67. Из него позаимствовано понятие «класса», соответствующего введенному пользователем типу, для которого обеспечиваются набор данных и операции над данными. Классы делают возмож­ным сокрытие данных, инициализацию данных, неявное преобра­зование типов, механизмы перегрузки операций. В настоящее время классы рассматриваются как реализация парадигмы объектно-ориентированного программирования (ООП), представ­ляющей собой технологию построения программ в виде мно­жества взаимодействующих объектов. Структура и поведение этих объектов описаны иерархическими классами - абстрактными типами данных с открытым интерфейсом и скрытой внутренней реализацией. В классах реализованы такие базовые принципы ООП, как:

  1. абстракция данных;

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

  2. инкапсуляция - в классах объединяются данные и методы
    (функции) для работы с этими данными, и только через методы
    возможен доступ к сокрытым данным класса;

4) полиморфизм - возможность использования одних и тех же методов при работе с различными объектами базового и порож­денных классов.

Существует несколько реализаций системы, поддерживающих стандарт С++, из которых можно выделить реализации Visual C++ (Microsoft) и Builder C++ (Inprise). Отличия относятся в основном к используемым библиотекам классов и средам разработки. В действительности в программах С++ можно использовать биб­лиотеки языка С, библиотеки классов С++, библиотеки визуаль­ных классов VCL (Builder C++), библиотеку MFC (Visual C++ и Builder C++).

Язык С++ является родоначальником множества объектно-ориентированных языков, таких как Java, C#, PHP и др.

Данное пособие предназначено для студентов начинающих изучать технологию ООП на основе С++.

КЛАССЫ. ПЕРВОЕ ЗНАКОМСТВО

Простейшее определение класса без наследования имеет вид: class имя_класса {

// по умолчанию раздел private - частные члены класса public: //открытые функции и переменные класса

};

Определение класса соответствует введению нового типа данных, а понятие переменной данного типа - понятию объекта (экземпляра) клас­са. Список членов класса включает определение данных и функций (те из них, чьи объявления находятся в описании класса, называются функция­ми-членами класса). В ООП для таких функций используется термин "методы класса". Классы могут также содержать определения функций, тело которых помещается в определение класса (inline-функции). Для инициализации/уничтожения объектов используются специальные функ­ции-конструкторы с тем же именем, что и класс, и деструкторы с именем класса, перед которым стоит символ "~".

Переменные, объявленные в разделе класса по умолчанию как част­ные (private), имеют область видимости в пределах класса. Их можно сделать видимыми вне класса, если поставить перед началом объявления слово public.

Обычно переменные в классе объявляются private-переменными, а функции - видимыми (public). Открытые функции-члены класса имеют доступ ко всем закрытым данным класса, через них возможен доступ к этим данным.

Классами в С++ являются также структуры (struct) и объединения (union). Отличием структуры и объединения от класса является то, что их члены по умолчанию открытые (public), а не закрытые. Это обеспечи­вает преемственность с языком C. Кроме того, структуры и объединения не могут наследоваться и наследовать.

В следующей программе определяется простейший класс Strtype, членами которого являются массив str типа char и функции set(), show(), get().

#include //пример 10 #include #include class Strtype{

char str[80]; //private public:

void set (char *);//задать str void show(); //вывести str char* get(); //вернуть str }; //конец определения класса void Strtype: :set(char *s) {// определение метода set() strcpy(str,s);}//копирование s в str void Strtype::show() {// определение метода show() cout<

char * Strtype::get() {// определение метода get() return str;} int main() {

Strtype obstr; //объявление объекта obstr.set("bel.university ");//вызов метода set() obstr.show();//вызов метода show() cout<<

while(!kbhit());//задержка выхода до нажатия клавиши return 0;

}

Вывод: bel.university

bel.university

Массив член-класса str является частным (private), доступ к нему возможен только через функции-члены класса. Такое объединение в классе сокрытых данных и открытых функций и есть инкапсуляция. Здесь obstr - объект данного класса. Вызов функции осуществляется из объекта добавлением к имени объекта имени функции, через точку или ->, если используется указатель на объект.

Приведем примеры нескольких объявлений объектов:

Strtype a; //объект a

Strtype x[100]; //массив объектов

Strtype *p; //указатель на объект

p=new Strtype; // создание динамического объекта

a.set("строка"); // вызов функций x[i].set("строка"); p->set("строка");

Оператор расширения области видимости "::" указывает доступ к элементам класса. Например, Strtype::set(char *s) означает принадлеж­ность функции set(char *s) области видимости класса Strtype. Кроме этого, оператор "::" используется для доступа к данным класса (оператор вида Strtype ::count) и указания внешней или глобальной области видимости переменной, скрытой локальным контекстом (оператор вида -globalName/

Следующая программа демонстрирует создание класса Stack на осно­ве динамического массива. Для инициализации объекта класса использу­ется метод Stack() - конструктор класса. #include // пример 11 #include #defineSIZE10

// объявление класса Stack для символов class Stack {

char *stck; // содержит стек int tos; // индекс вершины стека public: Stack(); //конструктор

~Stack(){delete [] stck;}//деструктор void push(char ch); // помещает в стек символ char pop(); // выталкивает из стека символ

};

// инициализация стека

Stack: :Stack(){

stck=new char[SIZE];//динамический массив

tos=0;

cout « "работа конструктора .…. \n";

}

// помещение символа в стек

void Stack::push(char ch){

if (tos==SIZE) {cout « "стек полон";return; }

stck[tos]=ch;

tos++;

}

// выталкивание символа из стека

char Stack::pop(){

if (tos==0) {cout « "стек пуст";return 0;}

tos--;

return stck[tos];

}

int main(){

/*образование двух автоматически инициализируемых стеков */

Stack s1, s2; //вызов конструктора для s1 и s2

int i;

s1 .

s1 .

s1 .

for(i=0;i<3;i++) cout<<"символ из s1:"<<3;i++) cout<<"символ из s2:"<

while(!kbhit());//задержка

return 0;

} Вывод:

Работа конструктора .…. Работа конструктора .…. Символ из s1:c Символ из s1:b Символ из s1:a Символ из s2:z Символ из s1:y Символ из s1:x

Конструктор Stack() вызывается автоматически при создании объек­тов класса s1,s2 и выполняет инициализацию объектов, состоящую из выделения памяти для динамического массива и установки указателя на вершину стека в нуль. Конструктор может иметь аргументы, но не имеет возвращаемого значения и может быть перегружаемым.

Деструктор ~Stack() выполняет действия, необходимые для коррект­ного завершения работы с объектом, а именно: в деструкторе могут освобождаться динамически выделенная память, закрываться соединения с файлами и др. Он не имеет аргументов. Именем деструктора является имя класса, перед которым стоит знак "~" - тильда.

Рассмотрим еще один пример класса, реализующего динамический односвязный список:

#include // пример 12

#include

struct Node{// объявление класса Node

8

int info; //информационное поле

Node* next; // указатель на следующий элемент

};

class List {// объявление класса List

Node* top; // указатель на начало списка public:

List(){ // конструктор top=0;

cout<<"\nkonstructor:\n";}; ~List(){// деструктор release();

cout<<"\ndestructor:\n";} void push(int);// добавление элемента void del() {// удаление элемента Node* temp = top; top = top->next; delete temp;} void show(); void release();// удаление всех элементов

};

void List::push(int i){

Node* temp = new Node;

temp->info = i;

temp->next =top;

top=temp;} void List::show() {

Node* temp=top; while (temp!=0) {

cout<info<<"->"; temp=temp->next;} cout<

List *p;//объявление указателя на LIst List st;//объявление объекта класса List

int n = 0;

cout « "Input an integer until 999:";

do {//добавление в список, пока не введено 999

cin » n; st.push(n);

} while(n != 999); st.show(); st.del(); p=&st; p->show();

while(!kbhit()); return 0;

}

Необходимо отметить, что некоторый класс ClassA может использо­ваться до его объявления. В этом случае перед испльзованием класса ClassA нужно поместить его неполное объявление:

class ClassA;

Важнейшим принципом ООП является наследование. Класс, который наследуется, называется базовым, а наследуемый - производным. В сле­дующем примере класс Derived наследует компоненты класса Base, точнее, компоненты раздела public, которые остаются открытыми, и компоненты раздела protected (защищенный), которые остаются закры­тыми. Компоненты раздела private также наследуются, но являются не­доступными напрямую для производного класса, которому доступны все данные и методы базового класса, наследуемые из разделов public и protected. Для переопределенных методов в производном классе дейст­вует принцип полиморфизма, который будет рассмотрен ниже. Объекту базового класса можно присвоить объект производного, указателю на ба­зовый класс - значение указателя на производный класс. В этом случае через указатель на базовый класс можно получить доступ только к полям и функциям базового класса. Для доступа к полям и функциям порож­денного класса следует привести (преобразовать) ссылку на базовый класс к ссылке на порожденный класс. #include <iostream.h> // пример 12 #include <conio.h> class Base {// определение базового класса

int i; //private по умолчанию protected:

int k; public:

Base(){i=0;k=1;} void set_i(int n); // установка i

int get_i(){ // возврат i return i;} void show(){

10

cout<<" "<

}; //конец Base

class Derived : public Base {// производный класс

intj; public:

void set_j(int n);

int mul(); //умножение i на k базового класса и на j производного }; //конец Derived

//установка значения i в базовом классе void Base::set_i(int n){

i = n;}

//установка значения j в производном классе void Derived::set_j(int n){ j = n;}

//возврат i*k из Base умноженного на j из Derived int Derived::mul(){ /*производный класс наследует функции-члены базового класса*/

return j * get_i()*k;//вызов get_i() базового класса

}

int main(){

Derived ob;

ob.set_i(10); //загрузка i в Base ob.set_j(4); // загрузка j в Derived cout « ob.mul()<

Base bob=ob;//присваивание объекта ссылке на базовой тип cout<

}

Переменная i недоступна в производном классе, переменная k до­
ступна, поскольку находится в разделе protected. В производном классе
наследуются также функции get i(), set_i() и show() класса Base из раз­
дела public. Функция show() позволяет получить доступ из производного
класса к закрытой переменной i производного класса. В результате выво­
дится 40 10 1 10.

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

11

КЛАССЫ И ФУНКЦИИ

При реализации класса используются функции-члены класса (мето­ды класса), функции-"друзья" класса, конструкторы, деструкторы, функции-операторы. Функции-члены класса объявляются внутри клас­са. Определение функции обычно размещается вне класса. При этом перед именем функции помещается операция доступа к области види­мости имя_класса::. Таким образом, определение функции-члена класса имеет вид:

тип имя_класса:: имя_функции (список аргументов) { } Определение функции может находиться и внутри класса вслед за его объявлением. Такие функции называются inline-функциями. Рассмотрим пример:

#include // пример 20 #include #include #include #define SIZE 255 class Strtype { char *p; int len; public:

Strtype(){// инициализация объекта, inline-конструктор p=new char [SIZE]; if(!p) {cout« "ошибка выделения памяти\n";
  1   2   3   4

Добавить документ в свой блог или на сайт

Похожие:

Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу icon Учебно-методическое пособие для студентов специальностей «История»
Шинаков Е. А., Поляков Г. П., Чубур А. А. Основы восточноевропейской археологии (учебно-методическое пособие). – Брянск, рио бгу,...
Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу icon Учебно-методическое пособие для проведения практических занятий для...
Методы научных исследований: учебно-методическое пособие для проведения практических
Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу icon Очная форма обучения учебно-методическое пособие для курсантов юридического профиля подготовки
Учебно-методическое пособие предназначено для курсантов юридического профиля подготовки специалистов (очной формы обучения) в Московском...
Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу icon Учебно-методическое пособие Н. Новгород
...
Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу icon Учебно-методическое пособие для студентов Нижний Новгород 2009
Темперамент, Характер. Воля: Учебно-методическое пособие для студентов. Н. Новгород: нгпу, 2009. 42с
Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу icon Соматопсихология учебно-методическое пособие по курсу «Соматопсихология»
Соматопсихология: Учебно-методическое пособие по курсу «Соматопсихология» – Ульяновск: УлГУ, 2005
Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу icon Конспект лекций по курсу "Информатика и использование компьютерных...
Конспект лекций предназначен для студентов филологического факультета и факультета гуманитарных и социальных наук рудн. Конспект...
Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу icon Учебно-методические материалы по курсу «Уголовно-исполнительное право»...
Учебно-методические материалы по курсу «Уголовно-исполнительное право» подготовлены на основе Уголовно-исполнительного кодекса Российской...
Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу icon План-конспект занятия; практикум; учебное пособие; учебник; учебно-методическое...
«образование сегодня: актуальный опыт, методическое обеспечение, инновационные подходы»
Учебно-методическое пособие по курсу «методы программирования» для студентов механико-математического факультета минск бгу icon Международные валютные отношения и валютный рынок Методическое пособие
Методическое пособие предназначено для студентов, обучающихся по специальности «Финансы и кредит» заочной формы обучения
Литература


При копировании материала укажите ссылку © 2015
контакты
literature-edu.ru
Поиск на сайте

Главная страница  Литература  Доклады  Рефераты  Курсовая работа  Лекции