Міністерство освіти і науки України
Дніпропетровський національний університет
Факультет фізики, електроніки та комп’ютерних систем
Курсова робота
з дисципліни
об’єктно-орієнтовне програмування
на тему: "Розробка власного класу String"
Виконав:
ст. гр. РС-05-1
Тимощенко П.А.
Перевірив:
доц. Вовк С.М.
Дніпропетровськ 2007
Содержание
1.1 Введення в об’єктно-орієнтовну технологію
1.3 Доступ до елементів структури
1.4 Використання визначеного користувачем типу Time за допомогою Struct
1.5 Використання абстрактного типу даних Time за допомогою класу
1.6 Область дії клас і доступ до елементів класу
1.11 Небезпека збільшення розміру програми
1.12 Константні об'єкти й функції-елементи
1.14 Ядро ООП: Успадкування та поліморфізм
1.14.3 Конструктори й деструктори
1.14.8 Множинне входження базового класу
1.14.9 Вирішення неоднозначності
1.14.10 Віртуальні базові класи
1.14.13 Доступ до базових класів
1.14.15 Віртуальні конструктори
1.15.2 Бінарні й унарні операції
1.15.3 Операторні функції й типи користувача
1.15.5 Присвоювання й ініціалізація
1.15.7 Перевантаження операцій помістити в потік і взяти з потоку
2. Розробка власного класу clsString
2.1 Загальний алгоритм вирішення
Розробити клас classString, на основі якого можна створювати об'єкти типу "рядок символів". Цей клас повинен надавати можливість створення програм, в яких реалізуються обробка рядків символів. В класі повинні бути визначені методи присвоєння рядків, додавання рядків, вставки рядка в рядок з заданого місця та вилучення певної кількості символів з рядка, звертання до окремого елементу рядка, операції відношень для порівняння рядків (більше, менше, рівно, нерівно), операції вставки рядка в потік введення/виведення та його вилучення з потоку, метод визначення довжини рядка, тощо. Розробку виконувати в середовищі Borland C++ Builder або MS Visual Studio C++.
Подивіться навколо себе на реальній світ. Куди б ви не подивились завжди знаходяться об’єкти! Люди, тварини, рослини, автомобілі, літаки, комп’ютери і тощо. Людина кумекає в термінах об’єктів. Мі володіємо чудовою можливістю абстрагувати, що дозволяє нам бачити картинки на екрані (людей, дерева, літаки) саме у вигляді об’єктів, а не у вигляді окремих кольорових точок.
Як би ми не класифікували ці об’єкти, всі вони мають спільні атрибути: форма, колір, маса тощо. Кожен з них має свій набір рухів, наприклад, м’яч котиться, підстрибує, спускає, дитина кричить, сміється, спить, їсть, блимає очима тощо.
Людство пізнає об’єкти шляхом вивчення їх атрибутів. Різні об’єкти можуть мати багато однакових атрибутів та представляти схожу поведінку.
Об’єктно-орієнтовне програмування (ООП) моделює об'єкти реального світу за допомогою програмних аналогів. Це приводить до появи відносин класів, коли об'єкти певного класу - такого, як клас засобів пересування - мають однакові характеристики. Це висуває відносини спадкування й навіть відносини множинного спадкування, коли знову створювані класи здобувають наслідувані характеристики існуючих класів, а також містять свої власні унікальні характеристики. Об'єкти класу автомобілів з відкидним верхом виразно мають характеристики класу автомобілів, але дах у них відкидається й закривається.
Об’єктно-орієнтовне програмування дає нам найбільш природний і інтуїтивний спосіб розгляду процесу програмування як моделювання реально існуючих об'єктів, їхніх атрибутів і поводження. ООП моделює також зв'язок між об'єктами. Подібно тому, як люди посилають один одному повідомлення (наприклад, сержант, командуючий групі стояти струнко), об'єкти теж зв'язуються один з одним за допомогою повідомлень.
ООП інкапсулює дані (атрибути) і функції (способи поводження) у пакети, називані об'єктами; дані й функції об'єктів тісно взаємозалежні. Об'єкти мають властивість приховування інформації. Це означає, що хоча об'єкти можуть знати, як зв'язатися один з одним за допомогою добре визначених інтерфейсів, вони не знають, як реалізовані інші об'єкти - деталі реалізації заховані всередині самих об'єктів. Безсумнівно, можна ефективно їздити на автомобілі, не знаючи деталей того, як працює його мотор, трансмісія й система вихлопу.
У С та інших мовах процедурного програмування програмування має тенденцію бути орієнтованим на дії, тоді як в C++ програмування прагне бути орієнтованим на об'єкти. У С одиницею програмування є функція. В C++ одиницею програмування є клас, на основі якого в кінцевому результаті створюються екземпляри об'єктів.
Програмісти, що використають С, зосереджені на написанні функцій. Групи дій, що виконують деяке загальне завдання, формуються у вигляді функцій, а функції групуються так, щоб сформувати програму. Дані звичайно важливі в С, але існує думка, що дані призначені в першу чергу для підтримки виконуваних функціями дій. Дієслова в оголошенні системи допомагають програмістові на С при розробці системи визначити набір функцій, які, працюючи спільно, і забезпечують функціонування системи.
Програмісти на C++ зосереджені на створенні своїх власних обумовлених користувачем типів, названих класами. Кожний клас містять дані й набір функцій, які маніпулюють цими даними. Компоненти дані класу називаються даними-елементами (елементами даних). Компоненти функції класу називаються функціями-елементами. Точно так само, як екземпляр вбудованого типу, такого як int, називається змінної, екземпляр певного користувачем типу (тобто класу) називається об'єктом. Програміст використає вбудовані типи як блоки для конструювання певних користувачем типів. В C++ увага фокусується скоріше на об'єктах, чим на функціях. Імена іменники в описі системи допомагають програмістові на C++ при створенні системи визначити набір класів, з яких будуть створені об'єкти, які, працюючи спільно, і забезпечують функціонування системи.
Класи для об’єктів є тим же самим, що і проекти для домів. Можна збудувати багато домів згідно одного проекту, і можна реалізувати багато об’єктів з одного класу. Наприклад, в об’єктно-орієнтовному проектуванні банку клас BankTeller, повинен співвідноситися з класом BankAccount. Ці співвідношення називають асоціативними.
Класи в С++ є природнім продовженням структури struck в мові С. Тому, перш ніж, розглядати специфіку розробки класів на С++, мі розглянемо та побудуємо визначений користувачем тип, оснований на структурі. Недоліки, які ми побачимо при цьому, допоможуть пояснити запис класу.
Структури - це складені типи даних, побудовані з використанням інших типів. Розглянемо наступне визначення структури:
struct Time
{
int hour; // 0-23
int minute; // 0-59
int second; // 0-59
}
Ключове слово struct починає визначення структури. Ідентифікатор Time - тег (позначення, ім'я-етикетка) структури. Тег структури використається при об’явленні змінних структур даного типу. У цьому прикладі ім'я нового типу - Time. Імена, об’явленні у фігурних дужках опису структури - це елементи структури. Елементи однієї й тієї ж структури повинні мати унікальні імена, але дві різні структури можуть містити не конфліктуючі елементи з однаковими іменами. Кожне визначення структури повинне закінчуватися крапкою з комою. Наведене пояснення, як ми незабаром побачимо, вірно й для класів.
Визначення Time містить три елементи типу int - hour, minute і second (годинники, хвилини й секунди). Елементи структури можуть бути будь-якого типу й одна структура може містити елементи багатьох різних типів. Структура не може, однак, містити екземпляри самої себе. Наприклад, елемент типу Time не може бути оголошений у визначенні структури Time. Однак, може бути включений вказівник на іншу структуру Time. Структура, що містить елемент, котрий є вказівником на такий же структурний тип, називається структурою із самоадресацією. Структури із самоадресацією корисні для формування зв'язних структур даних.
Попереднє визначення структури даних не резервує ніякого простору в пам'яті; визначення тільки створює новий тип даних, що використається для об’явлення змінних. Змінні структури об’явленні так само, як змінні інших типів. Об’явлення
Time timeObject, timeArray [10], *timePtr;
повідомляє timeObject змінна типу Time, timeArray - масив з 10 елементів типу Time, a timePtr - вказівник на об'єкт типу Time.