Личный кабинет

Объектно-ориентированное программирование для школьников

Как учить школьников объектно-ориентированному программированию
Олег Деревенец ( Пользователь )
Возможно, некоторым из тех, кто читает эту ветку, будет полезна краткая историческая экскурсия: кто и зачем придумал ООП? Что за зверь такой?

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

2. Процедурное (структурное) программирование.
В следующих поколениях компьютеров стековый механизм стал нормой, а языки высокого уровня уже поддерживали структурный подход, то есть разбивку программы на ряд подпрограмм (пока все это - в одном файле).

3. Модульное программирование.
Рост объема и сложности программ потребовал подключить к разработке больше людей. А для этого проект разбили на части, т.е. отдельные файлы – модули. Данные и процедуры, употребляемые лишь внутри модуля, «спрятали» там же, снабдив модули механизмом импорта-экспорта имен. Появились библиотеки.

3. Объектное программирование.
А программы все усложнялись и разбухали... Тьма данных, подобно саранче, расползалась по их телам. Вот бы загнать куда-то эти данные, изолировать их, не теряя общего контроля над ними! В чем-то объекты похожи на модули – и там, и тут большинство данных и процедур спрятано внутри, снаружи видно лишь то, что необходимо пользователю объекта. Но это – инкапсуляция – лишь один из трех механизмов ООП. Вся мощь идеи проявляется вкупе с двумя другими механизмами - наследованием и полиморфизмом.

Итак, каждый следующий этап развития технологий не отрицал предыдущий, а развивал и дополнял его. Кстати, я ни слова не молвил, ни об алгоритмах, ни о конкретных языках. Эта триада - алгоритмы, языки и технологии - соотносятся между собой как теплое с мягким, а мягкое со сладким. Триада взаимно ортогональна, как говорят у нас на хуторе (или почти ортогональна).
-----

Итак, возвращаясь к теме обсуждения. Подносить ли неокрепшим детишкам ООП, выдергивая его из цепочки технологий? Не будет ли это профанацией? После соответствующей подготовки – другое дело.

Впрочем, мотивация «зачинщиков» ветки мне близка и понятна, - ООП действительно «классная» (во всех смыслах) вещь!

Денис Кириенко ( Пользователь )
Цитата (Сергей Игнатьевич Циренщиков, 05.01.2011, 10:11) <{POST_SNAPBACK}>
Методика преподавания ООП отработана, дает результаты.
Ничего принципиально нового, изменяющего взгляд, в ветке не присутствует.


А вот мне неизвестна отработанная методика преподавания ООП. Более того, я не понимаю
а) что вкладывается в понятие "Преподавание ООП" для школьников. В чем именно проявляется объектная ориентированность в методике преподавания программирования?
б) нужно ли вообще ориентироваться на ООП в массовом обучении программированию.

Не могли бы Вы дать ответы на эти вопросы да и вообще рассказать, как лично вы преподаете ООП в школе?
Станислав Михалкович ( Пользователь )
Цитата (Денис Кириенко, 05.01.2011, 21:33) <{POST_SNAPBACK}>
А вот мне неизвестна отработанная методика преподавания ООП. Более того, я не понимаю
а) что вкладывается в понятие "Преподавание ООП" для школьников. В чем именно проявляется объектная ориентированность в методике преподавания программирования?
б) нужно ли вообще ориентироваться на ООП в массовом обучении программированию.


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

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

Для меня очевидно, что преподавание программирования с объектами изменилось за последние лет пять. Во-первых, стали использоваться в преподавании такие языки как Руби, Питон, Scratch, где явно или неявно есть объекты и их многочисленные методы. Считать или не считать это ООП - это дело договоренности. По моему мнению, использование объектов в программировании надо считать элементами ООП. Во-вторых, методики несомненно нарабатываются - и они не исчерпываются теми примитивными примерами с пользовательским интерфейсом и объектами для рисования, которые царствовали лет 7-10 назад.

А надо или не надо учить школьников объектам - так всё ж от целей зависит. Если готовить их к олимпиадам или к сдаче ЕГЭ - то 100 лет не надо - даже вредно. Если учить их решать задачи, связанные с моделированием каких-то процессов, или даже просто создавать с ними простую игру - то да, нужно.

Вот перевернутый вопрос: "надо ли ориентироваться на алгоритмы в массовом обучении программированию"? Я понимаю, что алгоритмы - это наше всё, и посягнуть на них - значит быть тут же сожженным на костре форума :) Но - тем не менее - обостряя совсем - не потому ли многие считают, что программирование не нужно поголовно, как раз из-за большого количества и излишней сложности именно алгоритмов - абстрактных и оторванных от жизни?

