Допомога у написанні освітніх робіт...
Допоможемо швидко та з гарантією якості!

Вступ. Об’єктно-орієнтоване програмування

РефератДопомога в написанніДізнатися вартістьмоєї роботи

Фундаментальна ідея обробки помилок полягає в тому, що функція, яка виявила проблему, але не знає як її вирішити, генерує виняток у надії, що викликала її (безпосередньо чи опосередковано) функція зможе вирішити виниклу проблему. Функція, яка хоче вирішувати проблеми даного типу, може вказати, що вона перехоплює такі винятки. Механізм обробки виключень надає альтернативу традиційним методам в тих… Читати ще >

Вступ. Об’єктно-орієнтоване програмування (реферат, курсова, диплом, контрольна)

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

Основна мета курсового проектування формування навичок самостійної творчої роботи і закріплення теоретичних знань, отриманих при вивченні курсу.

Для вивчення та закріплення навичок в об'єктно — орієнтованому програмуванні, що є в даний час основним інструментом розробки складного програмного забезпечення в даному курсовому проекті розроблена програма, яка з використанням засобів ООП створює динамічну структуру стек у яку можна додавати об'єкти кожного з класів створеної ієрархії.

Курсовий проект виконував з використанням Microsoft Visual Studio 2008, під час написання придбав навички самостійної роботи над науково-технічною і довідковою літературою за фахом та іншими посібниками; самостійний вибір найбільш доцільних і технічно зроблених рішень та задач за розглянутим курсом.

При виконанні курсового проекту в мене з’явилась необхідність приймати обґрунтовані самостійні рішення з урахуванням призначення програми, технічних вимог до неї зв’язані з умовами експлуатації її користувачами. У ході розробки програмного забезпечення ознайомився з типовими аналогами, критично їх проаналізував і застосував окремі, найбільш раціональні рішення.

Реферативна глава (Торговельний офіс, Почтовий офіс, Банківський офіс)

У платформі .NET Framework всі керовані мови, наприклад, Visual Basic і C#, повністю підтримують концепції об'єктно-орієнтованого програмування, включаючи інкапсуляцію, успадкування і поліморфізм.

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

Спадкування описує можливість створення нових класів на основі існуючих класів.

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

class Post.

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

Для членів класу (даних і методів) визначені такі модифікатори доступу:

Public — члени класу доступні за межами даного класу;

Internal — члени класу доступні в межах однієї збірки;

Protected — члени класу доступні усередині даного класу;

Private — члени класу доступні тільки для інших членів даного класу.

За замовчанням застосовується модифікатор Internal. Клас може містити оголошення наступних елементів :

Конструктори, деструктори, константи, поля, методи, властивості, індексатори, оператори, події, делегати, класи, інтерфейси, структури.

Кожен клас може складатися з різних членів класу, які містять властивості, що описують дані класу, методи, що задають поведінку класу, і події, що забезпечують зв’язок між різними класами і об'єктами. Поля і властивості представляють відомості, що містяться в об'єкті. Поля подібні змінним, так як вони можуть бути прочитані або змінені безпосередньо.

Кожен об'єкт містить свій екземпляр полів класу.

class post.

public string box;

Методи знаходяться в пам’яті в одному екземплярі і використовуються всіма об'єктами спільно, тому необхідно забезпечити роботу методів нестатичних екземплярів з полями саме того об'єкту, для якого вони були викликані. Для цього в будь-який нестатичний метод автоматично передається прихований параметр this, в якому зберігається посилання на поточний екземпляр об'єкта, що викликав функцію.

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

У мові C# дозволяється оголосити клас, який не розглядається як тип даних, і в якого зберігається єдина роль — роль модуля. Такий клас оголошується з модифікатором static. В цьому класі можуть бути задані константи, лише статичні поля і лише статичні методи. У нього немає конструкторів в звичайному сенсі цього слова, що дозволяють створювати об'єкти — екземпляри класу.

Статичним є клас, всі методи якого є статичними. Статичні класи не потребують створення об'єкту оператором new.

Статичний клас не може розглядатися як тип даних.

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

Під дружніми функціями розуміють член класу з модифікатором доступу internal доступний для всіх класів всередині однієї збірки.

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

public override string ToString ().

{.

return Name + «|» + Adresa + «|» + Employees + «|» + Turnover + «|» + Profit + «|» + Box;

}.

Оператор інкремента збільшує свій операнд на 1, а оператор декременту зменшує свій операнд на 1.

Тобто, оператор: x++; Збільшує на одиницю змінну x.

А оператор: х—; зменшує на одиницю змінну х.

В мові C# існує дві форми розглянутих операцій: префіксна і постфіксна. Якщо оператори ++ або — записані після змінної (так, як написано вище) — це постфіксна форма. При цьому послідовно відбуваються наступні дії: старе значення змінної зберігається для використання в подальшому вираженні, в якому зустрілася ця змінна; І тільки після цього її значення ВІДРАЗУ Ж змінюється на 1. Якщо ці оператори записані перед змінної, ось так: ++х або —х, то це префиксна форма. При цьому послідовність дій така: СПОЧАТКУ змінна змінюється на 1; і тільки після цього використовується у виразі. Але якщо інкремент або декремент виконуються як абсолютно окремий від інших виразів оператор, то префиксна і Постфіксна форма призводять до однакового результату, тобто, при такому використанні немає ніякої різниці, де ми пишемо оператор.

