Клас для роботи з квадратними матрицями

Автор работы: Пользователь скрыл имя, 22 Декабря 2011 в 21:52, курсовая работа

Краткое описание

Актуальність моєї роботи полягає у тому, що робота з матрицями зустрічається практично у всіх ВУЗах майже на всіх спеціальностях, та часто на виробництві, при розрахунках. Однозначною перевагою програми є можливість проводити математичні операції над матрицями великої розмірності, що значно прискорює процес розрахунку в порівнянні з «ручною роботою».
У роботі необхідно виконати наступні завдання: проаналізувати предметну область, розробити програму, створити візуальний інтерфейс, провести тестування.

Содержание работы

Вступ 7
Аналіз предметної області 8
1.1 Огляд існуючих методів вирішення завдання 8
1.2 Огляд існуючих програмних засобів, що вирішують аналогічні завдання 9
1.3 Висновки по розділу та постановка завдання роботи 9
Аналіз програмних засобів………………………………………………………...…… ……10
2.1 Огляд особливостей мови програмування........................................................................ .10
2.2 Огляд особливостей обраного компілятору…………………..…………………… …….14
2.3 Створення візуального інтерфейсу…………………….……….…….…………………..15
2.6 Висновки по розділу 2……………………………………………………..………………16
Основні рішення по реалізації компонентів системи…………………… ...…………….17
3.1 Основні рішення щодо уявлення даних системи……………………………………….. 17
3.2 Основні розроблені алгоритми ……………………………………..19
3.3 Основні рішення щодо модульного уявлення системи 20
3.4 Особливості реалізації системи 20
3.5 Результати тестування програми 21
3.6 Висновки по розділу 3 21
Посібник програміста 22
Інструкція користувача 25
Висновки 27

Содержимое работы - 1 файл

пз на курсовой мое.doc

