Особливості об'єктно-орієнтованного програмування
Об'єктно-орієнтоване програмування як новий підхід до створення програм. Знайомство з особливостями діаграм станів. Аналіз основних способів реалізації програмного блоку мовою С# в технології .NET. Загальна характеристика діаграми класу Elevator.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | украинский |
Дата добавления | 07.08.2013 |
Размер файла | 1019,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Вступ
програмування elevator діаграма
Об'єктно-орієнтоване програмування - це новий підхід до створення програм. У міру розвитку обчислювальної техніки виникали різні методики програмування. На кожному етапі створювався новий підхід, який допомагав програмістам справлятися зі зростаючим ускладненням програм. Перші програми створювалися за допомогою ключових перемикачів на передній панелі комп'ютера. Очевидно, що такий спосіб підходить тільки для дуже невеликих програм. Потім був винайдений мова асемблера, який дозволяв писати більш довгі програми. Наступний крок був зроблений в 1950 році, коли був створений перший мова високого рівня Фортран.
Використовуючи мову високого рівня, програмісти могли писати програми до декількох тисяч рядків довжиною. Для того часу зазначений підхід до програмування був найбільш перспективним. Однак мова програмування, легко зрозумілий у коротких програмах, коли справа стосувалася великих програм, ставав нечитабельним (і некерованим).
Позбавлення від таких неструктурованих програм прийшло після винаходу в 1960 році мов структурного програмування. До них відносяться мови Алгол, Паскаль, і С. Структурне програмування на увазі точно зазначені керуючі структури, програмні блоки, відсутність (або, принаймні, мінімальне використання) інструкцій GOTO, автономні підпрограми, в яких підтримується рекурсія та локальні змінні. Суттю структурного програмування є можливість розбиття програми на складові елементи. Використовуючи структурне програмування, програміст може створювати і підтримувати програми понад 50000 рядків довгою.
Хоча структурне програмування, при його використанні для написання помірно складних програм, принесло видатні результати, навіть воно виявлялося неспроможним тоді, коли програма досягала певної довжини.
Щоб написати більш складну програму, необхідний був новий підхід до програмування. У результаті були розроблені принципи об'єктно-орієнтованого програмування. ООП акумулює найкращі ідеї, втілені в структурному програмуванні, і поєднує їх з потужними новими концепціями, які дозволяють оптимально організовувати ваші програми. Об'єктно-орієнтоване програмування дозволяє вам розкласти проблему на складові частини. Кожна складова стає самостійним об'єктом, який містить свої власні коди і дані, які відносяться до цього об'єкту. У цьому випадку вся процедура в цілому спрощується, і програміст отримує можливість оперувати з набагато більшими за обсягом програмами.
Всі мови ООП засновані на трьох основоположних концепціях, званих інкапсуляцією, поліморфізмом і спадкоємством:
Інкапсуляція - це механізм, який об'єднує дані і код, який маніпулює з цими даними, а також захищає і те, і інше від зовнішнього втручання або неправильного використання.
Поліморфізм - це властивість, яка дозволяє одне і те ж ім'я використовувати для вирішення двох або більш схожих, але технічно різних завдань. Метою поліморфізму, стосовно об'єктно-орієнтованого програмування, є використання одного імені для завдання загальних для класу дій. Спадкування - це процес, за допомогою якого один об'єкт може набувати властивостей іншого. Точніше, об'єкт може успадковувати основні властивості іншого об'єкту і додавати до них риси, характерні тільки для нього. В контрольно-курсової роботі реалізуємо клас «вантажний ліфт». Ліфти можна підрозділяти по безлічі ознак, наприклад: вантажні і легкові, пасажирські та непассажірскіе і т. д. У даному випадку буде написаний клас для демонстрації роботи ліфта для перевезення вантажу в супроводі людини.
Як параметри роботи ліфта будуть використані: вантажопідйомність, політика обслуговування запитів (зупинятися чи на проміжних поверхах), кількість поверхів у будинку та активація безпечного режиму роботи.
Даний клас може бути використаний в апаратурі управління ліфтом, тому що може бути налаштований на конкретні умови роботи.
1. Аналіз предметної області
1.1 Обґрунтування аналізу предметної області
У прикладі з допомогою класів C # моделюється система ліфтів.
З чого повинна складатися система Комп'ютерна модель висотного ліфта?
1. Зазвичай у великій будівлі розташовується декілька однакових ліфтів.
2. На кожному поверсі є кнопки «Вниз - Down» та «Вверх - Up».
3. У більшості випадків на поверх виділяється одна пара таких кнопок.
4. Коли ви викликаєте ліфт, ви не знаєте, який саме з них приїде раніше.
5. Усередині ліфта кнопочок істотно більше - одна для кожного поверху.
6. Увійшовши в ліфт, пасажири зазвичай натискають кнопку потрібного поверху.
Програма моделює всі ці складові процесу.
1.2 Обгрунтування вибору мови
"Дідусем" С# є мова С. Від С мова С# успадкував синтаксис, багато ключових слова та оператори. Крім того, С# побудований на покращеній об'єктної моделі, визначеної в C++. Якщо ви знаєте С або C++, то з С# ви відразу станете друзями. С # і Java зв'язані між собою дещо складніше. Як згадувалося вище, Java також є нащадком С і C++. У нього теж спільний з ними синтаксис і схожа об'єктна модель. Подібно JavaC# призначений для створення переносимого коду. Проте С# - не нащадок Java. Швидше С# і Java можна вважати двоюрідними братами, які мають спільних предків, але отримали від батьків різні набори "генів".Останнім часом С і С++ є найбільш використовуваними мовами для розробки комерційних і бізнес додатків. Ці мови влаштовують багатьох розробників, але насправді не забезпечують належної продуктивності розробки.
Наприклад, процес написання програми на С++ найчастіше займає значно більше часу, ніж розробка еквівалентного програми, скажімо, на VisualBasic. Зараз існують мови, які збільшують продуктивність розробки за рахунок втрати в гнучкості, яка так звична і необхідна програмістам на С/С++.Подібні рішення є вельми незручними для розробників і часто пропонують значно менші можливості. Ці мови також не орієнтовані на взаємодію з з'являються сьогодні системами і дуже часто вони не відповідають існуючій практиці програмування для Web.
Багато розробники хотіли б використовувати сучасну мову, який дозволяв би писати, читати і супроводжувати програми з простотою VisualBasic і в той же час давав міць і гнучкість C++, забезпечував доступ до всіх функціональних можливостей системи, взаємодіяв б з існуючими програмами і легко працював з виникаючими Web стандартами. Враховуючи всі подібні побажання, Microsoft розробила нову мову - C#. У нього входить багато корисних особливостей - простота, об'єктна орієнтованість, типова захищеність, "збірка сміття", підтримка сумісності версій і багато іншого.
Дані можливості дозволяють швидко і легко розробляти програми, особливо COM + додатки і Web сервіси. При створенні C#, його автори враховували досягнення багатьох інших мов програмування: C++, C, Java, SmallTalk, Delphi, VisualBasic і т.д. Треба відмітити що через те, що C # розроблявся з чистого листа, у його авторів була можливість (якою вони явно скористалися), залишити в минулому всі незручні і неприємні особливості (існуючі, як правило, для зворотної сумісності), будь-якого з попередніх йому мов . В результаті вийшов дійсно простий, зручний і сучасна мова, по потужності не поступливий С++, але істотно підвищує продуктивність розробок.
Дуже часто можна простежити такий зв'язок - чим більше мова захищена і стійкий до помилок, тим менше продуктивність програм, написаних на ньому. Наприклад розглянемо дві крайнощі - очевидно це Assembler і Java. У першому випадку ви можете добитися фантастичної швидкості своєї програми, але вам доведеться дуже довго примушувати її працювати правильно не на вашому комп'ютері.
У випадку з Java - ви отримуєте захищеність, незалежність від платформи, але, на жаль, швидкість вашої програми навряд чи сумісна зі сформованим поданням про швидкість, наприклад, якого-небудь окремого клієнтського застосування (звичайно існують застереження - JIT компіляція та інше). Розглянемо C++ з цієї точки зору - на мій погляд співвідношення в швидкості і захищеності близько до бажаного результату, але на основі власного досвіду програмування я можу з упевненістю сказати, що практично завжди краще понести незначну втрату в продуктивності програми і придбати таку зручну особливість, як " збірка сміття ", яка не тільки звільняє вас від стомлюючої обов'язки управляти пам'яттю уручну, але і допомагає уникнути вам багатьох потенційних помилок у вашому додатку.
Насправді скоро "збірка сміття", та й будь-які інші кроки до усунення потенційних помилок стану відмітними рисами сучасної мови. В C#, як в безсумнівно сучасній мові, також існують характерні особливості для обходу можливих помилок.
Наприклад, крім згаданої вище "збірки сміття", там всі змінні автоматично ініціалізувалися середовищем і володіють типовою захищеністю, що дозволяє уникнути невизначених ситуацій у випадку, якщо програміст забуде ініціалізувати змінну в об'єкті або спробує провести неприпустиме перетворення типів. Також в C# були зроблені заходи для виключення помилок при оновленні програмного забезпечення. Зміна коду, в такій ситуації, може непередбачувано змінити суть самої програми. Щоб допомогти розробникам боротися з цією проблемою C# включає підтримку сумісності версій (vesioning). Зокрема, навідміну від C++ і Java, якщо метод класу був змінений, це повинно бути спеціально обумовлено. Це дозволяє обійти помилки в коді і забезпечити гнучку сумісність версій. Також новою особливістю є native підтримка інтерфейсів і спадкоємства інтерфейсів. Дані можливості дозволяють розробляти складні системи і розвивати їх з часом. В C# була уніфікована система типів, тепер ви можете розглядати кожен тип як об'єкт. Незважаючи на те, використовуєте ви клас, структуру, масив або вбудований тип, ви можете звертатися до нього, як до об'єкта.
Об'єкти зібрані в простори імен (namespaces), які дозволяють програмно звертатися до чого-небудь. Це означає що замість списку включаються файлів заголовків у своїй програмі ви повинні написати які простори імен, для доступу до об'єктів і класів усередині них, ви хочете використовувати. У C# вираз using дозволяє вам не писати кожен раз назву простору імен, коли ви використовуєте клас з нього. Наприклад, простір імен System містить декілька класів, в тому числі і Console. І ви можете писати або назву простору імен перед кожним зверненням до класу, або використовувати using як це було показано в прикладі вище.
Важливою і відмітною від С++ особливістю C# є його простота. Приміром, чи завжди ви пам'ятаєте, коли пишіть на С++, де потрібно використовувати "->", де "::", а де "."? Навіть якщо ні, то компілятор завжди поправляє вас у разі помилки. Це говорить лише про те, що насправді можна обійтися тільки одним оператором, а компілятор сам буде розпізнавати його значення.
Так в C#, оператор "->" використовується дуже обмежено (в unsafe блоках, про які мова піде нижче), оператор "::" взагалі не існує. Практично завжди ви використовуєте тільки оператор "." і вам більше не потрібно стояти перед вибором.Ще один приклад. При написанні програм на C/С++ вам доводилося думати не тільки про типи даних, а й про їх розмір в конкретній реалізації. В C# все спрощено - тепер символ Unicode називається просто char (а не wchar_t, як в С++) і 64-бітове ціле тепер - long (а не __ int64).
Також в C# немає знакових і беззнакових символьних типів.В C#, також як і в VisualBasicпісля кожного виразу case в блоці switch мається на увазі break. І більше не буде відбуватися дивних речей якщо ви забули поставити цей break. Однак якщо ви дійсно хочете щоб після одного виразу case програма перейшла до наступного ви можете переписати свою програму з використанням, наприклад, оператора goto.Багатьом програмістам (на той момент, напевно, майбутнім програмістам) було не так легко під час вивчення C++ повністю освоїтися з механізмом посилань і покажчиків. В C# (хтось зараз пригадає про Java) немає покажчиків.
Насправді нетривіальність покажчиків відповідала їх корисності. Наприклад, часом, важко собі уявити програмування без покажчиків на функції. Відповідно до цього в C# присутні Delegates - як прямий аналог покажчика на функцію, але їх відрізняє типова захищеність, безпека і повна відповідність концепціям об'єктно-орієнтованого програмування.Хотілося б підкреслити сучасне зручність C#.
Коли ви почнете роботу з C#, а, сподіваюся, це відбудеться якомога швидше, ви побачите, що досить велике значення в ньому мають простору імен. Вже зараз, на основі першого прикладу, ви можете судити про це - адже всі файли заголовків замінені саме простором імен. Так в C#, крім просто вираження using, надається ще одна дуже зручна можливість - використання додаткового імені (alias) простору імен або класу.Сучасність C# виявляється і в нових кроках до полегшення процесу налагодження програми. Традиційним засобом для налагодження програм настадії розробки в C++ є маркування великих частин коду директивами #ifdef і т.д. В C#, використовуючи атрибути, орієнтовані на умовні слова, ви можете куди швидше писати налагоджувати код.
У наш час, коли посилюється зв'язок між світом комерції і миром розробки програмного забезпечення, і корпорації витрачають багато зусиль на планування бізнесу, відчувається необхідність у відповідності абстрактних бізнес процесів їх програмним реалізаціям. На жаль, більшість мов реально не мають прямого шляху для зв'язку бізнес логіки та коду. Наприклад, сьогодні багато програмістів коментують свої програми для пояснення того, які класи реалізують якийсь абстрактний бізнес об'єкт. C# дозволяє використовувати типізовані, розширювані метадані, які можуть бути прикріплені до об'єкта.Архітектурою проекту можуть визначатися локальні атрибути, які будуть пов'язані з будь-якими елементами мови - класами, інтерфейсами і т.д. Розробник може програмно перевірити атрибути будь-якого елементу. Це істотно спрощує роботу, наприклад, замість того щоб писати автоматизований інструмент, який буде перевіряти кожен клас або інтерфейс, на те, чи є він дійсно частиною абстрактного бізнес об'єкта, можна просто скористатися повідомленнями заснованими на визначених воб'єкті локальних атрибутах.
C#, будучи останнім з широко поширених мов програмування, повинен увібрати в себе весь наявний досвід і увібрати кращі сторони існуючих мов програмування, при цьому будучи спеціально створеним для роботи в .NET. Сама архітектура .NET продиктувала йому (як і багатьом іншим мовам, на яких можна писати під .NET) об'єктно-орієнтовану спрямованість. Звичайно, це не є правилом, можливе створення компіляторів навіть функціональних мов по .NET, на цю тему існують спеціальні роботи.Свій синтаксис C# в чому успадкував від C++ і Java.
Розробники, які мають досвід написання програм на цих мовах, знайдуть в C# багато знайомих. Але разом з тим він є багато в чому новаторським - атрибути, делегати та події, прекрасно вписані в загальну ідеологію мови, міцно зайняли місце в серцях .NET - розробників. Їх введення дозволило застосовувати принципово нові прийоми програмування.Звичайно, улюбленим об'єктом для порівняння з C# у світовій ком'юніті є Java. Також розроблений для роботи в віртуальному середовищі виконання, має об'єктно-орієнтовану архітектуру і збирач сміття, осноиванний на механізмі посилань.
При порівнянні з цією мовою відразу вироблена такі особливості, як можливість оголошувати декілька класів в одному файлі, з чого випливає синтаксична підтримка ієрархічної системи просторів імен. З реалізації ООП-концепцій схожість в механізмі спадковості й реалізації (і в Java і в C# можливо одиничне успадкування, але множинна реалізація інтерфейсів, на відміну від C++). Але в Java відсутні властивості і індексатори (а також делегати та події, але вони відсутні ще багато де). Також є можливість перерахування контейнерів.З речей, включених в специфікацію мови, але не є чисто "програмістським" необхідно відзначити можливість використання коментарів у форматі XML.
1.3 Особливості діаграм станів
На діаграмах класів UML відображаються взаємовідносини між класами. У діаграмі класів відображена організація коду програми. Діаграми класів - це статичні діаграми, в яких зв'язку не змінюються при запуску програми.
Але іноді корисно розглянути об'єкти класів у динамічному режимі. З моменту свого створення об'єкт втягується в діяльність програми, виконує різні дії і в кінцевому підсумку видаляється. Ситуація постійно змінюється, і це графічно відображено на діаграмі станів.
Діаграми станів UML показують, як змінюються з часом ситуації, в яких находиться об'єкт. Стану показуються на діаграмах у вигляді прямокутників з округленими кутами, а переходи між станами - у вигляді прямих ліній.
Між станами існують переходи. Отримавши сигнал від пульта управління, телевізор переключає з активного стану каналу 7 в активний стан каналу 2.
На рис. 3 показана діаграма стану для програми ELEV. На ній відображені різні стани об'єкта класу Elevator, які він може приймати під час роботи програми.
Стани
У діаграмах станів UML стан представлено у вигляді прямокутника з округленими кутами. Назва стану зазначено у верхній частині прямокутника, зазвичай воно починається з великої букви. Нижче вказані дії, які виконує об'єкт, входячи в цей стан. Після створення об'єкт класу Elevator може перебувати в п'яти станах: Завантаження, вивантаження, Їде вгору, Їде вниз і Зупинено. На відміну від діаграм класів, у коді програми не можна точно вказати фрагмент, відповідний кожному конкретному стану. Щоб розібратися в тому, які стани повинні входити в діаграму, потрібно уявити ситуацію, в якій працює об'єкт, і те, що ми хочемо отримати в результаті. Потім кожному станом підбирають відповідну назву.
Переходи
Переходи між станами представлені в діаграмах у вигляді стрілок, спрямованих від одного прямокутника до іншого. Якщо перехід зумовлений якоюсь подією, то він може бути позначений його ім'ям. Імена можуть бути більш наближені до реального мови, ніж до термінів C #. Переходи можуть бути також відзначені тим, що в UML називають захистом: це умова, яка повинна бути виконано для здійснення переходу. Воно записується у квадратних дужках. Переходи мають захист і назва події.
Зауважимо, що три переходи є переходами самі в себе, вони повертає нас у той же стан.
Від стану до стану
Кожного разу, потрапляючи в стан Завантаження, об'єкт класу Elevator виконує дію, яка укладаєся у видаленні значення «Звідки». Потрапляючи в стан Вивантаження, об'єкт класу Elevator виконує дія, що полягає у видаленні значення «Куди».
Рис. 4. Діаграма классів програми ELEV
2. Проектування програмного блоку
2.1 Проектування системи
Cистема ліфтів (клас Elevator). Ліфти можуть бути приблизно однаковими, тому є сенс зробити їх об'єктами одного класу під назвою Elevator. У цьому класі містяться дані, характерні для кожного окремо взятого ліфта: поточне місце розташування, напрямок руху, номери поверхів призначення і т. д. Методи Elevator ініціалізували за допомогою конструктора окремі ліфти, встановлюють два метронома для кожної кабінки, виводять зображення ліфтів, їх напрямки, приймають рішення, рухають ліфти і отримують номери кінцевих поверхів від користувача.
Таблиця. 1. Діаграма класу Elevator
## |
стічка |
Клас Elevator |
|
9…16 |
-car_number |
номер ліфта |
|
-»- |
-current_dir |
в якому направленні |
|
-»- |
-current_floor |
де ми |
|
-»- |
-destination |
направлення |
|
-»- |
-old_floor |
куди їдем |
|
-»- |
-ptrBuilding |
||
-»- |
-loading_timer |
таймер (не нуль) |
|
-»- |
-unloading_timer |
таймер (не нуль) |
|
18.. |
+Elevator |
конструктор |
|
220.. |
+car_display |
виводим образ ліфта |
|
34. |
+car_tick1 |
метроном-1 |
|
270.. |
+car_tick2 |
метроном-2 |
|
45.. |
+decide |
прийняте рішення |
|
208.. |
+dests_display |
вивести конечні етажі |
|
## |
стрічка |
Клас Elevator |
|
292.. |
+get_direction |
куди їдем |
|
297.. |
+get_distinations |
кінцевий етаж |
|
286.. |
+get_floor |
даний етаж |
|
275 |
+ move |
рух ліфта |
Будівля (клас Building)
Є дані про все будівлі в цілому. Ці дані будуть частиною класу Building. По-перше, є массив запитів з поверхів floor_request. Це список поверхів, де люди, що чекають ліфта, натиснули кнопку «вгору» або «вниз» і тим самим попросили ліфт під'їхати до них. Будь-який з ліфтів може відповідати на ці запити, тому всі вони повинні мати доступ до цього масиву. У програмі використовується масив розміром Nx2 типу booL, де N - кількість поверхів, а два (2) поля на кожен поверх дозволяють розділяти запити на рух вгору і вниз.
Всі ліфти звертаються до цього масиву, щоб зрозуміти, що їм робити далі. Крім того, кожен ліфт повинен бути обізнаний про те, де знаходяться інші. Якщо один з ліфтів знаходиться на першому поверсі, то немає ніякого резону гнати його на п'ятнадцятий, якщо є ліфт, що знаходиться на десятому. Виконувати запити повинен найближчий до місця призначення ліфт. Для забезпечення інформування ліфтів про всіх інших в клас Building вводиться також масив car_list. Масив car_list дозволяє кожній кабінці опитувати всі інші, з'ясовуючи їх місцезнаходження і напрямок руху.
Методи Building ініціалізують систему, встановлюють метроном, отримують і виводять запити.
Таблиця. 2. Діаграма класу Building
## |
стрічка |
Класс Building |
|
9, 10 |
-car_list |
масив ліфтів |
|
-»- |
-floor_request |
масив запросів з етажів |
|
13.. |
+Building |
конструктор |
|
74.. |
+ get_cars_dir |
Направлення руху |
|
69.. |
+ get_cars_floor |
Пошук ліфту |
|
64.. |
+ set_floor_req |
Установка запросів |
|
49.. |
+ get_floor_req |
Перевірка запросів |
|
33.. |
+ master_tick |
метроном |
|
96.. |
+ record_floor_reqs |
Получення запросів |
|
79.. |
+ show_floor_reqs |
Вивід запросів |
2.2 Управління часом
У методі Main () один з методів класу Building викликається через певні інтервали часу, щоб моделювання було динамічнішим. Цей метод називається master_tick ().
Він, у свою чергу, викликає функцію для кожного ліфта під назвою car_tickl (). Вона, крім усього іншого, промальовує ліфт на екрані і викликає ще одну функцію для прийняття рішення про те, що робити далі. Вибір дій багатий:
1) поїхати вниз;
2) поїхати вгору;
3) зупинитися;
4) посадити пасажира;
5) випустити пасажира;
6) вийти з програми;
7) викликати ще один ліфт.
Після цього кожен ліфт повинен бути зрушений на свою нову позицію. Так. Щось в цьому місці всі ускладнюється. Оскільки кожен ліфт повинен знати, де знаходяться інші, перш ніж прийняти рішення, всі ліфти повинні пройти через процес прийняття рішення, перш ніж хтось із них зрушиться з місця. Щоб упевнитися в тому, що це дійсно має місце, ми запускаємо tick'і двічі для кожної кабінки. Таким чином, car_tick1 () викликається для прийняття рішення про те, куди кожен ліфт поїде, а інша функція - car_tick2 () - для реального запуску ліфтів.
Змінюється значення змінної current_floor - кабінки починають рухатися.
Процес посадки пасажирів включає в себе послідовність певних кроків, які на екрані відображаються так:
1. кабінка з закритими дверима, щасливе обличчя відсутня;
2. кабінка з відкритими дверима, щасливе обличчя зліва O;
3. кабінка зі щасливим обличчям O у відкритих дверях, дізнатися від пасажира кінцевий поверх;
4. кабінка з закритими дверима, щасливе обличчя відсутня. При висадці пасажира застосовується зворотний порядок.
2.3 Діаграма станів для програми ELEV
Розглянемо діаграму станів для програми моделювання ліфтів. З метою спрощення задачі, будемо вважати, що в будівлі знаходиться тільки одна людина і є тільки один ліфт. Таким образом, в один момент часу може бути тільки один запит c поверху і один поверх призначення. Ліфту не потрібно стежити за іншими. Діаграма станів представлена ??на рис. 3.
Позначення в діаграмі такі:
«Cd» - поверх призначення, тобто кнопка, натиснута всередині ліфта (грубо кажучи, це відповідає массиву destination з програми);
«Fr» - запит з поверху, кнопка, натиснута зовні ліфта (грубо кажучи, це значення змінної floor_req).
Стан ліфта визначаються за значеннями змінної current_dir (в якому напрямку їдемо? і станам loading_timer (посадка) і unloading_timer (висадка).
Оскільки всі стани переходять один в одного за допомогою слова «раптом» (тобто по сигналам таймера), на діаграмі показані тільки контрольні стану. Відображаються представлення ліфта:
1) про запити з поверхів («fr»);
2) про запити поверхів призначення («cd»).
Рис. 3. Діаграма станів об'єкту Elev
2.4 Стратегія роботи ліфтів
Вбудовування інтелекту необхідного рівня в ліфтові системи - не просте завдання. Процес прийняття рішення відпрацьовується функцією decide (), що складається з певного набору правил. Ці правила організовані в порядку їх пріоритету. Якщо застосовується одне з них, то виконується якась дія, при цьому правила більш низьких рівнів не відпрацьовуються. Наведемо спрощений варіант такої обробки:
1. Якщо ліфт ось-ось вріжеться в дно шахти або проб'є її дах, напевно, слід зупинитися.
2. Якщо даний поверх - це поверх призначення, висадити пасажирів.
3. Якщо виявлений на даному поверсі запит «вгору», їдемо вгору, завантажуємо пасажирів.
4. Якщо виявлений на даному поверсі запит «вниз», їдемо вниз, завантажуємо пасажирів.
5. Якщо немає запитів поверхів або поверхів призначення ні знизу, ні зверху, зупинитися.
6. Якщо поверхи призначення зверху, їдемо вгору.
7. Якщо поверхи призначення знизу, їдемо вниз.
8. Якщо стоїмо або рухаємося вгору, є запит з більш високого поверху, і немає при цьому ліфтів, рухаюшихся вгору, між нами і поверхом запиту або над ним, а також рухомих вниз і знаходяться ближче до нього, ніж ми, то їдемо вгору.
9. Якщо стоїмо або рухаємося вниз, є запит з більш низького поверху, і немає при цьому ліфтів, рухомих вниз, між нами і поверхом запиту або під ним, а також рухомих вгору і знаходяться ближче до нього, ніж ми, то їдемо вниз.
10. Якщо нічого нікому від нас не потрібно, зупиняємося.
Правила 8 і 9 досить складні. Вони призначені для виключення виконання одного і того ж запроса кількома ліфтами відразу. Тим не менше результати не завжди ідеальні. У деяких ситуаціях ліфти зволікають з ухваленням рішення, побоюючись зробити те, що можуть зробити за них інші.
Але в реальності в цей момент інші ліфти не рухаються до тієї ж мети, а, наприклад, відповідають на свої запити. Щоб поліпшити стратегію роботи системи, необхідно змусити розрізняти функцію decide () запити «вгору» і «вниз» під час перевірки відносного місцезнаходження ЗЕ (запиту з поверху).
Але це ще більше ускладнило б і без того занадто довгу функцію.
3. Реалізація програмного блоку мовою С# в технології .NET
3.1 Результати тестування
При запуску ви побачите чотири ліфти, які знаходяться внизу екрану, а також вертикальний список чисел зліва від 1 до 20, що збільшуються знизу вгору. Спочатку всі ліфти на першому поверсі. Ліфт позначений трьома символами WWW. Це все зображено на рис. 1.
Рис. 1. Початковий стан програми ELEV
Запит поверху:
При введенні символу «!» І натисненні Enter внизу екрану з'явиться текст:
На якому Ви поверсі? Можна ввести будь-яке число від 1 до 20. Якщо ви тільки що приїхали на роботу і мають намір піднятися до свого робочого місця, натискайте 1, якщо поспішайте спуститися на обід зі свого поверху, введіть його номер.Наступне, про що запитає програма, це:
В якому напрямку будете рухатися (u / d):
Підказка: якщо ви на першому поверсі, вам, швидше за все, треба вгору (u); якщо на останньому - вниз (d). Після введення «u» відображається символ «^». Після введення «d» - символ «v».
По мірі виникнення інших запитів зірочка буде з'являтися поряд з номерами запитуваних поверхів. Якщо ліфт знаходиться там же, де і ви, його двері негайно відкриються.
Що стосується програми, то перед вашими очима постане щасливе обличчя (O) офісного працівника, призахідного усередину. Інакше ліфт почне рухатися вгору або вниз (це відбувається при натисненні на "Enter"), поки не досягне поверху, з якого був зроблений запит.
Введення кінцевого пункту подорожі ( поверх призначення )
Поки щасливий пасажир знаходиться всередині ліфта, потрібно швиденько поцікавитися в нього, куди це він зібрався їхати:
- Ліфт 1 знаходиться на поверсі 1.
- Введіть номери поверхів призначення (або 0 для закінчення введення)
- Поверх призначення 1-й: 13
Пасажир ввів 13. Але поки він роздумував, куди він хоче покататися, прийшли ще пасажири і стали натискати різні кнопочки в ліфті, всім адже потрібно на різні поверхи! Тому програма повинна позвле ввести декілька номерів поверхів. Введіть кілька номерів (не більше 20), потім натисніть 0 для закінчення введення.
Пункти призначення, зазначені пасажирами, відображаються символом зірочка "*". Кожен ліфт має свій набір пунктів призначення (на відміну від запитів з вихідних поверхів, загальних для всіх ліфтів). Запитів з різних поверхів можна робити скільки завгодно. Програма запам'ятає їх, як і вибрані з кожного ліфта поверхи призначення, і буде намагатися обслужити всіх. Всі чотири ліфти можуть бути од- новременно в русі. На рис. 2 показана ситуація з одним запитом з 1-го поверху і декількома запитами пунктів призначення: поверхи 10, 15 і 19-й.
Рис.а
Рис.Б
Рис. В 2. Ліфти у дії: а - три пасажири в 1-му ліфті W O W на 1-му поверсі; б - один пасажир перемістився в 1-му ліфті W O W на 10-й поверх; в - інший пасажир перемістився на 15-й поверх і виходить з 1-го ліфта WW , одночасно 2-й ліфт з одним пасажиром переміщається на 13-й поверх;
3.2 Створення компонента
1. Створення *.dll файлу;
2. Створення проекту «расширения»;
3. Створення класу main, в якому використовуємо об'єкт класу Builder та викликаємо функції бібліотеки;
4. Правою клавішею миші створюємо силку на *.dll, яка переноситься в одну директорію з виконавчим *.exe файлом;
5. Копіюємо бібліотеку за допомогою «построения»;
6. Копіюємо клас main та запускаємо його за допомогою *.dll бібліотеки;
7. Для того, щоб використати бібліотеку імпортуємо в проект силку, вказуєм пространство імен «Elevator».
4. Розробка інструкції користувачеві
Дана програма дозволяє побачити програмний блок системи моделювання руху ліфта в технології .NET.
Програмний блок включає в себе велику будівлю, у якій розташовується декілька однакових ліфтів, на кожному поверсі є кнопки «Вниз - Down» та «Вверх - Up, у середині ліфта кнопочок істотно більше - одна для кожного поверху, увійшовши в ліфт, пасажири зазвичай натискають кнопку потрібного поверху.
Інструкція користувачеві більш детально зображена в додатку А.
Висновки
Спроектована модель системи керування ліфтами є досить спрощеною та неповною, так як сучасні системи керування ліфтами, як правило, керують декількома елеваторами одночасно, враховують виклики на декількох поверхах, при чому напрям також враховується та вираховують оптимальний маршрут кожного підйомника задля економії енергії та оптимального зносу двигунів та інших елементів системи, що схильні до зносу.
У курсовому проекті було виконано програму, що моделює такі складові процесу:
1. У будівлі розташовується декілька однакових ліфтів.
2. На кожному поверсі є кнопки «Вниз - Down» та «Вверх - Up».
3. У більшості випадків на поверх виділяється одна пара таких кнопок.
4. Коли ви викликаєте ліфт, ви не знаєте, який саме з них приїде раніше.
5. Усередині ліфта кнопочок істотно більше - одна для кожного поверху.
6. Увійшовши в ліфт, пасажири зазвичай натискають кнопку потрібного поверху.
Список літератури
1.Биллиг В. А. Основы программирования на C#. -- М.: Изд-во «Интернет-университет информационных технологий -- ИНТУИТ.ру», 2006. -- 488 c.
2.Брукс Ф. Мифический человеко-месяц, или как создаются программные комплексы. -- М: «Символ-Плюс», 2000 г. -- 304 с.
3.Ватсон К. C#. -- М.: Лори, 2004. -- 880 с.
4.Вирт Н. Алгоритмы и структуры данных. -- Спб: Невский диалект, 2001 г. -- 352 с.
5.Гиббонз П. Платформа .NET для Java-программистов. -- СПб.: Питер, 2003. -- 336 с.
6.Голуб А. И. С и С++. Правила программирования. -- М: БИНОМ, 1996 г. -- 272 с.
7.Гуннерсон Э. Введение в C#. Библиотека программиста. -- СПб.: Питер, 2001. -- 304 с.
8.Кораблев В. Самоучитель Visual C++ .NET. -- СПб.: Питер; Киев: Издательская группа BHV, 2004. -- 528 с.
9.Либерти Д. Программирование на C#. -- СПб.: Символ-Плюс, 2003. -- 688 с.
10.Майо Д. C#. Искусство программирования. Энциклопедия программиста. -- Киев: «ДиаСофт», 2002. -- 656 с.
11.Майо Дж. C# Builder. Быстрый старт. -- М.: Бином, 2005. -- 384 с.
12.Микелсен К. Язык программирования C#. Лекции и упражнения. Учебник. -- Киев: «ДиаСофт», 2002. -- 656 с.
13.Оньон Ф. Основы ASP.NET с примерами на C#. -- М.: Издательский дом «Вильямс», 2003. -- 304 с.
14.Павловская Т. А. С/С++. Программирование на языке высокого уровня. Учебник для вузов. -- СПб.: Питер, 2001. -- 464 с.
15.Павловская Т. А. Паскаль. Программирование на языке высокого уровня. Учебник для вузов. -- СПб.: Питер, 2003. -- 393 с.
16.Паппас К., Мюррей У. Эффективная работа: Visual C++ .NET. -- СПб.: Питер, 2002. -- 816 с.
17.Петцольд Ч. Программирование для MS Windows на C#. Том 1. -- М.: Издательско-торговый дом «Русская Редакция», 2002. --576 с.
18.Петцольд Ч. Программирование для MS Windows на C#. Том 2. -- М.: Издательско-торговый дом «Русская Редакция», 2002. -- 624 с.
19.Понамарев В. А. Программирование на C++/C# в Visual Studio .NET 2003. Серия «Мастер программ». -- СПб.: БХВ-Петербург, 2004. -- 352 с.
20.Прайс Д., Гандэрлой М. Visual C#.NET. Полное руководство. -- Киев: «Век», 2004. -- 960 с.
21.Робинсон С., Корнес О., Глинн Дж. и др. C# для профессионалов. В двух томах. -- М.: Лори, 2003. -- 512 с.
22.Робисон У. C# без лишних слов. -- М.: ДМК Пресс, 2002. -- 352 с.
23.Секунов Н. Разработка приложений на C++ и C#. Библиотека программиста. -- СПб.: Питер, 2003. -- 608 с.
24.Секунов Н. Самоучитель C#. Серия "Самоучитель". -- СПб.: БХВ-Петербург, 2001. -- 576 с.
25.Смайли Д. Учимся программировать на C# вместе с Джоном Смайли. -- Киев: «ДиаСофт», 2003. -- 528 с.
26.Тай Т., Лэм Х. К. Платформа .NET. Основы. -- СПб.: Символ-Плюс, 2003. -- 336 с.
Размещено на Allbest.ru
...Подобные документы
Особливості редагування за допомогою текстового редактора NotePad вхідного файлу. C++ як універсальна мова програмування, знайомство с функціями. Характеристика графічних засобів мови С. Аналіз основних понять об’єктно-орієнтованого програмування.
курсовая работа [123,3 K], добавлен 14.03.2013Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.
курсовая работа [502,5 K], добавлен 01.04.2016Об’єктно-орієнтоване програмування мовою С++. Основні принципи об’єктно-орієнтованого програмування. Розробка класів з використанням технології візуального програмування. Розробка класу classProgressBar. Базовий клас font. Методи тестування програми.
курсовая работа [211,3 K], добавлен 19.08.2010Концепції об'єктно-орієнтованого програмування. Спеціалізовані засоби розробки програмного забезпечення мовою Delphi. Загальні питання побудови та використання сучасних систем об’єктно-орієнтованного та візуального проектування програмних засобів.
курсовая работа [201,4 K], добавлен 01.04.2016Особливості об'єктно-орієнтованого програмування. Розробка програми для елементарних математичних розрахунків, виведення результату на екран та запису у файлі. Сортування слів у рядку. Програма, яка реалізовує ходи шахових фігур. Програма-калькулятор.
отчет по практике [2,0 M], добавлен 19.03.2015Створення діаграм: варіантів використання, взаємодії, класів, станів та компонентів. Генерування коду на основі створених діаграм за допомогою StarUML на об'єктно-орієнтовній мові програмування Java. Головне вікно програми "Цифровий диктофон", лістинг.
отчет по практике [1,9 M], добавлен 21.12.2015Прототип об'єктно-орієнтованого програмування. Управління процесом реалізації програми. Розвиток апаратних засобів. Об'єктно-орієнтовані мови програмування. Надійність і експлуатаційні якості програм. Візуальне об’єктна-орієнтовне проектування Delphi.
контрольная работа [28,9 K], добавлен 18.05.2009Фундаментальні поняття об'єктно-орієнтованого програмування. Система лінійних нерівностей та опуклі багатогранники. Системи лінійних рівнянь лінійної алгебри як частковий випадок систем лінійних обмежень. Використання середовища програмування Delphi7.
курсовая работа [222,7 K], добавлен 20.05.2015Основні принципи об’єктно-орієнтованого програмування. Типові середовища програмування та особливості мови С++. Етапи проектування БД. Розробка програмного забезпечення для реалізації створення бази відеофільмів. Основні положення та моделі БД.
курсовая работа [2,7 M], добавлен 24.03.2011Мова C++ є як одна з найпоширеніших сучасних мов програмування. Базові засоби мови С++, її специфічні риси. Технологія складу програм, специфіка організації процесу програмування. Модульне програмування. Особливості об’єктно-орієнтованого програмування.
курсовая работа [49,6 K], добавлен 26.03.2010Модель в об’єктно-орієнтованих мовах програмування. Програмна модель створена на мові програмування С++, в середовищі програмування Borland С++ Builder 6.0. Вибір засобів реалізації програми. Види інструментів для об'єктно-орієнтованої розробки.
курсовая работа [116,9 K], добавлен 06.06.2010Аналіз сучасного стану технологій програмування. Засоби реалізації об'єктів в мові C++, структура даних і функцій. Розробка програмного продукту - гри "трикутники", з використовуванням моделей, класів і функцій об’єктно-орієнтованого програмування.
курсовая работа [117,8 K], добавлен 14.03.2013Використання комп'ютерних навчальних систем. Розуміння основних принципів об’єктно-орієнтованої ідеології програмування. Закріплення теоретичних знань та практичних навичок програмування мовою С/С++. Створення файлу, поповнення його з клавіатури.
курсовая работа [229,4 K], добавлен 09.09.2015Поняття рівнянь регресії та їх практична цінність. Створення програмного продукту на мові об'єктно-орієнтованого програмування з можливістю побудування за експериментальними даними таблиці графіки та обчислювання їх відхилення від експериментальних даних.
курсовая работа [2,5 M], добавлен 24.12.2011Об'єктно-орієнтоване, або об'єктне, програмування. Поняття об'єктів і класів. Розробка програмного забезпечення. Створення операційних систем, прикладних програм, драйверів пристроїв, додатків для вбудованих систем, високопродуктивних серверів.
контрольная работа [135,2 K], добавлен 25.10.2013Реалізація, за допомогою технології Windows Forms, програми обліку даних про волонтерів та подій, на які вони зареєстровані. можливості об'єктно-орієнтованого програмування. Створення класів. Методи, властивості. Використання Multiple Document Interface.
курсовая работа [1,5 M], добавлен 02.12.2015Розроблення додатка за допомогою об'єктно-орієнтованого візуального проектування Delphi для виконання арифметичних операцій або з використанням меню. Створення інтерфейсу користувача з використанням компонентів SYSTEM і WIN32. Обробка двовимірного масиву.
методичка [326,1 K], добавлен 13.01.2010Розгляд особливостей мови програмування С++: основні можливості, характеристика функцій. Аналіз файлів з вхідними даними. Використання похідних класів як ефективний засіб об’єктно-орієнтованого програмування. Способи роздруківки графічного вирішення.
курсовая работа [510,9 K], добавлен 14.03.2013Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.
курсовая работа [104,4 K], добавлен 14.03.2013Програма на мові програмування С++. Аналіз стану технологій програмування та обґрунтування теми. Розробка програми виконання завдання, методу вирішення задачі. Робота з файлами, обробка числової інформації і робота з графікою. Розробка програми меню.
курсовая работа [41,0 K], добавлен 17.02.2009