Я читав "Ранню історію Малого розмови", і є кілька згадок про "завдання", які змушують мене поставити під сумнів своє розуміння його значення:
Хоча ООП виходив із багатьох мотивів, два були центральними. Великий масштаб полягав у тому, щоб знайти кращу модульну схему для складних систем, що передбачає приховування деталей, а маленький - знайти більш гнучку версію призначення, а потім спробувати її повністю усунути.
(з 1960-66 рр. - початок ООП та інші формаційні ідеї шістдесятих років , розділ І)
Що я отримав від Simula, це те, що ти тепер можеш замінити прив’язки та завдання цілями . Останнє, що ви хотіли зробити будь-якому програмісту, - це возитися з внутрішнім станом, навіть якщо його зображено образно. Натомість об'єкти повинні бути представлені як сайт поведінки вищого рівня, більш відповідний для використання в якості динамічних компонентів . (...) Прикро, що велика частина того, що сьогодні називається "об'єктно-орієнтоване програмування", - це просто програмування в старому стилі з вигадливішими конструкціями. Багато програм завантажені операціями "стилю призначення", які зараз виконуються за допомогою більш дорогих доданих процедур.
(від стилю "Об'єктно-орієнтований" , розділ IV)
Чи я правильно трактую наміри як те, що об'єкти мають бути фасадами, і будь-який метод (або "повідомлення"), метою якого є встановлення змінної екземпляра на об'єкт (тобто "призначення"), перемагає мету? Здається, що таке тлумачення підтримується двома пізнішими твердженнями в Розділі IV:
Чотири методи, які використовуються разом - стійкий стан, поліморфізм, інстанціювання та методи-цілі для об'єкта - приносять велику частину сили. Жоден із них не вимагає використання «об’єктно-орієнтованої мови» - ALGOL 68 майже може бути перетворений на цей стиль - і OOPL просто фокусує розум дизайнера в певному плідному напрямку. Однак виконання права на інкапсуляцію - це зобов'язання не просто абстрагувати стан, а усунути від програмування метафори, орієнтовані на стан.
... і:
Виписки про призначення, навіть абстрактні, - виражають цілі низького рівня, і для цього потрібно буде більше. Як правило, ми не хочемо, щоб програміст возився зі станом, модельований чи ні.
Чи було б справедливо сказати, що тут заохочуються непрозорі, незмінні випадки? Або це просто прямі зміни стану, які не відволікають? Наприклад, якщо у мене є BankAccount
клас, нормально мати GetBalance
, Deposit
а також Withdraw
екземпляри методів / повідомлень; просто переконайтеся, що немає SetBalance
методу / повідомлення екземпляра?