Объектно-ориентированное программирование: почему «ориентировано»?


14

Я прошел большую часть учебного курса по программированию игр. Это не степень в области компьютерных наук, поэтому большая часть теории отвергается в пользу практического создания портфолио и того, что я вижу как обучение JIT, которое, очевидно, более важно в игровой индустрии. Первым предметом была «Введение в объектно-ориентированное программирование».

Эта фраза не беспокоила меня, пока я не узнал о различных парадигмах программирования (этот список я получаю по адресу https://en.wikipedia.org/wiki/Comparison_of_programming_paradigms ):

  • Императив
  • функциональная
  • процедурный
  • Структурированные
  • Event-Driven
  • Объектно-ориентированный
  • декларативный
  • Автоматного

Я понимаю, что это не исчерпывающий список, и что не все эти понятия равны, и большинство из них даже не являются исключительными, но я не понимаю, почему большинство из них получают только одно слово - императив; функциональная; декларативный - но когда мы говорим о программировании с объектами, мы должны уточнить, что мы ориентируемся вокруг этих объектов. Разве мы не можем просто использовать объекты? Разве мы не можем просто иметь объекты? Почему они должны ориентировать нас как нашу путеводную звезду?

Глядя здесь ( https://en.wikipedia.org/wiki/Object-oriented_programming ), нигде не используется термин «ориентированный», рассматриваемый как его собственный термин. Только «объект» объясняется.

Кроме того, по практическим причинам я вижу, почему используется Event-Driven, потому что Event Programming - это уже то, что вы делаете, когда вы проводите конференцию, а Automata Programming делает его похожим на то, что вы настраиваете автоматизированную производственную линию, так что это помогает иметь дополнительные уточняющие слова там.

Что делает объектное программирование, как фразу, недостаточно для описания того, что мы делаем, когда мы используем объекты в нашем программировании?

Очевидно, из моего тона я не слишком люблю слово «ориентированный». Это напоминает мне о том, что я работал в качестве судебного репортера и слушал, как адвокат после того, как адвокат использовал фразу «по отношению к», как своего рода словесный тик. Это ничего не значило; это был просто термин, который они использовали, чтобы наполнить воздух, пытаясь придумать, что сказать дальше. Однако я не пытаюсь защищать смену языка, я просто спрашиваю, почему это так. Если кто-то знает, почему это так стало известно по чисто историческим, рудиментарным причинам, тогда это ответ. Это будут боеприпасы, если я когда-нибудь решу тратить свое время на пропаганду смены языка.

С другой стороны, если есть на самом деле полезная причина того, почему язык или фрагмент кода должны указывать на объекты, исключая все другие направления, а не просто располагая их в своем инструментальном поясе в качестве инструментов , я действительно был бы интересно узнать об этом. Мне нравится изучать полезные вещи.


11
Я думаю, что «Объективно» или «Возражающий» не дали бы правильного впечатления о том, что на самом деле означает ;-)
Док Браун

Я подумал «Объективизировано», но решил, что это может испустить и неправильные вибрации.
Мучительный


1
Я думаю, что «объект» - это ошибка, а не «ориентированный». То, что мы называем объектно-ориентированным, обычно ориентировано на класс.
Steve314

1
Любые поклонники Феникса Райта хотят просто назвать это «ЗАДАНИЕ !! Программирование»?
Katana314

Ответы:


24

Я считаю , что вы читаете путь слишком много в простую грамматическую конструкцию. Взгляните на ваш список парадигм, отсортированных по разным причинам, по которым мы скоро доберемся:

  • Императив
  • функциональная
  • процедурный
  • Структурированные
  • декларативный
  • Event-Driven
  • Автоматного
  • Объектно-ориентированный

Что общего у всех этих слов? Все они прилагательные, потому что они предназначены для изменения слова «программирование». Кроме того, за исключением «императива», все они не «естественные» прилагательные, а «прилагательные» существительные - существительные, которые на самом деле описывают ядро ​​парадигмы: функция, структура, автоматы и объект.

И существуют два разных способа приведения имен существительных: через суффикс, такой как -al или -ed, или путем создания составного слова с использованием дефиса. Теперь, как отметил Док Браун, суффиксы, которые можно использовать для приписывания «объекта», приводят к другому значению. Который оставляет композицию.

И я утверждаю, что это чистое совпадение или вкус, что Алан Кей решил использовать «ориентированный» для своего составного прилагательного «объектно-ориентированный». С таким же успехом он мог быть «объектно-управляемым» или «объектно-ориентированным», и вы могли бы слишком много прочесть в них. Разве «вождение» не звучит как нездоровая одержимость?


1
Отличное замечание (хотя я думаю, что вы имеете в виду прилагательные, а не наречия - «программирование» в данном контексте является существительным).
JW01

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

Это на самом деле очень хороший момент - слово «ориентированный» придает фразе «смысл», потому что слово «объект» само по себе не является прилагательным. На самом деле, я бы сказал, что причина, по которой слова «ориентированные» были выбраны другими словами, заключалась в аллитерации. Кроме того , я не читал ничего в нем, я преувеличиваю , чтобы сделать пункт , что есть это слово «ориентированный» , что сидит там совершенно необъяснимые и непререкаемым в литературе, что заставило меня задаться вопросом, если он был на самом деле делать что - нибудь , чтобы заработать свое место , : P
Exculbulent

Интересно, почему он не выбрал одержимого объектом ... о да, это только фанатики, которые не знают, когда остановиться. ;-)
Дедупликатор

