Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IPZ_1modul.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
611.93 Кб
Скачать

50. Методи програмування, що потенційно можуть призвести до помилок.

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

3.Переривання. Це засіб управління примусовим переходом до певного розділу програми незалежно від поточного її виконання. Небезпеки цього очевидні, оскільки переривання може привести до непередбаченого припинення виконання будь-якої критично важливої операції.

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

  2. Суміщення імен. Це трапляється, коли різні імена використовуються для звернення до одного й того ж програмного об'єкту. При читанні тексту програми легко пропустити момент зміни стану об'єкта, для звернення до якого використовується кілька імен.

51. Укривання даних, як спосіб підвищення надійності програмування.

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

Приховування інформації найбільш просто реалізується в мові Java, на відміну від більш ранніх мов програмування типу С або Pascal. Ці мови не мають конструкцій інкапсуляції, таких як класи об'єктів, тому структури даних не захищені. Інші частини програми можуть звертатися до даних безпосередньо, що може вести до непередбачених побічних ефектів. В об'єктно-орієнтованих мовах передбачені методи, які дозволяють вибирати і оновлювати значення атрибутів, не надаючи іншим об'єктам безпосереднього доступу до цих атрибутів. Таким чином, значення атрибута можна змінювати незалежно від інших об'єктів, які використовують атрибут.

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

Подібний приклад приховування інформації показаний в лістингу 18.2. У ситуаціях, коли деяка змінна може приймати обмежене безліч значень, ці значення можуть бути оголошені як константи. Мови, подібні C + +, підтримують перечислимого типи даних, але в мові Java для цього необхідно використовувати оголошення класу. Для прикладу розглянемо сигнальну систему, яка підтримує червоний, жовтий і зелений кольори. Тип сигналу (Сигнал) необхідно визначити так, щоб включити оголошення констант, відповідних цим квітам. Після цього можна посилатися на Signal.red (червоний сигнал) »Signal.green (зелений сигнал) і т.д. Цим избегается випадкове привласнення неправильних значень змінним типу сигналу

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]