Проектування клієнту навігаційної системи

Стан комп`ютерізації підприємства ТОВ "Люксофт-Україна". Середа розробки Eclipse. Ознайомлення з мовою програмування С++. Розробка клієнту навігаційної системи для відображення місцеперебування користувача у реальному часі з використанням онлайн мап.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 12.09.2012
Размер файла 2,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

20

Размещено на http://www.allbest.ru/

Вступ

В наш час одна з найбільш стрімко зростаючих областей промисловості

це автомобільна. Це зумовлено потрібністю людей пересуватися, перевозити вантажі. Автомобілі відіграють величезну роль у житті людей та світовій економіці, без них неможливе повноцінне функціонування багатьох сфер життя. Щодня мільйони людей користуються автомобілями для того аби дістатися на роботи, до магазину, чи поїхати на відпочинок. Проте з появою можливості пересуватися на великі відстані з'явилася проблема знаходження шляху до місця призначення. Орієнтуватися у великому місті досить складно,особливо якщо це перший візит до цього міста. Останнім часом цю проблемувирішують за допомогою GPS навігації. До машини встановлюється невеликий пристрій який виводить інформацію про місцеположення, карту місцевості та дозволяє прокласти маршрут до місця призначення. Таким чином стає можливим легке орієнтування у незнайомому місті, знаходження необхідних місць, та знаходження маршруту за кілька секунд.

1. Стан комп'ютерізації підприємства ТОВ «Люксофт-Україна»

Міжнародна компанія Luxoft є однією з провідних IT-компаній у світі. Вона має офіси у багатьох країнах, один з таких офісів знаходиться в Одесі. Одеський філіал компанії займається автомобільними проектами, та співпрацює з найбільшими автовиробниками. Завдяки цьому підприємство оснащено найкращою технікою. Кожен співробітник має своє робоче місце на якому знаходиться комп'ютер з'єднаний з мережею Інтернет через головний сервер. Потужність комп'ютерів залежить від проекту над яким працює людина та її посади. Чим вища посада тим кращий комп'ютер їй надається. Комп'ютери у одній кімнаті з'єднуються у локальну мережу. В одній кімнаті знаходиться не більше 6 робочих місць. На комп'ютерах використовуються операційні системи Windows XP, Windows Seven, Linux.

2. Практика на робочому місці

2.1 Ознайомлення зі спеціалізованим програмним забезпеченням

2.1.1 Середа розробки Eclipse

Eclipse -- вільне модульне інтегроване середовище розробки програмного забезпечення. Розробляється і підтримується Eclipse Foundation. Написаний в основному на Java, і може бути використаний для розробки застосунків на Java і, за допомогою різніх плагінів, на інших мовах програмування, включаючи Ada, C, C++, COBOL, Perl, PHP, Python, R, Ruby (включно з каркасом Ruby on Rails), Scala, Clojure та Scheme. Середовища розробки зокрема включають Eclipse ADT (Ada Development Toolkit) для Ada, Eclipse CDT для C/C++, Eclipse JDT для Java, Eclipse PDT для PHP.

Початок коду йде від IBM VisualAgehttp://uk.wikipedia.org/wiki/Eclipse - cite_note-VisualAge-0, він був розрахований на розробників Java, складаючи Java Development Tools (JDT). Але користувачі могли розширяти можливості, встановлюючи написані для програмного каркасу Eclipse плагіни, такі як інструменти розробки під інші мови програмування, і могли писати і вносити свої власні плагіни і модулі.

Випущена на умовах Eclipse Public License, Eclipse є вільним програмним забезпеченням. Він став одним з перших IDE під GNU Classpath і без проблем робить під IcedTea.

Eclipse являє собою фреймворк для розробки модульних кросс-платформових застосунків із низкою особливостей:

· можливість розробки ПЗ на багатьох мовах програмування (рідною є Java);

· крос-платформова;

· модульна, призначена для подальшого розширення незалежним розробниками;

· з відкритим вихідним кодом;

· розробляється і підтримується фондом Eclipse, куди входять такі постачальники ПЗ, як IBM, Oracle, Borland.

Спочатку проект розроблявся в IBM як корпоративний стандарт IDE, настановлений на розробки на багатьох мовах під платформи IBM. Потім проект було перейменовано на Eclipse і надано для подальшого розвитку спільноті.

Eclipse насамперед повноцінна Java IDE, націлена на групову розробку, має засоби роботи з системами контролю версій (підтримка CVS входить у поставку Eclipse, активно розвиваються кілька варіантів SVN модулів, існує підтримка VSS та інших). З огляду на безкоштовність, у багатьох організаціях Eclipse -- корпоративний стандарт для розробки ПЗ на Java.

Друге призначення Eclipse -- служити платформою для нових розширень. Такими стали C/C++ Development Tools (CDT), розроблювані інженерами QNX разом із IBM, засоби для підтримки інших мов різних розробників. Безліч розширень доповнює Eclipse менеджерами для роботи з базами даних, серверами застосунків та інших.

З версії 3.0 Eclipse став не монолітною IDE, яка підтримує розширення, а набором розширень. У основі лежать фреймворки OSGi, і SWT/JFace, на основі яких розроблений наступний шар -- платформа і засоби розробки повноцінних клієнтських застосунків RCP (Rich Client Platform). Платформа RCP є базою для розробки різних RCP програм як торент-клієнт Azareus чи File Arranger. Наступний шар -- платформа Eclipse, що є набором розширень RCP -- редактори, панелі, перспективи, модуль CVS і модуль Java Development Tools (JDT).

Eclipse написана на Java, тому є платформо-незалежним продуктом, крім бібліотеки графічного інтерфейсу SWT, яка розробляється окремо для більшості поширених платформ. Бібліотека SWT використовує графічні засоби платформи (ОС), що забезпечує швидкість і звичний зовнішній вигляд інтерфейсу користувача.

Відповідно до IDC, із Eclipse працюють 2.3 мільйона розробників.

Основою Eclipse є платформа розширеного клієнта (RCP -- від англ. rich client platform). Її складають такі компоненти:

· Ядро платформи (завантаження Eclipse, запуск модулів);

· OSGi (стандартне середовище постачання комплектів);

· SWT (стандартний інструментарій віджетів);

· JFace (файлові буфери, робота з текстом, текстові редактори);

· Робоче середовище Eclipse (панелі, редактори, проекції, майстри).

GUI в Eclipse написаний з використанням інструментарію SWT. Останній, на відміну від Swing (який лише емулює окремі графічні елементи використовуваної платформи), дійсно використовує графічні компоненти даної системи. Призначений для користувача інтерфейс Eclipse також залежить від проміжного шару GUI, званого JFace, який спрощує побудову призначеного для користувача інтерфейсу, що базується на SWT.

Гнучкість Eclipse забезпечується за рахунок модулів, що підключаються, завдяки чому можлива розробка не тільки на Java, але і на інших мовах, таких як C/C++, Perl, Groovy, Ruby, Python, PHP, ErLang та інших.

Платформа

· Eclipse Project (Eclipse.org) (англ.) -- власне, проект Eclipse, включає в себе

o Platform (Eclipse Platform, Platform) -- каркас

o PDE (Plug-in Development Environment, PDE) -- інструмент розширення Eclipse-платформи за допомогою Eclipse-плагінів

o JDT (Java Development Tools, JDT) -- інструмент розробки Java-програм та Eclipse-плагінів зокрема

· RCP (Rich Client Platform, RCP) -- платформа розширеного клієнта, мінімальний набір плагінів (org.eclipse.core.runtime, org.eclipse.ui) для побудови програми з графічним інтерфейсом

Для середовища Eclipse існує цілий ряд вільних і комерційних модулів. Спочатку середовище було розроблене для мови Java, але в нині існують численні розширення для підтримки інших мов, як наприклад

· C/С++ -- CDT Eclipse's C/C++ Development Tooling(англ.)

· Perl -- модуль EPIC, Eclipse Perl Integration(англ.)

· PHP -- PDT PHP Development Tools(англ.)

· JavaScript -- JSEclipse Javascript plugin for the Eclipse environment(англ.)

· Python -- Pydev, Python Development Environment(англ.)

· Ruby -- RDT, Ruby Development Tools(англ.)

· тощо

Існують також модулі для створення графічних інтерфейсів.

2.2 Ознайомлення з мовою програмування С++

C++ -- мова програмування високого рівня з підтримкою декількох парадигм програмування: об'єктно-орієнтованої, узагальненої та процедурної. Розроблена Б'ярном Страуструпом (англ. Bjarne Stroustrup) в AT&T Bell Laboratories (Мюррей-Хілл, Нью-Джерсі) у 1979 році та названа «Сі з класами». Страуструп перейменував мову у C++ у 1983 р.

У 1990-х роках С++ стала однією з найуживаніших мов програмування загального призначення. Мову використовують для системного програмування, розробки програмного забезпечення, написання драйверів, потужних серверних та клієнтських програм, а також для розробки розважальних програм таких як відео ігри. С++ суттєво вплинула на інші, популярні сьогодні, мови програмування: С# та Java.

При створенні С++ прагнули зберегти сумісність з мовою С. Більшість програм на С справно працюватимуть і з компілятором С++. С++ має синтаксис, заснований на синтаксисі С.

Нововведеннями С++ порівняно з С є:

· підтримка об'єктно-орієнтованого програмування через класи;

· підтримка узагальненого програмування через шаблони;

· доповнення до стандартної бібліотеки;

· додаткові типи даних;

· обробка винятків;

· простори імен;

· вбудовані функції;

· перевантаження операторів;

· перевантаження імен функцій;

· посилання і оператори управління вільно розподіленою пам'яттю.

Стандарт С++ на 1998 рік складається з двох основних частин: ядра мови і стандартної бібліотеки. Стандартна бібліотека С++ увібрала в себе бібліотеку шаблонів STL, що розроблялася одночасно із стандартом. Зараз назва STL офіційно не вживається, проте в кругах програмістів на С++ ця назва використовується для позначення частини стандартної бібліотеки, що містить визначення шаблонів контейнерів, ітераторів, алгоритмів і функторів.

Стандарт С++ містить нормативне посилання на стандарт Сі від 1990 року і не визначає самостійно ті функції стандартної бібліотеки, які запозичуються із стандартної бібліотеки Сі.

Поза тим, існує величезна кількість бібліотек С++, котрі не входять в стандарт. У програмах на С++ можна використовувати багато бібліотек Сі.

Стандартизація визначила мову програмування С++, проте за цією назвою можуть ховатися також неповні, обмежені достандартні варіанти мови. Спочатку мова розвивалася поза формальними рамками, спонтанно, у міру завдань, що ставилися перед ним. Розвиток мови супроводив розвиток кросс-компілятора Cfront. Нововведення в мові відбивалися в зміні номера версії кросс-компілятора. Ці номери версій кросс-компілятора розповсюджувалися і на саму мову, але стосовно теперішнього часу мову про версії мови С++ не ведуть.

Стандартна бібліотека С++ включає стандартну бібліотеку Сі з невеликими змінами, які роблять її відповіднішою для мови С++. Інша велика частина бібліотеки С++ заснована на Стандартній Бібліотеці Шаблонів (STL). Вона надає такі важливі інструменти, як контейнери (наприклад, вектори і списки) і ітератори (узагальнені вказівники), що надають доступ до цих контейнерів як до масивів. Крім того, STL дозволяє схожим чином працювати і з іншими типами контейнерів, наприклад, асоціативними списками, стеками, чергами.

Використовуючи шаблони, можна писати узагальнені алгоритми, здатні працювати з будь-якими контейнерами або послідовностями, доступ до членів яких забезпечують ітератори.

Так само, як і в Сі, можливості бібліотек активізуються використанням директиви #include для включення стандартних файлів. Всього в стандарті С++ визначено 50 таких файлів.

STL до включення в стандарт С++ була сторонньою розробкою, на початку -- фірми HP, а потім SGI. Стандарт мови не називає її «STL», оскільки ця бібліотека стала невід'ємною частиною мови, проте багато людей до цих пір використовують цю назву, щоб відрізняти її від решти частини стандартної бібліотеки (потоки введення/виведення (Iostream), підрозділ Сі тощо). Проект під назвою STLport, заснований на SGI STL, здійснює постійне оновлення STL, IOstream і рядкових класів. Деякі інші проекти також займаються розробкою приватних застосувань стандартної бібліотеки для різних конструкторських завдань. Кожен виробник компіляторів С++ обов'язково поставляє якусь реалізацію цієї бібліотеки, оскільки вона є дуже важливою частиною стандарту і широко використовується.

Причиною успіху STL, зокрема її вхід до стандартної бібліотеки С++, була націленість на широке коло завдань і узагальнена структура. В цьому сенсі, близькою за духом STL на сьогодні є бібліотека Boost. Boost теж є бібліотекою загального застосування і теж впливає на формування стандартної бібліотеки С++.

Мова С++ багато в чому є надмножиною Сі. Нові можливості С++ включають оголошення у вигляді виразів, перетворення типів у вигляді функцій, оператори new і delete, тип bool, посилання, розширене поняття константності та змінності, функції, що підставляються, аргументи за умовчанням, перевизначення, простори імен, класи (включаючи і всі пов'язані з класами можливості, такі як успадкування, функції-члени (методи), віртуальні функції, абстрактні класи і конструктори), перевизначення операторів, шаблони, оператор ::, обробку винятків, динамічну ідентифікацію і багато що інше. С++ є також мовою строгого типування і накладає більше вимагань щодо дотримання типів, порівняно з Сі.

У С++ з'явилися коментарі у вигляді подвійної косої риски («//»), які були в попереднику Сі -- мові BCPL.

Деякі особливості Сі++ пізніше були перенесені в Сі, наприклад ключові слова const і inline, оголошення в циклах for і коментарі в стилі Сі++ («//»). У пізніших реалізаціях Сі також були представлені можливості, яких немає в Сі++, наприклад макроси vararg і покращена робота з масивами-параметрами.

Переваги мови C++

· Швидкодія. Швидкість роботи програм на С++ практично не поступається програмам на С, хоча програмісти отримали в свої руки нові можливості і нові засоби.

· Масштабованість. На мові C++ розробляють програми для найрізноманітніших платформ і систем.

· Можливість роботи на низькому рівні з пам'яттю, адресами, портами. (Що, при необережному використанні, може легко перетворитися на недолік.)

· Можливість створення узагальнених алгоритмів для різних типів даних, їхня спеціалізація, і обчислення на етапі компіляції, з використанням шаблонів.

· Підтримуються різні стилі та технології програмування, включаючи традиційне директивне програмування, ООП, узагальнене програмування, метапрограмування (шаблони, макроси).

Недоліки мови C++

· Наявність безлічі можливостей, що порушують принципи типобезпеки приводить до того, що в С++ програми може легко закрастися важковловима помилка. Замість контролю з боку компілятора розробники вимушені дотримуватися вельми нетривіальних правил кодування. По суті, ці правила обмежують С++ рамками якоїсь безпечнішої підмови. Більшість проблем типобезпеки С++ успадкована від С, але важливу роль в цьому питанні грає і відмова автора мови від ідеї використовувати автоматичне управління пам'яттю (наприклад, збірку сміття). Так візитною карткою С++ стали вразливості типу «переповнювання буфера».

· Погана підтримка модульності. Підключення інтерфейсу зовнішнього модуля через препроцесорну вставку заголовного файлу (#include) серйозно уповільнює компіляцію, при підключенні великої кількості модулів. Для усунення цього недоліку, багато компіляторів реалізують механізм прекомпіляциі заголовних файлів (англ. Precompiled Headers).

· Недостача інформації про типи даних під час компіляції (CTTI).

· Мова C++ є складною для вивчення і для компіляції.

· Деякі перетворення типів неінтуїтивні. Зокрема, операція над беззнаковим і знаковим числами видає беззнаковий результат.

· Препроцесор С++ (успадкований від C) дуже примітивний. Це приводить з одного боку до того, що з його допомогою не можна (або важко) здійснювати деякі завдання метапрограмування, а з іншою, в наслідку своєї примітивності, він часто приводить до помилок і вимагає багато дій з обходу потенційних проблем. Деякі мови програмування (наприклад, Scheme і Nemerle) мають набагато могутніші і безпечніші системи метапрограмування (також звані макросами, але макроси С/С++ вони мало нагадують).

· З кінця 1990-х в співтоваристві С++ набуло поширення так зване метапрограмування на базі шаблонів. По суті, воно використовує особливості шаблонів C++ в цілях реалізації на їхній базі інтерпретатора примітивної функціональної мови програмування, що виконується під час компіляції. Сама по собі ця можливість вельми приваблива, але, внаслідкок вище згаданого, такий код вельми важко сприймати і зневаджувати. Мови Lisp/Scheme, Nemerle і деякі інші мають могутніші і водночас простіші для сприйняття підсистеми метапрограмування. Крім того, в мові D реалізована порівнянна за потужністю, але значно простіша в застосуванні підсистема шаблонного метапрограмування.

· Хоча декларується, що С++ мультипарадигмена мова, реально в мові відсутня підтримка функціонального програмування. Частково, даний пропуск усувається різними бібліотеками (Loki, Boost) що використовують засоби метапрограмування для розширення мови функціональними конструкціями (наприклад, підтримкою лямбд/анонімних методів), але якість подібних рішень значно поступається якості вбудованих у функціональні мови рішень. Такі можливості функціональних мов, як зіставлення зі зразком взагалі украй складно емулювати засобами метапрограмування.

2.3 Виконання практичного завдання

Моє завдання на практику:

· Створити клієнт навігаційної системи, для відображення місцеперебування користувача (автомобіля) у реальному часі, використовуючи онлайн мапи.

· Зробити можливість відображення POI (Points of Interest) на мапі, використовуючи данні, які отримуються з серверу.

· Розробити можливість отримання більш детальної інформації про POI при натисненні на неї, а також можливість їх оцінювання та коментування.

Після отримання завдання, перш за все необхідно було детально продумати та розробити архітектуру програмної системи. Було вирішено розбити її на дві частини, клієнт та сервер. Сервер займається збором, класифікацією та зберіганням точок інтересу, оцінок та коментарів. Клієнт відображає мапу використовуючи бібліотеку WebKit, графічний інтерфейс користувача створюється за допомогою бібліотеки Qt. У якості постачальника мап спочатку було обрано сервіс Google Maps. Проте, нажаль через деякий час з'ясувалося, що картографічний сервіс Google Maps забороняється використовувати для створення навігаторів та будь-яких систем які відображають данні у режимі реального часу. Тому довелося змінити постачальника на OpenStreetMap. Цей сервіс поставляє данні за ліцензією CC (Creative Commons), за якою можливе безкоштовне використання картографічних даних, у випадку, якщо кінцевий продукт є безкоштовним для користувачів.

Для роботи з цим сервісом було вирішено використовувати open source бібліотеку Open Layers, написану на мові JavaScript. Таким чином розробка програмного продукту ведеться на двох мовах С++ та JavaScript. Це дещо ускладнює розробку, через те, що мови не створені для спільної роботи.

Сам клієнт було вирішено розбити на 4 основні модулі (рис.2.1):

1) GPS - відповідає за емуляцію координат місцеперебування автомобіля та за роботу с gps-датчиком.

2) Map - представляє собою інтерфейс, який реалізують конкретні класи по роботі з постачальниками даних. Забезпечує єдиний для всіх набір функцій, незалежно від постачальника карт, що дозволяє у майбутньому використовувати будь-які мапи не міняючи программу.

3) Settings - зберігає усі налаштування користувачів, та програми.

4) Link - відповідає за обмін данними з сервером, отримує інформацію про точки інтересу.

Рис.2.1 - Загальна архітектура клієнту навігаційної системи

Більш детально взаємодію компонентів між собою можна побачити на діаграммі послідовностей (рис.2.2) та на usecase діаграммі (рис.2.3).

Рис. 2.2 - Діаграмма послідовностей навігатора

Рис.2.3 - UseCase діаграмма навігатора

Для передачі данних було вирішено використовувати шину dbus. Вона дозволяє обмінюватися данними між різними програмами, як на одному комп'ютері так і на різних.

Під час запуску, програма відображує місцезнаходження користувача та точки інтересу, які знаходяться довкола (рис.2.4). Після натиснення на будь-яку точку інтереса, з'являється меню в якому відображується уся інформацію про дане місце, та коментарі, які лишили користувачі системи (рис.2.5).

Рис.2.4 - Головне вікно навігатора, місцезнаходження машини та POI

3. Індивідуальне завдання «Інтерпретатор командної мови SHELL»

3.1 Основні положення

Інтерпретатор команд Shell є програмою UNIX, яка підтримує володіючу великими можливостями командну мову. Оскільки Shell дає користувачеві можливість спілкуватися з операційною системою на мові високого рівня, UNIX може виконувати завдання, недоступні менш складним операційним системам. Команди, які зазвичай повинні писатися на традиційних мовах програмування, тут можуть бути записані в кількох рядках процедури Shell. В інших операційних системах команди виконуються в прямій послідовності. В UNIX завдяки Shell команди можуть:

* об'єднуватися для утворення нових команд;

* передавати позиційні параметри;

* додаватися або перейменуватися користувачем;

* виконуватися всередині циклів або за певною умовою;

* створюватися для локального виконання без ризику вступу в конфлікт з командами інших користувачів;

* виконуватися у фоновому режимі.

Більш того, команди можуть перенаправляти введення вхідних даних для команди від одного джерела до іншого і перенаправляти вивід у файл, на термінал, принтер або іншій команді. Це забезпечує необхідну гнучкість при виконанні конкретних завдань.

Найбільш простий спосіб використання Shell - це введення простих команд з клавіатури. Проста команда - це будь-яка послідовність аргументів, розділених пробілами або знаками табуляції. Перший аргумент (з порядковим номером 0) визначає ім'я команди, яка повинна бути виконана. Всі інші аргументи, за деякими вийнятками, передаються цій команді. Наприклад, щоб викликати друк на принтер файлів з іменами ts1, ts2 і ts3 можна дати наступну команду:

LPR ts1 ts2 ts3

Якщо перший аргумент команди визначає ім'я файлу, який позначений виконуваним (що визначається за значеннями відповідних бітів дозволу цього файлу) і дійсно є компільованою програмою, то Shell створює процес-нащадок, який негайно починає виконувати цю програму. Якщо файл позначений як виконуємий, але не є компільованою програмою, то передбачається, що це процедура Shell, тобто звичайний текстовий файл, що містить рядки з командами Shell. В цьому випадку оболонка утворює ще один інтерпретатор команд для читання файлу і виконання команд всередині цієї підоболочки.

З точки зору користувача, скомпільовані програми та процедури Shell викликаються абсолютно однаково.

навігаційний мапа програмування місцеперебування

3.2 Застосування шаблонів в аргументах

Аргументами в командах дуже часто є імена файлів. Іноді ці файли

мають схожі, але неоднакові імена. Щоб використовувати схожість імен, Shell дозволяє користувачеві застосовувати шаблони, які відповідають іменам файлів в каталозі. Якщо шаблон відповідає одному або декільком іменам файлів в каталозі, то ці файли автоматично будуть розглядатися інтерпретатором Shell, як аргументи для команди.

Більшість символів в таких шаблонах позначають самі себе, але в UNIX існують також і спеціальні символи, які можна включати в шаблони. Ними є:

* зірочка (*), що позначає будь-яку послідовність символів, включаючи і послідовність нульової довжини;

* знак питання, яке відповідає будь-якому символу (?);

* квадратні дужки ([]), що означають будь-який з включених до них символів.

Усередині квадратних дужок пара символів, розділених дефісом, відповідає будь-якому символу з обумовленого ними діапазону. Наприклад, [a-de] еквівалентно [abcde].

Використання шаблонів дозволяє уникнути зайвого введення з клавіатури, і, що більш істотно, дає можливість об'єднувати пов'язані між собою інформаційні файли в групи, використовуючи загальні символи в іменах чи розширеннях.

Разом з тим на використання шаблонів накладаються деякі обмеження. Якщо ім'я файлу починається з крапки (.), воно може замінюватися тільки аргументом, який теж починається з точки.

3.3 Стандартний ввод\вивід

Як правило, більшість команд може використовувати, як джерело вхідних даних та місця виводу результатів, як термінал, так і файли. Деякі команди змінюють свої дії в залежності від пристрою вводу або виводу - для підвищення ефективності або для того, щоб виключити зайві дії (як, наприклад, спроби звернення по прямому доступу до терміналу або до каналу).

Коли команда починає виконуватися, вона вважає, що вже є три відкриті файлу:

* файл "стандартного" вводу

* файл "стандартного" виводу

* файл "діагностичного" виводу (файл помилок)

Кожному з цих файлів відповідає число, назване дескриптором файлу. Прийнято, що дескриптор 0 відповідає стандартному вводу, 1 - стандартному виводу і дескриптор 2 - діагностичного виводу. Процеси-нащадки, як правило, беруть ці файли з "батьківського" процесу. Спочатку всі три файла підключені до терміналу (0 - до клавіатури, 1 і 2 - до екрану). Інтерпретатор команд Shell дозволяє перенаправляти файли до того, як управління буде передано викликаній команді.

Аргументи для інтерпретатора, записані у формі ім'я файлу> файл, відкривають файли із зазначеними іменами, як пристрої стандартного вводу або виводу (в разі виведення старий вміст файлу з вказаним ім'ям, якщо він існував раніше, буде знищено). Аргумент, записаний у вигляді >> файл, направляє стандартний вивід в кінець файлу, тим самим даючи можливість додавати дані до вже існуючого файлу, не руйнуючи його вмісту. В останніх двох випадках Shell створює файл з вказаним ім'ям, якщо він не існував до цього. Таким чином, команда:

> output

створює файл нульової довжини. Наступна команда додає в файл з ім'ям журналу список користувачів, які працюють в даний момент в системі:

who >> log

В аргументах команд, що перенаправляє ввод-вивід, не проводиться інтерпретація прогалин і пошук файлів по шаблонах. Це означає, що команда:

echo 'this is a test' > *.gal

створює файл з ім'ям *.gal, що містить один рядок. У випадку, якщо ви, наприклад, дасте команду:

cat < ?

то буде видане повідомлення про помилку, якщо у вас немає файлу з ім'ям ?. Значення спеціальних символів не поширюється на аргументи, які перенаправляють ввод-вивід, тому що вони проглядаються інтерпретатором до проведення операцій розпізнавання шаблонів.

3.4 Командні рядки і конвеєри

Послідовність команд, розділених вертикальними рисами (|), утворює конвеєр. В конвеєрі, що складається більш ніж з однієї команди, кожна

команда виконується, як окремий процес, пов'язаний із сусідніми за допомогою програмних каналів - тобто вивід кожної команди (за винятком останньої) стає вводом для наступної команди в рядку. Фільтр - це команда, яка зчитує стандартний ввід, перетворює його деяким чином і потім записує в стандартний вивід. Конвеєр, як правило, складається з послідовності фільтрів. Незважаючи на те, що процеси в конвеєрі можуть виконуватися паралельно, кожній програмі необхідно прочитати вивід попередньої. Багато команд працюють з окремими рядками тексту - зчитують їх, обробляють, записують і повертаються назад для зчитування нових рядків. Деякі команди повинні навпаки спочатку зчитати великий обсяг даних і тільки потім починають виводити результати - сортування є прикладом такої команди, якій потрібно спочатку зчитати всі вхідні дані і тільки потім буде проводитися обробка. Ось приклад типового конвеєра:

nroff -mm text| col| lpr

Тут Nroff - це форматер тексту, який є в системі обробки текстів UNIX, col - перетворить вивід для конкретного типу дисплея і LPR здійснює друк тексту. Прапор “-mm” позначає одну з найбільш часто вживаних опцій форматування, і text - це ім'я файлу, який повинен бути відформатований.

Наступні приклади демонструють безліч можливостей, які можуть бути отримані комбінуванням команд описаними вище способами.

who

Друкує на екрані список зареєстрованих в системі користувачів.

who >> log

Додає список завантажених користувачів в кінець файлу журналу.

who| wc -l

Друкує кількість зареєстрованих користувачів.

who| pr

Посторінково друкує список користувачів.

who| sort

Друкує список користувачів в алфавітному порядку.

who| grep bob

Друкує список користувачів, чиї імена містять слово боб.

who| grep bob| sort| pr

Друкує посторінково в алфавітному порядку список користувачів, чиї імена містять слово боб.

{ date;who | wc -l; } >> log

Додає в файл журналу поточну дату і кількість зареєстрованих в системі користувачів.

who| sed -e 's/ .*//'| sort| uniq -d

Друкує імена тільки тих користувачів, які реєструвалися в системі більше одного разу.

Команда яка сама по собі не має можливості отримувати всі ці результати - їх можна отримати лише об'єднавши які з іншими командами. Команда who в цих прикладах служить як джерело інформації.

3.5 Змінні Shell

В Shell є кілька способів створення змінних. Змінна - це ім'я, якій присвоєно текстове значення. Деякі змінні є позиційними параметрами - їх значення встановлюються тільки в командному рядку. Решта змінних - це просто імена, яким користувач або сам інтерпретатор присвоїв текстові значення. Коли викликається процедура Shell, то Shell відразу неявно створює позиційні параметри. Ім'я самої процедури Shell в нульовій позиції в командному рядку присвоюється позиційному параметру $0. Перший аргумент команди називається $1 і т.д. Щоб отримати доступ до аргументів в позиціях з номером більше 9, можна використовувати команду зміни.

Користувач може явно передати необхідні значення цим позиційним параметрам за допомогою команди установки. Наприклад, команда:

set abc def ghi

присвоює значення "ABC" першому позиційному параметру $1, значення "DEF" - другому $2 і "GHI" - третьому $3. Нульовий позиційний параметр $0 не можна перевизначити таким способом - він завжди відноситься до імені процедури Shell. Інтерпретатор Shell також розпізнає буквено-цифрові змінні, яким присвоєно текстові значення. Проста команда присвоєння має синтаксис:

ім'я = рядок

Після присвоєння при вказівці $ім'я буде видаватися значення рядка. Ім'я змінної - це послідовність букв, цифр і знаків підкреслення, обов'язково починається з букви або знака підкреслення. Прогалини навколо знака рівності (=) в команді присвоювання неприпустимі. Позиційні параметри таким способом визначити не можна, вони можуть встановлюватися лише командою встановлення. У команді привласнення може бути більше одного привласнення, але пам'ятайте, що Shell привласнює значення змінним справа наліво. Так, в результаті виконання наступної командного рядка:

A=$B B=abc

змінної А буде присвоєно значення "ABC".

Нижче наводяться приклади простих присвоєнь.

Подвійні лапки з правого боку команди присвоєння дозволяють вказувати прогалини, знаки табуляції, символи переходу на новий рядок і крапки з комою в тексті, а також виконувати підстановку змінних.

Це означає, що при виявленні позиційних параметрів та інших імен змінних, перед якими стоїть знак $, вони будуть замінюватися на відповідні значення, якщо вони є.

Одинарні лапки пригнічують підстановку змінних:

MAIL=/usr/mail/gas

echovar="echo $1 $2 $3 $4"

stars=*****

asterisks='$stars'

У наведених прикладах змінної echovar присвоєно значення рядка, що складається зі слова echo і чотирьох позиційних параметрів, розділених пробілами. Навколо послідовності зірочок, які привласнюються змінній stars, лапок не потрібно, тому що їх спеціальне значення тут не діє. Змінній stars присвоєно текстове значення "$stars", а не "*****", тому що одинарні лапки скасували підстановку. При зверненні до значень змінних ви можете писати ім'я змінної у фігурних дужках, щоб відокремити ім'я змінної від решти тексту. Зокрема, якщо символ, безпосередньо наступний після імені, є літерою, цифрою або знаком підкреслення, то фігурні дужки необхідні. Наприклад:

a='This is a string'

echo "${a}ent test of variables."

В даному випадку команда echo надрукує:

This is a stringent test of variables.

Якщо б ви не використовували фігурні дужки, то Shell підставив би пусте значення замість "$aent" і надрукував:

test of variables.

3.6 Виклик інтерпретатора Shell

Shell - це команда і вона може бути викликана також як і будь-яка інша команда:

sh proc [arg...] Нова копія Shell викликається для читання proc. sh -v proc [arg...] Це еквівалентно приміщенню "set -v" на початку proc.

Також можна вказувати прапори -x, -e, -u, -n.

proc [arg...] Якщо процес є виконуваним файлом, а не компільованою програмою, то ефект буде такий же, як від команди:

sh proc args

Перевага такої форми запису полягає в тому, що змінні, які були експортовані в оболонку, будуть передаватися і в процеси, що запускаються з proc. Таким чином, будь-які зміни, зроблені у відношенні переданих змінних всередині процесу, будуть поширюватися на наступні команди, які викликаються з proc.

Передача параметрів в процедури Shell.

Коли проглядається командний рядок, будь-яка послідовність символів у вигляді $n замінюється на n-ний аргумент Shell, вважаючи ім'я процедури як $0. Така угода дозволяє виконувати пряме звернення до імені процедури і до позиційних параметрах (не більше 9). Додаткові аргументи можна обробляти, користуючись командою зсуву або використовуючи цикл for.

Команда зсуву зрушує аргументи вліво, тобто значення $1 втрачається, $2 замінює $1, $3 замінює $2 і т.д. Позиційний параметр з найбільшим номером стає невизначеним ($0 ніколи не зрушується). Наприклад, в наведеній нижче процедурі ripple, команда echo записує свої аргументи на стандартний вивід:

# команда ripple

while test $# != 0

do

echo $1 $2 $3 $4 $5 $6 $7 $8 $9

shift

done

Рядки, що починаються з #, є коментарями. Якщо ця процедура буде викликана таким способом:

ripple a b c

то вона надрукує:

¦ a b c

¦ b c

¦ c

Спеціальна змінна "зірочка" ($ *) викликає підстановку всіх позиційних параметрів, крім $ 0. Так, рядок з командою echo в останньому прикладі можна записати набагато компактніше:

echo $*

Ці два записи команди echo нееквівалентні повністю. Перша друкує максимум дев'ять позиційних параметрів, а друга друкує всі поточні позиційні параметри. Змінна ($ *) більш ємна і схильна до помилок в меншій мірі. Один із способів її використання полягає в передачі команді довільного числа аргументів. Наприклад, команда:

wc $*

підраховує слова в кожному з файлів, зазначених у командному рядку.

Важливо розуміти послідовність дій, які виконуються shell'ом при перегляді командного рядка та виконанні підстановок. Shell спочатку зчитує ввід до символу нового рядка або крапки з комою і потім виконує аналіз зчитаної частини вводу. Змінні замінюються своїми значеннями і потім робиться командна підстановки. Потім визначаються, обробляються і видаляються з рядка аргументи, які переадресують ввод-вивід. Після цього Shell переглядає отриманий командний рядок і шукає внутрішні роздільники полів, тобто всі символи, визначені в IFS і розділяють командний рядок на окремі аргументи. Порожні аргументи (визначені у вигляді "" або'') зберігаються, а решта порожні аргументи, отримані в результаті оцінки змінних, які є нульовими або не визначені, видаляються. Потім відбувається формування імен файлів за вказаними шаблонами. І тільки після цього командний рядок виконується інтерпретатором.

Іноді командні рядки створюються всередині процедур Shell. У цьому випадку буває корисно змусити Shell повторно переглянути командний рядок після виконання підстановок. Для цих цілей є спеціальна команда Eval.

Висновки

В ході проходження практики було отримано багато нових знань та новий досвід. За три тижні було вивчено багато нових можливостей мови програмування С++, та закріплені старі знання. Отриманий практичний досвід з використання цієї мови програмування.

За короткий проміжок часу були вивчені нові технології такі, як технологія обміну данними по системній шині DBus, web-технології розробки, такі, як мова JavaScript, система відладки FireBug, навчилися поєднувати при розробці декілька мов одночасно. Була розроблена программа, яка демонструє роботу цих технологій, протокол для обміну данними на основі JSON. Отримані навички використання середовища розробки програмного забезпечення Eclsipse, Geany та QtCreator.

Як результат цього було створення клієнту до навігаційної системи, яка може у режимі реального часу відображати місцезнаходження користувача, найближчі до нього точки інтересу, надавати розгорнену інформацію відносно точки інтересу, можливість обміну коментарями з іншими користувачами системи відносно певної точки інтересу.

Основним досягненням практики було отримання досвіду з організації роботи та звітності на великих фірмах. Щодня проводилися так звані скрами, а щотижня - спринти. Також вдалося навчитися працювати в команді, розподіляти завдання та відповідальність. Отримані певні знання з проектування програмних продуктів.

Перелік посилань

1. Шилдт Г. Самоучитель С++ / Г.Шилдт - СПб.: БХВ, 2003. - 652с.

2. Википедия - свободная энциклопедия [Електронний ресурс]. - Режим доступу:- http://ru.wikipedia.org/.

3. Шилдт Г. Справочник по С++ / Г.Шилдт - Киев, издательский дом «Вильямс», 2010. - 800с.

4. Мейерс С. Эффективное использование STL / С. Мейерс- СПб.: БХВ, 2003. - 570с.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.