Разделы презентаций


Объектно-ориентированное программирование в С+

Содержание

Структура курса ООПГлава 1.Классы и объектыГлава 2.Наследование,полиморфизмГлава 3.Классы-шаблоны,БСШ*Приложение.Класс FacultyБСШ* – Библиотека Стандартных Шаблонов

Слайды и текст этой презентации

Слайд 1Буторина Наталья Борисовна
Объектно-ориентированное
программирование в С++
ООП

Буторина Наталья БорисовнаОбъектно-ориентированное программирование в С++ООП

Слайд 2Структура курса


ООП
Глава 1.
Классы и объекты
Глава 2.
Наследование,
полиморфизм
Глава 3.
Классы-шаблоны,
БСШ*
Приложение.
Класс Faculty
БСШ* –

Библиотека Стандартных Шаблонов
Структура курса           ООПГлава 1.Классы и объектыГлава 2.Наследование,полиморфизмГлава

Слайд 3inline-функции
Код тела функции задается в отдельном месте ОП.
При обращении к

функции компилятор
- запоминает определенную информацию для организации возврата в

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

Слайд 4inline-функции
Компилятор может выполнить подстановку
тела функции в место её вызова, если
определить

функцию как встраиваемую с
помощью ключевого слова inline

inline определение_функции

inline int sum2(int

a, int b)
{ return a+b;}

При вызове функции, например,
int x = sum2(5, 7);
компилятор выполнит
подстановку
фактических аргументов и тела функции
int x = 5 + 7;

inline-функцииКомпилятор может выполнить подстановкутела функции в место её вызова, еслиопределить функцию как встраиваемую спомощью ключевого слова inline	inline

Слайд 5Замечание.
inline-функциями имеет смысл
определять только небольшие функции, в
частности, без циклов

и оператора
switch.

Замечание.inline-функциями имеет смысл определять только небольшие функции, вчастности, без циклов и оператораswitch.

Слайд 6Область видимости
Операция :: называется операцией определения
области видимости(области действия).
Это двуместная операция

формата
имя_класса :: имя_ч/функции(ч/данного)
Существует и одноместная операция :: формата
:: имя_глобальной_переменной
int x

= 7; // глобальная переменная
void ff( int y)
{ int x = 1, z;
z = x + ::x;

}

//лок

лок

глоб

Область видимости Операция :: называется операцией определенияобласти видимости(области действия).Это двуместная операция формата	имя_класса :: имя_ч/функции(ч/данного)Существует и одноместная операция

Слайд 7Введение. Принципы ООП
ООП – технология разработки больших программ
Центральное понятие ООП

объект
Объект – это данные и операции(функции), их обрабатывающие, любого уровня

сложности.

Объект = данные + операции и функции,
их обрабатывающие

Введение. Принципы ООПООП – технология разработки больших программЦентральное понятие ООП объектОбъект – это данные и операции(функции), их

Слайд 8Причем в ООП наибольшее внимание уделяется не реализации объектов, а

связям между ними

Эти связи организованы в виде сложных иерархических

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

Слайд 9ООП базируется на 3-х основных принципах

1. Инкапсуляция
2. Наследование
3. Полиморфизм
ООП

ООП базируется на 3-х основных принципах 1. Инкапсуляция2. Наследование3. ПолиморфизмООП

Слайд 101. Инкапсуляция - сокрытие информации
Этот принцип предполагает создание пользовательских

типов данных, включающих как данные, так и операции и функции,

их обрабатывающие
Никакие другие данные не могут использовать эти операции и функции и наоборот
Контроль за санкционированным использованием данных и функций выполняет компилятор
Такие данные называются абстрактными в отличие от стандартных (встроенных) типов данных (int, char,...)
Механизм создания абстрактных типов данных осуществляется через понятие класса.

1. Инкапсуляция - сокрытие информации Этот принцип предполагает создание пользовательских типов данных, включающих как данные, так и

Слайд 112. Наследование – создание иерархии абстрактных типов данных
Определяется базовый

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

классы, сохраняющие
свойства и методы базового класса и
дополненные своими характерными
свойствами и методами.
2. Наследование – создание иерархии абстрактных типов данных Определяется базовый класс,содержащий общие характеристики(прародительский класс), а из него

Слайд 123. Полиморфизм - множественность форм
Это принцип использования одинаковых
имен функций и

знаков операций для
обозначения однотипных действий
В языке С++ полиморфизм используется в
двух

видах:

а) для обычных функций и операций над стандартными и абстрактными типами данных. Это так называемая «перегрузка функций и операций»;

б) для функций, определенных в иерархии наследования. Это так называемые «виртуальные функции».

3. Полиморфизм - множественность формЭто принцип использования одинаковыхимен функций и знаков операций дляобозначения однотипных действийВ языке С++

Слайд 13Язык С++ был создан в лаборатории Bell
Labs в начале 80-х

годов программистом
Бьярном Страуструпом в течение
нескольких месяцев путем добавления к
С аппарата

классов. Первый
компиляторы появились в 1985 г.

Буторина Н.Б., Матросова А.Ю., Сибирякова В.А. Основы технологии объектно-ориентированного программирования в языке С++

Литературы много. В НБ:

Язык С++ был создан в лаборатории BellLabs в начале 80-х годов программистомБьярном Страуструпом в течениенескольких месяцев путем

Слайд 14


КЛАССЫ И ОБЪЕКТЫ

КЛАССЫ И ОБЪЕКТЫ

Слайд 15п1. Определение класса. Сокрытие информации
Структура - это комбинированный тип данных,
один

элемент которого может включать произвольное
количество данных разных типов, которые называются
полями

структуры.

Формат определения структуры:

struct имя_структуры {поле1; поле2;...;};
п1. Определение класса. Сокрытие информацииСтруктура - это комбинированный тип данных,один элемент которого может включать произвольноеколичество данных разных

Слайд 16п1. Определение класса. Сокрытие информации
Например,

struct anketa

{char fio[25], faclt[10]; int group;};

Определение структуры обычно задается вне

функций,
в начале программы, как глобальное.

Определим переменную

anketa p;
strcpy(p.fio,”Петров”);
strcpy(p.faclt,”ФПМК”);
p.group = 1122;

anketa –
новый тип данных

п1. Определение класса. Сокрытие информацииНапример,  struct anketa    {char fio[25], faclt[10]; int group;};Определение структуры

Слайд 17Инициализация
Структуру можно инициализировать при
определении переменных

anketa s = { “Шарапов”, ”ЮФ”,

711};

Можно задать указатель на структуру

anketa *t;
t = &s;
t->group = 773;


Операция

-> называется «взять значение поля по адресу» или «разадресация»
ИнициализацияСтруктуру можно инициализировать приопределении переменныхanketa s = { “Шарапов”, ”ЮФ”, 711};Можно задать указатель на структуруanketa *t;t =

Слайд 18Определение класса базируется на понятии
структуры и имеет вид

class имя_класса {тело_класса};

Тело

класса содержит определение данных
класса –
член-данных
и объявление или определение

функций, их
обрабатывающих, –
член-функций
По иной терминологии ч/данные - свойства,
ч/функции - методы
Определение класса базируется на понятииструктуры и имеет видclass имя_класса {тело_класса};Тело класса содержит определение данныхкласса – член-данных и

Слайд 19const int MS = 255;
class String
{ char line[MS];

int len;
void Fill(const

char *);
int Len() { return len;}
void Print() { cout << line; }
char & Index(int i);
};

Здесь член-данные - line, len;
член-функции - Fill, Print, Len, Index.

Класс String

объявление

определение

объявление

определение

const int MS = 255;class String  { char line[MS];    int len;

Слайд 20Член-функции отличаются от обычных
функций следующим:
а) они имеют привилегированный доступ к

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

класс, т.е. они могут использоваться только с переменными этого класса через операцию ‘.’(точка);
в) член-данные могут располагаться в любом месте описания класса, они «видны» всем его член-функциям.
Член-функции отличаются от обычныхфункций следующим:а) они имеют привилегированный доступ к член-данным класса, т.е. используют их непосредственно;б) область

Слайд 21К сожалению,
Таким образом определенный класс мы использовать не сможем.

Единственное, что мы можем – это определить переменные этого типа

или указатель

Например,
String str1,*str;

str1.len =10;
‘String::len’ is not accessible -
«Переменная len из класса String недоступна»
К сожалению, Таким образом определенный класс мы использовать не сможем. Единственное, что мы можем – это определить

Слайд 22Типы доступа
Для того, чтобы работать с классом, для его
член-данных и

член-функций надо определить
тип доступа.
Существует 3 типа доступа:
private - член-данные и

член-функции доступны
только член-функциям класса;
protected - член-данные и член-функции
доступны член-функциям базового и
порожденного классов (гл. 2);
public - член-данные и член-функции
общедоступны.

Обычно бóльшую часть член-данных размещают
в части private - сокрытие информации,
а бóльшую часть член-функций – в public –
интерфейс с программой

Типы доступаДля того, чтобы работать с классом, для егочлен-данных и член-функций надо определитьтип доступа.Существует 3 типа доступа:private

