Программирование — удел не только программистов ! |
Я не программист. Я не буду пытаться научить кого-либо программированию, для этого есть опытные программисты, опытные преподаватели, я хочу только рассказать о пользе навыков в программировании с пониманием основных подходов к этому процессу даже для тех, кому нет нужды постоянно заниматься программированием. И, главное, что само программирование – увлекательнейшее занятие для любого, у кого есть компьютер и остается хотя бы немного времени, чтобы включить его и заняться чем-то менее бессмысленным, чем стрельба «из мышки по воробьям». Сегодня многих любителей, особенно начинающих, это и радиолюбители, и моделисты, привлекает работа с микроконтроллерами, как удобными компонентами для своих устройств, а здесь без программирования не обойтись, если исключить прямое повторение уже существующих схем. Да и не только радиолюбители, но и профессионалы, не специализирующиеся на цифровой и микропроцессорной технике, испытывают потребность в работе с микроконтроллерами, но и одновременно необходимость в освоении программирования. Конечно, программирование микроконтроллеров имеет свои особенности, но эти особенности легче преодолеваются, чем само программирование. При этом важно понять главное: освоить программирование и выучить какой-либо язык программирования, — это не одно и то же. С моей точки зрения использовать любую подходящую среду программирования для создания прикладных программ, научиться создавать свои программы — самый простой путь к избавлению от зависимости от «готовых решений». Не важно, какой язык программирования будет использован на этом этапе, не следует обращать внимание на высказывания «крутых профи» о языках программирования «для детского сада», как правило, это происходит не от ясного понимания существа дела, а от полного пренебрежения к этому существу. Нет плохих языков программирования, есть плохое отношение к программированию, и не более того. Я не скажу, что сейчас, если возникает необходимость обратиться к программированию, я испытываю восторг, предвкушая предстоящую работу. Нет. Я отдаю себе отчет, что будет необходимо обратиться к документации, к книгам, к подсказкам и советам специалистов. Я прекрасно понимаю, что наделаю много ошибок, с которыми придется как-то справляться, что ни раз буду чертыхаться и злиться (на кого?), разочаровываться и начинать все заново, но за этими неприятными эпизодами, как за занавесом театра, будет скрываться увлекательнейшая история, и когда позже попытаешься вспомнить, что же происходило на самом деле, то не вспомнишь ничего, кроме удовольствия от «возни» с непокорными программными сущностями. В Linux есть превосходная среда разработки прикладных программ Gambas. В папке «help» кроме традиционных подсказок большое количество статей, относящихся к языку, к объектно-ориентированному программированию. Много примеров, над созданием которых потрудился не только автор, но и многочисленные добровольцы. Немного о Linux. Споры вокруг этой операционной системы мне больше напоминают «языковые баталии» — многие из спорщиков не отличат работу в Linux от работы в Windows, но готовы высказать свое мнение о превосходстве последней. В Linux меню выбора программ хорошо систематизировано – офисные приложения в разделе «Офис», среды программирования в разделе «Программирование». Есть несколько великолепных сред программирования, позволяющих работать с разными языками. Есть программы создания web-сайтов, как Nvu.
Рис. 1. Раздел «Программирование» в Fedora Core 6 И очень мне хочется похвастаться (не могу оказать себе в этом скромном удовольствии) теми возможностями анимации и трехмерного вида рабочих столов, которые есть в последней версии Fedora Core 6 (сегодня, завтра уже Fedora 7). Когда я устаю работать, но еще не начинаю дремать у телевизора, я включаю все эти красоты и начинаю просматривать почту, новости в мире Linux, форумы, где больше читаю, чем пишу, по той простой причине, что едва успеваю прочитать все то полезное, что накапливается за день.
Рис. 2. Закрывание домашней папки с поддержкой Beryl Я бы сказал, что операционная система просто «горит на работе»! И особенно мне этот фокус нравится, когда я закрываю логический раздел диска, где у меня установлен Wine, среда работы программ Windows, закрывая его думаешь: «Вот и сожжены мосты!». В разделе установлено несколько «free» и «demo»-программ EDA для Windows. Собственно, я не противник этой операционной системы, просто дороговаты для меня и система, и программы. И поскольку уж зашла об этом речь, все что будет сказано о конкретных программах в Gambas, все это можно повторить в Visual Basic, если для кого-то он кажется более подходящим. Одна из особенностей операционной системы Linux – наличие нескольких рабочих столов, их может быть один или два, часто после установки их бывает четыре, но вы можете легко задать нужное именно вам количество рабочих столов. Я так привык использовать несколько рабочих столов, что не представляю себе, как умещался раньше на одном единственном? Сегодняшние дистрибутивы позволяют перемещаться между столами, используя трехмерный куб (и количество граней можно, похоже, увеличивать).
Рис. 3. Куб рабочих столов Послушать споры вокруг Linux, может показаться, что Linux — операционная система для профессионалов. Этому представлению может способствовать и посещение форумов, связанных с платформой Linux. Множество советов, как добиться желаемого результата, начинаются словами: «Открой скрипт...», или «Дай команду...». Это правильные советы. Это универсальные (или почти универсальные) советы, обязанные большой гибкости и открытости Linux. В ней можно переделать все, все изменить, настроить, что угодно и как угодно. Важно только знать как это сделать, и разбираться в последствиях своих действий. Многим нравится работать даже с последними версиями без графической оболочки, используя команды, вводимые вручную. Но я, например, только ленивый пользователь. Я не склонен изучать и совершенствовать операционную систему. Я хочу ею пользоваться, выполняя свою работу или потакая своим прихотям. Позволяет ли Linux оставаться пользователем и только пользователем, и никем, кроме пользователя. Думаю, да. Но я совсем отвлекся от рассказа. Запускаем Gambas, который находится в разделе Программирование основного меню Приложения:
Рис. 4. Первый запуск среды программирования Gambas Даже первый запуск, кроме традиционных и необходимых действий, таких как: создать новый проект, открыть существующий, использовать недавно использовавшийся проект, — показывает, что есть раздел примеров (Examples). И примеров очень много. Ими обязательно следует пользоваться при работе над собственными проектами. А вот я первый проект, все-таки не могу я все делать «по правилам», первый проект я возьму из книги М. Мозгового «Занимательное программирование», да простит меня автор, не только потому, что пример сам по себе интересен, но и потому, что автор приводит его в среде программирования Delphi. Я хочу повторить этот пример в качестве первого своего Gambas проекта, что называется «в лоб». В этом я доверюсь автору книги «Занимательное программирование», который не соотносит приведенные им программы с каким-то конкретным языком, он использует Pascal, язык системы программирования Delphi, как знакомый многим по студенческим временам. Мне же крайне любопытно, насколько возможно (и трудно ли), не будучи программистом, повторить программу, написанную на другом языке программирования. Если ничего не получится, брошу все. Или не брошу. Я еще подумаю... После выбора New project... (создание нового проекта) открывается диалог, в котором можно ввести название проекта, его заголовок, указать место, где проект будет располагаться. Gambas хранит все, что относится к проекту, в заданной директории, которая будет носить имя проекта. Для перемещения по диалогу достаточно нажимать клавишу Next, но в самом начале следует выбрать, какого рода проект вы намерены создать. На выбор три варианта – графический проект, терминальный проект, использование копии существующего (вашего или нет) проекта:
Рис. 5. Диалоговое окно выбора типа проекта Меня интересует графический проект, и я оставляю флажок выбора там, где он есть: «Create a graphical project» — знай наших! Многие расчетные задачи, к чему и должен быть применен компьютер по замыслу создателей, прекрасно можно выполнить в терминале. При этом вы получите программу, которая будет весьма неприхотлива к ресурсам компьютера, будет работать, как я себе это представляю, без загрузки графической оболочки, а для удобства использования, если вы, как и я, не очень любите набивать множество команд, можно использовать MC – программу (или графическую оболочку), которая называется «Midnight Commander». Я обязательно устанавливаю эту программу. Иногда при обновлениях ядра, а это происходит часто, не обновляется или обновляется не должным образом драйвер видео-карты, что не позволяет загрузить графический менеджер, а запуск МС избавляет от необходимости работать в терминале. В последних версиях дистрибутивов достаточно «подправить» один текстовый файл, чтобы графический менеджер загрузился, а с ним уже легче, если это нужно, загрузить и нужный драйвер. Вообще-то я давно «подсел» на графические возможности современных операционных систем, и сегодня, каждодневно обновляя систему, не столько озабочен ее стабильностью, давно не замечал каких-либо проблем с этим, не столько радуюсь обновлениям, связанным с вопросами защиты системы, вирусы в Linux не очень свирепствуют, сколько жду перемен в ее внешнем облике. Хотя понимаю, что самое разумное, это использовать всю мощь операционной системы без «графических» тормозов. Но... Итак. Выбрав графический проект, дав ему имя и место жительства, мы попадаем в среду программирования, которая позволит сделать первый шаг – создать форму. Для этого в правом окне менеджера проекта, где отображается «дерево» проекта, я щелкаю правой клавишей мышки по разделу Forms, а в выпадающем меню выбираю раздел New, что приводит меня к меню выбора, в котором есть пункт Form. Этот процесс я понимаю так – создать новую форму. Форма же, насколько мне известно, а я уже немного «законспектировал» пояснения к языку Gamabs, особенно для моего графического выбора, является основным окном программы, которое появится, когда я заполню форму некоторым содержанием, и построю сам проект. В окне диалога создания формы можно задать имя формы, что важно для средних и больших проектов, содержащих много окон, можно установить ряд опций, назначения которых я пока не понимаю, поэтому не хочу их устанавливать:
Рис. 6. Диалоговое окно создания формы в Gambas Я не готов создавать средние и большие проекты, поэтому оставлю название формы без изменения, щелкнув по клавише OK. В результате появляется форма и редактор программы. На форме, видимо, можно будет разместить разные кнопочки, окошки и другие «магические» средства программы. А в редакторе поместится все то, что и будет кодом моей программы. Следуя совету, прочитанному в книге «Занимательное программирование», я добавлю на форму область рисования (DrawingArea) и клавишу управления (Button). И то, и другое я выбираю на инструментальной панели справа, щелкнув по ним левой клавишей мышки, а затем с помощью мышки «нарисовав» контур окна и клавиши. На рисунке ниже кнопка управления на инструментальной панели изображена с надписью «OK», а область рисования имеет внутри пиктограмму, изображающую цветные геометрические фигуры: квадрат, круг, треугольник: Рис. 7. Основная форма проекта и редактор кода Форма, как и многие элементы управления, имеет свойство Text. Я полагаю, что это текст, который появится вместо надписи Form1.Form при выполнении программы. Этот текст я заменю своим, и, если программа заработает, то увижу его. После нескольких входов в Gambas и выходов из него, я сталкиваюсь с маленькой, но для меня очень неприятной особенностью – я не знаю, как вызвать редактор кода. Мне же понадобится куда-то вписывать код. Я знаю, уже знаю, что двойной щелчок по кнопке управления открывает редактор кода и создает первую и последнюю строку текста события, связанного с щелчком по клавише при работе программы. Двойной щелчок по форме тоже вызывает аналогичное действие. Но это действие мне не нужно, я удаляю ненужный код, а сам прием использую для вызова редактора кода. Но не делать же это всякий раз, когда тебе нужно что-то исправить в программе. Меня это немного раздражает. Но только до тех пор, пока я не догадываюсь щелкнуть по форме правой клавишей мышки. В выпадающем меню есть пункт Code, который вызывает редактор кода и умиротворение в моей душе. Прототип программы, моего первого «блина комом», выглядит (я скопирую ее из книги «Занимательное программирование», чтобы не наделать ошибок, которые очень люблю делать при переписывании) следующим образом: Рис. 8. Листинг программы из книги М. Мозгового «Занимательное программирование» Очень советую купить книгу, а я своими словами опишу программу. Представьте себе двумерный закрытый сосуд прямоугольной формы, в котором мечется, не находя себе места, шальная молекула газа. И молекула, и сосуд – все идеально. С точки зрения программы это означает, что молекула при своем движении сохраняет величину скорости, а ее направление меняется только при столкновении со стенками сосуда. Не думаю, что без посторонней помощи я смог бы написать такую программу. Я и не уверен, что без посторонней помощи смогу воспроизвести ее. Но попробую. Первым делом я нарисую, как и собирался, область рисования и кнопку запуска программы на основной (в моем случае единственной) форме. Чтобы изменить название клавиши, после того как она появилась на форме под именем Button1, я выделяю эту клавишу щелчком по ней левой клавиши мышки. Клавиша приобретает вид контура с несколькими квадратиками, с помощью «таскания» за которые можно менять размеры клавиши. А окно свойств Properties открывается на свойствах клавиши, что можно сразу увидеть по первой строке (Class) – Button. В этом окне свойств есть пункт под названием Text в левой колонке. Если правее, в следующей колонке, ввести «Старт», то клавиша изменит свое название, видимое на форме. Аналогично я поступлю с областью рисования, которую назову Screen, как в оригинале, но это будет уже не надпись, как на клавише, а, собственно, имя. И меняю я его напротив (Name) в окне свойств после выделения области рисования щелчком левой клавиши мышки по ней. Теперь можно начать писать код программы (я прочитал в отличие от вас все, что автор говорит о программе). Поскольку программа должна запускаться после нажатия на клавишу «Старт», а в руководстве к Gambas я нашел, что двойной щелчок по элементам управления вписывает код, который создает заголовок для кода программы, отвечающего на событие – щелчок мышки по клавише управления, я дважды щелкаю по клавише и получаю в редакторе кода первую запись (увы, пока не мою) кода программы. В листинге на рис. 8 аналогичная запись начинается словом procedure, а ниже начинается описание переменных и констант. Не буду фантазировать, открою в разделе помощи пункт означенный «Объявление локальных переменных» и объявлю их, а заодно и константы:
PUBLIC CONST R AS Integer = 10 PUBLIC CONST V AS Integer = 7
PUBLIC SUB Button1_Click() DIM X AS Integer DIM Y AS Integer DIM Vx AS Integer DIM Vy AS Integer DIM angle AS Float END
А вот и не заодно. Пришлось константы вынести из блока программы, обслуживающего щелчок по клавише «Старт», иначе возникает ошибка при компиляции программы. Осерчав на себя, из-за того, что не понимаю, почему так, я обозначил их PUBLIC, то есть, доступные всем другим классам (так написано в help). Возможно со временем я и пойму, почему и отчего, но пока мне приходит в голову только одно соображение – константа вещь постоянная и ее следует рассматривать глобально, но это мои фантазии. Лучше продолжим. В листинге первая операция в программе Randomize. Попробуем отыскать аналогичную в описании языка Gambas:
Рис. 9. Подсказка по языку Gambas Следующий оператор в листинге, если я не ошибаюсь, обновляет область рисования. Для получения этого я воспользуюсь свойством редактора кода — после точки, которую можно поставить после имени объекта, открывается окно свойств и методов объекта. Так построены многие среды разработки программ, так построена и среда программирования Gambas. Конечно не слишком трудно вписать операторы, методы или свойства, это так, но мне не хочется начинать с опечаток и ошибок в написании текста кода. Поэтому я воспользуюсь возможностями, предоставляемыми хорошо сделанной системой:
Рис. 10. Меню методов и свойств объекта В открывающемся окне я постараюсь найти что-то похожее. И нахожу. Затем, используя оператор Rnd, я повторю записи, сделанные в листинге. Теперь программа выглядит так:
' Gambas class file
PUBLIC CONST R AS Integer = 10 PUBLIC CONST V AS Integer = 7
PUBLIC SUB Button1_Click() DIM X AS Integer DIM Y AS Integer DIM Vx AS Integer DIM Vy AS Integer DIM angle AS Float
Randomize () Screen.Refresh X = Rnd (R, Screen.Width - R) Y = Rnd (R, Screen.Height - R) angle = Rnd (0, 360)*Pi/180 Vx = Round (V*Sin(angle)) Vy = Round (V*Cos(angle)) END
Осталось вставить цикл. В коде цикла есть несколько записей, которые я не знаю, как выполнить, и пока оставлю программу без них, попробовав ее запустить:
Рис. 11. Пробный запуск программы Это не то, конечно, что должно получиться. Первое, что я пока не знаю как сделать, это как стереть «молекулу». Или, если быть точным, не знаю как ее нарисовать цветом фона, как это сделано в оригинальном листинге, а позже перерисовать в новой позиции синим цветом. И я не знаю, как сделать паузу, поскольку не нахожу подходящего оператора. Кроме того, я ожидал, что молекула будет меньше, и у меня она, похоже, не круглая. Но с этим, я надеюсь, разобраться будет проще. Поищем ответы на основные вопросы. Один ответ нашелся быстро: пауза в 10 миллисекунд получается с оператором WAIT 0.01, где число – необходимая длительность паузы. Теперь рисунок образуется не сразу, как прежде, а постепенно. Устранив ошибку, которой я обязан своей невнимательности, и из-за которой не происходило отражения от правой и нижней границ области рисования (в одном месте вместо Y я написал X), и, заменив оба параметра размера эллипса радиусом, отчего «молекула» перестала менять размер при движении, я получаю результат близкий к ожидаемому. Но я все еще не умею «стирать» молекулу. Без этого результат работы программы выглядит примерно так:
Рис. 12. Запуск программы после устранения ошибок И, наконец, с помощью операции присваивания объекту рисования цвета формы Draw.ForeColor = Form.Background
мне удается «стереть» молекулу в начале цикла, а с присвоением синего цвета ближе к концу цикла Draw.ForeColor = 255
получить то, что я представляю, как программу из книги «Занимательное программирование». Выглядит она в Gambas так:
' Gambas class file
PUBLIC CONST R AS Integer = 10 PUBLIC CONST V AS Integer = 7
PUBLIC SUB Button1_Click() DIM X AS Integer DIM Y AS Integer DIM Vx AS Integer DIM Vy AS Integer DIM angle AS Float
Randomize () Screen.Refresh X = Rnd (R, Screen.Width - R) Y = Rnd (R, Screen.Height - R) angle = Rnd (0, 360)*Pi/180 Vx = Round (V*Sin(angle)) Vy = Round (V*Cos(angle))
WHILE TRUE Draw.Begin (Screen) Draw.ForeColor = Form.Background Draw.Ellipse (X-R, Y-R, R, R) X = X + Vx Y = Y + Vy IF X > Screen.Width - R THEN X = Screen.Width - R Vx = -Vx ENDIF
IF X < R THEN X = R Vx = -Vx ENDIF
IF Y > Screen.Height - R THEN Y = Screen.Height - R Vy = -Vy ENDIF
IF Y<R THEN Y = R Vy = -Vy ENDIF
Draw.ForeColor = 255 Draw.Ellipse (X-R, Y-R, R, R) Draw.End WAIT 0.01 WEND END
И работает это:
Рис. 13. Окончательный результат работы программы Если отбросить некоторые языковые различия, такие, например, как операторные скобки рисования,
Draw.Begin (Screen) Draw.End
и различия в написании, что и должно было иметь место, то в остальном код программы действительно переписан «в лоб». Следовательно, предположение, что можно на протяжении книги использовать другую среду программирования, достаточно хорошо подтверждается. А сама среда программирования, по крайней мере для небольших проектов, работает не хуже, чем Delphi. А сейчас я вспомнил, что хотел посмотреть раздел примеров в Gambas. Вот и посмотрю. Но прежде хочу добавить в программу, то что предлагает ее автор в самом начале разговора о кодировании программы — добавить возможность останавливать программу не принудительно с помощью средств разработки, нажимая на красную клавишу «Стоп» основного меню, а использовать ту же кнопку управления, что уже есть на форме. В этом случае начало программы в Gambas выглядит так:
' Gambas class file
PUBLIC CONST R AS Integer = 10 PUBLIC CONST V AS Integer = 7 PUBLIC Running AS Boolean
PUBLIC SUB Button1_Click() DIM X AS Integer DIM Y AS Integer DIM Vx AS Integer DIM Vy AS Integer DIM angle AS Float
IF Running THEN Running = FALSE QUIT ENDIF
Button1.Text = "СТОП" Running = TRUE ...........................
Далее программа остается без изменения. Так, действительно, удобнее. А примеры, которые есть в Gambas заставляют меня тихо завидовать тем, кто умеет так программировать:
Рис. 14. Пример работы программы из раздела Examples системы Gambas Часы не только ходят после запуска программы, но и показывают правильное время. Что ж, будем учиться... Вы не задумывались, почему Емеля в сказке ездил на печи? Думаю, и это только мое личное мнение, что тогда он еще не заработал на приличный «Мерседес». Примерно так же я представляю себе соотношение процедурного и объектно-ориентированного языков программирования, и это тоже только мои предположения. В моих ветхозаветных воспоминаниях о программировании, если отбросить вопрос о типах данных, таких как целое, символ, число с плавающей точкой и т.д., не обращать внимание на переменные, без которых я и сегодня не представляю, может ли существовать программа, и операторах языка, если забыть о подпрограммах, функциях и процедурах, то программа сводится к набору последовательных инструкций, предназначенных для компьютера (или процессора). Не могу сказать, что все было ясно и просто, если и прежде приходилось сталкиваться с программированием, одни только указатели в языке Си, или передача параметров функции по значению или ссылке, вызывали у меня тихую внутреннюю дрожь. А запись программы, подобно стенографии, заставляла открывать справочники и за каждым действием отправляться в долгое путешествие по этим полезным книгам. Но если код программы был мне не ясен, то сущность процесса, в какой-то мере, была ясна. Теперь же, объектно-ориентированное программирование лишает меня даже этих скромных познаний: классы, их дети и родители, наследство и права на него... Вместе с тем, без понимания того, что такое объект и класс, может статься, что и не получится ничего с Gambas. Приведу одно из определений класса, взятое из подсказок Gambas: Класс - разновидность шаблона (template), он не используется непосредственно. Для его использования создается его копия. Эта копия называется объект. Вы можете сделать разные объекты того же самого класса. Класс - это тип данных, так что объявление объекта похоже на обычное объявление переменной: object_name AS Class_name но объект должен быть подтвержден с помощью NEW: object_name = NEW Class_name Запишу еще несколько определений. Следующее взято мною из книги С. Липпмана: Двумя первичными характеристиками объектно-ориентированного программирования являются наследование и полиморфизм. Наследование позволяет нам группировать классы в семейства связанных типов, давая возможность разделять общие операции и данные. Полиморфизм позволяет нам программировать эти семейства, как объединения несколько иные, чем индивидуальные классы, предоставляя нам больше гибкости в добавлении или удалении отдельных классов. Наследование определяет взаимосвязь предок/потомок. Предок определяет общий интерфейс и частную реализацию, общие для всех его потомков. Каждый потомок добавляет или изменяет, что ему наследовать для реализации его собственного уникального выполнения. Взаимосвязь между родительским или базовым классом и его потомками называется иерархия наследования. В объектно-ориентированном программировании мы косвенно манипулируем объектами класса нашего приложения через указатель или ссылку на абстрактный базовый класс вместо прямого управления объектами реального производного класса нашего приложения. Это позволяет нам добавлять или удалять производный класс без необходимости каких-либо переделок нашей существующей программы. Второй уникальный аспект объектно-ориентированного программирования - это полиморфизм: возможность указателю на базовый класс или ссылке явно ссылаться на любой из объектов его производного класса. Если вам что-то стало понятно, то я вам завидую. У меня полнейшая каша в голове. А еще есть контейнеры и много еще более загадочных сущностей! Попробую найти что-нибудь полезное в Интернете. Объектно-ориентированное программирование - технология программирования, при которой программа рассматривается как набор дискретных объектов, содержащих, в свою очередь, наборы структур данных и процедур, взаимодействующих с другими объектами. Отыскалось много интересного и на сайтах университетов. Вот, например: Программы - это совокупность взаимодействующих объектов. Каждый объект отвечает за конкретную задачу. Вычисление осуществляется посредством взаимодействия объектов... Поведение объекта диктуется классом. Данные и поведение представлены в виде классов, экземпляры которых - объекты. Все экземпляры одного класса будут вести себя одинаковым образом в ответ на одинаковые запросы. Объект проявляет свое поведение путем вызова метода в ответ на сообщение. Интерпретация сообщения зависит от объекта и может быть различной для различных классов объектов. Для удобства создания нового типа из уже существующих типов, определенных пользователем используется механизм наследования. Классы могут быть организованы в виде иерархического дерева наследования. Таким образом, Объектно-ориентированный язык должен обладать свойствами абстракции, инкапсуляции, наследования и полиморфизма. Инкапсуляция с сокрытием данных - способность отличать внутреннее состояние объекта и поведение от его внешнего состояния и поведения. Абстракция - расширяемость типов - способность добавлять типы, определяемые пользователем для того, чтобы дополнить ими встроенные типы. Один из принципов ООП заключается в том, чтобы типы, определяемые пользователем, должны обладать теми же привилегиями, что и встроенные типы. Наследование - способность создавать новые типы, повторно используя, описание существующих типов. Полиморфизм с динамическим (поздним) связыванием - способность объектов быть ответственными за интерпретацию вызова функции. Принципы Объектно-ориентированного подхода:
С удовольствием, и без зависти, я прочитал все найденные мною статьи. И слова, и даже почти все термины в них понятны, но лишь пока читаешь. Стоит на мгновение отвлечься, как, возвращаясь к прерванному чтению, ты уже не так уверен в том, что тебе все понятно. В этом смысле, боюсь, мне более всего подойдет следующее: Для тех, кто не имеет об этом ни малейшего понятия, мы не будем подробно объяснять, что такое объектно-ориентированное программирование. В этот вопрос и так уже внесено достаточно путаницы. Поэтому забудьте о том, что люди говорили вам об объектно-ориентированном программировании. Наилучший способ (и, фактически, единственный) изучить что-либо полезное об объектно-ориентированном программировании - это сделать то, что вы уже почти сделали: сесть и попытаться узнать все самостоятельно. Последую этому совету. А чтобы не сожалеть о времени, потраченном на чтение книг, статей и методических указаний, на первом этапе я определю для себя, что объектно-ориентированное программирование отлично от традиционного в первую очередь тем, что его основным элементом является объект с набором свойств и возможных действий для общения с другими сущностями программы. Это не определение – это маленький островок в той каше-размазне, что у меня сейчас в голове... Интересный, как мне кажется, пример видения программы в традиционном подходе и с «правильной» точки зрения я встретил в книге С.Н. Лукина «Понятно о Visual Basic.NET». Хотя программа относится к Visual Basic, ее без труда можно реализовать в среде Gambas, что я и хочу сделать. Речь в книге идет о создании программы собственного калькулятора. В моей операционной системе Linux есть штатный калькулятор, приводимый к виду научных расчетов, калькулятор, который позволяет записать достаточно сложное выражение и произвести расчет нажатием на клавишу «равно», и я часто им пользуюсь, но... Но в некоторых ситуациях даже он не спасает меня от противного даже самому ворчания пополам с четырханием. Однако вначале о программе. Запускаем Gambas. Кстати о Gambas. Почти готова вторая стабильная версия программы, и, после некоторого размышления о быстротечности всего сущего, я решил, что далее буду использовать ее. Это версия 1.9.48 (разрабатываемая). Итак, запускаем все-таки Gambas:
Рис. 15. Gambas 2, окно запуска По всей видимости новая версия среды программирования претерпела существенные изменения, и к моменту выхода стабильной версии эти изменения могут еще в большей мере коснуться программы, но это не столь важно для таких дилетантов, как я. По этой причине, имея первый опыт работы в интегрированной среде разработки проектов Gambas, я выбираю раздел New project, получая следующие возможности для разработки программы:
Рис. 16. Возможные виды проектов в Gambas 2 Как и ранее, я выбираю для своих целей графический проект с применением средств Qt. Пока я не знаю назначение опций, находящихся в правом окне, и пока не использую их. Проект я назову «Calc» или как-нибудь похоже, пока это неважно. Попадая в рабочее окно, я получаю основную форму, для вызова на экран которой дважды щелкаю в левом окне «дерева» проекта. Что мне нужно для демонстрации, так это три окошка TextBox и одна клавиша Button. Окошки позволяют ввести в них текст, а клавиша нужна мне для выполнения расчетов – нажал клавишу, и посчитал. В первое окно буду записывать первое число, во второе окно – второе. Результат отобразится в третьем. Для получения доступа к объектам я открываю Toolbox в разделе основного меню View. Можно нажать клавишу F6, как во многих программах. Затем, используя окно диалога свойств, оно открылось при запуске, но можно его вызывать из того же пункта основного меню View (Properties), я нахожу в свойствах окошек TextBox1 – TextBox3 пункт Text, где и записаны эти имена, и удаляю ненужный мне текст. Это не обязательно, но тогда в работающей программе это придется делать вручную каждый раз, когда программа запускается. Пока это все не столь важно, хотя на рисунке ниже можно увидеть, где удаляется лишняя надпись. Одновременно можно заметить, что изменился вид рабочего окна.
Рис. 17. Подготовка формы программы калькулятора Проделав подготовительные операции по расчистке формы, можно, щелкнув по клавише Button1 правой клавишей мышки, открыть редактор кода с готовым заголовком процедуры. Выпадающее меню содержит много полезных пунктов, и, в частности, первый из них для меня полезный пункт Code и пункт Event, который и позволяет выбрать множество других событий, а не только щелчок клавишей мышки по кнопке действия в программе.
Рис. 18. Выпадающее меню после щелчка по объекту Button И пункты выбора, и пункты выравнивания следовало бы, и хотелось бы, попробовать, но не сейчас. Я думаю, что еще очень много интересного и полезного встретится на пути. А пока, вот как выглядит набор возможных событий, связанных с любой кнопкой, помещенной на форму:
Рис. 19. Перечень возможных событий, связанных с объектом Button Если выбрать событие Click, то получится такой же результат, как и после двойного щелчка по кнопке Button1 на форме. Но и это сейчас не важно, а важна строка, которую я впишу в редакторе кода:
TextBox3.Text = Val(TextBox1.Text) + Val(TextBox2.Text)
Как можно убедиться ниже это единственный текст кода, который я ввожу в программу, да и то с большими подсказками со стороны Gambas, как и в других, впрочем, интегрированных средах разработки.
Рис. 20. Ввод кода программы в редакторе кода Gambas Этой строки достаточно для того, чтобы, запустив проект, получить возможность ввести любое число в верхнее, а второе в окошко ниже, если это не целые десятичные числа, то следует использовать запятую при вводе числа, а затем, нажав на кнопку Button, получить результат операции, в качестве которой я выбрал сложение, но мог выбрать и другую операцию. Рис. 21. Работа «калькулятора» в Gambas Вот тот удивительнейший для меня результат, на возможность получения которого открыл мне глаза С.Н. Лукин. Всего одна строка кода, немного перетаскивания картинок «с места на место», и работающая программа. И никогда бы я не догадался, как написать эту строку кода. Я уверен, что стал бы создавать переменные, в которые передавал бы введенные числа, складывал бы их, а потом пытался отобразить в третьем окне. Но мне не надо заботится о множестве процедур, мне достаточно добавить к программе нужные объекты — окна ввода чисел и вывода результата, и записать, что я хочу от программы: «Получить результат сложения двух чисел, которые введены в первые два окна». Здесь Val () — это преобразование строки (а ввожу я в калькулятор текстовую строку) в число. При этом мне даже не надо заботиться о типе получаемого числа. Если я ввожу целое число, то получаю тип Integer, ввожу дробное число, получаю тип Float, с плавающей точкой. По свойствам введенной мной строки Gambas определяет тип данных. Теперь немного больше о среде программирования Gambas. Язык и среда программирования созданы молодым французом Benoit Minisini из предместий Парижа для собственного удовольствия, которое он получает как от создания компиляторов, так и от игры на флейте, и от обучения актерскому мастерству, и от работы в качестве профессионального программиста. На работу над проектом в течение нескольких лет его подвигла не только любовь к программированию, но и те идеи, то воплощения языка Бейсик, что были реализованы в Visual Basic. Ему настолько это все не понравилось, что он решил создать свой собственный вариант современного языка Basic. Что и осуществил. Логичным завершением компилятора стало создание графической среды программирования, написанной уже на языке Gambas. Рост популярности операционной системы Linux, как рабочей среды персональных компьютеров, привлекает все большее внимание профессионалов к языковым возможностям, существующим для этой платформы. Среди профессионалов не только программисты, но и педагоги. Если первые используют любой язык, подходящий к их задаче, то вторые больше связаны с истоками любого языка программирования, и охотнее обращаются к языкам, задуманным именно для обучения. В итоге, если заглянуть в документацию по Gambas, то можно найти множество имен, так или иначе связанных с развитием этого проекта. А что проект бурно развивается можно судить даже по тем рисункам, что приведены выше. Как любая программа, предназначенная к работе в составе операционной системы, Gambas поддерживает привычный для пользователя интерфейс — ту графическую пользовательскую среду, а сегодняшние операционные системы не обходятся без нее, которая привычна для пользователя, которая помогает ему быстро найти нужный раздел в меню, быстро начать работу над собственной задачей.
Рис. 22. Основное меню и основная инструментальная панель Gambas Пункт меню File, который обычно служит для работы с файлами, в данном случае служит для работы с файлами проекта: New project... (создание нового проекта), Open project... (открыть проект), Open recent (открыть недавний проект), Open example (открыть пример), Save project (сохранить проект), Quit (и выйти). Для работы над проектом, помимо множества возможностей, явно не выведенных в области основного меню, служит раздел Project:
Рис. 23. Подменю раздела Project Это, соответственно, компиляция файла, компиляция проекта, создание исполняемого файла, создание архива исходного текста, создание установочного пакета, свойства проекта, очистка и обновление проекта. Два пункта меню могут быть непривычны для пользователей Windows – создание архива исходных текстов и установочного пакета. Но не следует забывать, что и программы, и сама операционная система Linux всегда существуют в виде открытых исходных кодов. В Linux можно установить программу двумя способами, либо используя исходный код и средства операционной системы для компиляции и установки программы, либо используя готовый установочный пакет, подобный Setup в Windows. Правда, в разных дистрибутивах Linux такой установочный пакет может быть разным, и не всегда его можно установить, дважды щелкнув мышкой по установочному пакету, но это, скорее, исключение из правила, чем правило. Следующий пункт меню относится к отладчику вновь создаваемой программы на Gambas, и имеет более или менее стандартный набор средств отладки, таких как запуск, пауза, остановка работающей программы, шаг программы и передвижение вперед, и очистку всех точек остановки. Далее следуют разделы вида — View (открывающий и закрывающие все окна диалога рабочей области), инструментов (Tools) и подсказок (?). В последнем разделе достаточно подробный Help browser, основанный на Wiki в последней версии программы. Мне, конечно, не хватило терпения «прощелкать» все пункты подсказки, но предыдущая версия имела Help, состоящий более чем из 3000 файлов, среди которых ряд статей и множество примеров. Основная инструментальная панель, как это принято, повторяет наиболее часто используемые разделы основного меню, имеет всплывающие подсказки назначения клавиш и дает возможность таким «торопыгам», как я, быстрее нестись к завершающей стадии своей работы – мучительным раздумьям: «Почему ничего не получается?». Очень быстро нестись. В новой редакции программы графическая работа над формой проекта и кодом программы может вестись быстрым переключением с помощью ярлычков, на рисунке ниже Fmain.form и Fmain.class, щелкая мышкой по которым попадаешь в графический редактор или редактор кода. Каждый из них имеет свое основное инструментальное меню. На рисунке ниже – инструментальное меню графического редактора.
Рис. 24. Инструментальное меню графического редактора и ярлычки перехода Кроме обычных средств, повторяющих средства основного меню, таких как сохранение и обновление, откат и возврат, удаление и вставки из буфера, панель имеет и некоторые специфические компоненты, такие как вход в редактор меню. Ведь почти все формы, которые при работе программы станут окнами программы, должны иметь основное меню. Именно редактор меню позволяет создавать иерархию основного меню с его разделами и подменю. Остальные клавиши позволяют управлять размещением объектов на форме, выравниванием их размеров. Кроме переноса объектов на форме с помощью мышки, захватив объект после его выделения и размещения курсора над ним, вернее с помощью удержания левой клавиши мышки и перемещения с помощью мышки, так вот, кроме этого объекты можно перемещать с помощью курсорных клавиш клавиатуры, что очень помогает, когда нужны точные движения. У меня, например, мышка обычно либо убегает в одну строну, либо в другую, я долго прицеливаюсь, а когда, наконец, попадаю в нужное место, то от движения при отпускании клавиши мышки, та сдвигается с места и все нужно начинать сначала. Думаю, что по мере создания сложного проекта со множеством форм и собственных классов, это дополнительное меню будет расширяться, позволяя быстро перемещаться по проекту. Но для этой же цели можно использовать и окно «дерева» проекта. Рис. 25. Окно дерева проекта У меня оно почти пустое, и, пока не забыл, хочу привести еще одну концепцию, почерпнутую мною из книги С.Н. Лукина, которой постараюсь следовать сам: не надо пытаться сразу создать весь проект, лучше делать это частями, открывая новые проекты (из старых) по мере продвижения, отлаживать и сохранять каждую часть, продвигаясь пусть скромными, но методическими шажками к своей цели. Отлаживая процедуры, если это возможно, «в гордом одиночестве». Я назвал бы это «штучным производством». Он совершенно прав. Но лучше почитать самому, книга не дорогая, и, думаю, весьма будет полезна и в начале изучения языка, и в дальнейшем. Отдельную область занимает инструментарий проекта – Toolbox. Построенный аналогично рабочей области, он тоже имеет различные ярлычки, открывающие страницы, на которых размещаются средства создания проекта. Моему разумению пока доступны такие графические элементы как клавиши, текстовые окошки, переключатели и иже с ними. Но если вас не пугают такие ужасы, как контейнеры, можете пощелкать по закладкам и рассмотреть все страницы. Рис. 26. Вид инструментария проекта А сейчас я зажмурюсь, у меня высотобоязнь, зажмурюсь и открою свойства проекта. Это сделать несложно – вошел в раздел основного меню Project, выбрал пункт выпадающего меню Properties, нажал левую клавишу мышки и ты уже в свойствах проекта, где есть закладка Components. Вот такой «высоченный» список. Рис. 27. Окно списка доступных компонентов Gambas Если выбрать еще один компонент из списка, то инструментарий пополняется новой страницей с закладкой. Рис. 28. Пополнение инструментария проекта после добавления компонента Но, если вы, подобно мне, не готовы стать монтажником-высотником, всегда можно выключить ненужные компоненты, оставив только то, что ясно и нужно в данный момент. У каждого из нас свои интересы, которые интереснее любых других, каждый из нас, занимаясь чем-то, имеет цель. Хорошо, если в выборе профессии вы нашли то, что совпадает с вашими интересами, и вам трудно отделить работу от увлечения. Но, если это не так, всегда можно найти место (и время) для увлечений. Попробуйте программировать с Gambas, возможно, это станет вашим увлечением надолго. Или определит ваш выбор профессии. Или поможет найти пути преодоления проблем в смежных областях деятельности. В любом случае вы останетесь только в выигрыше. Удачи вам! Гололобов Владимир 09.01.2009 Написать автору по теме статьи можно на mail: vgololobov(a)yandex(тчк)ru - набирая адрес подумайте ! На сайте автора есть много интересных материалов по электронике http://vgololobov.narod.ru/ |
< [ на главную ] |