Объектно-ориентированное программирование. Понятие класса. Основные принципы
Выбери формат для чтения
Загружаем конспект в формате ppt
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Лекция 10
Объектно-Ориентированное
Программирование
Классы
Понятие класса
Основное понятие объектноориентированного программирования –
это понятие о классе.
Начальные определения:
Класс – это тип данных, определяемый
программистом, в котором
объединяются данные и функции их
обработки.
Начальные определения:
Конкретные переменные типа данных
«класс» называются экземплярами
класса или объектами.
Начальные определения:
Класс содержит константы и переменные,
называемые полями, а также
выполняемые над ними функции.
Функции класса называются методами.
Поля и методы являются элементами или
членами класса.
К основным принципам ООП
относятся:
1) Инкапсуляция – это объединение
данных и обрабатывающих их методов
внутри одного класса.
К основным принципам ООП
относятся:
Инкапсуляция автоматически подразумевает
защиту данных.
• Для этого в классе используется
спецификатор раздела private, содержащий
данные и методы, доступные только для
самого класса.
• Если данные и методы содержатся в разделе
public, они доступны извне класса.
• Раздел protected содержит данные и методы,
доступные из класса и любого его
производного класса.
К основным принципам ООП
относятся:
То есть элементы класса могут быть
частными (private), общими (public)
и защищенными (protected).
К общим элементам программа может
обращаться, используя оператор точку
(.).
К основным принципам ООП
относятся:
Все поля класса по умолчанию закрытые
(private), то есть программа,
использующая данный класс, не может
обратиться к данным класса.
Как тогда обратиться к данным класса, то
есть, как занести значения в данные
класса или вывести их значения?
К основным принципам ООП
относятся:
Для этого используются методы класса.
Методы класса должны быть
общедоступными (public).
То есть, методы класса делают
открытыми, и тогда с помощью этих
методов можно обращаться к данным
класса.
К основным принципам ООП
относятся:
2) Наследование – обозначает, что
объекты могут получать свои данные
и методы от других объектов
(которые в таком случае называются
объектами-предками).
К основным принципам ООП
относятся:
Эти данные и методы могут сохраняться
в неизменном виде, либо быть
изменены.
Кроме того, объекты-наследники могут
ввести в свой состав дополнительно
новые данные и методы.
К основным принципам ООП
относятся:
Наличие наследников позволяет говорить
об иерархии классов,
где есть
классы - родители - шаблоны
для создания
классов - потомков.
К основным принципам ООП
относятся:
3) Полиморфизм – подразумевает, что
методы различных объектов могут
иметь одинаковые имена, но отличаться
по своему содержанию.
Это получается в результате
переопределения какого-либо метода
объекта-предка в объекте-наследнике.
К основным принципам ООП
относятся:
В таком случае, при обращении к одному
и тому же методу в объекте-предке и в
объекте-наследнике может привести к
разным результатам.
Пример класса:
class EMPLOYEE
{
private: //закрытые члены класса
int emp_id;
// Номер служащего
char name[64];
// Фамилия служащего
float salary;
// Зарплата служащего
public: // открытые члены класса
void assign_values( int, char*, float); // прототип метода класса, который
заносит
// значения в переменные класса
void show_values(void)
// метод класса, выводящий информацию на
экран
};
{
}
printf("Employee_id: %d\n“, emp_id);
printf("Name: %s\n“, name);
printf("Salary: %f.2\n“, salary);
Пример класса:
Реализация метода – это тело метода
(функции).
Методы класса можно реализовывать как
внутри самого класса, так и вне класса.
• Метод void show_values(void)
реализован внутри
класса
• А у метода void assign_values( int, char*, float) в
классе описан только прототип, а сам он
релизован вне класса.
Пример класса:
// метод класса, который заносит значения в переменные класса, реализован вне класса
void EMPLOYEE::assign_values(int e_id, char
*e_name, float e_salary)
{
emp_id = e_id;
strcpy_s(name, e_name);
salary = e_salary;
}
Пример класса:
• ::
- оператор глобального разрешения,
показывает принадлежность метода данному
классу
• int e_id, char *e_name, float e_salary –
формальные параметры в заголовке метода,
при вызове метода из внешней функции
принимают фактические, т.е. конкретные
данные, с которыми и выполняется
реализация метода.
Пример класса:
//Работа внешней функции с классом
void program_1(void)
{
EMPLOYEE boss;
boss.assign_values(1, "Ivanov Ivan",50000.0);
boss.show_values();
}
Пример класса:
• Данные
можно также ввести с
клавиатуры, прочитать из файла, из
базы данных.
• Их можно вывести на экран, в файл, в
базу данных.
При создании класса реализацию метода
класса (тело самой функции) можно
включать в описание класса – тогда она
называется встраиваемой.
Если встраиваемых методов много, то
описание класса становится громоздким, это
неудобно.
И тогда в класс записывается только прототип
метода, а реализация метода выносится
пределы описания класса.
Вне класса перед именем метода надо писать
имя класса и оператор глобального
разрешения ::
void EMPLOYEE::assign_values(int e_id, char *e_name, float
e_salary)
Но если в программе используется
много классов и их методов тоже
много?
Тогда файл становится большим.
Значит, информацию нужно
распределить по нескольким файлам.
В Microsoft Visual Studio это реализовано
следующим образом:
Пример класса 2
Определить класс с именем STUDENT,
содержащий следующие поля:
•
•
•
Фамилия и инициалы
Номер группы
Средний балл
Определить методы доступа к этим
полям.
Алгоритм создания класса в
Visual Studio:
Создать класс STUDENT_CLASS следующим
образом:
Menu → Project Add Class → Generic C++
Class).
При этом создадутся 2 дополнительных файла:
1) STUDENT_CLASS.h – файл заголовок.
В этом файле должно помещаться
объявление (описание) класса.
Файл STUDENT_CLASS.h
#pragma once
class STUDENT_CLASS
{
public: // ===== Открытые методы класса
STUDENT_CLASS();
// Конструктор класса
~STUDENT_CLASS(void);
// Деструктор класса
// ===== Методы класса
void assign_values(char*, char*, float); // Метод класса, присваивающий значения
закрытым
void show_student(void);
данным класса
// Метод класса, выводящий на экран
значения закрытых данных класса
private: // ===== Закрытые данные класса
char FIO[64];
//=== Фамилия и инициалы
char Nomer[16]; //=== Номер группы
float SrBall;
//=== Средний балл
};
В языках программирования С/C++
#pragma once — нестандартная, но
широко распространенная
препроцессорная директива,
разработанная для контроля за тем,
чтобы конкретный исходный файл при
компиляции подключался строго один
раз.
2) STUDENT _CLASS. cpp - В этом файле
реализация конструктора,
деструктора и методов класса.
//Реализация метода класса, присваивающего значения закрытым
данным класса
void STUDENT_CLASS::assign_values(char
*st_FIO, char *st_Nomer, float st_SrBall)
{
strcpy_s(FIO, st_FIO);
strcpy_s(Nomer, st_Nomer);
SrBall = st_SrBall;
}
//Реализация метода класса, выводящего на экран значения закрытых данных
класса
void STUDENT_CLASS::show_student(void)
{
}
printf("FIO: %s\n“, FIO );
printf("Nomer: %s\n“, Nomer);
printf("SrBall: %.2f\n“, SrBall);
Внешняя функция, использующая класс
void program_2(void)
{
// Объявление экземпляра (объекта) Student_1 класса
STUDENT_CLASS
STUDENT_CLASS Student_1;
//=== Вызов метода класса, присваивающего значения закрытым данным
класса
4.9);
Student_1.assign_values("Petrov Petr", "PS181",
//=== Вызов метода класса, выводящего на экран значения закрытых данных
класса
}
Student_1.show_student();
Конец!