Допустимими операціями над стеком являються:
- перевірка стека на порожність;
- додавання нового елемента в кінець стека;
- видалення останнього елемента зі стека;
- доступ до останнього елемента.
Таким чином, операції додавання і видалення елемента виконується тільки в кінці списку.
Черга ж являє собою лінійний список, у якого елементи додаються і видаляються з початку списку (як черга в магазині).
Двохстороння черга - лінійний список, у якого операції додавання і видалення елементів та доступ до них можливий як на початку так і в кінці списку.
Використовуючи вказівники можливо побудувати багато інших корисних різновидів зв’язних структур даних, таких як дерева, графи, мережі.
В реалізованій програмі використовуються списки, а точніше - двухзв’язні списки з фіктивним елементом. Їх використання є доцільним, тому що створювана програма не має визначеного розміру, що, наприклад, виключає використання в програмі масивів. За допомогою списків в програмі проводиться сортування, додавання, видалення та деякі інші операції, що так необхідні при веденні обліку меблевого складу.2.1 Програмна модель
Програма, створена на мові програмування С++, в середовищі програмування BorlandС++Builder6.0.При розробці моделі програми було створено наступні класи:
1. Table
2. Data
3. Record
4. Iterator
5. Number
6. MyTable<Number>
7. MyData
8. Main
Кожин з цих класів має свою будову. Наприклад, будова класу Tableпредставлена на мал.2.
Мал. 2 - Клас Table
Крім цього, кожен клас так чи інакше взаємодіє з іншими класами. Зв’язок класів представлений на мал. 3 у вигляді діаграм Буча.
Мал. 3
З діаграми видно, що кілька класів використовуються одним класом. Наприклад класи Data, Record, Iteratorвикористовуються класом Table, і крім того, використовуються між собою. Стрілочки на діаграмі означають відношення “наслідування” класів, а зв’язок через рисочку, що виходить з кружечка, означає використання одного класу іншим.
Клас зазвичай представляють аморфним об'єктом, на зразок хмарки. Хмарку було взято з матеріалів корпорації Intel, що документувала свою оригінальну об'єктно-орієнтовану архітектуру iAPX432. Форма цього образу натякає на розпливчатість меж абстракції, від яких не очікується гладкості і простоти. Пунктирний контур символізує те, що клієнти оперують зазвичай з екземплярами цього класу, а не з самим класом.
Крім класів, програма складається з об’єктів, а разом вони утворюють модулі. Діаграма модулів показує розподіл класів і об'єктів по модулях у фізичному проектуванні системи.
Кожна окрема діаграма модулів представляє деякий ракурс структури модулів системи.
Діаграма модулів використовується при розробці для того, щоб показати фізичне ділення архітектури програми по шарах і розділах.
Кожен модуль програми по обліку товарів магазину має ім'я - це ім'я відповідного фізичного файлу в каталозі проекту (Main.h і Main.cpp, Data.hiData.cpp, Number.hiNumber.cpp, Table.h та ін.).
Кожне ім'я файлу унікальне в програмі. Сам модуль містить або опис, або визначення класів і об'єктів, а також інші конструкції мови. "Розкривши" значок будь-якого модуля з діаграми, потрапляємо всередину відповідного файлу. Розглядаючи структуру програми з іншого боку, маємо наступну будову: програма містить всобі три форми.
Перша форма програми (MаіnForm) - це форма, що відкривається зразу ж при запуску програми – головна, відображає всі дані про продуктовий магазин. Крім відомостей про товар вона також має в розпорядженні кнопки:
· Додати
· Видалити
· Очистити
· Змінити
· Сортувати
· Зберегти
· Відкрити
· Вихід
Код обробника подій кожної з них наведений в додатку, в лістингу програми.
2.2 Вибір засобів реалізації програми
Програма реалізована в середовищі об’єктно-орієнтованого програмування BorlandС++Builder6.0, на основі мови програмування С++. Це пов’язано з тим, що даний напрям програмування має ряд переваг, необхідних для ведення обліку меблевого складу.
Відомо декілька версій C++. У версії 1.0 реалізовані основні механізми об'єктно-орієнтованого програмування, такі як одиночне наслідування і поліморфізм, перевірка типів і перевантаження функцій. У створеній в 1989 році версії 2.0 знайшли віддзеркалення багато додаткових властивостей (наприклад, множинне спадкоємство), що виникли на базі широкого досвіду застосування мови численним співтовариством користувачів. У версії 3.0 (1990) з'явилися шаблони (класи, що параметризуються) і обробка виключень. Комітет ANSI з C++ (X3J16) недавно схвалив пропозиції по введенню просторів імен (що відповідає нашому позначенню категорій класів) і перевірки типів під час виконання.
Основні характеристики C++:
· абстракції: змінні екземпляра, методи екземпляра, змінні класу, методи класу;
· інкапсуляція: змінних, методів;
· модульність: різновиди модулів;
· ієрархії: наслідування, шаблони, мета класи;
· типізація: сильна типізація, поліморфізм;
· паралельність: багатозадачність;
· збереженість: довго живучі об’єкти.
Абстрагування є одним з основних методів, використовуваних для вирішення складних завдань. Абстракція виділяє істотні характеристики деякого об'єкту, що відрізняють його від всіх інших видів об'єктів і, таким чином, чітко визначає його концептуальні межі з погляду спостерігача. Абстрагування концентрує увагу на зовнішніх особливостях об'єкту і дозволяє відокремити найістотніші особливості поведінки від неістотних. Вибір правильного набору абстракцій для заданої наочної області є головним завданням об'єктно-орієнтованого проектування.
Абстракція і інкапсуляція доповнюють один одного: абстрагування направлене на спостережувану поведінку об'єкту, а інкапсуляція займається внутрішнім устроєм. Найчастіше інкапсуляція виконується за допомогою утаєння інформації, тобто маскуванням всіх внутрішніх деталей, що не впливають на зовнішню поведінку. Зазвичай ховаються і внутрішня структура об'єкту і реалізація його методів. Інкапсуляція, таким чином, визначає чіткі межі між різними абстракціями.
Інкапсуляція виступає як процес відділення один від одного елементів об'єкту, що визначають його структуру і поведінку; служить для того, щоб ізолювати зобов'язання абстракції від їх реалізації.
Розділення програми на модулі до деякої міри дозволяє зменшити її складність. Правильне розділення програми на модулі є майже таким же складним завданням, як вибір правильного набору абстракцій. Модулі виконують роль фізичних контейнерів, в які поміщаються визначення класів і об'єктів при логічному проектуванні системи. Для невеликих завдань допустимий опис всіх класів і об'єктів в одному модулі. Проте для більшості програм (окрім найтривіальніших) кращим рішенням буде згрупувати в окремий модуль логічно зв'язані класи і об'єкти, залишивши відкритим ті елементи, які абсолютно необхідно бачити іншим модулям.
Ієрархія виступає, як процес впорядкування абстракцій, розташування їх по рівнях. Основними видами ієрархічних структур стосовно складних систем є структура класів (ієрархія "is-a") і структура об'єктів (ієрархія "partof"). Прикладом ієрархії є одиночне наслідування. Іншими словами, наслідування створює таку ієрархію абстракцій, в якій підкласи успадковують будову від одного або декількох батьківських класів.
Типізація являє собою спосіб захиститися від використання об'єктів одного класу замість іншого, або принаймні управляти таким використанням. Типізація примушує виражати абстракції так, щоб мова програмування, використовувана в реалізації, підтримувала дотримання ухвалених проектних рішень. Ідея узгодження типів займає в понятті типізації центральне місце.
В той час, як об'єктно-орієнтоване програмування засноване на абстракції, інкапсуляції і наслідуванні, паралелізм головну увагу приділяє абстрагуванню і синхронізації процесів.
Для об'єктно-орієнтованої розробки виділяють сім різних видів інструментів.
Перший інструмент - система з графічним інтерфейсом, що підтримує об'єктно-орієнтовану систему позначень. Такий інструмент може бути використаний при аналізі, щоб зафіксувати семантику сценаріїв, на ранніх стадіях розробки, щоб передати стратегічні і тактичні рішення, прийняті при проектуванні, а також для координування дій проектувальників. Подібний інструмент буде корисний впродовж всього життєвого циклу і при супроводі системи.
Другий, важливий для об'єктно-орієнтованої розробки інструмент, - браузер, який показує структуру класів і архітектуру модулів системи. Ієрархія класів може зробитися настільки складною, що важко навіть відшукати всі абстракції, які були введені при проектуванні. При вивченні фрагмента програми розробникові може знадобитися подивитися визначення класу деякого об'єкту. Знайшовши цей клас, йому ймовірно доведеться заглянути в опис якого-небудь з його суперкласів. З цієї причини браузер виявляється дуже важливим інструментом об'єктно-орієнтованого аналізу і проектування.
Третій вид інструментів, який дуже важливий - інкрементний компілятор. Метод еволюційної розробки, який застосовується в об'єктно-орієнтованому програмуванні, потребує компілятора, який міг би компілювати окремі оголошення і операторів. Для швидкої відладки методи і визначення полів повинні компілюватися інкрементно.
У категорію налагоджувальних засобів включається і такі інструменти, як стресові тестери, що випробовують програми в критичних умовах обмеженості ресурсів, і інструменти для аналізу пам'яті, що розпізнають порушення доступу до пам'яті (запис в недозволені ділянки пам'яті, читання з неініціалізованих ділянок, читання або запис за межами масиву).