1  
   2  III. Программное обеспечение для объектно-ориентированного программирования и
   3  разработки приложений (Kdevelop, Lazarus, Gambas). Практические задания .................. 2
   4     1. Практика работы с Kdevelop и языком программирования C++ .......................................... 2
   5     2. Практика работы с Lazarus и языком программирования Pascal ........................................ 26
   6     3. Практика работы с Gambas и языком программирования BASIC ...................................... 46
   7  
   8  
   9  
  10  
  11  Академия АйТи             Установка и администрирование ПСПО. Практика. Часть 4          Страница 1 из 64
  12         III.     Программное                  обеспечение                   для   объектно-
  13  ориентированного программирования и разработки
  14  приложений (Kdevelop, Lazarus, Gambas). Практические
  15  задания
  16         Данный набор практик ставит целью познакомить слушателей с «живым»
  17  созданием ПО в каждой из трех изучаемых сред разработки.
  18  
  19  1. Практика работы с Kdevelop и языком программирования C++
  20         1.       Убедитесь, что вы вошли в систему с именем пользователя (login) admin.
  21  После этого из главного меню КДЕ-Прочие-Разработка-KDevelop-Среда разработки на
  22  C/C++ (Kdevelop: C/C++) запустите среду разработки KDevelop (Рис. 1).
  23  
  24  
  25  
  26  
  27         Рис. 1
  28  
  29  
  30  
  31  
  32  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4      Страница 2 из 64
  33         2.       Откроется рабочее пространство (workspace) пакета с диалоговым окном
  34  «Совет дня». В последнем снимите галочку Показывать советы при запуске и нажмите
  35  Закрыть (Рис. 2).
  36  
  37  
  38  
  39  
  40         Рис. 2
  41         3.       Поскольку мы планируем начать новый консольный проект выберите в
  42  главном меню пункты Проект-Создать проект (Рис. 3).
  43  
  44  
  45  
  46  
  47         Рис. 3
  48         4.       Вы увидите окно «Новый проект», в нем:
  49         ·        выберите тип проекта - распахните узел C++ и отметьте под-узел Простая
  50  программа Hello world.
  51  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 3 из 64
  52         ·        назовите свое приложение ClassDir_KDevelop, для чего введите это имя в
  53  поле Имя приложения
  54         ·        оставьте      предлагаемое         Расположение           проекта   без     изменений
  55  (/home/admin/)
  56         ·        убедитесь,       что       домашней         папкой        нового    проекта      станет
  57  /home/admin/ClassDir_KDevelop
  58         ·        нажмите Вперед (Рис. 4)
  59  
  60  
  61  
  62  
  63         Рис. 4
  64         5.       На закладке «Параметры проекта» введите свое имя (например, Peter) в
  65  поле Автор. Все остальные настройки оставьте «как есть». Нажмите Вперед (Рис. 5).
  66  
  67  
  68  
  69  
  70  Академия АйТи              Установка и администрирование ПСПО. Практика. Часть 4          Страница 4 из 64
  71         Рис. 5
  72         6.       Для нашей простой программы система управления версиями нам не
  73  понадобится, а поэтому на одноименной закладке убедитесь что в выпадающем списке
  74  выбрано Не используется (это значение по умолчанию) и нажмите Вперед (Рис. 6)
  75  
  76  
  77  
  78  
  79         Рис. 6
  80  
  81  
  82  
  83  
  84  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 5 из 64
  85         7.       В следующей закладке «Шаблон для файлов .h» нажатием кнопки Вперед
  86  примите шаблон предлагаемый по умолчанию (Рис. 7).
  87  
  88  
  89  
  90  
  91         Рис. 7
  92         8.       На закладке последней, «Шаблон для файлов .cpp» поступите так же и
  93  просто нажмите кнопку Готово (Рис. 8).
  94  
  95  
  96  
  97  
  98         Рис. 8
  99  
 100  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 6 из 64
 101         9.       Откроется редактор с кодом единственного (пока) файла нашего проекта -
 102  classdir_kdevelop.cpp. Включите нумерацию строк в редакторе. Это позволит легче
 103  соотносить текст данной практической работы с текстом создаваемого проекта. Для этого
 104  выберите в главном меню Вид-Показать номера строк (Рис. 9).
 105  
 106  
 107  
 108  
 109         Рис. 9
 110         10.      Согласно дизайну нашего проекта нам нужен новый файл, в котором мы
 111  реализуем класс Dir. Для создания нового класса (и файла «под» него) выберите в главном
 112  меню Проект-Создать класс…(Рис. 10).
 113  
 114  
 115  
 116  
 117         Рис. 10
 118  
 119  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 7 из 64
 120         11.      Появляется окно «Новый класс» содержащее много параметров, по которым
 121  будет генерироваться исходный текст нашего класса. Нам достаточно указать только его
 122  имя и оставить все остальные настройки без изменений. Введите имя нашего класса - Dir -
 123  в поле Имя и нажмите кнопку OK (Рис. 11).
 124  
 125  
 126  
 127  
 128         Рис. 11
 129         12.       В C++ принято разделять описание класса и его реализацию по двум
 130  файлам. Имя первого файла строится по шаблону <имя_класса>.h, второго -
 131  <имя_класса>.cpp. Первые называют заголовочными файлами, вторые - файлами
 132  реализации. В первых описывается только состав класса (поля, их типы, методы и т.д.) но
 133  не его реализация, которая как раз и выносится в файлы второго типа. Если сказать
 134  упрощенно в .h-файле должен содержаться весь текст нашего класса, кроме тел его
 135  методов      (однако   описания     методов      включаются        именно        сюда);   в    .cpp-файле,
 136  соответственно, будут только тела методов. Согласно такому подходу шаг предыдущий
 137  добавил нам в проект два файла - dir.h и dir.cpp. В настоящий момент оба они, а так же
 138  файл главного метода Main открыты в своих закладках редактора. Заголовки этих
 139  Академия АйТи            Установка и администрирование ПСПО. Практика. Часть 4                Страница 8 из 64
 140  закладок эти идут поверх окна редактора, и переключаться между ними можно щелчком
 141  мыши непосредственно по заголовку. Давайте начнем с описания нашего класса а для
 142  этого щелкните по закладке dir.h и способом, указанным в шаге 9 нашей практической
 143  работы включите нумерацию строк и для этой закладки.
 144             Полученный результат представлен на Рис. 12. На нем же приведен исходный текст
 145  этого файла как он был сгенерирован средой.
 146  
 147  
 148  
 149  
 150             Рис. 12
 151             С целью возможности «отката» к этой отправной точке начальный текст файла
 152  dir.h приводится здесь:
 153             /***********************************************************************
 154  ****
 155              *       Copyright (C) 2009 by Peter           *
 156              *       admin@academy.it.ru   *
 157              *
 158  *
 159              *       This program is free software; you can redistribute it and/or
 160  modify          *
 161              *       it under the terms of the GNU General Public License as published
 162  by     *
 163              *       the Free Software Foundation; either version 2 of the License, or
 164  *
 165              *       (at your option) any later version.
 166  *
 167  
 168  Академия АйТи               Установка и администрирование ПСПО. Практика. Часть 4   Страница 9 из 64
 169           *
 170  *
 171           *       This program is distributed in the hope that it will be useful,
 172  *
 173           *       but WITHOUT ANY WARRANTY; without even the implied warranty of
 174  *
 175           *       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                 See the
 176  *
 177           *       GNU General Public License for more details.
 178  *
 179           *
 180  *
 181           *       You should have received a copy of the GNU General Public License
 182  *
 183           *       along with this program; if not, write to the
 184  *
 185           *       Free Software Foundation, Inc.,
 186  *
 187           *       59 Temple Place - Suite 330, Boston, MA                02111-1307, USA.
 188  *
 189  
 190  ***************************************************************************/
 191        #ifndef DIR_H
 192        #define DIR_H
 193  
 194         /**
 195               @author Peter <admin@academy.it.ru>
 196         */
 197         class Dir{
 198         public:
 199             Dir();
 200  
 201                  ~Dir();
 202  
 203         };
 204  
 205         #endif
 206         13.       В настоящий момент описание класса говорит о том, что Dir не имеет
 207  никаких полей, но имеет 2 метода - конструктор и деструктор. Первый, как мы знаем,
 208  вызывается        в   момент    создания      экземпляра        класса.     Второй   ему      полностью
 209  противоположен и вызывается в момент разрушения экземпляра существующего в момент
 210  когда необходимость в нем отпадает. Реализация деструктора нужна только если мы
 211  хотим какого-то особого поведения нашего класса и его экземпляров в этой
 212  заключительной стадии их работы. В нашем случае никакого особого поведения не
 213  требуется, мы можем просто оставить деструктор пустым.
 214         Согласно намеченной в разделе «Постановка задачи» дизайн-схеме нашего проекта
 215  внесите описание трех полей нашего класса. Такая декларация должна начинаться после
 216  открывающей фигурной скобки, но до ключевого слова public, т.к. соблюдая принципы
 217  ООП, мы собираемся предоставить доступ к полям только самому классу Dir и никому
 218  более. Т.о. сдвинем текущую линию 27 на одну вниз и введем описания полей:
 219         class Dir{
 220         string _name;
 221  
 222  Академия АйТи             Установка и администрирование ПСПО. Практика. Часть 4            Страница 10 из 64
 223             int _numOfChild;
 224             bool _isOwner;
 225             public:
 226                      Dir();
 227  
 228  
 229                      ~Dir();
 230  
 231  
 232             };
 233             14.       В файле .h нам осталось лишь объявить (но не реализовать) оба метода
 234  нашего класса - конструктор и GetInfo. Конструктор уже объявлен, однако его объявление
 235  нам не подходит. Согласно нашему плану нам требуется конструктор с тремя
 236  аргументами. Текущий же конструктор аргументов не принимает. Поэтому заменим 31-ю
 237  строку такой:
 238             Dir(string name,int numOfChild,bool isOwner);
 239             И, наконец, в следующей строке объявим второй метод:
 240             void GetInfo();
 241             15.       Мы знаем, что последний метод будет работать с консолью, а объявления
 242  классов/методов для работы с ней находятся в заголовочном файле iostream.h. Кроме того,
 243  один из аргументов нашего конструктора имеет тип string. А это - не элементарный тип,
 244  т.е. он не «встроен» в сам язык C++. В отличии от истинно элементарных типов (int, char,
 245  bool и пр.) это - класс и мы должны включить его определение в нашу программу. Все
 246  вышесказанное выражается участком кода
 247             #include <iostream>
 248             #include <string>
 249  
 250  
 251             using namespace std;
 252             который надо вставить ДО объявления класса Dir. Строка 22 выглядит подходящей
 253  для этой операции.
 254             16.       Итоговый текст файла dir.h будет таким:
 255             /***********************************************************************
 256  ****
 257              *        Copyright (C) 2009 by Peter            *
 258              *        admin@academy.it.ru   *
 259              *
 260  *
 261              *        This program is free software; you can redistribute it and/or
 262  modify          *
 263              *        it under the terms of the GNU General Public License as published
 264  by     *
 265              *        the Free Software Foundation; either version 2 of the License, or
 266  *
 267              *        (at your option) any later version.
 268  *
 269  
 270  
 271  Академия АйТи                 Установка и администрирование ПСПО. Практика. Часть 4   Страница 11 из 64
 272           *
 273  *
 274           *      This program is distributed in the hope that it will be useful,
 275  *
 276           *      but WITHOUT ANY WARRANTY; without even the implied warranty of
 277  *
 278           *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               See the
 279  *
 280           *      GNU General Public License for more details.
 281  *
 282           *
 283  *
 284           *      You should have received a copy of the GNU General Public License
 285  *
 286           *      along with this program; if not, write to the
 287  *
 288           *      Free Software Foundation, Inc.,
 289  *
 290           *      59 Temple Place - Suite 330, Boston, MA               02111-1307, USA.
 291  *
 292  
 293  ***************************************************************************/
 294        #ifndef DIR_H
 295        #define DIR_H
 296        #include <iostream>
 297        #include <string>
 298  
 299         using namespace std;
 300  
 301         /**
 302               @author Peter <admin@academy.it.ru>
 303         */
 304         class Dir{
 305         string _name;
 306         int _numOfChild;
 307         bool _isOwner;
 308         public:
 309             Dir(string name,int numOfChild,bool isOwner);
 310             void GetInfo();
 311             ~Dir();
 312  
 313         };
 314  
 315         #endif
 316  
 317         А непосредственно в редакторе он будет выглядеть так, как показано на Рис. 13.
 318  
 319  
 320  
 321  
 322  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4       Страница 12 из 64
 323         Рис. 13
 324         17.      Перейдем к файлу реализации, dir.cpp для чего щелкнем по заголовку его
 325  закладки и способом, указанным в шаге 9 нашей практической работы включим
 326  нумерацию строк и для этой закладки. Полученный результат представлен на Рис. 14. На
 327  нем же приведен исходный текст этого файла как он был сгенерирован средой.
 328  
 329  
 330  
 331  
 332  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 13 из 64
 333             Рис. 14
 334             Снова с целью возможного «отката» запомним стартовый текст:
 335             /***********************************************************************
 336  ****
 337              *       Copyright (C) 2009 by Peter           *
 338              *       admin@academy.it.ru   *
 339              *
 340  *
 341              *       This program is free software; you can redistribute it and/or
 342  modify          *
 343              *       it under the terms of the GNU General Public License as published
 344  by     *
 345              *       the Free Software Foundation; either version 2 of the License, or
 346  *
 347              *       (at your option) any later version.
 348  *
 349              *
 350  *
 351              *       This program is distributed in the hope that it will be useful,
 352  *
 353              *       but WITHOUT ANY WARRANTY; without even the implied warranty of
 354  *
 355              *       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.            See the
 356  *
 357              *       GNU General Public License for more details.
 358  *
 359              *
 360  *
 361  
 362  
 363  Академия АйТи               Установка и администрирование ПСПО. Практика. Часть 4    Страница 14 из 64
 364            *     You should have received a copy of the GNU General Public License
 365  *
 366            *     along with this program; if not, write to the
 367  *
 368            *     Free Software Foundation, Inc.,
 369  *
 370            *     59 Temple Place - Suite 330, Boston, MA               02111-1307, USA.
 371  *
 372  
 373  ***************************************************************************/
 374        #include "dir.h"
 375  
 376           Dir::Dir()
 377           {
 378           }
 379  
 380  
 381           Dir::~Dir()
 382           {
 383           }
 384  
 385  
 386           Здесь обращает на себя внимание применение оператора разрешения области
 387  видимости (scope resolution operator) в виде двойного двоеточия (::). Запись
 388  SomeClass::SomeMethod говорит о том, что мы готовы приступить к реализации метода
 389  SomeMethod принадлежащего именно классу SomeClass. Ведь классы SomeClass2,
 390  MyClass да и наш создаваемый класс Dir все могли бы иметь одноименные методы и нам
 391  (да и компилятору) нужно было бы как-то различать - где чья реализация. Обсуждаемый
 392  оператор данный вопрос разрешает совершенно однозначно.
 393           18.    Полностью замените текущую реализацию конструктора (строки 22-24)
 394  такой:
 395           Dir::Dir(string name,int numOfChild,bool isOwner)
 396           {
 397                 _name=name;
 398                 _numOfChild=numOfChild;
 399                 _isOwner=isOwner;
 400           }
 401           19.    Сразу вслед за закрывающей скобкой тела конструктора (строка 28)
 402  реализуйте второй метод:
 403        void Dir::GetInfo()
 404        {
 405              cout << endl;
 406              cout << "Каталог " << _name << " имеет " << _numOfChild << "
 407  файлов и под-каталогов и ";
 408              if(_isOwner)
 409                    cout << "принадлежит текущему пользователю.";
 410              else
 411                    cout << "НЕ принадлежит текущему пользователю.";
 412              cout << endl;
 413        }
 414           20.    Деструктор нашего класса реализации не требует, а поэтому создание класса
 415  завершенно. Финальный текст файла dir.cpp будет таким:
 416  
 417  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4       Страница 15 из 64
 418             /***********************************************************************
 419  ****
 420              *       Copyright (C) 2009 by Peter           *
 421              *       admin@academy.it.ru   *
 422              *
 423  *
 424              *       This program is free software; you can redistribute it and/or
 425  modify          *
 426              *       it under the terms of the GNU General Public License as published
 427  by     *
 428              *       the Free Software Foundation; either version 2 of the License, or
 429  *
 430              *       (at your option) any later version.
 431  *
 432              *
 433  *
 434              *       This program is distributed in the hope that it will be useful,
 435  *
 436              *       but WITHOUT ANY WARRANTY; without even the implied warranty of
 437  *
 438              *       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.               See the
 439  *
 440              *       GNU General Public License for more details.
 441  *
 442              *
 443  *
 444              *       You should have received a copy of the GNU General Public License
 445  *
 446              *       along with this program; if not, write to the
 447  *
 448              *       Free Software Foundation, Inc.,
 449  *
 450              *       59 Temple Place - Suite 330, Boston, MA               02111-1307, USA.
 451  *
 452  
 453  ***************************************************************************/
 454        #include "dir.h"
 455  
 456        Dir::Dir(string name,int numOfChild,bool isOwner)
 457        {
 458              _name=name;
 459              _numOfChild=numOfChild;
 460              _isOwner=isOwner;
 461        }
 462        void Dir::GetInfo()
 463        {
 464              cout << endl;
 465              cout << "Каталог " << _name << " имеет " << _numOfChild << "
 466  файлов и под-каталогов и ";
 467              if(_isOwner)
 468                    cout << "принадлежит текущему пользователю.";
 469              else
 470                    cout << "НЕ принадлежит текущему пользователю.";
 471              cout << endl;
 472        }
 473  
 474  
 475             Dir::~Dir()
 476             {
 477             }
 478             Визуальное же его представление в окне редактора приведено на Рис. 15
 479  
 480  
 481  Академия АйТи               Установка и администрирование ПСПО. Практика. Часть 4       Страница 16 из 64
 482         Рис. 15
 483         21.      Переключаемся на самый первый файл, classdir_kdevelop.cpp, щелчком по
 484  его закладке и приступаем к реализации метода Main. В данный момент среда
 485  сгенерировала нам код, выводящий на консоль строку «Hello, world!» и внешний вид
 486  этого файла приведен на Рис. 16.
 487  
 488  
 489  
 490  
 491  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 17 из 64
 492             Рис. 16.
 493             Снова с целью возможного «отката» запомним стартовый текст:
 494             /***********************************************************************
 495  ****
 496              *       Copyright (C) 2009 by Peter           *
 497              *       admin@academy.it.ru   *
 498              *
 499  *
 500              *       This program is free software; you can redistribute it and/or
 501  modify          *
 502              *       it under the terms of the GNU General Public License as published
 503  by     *
 504              *       the Free Software Foundation; either version 2 of the License, or
 505  *
 506              *       (at your option) any later version.
 507  *
 508              *
 509  *
 510              *       This program is distributed in the hope that it will be useful,
 511  *
 512              *       but WITHOUT ANY WARRANTY; without even the implied warranty of
 513  *
 514              *       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.            See the
 515  *
 516              *       GNU General Public License for more details.
 517  *
 518              *
 519  *
 520  
 521  
 522  Академия АйТи               Установка и администрирование ПСПО. Практика. Часть 4    Страница 18 из 64
 523             *      You should have received a copy of the GNU General Public License
 524  *
 525             *      along with this program; if not, write to the
 526  *
 527             *      Free Software Foundation, Inc.,
 528  *
 529             *      59 Temple Place - Suite 330, Boston, MA               02111-1307, USA.
 530  *
 531  
 532  ***************************************************************************/
 533  
 534  
 535         #ifdef HAVE_CONFIG_H
 536         #include <config.h>
 537         #endif
 538  
 539         #include <iostream>
 540         #include <cstdlib>
 541  
 542         using namespace std;
 543  
 544         int main(int argc, char *argv[])
 545         {
 546           cout << "Hello, world!" << endl;
 547  
 548                 return EXIT_SUCCESS;
 549         }
 550         22.        Это определенно не то что нам требуется. А поэтому полностью перепишем
 551  реализацию метода Main, включая и заголовок. Сотрем строки с 31-й до конца файла и
 552  объявим на этом же месте метод Main так:
 553         int main()
 554         {
 555  
 556         }
 557         23.        Перед тем как наполнить тело метода операторами вспомним, что мы
 558  планировали воспользоваться строковой константой. Объявим ее ДО метода Main, к
 559  примеру в строке 30:
 560         const string YES_ANSWER("yes");
 561         24.        Начнем реализацию метода с декларации в строке 33 четырех локальных
 562  переменных:
 563         string _name;
 564         int _numOfChild;
 565         string _isOwnerAsString;
 566         bool _isOwner;
 567         25.        В строках 37-42 запросите у пользователя всю информацию нужную нам для
 568  создания экземпляра класса Dir:
 569         cout << "Введите имя каталога: ";
 570         cin >> _name;
 571         cout << "Введите число содержащихся в нем файлов и под-каталогов: ";
 572         cin >> _numOfChild;
 573  
 574  
 575  Академия АйТи             Установка и администрирование ПСПО. Практика. Часть 4       Страница 19 из 64
 576             cout << "Введите " << YES_ANSWER << " если текущий пользователь владеет
 577  каталогом, иначе нажмите Enter: ";
 578             cin >> _isOwnerAsString;
 579             26.      В строке 43 проанализируйте пользовательский ввод для последней
 580  переменной (_isOwnerAsString) и на этом основании присвойте локальной переменной
 581  _isOwner true или false:
 582             _isOwner=(_isOwnerAsString==YES_ANSWER);
 583             27.      В строке 44 задекларируйте пятую локальную переменную по имени _myDir
 584  типа Dir. Инициализируйте ее вызовом конструктора. Передайте последнему в качестве
 585  аргументов три соответствующих локальных переменных:
 586             Dir _myDir(_name,_numOfChild,_isOwner);
 587             28.      Наконец в строке 45 вызовете на новом экземпляре метод которые заставит
 588  этот экземпляр сообщить свое внутренне состояние:
 589             _myDir.GetInfo();
 590             29.      Убедитесь, что в строке 46 находится закрывающая фигурная скобка (}),
 591  завершающая тело метода Main.
 592             30.      Мы почти закончили с файлом classdir_kdevelop.cpp. Единственно, что пока
 593  не учтено, что в его тексте мы используем класс Dir, но метод Main "не понимает" о чем
 594  идет речь. Т.е. мы должны где-то ДО начала этого метода указать заголовочный файл
 595  используемого класса Dir. Строка 28 выглядит подходящей. Запишем в нее:
 596             #include "dir.h"
 597             31.      Финальный код файла classdir_kdevelop.cpp будет таким:
 598             /***********************************************************************
 599  ****
 600              *       Copyright (C) 2009 by Peter           *
 601              *       admin@academy.it.ru   *
 602              *
 603  *
 604              *       This program is free software; you can redistribute it and/or
 605  modify          *
 606              *       it under the terms of the GNU General Public License as published
 607  by     *
 608              *       the Free Software Foundation; either version 2 of the License, or
 609  *
 610              *       (at your option) any later version.
 611  *
 612              *
 613  *
 614              *       This program is distributed in the hope that it will be useful,
 615  *
 616              *       but WITHOUT ANY WARRANTY; without even the implied warranty of
 617  *
 618              *       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.            See the
 619  *
 620              *       GNU General Public License for more details.
 621  *
 622              *
 623  *
 624  Академия АйТи               Установка и администрирование ПСПО. Практика. Часть 4    Страница 20 из 64
 625           *      You should have received a copy of the GNU General Public License
 626  *
 627           *      along with this program; if not, write to the
 628  *
 629           *      Free Software Foundation, Inc.,
 630  *
 631           *      59 Temple Place - Suite 330, Boston, MA               02111-1307, USA.
 632  *
 633  
 634  ***************************************************************************/
 635  
 636  
 637         #ifdef HAVE_CONFIG_H
 638         #include <config.h>
 639         #endif
 640  
 641        #include <iostream>
 642        #include <cstdlib>
 643        #include "dir.h"
 644        using namespace std;
 645        const string YES_ANSWER("yes");
 646        int main()
 647        {
 648        string _name;
 649        int _numOfChild;
 650        string _isOwnerAsString;
 651        bool _isOwner;
 652        cout << "Введите имя каталога: ";
 653        cin >> _name;
 654        cout << "Введите число содержащихся в нем файлов и под-каталогов: ";
 655        cin >> _numOfChild;
 656        cout << "Введите " << YES_ANSWER << " если текущий пользователь владеет
 657  каталогом, иначе нажмите Enter: ";
 658        cin >> _isOwnerAsString;
 659        _isOwner=(_isOwnerAsString==YES_ANSWER);
 660        Dir _myDir(_name,_numOfChild,_isOwner);
 661        _myDir.GetInfo();
 662        }
 663         Визуальное же его представление в окне редактора приведено на Рис. 17
 664  
 665  
 666  
 667  
 668  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4       Страница 21 из 64
 669         Рис. 17
 670         32.      Проект   завершен,       проведем       его    компиляцию.       Для   этого    можно
 671  воспользоваться пунктом меню Сборка-Собрать проект (Рис. 18) или просто нажать F8.
 672  
 673  
 674  
 675  
 676         Рис. 18
 677  
 678  
 679  Академия АйТи            Установка и администрирование ПСПО. Практика. Часть 4          Страница 22 из 64
 680         33.      Как пояснялось в уроке «Работа со средой разработки ПО KDevelop» в
 681  теоретической части курса при первой компиляции среде KDevelop требуется создать
 682  специальный Makefile. Среда сообщит нам об этом в окне-предупреждении (Рис. 19).
 683  Разрешите ей провести создание и настройку этого файла нажав в этом окне кнопку
 684  Запустить. Процесс создания этого файла весьма длителен (20-30 сек. на современном
 685  компьютере), однако проводится только при самой первой компиляции проекта. Все
 686  последующие компиляции будут значительно быстрее.
 687  
 688  
 689  
 690  
 691         Рис. 19
 692         34.      Проанализируйте сообщения компилятора в окне Сообщения и убедитесь в
 693  отсутствии ошибок (Рис. 20). Об этом скажет отсутствие строк сообщений выводимых в
 694  это      окно      красным       цветом,         а      так       же       финальное      сообщение
 695  «*** Успешное завершение ***».
 696  
 697  
 698  
 699  
 700         Рис. 20
 701  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4          Страница 23 из 64
 702         35.      Попробуем провести пробный сеанс работы с нашей программой. Для этого
 703  не обязательно закрывать среду разработки или переключаться на консоль. Можно
 704  выбрать пункт меню Сборка-Выполнить программу (Рис. 21) или просто нажать
 705  Shift+F9. В ответ на любое из этих действий KDevelop сам откроет консоль и запустит в
 706  ней нашу программу.
 707  
 708  
 709  
 710  
 711         Рис. 21
 712         36.      Примите на себя роль пользователя программы ClassDir_KDevelop и
 713  ответьте на три вопроса подходящими сообщениями. Проанализируйте корректность
 714  вывода информации на консоль методом GetInfo() класса Dir. Пример диалога с нашей
 715  программой представлен на Рис. 22. В этом диалоге в качестве ответов на вопросы были
 716  использованы строки «MyDocs», «187», «yes».
 717  
 718  
 719  
 720  
 721         Рис. 22
 722         37.      Как предписывает нам последняя строчка в консольной сессии (Рис. 22)
 723  нажмите Enter, что бы завершить ее и вернуться в среду разработки KDevelop.
 724         38.      Работа над проектом окончена. Закройте KDevelop с помощью меню
 725  Файл-Выход (Рис. 23)
 726  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 24 из 64
 727         Рис. 23
 728         39.      Посмотрим, где на жестком диске располагается скомпилированный нами
 729  исполнимый модуль. Это позволит нам распространить нашу программу для всех
 730  желающих воспользоваться ее функционалом. Откройте универсальный браузер Conqueror
 731  и перейдите в наш домашний каталог (/home/admin). В списке содержащихся в нем
 732  подпапок можно видеть и корневую папку нашего проекта - Classier_Develop. (Рис. 24)
 733  
 734  
 735  
 736  
 737         Рис. 24
 738         40.      В дереве папок слева последовательно раскройте папки ClassDir_KDevelop
 739  и debug. Выберите единственную подпапку с именем src. В ее содержимом справа можно
 740  видеть иконку приложения с именем classdir_kdevelop (Рис. 25). Это единственный файл,
 741  который мы можем/должны распространить заинтересованным лицам. Запуск его из
 742  командной строки консоли приведет к инициированию только что опробованному нами
 743  диалогу из трех вопросов и одного информационного сообщения.
 744  
 745  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 25 из 64
 746         Рис. 25
 747  
 748  2. Практика работы с Lazarus и языком программирования Pascal
 749         1.       Итак, целью этого практического занятия будет решение той же самой
 750  задачи обозначенной в разделе «Постановка задачи», однако на этот раз в среде Lazarus
 751  и языке Pascal.
 752         Убедитесь, что вы вошли в систему с именем пользователя (login) admin. После
 753  этого из главного меню КДЕ-Прочие-Разработка-Lazarus запустите среду разработки
 754  Lazarus (Рис. 26).
 755  
 756  
 757  
 758  
 759         Рис. 26
 760         2.       Среда открывает проект по умолчанию, однако нам нужен проект иного
 761  типа, консольного. Поэтому текущий проект мы закроем выбрав в меню Проект-Закрыть
 762  проект (Рис. 27).
 763  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 26 из 64
 764         Рис. 27
 765         3.       Из трех предложенных вариантов продолжения работы укажите «Создать
 766  новый проект» (Рис. 28).
 767  
 768  
 769  
 770  
 771         Рис. 28
 772         4.       В окне «Создать новый проект» выберите шаблон «Программа
 773  пользователя» и нажмите Создать (Рис. 29).
 774  
 775  
 776  
 777  
 778         Рис. 29
 779         5.       Среда создаст первый (и пока единственный) файл нашего проекта
 780  - project1 и откроет его в редакторе (Рис. 30). Поскольку мы собираемся полностью
 781  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 27 из 64
 782  переписать текст этого файла (а не отредактировать его), то нумерация строк не является
 783  жизненной необходимостью, и включать ее мы не станем. Однако, что бы иметь
 784  возможность начать снова с этого места «запомним» исходный текст стартового файла:
 785         program Project1;
 786  
 787         {$mode objfpc}{$H+}
 788  
 789         uses
 790           Classes, SysUtils
 791           { you can add units after this };
 792  
 793         begin
 794         end.
 795  
 796  
 797  
 798  
 799         Рис. 30
 800         6.       Прежде чем приступать к редактированию сохраним файл project1 на диск
 801  и, вместе с ним, сохраним и весь проект. Так же организуем корневую папку нашего
 802  проекта. Выберите в меню Файл-Сохранить как…. (Рис. 31). Это должно привести в
 803  появлению диалога сохранения проекта (Рис. 32). Убедитесь, что мы находимся в нашей
 804  домашней папке, т.е. что в поле Looking in: указано /home/admin (значение по умолчанию).
 805  Для создания корневой папки проекта нажмите кнопку Создать каталог этого диалога.
 806  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 28 из 64
 807         Рис. 31
 808  
 809  
 810  
 811  
 812         Рис. 32
 813         7.       В окне «Создать каталог» введите имя корневой папки нашего проекта -
 814  ClassDir_Lazarus - и нажмите Создать (Рис. 33).
 815  
 816  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 29 из 64
 817         Рис. 33
 818         8.       Теперь в окне сохранения проекта, слева, в списке Каталоги должна
 819  появиться наша папка. Перейдите в нее двойным щелчком по ее имени (Рис. 34).
 820  
 821  
 822  
 823  
 824         Рис. 34
 825  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 30 из 64
 826         9.       Убедитесь, что в поле текущего местоположения (Looking in:) теперь
 827  указана корневая папка проекта, /home/admin/ClassDir_Lazarus. После чего в нижнем
 828  текстовом поле укажите имя текущего (сохраняемого) файла. Оно же станет и именем
 829  всего проекта. Остановимся на том же имени, что и корневая папка проекта -
 830  ClassDir_Lazarus. Проверьте еще раз правильность ввода и текущего местоположения и
 831  нажмите OK (Рис. 35).
 832  
 833  
 834  
 835  
 836         Рис. 35
 837         10.      Файл и проект успешно сохранены. Давайте приступим к написанию кода.
 838  Однако начнем не с файла главной программы открытой в настоящий момент в редакторе,
 839  а с несуществующего пока файла класса Dir. Добавим его в наш проект, для чего
 840  выберите пункты меню Файл-Создать модуль (Рис. 36).
 841  
 842  
 843  
 844  
 845  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 31 из 64
 846         Рис. 36
 847         11.      Новый файл (модуль) добавляется к нашему проекту и открывается в
 848  редакторе. Дадим ему подходящее имя и сохраним на диск. Снова выбираем Файл-
 849  Сохранить как…. (Рис. 31). Открывается окно практически идентичное окну сохранения
 850  проекта. Убеждаемся, что мы по-прежнему находимся в корневой папке проекта
 851  (проверяем значение поля Looking in:) и в нижнем текстовом поле вводим имя нового
 852  файла - dirunit (обратите внимание на нижний регистр всех символов!). Проверьте еще
 853  раз правильность ввода и текущего местоположения и нажмите OK (Рис. 37).
 854  
 855  
 856  
 857  
 858  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 32 из 64
 859         Рис. 37
 860         12.      Итак, мы готовы написать код класса Dir согласно дизайн-схеме нашего
 861  проекта. Для возможности начать все сначала зафиксируем текущее содержимое файла
 862  dirunit:
 863         unit dirunit;
 864  
 865         {$mode objfpc}{$H+}
 866  
 867         interface
 868  
 869         uses
 870           Classes, SysUtils;
 871  
 872         implementation
 873  
 874         end.
 875         Убедитесь, что в редакторе активна закладка именно этого файла (Рис. 38).
 876  
 877  
 878  
 879  
 880  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 33 из 64
 881         Рис. 38
 882         13.      Мы не будем пользоваться кодом из шаблона файла dirunit, а напишем его
 883  самостоятельно, с нуля. Поэтому полностью сотрите все текущее его содержимое и
 884  начните с декларации юнита (модуля):
 885         unit DirUnit;
 886         14.      Откройте в следующей строке декларативную часть юнита ключевым
 887  словом interface:
 888         interface
 889         15.      В этой части нам требуется задекларировать сам класс Dir, все его поля,
 890  конструктор и метод GetInfo. Однако реализацию обоих методов мы откладываем до
 891  второй части юнита. Ваш код должен напоминать следующий:
 892         Type
 893               Dir = Object
 894         private
 895                  _name : string;
 896                  _numOfChild : integer;
 897  
 898  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 34 из 64
 899                   _isOwner : boolean;
 900         public
 901                   Constructor Init(name : string; numOfChild : integer;
 902  isOwner:boolean);
 903                   procedure GetInfo;
 904         16.      Завершите декларативную часть юнита ключевым словом end:
 905         end;
 906         17.      Откройте вторую,          реализационную          часть     юнита ключевым словом
 907  implementation:
 908         implementation
 909         18.      В этой части нам требуется написать код обоих методов класса Dir. Начните
 910  с его конструктора:
 911           Constructor         Dir.Init(name          :      string;        numOfChild   :    integer;
 912  isOwner:boolean);
 913           begin
 914         _name := name;
 915                  _numOfChild := numOfChild;
 916                   _isOwner := isOwner;
 917           end;
 918         Обратите внимание, что перед именем метода (конструктора, в данном случае)
 919  должно идти имя класса которому этот метод и принадлежит.
 920         19.      Реализуйте процедуру GetInfo:
 921         procedure Dir.GetInfo;
 922         begin
 923                  writeln;
 924                  write('Каталог ', _name, ' имеет ', _numOfChild, ' файлов и под-
 925  каталогов и ');
 926                  if (_isOwner) then
 927                         write('принадлежит текущему пользователю.')
 928                  else
 929                         write('НЕ принадлежит текущему пользователю.');
 930                  writeln;
 931         end;
 932         20.      Завершите код модуля dirunit ключевым словом end (обратите внимание на
 933  точку в конце):
 934         end.
 935         21.      Итоговый код модуля dirunit будет примерно таким:
 936         unit DirUnit;
 937         interface
 938         Type
 939  
 940  Академия АйТи              Установка и администрирование ПСПО. Практика. Часть 4       Страница 35 из 64
 941             Dir = Object
 942         private
 943                   _name : string;
 944                   _numOfChild : integer;
 945                   _isOwner : boolean;
 946         public
 947                   Constructor Init(name : string; numOfChild : integer;
 948  isOwner:boolean);
 949                   procedure GetInfo;
 950         end;
 951         implementation
 952            Constructor Dir.Init(name : string; numOfChild : integer;
 953  isOwner:boolean);
 954            begin
 955                  _name := name;
 956                  _numOfChild := numOfChild;
 957                    _isOwner := isOwner;
 958            end;
 959            procedure Dir.GetInfo;
 960            begin
 961                    writeln;
 962                    write('Каталог ', _name, ' имеет ', _numOfChild, ' файлов и под-
 963  каталогов и ');
 964                    if (_isOwner) then
 965                           write('принадлежит текущему пользователю.')
 966                    else
 967                           write('НЕ принадлежит текущему пользователю.');
 968                    writeln;
 969            end;
 970         end.
 971         А визуально, в редакторе, он будет выглядеть как на Рис. 39, 40:
 972  
 973  
 974  
 975  
 976  Академия АйТи            Установка и администрирование ПСПО. Практика. Часть 4   Страница 36 из 64
 977         Рис. 39
 978  
 979  
 980  
 981  
 982         Рис. 40
 983         22.      Сохраните проделанную работу на диск для чего выберите пункты меню
 984  Файл-Сохранить (Рис. 41).
 985  
 986  
 987  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 37 из 64
 988         Рис. 41
 989         23.      Переключитесь на файл кода главной программы, для чего щелкните по
 990  ярлыку ClassDir_Lazarus в заголовке редактора (Рис. 42).
 991  
 992  
 993  
 994  
 995         Рис. 42
 996  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 38 из 64
 997         24.      Как и с файлом класса Dir напишем код главной программы с нуля. Поэтому
 998  снова полностью сотрите все текущее содержимое активного окна редактора и начните с
 999  заголовка программы:
1000         program ClassDir_Lazarus;
1001         25.      В секции uses объявите, что наша главная программа будет использовать
1002  тип декларированный и реализованный в юните DirUnit:
1003         uses DirUnit;
1004         26.      В секции const объявите требуемую нам по условию задачи строковую
1005  константу:
1006         const YES_ANSWER='yes';
1007         27.      В секции var объявите все 5 переменных, которыми будет оперировать наша
1008  программа:
1009         var
1010               _name, _isOwnerAsString : string;
1011               _numOfChild : integer;
1012               _isOwner : boolean;
1013               _myDir : Dir;
1014         28.      В операторных скобках begin…end реализуйте тело главной программы. Не
1015  забудьте о точке после закрывающей скобки (end):
1016         begin
1017             write('Введите имя каталога: ');
1018             readln(_name);
1019             write('Введите число содержащихся в нем файлов и под-каталогов: ');
1020             readln(_numOfChild);
1021             write('Введите ', YES_ANSWER, ' если текущий пользователь владеет
1022  каталогом, иначе нажмите Enter: ');
1023             readln(_isOwnerAsString);
1024             _isOwner:=(_isOwnerAsString=YES_ANSWER);
1025             _myDir.Init(_name, _numOfChild, _isOwner);
1026             _myDir.GetInfo;
1027        end.
1028         29.      Итоговый код модуля ClassDir_Lazarus будет примерно таким:
1029         program ClassDir_Lazarus;
1030         uses DirUnit;
1031  
1032        const YES_ANSWER='yes';
1033        var
1034            _name, _isOwnerAsString : string;
1035            _numOfChild : integer;
1036            _isOwner : boolean;
1037            _myDir : Dir;
1038        begin
1039              write('Введите имя каталога: ');
1040              readln(_name);
1041              write('Введите число содержащихся в нем файлов и под-каталогов: ');
1042              readln(_numOfChild);
1043              write('Введите ', YES_ANSWER, ' если текущий пользователь владеет
1044  каталогом, иначе нажмите Enter: ');
1045              readln(_isOwnerAsString);
1046              _isOwner:=(_isOwnerAsString=YES_ANSWER);
1047              _myDir.Init(_name, _numOfChild, _isOwner);
1048              _myDir.GetInfo;
1049  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 39 из 64
1050         end.
1051         А визуально, в редакторе, он будет выглядеть как на Рис. 43.
1052  
1053  
1054  
1055  
1056         Рис. 43
1057         30.      Сохраните проделанную работу на диск для чего выберите пункты меню
1058  Файл-Сохранить (Рис. 41).
1059         31.      Попробуем скомпилировать нашу программу, для чего выберем в меню
1060  Запуск-Собрать или просто нажмем Ctrl+F9 (Рис. 44).
1061  
1062  
1063  
1064  
1065  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 40 из 64
1066         Рис. 44
1067         32.      Если никаких ошибок допущено не было окно Сообщения информирует нас
1068  об успешной сборке проекта (Рис. 45).
1069  
1070  
1071  
1072  
1073         Рис. 45
1074  
1075  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 41 из 64
1076         33.      Мы готовы произвести пробный запуск нашей программы, однако консоль,
1077  открываемую изнутри Lazarus нужно предварительно настроить. Выбираем в меню
1078  Запуск-Параметры запуска… (Рис. 46).
1079  
1080  
1081  
1082  
1083         Рис. 46
1084         34.      В   открывшемся        диалоге        Параметры        запуска      отмечаем       опцию
1085  Использовать приложение для запуска. Помимо этого, в текстовом поле ниже этой
1086  опции надо проверить путь к приложению для запуска. По умолчанию таковым выступает
1087  xterm и среда предлагает такой путь к этому эмулятору терминала:
1088         /usr/X11R6/bin/xterm               -T          'Lazarus            Run         Output'            -e
1089  $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)
1090         Здесь параметры xterm указаны верно, а вот путь к самому xterm ошибочен, т.к. он
1091  располагается       по   абсолютному           пути     /usr/bin/xterm.          Поэтому     исправляем
1092  вышеприведенную строку запуска убирая в ней ошибочную части пути (X11R6).
1093  Финальный вариант командной строки будет такой:
1094         /usr/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh
1095  $(TargetCmdLine)
1096         Завершаем работу с данным диалогом нажатием на OK (Рис. 47).
1097  Академия АйТи            Установка и администрирование ПСПО. Практика. Часть 4             Страница 42 из 64
1098         Рис. 47
1099         35.      Теперь мы готовы к тестовому прогону нашего приложения. Выберите в
1100  меню Запуск-Запуск или просто нажмите F9 (Рис. 48).
1101  
1102  
1103  
1104  
1105         Рис. 48
1106         36.      Примите на себя роль пользователя программы ClassDir_Lazarus и ответьте
1107  на три вопроса подходящими сообщениями. Проанализируйте корректность вывода
1108  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 43 из 64
1109  информации на консоль методом GetInfo() класса Dir. Пример диалога с нашей
1110  программой представлен на Рис. 49. В этом диалоге в качестве ответов на вопросы были
1111  использованы строки «MyDocs», «187», «yes».
1112  
1113  
1114  
1115  
1116         Рис. 49
1117         Как предписывает нам последняя строчка в консольной сессии (Рис. 49) нажмите
1118  Enter что бы завершить ее и вернуться в среду разработки Lazarus. В информационном
1119  окне «Выполнение остановлено» нажмите единственную кнопку OK (Рис. 50).
1120  
1121  
1122  
1123  
1124  Академия АйТи        Установка и администрирование ПСПО. Практика. Часть 4   Страница 44 из 64
1125         Рис. 50
1126         37.      Работа над проектом окончена. Закройте Lazarus с помощью меню
1127  Файл-Выход (Рис. 51)
1128  
1129  
1130  
1131  
1132         Рис. 51
1133  
1134  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 45 из 64
1135         38.      Посмотрим где на жестком диске располагается скомпилированный нами
1136  исполнимый модуль. Это позволит нам распространить нашу программу для всех
1137  желающих        воспользоваться ее функционалом. Откройте универсальный браузер
1138  Conqueror и перейдите в наш домашний каталог (/home/admin). В списке содержащихся в
1139  нем подпапок можно видеть и корневую папку нашего проекта - Classier_Lazarus (Рис.
1140  52)
1141  
1142  
1143  
1144  
1145         Рис. 52
1146         39.      В дереве папок слева выберите папку ClassDir_Lazarus. В ее содержимом
1147  справа можно видеть одноименную иконку приложения (Рис. 53). Это единственный
1148  файл, который мы можем/должны распространить заинтересованным лицам. Запуск его из
1149  командной строки консоли приведет к инициированию только что опробованному нами
1150  диалогу из трех вопросов и одного информационного сообщения. Так же заметьте, что в
1151  этой же папке собраны и все файлы исходного кода нашего приложения, а так же файл
1152  самого проекта (ClassDir_Lazarus.lpi).
1153  
1154  
1155  
1156  
1157         Рис. 53
1158  
1159  3. Практика работы с Gambas и языком программирования BASIC
1160         1.       Снова целью этого практического занятия будет решение той же самой
1161  задачи обозначенной в разделе «Постановка задачи», однако на этот раз в среде Gambas
1162  и языке BASIC.
1163  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 46 из 64
1164         Традиционно убедитесь, что вы вошли в систему с именем пользователя (login)
1165  admin. После этого из главного меню КДЕ-Прочие-Разработка-Интегрированная среда
1166  разработки Gambas (Gambas IDE) запустите среду разработки Gambas (Рис. 54).
1167  
1168  
1169  
1170  
1171         Рис. 54
1172         2.       В открывшемся окне «Добро пожаловать в Gambas II» выберите пункт
1173  «Новый проект» (Рис. 55).
1174  
1175  
1176  
1177  
1178         Рис. 55
1179  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 47 из 64
1180         3.       Это приведет к запуску трехшагового мастера создания нового проекта. На
1181  шаге «1. Тип проекта» укажите Консольное приложение и нажмите Next (Рис. 56).
1182  
1183  
1184  
1185  
1186         Рис. 56
1187         4.       На шаге «2. Директория проекта» мастера создания нового проекта мы
1188  можем выбрать родительскую папку для будущей корневой папки проекта. Нажатием на
1189  кнопку Next примите вариант по умолчанию (/home/admin) (Рис. 57).
1190  
1191  
1192  
1193  
1194  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 48 из 64
1195         Рис. 57
1196         5.       На шаге финальном «3. Информация о проекте» мастера создания нового
1197  проекта укажите в поле Имя создаваемого проекта - ClassDir_Gambas. Напомним, что
1198  такое же имя будет иметь корневая папка проекта. Поле Заголовок оставьте пустым и
1199  нажмите OK (Рис. 58).
1200  
1201  
1202  
1203  
1204         Рис. 58
1205  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 49 из 64
1206         6.       В окне подтверждения создания нового проекта нажмите единственную
1207  кнопку OK (Рис. 59).
1208  
1209  
1210  
1211  
1212         Рис. 59
1213         7.       Открывается рабочее пространство (workspace) пакета Gambas с только что
1214  созданным проектом. Проект пока состоит из единственного файла - MMain.module. Это
1215  файл, содержащий код главной подпрограммы Main. Однако среда не открывает его для
1216  редактирования автоматически. Мы сделаем это самостоятельно чуть позже. Пока в окне
1217  «Совет дня» очистите флажок Показывать советы при старте и нажмите Закрыть (Рис.
1218  60).
1219  
1220  
1221  
1222  
1223         Рис. 60
1224         8.       Давайте приступим к написанию кода. Однако, как и в двух предыдущих
1225  практиках, начнем не с файла главной подпрограммы, а с несуществующего пока файла
1226  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 50 из 64
1227  класса Dir. Добавим его в наш проект, для чего щелкнем правой кнопкой мыши в любом
1228  месте вспомогательного окна проекта и выберем из появившегося контекстного меню
1229  Новый-Класс… (Рис. 61).
1230  
1231  
1232  
1233  
1234         Рис. 61
1235         9.       Появляется окно диалога «Новый файл». В нем в поле Имя укажите имя
1236  нашего будущего класса - Dir, и нажмите OK (Рис. 62).
1237  
1238  
1239  
1240  
1241  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 51 из 64
1242         Рис. 62
1243         10.      Новый файл добавляется к проекту и визуально отображается в окне проекта
1244  под узлом дерева Классы. (Рис. 63) Так же новый файл автоматически открывается для
1245  редактирования. Пока он содержит всего лишь одну строку комментария:
1246         ' Gambas class file
1247  
1248  
1249  
1250  
1251         Рис. 63
1252         11.      Оставим комментарий как он есть. Начиная со строки 2, задекларируйте все
1253  3 поля нашего класса Dir. Соблюдая принципы ООП, объявите их приватными:
1254  
1255  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 52 из 64
1256         PRIVATE _name AS String
1257         PRIVATE _numOfChild AS Integer
1258         PRIVATE _isOwner AS Boolean
1259         12.      С целью структуризации текста оставьте одну строчку пустой, а затем
1260  декларируйте и реализуйте конструктор нового класса:
1261        PUBLIC SUB _new(name AS String,                  numOfChild        AS     Integer,    isOwner      AS
1262  Boolean)
1263          _name = name
1264          _numOfChild = numOfChild
1265          _isOwner = isOwner
1266        END
1267         13.      Точно так же поступите со вторым методом (подпрограммой) класса Dir,
1268  GetInfo:
1269        PUBLIC SUB GetInfo()
1270          PRINT
1271          PRINT "Каталог " & _name & " имеет " & _numOfChild & " файлов и под-
1272  каталогов и ";
1273          IF _isOwner THEN
1274            PRINT "принадлежит текущему пользователю."
1275          ELSE
1276            PRINT "НЕ принадлежит текущему пользователю."
1277          ENDIF
1278        END
1279         14.      Итоговый код файла Dir.class будет примерно таким:
1280         ' Gambas class file
1281         PRIVATE _name AS String
1282         PRIVATE _numOfChild AS Integer
1283         PRIVATE _isOwner AS Boolean
1284  
1285        PUBLIC SUB _new(name AS String, numOfChild AS Integer, isOwner AS
1286  Boolean)
1287          _name = name
1288          _numOfChild = numOfChild
1289          _isOwner = isOwner
1290        END
1291        PUBLIC SUB GetInfo()
1292          PRINT
1293          PRINT "Каталог " & _name & " имеет " & _numOfChild & " файлов и под-
1294  каталогов и ";
1295          IF _isOwner THEN
1296            PRINT "принадлежит текущему пользователю."
1297          ELSE
1298            PRINT "НЕ принадлежит текущему пользователю."
1299          ENDIF
1300        END
1301         А визуально, в редакторе, он будет выглядеть как на Рис. 64:
1302  
1303  
1304  
1305  
1306  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4              Страница 53 из 64
1307         Рис. 64
1308         15.      Теперь двойным щелчком по имени файла главной подпрограммы - MMain
1309  - в окне проекта откроем этот файл для редактирования. Пока код этого файла содержит
1310  лишь комментарий и декларацию главной подпрограммы Main. «Запомним» этот
1311  стартовый код для возможности вернуться к нему:
1312         ' Gambas module file
1313  
1314         PUBLIC SUB Main()
1315  
1316         END
1317         Визуально же все пока выглядит как на Рис. 65.
1318  
1319  
1320  
1321  
1322  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 54 из 64
1323         Рис. 65
1324         16.       В строке 2, между комментарием и декларацией подпрограммы Main,
1325  объявите требуемую по условиям разрабатываемой программы константу:
1326         CONST YES_ANSWER AS String = "yes"
1327         17.       На строчке следующей за декларацией подпрограммы Main объявите все
1328  пять локальных переменных требуемых этой подпрограмме для нормальной работы:
1329         DIM      _name, _isOwnerAsString AS String
1330         DIM      _numOfChild AS Integer
1331         DIM      _isOwner AS Boolean
1332         DIM      _myDir AS Dir
1333         18.       Далее запросите у пользователя нашей программы всю необходимую
1334  информацию:
1335        PRINT "Введите имя каталога: "
1336        INPUT _name
1337        PRINT "Введите число содержащихся в нем файлов и подкаталогов: "
1338        INPUT _numOfChild
1339        PRINT "Введите " & YES_ANSWER & " если текущий пользователь владеет
1340  каталогом, иначе нажмите Enter: "
1341        INPUT _isOwnerAsString
1342         19.       Проанализируйте пользовательский ввод для последней переменной и на
1343  этом основании установите другую переменную, _isOwner, в значение true либо false:
1344         _isOwner = (_isOwnerAsString = YES_ANSWER)
1345         20.       Наконец создайте экземпляр класса Dir вызовом его конструктора с
1346  требуемым числом аргументов. На этом новом экземпляре вызовите информационный
1347  метод (подпрограмму) GetInfo:
1348         _myDir = NEW Dir(_name, _numOfChild, _isOwner)
1349         _myDir.GetInfo
1350         21.       Итоговый код файла главной подпрограммы будет таким:
1351         ' Gambas module file
1352         CONST YES_ANSWER AS String = "yes"
1353         PUBLIC SUB Main()
1354         DIM _name, _isOwnerAsString AS String
1355         DIM _numOfChild AS Integer
1356  Академия АйТи            Установка и администрирование ПСПО. Практика. Часть 4   Страница 55 из 64
1357         DIM _isOwner AS Boolean
1358         DIM _myDir AS Dir
1359                  PRINT "Введите имя каталога: "
1360                  INPUT _name
1361                  PRINT "Введите число содержащихся в нем файлов и подкаталогов: "
1362                  INPUT _numOfChild
1363                  PRINT   "Введите   "   &   YES_ANSWER    &   "   если   текущий    пользователь   владеет
1364  каталогом, иначе нажмите Enter: "
1365                  INPUT _isOwnerAsString
1366                  _isOwner = (_isOwnerAsString = YES_ANSWER)
1367                  _myDir = NEW Dir(_name, _numOfChild, _isOwner)
1368                  _myDir.GetInfo
1369         END
1370  
1371         Визуально же итоговый результат должен выглядеть как на Рис. 66.
1372  
1373  
1374  
1375  
1376         Рис. 66
1377         22.       Код программы написан. В целом было бы неплохой идеей сохранить
1378  результаты работы на диск. Однако мы знаем, что запуск процедуры компиляции сначала
1379  сохраняет все несохраненные файлы и лишь потом переходит непосредственно к
1380  компиляции. Воспользуемся этой удобной функциональностью «два в одном» и перейдем
1381  к указанной процедуре. Для этого достаточно выбрать в главном меню среды Проект-
1382  Компилировать Все или просто нажать Alt+F7 (Рис. 67).
1383  
1384  
1385  Академия АйТи              Установка и администрирование ПСПО. Практика. Часть 4           Страница 56 из 64
1386         Рис. 67
1387         23.      Признаком    успешной        компиляции        является         отсутствие     каких-либо
1388  информационных окон с сообщениями об ошибках. Если же такое окно возникло -
1389  прочтите сообщение об ошибке, исправьте ее в редакторе и перезапустите компиляцию
1390  проекта. Добейтесь успеха в этой операции, прежде чем двигаться дальше.
1391         24.      После успешной компиляции интерпретатор языка Gambas готов выполнить
1392  наш код строчка за строчкой. Напомним, что в отличии от большинства компиляторов и
1393  сред разработок компиляция программы на языке Gambas НЕ означает создания
1394  выходного исполнимого модуля. Однако для запуска в среде Gambas наша программа
1395  полностью готова, выбираем в главном меню среды Отладка-Старт или просто
1396  нажимаем F5 (Рис. 68).
1397  
1398  
1399  
1400  
1401  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4                Страница 57 из 64
1402         Рис. 68
1403         25.      Примите на себя роль пользователя программы ClassDir_Gambas и ответьте
1404  на три вопроса подходящими сообщениями. Проанализируйте корректность вывода
1405  информации на консоль методом GetInfo() класса Dir. Пример диалога с нашей
1406  программой представлен на Рис. 69. В этом диалоге в качестве ответов на вопросы были
1407  использованы строки «MyDocs», «187», «yes». Имейте в виду, что в среде Gambas окно
1408  консоли встроено прямо в главное окно и не требует открытия окна консоли реальной, как
1409  это было в двух предыдущих средах.
1410  
1411  
1412  
1413  
1414  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 58 из 64
1415         Рис. 69
1416         26.      Если нам требуется теперь передать готовую программу на другой
1417  компьютер то можно, безусловно, просто отдать файлы исходного кода. При наличии на
1418  целевом компьютере интерпретатора языка Gambas эти файлы можно будет запустить и
1419  там. Посмотрим более удобный способ распространения готовой программы - упаковка
1420  всех файлов исходного кода в один архив. Выберите в главном меню Проект-Собрать-
1421  Executable… или, что тоже самое, нажмите Ctrl+Alt+M (Рис. 70).
1422  
1423  
1424  
1425  
1426  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 59 из 64
1427         Рис. 70
1428         27.      В появившемся окне «Сделать исполняемый модуль» (название окна не
1429  слишком удачное; создаваемый модуль не будет таковым с т.з. операционной системы, а
1430  будет просто архивом файлов исходного кода) проверьте значения по умолчанию:
1431         ·        папка для создания модуля - /home/admin/ClassDir_Gambas
1432         ·        имя создаваемого модуля - ClassDir_Gambas.gambas
1433         и нажмите OK (Рис. 71).
1434  
1435  
1436  
1437  
1438  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 60 из 64
1439         Рис. 71
1440         28.      Снова критерием успешности процесса будет отсутствие каких-либо
1441  информационных окон с сообщениями об ошибках в создании выходного пакета. Мы
1442  закончили работу со средой Gambas и можем ее закрыть. Как и везде - меню Файл-Выход
1443  или просто Ctrl+Q (Рис. 72).
1444  
1445  
1446  
1447  
1448  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 61 из 64
1449         Рис. 72
1450         29.      Посмотрим, где на диске разместились файлы исходного кода, а так же
1451  созданный в последней операции архивный пакет этих файлов. Откройте универсальный
1452  браузер Konqueror и перейдите в наш домашний каталог (/home/admin). В списке
1453  содержащихся в нем подпапок можно видеть и корневую папку нашего проекта -
1454  ClassDir_Gambas (Рис. 73)
1455  
1456  
1457  
1458  
1459  Академия АйТи          Установка и администрирование ПСПО. Практика. Часть 4   Страница 62 из 64
1460         Рис. 73
1461         30.      В дереве папок слева выберите папку ClassDir_Gambas. Состав этой папки
1462  будет таким:
1463         ·        файлы исходного кода входящие в проект - MMain.module и Dir.class
1464         ·        резервные копии этих файлов (у них к расширению добавляется тильда, ~)
1465         ·        файл, содержащий компрессированную версию кода всех исходных файлов
1466  (архив или пакет) - ClassDir_Gambas.gambas. Он выделен на Рис. 74.
1467  
1468  
1469  
1470  
1471  Академия АйТи           Установка и администрирование ПСПО. Практика. Часть 4   Страница 63 из 64
1472         Рис. 74
1473         31.      Для распространения нашей готовой программы нам достаточно передать
1474  лишь     один     этот    архив.     Целевому        компьютеру         потребуется,   как     всегда,
1475  идентичная/совместимая версия ОС Linux и плюс интерпретатор языка Gambas.
1476  Последний может иметь имена gbx2 или gbr2, в зависимости от того предназначен ли он
1477  для запуска непосредственно исходных файлов (.module/.class) или архива (.gambas).
1478  Поскольку мы передаем файл именно последнего типа и предположив что на целевом
1479  компьютере Gambas-интерпретатор корректно проинсталлирован и настроен мы можем в
1480  консоли целевого компьютера дать команду:
1481         [admin@mlinux xxx]$ gbr2 ClassDir_Gambas.gambas
1482         где xxx - папка целевого компьютера, в которую мы и скопировали выходной
1483  архив. Такая команда приведет к инициированию только что опробованному нами
1484  диалогу из трех вопросов и одного информационного сообщения.
1485  
1486  
1487  
1488  
1489  Академия АйТи            Установка и администрирование ПСПО. Практика. Часть 4         Страница 64 из 64
1490  
1491  

ALTLinuxEdu: FrBrGeorge/DraftsAndJunk/PspoItRu/APSPO Programm-практика ч4 (last edited 2009-10-27 13:18:09 by FrBrGeorge)