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

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

Как учить школьников объектно-ориентированному программированию
Станислав Михалкович ( Пользователь )
Ну, давайте тогда договоримся об определениях.

Будем называть объектным программированием или программированием с объектами такое программирование, где мы пишем только одиночные классы и не занимаемся ни наследованием, ни полиморфизмом. Это более или менее стандартное определение.

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

Всё это не ООП в полном смысле этого слова, но программирование С ЭЛЕМЕНТАМИ ООП. Вот очевидно о таком программировании для начала и можно говорить. В такое программирование вписываются, на мой взгляд, и конструирование мультфильмов, и программирование в Scratch. То есть, для меня лично это всё - школьное программирование с элементами ООП.

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

Ответы тут уже появлялись. Например, использование Scratch - это программирование с элементами ООП. Согласитесь - несколько странно программировать в 5-7 классе с высокоуровневыми объектами, а потом в 8-10 опускаться до голых алгоритмов, не возвращаясь к объектам вовсе.

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

Вот например, Александр Владимирович, что Вы готовы использовать для конструирования мультфильмов, а что нет:

1. Scratch - простенькие мультфильмы со встроенными объектами можно делать. Но язык вмонтирован в среду.
2. Ruby - язык программирования, который Вы упоминали как любимый, но на нем ничего не написано для создания мультфильмов.
3. Flash - система, специально созданная для создания мультфильмов, и язык там - хороший и профессиональный - Flash ActionScript, и в школах пока еще распространена, но за программу надо платить.
4. Oberon и BB - систему программирования, позволяющую создавать объекты и имеющую интерфейс, позволяющий в одном файле совмещать обычные тексты и программы, но не содержащую (пока, насколько мне известно) учебной библиотеки с учебными объектами для создания простых мультфильмов с использованием элементов ООП.
5. PascalABC.NET - систему программирования, содержащую несколько ОО библиотек, специально предназначенных для создания игр и анимаций, адаптированных для работы со школьниками (мы это используем, но, конечно, во Flash получаются более красивые мультики, а в Scratch - более простые по написанию).
6. Иное...

И почему?
Александр Горячев ( Пользователь )
Цитата (Михалкович Станислав, 12.09.2010, 17:34) <{POST_SNAPBACK}>
Вот например, Александр Владимирович, что Вы готовы использовать для конструирования мультфильмов, а что нет:

Станислав Станиславович, я уже ругаю себя за свою аналогию с конструктором мультфильмов. Но раз я про неё упомянул, я упрямо доведу её до конца.
Конструктор мультфильмов это конкретная программа от МедиаХауз, предназначенная для конструирования мультфильмов из готовых фонов, героев с действиями и т.д. Вот, к примеру, можно посмотреть. Эта программа не имеет ни малейшего отношения к обучению ООП. Мы её используем для одной из наших линий развития школьников средствами предмета "Информатика и ИКТ", а именно, чтобы учить использовать компьютерные и коммуникационные технологии как инструмент для достижения своих целей (в более сложном варианте не для начальной школы ещё и учить выбирать адекватные задаче инструментальные программно-аппаратные средства и сервисы или выступать в качестве заказчика новых программно-аппаратных средств и сервисов).
Здесь и сейчас я использую этот подход к созданию мультфильмов только для проведения аналогии, не более того.

В чём же суть предлагаемой мной аналогии?
Есть создание мультфильма "сверху" - от замысла и сценария, и "снизу" от создания героев и их движений. "Взрослый" мультфильм проходит все стадии от замысла через сценарий до создания героев и их анимации в сценах в соответствии со сценарием. Детям (особенно в начальной школе) это недоступно. Максимум, что они могли до появления конструктора мультфильмов - сделать какие-то живые картинки. Не до сценариев. Появление конструктора мультфильмов хотя и ограничило рамки сценария готовыми фонами и персонажами с заданными наборами действий, но позволило создавать мультфильмы по своим сценариям, то есть создавать мультфильм "сверху".

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

Только не спрашивайте меня, как бы могли выглядеть действия детей в этом конструкторе приложений. Я этого не знаю. Но ведь и до создания (изобретения) конструктора мультфильмов никто не знал, что он может из себя представлять.

Я мечтаю о несуществующем, а именно, о программе, которая позволит детям думать и действовать как системные аналитики и творцы приложений, доводя свои замыслы до реализации с помощью этого "конструктора ОО приложений". Никакие языки программирования для этого не подходят. Языки программирования не предусматривают анализа задачи. До них доходит дело, когда задача уже проанализирована и спроектирована.
Так что я хочу "неизвестно чего". Того, что поможет детям думать как системные аналитики при создании своих приложений. И не надо говорить, что это невозможно. Смогли же авторы конструктора мультфильмов дать детям возможность думать как сценаристы и создатели целых мультфильмов!
Другими словами, требуется изобретение.
Примерно так.
Федор Ткачев ( Пользователь )
Кстати о птичках.
Уже было сказано о том, что Вирт в Обероне/Компонентном Паскале подчеркнул, что между обычным (процедурным) программированием и ООП никакого противупоставления нет.

Это проявляется уже в первой программе у 5-клашек с черепашкой.
Дело в том, что любой модуль в Обероне -- это объект-синглтон (по номенклатуре Гаммы и ко.).
Вызовы команд черепашки имеют даже вид вполне "объектно-ориентированный": Ч.Идти( 100 ), и дитё с первого шага осознает, что команда отправляется черепашке, и черепашка меняет свое состояние.
Только слово "объект" не употребляется.

Точно также, если надо делать ввод/вывод, то команды отправляются соответствующим модулям-объектам ("агентам-телепузам", один сидит на вводе, другой на выводе).

Так что простейший, обсуждаемый тут уровень -- уже есть.
Только слово "объект" нужно будет объяснить.

Можно вообразить дальнейший путь такой, что в какой-то момент работа идет с двумя черепашками на одном рисунке ("танец двух черепашек").
И такую схему способен реализовать любой компетентный учитель информатики (уровня PapaSasha, Михаил_К и др.).

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

Это то, о чем я давно талдычу:
Блэкбокс, в силу простоты и надежности языка и низкого уровеня вхождения, дает реальную возможность, чтобы по крайней мере те преподаватели, кто реально могут что-то программировать, могли бы *массово* делать методматериалы, из которых со временем отобралось бы лучшее.

Этим в идеале должны заниматься (сильные) учителя *массово*.

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

Аналогичная проблема давно стоит у физиков и всяких вычислителей, которым нужно придумывать какие-то вычислительные алгоритмы и т.п.
Программеры всё время норовят встрять посредниками.
Но это убивает творческий процесс на корню: на правильном инструменте проще самому сделать, внести изменения, что-то подлопатить и т.п. ... чем кому-то растолковывать кажду мелочь и выслушивать в ответ высокомерные поучения о том, что "должно".
Александр Бондаренко ( Пользователь )
По поводу ООП http://citforum.ru/gazeta/165/
Станислав Михалкович ( Пользователь )
Цитата (PapaSasha, 23.09.2010, 12:11) <{POST_SNAPBACK}>
По поводу ООП http://citforum.ru/gazeta/165/

Абсолютно бесполезная ссылка для учительского форума.

Говорится о какой-то конференции разработчиков ООП 2002 года, где выступал некто Ричард Габриел, критиковавший ООП всю свою сознательную жизнь и желавший создать на конференции скандал.

Следуя этой логике: "Интренет провалился, потому что сейчас он заполонил всё, и с ним слишком много проблем".

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

Вот это надо обсуждать, а не заморочки старичков от информатики.
Федор Ткачев ( Пользователь )
Цитата (Михалкович Станислав, 23.09.2010, 14:04) <{POST_SNAPBACK}>
Абсолютно бесполезная ссылка для учительского форума. ...
И прогрессивные учителя информатики выражают недоумение ...

Почему же бесполезная. Полезную ссылочку Александр Юрьевич выложил. В целом ряде отношений.

ООП как Чудесное Спасение, обещающее решение всех проблем, -- а именно так понимают ООП "широкие массы", включая "прогрессивных учителей", -- конечно,
провалилось:

Цитата
Томас Поток (Thomas Potok) из Oak Ridge National Laboratory даже провел масштабное прикладное исследование, которое продемонстрировало, что нет никакой заметной разницы в производительности между программистами, работающими в стиле ООП и в обычном процедурном стиле программирования.

Ричард Гэбриел, конечно, тоже хорош.
Причудливая смесь чуши со здравыми суждениями.