Слайд 23Умолчание
Для классов по умолчанию считается
доступ - private (поэтому в нашем
примере

оказался тип доступа private для
всех член-данных и член-функций, т.е.
всё мы

«спрятали в капсулу». Отюда
термин “инкапсуляция”),
для структур, наоборот, - public.
УмолчаниеДля классов по умолчанию считаетсядоступ - private (поэтому в нашемпримере оказался тип доступа private длявсех член-данных и

Слайд 24const int MS = 255;
class String
{ char line[MS];

int len;

void Fill(const

char *);
int Len() { return len;}
void Print() { cout << line; }
char & Index(int i);
};

public:

Описания private и public могут стоять в любом месте описания класса и повторяться.

Теперь можно записать оператор
int m = str1.Len(); // функция Len() общедоступна

const int MS = 255;class String  { char line[MS];    int len;

Слайд 25Член-функции и операция ::
Вернемся к член-функциям:
две из них определены

в классе(Len и Print),
две объявлены(Fill и Index)
Определить объявленные функции можно

вне
класса, используя операцию ‘::’
Формат определения:
тип_возвращаемого_значения имя_класса ::
имя_функции (список_аргументов)
{тело_функции}
Член-функции и операция ::Вернемся к член-функциям: две из них определены в классе(Len и Print),две объявлены(Fill и Index)Определить

Слайд 26Определим вне класса функции,
объявленные в нём:
void String:: Fill ( const

char *s)
{ for( len = 0; line[len] != ‘\0’;

len++)
line[len] = s[len]; }

char & String:: Index( int i )
{ return line[i]; // функция возвращает i-ый // элемент строки
}

const означает -
s менять нельзя!

Определим вне класса функции,объявленные в нём:void String:: Fill ( const char *s) { for( len = 0;

Слайд 27?
Чем же отличаются член-
функции, определенные в теле
класса и вне его?

?Чем же отличаются член-функции, определенные в телекласса и вне его?

Слайд 28При определении в теле класса они получают неявно статус inline


(поэтому, если функция определена
в классе и содержит операторы цикла,
то компилятор

может выдать предупреждение о
возможной неэффективности).
Функциям, определенным вне класса, также
можно присвоить статус inline явно первым
словом
inline char & String:: Index(...){...}
При определении в теле класса они получают неявно статус inline (поэтому, если функция определенав классе и содержит

Слайд 29п2. Объект
Класс - это тип данных, а не объект
Определение.Объект

- это переменная, тип
которой – класс, и определяется он обычным
образом



void main()
{ String s1, s2, *s3; // s1, s2 - объекты, // s3 - указатель на объект.
}

Говорят также, что s1, s2 - экземпляры класса.
Для каждого из них будет отведена память по
255 + 4 байтов.
п2. ОбъектКласс - это тип данных, а не объект Определение.Объект - это переменная, типкоторой – класс, и

Слайд 30Размещение в памяти

Заметим, что указатель s3 пока не определен, т.е.

там тоже
грязь.
? - это грязь
4
4

Размещение в памятиЗаметим, что указатель s3 пока не определен, т.е. там тоже грязь.? - это грязь44

Слайд 31Работа с объектами
К ч/функции обращаемся так же,
как к полю

структуры (через ‘.’) !

void String:: Fill ( const char *s)

{ for( len = 0; line[len] != ‘\0’; len++)
line[len] = s[len]; }
Работа с объектамиК ч/функции обращаемся так же, как к полю структуры (через ‘.’) !void String:: Fill (

Слайд 32Заменим маленькую ‘о’ на большую в объекте s1
s1[0] = ’O’;





s1.line[0] = ‘O’;
// ошибка - s1 - это не

массив, // и операция [] в нем // не определена!

//ошибка - line – приватное
// ч/данное, в main(как и в других // внешних функциях) его // использовать нельзя!

Заменим маленькую ‘о’ на большую в объекте s1s1[0] = ’O’; s1.line[0] = ‘O’; // ошибка - s1

Слайд 33
Это верно - пока только так, через ч/функцию Index(int),

можно «добраться» до символа строки
cout

// s3 – указатель на строку s1

cout << s1.Len(); // Так можно получить длину строки

s3 -> Index(0) = ‘O’; // Используя функцию Index(int),
// заменим еще раз букву ‘о’ на ’О’

s3 -> Print(); // Вывод слова «Объект»

// ошибка - len приватное член-данное

Это верно - пока только так, через ч/функцию Index(int), можно «добраться» до символа строкиcout Print(); //

Слайд 34s3 = &s2; // теперь s3 -

указатель на объект s2

Эту связь удалили
И связали s3 с объектом

s2

s3 -> Index(s3->Len ()-1) = ‘.’; // Используя член-функции класса // Len () и Index() поставим
// в конце строки s2 символ '.'

.

s3 -> Print(); // вывод фразы “ класса String.”

s3 = &s2;    // теперь s3 - указатель на объект s2Эту связь удалилиИ связали

Слайд 35Динамический объект
s3 = new String;
s3 -> Print();
}
// Связь с

s2 разорвана!
s3 ->Fill(“Объект в динамической памяти”);

s3

// В динамической области(куче) берем память под
// поля объекта String.

Динамический объектs3 = new String;s3 -> Print(); }// Связь с s2 разорвана!s3 ->Fill(“Объект в динамической памяти”);

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика