У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент





типів даних і функцій у модулі;

4. використанням класів.

Найбільш цікаві для нас абстракції сутності об'єктів, тому що вони відповідають словнику предметної області. Опис поведінки об'єкта містить опис операцій, які можуть виконуватись над ним, та операцій, які сам об'єкт виконує над іншими об'єктами. Такий підхід концентрує увагу на зовнішніх особливостях об'єкта.

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

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

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

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

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

2.2.2 Вектори, як динамічні масиви даних

Представлення векторів найзручніше провести за допомогою масивів даних.

Масивом називається послідовність змінних одного типу, що використовує одне ім'я; для посилання на конкретне значення в ній використається індекс. Масиви зручні для зберігання величезної кількості взаємозв'язаних значень. Наприклад, голи, забиті кожним гравцем футбольної команди, природно зберігати саме в масивах. У C++ допускаються і багатовимірні масиви. Наприклад, масиви з кількістю голів можна зберегти у масиві місяців — це дозволить працювати з кількістю голів, забитих кожним гравцем в певному місяці.

Ініціалізація масивів

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

За допомогою масивів можна легко вирішити проблему роботи з подібними послідовностями.

Неважливо, наскільки великий масив; завжди потрібно стежити за тим, щоб операції з масивом не приводили до виходу за його межі.

Індекс масиву в C++ відлічується від 0, а не від 1. Локальна змінна нежиттєздатна до тих пір, поки їй не привласнять значення . Іншими словами, поки ви в ній щось не збережете, вона міститиме сміття. Локальний опис масиву відбувається так само: поки кожному елементу не привласнять які-небудь значення, в осередках масиву міститиметься сміття. Локальну змінну слід ініціалізувати при її оголошенні, і це справедливо для масивів.

Математики перераховують вміст масивів, починаючи з елементу номер 1. Першим елементом математичного масиву х є х(1). У багатьох мовах програмування також починають перерахування елементів масиву з 1. Але в C++ масиви індексуються починаючи з 0! Перший елемент масиву C++ позначається як m_array [0]. Перший індекс масиву C++ нульовий; тому останнім елементом 128-елементного цілочисельного масиву є елемент із індексом 127.

2.2.3 Використання динамічних масивів даних бібліотеки STL

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

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

До складу бібліотеки входять:

Контейнери STL

Ітератори

Алгоритми

Розподілювачі пам’яті

Об'єктні функції

Контейнери (containers) – це об'єкти, призначені для збереження інших елементів. Наприклад: вектор, лінійний список, множина.

Бібліотека STL забезпечує декілька контейнерів для зберігання зв'язаних об'єктів. Всі контейнери — класи шаблону, що дозволяє вам, конкретизувати, які об'єкти зберігати в контейнерах. Контейнери в STL можуть ділитися на три категорії, контейнери послідовності, асоціативні контейнери, і контейнерні адаптери.

Клас Vector — шаблонний клас контейнер, що зберігає елементи будь – якого типу даних і може надати доступ до будь якого елементу в будь – який момент часу. Він оголошений так:

template <

class Type,

class Allocator = allocator<Type>

>

class vector

де Type — тип призначених для збереження даних.

Allocator задає розподільник пам'яті, що за замовчуванням є стандартним.

У класі vector визначені наступні конструктори.

explicit vector(const Allocator& a=Allocator());

explicit vector(size_type число, const T&значення= T(), const Allocator&a= Allocator());

vector(const vector<T,Allocator>&об'єкт);

template<class InIter>vector(InIter початок, InIter кінець, const Allocator&a= Allocator());

Перша форма являє собою конструктор порожнього вектора.

В другій формі конструктора вектора число елементів – це число, а кожен елемент дорівнює значенню значення. Параметр значення може бути значенням за замовчуванням.

Третя форма конструктора вектор – це конструктор копіювання.

Четверта форма – це конструктор вектора, що містить діапазон елементів, заданий ітераторами початок і кінець.

Для будь-якого об'єкта, що буде зберігатися у векторі, повинний бути


Сторінки: 1 2 3 4 5 6 7 8 9 10 11 12