Чушь -- что теория относительности бесполезна -- в нашем центре протонной терапии (http://www.strf.ru/innovation.aspx?CatalogId=223&d_no=13271) производят прецизионное лечение раковых опухолей глаза и т.п.;
ускоритель без теории относительности -- нонсенс, там это инженерная наука.

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

Не чушь -- что ООП окружена "мифами, высосанными из пальца".

Я уже приводил ссылки на лучший объектно-ориентированный язык -- Оберон. Много там ООП-фразеологии?

А вот интересное утверждение знаменитого Ричарда Столлмана:

Цитата
Как только ты сказал слово "объект", можешь сразу забыть о модульности

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

Ну, и как во всём этом разобраться бедному учителю, пусть даже самому прогрессивному-распрогрессивному?
Хм-хм.

Вообще меня поражает интеллектуальный уровень горячих дискуссий в сфере ИТ. Низкий он, уровень этот. Видимо, оттого, что молодёжь считает себя Необыкновенными Контуперными Гениями, которым тысячелетняя интеллектуальная культура человечества нипочём:

Цитата (Михалкович Станислав, 23.09.2010, 14:04) <{POST_SNAPBACK}>
заморочки старичков от информатики.

А ведь в плане дизайна объектно-ориентированных языков программирования на основе паскаля некоторым нестаричкам до некоторых старичков от информатики как до Луны.

Так что не надо зря наезжать на Александра Юрьевича: удачную ссылочку он выложил.
Станислав Михалкович ( Пользователь )
Цитата (info21, 23.09.2010, 17:43) <{POST_SNAPBACK}>
Я уже приводил ссылки на лучший объектно-ориентированный язык -- Оберон. Много там ООП-фразеологии?

Потому что при надлежащей гигиене (аккуратно поддержанной в Компонентном Паскале и систематически проведенной, например, в дизайне Блэкбокса) эта проблема исчезает.

Ну, и как во всём этом разобраться бедному учителю, пусть даже самому прогрессивному-распрогрессивному?
Хм-хм.

Вообще меня поражает интеллектуальный уровень горячих дискуссий в сфере ИТ. Низкий он, уровень этот. Видимо, оттого, что молодёжь считает себя Необыкновенными Контуперными Гениями, которым тысячелетняя интеллектуальная культура человечества нипочём.


Надо определенно запретить на нашем форуме всяческие использования слов "Оберон", "Компонентный Паскаль", "Блэкбокс" в сочетании со словосочетаниями "самый лучший" и "другой альтернативы нет".

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

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

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

Данный топик - о них, а не о том, почему они плохи.

Федор Ткачев ( Пользователь )
Правильно. Cui prodest. Кому выгодно.
Кому-то Оберон поперек горла.

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

Но ведь учителя верят всему, что написано -- ах! -- в книжках.
Не задумываясь о том, что математика-физика-химия-etc. устоялись за тысячелетия, и там каждый олух выучивает, что вечного двигателя быть не может, что ставить вопрос "пусть каждый учитель использует такую систему счисления, какую пожелает" глупо, и т.п.

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

Цитата (Михалкович Станислав, 23.09.2010, 22:45) <{POST_SNAPBACK}>
На нашем же форуме, в отличие от многих, важен конструктив.
Написать, что это плохо и ерунда - этой чернухи полно на большинстве форумов.
Понять, как это можно использовать ...

Конструктив -- это, в том числе, и то, какому мусору не место в финансируемых обществом школьных курсах ввиду жестого ограничения "Часы, часы..." (с) Т.В.Дедюлькина.

Тащить в школы всякий мусор (включая провалившийся .NET) -- можно сказать, преступление.



*******************************
Цитата (Михалкович Станислав, 23.09.2010, 22:45) <{POST_SNAPBACK}>
я здесь понимаю ООП именно как программирование с объектами - явными или неявными. Бог с ним с наследованием и полиморфизмом ...

Эта попытка выдумать особое школьное ООП -- в сущности профанация.

Объекты прикладных областей (клиенты, математические объекты...) с конца 50-х гг. моделировались записями и, более общо, динамическими структурами данных, для обработки которых всегда писались какие-то процедуры.
Это не ООП.

Как раз таки наследование и полиморфизм -- это изобретение, составляющее сущность собственно ООП.

Есть записи. Нужно их дитям учить.
Записи объединяются в типы, которые может определять пользователь. Этому тоже нужно учить.
Есть понятие моделирование внешнего мира (прикладной области). Соответственно, нужно растолковывать, как записи (и списки, и соответствующие процедуры) используются для такого моделирования.

Но называть использование обозначения с точечкой ООПом -- это некомпетентная попытка получить дивиденд с модного ажиотажа вокруг ООП.
Станислав Михалкович ( Пользователь )
Цитата (info21, 24.09.2010, 09:59) <{POST_SNAPBACK}>
Но называть использование обозначения с точечкой ООПом -- это некомпетентная попытка получить дивиденд с модного ажиотажа вокруг ООП.



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

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

У меня - много примеров. Жаль - не с кем их обсуждать. А философствовать в группе форумов "Методика и опыт/Информатика" я как-то не готов.
Федор Ткачев ( Пользователь )


Совершенно незачем на моде спекулировать: это не "объектное" программирование, а примитивное структурирование данных и задачи.

И совершенно незачем воду мутить: следует начать новую тему "Записи и структурирование данных", а здесь пусть уж будет про настоящее ООП.
Вдруг кто придумает удачную методику про полиморфизм рассказать для профильных классов -- там это вполне по силам. Если начать с 5-го класса, четко понимать, куда вести детей, и время не терять на всякий мусор.

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