Об'єктно-орієнтоване програмування: Чому “орієнтоване”?


14

Я пройду більшу частину шляху через ступінь програмування ігор. Це не ступінь інформатики, тому багато теорії ухиляється на користь практичного створення портфоліо і того, що я бачу як навчання JIT, що, очевидно, важливіше в ігровій індустрії. Першим предметом було «Вступ до об’єктно-орієнтованого програмування».

Ця фраза мене не турбувала, поки я не дізнався про різні парадигми програмування (я отримую цей список із https://en.wikipedia.org/wiki/Comppare_of_programming_paradigms ):

  • Імператив
  • Функціональний
  • Процедурний
  • Структурований
  • Керовані подіями
  • Об'єктно-орієнтована
  • Декларативний
  • На основі автоматів

Я розумію, що це не вичерпний перелік, і що не всі ці поняття рівні, і більшість з них навіть не є виключними, але я не розумію, чому більшість з них отримує лише одне слово - імператив; функціональний; декларативний - але коли ми говоримо про програмування з об'єктами, ми повинні уточнити, що ми орієнтуємось навколо цих об'єктів. Чи не можемо ми просто використовувати об’єкти? Чи не можемо ми просто мати об’єкти? Чому вони повинні орієнтувати нас, як нашу керівну зірку?

Дивлячись сюди ( https://en.wikipedia.org/wiki/Object-oriented_programming ), ніде не використовується вживання терміна "орієнтоване" як власного терміна. Пояснюється лише "об'єкт".

Крім того, я бачу з практичних причин, чому використовується подія, керована подіями, оскільки програмування подій - це вже те, що ви робите під час роботи конференції, а автоматичне програмування дозволяє здатися, що ви налаштовуєте робототехнічну лінію роботи, тому це допомагає мати додаткові уточнюючі слова.

Що робить об’єктне програмування як фразу недостатньою для опису того, що ми робимо, коли використовуємо об’єкти в нашому програмуванні?

Очевидно з мого тону я не надто люблю слово "орієнтоване". Це нагадує мені про свій час як судового репортера, слухаючи, як адвокат після того, як адвокат вживає словосполучення "по відношенню до" як свого роду словесну галочку. Це нічого не означало; це був просто термін, який вони використовували для заповнення повітря, намагаючись придумати, що сказати далі. Однак я не намагаюся виступати за зміну мови, просто запитую, чому це так. Якщо хтось знає, чому це стало відомо саме з чисто історичних, руйнівних причин, то це відповідь. Це буде боєприпаси, якщо я коли-небудь вирішу витрачати свій час на захист мови.

З іншого боку, якщо насправді є корисна причина того, чому мова чи фрагмент коду повинен вказувати на об'єкти, на виключення всіх інших напрямків, на відміну від того, щоб вони мали їх на своєму інструментосмузі, як інструменти , я б справді був зацікавлені дізнатися про це. Мені подобається вивчати корисні речі.


11
Я здогадуюсь, що "Об'єктивно" чи "Об'єктивно" не створили б правильного враження про те, що насправді мається на увазі ;-)
Doc Brown

Я вважав "об'єктивованим", але вирішив, що теж може дати невірні вібрації.
Ексклюзивний


1
Я думаю, що "об'єкт" є помилкою, а не "орієнтованим". Те, що ми називаємо об'єктно-орієнтованим, як правило, орієнтоване на клас.
Steve314

1
Будь-які вболівальники Phoenix Wright хочуть просто назвати це "ОБ'ЄКТ !! Програмування"?
Katana314

Відповіді:


24

Я вважаю , що ви читаєте шлях надто багато в просту граматичну конструкцію. Погляньте на ваш список парадигм, відсортованих по-різному з тієї причини, яку ми незабаром отримаємо:

  • Імператив
  • Функціональний
  • Процедурний
  • Структурований
  • Декларативний
  • Керовані подіями
  • На основі автоматів
  • Об'єктно-орієнтована

Які всі слова мають спільне? Всі вони прикметники, тому що вони призначені для зміни слова "програмування". Крім того, за винятком "імперативу", всі вони не є "природними" прикметниками, а "прикріпленими" іменниками - іменниками, які фактично описують ядро ​​парадигми: функція, структура, автомати та об'єкт.

І є два різні способи прикріплення іменників: через суфікс на зразок -al чи -ed, або через створення складеного слова за допомогою дефісу. Тепер, як зазначив Док Браун, суфікси, які можна було б використати для прикріплення "об'єкта", мають інше значення. Який склад листя.

І я стверджую, що це чистий збіг чи смак, що Алан Кей вирішив використовувати «орієнтований» для свого складеного прикметника «об’єктно-орієнтований». Це так само могло бути "керованим об'єктом" або "об'єктно-орієнтованим", і ви можете занадто багато читати в них. Не звучить чи «загнаний» як якась нездорова одержимість?


1
Відмінний момент (хоча я думаю, ви маєте на увазі прикметники, а не прислівники - «програмування» в цьому контексті є іменником).
JW01

@ JW01: ой, ви праві
Майкл Боргвардт

Це насправді дуже хороший момент - слово "орієнтоване" надає фразі різного значення "об'єктному програмуванню", оскільки слово "об'єкт" саме по собі не є прикметником. Власне, я б сказав, що причина «орієнтованості» була обрана в інших словах саме для алітерації. Крім того, я нічого не читав у цьому, я перебільшував, щоб сказати, що це слово "орієнтоване", яке сидить там абсолютно незрозуміло і не викликає сумнівів у літературі, що змусило мене замислитися, чи справді щось робить, щоб заробити своє місце . : P
Ексклюзивний

Цікаво, чому він не вибрав одержимих предметами ... о так, це лише ті завзятці, які не знають, коли зупинитись. ;-)
Дедуплікатор

