n="justify"> Незважаючи на те, що в мові Smalltalk - 80 була дозволена частина протиріч Simula - 67, Smalltalk - 80 успадкував ряд протиріч цієї мови.
Далі розглянемо мову С ++ (рис. 5), це один з популярних об'єктно-орієнтованих мов програмування, створена в 1983 році Б. Страуструпом [7]. Результатами створення примірників в мові є просто об'єкти, або оголошення даних. Класи можуть називати один або кілька батьківських класів, забезпечуючи спадкоємство і множинне спадкування відповідно [6]. У С ++ введена можливість опису параметризованих класів і функцій (шаблонів), а також можливість опису обробки виняткових ситуацій в програмі.
Рис. 5. Фрейм мови С ++ і положення мови С ++ на S-подібної кривої
У мові С ++ при використанні прийому «самообслуговування» до мови була додана можливість обробки виняткових ситуацій. Даний механізм призначений для опису реакції програми на помилки під час виконання (рішення 2.2).
При використанні прийому «універсальність» спільно з прийомом «навпаки» до мови була додана можливість опису шаблонів, при ініціалізації яких аргументами виступають типи значень, а не самі значення. В цілому шаблони - засіб мови, призначене для кодування узагальнених алгоритмів без прив'язки до деяких параметрів (рішення 3.1)
При використанні прийому «об'єднання» були введені можливість об'єднання дубльованих параметрів в одному з класів і можливість об'єкту наслідувати декілька класів, тобто з'явився механізм множинного спадкоємства (рішення 4.1).
Таким чином, сталася друга ітерація ТРВЗ-еволюції (рис. 6).
Для мови С ++ також існує низка суперечностей. Наприклад, використання технології множинного спадкоємства породжує проблеми, пов'язані з неоднозначністю вибору з однойменних методів батьківських класів. Наприклад, якщо викликати метод для об'єкта Show () і в класі його бракуватиме, але в класах-батьках буде присутній метод Show (), визначений по-своєму, то який з методів повинен бути викликаний? Таким чином, зі збільшенням кількості класів-предків при множині спадкуванні неприпустимо збільшується неоднозначність вибору однойменних методів (протиріччя 5).
Рис. 6. Друга ітерація ТРВЗ-еволюції механізмів ООП
Далі розглянемо мову Eiffel (рис. 7). Eiffel НЕ мультіпарадігменний мову, він не дозволяє поєднувати в одній програмі кілька стилів. У Eiffel є кілька важливих рис, що підтримують жорсткий стиль програмування, таких як параметризрвані класи, затвердження і винятки.
У мові Eiffel були дозволені не тільки частина протиріч C ++, але і протиріччя попередніх мов.
Так, за допомогою прийому «попереднє дію» були розроблені додаткові оператори, що регулюють порядок спадкування і виклику функцій (рішення 5.1).
Рис. 7. Фрейм мови Eiffel і становище мови Eiffel на S-подібної кривої
Також в мові Eiffel при використанні прийому «попереднє дія» розроблено механізм «Проектування за контрактом», який дозволяє задавати різні типи умов (контракти), що перевіряються під час роботи програми. При порушенні одного з пунктів контракту настає заздалегідь обговорена і погоджена міра (рішення 2.3).
Таким чином, відбулася третя ітерація ТРВЗ-еволюції (рис. 8).
Рис. 8. Третя ітерація ТРВЗ-еволюції механізмів ООП
Аналогічно були проаналізовані наступні популярні об'єктно-орієнтовані мови: Python; Java; Delphi; Perl 6; C #; Scala; PHP; Objective C; Ruby.
Загальна ТРВЗ-еволюційна карта механізмів ООП представлена ??на рис. 9.
Мови Delphi, C #, Scala, PHP, Objective C, Ruby не відображені на ТРВЗ-еволюційної карті в зв'язку з тим, що суперечності, які були дозволені в цих мовах, не зачіпають об'єктно-орієнтований підхід або вдосконалюють реалізацію вже існуючих механізмів ООП.
Рис. 9. ТРВЗ-еволюційна карта механізмів ООП
Використання даної карти дозволить істотно підвищити ефективність навчання за рахунок систематизації знань, в даному випадку - знань про механізми реалізації об'єктно-орієнтованих можливостей у різних мовах програмування.
З урахуванням критерію оцінки ступеня реалізації об'єктно-орієнтованих можливостей була побудована S-подібна крива (рис. 10), яка наочно показує, як змінювалася ступінь реалізації об'єктно-орієнтованих можливостей у різних мовах програмування. Сірим виділені мови, що не внесли внесок у розвиток цих можливостей.
Рис. 10. S-подібна крива для об'єктно-орієнтованих мов програмування
Проведений аналіз об'єк...