Знакомство с классами всегда происходит сложно у большого числа студентов.
Для знакомства с классами я решил использовать обычное сложение двух чисел типа int.
Если я не ошибаюсь, самый распространённый пример, даваемый для ознакомления — демонстрация работы на основе геометрических фигур. Но на мой взгляд (сугубо личное мнение) задействование геометрических фигур никакой конкретики новичку не даёт.
Шаг первый: пишем пустую программу.
Шаг второй: объявляем класс.
Шаг третий: подгатавливаем класс, описывая внутри заявленного класса всё нужное для его работы.
Шаг четвёртый: работа с классом.
Теперь я подробнее расскажу про важные моменты в этом коде.
Проведу небольшую аналогию с типами данных. Когда вы объявляете нужные вам переменные, есть момент, где вы их задаёте, прописывая их тип, но ещё не написав названия переменных. Несмотря на отсутствие названий переменных, вами непосредственно объекты указанного типа уже задуманы.
Создается класс с помощью слова class, за которым следует открывающаяся и закрывающаяся фигурные скобки. После закрывающейся фигурной скобки обязательно ставится точка с запятой. Внутри фигурных скобок пишется вся информация для класса. Создание пустого класса продемонстрировано на втором шаге.
После создания пустого класса, внутри его ему прописывается вся информация для выполнения поставленной задачи.
Одна из особых сложностей в понимании новичками классаов — использование ключевых слов private, protected и public. В настоящий момент, в момент ознакомления, ключевое слово protected можно опустить: оно имеет смысл при наследовании, эту тему вы будете тзучать потом. Поэтому разберём private и public.
private и public — это ключевые слова, помогающие разделять доступ к внутренностям класса. Называются эти ключевые слова модификаторами доступа.
Что описано под private доступно только внутри класса. То, что описано под public, доступно по всей программе. Чем-то очень похоже на локальные и глобальные переменные.
Модификатор доступа в классе по умолчанию private, поэтому слово private в начале класса писать не обязательно. Ниже показаны две равнозначные записи:
Главный вопрос: "Что прописывать в private, а что в public?". Попробую описать.
На третьем шаге было определено так, что к деталям я отнёс переменные x и y. Поскольку они детали механизма моего будущего объекта, то доступа им на всю программу я не дал, прописав их в секции private (по умолчанию private, поэтому явно не написано). Вместе с этим, мне понадобилось описать две функции: одна обеспечивает ввод чисел, вторая складывает числа. Как ни крути, логично, что доступ к этим функциям мне нужен извне класса, поэтому я сделал обе функции доступными для всей программы. Т. е. из любого места программы я могу вызвать любую из этих функций и или ввести значения в переменные, сокрытые внутри класса, или выполнить расчёт суммы переменных, сокрытых внутри класса.
Так как класс всего-лишь идея, а конечной нашей целью является нечто существующее, основанное на этой идее, идею нужно воплощать в жизнь. Чтобы дать жизнь идее, нужно объявить объект.
Если у вас есть класс, но нет объекта, то вы как депутат голословный пустословите и обещаете, но на практике дел не делаете. Чтобы не быть "пустословом" обязательно создать объект, т. к. работать вы будете через этот объект. На четвертом шаге был приведён пример создания объекта.
По сути своей класс есть структура.
Чтобы обратиться к элементу внутри класса, нужно задействовать название объекта, воплотившего класс, и через точку написать название элемента, к которому обращаемся. Свободный доступ такого вида из вне класса возможен только для элементов класса, написанных в секции public.
На четвёртом шаге произошло обращение к функции, находящейся внутри класса, к функции summa. Обращение произошло через созданный объект. Поскольку две функции, описанные в классе, размещены в секции public, то в любом месте программы всегда можно задействовать объект для их вызова.
Первая функция — ввод данных. При вводе данных я вывожу на экран нужные для ясности диалоговые сообщения и считываю с клавиатуры нужные числа. Введённые числа запоминаются в переменные x и y, объявленные внутри класса. Напоминаю, что непосредственного доступа к этим x и y из программы у меня нет. Функция, описанная внутри класса и задействованная, выступает в роли посредника.
Вторая функция — сложение двух чисел. Вы прекрасно видите, что никаких аргументов в функцию я не передавал. Внутри класса я использовал переменные x и y, просто использовав названия воспроизвёл сложение.
Во время ввода данных введённые значения присвоились в переменные x и y, сокрытые классом. После этого присвоения любые функции того же класса могут свободно работать с переменными, как если бы эти переменные были самыми обычными, но любые функции классу не принадлежащие свободного доступа к этим переменным через объект класса иметь не будут.
В рассматриваемом в эитой статье примере функция summ_xy отдаёт сумму двух чисел, поэтому, чтобы можно было присваивать отдаваемый функцией результат в переменные, тип функции задан int.
Добавить комментарий