Перевантаження операцій інкременту та декременту.

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

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

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

Спадкування буває відкритим (Public), закритим (Private) та захищеним (Protected). У всіх випадках клас D отримує доступ до відкритих і захищених членів B. Відмінності:

  • 1. Відкрите — Відкриті члени B стають відкритими в D. Захищені B — захищеними D. Кажуть, що клас успадковує як інтерфейс, так і реалізацію предка.
  • 2. Закрите — Відкриті і захищені члени B стають закритими в D. Застосовують коли клас повинен наслідувати тільки реалізацію.
  • 3. Захищене — відкриті і захищені члени B стають захищеними в D.

Множинне спадкування в C# реалізується через інтерфейси.

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

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

При оголошенні абстрактного методу використовується модифікатор abstract, Абстрактний метод автоматично стає віртуальним, так що модифікатор virtual при оголошенні методу не використовується.

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

Якщо в класі є хоч би один абстрактний метод, весь клас також має бути описаний як абстрактний.

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

При визначенні віртуального методу у складі базового класу перед типом значення, що повертається, указується ключове слово virtual, а при перевизначенні віртуального методу в похідному класі використовується модифікатор override. Віртуальний метод не може бути визначений з модифікатором static або abstract. Перевизначений віртуальний метод повинен мати такий саме набір параметрів, як і однойменний метод базового класу. За допомогою віртуальних методів реалізується один з основних принципів об'єктна — орієнтованого програмування — поліморфізм. Це слово в перекладі з грецького означає «багато форм», що в даному випадку означає «один виклик — багато методів» .

Динамічні структури даних — це структури даних, пам’ять під які виділяється і звільняється в міру необхідності. Динамічні структури даних в процесі існування в пам’яті можуть змінювати не тільки число складових їх елементів, а й характер зв’язків між елементами. При цьому не враховується зміна вмісту самих елементів даних. Така особливість динамічних структур, як мінливість їх розміру та характеру відносин між елементами, призводить до того, що на етапі створення машинного коду програма-компілятор не може виділити для всієї структури в цілому ділянку пам’яті фіксованого розміру, а також не може зіставити з окремими компонентами структури конкретні адреси. Для вирішення проблеми адресації динамічних структур даних використовується метод, званий динамічним розподілом пам’яті, тобто пам’ять під окремі елементи виділяється в момент, коли вони «починають існувати» в процесі виконання програми, а не під час компіляції. Компілятор в цьому випадку виділяє фіксований обсяг пам’яті для зберігання адреси динамічно розміщується елемента, а не самого елемента.

Динамічна структура даних характеризується тим що:

  • · Вона не має імені;
  • · Їй виділяється пам’ять в процесі виконання програми;
  • · Кількість елементів структури може не фіксуватися;
  • · Розмірність структури може змінюватися в процесі виконання програми;
  • · В процесі виконання програми може змінюватися характер взаємозв'язку між елементами структури.

Необхідність в динамічних структурах даних зазвичай виникає в наступних випадках.

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

Разом з тим, зв’язне уявлення не позбавлено і недоліків, основними з яких є наступні:

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

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

  • · Односпрямовані (однозв'язні) списки;
  • · Двонаправлені (двузв'язні) списки;
  • · Циклічні списки;
  • · Стек;
  • · Черга;
  • · Бінарні дерева.

Препроцессори

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

#define #elif #else #endif #endregion #error.

#if #line #pragma #region #undef #warning.

Шаблони класів.

Шаблони класів визначають сімейство пов’язаних класів, заснованих на типі аргументів, переданих класу при створенні його примірника.

Шаблони функцій.

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

Обробка виняткових ситуацій.

Блок try використовується програмістами C # для розбиття на розділи коду, який може порушуватися винятком. Пов’язані з ним блоки catch використовуються для обробки можливих винятків. Блок finally, що містить код, що виконується незалежно від того, чи викликано виняток у блоці try, наприклад звільнення ресурсів, виділених блоку try. Блоку try потрібно один або кілька пов’язаних блоків catch або блок finally (або і те, і інше).

Стандартні виключення С++. Альтернативні методи обробки

Фундаментальна ідея обробки помилок полягає в тому, що функція, яка виявила проблему, але не знає як її вирішити, генерує виняток у надії, що викликала її (безпосередньо чи опосередковано) функція зможе вирішити виниклу проблему. Функція, яка хоче вирішувати проблеми даного типу, може вказати, що вона перехоплює такі винятки. Механізм обробки виключень надає альтернативу традиційним методам в тих випадках, коли вони не достатні, чи не елегантні і схильні помилками. Він надає спосіб явного відділення коду обробки помилок від «звичайного» коду, роблячи таким чином програму більш читабельною і краще підходить для різних інструментальних засобів. Механізм обробки виключень надає більш регулярний спосіб обробки помилок, спрощуючи в результаті взаємодія між окремо написаними фрагментами коду.

Огляд стандартної бібліотеки С++

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

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

Так само, як і в С, можливості бібліотек активізуються використанням директиви #include для включення стандартних файлів. Всього в стандарті Сі++ визначено 50 таких файлів.

Загальна характеристика контейнерних класів

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

  • 1) Vector Вектор.
  • 2) List Двозв’язний список.
  • 3) Deque Двостороння черга.
  • 4) Set Множина.
  • 5) Multiset Мультмножина.
  • 6) Map Асоціативний масив, що містить унікальні ключі й значення.
  • 7) Multimap Асоціативний масив, що допускає дублювання ключів і значень.
  • 8) Stack Стек.
  • 9) Queue Черга.
  • 10) Priority_queue Черга із пріоритетом.
  • 11) Bitset Бітовий набір.

