Високорівневі
методи обробки інформації та програмування h2>
Курсова робота студентки гр.
ІПІ-02-01 Хмель Ксенії Олександрівни p>
Філія Владивостоцького
Державного Університету Економіки та Сервісу в м. Артеме p>
Кафедра
Артем 2003 p>
Анотація h2>
Метою даної
курсової роботи, присвяченої вивченню високорівневих методів обробки
інформації та програмування, є: p>
систематизація
та поглиблення теоретичних і практичних знань за фахом «Прикладна
інформатика в економіці »; p>
поглиблення
навичок програмування на мовах високого рівня; p>
узагальнення досвіду
застосування об'єктно-орієнтованого підходу до технології програмування; p>
застосування
отриманих знань при створенні програмного продукту, що виконує розрахунок
значення функцій, заданих таблично. p>
У порівнянні з
традиційним функціональним підходом, замість послідовних етапів циклу
життя програми вирішення завдання у об'єктно-орієнтованому підході
представляється у вигляді ієрархії рівнів, починаючи з вимог користувача і
кінчаючи супроводом готової програми. Всі рівні розробляються в єдиній
середовищі програмування з використанням однієї мови. p>
При створенні
програмного продукту використовуються високорівневі методи обробки інформації
та програмування, вміння програмувати на мовах високого рівня, в
Зокрема, на мові Pascal,
на основі якої створено інтегроване середовище розробки Delphi7. p>
У першому розділі
розглядаються об'єктно-орієнтований підхід до реалізації завдання
програмування. Другий розділ є проектної, в ній описані алгоритми
розробленого програмного продукту, внутрішні та зовнішні зв'язки між модулями
програми, їх взаємодія. У додатках дані вихідний текст програми і
блок-схема. Курсова робота виконана на
аркушах. p>
Результатом
виконання курсової роботи є створення програмного засобу, що по
введеному значенню аргументу виводить значення функції, для цього використана формула
інтерполяційного полінома Лагранжа. p>
Вступ h2>
Перевага
написання програмного продукту на мові високого рівня Pascal полягає в тому, що мова дозволяє
чітко реалізувати ідеї структурного програмування і структурної організації
даних, ця мова є процедурним. Тобто програма явно описує
дії, які необхідно виконати, а результат задається способом отримання
його за допомогою деякої процедури - певній послідовності дій.
Основними засобами, що застосовуються в цій мові (як і в інших процедурних
мовами) є величини, привласнення, цикли, процедури. При побудові
процедурної програми необхідно чітко уявляти, які дії і в якій
послідовності будуть проводитися при її виконанні. На відміну від
функціональної програми, для побудови якої потрібні швидше
математичні, ніж алгоритмічні мислення. p>
При розробці
програмного засобу використовується об'єктно-орієнтований підхід до технології
програмування, який є інженерно-конструкторської технологією,
концентрує увагу на процесі вирішення задачі. Об'єктно-орієнтований
підхід припускає, що при розробці програми повинні бути визначені класи
використовуються у програмі об'єктів і побудовані їх описи, потім створені
екземпляри необхідних об'єктів і визначено взаємодію між ними. p>
Основне завдання
(розробити програмний продукт, обчислює значення функції по заданому
значенню аргументу) виконується за допомогою засобів обчислювальної математики. У
основі рішення задачі лежить обчислення значення функції за допомогою
інтерполяційного полінома Лагранжа. Основні напрями виконання програми: p>
створити модулі,
що пропонують поетапне виконання поставленого завдання; p>
створити модулі,
виконують обчислення правильно, швидко і коректно; p>
розробити
інтерфейс програми, сумісний з Windows-інтерфейсом. p>
Глава 1. Еволюція технології
програмування h2>
На ранніх
етапах розвитку програмування, коли програми писалися у вигляді
послідовностей машинних команд, будь-яка технологія програмування
була відсутня. Перші кроки у розробці технології полягали у поданні
програми у вигляді послідовності операторів. Написанню послідовності
машинних команд передувало складання операторної схеми, що відображає
послідовність операторів та між ними. Операторні підхід
дозволив розробити перші програми для автоматизації складання програм --
так звані складові програми. p>
Зі збільшенням
розмірів програм стали виділяти їх відокремлені частини і оформляти їх як
підпрограми. Частина таких підпрограм об'єднувалася до бібліотек, з яких
підпрограми можна було включати в робочі програми і потім викликати з
робочих програм. Це поклало початок процедурного програмування - велика
програма представлялася сукупністю процедур-підпрограм. Одна з
підпрограм є головною та з неї починалося виконання програми. p>
У 1958 році
були розроблені перші мови програмування, Фортран та Алгол-58. Програма
на Фортране складалася з головної програми і деякої кількості процедур --
підпрограм і функцій. Програма на Алгол-58 і його наступної версії
Алгол-60 являла собою єдине ціле, але мала блокову структуру,
що включає головний блок і вкладені блоки підпрограм і функцій. Компілятори
для Фортрану забезпечували роздільну трансляцію процедур і подальше їх
об'єднання в робочу програму, перший компілятори для Алгол припускали,
що транслюється відразу вся програма, роздільна трансляція процедур не
забезпечувалася. p>
Процедурний
підхід зажадав структурування майбутньої програми, поділу її на
окремі процедури. При розробці окремої процедури про інших процедурах
Потрібно знати тільки їх призначення і спосіб виклику. З'явилася можливість
скорочуючи при цьому витрати праці і машинного часу на розробку і
модернізацію програм. p>
Наступним кроком
у поглибленні структурування програм стало так зване структурний
програмування, при якому програма в цілому і окремі процедури
розглядалися як послідовності канонічних структур: лінійних
ділянок, циклів і розгалужень. З'явилася можливість читати і перевіряти
програму як послідовний текст, що підвищило продуктивність праці
програмістів при розробці й налагодженню програм. З метою підвищення
структурності програми були висунуті вимоги до більшої незалежності
підпрограм, підпрограми повинні зв'язуватися з викликають їх програмами
тільки шляхом передачі їм аргументів, використання в підпрограма змінних,
що належать іншим процедур або головній програмі, стало вважатися
небажаним. p>
Процедурне і
структурне програмування торкнулися насамперед процес опису алгоритму
як послідовності кроків, що ведуть від варьируемых вихідних даних до шуканого
результату. Для вирішення спеціальних завдань стали розроблятися мови
програмування, орієнтовані на конкретний клас задач: на системи
управління базами даних, імітація і т.д. p>
При розробці
трансляторів все більше уваги стало приділятися виявлення помилок у вихідних
текстах програм, забезпечуючи цим скорочення витрат часу на налагодження
програм. p>
Застосування
програм у різних галузях людської діяльності призвело до
необхідність підвищення надійності всього програмного забезпечення. Одним з
напрямків вдосконалення мов програмування стало підвищення рівня
типізації даних. Теорія типів даних виходить з того, що кожне використовуване
в програмі дане належить одному і тільки одному типу даних. Тип даного
визначає безліч можливих значень цього та набір операцій, допустимих
над цими даними. Дане конкретного типу в ряді випадків може бути
перетворено в даний іншого типу, але таке перетворення повинно бути явно
представлено у програмі. Залежно від ступеня виконання перерахованих
вимог можна говорити про рівень типізації тієї чи іншої мови
програмування. Прагнення підвищити рівень типізації мови програмування
призвело до появи мови Паскаль, який вважається універсальна
мовою, хоча і в ньому дозволені деякі неявні перетворення типів,
наприклад, цілого в дійсне. Застосування універсальна мова при
написанні програми дозволяє ще при трансляції вихідного тексту виявити
багато помилок використання даних і цим підвищити надійність програми. Разом
з тим строга типізація сковувала свободу програміста, ускладнювала застосування
деяких прийомів перетворення даних, що часто використовуються в системному
програмуванні. Практично одночасно з Паскалем була розроблена мова Сі, в
більшою мірою орієнтований на системне програмування та що відноситься до
слабо універсальна мова. p>
Всі
універсальні мови програмування, незважаючи на відмінності в синтаксисі і
використовуваних ключових словах, реалізують одні й ті самі канонічні структури:
оператори привласнення, цикли і розгалуження. У всіх сучасних мовах
присутні зумовлені (базові) типи даних (цілі і речові
арифметичні типи, символьний і, можливо, рядковий тип), є
можливість використання агрегатів даних, у тому числі масивів і структур
(записів). Для арифметичних даних дозволені звичайні арифметичні операції,
для агрегатів даних зазвичай передбачена тільки операція привласнення і
можливість звернення до елементів агрегату. Разом з тим при розробці
програми для вирішення конкретної прикладної задачі бажана можливо велика
концептуальна близькість тексту програми до опису завдання. Наприклад, якщо
рішення завдання вимагає виконання операцій над комплексними числами або
квадратними матрицями, бажано, щоб у програмі явно були присутні
оператори додавання, віднімання, множення і ділення даних типу комплексного
числа, додавання, віднімання, множення й звернення даних типу квадратної
матриці. Вирішення цієї проблеми можливо декількома шляхами: p>
Побудовою
мови програмування, що містить як можна більше типів даних, і вибором
для кожного класу задач деякого підмножини цієї мови. Такий мова іноді
називають мовою-оболонкою. На роль мови-оболонки претендував мова ПЛ/1,
виявився настільки складним, що так і не вдалося побудувати його
формалізований опис. Відсутність формалізованого опису, проте, не
завадило широкому застосуванню ПЛ/1 як у Західній Європі, так і в СРСР. p>
Побудовою
розширюваного мови, що містить невелике ядро і допускає розширення,
доповнює мову типами даних і операторами, що відображають концептуальну
сутність конкретного класу задач. Такий мову називають мовою-ядром. Як
мова-ядро були розроблені мови Симула і Алгол-68, які не отримали широкого
поширення, але що зробили великий вплив на розробку інших мов
програмування. p>
Подальшим
розвитком другому шляху з'явився об'єктно-орієнтований підхід до програмування. p>
Відмінності функціонального і
об'єктно-орієнтованого підходів програмування h2>
Є два
принципово відрізняються підходу до технології програмування:
інженерно-конструкторський та математичний. Перший заснований на тому, що
виготовлення програмного продукту по заданим вимогам суть ітеративний
процес послідовної реалізації алгоритму рішення задачі. Другий підхід
заснований на математичному доведенні правильності програми і
автоматичному (або напівавтоматичному) отриманні готової програми за заданими
специфікаціям. p>
Об'єктно-орієнтований
підхід до технології програмування - інженерно-конструкторський, в якому
увага концентрується на самому процесі вирішення задачі. У цій статті
авторами узагальнюється досвід використання об'єктно-орієнтованої технології при
розробці середовища об'єктно-орієнтованого програмування та деяких
прикладних програм, що працюють в цьому середовищі. p>
Оцінимо
переваги та недоліки найбільш поширеною інженерної технології --
функціональною. Існує три головні проблеми функціонального підходу: p>
Слабка
формалізація зв'язків між етапами. Спеціалізація етапів приводить до того, що
інтерфейси між ними описуються на різних мовах з різним ступенем
формалізації. Слабка формалізація зменшує надійність програми і, що саме
неприємне, її адекватність вимогам замовника. p>
Відсутність
гнучкості. Поетапна послідовна схема жорстко пов'язана з тих, що сходять способом
створення програми. Однак практика показує, що процес. створення. хоч
скільки-небудь складної програми неминуче виявляється циклічним, з
поверненнями для внесення змін у попередні етапи. Такі повернення пов'язані з
великими витратами, оскільки залучають етапи з різними інтерфейсами і різними
виконавцями. p>
Погане
використання результатів попередніх розробок. Спадний проектування
разом зі слабкою формалізацією мов специфікацій призводять до того, що
результати проектування, як і готові програми та їх частини, практично
неможливо використовувати для інших цілей. Виняток становлять бібліотеки
мов програмування на етапі кодування. p>
Принципове
відміну від функціональної схеми полягає в тому, що поетапний цикл життя
програмного продукту замінюється багаторівневим поданням процесу рішення
завдання, яке виходить поєднанням спадного і висхідного способів. З
одного боку йде деталізація верхніх рівнів, з іншого боку з нижніх
рівнів збираються відсутні компоненти верхніх рівнів. Суміжні та інші
прилеглі рівні можуть перетинатися, тобто мати загальні компоненти. Таким
чином, межі між рівнями розмиваються, їх стає довільним і
навіть невизначеним, а самі рівні втрачають свою специфіку. p>
Можливість
застосування вищевказаної схеми забезпечують три єдині для всіх рівнів засоби:
об'єктно-орієнтована мова, середовище програмування, база даних (бібліотека
класів). Ці кошти в явному вигляді складають основу будь-якої
об'єктно-орієнтованої технології. Розглянемо їх основні характеристики. P>
Об'єктно-орієнтована мова програмування
грунтується на понятті об'єкта як замкнутої незалежної суті,
взаємодіє із зовнішнім світом через строго визначений інтерфейс у вигляді
переліку повідомлень, які об'єкт може приймати. Об'єкт має властивості,
поведінкою та станом. Об'єкти з однаковими властивостями і поведінкою
об'єднуються в класи. Програма на об'єктно-орієнтованої мови являє
собою сукупність описів класів. Класи, у свою чергу, є
опису властивостей і поведінки складових їх об'єктів. Властивості представляються
іншими, як правило, більш простими об'єктами. Поведінка описується
обмінюються повідомленнями об'єктами. p>
Об'єктно-орієнтованим
мовам притаманні наступні характеристики: p>
абстрактні
типи даних; p>
приховування
реалізації зовнішнього інтерфейсу (інкапсуляція); p>
спадкування
властивостей та поведінки об'єктів; p>
динамічне
зв'язування імені зі значенням; p>
поліморфізм
імен повідомлень; p>
автоматичне
управління пам'яттю. p>
Чисто
об'єктно-орієнтовані мови, такі як Smalltalk, Eiffel, мають усі
перерахованими тут властивостями. Широко поширені об'єктно-орієнтовані
розширення традиційних мов (Сі + +, Турбо-Паскаль), в яких присутні не
всі об'єктно-орієнтовані риси. p>
Об'єктно-орієнтована
база класів являє собою ієрархічний набір (бібліотеку) класів --
будівельних блоків для побудови нових рівнів створюваного програмного
продукту. Тут зберігаються класи «джентльменського набору» бібліотек мов
програмування, а також класи, які описують поняття прикладних предметних
областей. p>
Класи
являють собою накопичені знання про раніше виготовлених продуктах. База
класів повинна забезпечувати легкий пошук класів, їх вивчення, модифікацію,
включення нових класів. Мова і база класув об'єднуються в інтегровану
об'єктно-орієнтоване середовище програмування, в якій всі засоби
підтримки процесу розробки програм написані цією мовою і входять на
рівних правах до складу бази класів. Типовими прикладами таких засобів є
багатовіконний графічний інтерфейс з користувачем, ієрархічні меню,
компілятор, інтерпретатор, відладчик, текстовий редактор. p>
Розробка
програм з об'єктно-орієнтованої технології зводиться до створення нових
класів, їх тестування та включенню до складу об'єктно-орієнтованого середовища
розробки. p>
Кожен
окремий клас, завдяки своїй незалежності, може розроблятися і
тестуватися окремо. Перевірений клас включається в бібліотеку і стає
надбанням поточної і подальших розробок. Особливістю об'єктно-орієнтованої
технології розробки програм є можливість швидкого прототипирування.
У цьому випадку класи розв'язуваної задачі описуються тільки своїми основними
властивостями і поведінкою, що дозволяє відразу перевірити головну ідею рішення
завдання. Якщо вона невірна, то може бути швидко змінена і перевірено знову. При
це заощаджуються істотні витрати на програмування деталей. p>
Розглянемо,
яким чином в об'єктно-орієнтованої технології долаються три
перерахованих нестачі функціонального підходу. p>
Формалізація
зв'язків між етапами. Всі етапи (рівні), починаючи аналізу програми,
описуються на єдиному формалізованому мовою. Фактично чіткої межі між
рівнями. p>
Єдиний
неформалізовані рівень - вимоги користувача. Цей рівень взагалі важко
формалізуємо, оскільки кінцевим користувачем або замовником звичайно є
непрофесіонал в області програмування і йому необхідно запропонувати свободу в
викладі вимог до задачі. Те, що потрібно для наступних специфікацій,
- Перелік об'єктів, їх властивостей і взаємних дій - не виходить за рамки
звичайного опису проблеми природною мовою. Перехід від цього опису до
специфікації програми робиться вручну, але практично один в один з точністю
до простого синтаксису об'єктно-орієнтованої мови. p>
Гнучкість.
Внесення змін всередині об'єкта або класу абсолютно не зачіпає його
клієнтів, тобто тих об'єктів, які його використовують, зрозуміло, якщо зовнішній
інтерфейс об'єкта залишається незмінним. Це фундаментальний принцип об'єктно-орієнтованого
програмування. Таким чином забезпечується гнучкість при програмуванні
знизу-вгору. p>
В даний
час об'єктно-орієнтований підхід є одним з швидко розвиваються
напрямів в проектуванні систем. Прикладом можуть бути
об'єктно-орієнтований аналіз - методологія розробки систем, запропонована
Йорданом, об'єктно-орієнтоване проектування, об'єктно-орієнтоване
програмування, реалізоване у численних компіляторах C + +, Object Pascal, Borland Pascal, Smalltalk. p>
Об'єктно-орієнтований
підхід h2>
Основні ідеї
об'єктно-орієнтованого підходу спираються на наступні положення: p>
програма
являє собою модель деякого реального процесу, частини реального світу; p>
модель
реального світу або його частини може бути описана як сукупність
взаємодіючих між собою об'єктів; p>
об'єкт
описується набором параметрів, значення яких визначають стан об'єкта,
і набором операцій (дій), які може виконувати об'єкт; p>
взаємодія
між об'єктами здійснюється посилкою спеціальних повідомлень від одного об'єкта
до іншого. Повідомлення, отримане об'єктом, може вимагати виконання
певних дій, наприклад, зміни стану об'єкта; p>
об'єкти,
описані одним і тим же набором параметрів і здатні виконувати один і той же
набір дій, являють собою клас однотипних об'єктів. p>
З точки зору
мови програмування клас об'єктів можна розглядати як тип даного, а
окремий об'єкт - як дане цього типу. Визначення програмістом власних
класів об'єктів для конкретного набору завдань повинно дозволити описувати
окремі завдання в термінах самого класу задач (при відповідному виборі
імен типів та імен об'єктів, їх параметрів і виконуваних дій). p>
Таким чином,
об'єктно-орієнтований підхід припускає, що при розробці програми
повинні бути визначені класи використовуються у програмі об'єктів і побудовані їх
описи, потім створені екземпляри необхідних об'єктів і визначено
взаємодія між ними. p>
Поняття об'єкта
і класу тісно пов'язані. Проте, існує важлива відмінність між цими
поняттями. Клас - це абстракція істотних характеристик об'єкта. Клас --
опис множин об'єктів, які поділяють однакові властивості, операції,
відносини і семантику (сенс). Будь-який об'єкт - просто екземпляр класу.
Розрізняють внутрішньо представлення класу (реалізацію) і зовнішнє уявлення
(інтерфейс). p>
Значне
збільшення складності завдань, що вирішуються за допомогою комп'ютерів, призводить до
збільшення розмірів і складності програм, що породжує труднощі при їх
розробці та налагодженні. Розгляд будь-якої складної системи вимагає застосування
техніки декомпозиції - розбиття на складові елементи. Відомі дві схеми
декомпозиції: алгоритмічна декомпозиція і об'єктно-орієнтована декомпозиція. p>
В основі
алгоритмічної декомпозиції лежить розбиття по діях - алгоритмам. Ця
схема подання застосовується в звичайних програмних засобах.
Об'єктно-орієнтована декомпозиція забезпечує розбиття по автономним
особам - об'єктів реального (або віртуального) світу. Ці особи (об'єкти) - більше
«Великі» елементів, кожен з них несе в собі і опису дій, і опису
даних. p>
Об'єктно-орієнтоване
подання програмного засобу грунтується на принципах абстрагування,
інкапсуляції, модульності і ієрархічної організації. Кожен з цих принципів
не новий, але їх спільне застосування розраховане на проведення
об'єктно-орієнтованої декомпозиції. Це визначає модифікацію їх змісту
і механізмів взаємодії один з одним. p>
Апарат
абстракції - зручний інструмент для боротьби зі складністю реальних систем.
Створюючи поняття в інтересах якої-небудь завдання, ми відволікаємося (абстрагуємося)
від несуттєвих характеристик конкретних об'єктів, визначаючи тільки
істотні характеристики. Абстрагування зводиться до формування
абстракцій. Кожна абстракція фіксує основні характеристики об'єкта,
які відрізняють його від інших видів об'єктів і забезпечують ясні понятійні
кордону. Абстракція концентрує увагу на зовнішньому представленні об'єкта,
дозволяє відокремити основне в поведінці об'єкта від його реалізації. Абстракцію
зручно будувати шляхом виділення обов'язків об'єкта. p>
Інкапсуляція і
абстракція - взаємодоповнюючі поняття: абстракція виділяє зовнішнє
поведінку об'єкта, а інкапсуляція
містить і приховує реалізацію, що забезпечує цю поведінку.
Інкапсуляція досягається за допомогою інформаційної закритості. Зазвичай ховаються
структура об'єктів і реалізація їх методів. Інкапсуляція є процесом
поділу елементів абстракції на секції з різною видимістю. Інкапсуляція
служить для відділення інтерфейсу абстракції від її реалізації. p>
У мовах С + +, Object Pascal, Ada 95 абстракція класів та об'єктів
формують логічну структуру системи. При виробництві фізичної структури
ці абстракції поміщаються в модулі. У великих системах, де класів сотні,
модулі допомагають керувати складністю. Модулі служать фізичними контейнерами, у
яких оголошуються класи та об'єкти логічної розробки. p>
Модульність
визначає здатність системи піддаватися декомпозиції на ряд сильно
пов'язаних і слабо зчеплених модулів. Загальна мета декомпозиції на модулі:
зменшення термінів розробки та вартості програмного кошти за рахунок
виділення модулів, що проектуються і змінюються незалежно. Кожна
модульна структура має бути досить простий, щоб бути повністю
зрозумілою. Зміна реалізації модулів повинно проводитися без знання реалізації
інших модулів і без впливу на їхню поведінку. p>
Визначення
класів і об'єктів виконується в ході логічної розробки, а визначення
модулів - в ході фізичної розробки системи. Ці дії сильно
взаємопов'язані, здійснюються Ітеративний. Припустимо, в Ada 95 потужним засобом забезпечення
модульності є пакет. p>
Прекрасним
доповненням до попередніх принципам є ієрархічна організація --
формування з абстракцій ієрархічної структури. Ухвалою ієрархії в
проект спрощуються розуміння проблем замовника і їх реалізація - складна
система стає доступній для огляду людиною. Ієрархічна організація задає
розміщення абстракція на різних рівнях опису системи. p>
Двома важливими
інструментами ієрархічної організації в об'єктно-оріентрованних системах
є: p>
структура з
класів ( «is a»-ієрархія); p>
структура з
об'єктів ( «part of»-ієрархія). p>
Найчастіше «is a»-ієрархічна структура будується з
допомогою наслідування. Спадкування визначає відношення між класами, де
клас розділяє структуру або поведінку, визначені в жодному іншому (одиничне
успадкування) або в кількох інших (множинне спадкоємство) класах.
Інший різновид ієрархічної організації - «part of»-ієрархічна структура - базується на
відношенні агрегації. Агрегація не є поняттям, унікальним для
об'єктно-орієнтованих систем. Наприклад, будь-яку мову програмування,
дозволяє структури типу «запис», підтримує агрегацію. І все ж агрегація
особливо корисна у поєднанні зі спадщиною: агрегація забезпечує фізичну
угруповання логічно зв'язковий структури, а спадкування дозволяє легко і
багаторазово використовувати ці спільні групи в інших абстракціях. p>
Розглянемо
пильніше об'єкти - конкретні сутності, які існують в часі і
просторі. p>
Об'єкт - це
конкретне уявлення абстракції. Об'єкт має індивідуальністю,
станом і поведінкою. Структура та поведінка подібних об'єктів визначені в
їх спільному класі. Терміни «екземпляри класу» і «об'єкт» взаємозамінні. P>
Індивідуальність
- Це характеристика об'єкта, яка відрізняє його від усіх інших об'єктів. P>
Стан об'єкту
характеризується переліком всіх властивостей об'єкта і поточними значеннями кожного їх
цих властивостей. Об'єкти не існують ізольовано один від одного. Вони
піддаються впливу або самі впливаю на інші групи. Поведінка
характеризує те, як об'єкт впливає на інші об'єкти (або піддається
впливу) в термінах змін його стану і передачі повідомлень. Поведінка
об'єкта є функцією як його стану, так і виконуваних ним операцій.
Кажуть, що стан об'єкта представляє сумарний результат його поведінки.
Операція позначає обслуговування, що об'єкт пропонує своїм клієнтам.
Можливі п'ять видів операцій клієнта над об'єктом: p>
модифікатор
(змінює стан об'єкта); p>
селектор (дає
доступ до стану, але не змінює його); p>
ітератор
(доступ до змісту об'єкта по частинах, в строго визначеному порядку); p>
конструктор
(створює об'єкт і ініціалізує його стан); p>
деструктор
(руйнує об'єкт і звільняє займану їм пам'ять). p>
У чистих
об'єктно-орієнтованих мовах програмування операції можуть оголошуватися
тільки як методи - елементи класів, примірниками яких є об'єкти.
Гібридні мови дозволяють писати операції як вільні підпрограми (поза
класів). У загальному випадку всі методи і вільні підпрограми, асоційовані з
конкретним об'єктом, утворюють протокол. Таким чином, протокол визначає
оболонку припустимого поводження об'єкта і тому містить в собі цілісне
(статичне і динамічне) представлення об'єкта. Великий протокол корисно
розділяти на логічні угруповання, що розділяють простір поведінки об'єкт,
позначають ролі, що може грати об'єкт. З точки зору зовнішнього середовища
важливе значення має таке поняття, як обов'язки об'єкта. Обов'язки
означають зобов'язання об'єкта забезпечити певну поведінку. Обов'язками
об'єкта є всі види обслуговування, які він пропонує клієнтам. У світі
об'єкт відіграє певні ролі, виконуючи свої обов'язки. p>
Наявність у
об'єкта внутрішнього стану означає, що порядок виконання ним операцій
дуже важливий. Тобто об'єкт може представлятися як незалежний автомат. Можна
виділити активні і пасивні об'єкти. Активний об'єкт має власний канал
(потік) управління, пасивний - ні. Активний об'єкт автономний, він може
виявляти свою поведінку без впливу з боку інших об'єктів. Пасивний
об'єкт, навпаки, може змінювати свій стан тільки під впливом інших
об'єктів. p>
У полі зору
розробника програмного забезпечення знаходяться не об'єкти-одинака, а
взаємодіючі об'єкти, адже саме взаємодія об'єктів реалізує
поведінка системи. Відносини між парою об'єктів грунтуються на взаємній
інформації про дозволені операції і очікуваному поведінці. p>
Оцінка складності програмних
систем h2>
При
конструюванні об'єктно-орієнтованих програмних засобів значна частина
витрат припадає на створення візуальних моделей. Дуже важливо коректно і
всебічно оцінити якість цих моделей, зіставивши якості числову оцінку.
Рішення даної задачі вимагає введення спеціального метричного апарату.
Такий апарат розвиває ідеї класичного оцінювання складних програмних
систем, заснованого на метриках складності, зв'язності і зчеплення. Разом з тим
він враховує специфічні особливості об'єктно-орієнтованих рішень.
Об'єктно-орієнтовані метрики вводяться з метою: p>
поліпшити
розуміння якості продукту; p>
оцінити
ефективність процесу конструювання; p>
поліпшити
якість роботи на етапі проектування. p>
Для будь-якого
інженерного продукту метрики повинні орієнтуватися на його унікальні
характеристики. З точки зору метрик виділяють п'ять характеристик
об'єктно-орієнтованих систем: локалізацію, інкапсуляцію, інформаційну
закритість, наслідування і способи абстрагування об'єктів. Ці характеристики
надають максимальний вплив на об'єктно-орієнтовані метрики. p>
Локалізація
фіксує спосіб угруповання інформації в програмі. У класичних методах,
де використовується функціональна декомпозиція, інформація локалізується навколо
функцій. Функції в них реалізуються як процедурні модулі. У методах,
керованих даними, інформація групується навколо структур даних. У
об'єктно-орієнтованої середовищі інформація групується всередині класів або
об'єктів (інкапсуляція, як даних, так і процесів). Оскільки в класичних
методах основний механізм локалізації - функція, програмні метрики
орієнтовані на внутрішню структуру або складність функцій (довжина модуля,
зв'язність, цікломатіческая складність) або на спосіб, яким функції
зв'язуються один з одним (зчеплення модулів). Так як в об'єктно-орієнтованої
системі базовим елементом є клас, то локалізація тут грунтується на
об'єктах. Тому метрики повинні застосовуватися до класу (об'єкта) як до
комплексної сутності. Крім того, між операціями (функціями) і класами можуть
бути відносини не лише «один-до-одного». Тому метрики, що відображають способи
взаємодії класів, повинні бути пристосовані до відносин
«Один-до-багатьох», «багато-до-багатьох». P>
Інкапсуляція --
упаковка (зв'язування) сукупності елементів. Для класичних програмних
коштів прикладами низькорівневою інкапсуляції є записи і масиви.
Механізмом інкапсуляції середнього рівня є підпрограми. У
об'єктно-орієнтованих системах інкапсулюються обов'язки класу,
представляються його властивостями, операціями і станами. Для метрик облік
інкапсуляції призводить до зміщення фокусу вимірювань з одного модуля на групу
властивостей і обробних модулів (операцій). Крім того, інкапсуляція переводить
вимірювання на більш високий рівень абстракції. Навпаки, класичні метрики
орієнтовані на низький рівень - кількість бульових умов (цікломатіческая
складність) і кількість рядків програми. p>
Інформаційна
закритість робить невидимими операционные деталі програмного компонента.
Іншим компонентів доступна тільки необхідна інформація. Якісні
об'єктно-орієнтовані системи підтримують високий рівень інформаційної
закритості. Таким чином, метрики, які вимірюють ступінь досягнутої закритості,
тим самим відображають якість об'єктно-орієнтованого проекту. p>
Спадкування --
механізм, що забезпечує тиражування обов'язків одного класу в інші
класи. Спадкування поширюється через всі рівні ієрархії класів.
Стандартні програмні засоби не підтримують цю характеристику. Оскільки
спадкування - основна характеристика об'єктно-орієнтованих систем, на ній
фокусуються багато об'єктно-орієнтовані метрики (кількість дітей --
нащадків класу, кількість батьків, висота класу в ієрархії
успадкування). p>
Абстракція --
це механізм, який дозволяє проектувальнику виділяти головне в програмному
компоненті (як властивості, так і операції) без урахування другорядних деталей. За
міру переміщення на більш високі рівні абстракції ми ігноруємо все більше
кількість деталей, забезпечуючи всі загальне уявлення поняття або елемента.
У міру переміщення на більш низькі рівні абстракції ми вводимо все більше
кількість деталей, забезпечуючи більш точне уявлення поняття або
елементу. Клас - це абстракція, яка може бути представлена на різних
рівнях деталізації і різними способами. Тому об'єктно-орієнтовані
метрики повинні представляти абстракції в термінах вимірювань класу. p>
Класичною
мірою складності внутрішніх зв'язків модуля є зв'язність, а класичної
мірою складності зовнішніх зв'язків - зчеплення. p>
Зв'язність
модуля - міра залежності його частин, це внутрішня характеристика модуля. Чим
вище зв'язність модуля, тим краще результат проектування. Для вимірювання
зв'язності використовують поняття сили зв'язності (СС). Існує 7 типів зв'язності: p>
Зв'язність по
збігу (СС = 0). У модулі відсутні явно виражені внутрішні зв'язки. P>
Логічна
зв'язність (СС = 1). Частини модуля об'єднані за принципом функціонального подоби.
Наприклад, модуль складається з різних підпрограм обробки помилок. При
використанні такого модуля клієнт вибирає тільки одну з підпрограм.
Недоліками є складне пару і велика ймовірність занесення помилок
при зміні сполучення заради однієї функції. p>
Тимчасова
зв'язність (СС = 3). Частини модуля не пов'язані, але необхідні в один і той же період
роботи системи. Недолік: сильна взаємний зв'язок з іншими модулями, звідси --
сильна чутливість до внесення змін. p>
Процедурна
зв'язність (СС = 5). Частини модуля пов'язані порядком виконуваних ними дій,
реалізують деякий сценарій поведінки. p>
Комунікативна
зв'язність (СС = 7). Частини модуля пов'язані з даними (працюють з однією і тією ж
структурою даних). p>
Інформаційна
(послідовна) зв'язність (СС = 9). Вихідні дані однієї частини використовуються
як вхідні дані в іншій частині модуля. p>
функціона