Є одна книга польського автора Єжи Грембоса під назвою "Symfonia C ++" ("Симфонія в C ++"), в якій автор намагається цікавим чином вивести певний сенс із цієї фрази: Він каже, що її називають " об'єктно-орієнтована »через те, що код може« зорієнтуватися »відповідно до об’єкта, з яким зараз працює (поліморфна поведінка). Він відрізняє це від мов, в яких існує просто просте поняття "об'єкти" як фрагменти даних. Немає історичних доказів того, що це було первісне значення, але воно цілком пояснене навіть як постфактумне пояснення.
BarbaraKwarc

18

але коли ми говоримо про програмування з об'єктами, ми повинні уточнити, що ми орієнтуємось навколо цих об’єктів. Чи не можемо ми просто використовувати об’єкти? Чи не можемо ми просто мати об’єкти?

Чесно кажучи, це захоплення історії. Функціональне програмування насправді функціонально-орієнтоване програмування, декларативне програмування - це дійсно орієнтоване на декларування програмування ... адже ми просто не використовуємо функції? Чи не можемо ми просто мати функції?

"Об'єктно-орієнтована" краще відкочує язик і є історично вкоріненою.

Орієнтація настає тому, що ми говоримо не про програмування, а про дизайн. Тільки тому, що ми використовуємо об’єкти, або використовуємо функції, або використовуємо події, не означає, що наша методологія проектування виконується шляхом моделювання всіх трьох. Вказавши орієнтацію методології проектування, вона допомагає повідомити програмістам, як вони повинні інтерпретувати та розширювати цю конструкцію - як фокус моделювання забарвлює реалізацію.


Так звучить, як ви говорите, що "об'єктно-орієнтована" - це свого роду політика з надмірною фразою, подібно до того, як "проактивний" має по суті те саме значення, що і "активний", до нього просто додається надмірний префікс впевнений, що слухач не пропускає сенсу.
Ексклюзивний

1
Я думаю, що ви дійсно вдарили нігті в цьому: ми робимо об'єктно-орієнтований дизайн, і саме тому мови орієнтовані на об'єкти - щоб ми могли виразити цю конструкцію.
К.Стефф

1
@Excrubulent Ні, додавання "орієнтованого" робить його більш конкретним. "Об'єктно-орієнтована" означає, що ми не обговорюємо конкретику щодо об'єктів програмування, а замість того, як проектувати програми, щоб вони використовували об'єкти осмислено. "Об'єктне програмування", "функціональне програмування" або "програмування декларацій" означатиме конкретно розмову про ці конкретні реалізації концепції замість принципів проектування. "Функціональний" і "декларативний" - це слова з суфіксами, які намагаються передати одне і те ж значення, але для об'єктів "об'єктивний" або "об'єктивний" не мали б великого сенсу.
Іларі Каясте

І як відповів Майкл Боргвардт , слово "орієнтоване" жодним чином не є особливим. Це також можна «керувати» або «базуватись». Важливим моментом є те, що це не могло бути "об'єктним програмуванням". (Добре, що лагуанг завжди текучий, так що це могло б бути , але це було б не так описово.)
Іларі Каясте

Я змінив відповіді, тому що відповідь Майкла Боргвардта насправді пояснює значення цього слова та те, як воно змінює фразу.
Ексклюзивний

2

Називаючи це, що допомагає пояснити, що об'єкти є дуже важливою частиною парадигми.

Об'єктно-орієнтоване програмування має своє коріння в Simula , що по суті було ALGOL плюс деякі нові функції програмування об'єктів. І відповідно до цієї історії, навіть сьогодні в багатьох мовах (навіть "чистих мовах ОО") цілком можливо кодувати щось, що є по суті лише процедурною програмою з деякими об'єктами. Але це вважається поганим стилем більш досвідчених розробників.

Насправді робити щось "об'єктно-орієнтованим способом" сильно відрізняється від "процедурного способу". Найважливіша концепція - використання спадщини та поліморфізм. Коли ви по-справжньому розумієте та інтерналізуєте спосіб роботи класів та віртуальних методів, це відкриваючий досвід, який змінює спосіб написання коду у багатьох випадках, істинна зміна парадигми. (Припустимо, звичайно, що ви спершу почали писати процедурний код. Багато студентів сьогодні відвідують Java або C # як першу мову, і IMO вони пропускають дійсно розуміти переваги ОО, роблячи це.)

Ми називаємо це об’єктно-орієнтованим програмуванням, оскільки програма, написана в OO-стилі, не містить просто об'єктів; структура всієї програми базується навколо них та навколо способу їх роботи.


Це аналогічна відповідь до Теластіна, за винятком того, що ви, мабуть, натякаєте на те, що "об'єктно-орієнтоване програмування" як термін насправді принципово відрізняється від "об'єктного програмування". Чи можете ви пояснити, чим вони можуть бути різними? Я маю на увазі, мені здається, що OOP є досить вільним терміном, що ОП також буде виконувати ту ж функцію.
Ексклюзивний

2
Багато студентів сьогодні відвідують Java або C # як першу мову, і IMO вони пропускають, щоб дійсно зрозуміти переваги ОО, роблячи це. - Насправді я почав працювати на C ++, і в своєму першому завданні я використовував суміш об'єктів і функцій, але був відзначений для мого використання функцій. Деякі з цих функцій були суто функціональними і взагалі не отримували користі від інкапсуляції в об'єкті, але інші, які брали покажчики на змінні для роботи (тобто: модифіковану інформацію про стан), стали набагато простішими для здійснення та виклику, коли вони були в об'єкті, тому я бачив обидві його сторони.
Ексклюзивний
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.