Есть одна книга польского автора, Ежи Гребоша, под названием «Symfonia C ++» («Симфония в C ++»), в которой автор пытается осмыслить эту фразу интересным способом: он говорит, что она называется « объектно-ориентированный "из-за того, что код может" ориентироваться "в соответствии с объектом, с которым он в данный момент работает (полиморфное поведение). Он отличает это от языков, в которых есть просто понятие «объекты» как фрагменты данных. Нет исторических свидетельств того, что это было первоначальное значение, но оно довольно объяснительно даже в качестве постфактумного объяснения.
BarbaraKwarc

18

но когда мы говорим о программировании с объектами, мы должны уточнить, что мы ориентируемся вокруг этих объектов. Разве мы не можем просто использовать объекты? Разве мы не можем просто иметь объекты?

Честно говоря, это пережиток истории. Функциональное программирование - это действительно функционально-ориентированное программирование, декларативное программирование - это действительно декларируемо-ориентированное программирование ... в конце концов, разве мы не просто используем функции? Разве мы не можем просто иметь функции?

«Объектно-ориентированный» лучше скатывается с языка и исторически укоренился.

«Ориентация» возникает потому, что мы говорим не о программировании, а о дизайне. Тот факт, что мы используем объекты, или используем функции, или используем события, не означает, что наша методология проектирования выполняется путем моделирования всех трех. Определяя ориентацию методологии проектирования, она помогает сообщить программистам, как они должны интерпретировать и расширять этот дизайн - как фокус моделирования окрашивает реализацию.


Похоже, вы говорите, что «объектно-ориентированный» является своего рода политическим заявлением с избыточной формулировкой, точно так же, как «проактивный» имеет по существу то же значение, что и «активный», просто к нему добавлен избыточный префикс, чтобы сделать уверен, что слушатель не пропустит смысл
Мучительный

1
Я думаю, что вы действительно достигли цели: мы занимаемся объектно-ориентированным дизайном, и поэтому языки являются объектно-ориентированными - чтобы мы могли выразить этот дизайн.
К.Стефф

1
@Excrubulent Нет, добавление «ориентированного» делает его более конкретным. «Объектно-ориентированный» означает, что мы обсуждаем не особенности программных объектов, а то, как разрабатывать программы, чтобы они осмысленно использовали объекты. «Объектное программирование», «программирование функций» или «программирование деклараций» будет означать конкретный разговор о реализации этих конкретных концепций вместо принципов проектирования. «Функциональный» и «декларативный» - это слова с суффиксами, которые пытаются передать то же значение, но для объектов «объективный» или «объективный» не имеет большого смысла.
Илари Каджасте

И, как ответил Майкл Боргвардт , слово «ориентированный» не является чем-то особенным. Он также может быть «управляемым» или «основанным». Важным моментом является то, что это не может быть «объектное программирование». (Ну, язык всегда изменчив, так что это может быть , но это не будет так наглядно.)
Илари Каджасте

Я поменял ответы, потому что ответ Майкла Боргвардта на самом деле объясняет значение слова и то, как оно изменяет фразу.
Мучительный

2

Называя его, это помогает объяснить, что объекты являются очень важной частью парадигмы.

Объектно-ориентированное программирование имеет свои корни в Simula , который по сути был ALGOL плюс некоторые новые функции объектного программирования. И в соответствии с этой историей даже сегодня во многих языках (даже в «чистых ОО-языках») вполне возможно кодировать что-то, что по сути является процедурной программой с некоторыми объектами в ней. Но это считается плохим стилем более опытными разработчиками.

На самом деле делать что-то «объектно-ориентированным способом» очень отличается от «процедурного пути». Наиболее важной концепцией является использование наследования и полиморфизма. Когда вы по-настоящему понимаете и усваиваете работу классов и виртуальных методов, это откровенный опыт, который во многих случаях меняет способ написания кода, что является настоящей сменой парадигмы. (Предполагая, конечно, что вы начали писать процедурный код в первую очередь. Многие студенты в наши дни переходят прямо на Java или C # в качестве первого языка, и IMO упускают возможность по-настоящему понять преимущества ОО, делая это.)

Мы называем это объектно-ориентированным программированием, потому что программа, написанная в стиле ОО, не просто содержит объекты; структура всей программы основана на них и на том, как они работают.


Это аналогичный ответ Теластина, за исключением того, что вы, похоже, подразумеваете, что «объектно-ориентированное программирование» как термин на самом деле принципиально отличается от «объектного программирования». Можете ли вы объяснить, как они могут отличаться? Я имею в виду, что мне кажется, что ООП - это достаточно свободный термин, чтобы ОП также выполняла ту же функцию.
Мучительный

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