Розділ 1. Концепція об'єктно-орієнтованого програмування на прикладі проектування бази даних Каса продажу квитків
Атрибути — ідентифікуючі характеристики об'єкта. Ідентифікуючі атрибути об'єкта? це ті дані, що характеризують власне об'єкт. Розрізнення цих атрибутів означає відмінність об'єктів. Ідентифікуючі атрибути об'єкта, отже, приписуються йому в момент створення (народження). Вони не повинні мінятися протягом життєвого циклу цього об'єкта. Сукупність таких атрибутів називають ідентифікатором об'єкта… Читати ще >
Розділ 1. Концепція об'єктно-орієнтованого програмування на прикладі проектування бази даних Каса продажу квитків (реферат, курсова, диплом, контрольна)
Об'єктно-орієнтоване програмування? це еволюційний етап у розвитку методології програмування, що спирається на ті ідеї структурного і модульного програмування, які виявилися плідними і перспективними для розвитку. Разом з тим об'єктно-орієнтоване програмування? це революційний, тобто якісно новий етап у методології програмування, що використовує принципово нові ідеї і методи, які не існували раніше. Нарешті, методологія об'єктно-орієнтованого програмування дійсно дозволяє краще, ніж старі методології, справлятися зі зростаючими потребами розроблювачів програмного забезпечення й апетитами замовників і споживачів програмного забезпечення, хоча програмування і залишається однією з найбільш важких галузей людської діяльності. Не слід тому вважати, що подальший прогрес в області розвитку методологій програмування не можливий[1, С. 9?10].
Об'єктно-орієнтоване програмування — це модель програмування, яка базується на стверджені того, що програма це сукупність об'єктів, які взаємодіють між собою. Кожен об'єкт в цій моделі є незалежним, і він здатний отримувати, обробляти дані та відправляти ці дані іншим об'єктам[2].
Об'єктно-орієнтоване програмування — ефективний спосіб організації програми. Воно ніяк не пов’язане з процесом виконання програми, а є тільки способом її ефективної організації. Велика частина операторів мови C++ є аналогічною операторам процедурних мов програмування, зокрема мови С. Зовні функція класу у мові програмування C++ дуже схожа на звичайну функцію мови С, і тільки за контекстом програми можна визначити, чи є функція частиною структурної С-програми або об'єктно-орієнтованої програми, написаної мовою C++[3, С. 21?22].
Існування об'єктно-орієнтованого програмування можливе завдяки трьом основним парадигмам, на яких базується саме ООП:
- — Інкапсуляція, також відома як приховування даних. Зміст інкапсуляції полягає у приховуванні від зовнішнього користувача деталей реалізації об'єкта, замість цього надаючи інтерфейс взаємодії з ним. Слугує передусім для того, щоб не давати можливості клієнту змінювати внутрішній стан об'єкта без відома останнього, залишаючи лише можливість впливу через «офіційні» методи роботи з полями та власне методи. Завдяки використанню інкапсуляції, досягаються щонайменше дві переваги: можливість зміни внутрішнього представлення даних без необхідності зміни програмного коду клієнта, зменшення ймовірності помилок через приведення екземпляра до непередбаченого стану.
- — Успадкування. Це означає, що об'єкти (класи) можуть переймати деякі властивості у своїх прабатьків. Як? Це залежить від тієї мови, на якій пишеться програма. Однак у будь-якому випадку картина та ж: це призводить до повторного використання вже написаного одного разу коду. Підкласи успадковують атрибути та поведінку своїх батьківських класів, і можуть мати нові власні атрибути. Тобто утворюється ієрархія з класів, де від основного класу походять усі інші класи. Застосування методу успадкування дозволяє покращити повторне використання коду шляхом використання вже визначених властивостей та методів (поведінки) базових класів.
- — Поліморфізм означає залежність поведінки від класу, в якому ця поведінка викликається, тобто, два або більше класів можуть реагувати по різному на однакові повідомлення. Це спричинене зміною в одного з класів якогось методу (процедури, функції), шляхом запису іншого алгоритму. Як приклад, деяка комп’ютерна програма при натисканні клавіші Esc завершить роботу, інша ж програма після натискання кнопки Esc тільки відкриє меню даної програми. В контексті об'єктно-орієнтованого програмування, найпоширенішим різновидом поліморфізму є здатність екземплярів підкласу грати роль об'єктів батьківського класу, завдяки чому екземпляри підкласу можна використовувати там, де використовуються екземляри батьківського класу. Прикладом поліморфізму в більшості мов програмування є бінарний оператор +, який може мати своїми аргументами дані різного типу: цілі числа, числа з плаваючою точкою, комплексні числа навіть рядки:
- — 1 + 2? операнди цілого типу, результат цілого типу.
- — 1.2 + 1.0e3? операнди дійсних типів, результат дійсного типу.
- — «коля» + «маня»? операнди рядки, результат конкатенований рядок.
Принципи об'єктно-орієнтованого програмування:
- 1. Усе є об'єктом.
- 2. Обчислення здійснюються шляхом взаємодії (обміну даними) між об'єктами, при якому один об'єкт вимагає, щоб інший об'єкт виконав деяку дію. Об'єкти взаємодіють, посилаючи й одержуючи повідомлення. Повідомлення — це запит на виконання дії, доповнений набором аргументів, що можуть знадобитися при виконанні дії.
- 3. Кожен об'єкт має незалежну пам’ять, що складається з інших об'єктів.
- 4. Кожен об'єкт є представником класу, що виражає загальні властивості об'єктів.
- 5. У класі задається поведінка (функціональність) об'єкта. Тим самим всі об'єкти, що є екземплярами одного класу, здатні виконувати однакові дії.
- 6. Класи організовані в єдину деревоподібну структуру з загальним коренем, що називається ієрархією спадкування. Пам’ять і поведінка, пов’язана з екземплярами визначеного класу, автоматично доступні будь-якому класу, розташованому нижче в ієрархічному дереві [1, С. 18?19].
Об'єктно-орієнтований підхід до розроблення програмних продуктів побудований на такому понятті як класи. Клас визначає новий тип даних, який задає формат об'єкта.
Клас містить як дані, так і коди програм, призначені для виконання дій над ними. Загалом, клас пов’язує дані з кодами програми. У мові програмування C++ специфікацію класу використовують для побудови об'єктів. Об'єкти — це примірники класового типу. Загалом, клас є набором планів і дій, які вказують на властивості об'єкта та визначають його поведінку.
Важливо розуміти, що клас — це логічна абстракція, яка реально не існує доти, доки не буде створено об'єкт цього класу, тобто це те, що стане фізичним представленням цього класу в пам’яті комп’ютера. Визначаючи клас, оголошують ті глобальні дані, які міститимуть об'єкти, і програмні коди, які виконуватимуться над цими даними. Хоча інколи прості класи можуть містити тільки програмні коди або тільки дані, проте більшість реальних класів містять обидва компоненти.
У класі дані оголошуються у вигляді змінних, а програмні коди оформляють у вигляді функцій. Змінні та функції називаються членами класу. Змінну, оголошену в класі, називають членом даних, а оголошену в класі функцію — функцією-членом класу. Іноді замість терміна член даних класу використовують термін змінна класу, а замість терміна функція-член класу використовують термін метод класу.
Оголошення класу синтаксично є подібним до оголошення структури [3, C.29]. Загальний формат оголошення класу має такий вигляд:
classDataBase
{.
private:
//приватні поля і методи.
public:
//загальні поля і методи.
}.
Будь-який клас може містити як закриті, так і відкриті члени. За замовчуванням усі члени, визначені в класі, є закритими (private-членами).
Наприклад, зміннаiє закритим членом даних класу DataBase (див. Додаток В). Це означає, що до неї можуть отримати доступ тільки функції-члени класу; ніякі інші частини програми цього зробити не можуть. У цьому полягає один з проявів інкапсуляції: програміст повною мірою може керувати доступом до певних елементів даних.
Закритими можна оголосити і функції, внаслідок чого їх зможуть викликати тільки інші члени цього класу. Щоб зробити члени класу відкритими (тобто доступними для інших частин програми), необхідно визначити їх після ключового слова public.
Усі змінні або функції, визначені після специфікатора доступу public, є доступними для всіх інших функцій програми, в тому числі і функції main (). Отже, в класі DataBase функції add (), del (int), show (), edit (int), sort (char), find (char, char[MAX]), find (int) і find (double) є відкритими. Зазвичай у програмі організовується доступ до закритих членів класу через його відкриті функції. програма інформація каса автоматизація Як правило, певну частину об'єкта, перш ніж його можна буде використовувати, необхідно ініціалізувати. Вимога ініціалізації членів-даних класу є достатньо поширеною, тому мові програмування C++ передбачено реалізацію цієї потреби пр. створенні об'єктів класу. Така автоматична ініціалізація членів-даних класу здійснюється завдяки використанню конструктора.
Конструктор — це спеціальна функція-член класу, яка викликається при створенні об'єкта, а її ім'я обов’язково збігається з іменем класу [3, C.33?34].
Особливості конструктора:
- — призначений для виділення динамічної пам’яті та ініціалізації даних класу;
- — якщо конструктор не оголошений, то компілятор згенерує конструктор за замовчуванням (без параметрів);
- — для конструктора явно не вказується результуючий тип, конструктор не повертає значення;
- — визначається всередині класу або поза протоколом класу;
- — може перевантажуватися;
- — може мати параметри за замовчуванням;
- — не успадковується;
- — не може мати оголошень const, virtual, static;
- — може мати список ініціалізації, який задається у заголовку після символу `:'. Так ініціалізуються константні поля, посилання на будь-який тип, поля з типом іншого класу, конструктори базових класів у разі успадкування;
- — може бути розміщений в private, protected та public-частинах класу. При оголошенні об'єктів у різних місцях програми необхідно враховувати, чи буде доступний відповідний конструктор. Найчастіше конструктори розміщують у public-частині класу, що забезпечує можливість створення об'єктів за межами класу;
- — автоматично викликається при створенні об'єкта у сегменті даних, стеку, динамічній пам’яті та при перетворенні типів, коли значення певного типу перетворюється в об'єкт класу у виразі, передачі аргументів у функцію, поверненні результату з функції;
- — не викликається при оголошенні вказівників на клас;
- — може бути конструктором копіювання, якщо має один параметр з типом T&або constT&
- — не може бути викликаний явно з використанням об'єкта класу (або вказівника чи посилання на клас);
- — при успадкуванні раніше викликаються конструктори базових класів, а потім — похідних класів [4, С.76].
Доповненням до конструктора слугує деструктор — це функція, яка викликається під час руйнування об'єкта. У багатьох випадках під час руйнування об'єкта необхідно виконати певну дію або навіть певні послідовності дій. Локальні об'єкти створюються під час входу в блок, у якому вони визначені, і руйнуються при виході з нього. Глобальні об'єкти руйнуються внаслідок завершення програми. Існує багато чинників, які заставляють використовувати деструктори. Наприклад, об'єкт повинен звільнити раніше виділену для нього пам’ять. У мові програмування C++ саме деструкторам доручається оброблення процесу деактивізації об'єкта. Ім'я деструктора має збігатися з іменем конструктора, але йому передує символ «~». Подібно до конструкторів, деструктори не повертають значень, а отже, в їх оголошеннях відсутній тип значення, що повертається [3, C.33?34].
Деструктор не має параметрів, він не перевантажується і не успадковується. Існує за замовчуванням, але його необхідно визначити, якщо для полів об'єкта була виділена динамічна пам’ять.
Деструктор викликається автоматично, якщо об'єкт виходить з області досяжності програми. Пам’ять, відведена у стеку для локального об'єкта з класом пам’яті «автоматичний» (діє за замовчуванням), буде вивільнено під час завершення роботи функції. Пам’ять статичного локального об'єкта буде звільнено перед завершенням роботи функції main (). Якщо локальний об'єкт розміщено в області динамічної пам’яті, то при завершенні роботи функції деструктор не викликається. Слід зазначити, що всю не звільнену динамічну пам’ять буде автоматично звільнено після завершення роботи програми [4, С.84].
Після визначення класу можна оголошувати його об'єкти. Об'єкт описується своїми атрибутами (інформаційними полями) і методами. Імена програмних об'єктів у методології об'єктно-орієнтованого програмування відіграють особливу роль. Ім'я структурного компонента програми, крім синтаксичного і прагматичного навантаження, повинне нести ще і максимальне семантичне навантаження. Це означає, що воно повинно бути не тільки синтаксично правильним і унікальним у своїй області видимості, але і максимально точно позначати той фізичний об'єкт, інформаційна модель якого описується.
Ім'я структурного компонента програми (об'єкта, типу, поля, методу і т.п.) повинне починатися з великої букви, не містити скорочень слів і, якщо це не мотивовано, цифр. Ім'я може містити кілька слів. У цьому випадку кожне слово повинне починатися з великої букви. Ім'я повинне нести змістовне навантаження, по можливості доповнюючи собою коментарі.
Інформаційні поля призначені для збереження інформації про об'єкт та її використання як самим об'єктом, так і іншими об'єктами. Як ми вже знаємо, ці дані називаються атрибутами. З точки зору використання атрибути об'єкта можна класифікувати в такий спосіб:
- — Атрибути — ідентифікуючі характеристики об'єкта. Ідентифікуючі атрибути об'єкта? це ті дані, що характеризують власне об'єкт. Розрізнення цих атрибутів означає відмінність об'єктів. Ідентифікуючі атрибути об'єкта, отже, приписуються йому в момент створення (народження). Вони не повинні мінятися протягом життєвого циклу цього об'єкта. Сукупність таких атрибутів називають ідентифікатором об'єкта. Ідентифікатор об'єкта повинен бути унікальним. Якщо серед атрибутів об'єкта можна обрати декілька груп атрибутів, що ідентифікують об'єкт, одна з таких груп повинна бути призначена ідентифікатором «за означенням». У цьому випадку говорять про привілейований ідентифікатор об'єкта.
- — Атрибути — описові параметри об'єкта. Описові параметри об'єкта визначають його стан у даний момент часу. Вони можуть змінюватися протягом його життя.
- — Допоміжні атрибути (інформаційні поля — посилання). Інформаційні поля посилального типу реалізують атрибути, спеціально призначені для установки і підтримки зв’язків між об'єктами. Ці зв’язки називають залежностями, а відповідні атрибути — допоміжними. (Термін «залежність» запозичений з теорії баз даних. З математичної точки зору залежність — це відношення на множині об'єктів) [1, C.34?39].
У даному курсовому проекті використовуються такі атрибути:
- ? Name — ім'я пункту типу char;
- ? DepartureDateTime — дата і час відправлення типу char;
- ? ArrivalDateTime — дата і час прибуття типу char;
- ? Price — ціна квитка типу double.