дій;
2) визначення загальної спрямованості дій;
3) визначення конкретних дій;
4) виконання дій;
5) сприйняття нового стану системи;
6) інтерпретація стану системи;
7) оцінка результату.
З цього списку стає видно, що процес роздуми займає майже весь час, протягом якого користувач працює з комп'ютером, у всякому разі шість із семи етапів повністю зайняті розумовою діяльністю. Відповідно, підвищення швидкості цих роздумів приводить до істотного поліпшення швидкості роботи.
На жаль, істотно підвищити швидкість власне мислення користувачів неможливо. Тим не менш, зменшити вплив факторів, що уповільнюють процес мислення, цілком можливо. Очевидно, що значення етапу проектування інтерфейсу додатку важко переоцінити. На ньому закладаються основні концепції системи, її структури, а також виділяються об'єкти для проектування класів.
3. Дослідження еволюції об'єктно-орієнтованих мов програмування
Першим об'єктно-орієнтованою мовою був Simula - 67. Його ідеї та концепції лягли в основу наступних об'єктно-орієнтованих мов програмування. Тобто мова Simula - 67 є тим «паттерном», з якого починається ТРВЗ-еволюція ООП. Мова Simula - 67 був побудований на основі мови Algol - 60 [4]. Особливістю Simula - 67 є наявність у об'єкта параметрів. Simula-об'єкт - це програмна компонента, що характеризується деякими атрибутами (даними і процедурами) і здатна виконувати певні дії, описувані її правилами дій.
Мова можна охарактеризувати набором механізмів реалізації об'єктно-орієнтованих можливостей (рис. 2). Simula - 67 виступає «первістком» ООП, і набір механізмів в мові не можна назвати ідеальним. Зі збільшенням складності розв'язуваних об'єктно-орієнтованих завдань розробники зіткнулися з низкою суперечностей.
У мові для виконання однотипних операцій з різними типами даних використовуються різні функції, тобто зі збільшенням кількості типів даних неприпустимо збільшується кількість функцій, що позначають одне і те ж дію (протиріччя 1).
Рис. 2. Фрейм мови Simula - 67 і становище мови Simula - 67 на S-подібної кривої
Також суттєвими недоліками мови є відсутність коштів для налагодження програми і необхідність виконання певного алгоритму дій для запуску програми. При налагодженні великих додатків на виконання цього алгоритму і пошук причини помилки, що не виявленої компілятором, витрачається багато часу, тобто зі збільшенням складності розробляється ПО неприпустимо збільшується час на налагодження програми (протиріччя 2). Також такі помилки призводять до аварійного завершення програми. І чим більше обсяг коду, тим більша ймовірність пропустити подібну помилку, тобто зі збільшенням обсягу коду неприпустимо знижується надійність програми (протиріччя 3).
Крім того, при реалізації механізму одиночного успадкування в мові виникає протиріччя: зі збільшенням кількості можливих класів-батьків неприпустимо збільшується обсяг дубльованих даних (протиріччя 4).
Перераховані вище та інші суперечки були розв'язані у мовах Smalltalk - 80, С ++, Eiffel.
Основна особливість мови Smalltalk (рис. 3) в тому, що всі змінні є об'єктами, взаємодія між якими відбувається через обмін повідомленнями. Класи зберігаються в дереві класів і зв'язані відношенням успадкування. При цьому будь-який клас є об'єктом класу більш високого порядку. Написання програми на мові Smalltalk полягає в послідовному зміні стану її об'єктів [13]. Використання механізму компіляції в проміжне представлення дозволяють запускати програму на апаратних платформах, де підтримується віртуальна машина Smalltalk.
Рис. 3. Фрейм мови Smalltalk і становище мови Smalltalk на S-подібної кривої
Частина протиріч Simula - 67 була дозволена в мові Smalltalk - 80 наступними інструментами ТРИЗ. Наприклад, при використанні прийому «універсальності» в мову була додана можливість перевантаження операторів, тобто можливість одночасного існування в одній області видимості декількох різних варіантів застосування оператора, мають одне і те ж ім'я, але розрізняються типами параметрів, до яких вони застосовуються (рішення 1.1). За допомогою закону переходу в надсістему створена середу розробки програми, що володіє для користувача інтерфейсом і надає засоби для налагодження програм (рішення 2.1).
Таким чином, у мові з'явилася велика кількість нових механізмів реалізації ООП. Відбулася перша ітерація ТРВЗ-еволюції (рис. 4).
Рис. 4. Перша ітерація ТРВЗ-еволюції механізмів ООП