Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Обробка винятків




Лабораторна робота № 4

Тема: Розробка програм із комплексним використанням основних концепцій об’єктно-орієнтованного програмування і можливостей С++.
Мета: Придбати практичні навички застосування основних концепцій і можливостей мови програмування С++ в комплексі, в одному проекті; практично опанувати технологією обробки виключень, RTTI, принципами файлового вводу-виводу, та іншими.
Обладнання: IBM-сумісний ПK.
Програмне забезпечення: OC Windows, інтегроване середовище розробки програм на мові С++.
Завдання: Скласти програму «Електронна записна книжка». Об’єкти обліку: контакти, свята, зустрічі та інші. Функції програми: додавання об’єктів, видалення, редагування, відображення, пошук, збереження у файлі, відкриття із файлу; Програмна реалізація: створити і використати ієрархію класів для об’єктів обліку. Додаткові вимоги: для обробки помилок використовувати технологію обробки виключень, для ідентифікації типів – технологію RTTI, для збереження у файли – двійкові файлові потоки, для приведення типів – відповідні оператори, для реалізації меню користувача – вказівники на функції, а також оператор typedef, простір імен і інші можливості там де це потрібно.  
Зміст звіту: 1. Порядок виконання роботы. 2. Вихідні коди програми з коментарями. 3. Результати тестування програми Висновки  

 


Короткі теоретичні відомості

RTTI

У суворо тіпізованних мовах компілятор здійснює весь контроль типів, так що немає особливої необхідності зберігати інформацію про класи і типи в працюючій програмі. Тим не менш, є випадки (як, наприклад, динамічне перетворення типів), які вимагають інформацію про тип. З цієї причини всі три ГО мови, що розглядаються тут, більш-менш підтримують Ідентифікацію / Інформацію про тип Часу Виконання (RTTI).

C++: спочатку не підтримував RTTI. Це було додано пізніше для динамічного перетворення типу (dynamic_cast) і зробило доступною деяку інформацію про тип для класів. Ви можете запитати ідентифікацію типу для об'єкта, і перевірити, чи належать два об'єкти одного класу.

OP: підтримує і вимагає багато RTTI. Доступний не тільки контроль відповідності та динамічне перетворення типів (за допомогою операторів is і as). Класи генерують розширену RTTI для своїх published властивостей, методів і полів. Фактично це ключове слово управляє частиною генерації RTTI. Вся ідея властивостей, механізм потоків (файли форм - DFM), і середовище Delphi, починаючи з Інспектора Об'єктів, сильно спирається на RTTI класів. У класу TObject є (крім інших) методи ClassName і ClassType. ClassType повертає змінну типу класу, об'єкт спеціального типу посилання на клас (який не є самим класом).

Java: як і в Object Pascal, в Java теж є єдиний базовий клас, який допомагає стежити за інформацією про клас. Безпечне перетворення типів (type-safe downcast) вбудовано в цю мову. Метод getClass () повертає свого роду метакласс (об'єкт класу, що описує класи), і Ви можете застосувати функцію getName () для того, щоб отримати рядок з ім'ям класу. Ви можете також використовувати оператор instanceof. Java включає в себе розширену RTTI для класів або інтроспекції, яка була введена для підтримки компонентної моделі JavaBeans. У Java існує можливість створювати класи під час виконання програми.

 

Обробка винятків

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

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

OP: Object Pascal використовує подібні ключові слова: raise, try, і except і володіє подібними властивостями. Єдина істотна відмінність полягає в тому, що спустошення стека не проводиться, просто тому, що в стеці немає об'єктів. Крім того, ви можете додати в кінці блоку try слово finally, відзначаючи блок, який повинен виконуватися завжди, незалежно від того, було чи ні викликано виняток. В Delphi класи виключень - похідні Exception.

Java: Використовує ключові слова C + +, але веде себе як Object Pascal, включаючи додаткову ключове слово finally. (Це загальна властивість всіх мов з посилальної-об'єктною моделлю, вона була придбана Borland також і в C + + Builder 3.) Присутність алгоритму складання сміття обмежує використання finally в класі, який розподіляє інші ресурси, окрім пам'яті. Також Java суворіше вимагає, щоб всі функції, які можуть викликати виключення, описували у відповідному блоці, які виключення можуть бути викликані функцією. Ці описи винятків перевіряються компілятором, що є гарним властивістю, навіть якщо воно має на увазі деяку додаткову роботу для програміста. У класах Java об'єкти-винятку повинні наслідувати класу Throwable.

В цілому, обробка винятків може виглядати таким чином (у деякій абстрактній мові):

try { line = console.readLine(); if (line.length() == 0) throw new EmptyLineException("Рядок, прочитаний з консолі, пустий!"); console.printLine("Привіт, %s!" % line);}catch (EmptyLineException exception) { console.printLine("Привіт!");}catch (Exception exception) { console.printLine("Помилка: " + exception.message());}else { console.printLine("Програма виконана без виняткових ситуацій");}finally { console.printLine("Програма завершена");}




Поделиться с друзьями:


Дата добавления: 2015-10-06; Мы поможем в написании ваших работ!; просмотров: 579 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Свобода ничего не стоит, если она не включает в себя свободу ошибаться. © Махатма Ганди
==> читать все изречения...

4435 - | 4128 -


© 2015-2026 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.