В любой реальности есть по меньшей мере еще один взгляд на вещи - я думаю, преподавательскому сообществу этот тезис должен быть близок.
Сергей Циренщиков ( Пользователь )
Коллеги!
Вот привязались и жуете...
--->
Методика преподавания ООП МНОЮ отработана, У МЕНЯ дает результаты.
Ничего принципиально нового ДЛЯ СЕБЯ, изменяющего МОЙ взгляд, в ДАННОЙ ветке не присутствует.

В такой редакции Вас, "серпентарий единомышленников", устроит?

Конечно, согласен со Станиславом. КАЖДЫЙ ВЫРАБАТЫВАЕТ СВОЮ методику.
Требуете объяснений КАК? А что это ВАМ даст?
С 1970 года, как пришел в школу после института, встречал ЕДИНИЦЫ учителей досконально следовавших чужим разработкам.
Любой ПЕРЕРАБАТЫВАЕТ под себя.
В двух словах: даю Паскаль. Для общеобразовательных Algo. Для специализированных - ABCPascal. И Free. Погружаемся в Lazarus.
Всё.
Если подробно:
В начале было Слово. Это слово было у Бога. ...

Рассказать в подробностях КАК - это писать книгу. А я этого делать не буду!

Станислав, только сейчас дошло...
ABC Pascal - Ваш?
Поздравляю. Вещь незаменимая, в определенных смыслах.
И полностью поддерживаю Ваш тезис, если правильно понял, - От процедурного к ООП! Но не наоборот.

На 61
Объекты появились гораздо раньше, чем принято считать.
А что назывались иначе, так от этого суть не меняется.
Виталий Потопахин ( Пользователь )
Цитата (Сергей Игнатьевич Циренщиков, 06.01.2011, 11:32) <{POST_SNAPBACK}>
Коллеги!
Вот привязались и жуете...
--->
Методика преподавания ООП МНОЮ отработана, У МЕНЯ дает результаты.
Ничего принципиально нового ДЛЯ СЕБЯ, изменяющего МОЙ взгляд, в ДАННОЙ ветке не присутствует.

В такой редакции Вас, "серпентарий единомышленников", устроит?

Рассказать в подробностях КАК - это писать книгу. А я этого делать не буду!


Если нет желание объяснять, зачем вступаете в разговор?
Если в ветке нет ничего нового для вас, зачем зашли на ветку?
Мы что же должны просто поверить и восхитится? Странный вы человек.

Цитата (Сергей Игнатьевич Циренщиков, 06.01.2011, 11:32) <{POST_SNAPBACK}>
Если подробно:
В начале было Слово. Это слово было у Бога. ...


Просто из любопытства. А бог это не случайно не Сергей Игнатьевич Циренщиков. У больно стиль у вас такой глаголющий.
Денис Кириенко ( Пользователь )
Цитата (Сергей Игнатьевич Циренщиков, 06.01.2011, 11:32) <{POST_SNAPBACK}>
Методика преподавания ООП МНОЮ отработана, У МЕНЯ дает результаты.
Ничего принципиально нового ДЛЯ СЕБЯ, изменяющего МОЙ взгляд, в ДАННОЙ ветке не присутствует.

В такой редакции Вас, "серпентарий единомышленников", устроит?

Конечно, согласен со Станиславом. КАЖДЫЙ ВЫРАБАТЫВАЕТ СВОЮ методику.
Требуете объяснений КАК? А что это ВАМ даст?


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

Вот вы написали про Паскаль, но так и ничего не написали про ООП. В чем же именно проявляется ООП? Какие задачи даете? Что принципиально меняется с введением ООП? Не хотите поделиться своим опытом?
Сергей Циренщиков ( Пользователь )
Цитата (Потопахин Виталий, 06.01.2011, 15:34) <{POST_SNAPBACK}>
Просто из любопытства. А бог это не случайно не Сергей Игнатьевич Циренщиков. У больно стиль у вас такой глаголющий.

Продравшись сквозь написанное Вами в этой строке, напоминаю "Если Вы говорите с Богом - это молитва". Но если Вам, хоть на мгновение, показалось что Бог говорит с Вами - это шизофрения!
Но успокойтесь! Я, это да, Да, таки НЕ ОН! И вовсе "не случайно"! (Двойное утверждение - не есть отрицание!)
Родился в грехе за Уралом, а в Ближневосточных палестинах никогда не был. Наш стройбат туда не посылали...
А стиль... - это от увлечения театром в студенческие годы.
Был, как говорили, неплохим резонером.
Если не понимаете в чем фишка: усиливаю и возвращаю настрой партнера.