Послідовні контейнери

Послідовність — це різновид контейнерів, що містять скінчену множину однотипних об'єктів, упорядкованих у лінійному порядку. У бібліотеці STL передбачено три види послідовних контейнерів: вектор (клас vector), список (клас list) і двостороння черга (клас deque). Крім того, вони є базовими класами для створення більше складних контейнерів — стека (клас stack). Черги (клас queue) і черги із пріоритетом (клас priority_queue), Для кожної з послідовностей передбачений свій набір операцій, але існують операції, загальні для всіх послідовностей.

Асоціативні контейнери

Асоціативні контейнери — це структури даних, що забезпечують швидкий пошук даних по ключі. У стандартній бібліотеці шаблонів передбачено чотири різновиди асоціативних контейнерів: set (множина), multiset (мультимножина), map (асоціативний масив) і multimap (асоціативний мультимасив). Терміни «мультимножина» і «мультимассив» означають, що ці контейнери допускають дублікати елементів, на відміну від множини й масиву, у яких елементи повинні бути унікальними.

Асоціативні контейнери залежать від двох параметрів — Key (ключ) і Compare (відношення повного впорядкування по ключі Key). Класи set і multiset являють собою «вырожденные» асоціативні контейнери, у яких значення не важливі - всі операції здійснюються через ключі. Контейнер класу set повинен складатися з унікальних ключів, а об'єкт класу multiset допускає дублікати. У класах map й multimap зберігаються пари, що складаються з об'єктів довільного типу Т, пов’язаних з об'єктами класу Key.

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

Адаптери стандартних контейнерів

Шаблонові класи vector, list й deque описують всі основні операції над послідовностями. Хоча вони містять досить велику кількість однакових операцій, по своїй структурі й принципам функціонування жоден із цих класів не можна замінити іншим. Завдяки тому, що в класах vector, list й deque реалізовані базові операції, їх можна використати як основу для створення більше складних структур — стеків і черг. Отже, для правильного визначення об'єктів адаптерів послідовностей у програму необхідно включати два заголовки: один повинен містити визначення шаблонового класу адаптера, а іншої - визначення базисного класу.

Алгоритми і функції стандартної бібліотеки

Алгоритм (algorithm) — це визначення обчислювальної процедури. У бібліотеці STL є група функцій, які виконують деякі стандартні дії, наприклад пошук, перетворення, сортування, копіювання тощо. Вони називаються алгоритмами. Параметрами для алгоритмів, зазвичай, служать ітератори. Алгоритму не цікавлять до типу переданого йому ітератора. Головне, щоб останній підпадав під певну категорію. Приміром, якщо параметром алгоритму може бути односпрямованийитератор, то підставляємий ітератор має бути однонаправленим, або двунаправленним, або житератором довільного доступу Функціональний об'єкт (functor) — це заховання функції в об'єкті для використання іншими компонентами.

Достоїнства і недоліки об'єктно — орієнтованого стилю програмування.

Об'єктно-орієнтований підхід має такі переваги, як:

  • · Зменшення складності програмного забезпечення;
  • · Підвищення надійності програмного забезпечення;
  • · Забезпечення можливості модифікації окремих компонентів програмного забезпечення без зміни інших його компонентів;
  • · Забезпечення можливості повторного використання окремих компонентів програмного забезпечення.
  • · Скорочується час на розробку, який може бути віддано іншим завданням.
  • · Компоненти багаторазового використання звичайно містять набагато менше помилок, ніж знову розроблені, адже вони вже не раз піддавалися перевірці.
  • · Коли якийсь компонент використовується відразу декількома клієнтами, поліпшення, що вносяться до його код, одночасно надають позитивний вплив і на безліч працюючих з ним програм.
  • · Якщо програма спирається на стандартні компоненти, її структура і призначений для користувача інтерфейс стають більш уніфікованими, що полегшує її розуміння і спрощує використання.

До недоліків об'єктно-орієнтованого програмування відносяться :

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

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

Показати весь текст
Заповнити форму поточною роботою