— 323.00 Кб (Скачать файл)

 

  1. АНАЛІЗ ПРОГРАМНИХ ЗАСОБІВ
 

     2.1 Огляд особливостей мови програмування 

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

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

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

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

       У 1998 році ратифіковано міжнародний стандарт мови С++: ISO/IEC 14882 «Standard for the C++ Programming Language». Поточна версія цього стандарту — ISO/IEC 14882:2003.

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

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

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

       Сі++ додає до Сі об'єктно-орієнтовані  можливості. Він вводить класи, які  забезпечують три найважливіші властивості ООП: інкапсуляцію, спадкування і поліморфізм.

     Інкапсуляція (encapsulation) - це заховання реалізації класу і відділення його внутрішньої вистави від зовнішнього (інтерфейсу). При використанні об'єктно-орієнтованого підходу не прийнято застосовувати прямий доступ до властивостей якого-небудь класу з методів інших класів. Для доступу до властивостей класу прийнято використовувати спеціальні методи цього класу для здобуття і зміни його властивостей.  Усередині об'єкту дані і методи можуть володіти різною мірою відвертості (або доступності). Міри доступності дозволяють тонше управляти властивістю інкапсуляції.  Відкриті члени класу складають зовнішній інтерфейс об'єкту. Це та функціональність, яка доступна іншим класам. Закритими зазвичай оголошуються всі властивості класу, а також допоміжні методи, які є деталями реалізації і від яких не повинні залежати інші частини системи.  Завдяки захованню реалізації за зовнішнім інтерфейсом класу можна міняти внутрішню логіку окремого класу, не міняючи код останніх компонентів системи. Ця властивість називається модульність.  Забезпечення доступу до властивостей класу лише через його методи також дає ряд переваг. По-перше, так набагато простіше контролювати коректні значення полів, адже пряме звернення до властивостей відстежувати неможливе, а значить, їм можуть привласнити некоректні значення.  По-друге, не складе труднощів змінити спосіб зберігання даних. Якщо інформація стане зберігатися не у пам'яті, а в довготривалому зберігачі, такому як файлова система або база даних, потрібно буде змінити лише ряд методів одного класу, а не вводити цю функціональність у всі частини системи.  Нарешті, програмний код, написаний з використанням даного принципу, легко відлагоджувати. Для того, щоб взнати, хто і коли змінив властивість об'єкту, що цікавить нас, досить додати виведення налагоджувальної інформації в той метод об'єкту, за допомогою якого здійснюється доступ до властивості цього об'єкту. При використанні прямого доступу до властивостей об'єктів програмістові довелося б додавати виведення налагоджувальної інформації у всі ділянки коду, де використовується об'єкт, що цікавить нас.

     Спадкування (inheritance) - це відношення між класами, при якому клас використовує структуру або поведінку іншого класу (одиночне спадкування), або інших (множинне спадкування) класів. Спадкування вводить ієрархію "спільне/окреме", в якій підклас успадковує від одного або декількох загальніших суперкласів. Підкласи зазвичай доповнюють або перевизначають успадковану структуру і поведінку.  Як приклад можна розглянути завдання, в якому необхідно реалізувати класи "Легковий автомобіль" і "Вантажний автомобіль". Очевидно, ці два класи мають загальну функціональність. Так, обидва вони мають 4 колеса, двигун, можуть переміщатися і так далі Всіма цими властивостями володіє будь-який автомобіль, незалежно від того, вантажний він або легковий, 5- або 12-місцевий. Розумно винести ці загальні властивості і функціональність в окремий клас, наприклад, "Автомобіль" і успадковувати від нього класи "Легковий автомобіль" і "Вантажний автомобіль", щоб уникнути повторного написання одного і того ж коду в різних класах.   Використання спадкування сприяє зменшенню кількості коду, створеної для опису схожої суті, а також сприяє написанню ефективнішого і гнучкішого коду.  Деякий клас також може успадковувати властивості і поведінку відразу декількох класів. Найбільш популярним прикладом вживання множинного спадкоємства є проектування системи обліку товарів в зоомагазині.  Всі тварини в зоомагазині є спадкоємцями класу "Тварина", а також спадкоємцями класу "Товар". Тобто всі вони мають вік, потребують їжі і води і в той же час мають ціну і можуть бути продані.  Не всі об'єктно-орієнтовані мови програмування містять мовні конструкції для опису множинного спадкоємства. 

     Поліморфізм є одним з фундаментальних  понять в об'єктно-орієнтованому  програмуванні поряд із спадкоємством і інкапсуляцією. Слово "поліморфізм" грецького походження і означає той, що "має багато форм". Щоб зрозуміти, що воно означає стосовно об'єктно-орієнтованого програмування, розглянемо приклад.  Передбачимо, ми хочемо створити векторний графічний редактор, в якому нам потрібно описати у вигляді класів набір графічних примітивів, - Point, Line, Circle, Box і так далі. В кожного з цих класів визначимо метод draw для відображення відповідного примітиву на екрані.   Очевидно, доведеться написати код, який при необхідності відображувати малюнок послідовно перебиратиме всі примітиви, на момент малювання що знаходяться на екрані, і викликати метод draw в кожного з них. Людина, незнайома з поліморфізмом, найімовірніше, створить декілька масивів (окремий масив для кожного типа примітивів) і напише код, який послідовно перебере елементи з кожного масиву і викличе в кожного елементу метод draw. Недоліком написаного коду буде дублювання практично ідентичного коду для відображення кожного типа примітивів. Також незручне те, що при подальшій модернізації нашого графічного редактора і додаванні можливості малювати нових типів графічних примітивів, наприклад Text, Star і так далі, при такому підході доведеться міняти існуючий код і додавати в нього визначення нових масивів, а також обробку елементів, що містяться в них.  Використовуючи поліморфізм, ми можемо значно спростити реалізацію подібної функціональності. Перш за все, створимо загальний батьківський клас для всіх наших класів. Хай таким класом буде Point. В результаті отримаємо ієрархію класів. В кожного з дочірніх класів метод draw перевизначений так, щоб відображувати екземпляри кожного класу відповідним чином.  Для описаної вище ієрархії класів, використовуючи поліморфізм. Отже поліморфізм (polymorphism) – це положення теорії типів, згідно з яким імена (наприклад, змінних) можуть позначати об'єкти різних (але що мають загального батька) класів. Будь-який об'єкт, що позначається поліморфним ім'ям, може по-своєму реагувати на якийсь загальний набір операцій.

    Переваги  мови С++ в порівнянні з іншими об'єктно-орієнтованими  мовами:

    1) Мова С++ має більш розширені  можливості на відміну від  мови С.

  1. Якщо синтаксично порівнювати С++  з мовою програмування Java, то  в  Java  вида-

