{lang: ‘ru’}

основы объектно ориентированного программирования, принципы объектно ориентированного программирования, методы класса оопВ этой статье я попытаюсь разъяснить Вам основы объектно ориентированного программирования.

Структуры и классы

Как говорилось ранее, структуры предназначены для объединения данных. Будем считать, что классы используются для объединения данных и функций. Хотя на самом деле в большинстве случаев структуры можно использовать так же, как и классы. Формально разница между структурами и классами в том, что по умолчанию все члены класса закрыты, а структуры — открыты.

Объекты программы и объекты реального мира

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

Простой класс

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

// smallobj.cpp
// демонстрирует простой объект
#include <iostream>
using namespace std;
//////////////////////////////////////////////////////////
class smallobj           // определение класса
{
private:
    int somedata;        // поле класса
public:
    void setdata(int d)// метод класса, который изменяет значение поля
    { somedata = d; }
    void showdata()   // метод, который отображает значение поля
    { cout << "Значение поля равно " << somedata << endl; }
};
//////////////////////////////////////////////////////////
int main()
{
    smallobj s1, s2;           // создание двух объектов класса smallobj
    s1.setdata(1066);          // вызовы метода setdata()
    s2.setdata(1776);
    s1.showdata();             // вызовы метода showdata()
    s2.showdata();
    return 0;
}

Результат работы программы выглядит следующим образом:

Значение поля равно 1076
Значение поля равно 1776

Определение класса

Определение класса в программе выглядит следующим образом:

class smallobj
{
private:
    int somedata;
public:
    void setdata(int d)
    { somedata = d; }
    void showdata()
    { cout << "Значение поля равно " << somedata << endl; }
};

Определение начинается с ключевого слова class, за которым следует имя класса. В данном случае это имя — smallobj. Подобно структуре, тело класса заключено в фигурные скобки, после которых нужно ставить точку с запятой (;) (конструкции, связанные с типами данных, такие как структуры или классы, нуждаются после своего тела в наличии точки с запятой в отличие от конструкций, связанных с передачей управления, например, функций или циклов).

Модификаторы доступа private и public (сокрытие данных)

Ключевым принципом объектно-ориентированного программирования является возможность скрытия данных. Этот термин понимается в том плане, что данные размещаются в классе и защищены от несанкционированного доступа к функциям, которые размещены вне класса. Если необходимо защитить любые данные, то их размещают внутрь класса с ключевым словом private. Такие данные доступны только внутри класса. Данные, описанные с ключевым словом public, наоборот, доступны за пределами класса.

Сокрытие данных означает ограждение данных от тех частей программы, которые не имеют необходимости использовать эти данные. В более узком смысле это означает сокрытие данных одного класса от другого класса. Сокрытие данных позволяет уберечь опытных программистов от ошибок. Программисты могут сами создавать средства для доступа к закрытым данным, что значительно снижает возможность случайного или некорректного доступа к ним.

Данные класса

Класс smallobj содержит всего одно поле данных somedata, имеющее тип int. Данные, которые находятся внутри класса, называются данными-членами или полями класса. Количество полей класса, как и структуры, теоретически может быть любым. Поскольку перед описанием поля somedata стоит ключевое слово private, это поле доступно только внутри класса.

Методы класса

Метод класса – функция, входящая в состав класса. Класс smallobj включает два метода: setdata() и showdata(). Как правило, скрывая данные класса, его методы оставляют доступными. Это объясняется тем, что данные скрывают с целью избежать нежелательного внешнего воздействия на них, а функции, работающие с этими данными, должны обеспечивать взаимодействие между данными и внешней по отношению к классу частью программы.

Поскольку оба метода описаны с ключевым словом pubic, они доступны за пределами класса.
Таким образом, метод setdata () принимает аргумент и присваивает полю somedata значение, равное значению аргумента. Второй метод, showdata (), отображает на экране значение поля somedata.

Использование класса

Теперь, когда класс определен, его можно использовать в функции main(). В первой строчке функции

smallobj s1, s2;

создаются два объекта класса smallobjs1 и s2. Создание объекта подобно созданию переменной: оно означает выделение памяти, необходимой для хранения объекта.

Следующие строчки осуществляют вызов метода setdata():

s1.setdata(1066);       
s2.setdata(1776);

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

 


Получайте новые статьи блога прямо себе на почту