Реалізація концепції контейнерів і ітераторів на прикладі односпрямованого пов'язаного списку
ЗМІСТ
ВСТУП
Глава 1. Проектування класів
. 1 Формалізація завдання
1.2 Проектування абстракції даних
. 3 Визначення семантики класів
. 4 Визначення відносин між класами
Глава 2. Реалізація
2.1 Реалізація класу TList
. 2 Реалізація класу TBasicIterator
. 3 Реалізація класу TArrayIterator
. 4 Реалізація класу TLineIterator
. 5 Реалізація класу TReverseIterator
. 6 Реалізація класу TListException
Глава 3. Результати
ВИСНОВОК
СПИСОК ЛІТЕРАТУРИ
ДОДАТОК
ВСТУП
Об'єктно-орієнтована парадигма програмування не нова. Її витоки сягають симула - 67, хоча перша вперше вона була повністю реалізована в Smalltalk - 80. ООП (Об'єктно-орієнтоване програмування) набуло популярності у другій половині 80-х разом з такими мовами, як С ++, Objective C (інше розширення C), Object Pascal і Turbo Pascal, CLOS (обектно-орієнтоване розширення Lisp'a), Eiffel, Ada (у її останніх втіленнях) і недавно - в Java. У цій статті увагу зосереджена на C ++, Object Pascal і Java, іноді згадуються і інші мови.
Ключові риси ООП добре відомі:
Перша - інкапсуляція - це визначення класів - користувацьких типів даних, які об'єднують свій вміст в єдиний тип і реалізують деякі операції або методи над ним. Класи зазвичай є основою модульності, інкапсуляції і абстракції даних в мовах ООП.
Друга ключова риса, - успадкування - спосіб визначення нового типу, коли новий тип успадковує елементи (властивості і методи) існуючого, модифікуючи або розширюючи їх. Це сприяє вираженню спеціалізації і генералізації.
Третя риса, відома як поліморфізм, дозволяє одноманітно посилатися на об'єкти різних класів (зазвичай усередині деякої ієрархії). Це робить класи ще зручніше і полегшує розширення і підтримку програм, заснованих на них.
Інкапсуляція, успадкування і поліморфізм - фундаментальні властивості, якими повинен володіти мова, що претендує називатися об'єктно-орієнтованим (мови, що не мають успадкування та поліморфізму, але мають лише класи, зазвичай називаються заснованими на класах). Різні ГО мови використовують зовсім різні підходи. Ми можемо розрізняти ГО мови, порівнюючи механізм контролю типів, здатність підтримувати різні програмні моделі і те, які об'єктні моделі вони підтримують.
Алан Кей свого часу вивів п'ять основних рис мови Smalltalk - першого вдалого ГО мови:
Всі є об'єктом. Об'єкт як зберігає інформацію, так і здатний її перетворювати. В принципі будь-який елемент розв'язуваної задачі (будинок, собака, послуга, хімічна реакція, місто, космічний корабель і т.д.) може являти собою об'єкт. Об'єкт можна уявити собі як швейцарський ніж: він є набором різних ножів і «откривашек» (зберігання), але в той же самий час їм ми можемо різати або відкривати що-небудь (перетворення).
Кожен об'єкт має свою власну «пам'ять» складається із інших об'єктів. Таким чином, програміст може приховати складність програми за досить простими об'єктами. Приміром, будинок (досить складний об'єкт) складається з дверей, кімнат, вікон, проводки та опалення. Двері, в свою чергу, може складатися з власне двері, ручки, замку і петель. Проводка теж складається з проводів, розеток і, наприклад, щитка.
У кожного об'єкта є тип. Іноді тип називають ще й класом. Клас (тип) визначає які повідомлення об'єкти можуть посилати один одному. Наприклад, акумуляторна батарея може передавати електролампи струм, а ось момент або фізичне зусилля - ні.
Всі об'єкти одного типу можуть отримувати однакові повідомлення. Приміром, у нас є 2 об'єкта: синя і червона гуртки. Обидві різні за формою і матеріалом. Але з обох ми можемо пити (чи не пити, якщо вони порожні). В даному випадку гуртка - це тип об'єкта.
Самое лаконічний опис об'єкта запропонував Буч: «Об'єкт має статки, поведінкою і індивідуальністю».
Глава 1. Проектування класів
1.1 Формалізація завдання
Дл...