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)