Лада Кузенкова
сентябрь 2016.
205

Как бы вы могли наиболее доступным способом объяснить понятие "класс" в программировании?

Ответить
Ответить
Комментировать
0
Подписаться
0
2 ответа
Поделиться

Преподавая на курсах в Geekbrains, часто сталкивался с группами, где всё приходилось объяснять с совершенно нулевого уровня. Т.е. я не только мог бы наиболее доступным способом это объяснить, но и неоднократно делал это. Вот мой методический рецепт:

Когда дело доходит до классов, то у слушателей уже есть прочное понимание о переменных и о простых типах данных, и как минимум о массивах. Т.е. к этому моменту всем уже понятно, что программа умеет оперировать числами, строками и т.п, а также как она это делает.

Чтобы подойти к понятию класс, необходимо поставить аудиторию перед проблемой: как программа могла бы оперировать более сложными сущностями? Например, артефактами на игровом поле, игроками, людьми и т.д. 

  • Во-первых, необходимо, чтобы конкретное воплощение некой сущности могло бы помещаться в переменную. Например, если сущность — человек, то «Иванов» и «Сидоров» — это воплощения этой сущности, и должны мочь «сидеть» каждый в своей собственной переменной. 
  • Но так как, во-вторых, сущность описывается не единственным значением, а целым набором таковых, то в эту одну переменную должна помещаться целая структура, в которой можно отдельно обращаться к любому атрибуту.
  • В-третьих, надо подвести аудиторию к дифференцированию того, что простые типы пассивны (над ними выполняют действия: сложение, умножение, выделение подстроки и т.д.), а упомянутые выше воплощения сущностей — активны (Они ходят, прыгают, с чем-то сталкиваются с другими сущностями того же или иного рода. Действия над ними невозможно полностью систематизировать в синтаксисе языка, по этому достаточно просто иметь возможность описывать любые такие активности для этих сущностей).

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

Далее (опять же в зависимости от языка программирования) нужно показывать как сущность превращается в класс, воплощение сущности — в экземпляр класса (и в этот момент станет понятна роль конструктора если для рассматриваемого языка это актуально), совокупность значений, которые описывают сущность — в свойства, а то, что этот класс умеет делать (или над этим классом можно делать) — в методы класса.

2

Как сложно, как нудно, как неинтересно. Много воды и излишне умных слов. Бедные студенты.... Все можно было бы в миллион раз проще сказать.

+1
Ответить

Вы даёте оценку тому чего не было. Заметьте, вопрос был не "что такое «класс»", а о методике преподавания (как я его вижу). Методика намного нуднее и скучнее самого предмета, это правда. Это совсем другая область знания. Я не привёл здесь ни слова из фактического объяснения этого материала. Оно очень весёлое, и моих студентов в этом смысле жалеть не приходилось. :)

0
Ответить
Прокомментировать

В объектно-ориентированном программировании (OOP), под понятием class подразумевается prototype объекта. Программа представляет собой алгоритм, обрабатывающий и оперерующий данными, инкапсулированными в объекты; каждый из таких объектов подчиняется структуре, заданной прототипом. Благодаря этому становится возможным описывать алгоритмы на бумаге, понимать их, и даже обеспечивать должное взаимодействие.

Представим набор свойств объекта Book, то есть "книга":
- PageCount
- Author
- PubDate
- Publisher
- Genre
А теперь представим, сколько понадобилось бы одиночных переменных, что бы описать в коде программы или загрузить в память информацию о 100 разных книгах. Что бы решить эту проблему, объектно-ориентированное программирование предлагает понятие класса,  который реализует шаблон, или по-другому, прототип будущих объектов.

Сам же объект является воплощением прототипа, то есть хранит непосредственно данные, сформированные программой и сохраненные в его области памяти.

Другим примером понять, что такое class, будет обратиться к видеоиграм. В большинстве из таких каждый игрок/персонаж обладает набором общих свойств, таких как имя, здоровье, боезапас. Несмотря на очевидные визуально отличия между объектами разных игроков, в коде программы они все построены по одному и тому же прототипу, который описан классом. Визуальные отличия этих объектов (тем не менее) целиком и полностью являются следствием подчинения одному и тому же прототипу. Который игра умеет должным образом реализовывать, например, рисуя ник-нейм каждого игрока и показывая именно его текстуру.

Если алгоритм пишется для того, что бы создавать/обрабатывать/использовать разные объекты одного и того же шаблона, то сам class позволяет компилятору или интерпретатору представить блок данных, связанных с каждым объектом этого класса, в памяти компьютера. То есть классы нужны обоим - и программисту, и программе.

Dmitrij Igorevichотвечает на ваши вопросы в своейПрямой линии
1

Дмитрий, что-то вы были не в настроении писателя, как мне кажется. Написано сложнее, чем в некоторых учебниках. Даже я бОльшую часть с трудом осмыслила (именно пыталась с конструкциями ваших предложений справиться), что уж там говорить о новичках. 

Не знаю, что резко изменилось, раньше вы лучше писали. 

0
Ответить

Да. Не помню, действительно ли я это писал.

0
Ответить
Прокомментировать
Ответить