лено  велику кількість синтаксичних засобів, оголошених необов'язковими. В результаті програми на Java бувають громіздкіші в порівнянні з їх аналогами на С++.

  1. Виконання програми.  Java-код компілюються в проміжний код, який надалі інтер-

претується  або компілюється, тоді як C++ спочатку орієнтований на компіляцію в машинний код заданої платформи (хоча, теоретично, ніщо не заважає створювати для C++ транслятори в проміжний код). Це вже визначає різницю в сферах вживання мов: Java навряд чи може бути використана при написанні таких специфічних програм, як драйвери пристроїв або низькорівневі системні утиліти. Механізм виконання Java робить програми, що навіть відкомпілювалися (у байт-код) повністю переносимими. Стандартне оточення і середовище виконання дозволяють виконувати програми на Java на будь-якій апаратній платформі і в будь-якій ОС, без яких-небудь змін, зусилля по транспортуванню програм мінімальні (при дотриманні рекомендацій по створенню переносимих програм — і зовсім нульові). Ціною переносимості стає втрата ефективності — робота середовища виконання приводить до додаткових накладних витрат.

  1. Керування ресурсами  C++ дозволяє використовувати принцип «захват ресурсів

шляхом  ініціалізації» (RAII), при якому ресурси  асоційовані з об'єктом і автоматично  звільняються при руйнуванні об'єкту (наприклад, std::vector і std::ifstream). Також можливий підхід, коли програміст, виділяючи ресурси (пам'ять під об'єкти, відкриті файли і т. п.), зобов'язаний явно поклопотатися про своєчасне їх звільнення. Java працює в середовищі із збіркою сміття, яка автоматично відстежує припинення використання об'єктів і звільняє займану ними пам'ять, якщо в цьому є необхідність, в деякий невизначений момент часу. Ручне управління переважно в системному програмуванні, де потрібний повний контроль над ресурсами, RAII і збірка сміття зручніше в прикладному програмуванні, оскільки в значній мірі звільняють програміста від необхідності відстежувати момент припинення використання ресурсів. Складальник сміття Java вимагає системних ресурсів, що знижує ефективність виконання програм, позбавляє програми на Java детермінованої виконання і здатний стежити лише за пам'яттю. Файли, канали, сокети, об'єкти графічного інтерфейсу програміст на Java завжди звільняє явно.

  1. Стандартизація оточення.  В Java є чітко певні стандарти на введення-виведення,

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

  1. Покажчики.  C++  зберігає можливість роботи з низькорівневими покажчиками. У

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

  1. На відміну від С++, Java є чисто об'єктно-орієнтованою мовою, без можливості

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

  1. Процесор. C++ використовує препроцесор для включення визначень функцій і кла-

сів, для  підключення бібліотек, повністю виконаних  у вихідному коді, а також дозволяє здійснювати метапрограмування з використанням препроцесора, яке, зокрема, вирішує складні проблеми високорівневого дублювання коду. Є думка, що цей механізм небезпечний, оскільки імена макросів препроцесора глобальні, а самі макроси майже ніяк не пов'язані з конструкціями мови. Це може приводити до складних конфліктам імен. З іншої точки зору, C++ надає досить засобів (константи, шаблони, вбудовані функції) для того, щоб практично повністю виключити використання препроцесора. Java виключила препроцесор повністю, позбавившись разом від всіх проблем з його використанням, втративши при цьому можливості метапрограмування препроцесора і текстових замін в коді засобами мови. 

 

      2.2 Огляд особливостей  обраного компілятору 

     В якості середовища розробки для даного курсового проекту було використано MS Visual Studio 2010, тому що він має повну інтеграцію з ОС Windows XP та вище, дозволяє програмувати з використанням сучасних технологій.

Информация о работе Клас для роботи з квадратними матрицями