По сути:
Мне кажется, нужно заранее приучать учеников к самим терминам ООП - тогда при переходе нет шока (культурологического).
Виталий Потопахин ( Пользователь )
Цитата (Сергей Игнатьевич Циренщиков, 06.01.2011, 19:52) <{POST_SNAPBACK}>
По сути:
Мне кажется, нужно заранее приучать учеников к самим терминам ООП - тогда при переходе нет шока (культурологического).


А откуда может быть шок. Что там такого необычайного. ООП это всего лишь технология для промышленного программирования. Согласен очень любопытная, но рассматривать переход к ней в культурологическом аспекте, это вы уже слишком загнули. И кстати почему вы считаете, что переход вещь неизбежная. Небольшие программы, даже логически очень сложные в ООП совершенно не нуждаются. ООП возникает в большом проекте и только там. Попробуйте привести пример небольшой содержательной программы, для которой ООП дает выигрыш в сравнении например с процедурным программированием. Например получается более короткая, более эффективная или более понятная программа. Очень сильно сомневаюсь, что вам это удастся.

Цитата (Олег Деревенец, 05.01.2011, 18:33) <{POST_SNAPBACK}>
Возможно, некоторым из тех, кто читает эту ветку, будет полезна краткая историческая экскурсия: кто и зачем придумал ООП? Что за зверь такой?

1. Эпоха первых ЭВМ.
2. Процедурное (структурное) программирование.
3. Модульное программирование.
3. Объектное программирование.

Итак, каждый следующий этап развития технологий не отрицал предыдущий, а развивал и дополнял его. Кстати, я ни слова не молвил, ни об алгоритмах, ни о конкретных языках. Эта триада - алгоритмы, языки и технологии - соотносятся между собой как теплое с мягким, а мягкое со сладким. Триада взаимно ортогональна, как говорят у нас на хуторе (или почти ортогональна).
-----


Сомнительное разбиение на этапы. Последовательное деление полагает, что следующий этап является более совершенным. А вы можете это показать? Это очень сомнительно. Это просто разные где-то пересекающиеся, где-то конкурирующие концепции, но никак не последовательность.

Еще одна ошибка это объединение в кучу процедурного и структурного программирования. Парадигма процедурного программирования требует определить набор процедур необходимых для решения задачи и затем скомпоновать из них решение. Парадигма структурного программирования требует использования структурных блоков, а это не обязательно процедуры. Структурная программа например на Турбо-Паскале вполне может не содержать ни одной процедуры, а структурная программа на Си состоять только из одной функции.

НА вашем хуторе живут по настоящему мудрые люди, но здесь они ошиблись, здесь нет никакой триады, в том числе и ортогональной.
Сергей Циренщиков ( Пользователь )
"Очень сильно сомневаюсь, что вам это удастся. "
И пытаться не буду. Вы абсолютно правы...
Олег Деревенец ( Пользователь )
Цитата (Потопахин Виталий, 06.01.2011, 20:21) <{POST_SNAPBACK}>
… Небольшие программы, даже логически очень сложные в ООП совершенно не нуждаются. ООП возникает в большом проекте и только там.


Уместное замечание. Не сошелся свет клином на ООП. Скажем, к примеру, в программировании микроконтроллеров ООП не используют.

Цитата (Потопахин Виталий, 06.01.2011, 20:21) <{POST_SNAPBACK}>
Сомнительное разбиение на этапы. Последовательное деление полагает, что следующий этап является более совершенным. А вы можете это показать?


Разумеется, нет. Первобытный –> рабовладельческий -> феодальный –> капиталистический строй. Историческая данность, что тут доказывать?

Цитата (Потопахин Виталий, 06.01.2011, 20:21) <{POST_SNAPBACK}>
Еще одна ошибка это объединение в кучу процедурного и структурного программирования...


Охотникам до научной казуистики это уточнение будет интересно. Но я в своем микро-экскурсе сознательно избегал малозначащих деталей.

Впрочем, мою главную ошибку - в нумерации пунктов - Вы не заметили. :)

Цитата (Потопахин Виталий, 06.01.2011, 20:21) <{POST_SNAPBACK}>
НА вашем хуторе живут по настоящему мудрые люди...


Спасибо, я передам хуторянам, им будет приятно. :rolleyes:


footer logo © Образ–Центр, 2019. 12+