OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 19 Апрель, 2024 17:18

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
СообщениеДобавлено: Воскресенье, 23 Август, 2009 13:25 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Имеется следующая проблема (или мнимая проблема), идея по её решению - да уже и решение начато.

Впереди у меня ещё два-три месяца до того, как будет объяснено ООП студентам. Будут алгоритмы, алгоритмы, структуры данных... Но хотелось бы, естественно, делать что-то с графическим вводом-выводом. Некие законченные "алгоритмические этюды".

Нежелание забивать мозги Views-ами раньше времени привело к след. решению.

Аналог Views, но без ООП. Т.е. графический объект представляет собой модуль, в котором должны быть объявлены процедуры Рисовать*, Щелчок_мышью*, Параметры* (чтоб он мог заказать себе ширину-высоту).

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

Эта штука (в одном экземпляре) уже сейчас фурычит. Выкладываю архив - можно посмотреть.
Программист - Елена Шамардина.

Вложение:
Shar.7z [15.21 КБ]
Скачиваний: 359


Собственно, движок - модуль ШарГрафика, + там же 2 вспом. модуля. В Шар_этюды - два модуля-примера (Ханойские башни и Сапёр). Команды для запуска внизу исходников.

У меня имеются к уважаемым коллегам два вопроса для обсуждения:
1) А оно надо в принципе?
2) Конкретно ситуации, подобной моей, со студентами (3 курс СПО, т.е. аналог 1 курса ВУЗа) - стоит ли вводить промежуточный этап с такой графикой? Или дать шаблон вьюшки, не вдаваясь в подробности ООП? Сжуют, и пускай сразу привыкают? :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Август, 2009 13:29 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ещё такая мысль.

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

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

А потом позже гораздо - уже ООП как концепция. И как самому создавать свои типы данных.

Вроде здравая мысля?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Август, 2009 13:39 
Аватара пользователя

Зарегистрирован: Суббота, 29 Март, 2008 19:27
Сообщения: 1053
Откуда: Россия, Чебоксары
Илья Ермаков писал(а):
"как пользоваться объектами". Кем-то уже сделанными. Давать как разновидность типов данных. Вот, типа, с переменной такого типа вот такие операции бывают :)

Вроде обычно обучение именно так и построено...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Август, 2009 13:57 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну да. Вот это и не нравится, то что даётся это просто в силу "обычно" :) "Вот, научимся тыкать вот так вот".

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Август, 2009 14:38 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
IMHO тут хорошо бы подошел подход аля Оберон-1. Т.е. классы/записи это обычные типы и работа с ними ведется с обычным синтаксисом, без этих новомодной префиксной записи (obj.method) да связанных функций.

Т.е. тут даже в общем то и наследование не нужно. В простейшем случае.

А объяснить record'ы без наследования и на уровне Оберон-1/07, вполне думаю можно довольно быстро. + туда же type'ы -- работа с типами (создание).

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Август, 2009 14:40 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Как раз как вводить ООП - я знаю. Опыт есть. И действительно, там ближе к Оберону-1 можно сначала держаться.

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

Собственно, был вариант ООП аккуратно обёртывать специальными учебными модулями (вот про графику выше рассказал). Задумался: стоит ли лишний этап вводить? И серьёзно задумался. Время дорого. Если имеются бездефектные и лёгкие для освоения "боевые" средства, то хорошо бы обходиться без учебных. Собственно, идея И21 продвижения ББ как единого инструмента в школы как раз в этом.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Август, 2009 14:53 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну-ка. Предположим, что умеем мы работать модульно-процедурно. И хотим "графическую объекту" накатать. Чтобы к нашему модулю была визуализация. В единственном числе.

Почему бы не делать так?

Код:
MODULE МояГрафика;

  ..
  VAR
  ..
 
  (* НШ - Начало данного преподавателем шаблона *)
  TYPE
      View = POINTER TO RECORD (Views.View) END;
    - никакого состояния объект не хранит. Он использует глобальное состояние модуля.
  (* КШ *)


  PROCEDURE ...
  PROCEDURE ...

  PROCEDURE (v: View) Restore (f: View.Frame; l, t, r, b: INTEGER);
    - здесь из непонятного пока - только (v: View).
  ...
  BEGIN
  - здесь понятно, как рисовать, обращаясь к процедурам f. Всё это доступно и легкообъяснимо. Особенно, если уже систематически вводим "пользование готовыми объектами"
  END Restore;

  PROCEDURE Открыть*;
    VAR v: Views.View;
  BEGIN
     NEW(v);
     Views.OpenAux(v, "Графическое окошко")
  END Открыть;

END МояГрафика.



Ничего ужасного, правда?

Если нужно обрабатывать сообщения, то добвлятся HandleCtrlMsg - и WITH для RECORD. Хороший повод поупражняться с записями. И расширение тоже объяснить можно довольно рано, очень доступная штука.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Август, 2009 14:55 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Зато потом полностью к ООП переходить легче. Уже знакомые "камушки" в фундаменте есть.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Август, 2009 15:04 

Зарегистрирован: Вторник, 25 Апрель, 2006 16:21
Сообщения: 2180
Откуда: Нижний Новгород
Вот это ещё непонятно:
Цитата:
View = POINTER TO RECORD (Views.View) END;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 23 Август, 2009 15:17 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Объяснить, что этой строчкой мы говорим, что у нас есть своя разновидность графических объектов. Кои все являются расширением Views.View. И пока хватит :)

Так же как в Черепашке детям ещё задолго до переменных показывается частный шаблонный случай - счётчик VAR i: INTEGER для цикла FOR.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 27 Август, 2009 11:16 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Собственно, не понятно, почему использование типов данных вызывает вопоросы. Какая разница, встроенные-элементарные они или реализованные?.
Простые имеют такие операции, а сложные - такие операции. На то они и сложные. А уж конструирование сложных типов - это потом.
ИМХО, как раз очень хорошо сначала научаем использовать реализованное.
А уж для повышения квалификации потом учим создавать.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB