Я завжди схильний звинувачувати популярність C у необхідності універсальної мови складання. Це поєднання специфіки на машинному рівні, стандартизація та надзвичайна портативність дозволяють C функціонувати як фактично універсальна мова складання, і тому я підозрюю, що її роль там буде тривати нескінченно.
Я мушу зазначити, що я завжди трохи здивований, коли OOP представлений на курсах програмування як своєрідна «фінальна модель», яка є єдиною можливою кінцевою точкою хорошого програмування. Як і багато інших аспектів програмування, цінність OOP - це компроміс між багатьма конкуруючими факторами, включаючи те, як людський мозок організовує інформацію, як суспільні групи підтримують програмне забезпечення на тривалий термін, а у випадку об'єктно-орієнтованого програмування - деякі досить глибокі аспекти того, як працює сам Всесвіт.
І останній момент варто трохи забити. Читайте далі, якщо ви зацікавлені в дослідженні на фізичному рівні того, чому існують певні стилі програмування, як вони працюють разом і куди може рухатися світ у майбутньому, коли ми далі розширюватимемо такі поняття ...
Об'єктом фізики є все, що підтримує впізнавану узгодженість у часі. Це в свою чергу дозволяє таким простим істотам, як ми, відмовлятися від представлення об'єкта, використовуючи лише невелику кількість біт, не загрожуючи занадто сильному виживанню. Але з точки зору фізики в цілому, кількість речей, які ви повинні отримати точно, щоб зробити таке спрощення легким і поширеним, надзвичайно велике. Як люди, ми не думаємо про все так багато, тому що, відверто кажучи, ми не були б тут, якби не правда.
Звучить занадто абстрактно? Це насправді не так. Уявіть, наприклад, що намагаєтеся пройти дорогу до будинку свого друга, якщо замість автомобілів ви зіткнулися з швидко коливаються плазмовими полями та миттєвими конденсаціями речовини, що рухається з величезним діапазоном швидкостей. Такий сценарій може досить глибоко вирізати можливості соціалізації, так? Нам потрібні об’єкти, ми - об’єкти, а існування об'єктів забезпечує нам величезний і критично важливий рівень спрощення навколишнього середовища.
Тож давайте все це повернемо назад до програмного забезпечення. Що об'єкти в реальному світі повинні сказати про об'єкти з точки зору програмування?
Ну, з одного боку, це означає, що те, що визначає "хороший" об'єкт у програмному забезпеченні, дійсно має полягати в тому, чи тип даних, якими ви обробляєтесь, легко підтримує ідею впізнаваної стійкості з часом .
За допомогою визначення легко розпізнати найпростіші форми ООП. Це ті, хто витягує трохи, використовуючи лише ті дані, які вже "прикріплені" або визначені якимсь реальним, справді фізичним об'єктом, таким як людина, будинок чи машина. Навіть сьогодні це занадто часто є єдиним визначенням об'єктів, які люди отримують на курсах програмного забезпечення. Це дуже погано, адже навіть тривіальні об'єктно-орієнтовані програми потребують більш широкого визначення, ніж це.
Друга і набагато цікавіша категорія об'єктів складається з того, що я назву увічненими подіями реального світу . Під "увічненою" я маю на увазі речі, які принаймні коротко існують як чітко визначена сутність або колекції, що знаходяться в реальному світі, але які потім розсіюються і перестають існувати як фізично значущі колекції. Симпозіум - прекрасний приклад: симпозіум існує недовго, як гідно чітко визначена колекція місць та людей. Але, на жаль, навіть найкращі конференції повинні закінчитися, а окремі частини, що їх створили, переходять до інших заходів.
Але за допомогою комп'ютерів і мереж, ми можемо зробити такий перехідний симпозіум , здається , як довгостроковий об'єкт шляхом захоплення і збереження пам'яті про нього як об'єкт програмного забезпечення. Дуже багато речей, які ми робимо з комп’ютерами та базами даних, є таким видом увіковічнення перехідних подій, завдяки якому ми насправді намагаємось зробити наш справжній Всесвіт багатшим шляхом захоплення та розширення його способами, які фізично неможливо існувати. Наприклад, ви бачили справжню Пандору останнім часом? Такі захоплення та розширення творів реального світу допомагають збагатити та розширити наше власне життя, економіку та вибір чудовими способами. Це для мене серце серця об'єктно-орієнтованого програмування, місце, де воно мало і продовжує мати найвизначніші впливи.
Кінцева категорія ООП складається з об'єктів, які не мають тісного зв’язку із зовнішніми подіями, але натомість є інфраструктуроюнеобхідний для підтримки нашого постійного розширення реальності з використанням увічнених предметів із реального світу. Тут ви можете спуститися аж до (напів) металу комп’ютера, створюючи шматки стійкої реальності, які, як хімічні елементи реального світу, можна швидко поєднувати і цікавими способами будувати нові внутрішні світи. Мобільні обчислення допомогли сприяти зростанню цього виду високо рекомбінаторного підходу, який знову багато в чому імітує рекомбінаторні особливості фізичного світу. Також важко: те, що може здатися хорошим вибором, може виявитись з часом несподівано поганим, як правило, тому, що воно блокує різноманітність та розширення замість того, щоб підтримувати його.
Ця остання категорія також вказує на ризики використання лише однієї моделі для програмування, оскільки, як і в реальному світі, запрограмовані світи також потребують процесів, які недобре відповідають відносно незмінним об'єктам. Земля повна предметів, але Сонце сповнене сильно динамічних потоків енергії, які в кінцевому підсумку необхідні для "руху" об'єктів і діяльності на землі з нижчою енергією. Аналогічно, у створенні обчислювальних світів трапляються випадки, коли ви маєте мати справу з потоками та перетвореннями та швидко мінливими контекстами, які, хоча самі по собі не є подібними до об'єктів, є абсолютно критичними для забезпечення простіших, більш зручних для людини об'єктів, що використовуються на вищих рівнях . Не випадково велика частина програмування, виконаного на рівні ядра, не є помітним як об'єктне, або що воно, як правило, покладається на мови, такі як C, більш орієнтовані на обробку. Це більш глибокі сфери, які доповнюють захоплююче різноманіття, яке ми бачимо вище в світі, створеному комп'ютером.
Інша область, де ООП може піти не так, занадто зосереджена на старих об'єктних концепціях.
Об'єкти в реальному світі, а особливо живі об’єкти, мають абсолютно дивовижний рівень здатності взаємодіяти зі своїм середовищем складними і тонкими способами. Компонентні віджети, які переглядають один одного, роблять певні перевірки сумісності та обґрунтованості, і, можливо, навіть з'ясовують нові способи взаємодії набагато ближче до біологічної концепції об'єктів у реальному світі, ніж це прості рамки та прості схеми успадкування, які ми маємо тенденцію зосередити увагу (зазвичай на необхідність!) на рівні коду. Це одна з областей зростання об’єктів у кібер-світі, тим більше "агент, як" підходи, де реактивність до навколишнього середовища є нормою навіть у межах самого програмування.
І стільки за мою "критику" ООП! І все-таки, я сподіваюся, я зазначив, чому створити більш багатий кіберсвіту означає охопити різноманітність стилів програмування, а не припускати, що "лише один" - це все, що потрібно. Моє відчуття, що насправді цікаві речі ще попереду, як би не було багато що ми зараз робимо!